面向對象與面向過程的本質的區別

https://blog.csdn.net/jerry11112/article/details/79027834

如果你很想搞明白面向對象是什么,面向過程是什么,或者說二者之間的區別是什么,那么就花費一點時間來研讀一下這篇博客,你一定會有很大的收獲的!

一、面向對象與面向過程的區別

面向過程就是分析出解決問題所需要的步驟,然后用函數把這些步驟一步一步實現,使用的時候一個一個依次調用就可以了;面向對象是把構成問題事務分解成各個對象,建立對象的目的不是為了完成一個步驟,而是為了描敘某個事物在整個解決問題的步驟中的行為。

可以拿生活中的實例來理解面向過程與面向對象,例如五子棋,面向過程的設計思路就是首先分析問題的步驟:1、開始游戲,2、黑子先走,3、繪制畫面,4、判斷輸贏,5、輪到白子,6、繪制畫面,7、判斷輸贏,8、返回步驟2,9、輸出最后結果。把上面每個步驟用不同的方法來實現。

如果是面向對象的設計思想來解決問題。面向對象的設計則是從另外的思路來解決問題。整個五子棋可以分為1、黑白雙方,這兩方的行為是一模一樣的,2、棋盤系統,負責繪制畫面,3、規則系統,負責判定諸如犯規、輸贏等。第一類對象(玩家對象)負責接受用戶輸入,并告知第二類對象(棋盤對象)棋子布局的變化,棋盤對象接收到了棋子的變化就要負責在屏幕上面顯示出這種變化,同時利用第三類對象(規則系統)來對棋局進行判定。

可以明顯地看出,面向對象是以功能來劃分問題,而不是步驟。同樣是繪制棋局,這樣的行為在面向過程的設計中分散在了多個步驟中,很可能出現不同的繪制版本,因為通常設計人員會考慮到實際情況進行各種各樣的簡化。而面向對象的設計中,繪圖只可能在棋盤對象中出現,從而保證了繪圖的統一。

上述的內容是從網上查到的,覺得這個例子非常的生動形象,我就寫了下來,現在就應該理解了他倆的區別了吧,其實就是兩句話,面向對象就是高度實物抽象化、面向過程就是自頂向下的編程!

二、面向對象的特點

在了解其特點之前,咱們先談談對象,對象就是現實世界存在的任何事務都可以稱之為對象,有著自己獨特的個性

這里寫圖片描述
屬性用來描述具體某個對象的特征。比如小志身高180M,體重70KG,這里身高、體重都是屬性。
面向對象的思想就是把一切都看成對象,而對象一般都由屬性+方法組成!

屬性屬于對象靜態的一面,用來形容對象的一些特性,方法屬于對象動態的一面,咱們舉一個例子,小明會跑,會說話,跑、說話這些行為就是對象的方法!所以為動態的一面, 我們把屬性和方法稱為這個對象的成員!

:具有同種屬性的對象稱為類,是個抽象的概念。比如“人”就是一類,期中有一些人名,比如小明、小紅、小玲等等這些都是對象,類就相當于一個模具,他定義了它所包含的全體對象的公共特征和功能,對象就是類的一個實例化,小明就是人的一個實例化!我們在做程序的時候,經常要將一個變量實例化,就是這個原理!我們一般在做程序的時候一般都不用類名的,比如我們在叫小明的時候,不會喊“人,你干嘛呢!”而是說的是“小明,你在干嘛呢!”

面向對象有三大特性,分別是封裝性、繼承性和多態性,這里小編不給予太多的解釋,因為在后邊的博客會專門總結的!

三、面向過程與面向對象的優缺點

很多資料上全都是一群很難理解的理論知識,整的小編頭都大了,后來發現了一個比較好的文章,寫的真是太棒了,通俗易懂,想要不明白都難!

用面向過程的方法寫出來的程序是一份蛋炒飯,而用面向對象寫出來的程序是一份蓋澆飯。所謂蓋澆飯,北京叫蓋飯,東北叫燴飯,廣東叫碟頭飯,就是在一碗白米飯上面澆上一份蓋菜,你喜歡什么菜,你就澆上什么菜。我覺得這個比喻還是比較貼切的。

蛋炒飯制作的細節,我不太清楚,因為我沒當過廚師,也不會做飯,但最后的一道工序肯定是把米飯和雞蛋混在一起炒勻。蓋澆飯呢,則是把米飯和蓋菜分別做好,你如果要一份紅燒肉蓋飯呢,就給你澆一份紅燒肉;如果要一份青椒土豆蓋澆飯,就給澆一份青椒土豆絲。

蛋炒飯的好處就是入味均勻,吃起來香。如果恰巧你不愛吃雞蛋,只愛吃青菜的話,那么唯一的辦法就是全部倒掉,重新做一份青菜炒飯了。蓋澆飯就沒這么多麻煩,你只需要把上面的蓋菜撥掉,更換一份蓋菜就可以了。蓋澆飯的缺點是入味不均,可能沒有蛋炒飯那么香。

