一、前言
如果你總是對面向?qū)ο蠛兔嫦蜻^程傻傻分不清骑篙,這篇博客盡量會用通俗的方式來講解蜕提。
二、面向過程
概念
面向過程是一種以過程為中心的編程思想靶端,面向過程編程是基于“馮·諾依曼”模型的谎势。在這種模型中,程序與變量一起存儲杨名,程序中包含一系列指令脏榆,并把這些指令以函數(shù)的方式組織起來。
特性
自頂向下台谍、逐步求精须喂、模塊化
優(yōu)點(diǎn)
性能比面向?qū)ο蟾撸驗轭愓{(diào)用需要實例化趁蕊,開銷比較大坞生,比較消耗資源。
如單片機(jī)掷伙、嵌入式開發(fā)是己、Linux/Unix等一般采用面向過程開發(fā),因為在它們看來性能是最重要的因素任柜。
缺點(diǎn)
沒有面向?qū)ο笠拙S護(hù)赃泡、易復(fù)用寒波、易擴(kuò)展
(按照面向過程的思想,在解決問題時升熊,各函數(shù)之間是為了這個問題服務(wù)俄烁;而面向?qū)ο蟮乃枷氪戮瑒t是站在提出問題的主體的角度去解決問題璃氢,可將解決這一具體問題的步驟,抽象為解決這一類問題的方法特幔,以后再遇到類似的問題蓖柔,可以復(fù)用解決思路)
三辰企、面向?qū)ο?/h2>
概念
面向?qū)ο笫前慈藗冋J(rèn)識客觀世界的系統(tǒng)思維方式,采用基于對象(實體)的概念建立模型况鸣,模擬客觀世界分析牢贸、設(shè)計、實現(xiàn)軟件的方法镐捧。通過面向?qū)ο蟮睦砟钋彼鳎瑢⒂嬎銠C(jī)軟件系統(tǒng)能與現(xiàn)實世界中的系統(tǒng)一一對應(yīng)。
特性
封裝懂酱、繼承竹习、多態(tài)
(后續(xù)會有文章說明這三個特性)
優(yōu)點(diǎn)
易維護(hù)、易復(fù)用列牺、易擴(kuò)展(在解釋面向過程的缺點(diǎn)時有對面向?qū)ο蟮膬?yōu)點(diǎn)進(jìn)行解釋)
缺點(diǎn)
性能比面向過程低
四整陌、面向過程與面向?qū)ο蟮膮^(qū)別
面向過程是直接將解決問題的步驟分析出來,然后用函數(shù)把步驟一步一步實現(xiàn)瞎领,然后再依次調(diào)用就可以了泌辫;而面向?qū)ο笫菍?gòu)成問題的事物,分解成若干個對象九默,建立對象的目的不是為了完成一個步驟震放,而是為了描述某個事物在解決問題過程中的行為。
面向過程思想偏向于我們做一件事的流程荤西,首先做什么,其次做什么伍俘,最后做什么邪锌。
面向?qū)ο笏枷肫蛴诹私庖粋€人,這個人的性格癌瘾、特長是怎么樣的觅丰,有沒有遺傳到什么能力,有沒有家族病史妨退。
打個比方妇萄,分別求出長方形蜕企、圓形的周長和面積。
面向過程會以冠句,求解數(shù)學(xué)題的思路去思考:
設(shè)定長方形的長和寬分別為x和y轻掩,圓的半徑為r
確定長方形、圓形的周長和面積的算法
編寫出兩個計算周長和面積的函數(shù)
將x懦底、y和r傳入相對應(yīng)的函數(shù)唇牧,求解長方形、圓形的周長和面積
面向?qū)ο?/strong>會以聚唐,描述對象的思路去思考:
對規(guī)則圖形的一般屬性和性質(zhì)進(jìn)行定義丐重,如周長和面積
在規(guī)則圖形的基礎(chǔ)上,創(chuàng)建長方形杆查,描述長方形的屬性和性質(zhì)
在規(guī)則圖形的基礎(chǔ)上扮惦,創(chuàng)建圓形,描述圓的屬性和性質(zhì)
分別創(chuàng)建長方形和圓形的對象亲桦,調(diào)用它們的周長和面積函數(shù)崖蜜,以求解長方形、圓形的周長和面積
面向過程是從細(xì)節(jié)出發(fā)烙肺,將問題細(xì)化為先后步驟纳猪;
面向?qū)ο?/strong>從宏觀出發(fā),重在模擬整個情境中各個要素之間的交互桃笙。
五氏堤、面向?qū)ο蟮奶攸c(diǎn)
在了解其特點(diǎn)之前,咱們先談?wù)剬ο蟛鳎瑢ο缶褪乾F(xiàn)實世界存在的任何事務(wù)都可以稱之為對象鼠锈,有著自己獨(dú)特的個性
屬性用來描述具體某個對象的特征。比如小楊身高178M星著,體重65KG购笆,這里身高、體重都是屬性虚循。
面向?qū)ο蟮乃枷刖褪前岩磺卸伎闯蓪ο笸罚鴮ο笠话愣加蓪傩?方法組成!
屬性屬于對象靜態(tài)的一面横缔,用來形容對象的一些特性铺遂,方法屬于對象動態(tài)的一面,咱們舉一個例子茎刚,小楊會跑襟锐,會說話,跑膛锭、說話這些行為就是對象的方法粮坞!所以為動態(tài)的一面蚊荣, 我們把屬性和方法稱為這個對象的成員!
類:具有同種屬性的對象稱為類莫杈,是個抽象的概念互例。比如“人”就是一類,期中有一些人名姓迅,比如小明敲霍、小紅、小玲等等這些都是對象丁存,類就相當(dāng)于一個模具肩杈,他定義了它所包含的全體對象的公共特征和功能,對象就是類的一個實例化解寝,小明就是人的一個實例化扩然!我們在做程序的時候,經(jīng)常要將一個變量實例化聋伦,就是這個原理夫偶!我們一般在做程序的時候一般都不用類名的,比如我們在叫小明的時候觉增,不會喊“人兵拢,你干嘛呢!”而是說的是“小明逾礁,你在干嘛呢说铃!”
面向?qū)ο笥腥筇匦裕謩e是封裝性嘹履、繼承性和多態(tài)性腻扇,這里小編不給予太多的解釋,因為在后邊的博客會專門總結(jié)的砾嫉!
六幼苛、舉例說明面向過程與面向?qū)ο?/h2>
面向過程——五子棋
1、開始游戲
2焕刮、黑子先走
3舶沿、繪制畫面
4、判斷輸贏
5配并、輪到白子
6括荡、繪制畫面
7、判斷輸贏
8荐绝、返回步驟
9一汽、輸出最后結(jié)果
大家可以看出避消,把上面每個步驟用不同的方法來實現(xiàn)低滩。
面向?qū)ο蟆遄悠?/h3>
面向?qū)ο蟮脑O(shè)計則是從另外的思路來解決問題召夹。
1、黑白雙方恕沫,這兩方的行為是一模一樣的监憎。
2、棋盤系統(tǒng)婶溯,負(fù)責(zé)繪制畫面鲸阔。
3、規(guī)則系統(tǒng)迄委,負(fù)責(zé)判定諸如犯規(guī)褐筛、輸贏等。
第一類對象(玩家對象)負(fù)責(zé)接受用戶輸入叙身,并告知第二類對象(棋盤對象)棋子布局的變化渔扎,棋盤對象接收到了棋子的變化就要負(fù)責(zé)在屏幕上面顯示出這種變化,同時利用第三類對象(規(guī)則系統(tǒng))來對棋局進(jìn)行判定信轿。
可以明顯地看出晃痴,面向?qū)ο笫且怨δ軄韯澐謫栴},而不是步驟财忽。同樣是繪制棋局倘核,這樣的行為在面向過程的設(shè)計中分散在了多個步驟中,很可能出現(xiàn)不同的繪制版本即彪,因為通常設(shè)計人員會考慮到實際情況進(jìn)行各種各樣的簡化紧唱。而面向?qū)ο蟮脑O(shè)計中,繪圖只可能在棋盤對象中出現(xiàn)祖凫,從而保證了繪圖的統(tǒng)一琼蚯。