到底是蛋炒飯好還是蓋澆飯好呢?其實這類問題都很難回答,非要比個上下高低的話,就必須設定一個場景,否則只能說是各有所長。如果大家都不是美食家,沒那么多講究,那么從飯館角度來講的話,做蓋澆飯顯然比蛋炒飯更有優勢,他可以組合出來任意多的組合,而且不會浪費。

蓋澆飯的好處就是”菜”“飯”分離,從而提高了制作蓋澆飯的靈活性。飯不滿意就換飯,菜不滿意換菜。用軟件工程的專業術語就是”可維護性“比較好,”飯” 和”菜”的耦合度比較低。蛋炒飯將”蛋”“飯”攪和在一起,想換”蛋”“飯”中任何一種都很困難,耦合度很高,以至于”可維護性”比較差。軟件工程追求的目標之一就是可維護性,可維護性主要表現在3個方面:可理解性、可測試性和可修改性。面向對象的好處之一就是顯著的改善了軟件系統的可維護性。
  
看了這篇文章,簡單的總結一下!

面向過程

優點:性能比面向對象高,因為類調用時需要實例化,開銷比較大,比較消耗資源;比如單片機、嵌入式開發、 Linux/Unix等一般采用面向過程開發,性能是最重要的因素。
缺點:沒有面向對象易維護、易復用、易擴展

面向對象


優點:易維護、易復用、易擴展,由于面向對象有封裝、繼承、多態性的特性,可以設計出低耦合的系統,使系統 更加靈活、更加易于維護
缺點:性能比面向過程低





https://blog.csdn.net/jerry11112/article/details/79027834

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/382620.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/382620.shtml
英文地址,請注明出處:http://en.pswp.cn/news/382620.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C++ 向上轉型初步01

1.編譯器通過指針來訪問成員變量,指針指向哪個對象就使用哪個對象的數據;編譯器通過指針的類型來訪問成員函數,指針屬于哪個類的類型就使用哪個類的函數。 但是父類 函數如果變成虛函數,子類重寫了這個函數, 那么現象…

虛函數和純虛函數詳解

https://mp.weixin.qq.com/s?__bizMzAxNzYzMTU0Ng&mid2651289202&idx1&sn431ffd1fae4823366a50b68aed2838d4&chksm80114627b766cf31f72018ef5f1fe29591e9f6f4bd72018e7aea849342ca6f0a271fb38465ae#rd 打開鏈接看。轉載文章&#xff0c;注明出處 <p>學…

C++ 繼承中的同名成員的情況01

class Base { public:Base(){this->m_A 100;}void func(){cout << "Base中的Func調用" << endl;}void func(int a){cout << "Base中的Func(int a)調用" << endl;}int m_A; }; class Son : public Base { public:Son(){this-&g…

進程前臺運行后臺運行的相關命令

command& 讓進程在后臺運行jobs 查看后臺運行的進程fg %n 讓后臺運行的進程n到前臺來bg %n 讓進程n到后臺去&#xff1b; ctrl z 可以將一個正在前臺執行的命令放到后臺&#xff0c;并且暫停

西安電子科技大學求職打點

這兩天 一直在西安電子科技大學找工作&#xff0c;感覺自己漸漸失去了學習的狀態&#xff0c;本來很 多會的知識點都已經不會了。   今天休息一天&#xff0c;沒有去招聘會&#xff0c;看了看相關的知識&#xff0c;做了做題。也希望自己盡快恢復學習的感覺&#xff0c;溫故…

C++ 泛型編程模板 之 函數模板初步01

#define _CRT_SECURE_NO_WARNINGS #include<iostream> using namespace std;void mySwapInt(int &a, int &b) {int temp a;a b;b temp; } void mySwapDouble(double &a, double &b) {double temp a;a b;b temp; } //利用模板實現通用交換函數 temp…

grep參數說明及常用用法

grep參數說明及常用用法 查看文件內容 [koulocalhost ~]$ more size.txt b124230 b034325 a081016 m7187998 m7282064 a022021 a061048 m9324822 b103303 a013386 b044525 m8987131 B081016 M45678 B103303 BADc2345 [] : 查看符合范圍內的信息 [koulocalho…

C++ 普通函數與函數模板 區別以及調用規則01

//普通函數 和 函數模板 區別 int myPlus(int a, int b) {return a b; }template<class T> T myPlus2(T a, T b) {return a b; }void test01() {int a 10;int b 20;char c c;cout << myPlus(a, c) << endl; //隱式類型轉換 將 char c轉為 int類型//myP…

C++ 模板的局限性以及解決01

#define _CRT_SECURE_NO_WARNINGS #include<iostream> using namespace std; #include <string>class Person { public:Person(string name, int age){this->m_Name name;this->m_Age age;}string m_Name;int m_Age; };//通過模板進行兩個數據比較 templat…

進程的狀態與種類

● 運行&#xff1a;正占用處理器   ● 就緒&#xff1a;只要獲得處理器即可運行。   ● 阻塞&#xff1a;正等待某個事件&#xff08;如I/O完成&#xff09;的發生。  在不少系統中&#xff0c;還增加了兩種基本狀態&#xff1a;   ● 新狀態&#xff1a;一個進程剛剛…

C++ 類模板語法初步01

#define _CRT_SECURE_NO_WARNINGS #include<iostream> using namespace std; #include <string> //類模板 //template下面緊跟著的內容是類&#xff0c;那么這個類稱為 類模板 // 類模板中的類型 也可以有默認參數 // 泛型編程 類型參數化template<class NAM…

int * p =NULL;和*p =NULL的區別a和a的區別

1.int * p NULL;和*p NULL的區別 1 .int * p NULL int *pNULL&#xff1b;定義一個指針變量p&#xff0c;其指向的內存里面保存的是int類型的數據&#xff1b;再定義變量p的同時把p的值設置為0x00000000&#xff0c; 而不是把*p的值設置為0x00000000 2.*p NULL int i 10&am…

當我們說TCP是可靠協議時,我們真正表達的是什么

轉載出處&#xff1a;https://blog.csdn.net/dog250/article/details/82177299 很明確地說&#xff0c;從通信意義上推敲&#xff0c;TCP一點都不可靠。一個抽象的協議&#xff0c;怎么可能左右介質來保證可靠&#xff0c;不存在的。但凡是經由某種介質的通信行為均不可能是絕對…

IP地址=192.168.127.101,子網掩碼255.255.255.192,計算網絡地址,主機號,廣播地址和主機最大數

純手寫&#xff0c;如果哪寫錯了&#xff0c;還希望指正 IP地址192.168.127.101&#xff0c;子網掩碼255.255.255.192&#xff0c;計算網絡地址&#xff0c;主機號&#xff0c;廣播地址和主機最大數 255.255.255.192子網掩碼轉換成二進制為 11111111.11111111.11111111.11000…

C++ 類模板遇到繼承的問題以及解決

#define _CRT_SECURE_NO_WARNINGS #include<iostream> using namespace std;template<class T> class Base {T m_A; //子類創建時候 必須要知道T的類型&#xff0c;才能給父類中的m_A分配內存 };template<class T1 , class T2> class Son :public Base<T2…

A B C類IP地址的判斷

IP地址131.153.12.71是一個&#xff08;&#xff09;類IP地址。 IP地址分類A類網絡的IP地址范圍為1.0.0.1&#xff0d;127.255.255.254&#xff1b; B類網絡的IP地址范圍為&#xff1a;128.1.0.1&#xff0d;191.255.255.254&#xff1b; C類網絡的IP地址范圍為&#xff1a;1…

linux sshd啟動失敗 sshd re-exec requires execution with an absolute path

sshd 提示 sshd re-exec requires execution with an absolute path提示 需要絕對路徑來執行 sshd&#xff0c; 剛開始學 不知道怎么用絕對路徑來啟動&#xff1f; 以后明白了&#xff0c; 這里再補充上 google 使用 service sshd restart 輸入密碼來啟動

有一個小白程序員,寫了一個只能對5個數字進行排序的函數,現在有25個不重復的數字,

題目&#xff1a;有一個小白程序員&#xff0c;寫了一個只能對5個數字進行排序的函數&#xff0c;現在有25個不重復的數字&#xff0c;請問小白同學最少調用幾次該函數&#xff0c;可以找出其中最大的三個數&#xff1f; A.5 B.6 C.7 D.8 答案&#xff1a;C 解析&#xf…

ubuntu修改ls顯示目錄的顏色

ls查看目錄&#xff0c; 背景是黑色的&#xff0c;目錄顏色是深藍色&#xff0c;基本看不清楚。 解決辦法 因為ubuntu下的/etc/目錄里沒有DIR_COLORS, 所以費了點勁兒。 2. 利用dircolors命令&#xff0c;查看我們的系統當前的文件名稱顯示顏色的值&#xff0c;然后利用管道重…

初始序列為1 8 6 2 5 4 7 3一組數采用堆排序,當建堆(小根堆)完畢時,堆所對應的二叉樹中序遍歷序列為

初始序列為1 8 6 2 5 4 7 3一組數采用堆排序&#xff0c;當建堆&#xff08;小根堆&#xff09;完畢時&#xff0c;堆所對應的二叉樹中序遍歷序列為&#xff1a;&#xff08;&#xff09; 8 3 2 5 1 6 4 7 3 2 8 5 1 4 6 7 3 8 2 5 1 6 7 4 8 2 3 5 1 4 7 6 A