面向?qū)ο蟮乃枷耄寒a(chǎn)品經(jīng)理需要知道的技術(shù)知識
作為產(chǎn)品經(jīng)理,了解面向?qū)ο笏枷耄玫乩斫忾_發(fā)人員的思維,與開發(fā)人員更好地溝通,實(shí)現(xiàn)產(chǎn)品設(shè)計、開發(fā)過程的流暢。
對于產(chǎn)品經(jīng)理來說,了解了面向?qū)ο蟮乃枷氩艜菀桌斫忾_發(fā)人員的程序思維。系統(tǒng)的構(gòu)建過程就是對象的構(gòu)建過程,了解了這些與程序人員的溝通會更加順暢。程序人員要實(shí)現(xiàn)面向?qū)ο蟮拈_發(fā)(OOP)就要先做好面向?qū)ο蟮脑O(shè)計(OOD),要做好面向?qū)ο蟮脑O(shè)計(OOD)就要先做好面向?qū)ο蟮姆治觯∣OA),只有理解了什么是面向?qū)ο蟮乃枷耄拍芨嗟膮⑴c到產(chǎn)品的分析、設(shè)計、開發(fā)中來,贏得更多的尊重。
90年代的開發(fā)人員是不知道什么是面向?qū)ο蟮模菚r大家還在用BASIC和C語言進(jìn)行開發(fā),程序都是一條條代碼寫出來的,編程也是一件非常苦逼和有技術(shù)含量的事,當(dāng)時硬件的發(fā)展還不夠,開發(fā)人員的關(guān)注點(diǎn)是內(nèi)存的占用率和文件大小。隨著社會的發(fā)展,硬件變得越來越廉價,程序人員的關(guān)注點(diǎn)變?yōu)檐浖膬?yōu)化,軟件開發(fā)思想也從面向過程式的開發(fā)轉(zhuǎn)為面向?qū)ο笫降拈_發(fā)。
面向過程與面向?qū)ο?/h2>
面向過程:面向過程強(qiáng)調(diào)的是“過程”,體現(xiàn)的是操作流程。
如:早上起床的過程,1洗臉、2刷牙、3準(zhǔn)備早餐、4吃早餐、5出門上班。面向過程的開發(fā)思想與人的思維邏輯過程很相似,但不易于了解事物的整體。面向過程的開發(fā)語言有BASIC、C。
面向?qū)ο螅赫劽嫦驅(qū)ο缶拖纫私馐裁词菍ο?,對象是事物存在的?shí)體。
如:人、車、房、鳥等。對象可以劃分為動態(tài)部分和靜態(tài)部分,動態(tài)就是對象的行為,靜態(tài)就是對象的特征。如鳥的飛、叫、吃食,這些是行為;鳥有嘴、翅膀、瓜子,這些是對象的特征,我們把行為叫做方法,把特性叫做屬性。面向?qū)ο蟮拈_發(fā)語言有JAVA、C#等。
面向過程過多的強(qiáng)調(diào)流程,關(guān)注細(xì)節(jié)就容易忽略整體,當(dāng)我們只關(guān)注一個點(diǎn)時是很難了解事物的全貌,不利于大系統(tǒng)的開發(fā)。面向?qū)ο箨P(guān)注的是系統(tǒng)中的實(shí)體及實(shí)體間信息的交互,會更宏觀的了解事物,有利于大系統(tǒng)的開發(fā)。
細(xì)說面向?qū)ο?/h2>
對象就是實(shí)體,在系統(tǒng)中很多實(shí)體是有共性的(相同的特征與行為),把共性抽象出來就產(chǎn)生了“類”,類的具體化就是對象,對象的抽象就是類。
例如,一只大象是一個對象,大象的行為有喝水、走路、吃飯等,特征有長鼻子、四條腿、象牙等,把這些共性抽象成大象類。(類的方法:喝水、走路、吃飯;類的屬性:長鼻子、四條腿、象牙),對于沒有象牙的大象屬于個性化對象,不屬于大象類。軟件工程的一個重要思想就是“高內(nèi)聚、低耦合”,它是判斷設(shè)計好壞的標(biāo)準(zhǔn),應(yīng)用于面向?qū)ο蟮脑O(shè)計,主要是看類的內(nèi)聚性是否高,耦合度是否低。
通過高內(nèi)聚可以更好的增強(qiáng)對象內(nèi)部的粘性,將復(fù)雜性交給對象內(nèi)部解決,對外只需留有接口。對象與對象間的交互信息盡量減少,降低信息的關(guān)聯(lián)性,通過低耦合可以有效的降低對象間的依賴,降低理解成本及交互成本。
面向?qū)ο蟮娜齻€基本特性:封裝、繼承、多態(tài)。
封裝是對象的最重要特性,對象的實(shí)現(xiàn)細(xì)節(jié)都被封裝在類中,對于用戶是隱藏的。
類與類之間通過消息進(jìn)行信息的傳遞,類中對內(nèi)的方法與屬性是私有的,對向的方法與屬性是公有的,只有公有的方法與屬性才能與外部進(jìn)行交互。
如:汽車,用戶是不用關(guān)心汽車發(fā)動機(jī)、制動系統(tǒng)與導(dǎo)航系統(tǒng),用戶是通過方向盤、各種開關(guān)、剎車和油門與汽車進(jìn)行交互,用戶無須了解汽車的工作原理。
繼承是對象的另一個重要特性,類與類之間是可以有繼承關(guān)系的,子類繼承了父類,就擁有了父類的屬性與方法。
圖形類的關(guān)系圖如下:
上面說的繼承,兒子(子類)繼承父親(父類),那么兒子就擁有了父親的所有財產(chǎn)(父類的方法和屬性),兒子可以直接用。但有的東西兒子繼承來了不一定有用,需要根據(jù)兒子的特點(diǎn)改造,如:鳥(父類)有飛行的能力,但有的鳥飛行方式有所不同,像蜂鳥。蜂鳥就可以重寫鳥類的飛行方法,以實(shí)現(xiàn)自己獨(dú)特的飛行方式。繼承可以讓兒子擁有父親的財產(chǎn),那么父親為什么不可以用兒子的財產(chǎn)呢?這就是向后兼容,讓父親(父類)指向兒子(子類),實(shí)現(xiàn)兒子(子類)的方法。
這種向后兼容,父類指向子類并調(diào)用子類的方法就是多態(tài)。多態(tài)實(shí)現(xiàn)了父類指向子類,并可調(diào)用子類的方法,這樣有利于提高程序的擴(kuò)展性和可維護(hù)性。
通過面向?qū)ο蟮姆绞剑尨蟮南到y(tǒng)開發(fā)變?yōu)榭赡?,在系統(tǒng)中將對象抽象成類,再通過繼承與信息交互建立起類與類的關(guān)系,增強(qiáng)了代碼的重用性,減少了重復(fù)性勞動。將復(fù)雜的問題封裝起來,對外只需要暴露出必要的接口,減少信息的交互,增強(qiáng)對象內(nèi)部的內(nèi)聚性,使系統(tǒng)分割清晰,簡單明了。通過多態(tài)性,讓對象增加了更多的可能性,增強(qiáng)對象的擴(kuò)展性及維護(hù)性。通過對象的方式可以把世界看得更加清晰、透徹。
一座大廈的建立需要無數(shù)的磚頭、水泥和鋼筋,它們就是構(gòu)建起這座大廈的對象,磚頭如何燒制的我們不用管,只需要直接使用磚頭對象就好了。
#專欄作家#
老吳,微信公眾號:ChanPinLaoWu,人人都是產(chǎn)品經(jīng)理專欄作家,產(chǎn)品講學(xué)堂自媒體人。十多年軟件行業(yè)從業(yè)經(jīng)驗(yàn),做過軟件開發(fā)、項(xiàng)目管理、產(chǎn)品經(jīng)理,希望在這里能夠與大家分享更多產(chǎn)品經(jīng)驗(yàn)和知識。
本文原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理。未經(jīng)許可,禁止轉(zhuǎn)載。
大神啊,對于技術(shù)小白來說,很生動易懂!可惜不更新了
優(yōu)秀啊 我可以加你微信向你請教學(xué)習(xí)嗎 我的微信號是15093437454
其實(shí)把面向?qū)ο缶幊痰牡谝徽沦N出來就夠了。。。。這不過這里篇幅做了簡化。
推薦PM都去學(xué)一下面向?qū)ο缶幊?。這是后端開發(fā)的基礎(chǔ)。
這篇文章的思路是好的講解思路,但沒有講完,戛然而止的樣子!主題是 需要懂得的技術(shù)知識,思路有了,具體的技術(shù)知識能否穿插在本文的思路中。
同一父類下的子類們可以相互繼承嗎?
好文
這種向后兼容,父類指向子類并調(diào)用子類的方法就是多態(tài)。多態(tài)實(shí)現(xiàn)了父類指向子類,并可調(diào)用子類的方法,這樣有利于提高程序的擴(kuò)展性和可維護(hù)性。
對于方法的重寫和多態(tài)好像不是這樣的。
這個明顯是不滿足java的設(shè)計規(guī)范的,父類調(diào)用子類好神奇的邏輯。
產(chǎn)品應(yīng)該掌握的重要技術(shù)思想,點(diǎn)贊
講的形象生動易懂,而且容易記憶!
當(dāng)初要是教我面向?qū)ο蟮睦蠋熓悄?,我現(xiàn)在也不會去搞設(shè)計
好文
寫過android的,表示看起來無壓力,面向過程,面向?qū)ο?/p>
深入淺出,通俗易懂,文章寫的真棒??!所以懂了以后呢,對實(shí)際產(chǎn)生了什么幫助?
深入淺出,比喻和類比都很恰當(dāng)!
文章寫的挺好,做產(chǎn)品的,確實(shí)應(yīng)了解些技術(shù),這樣有利于同開發(fā)的溝通
寫的真好
感謝分享,小羊肖恩~~
理論與例子的結(jié)合總是能夠讓人毛瑟頓開。
其實(shí)單純的講面向?qū)ο筮@篇文章寫得很好了,只是很多人沒寫過代碼所以對抽象的概念進(jìn)行實(shí)例化的操作就有點(diǎn)迷,所以還是鼓勵大家去學(xué)點(diǎn)編程的東西吧!哈哈!
寫的很好
寫得不夠通俗,看不懂,也許是我水平太差吧 ??
已經(jīng)十分通俗易懂了
面向?qū)ο笫窍鄬τ诿嫦蜻^程而言的。一個事物有兩種思考方式,一種是過程,一種是對象。比如多個過程如果從屬于同一個對象,在過程思維里,分了多個過程;在對象思維角度,會被整合到一起。比如洗臉,刷牙,面向過程思考,會認(rèn)為這是兩個過程,面向?qū)ο?,就是都屬于對象的方法,會被整合到對象的方法集里去??梢灾苯痈惺艿?,這是兩種不同的認(rèn)知邏輯,面向?qū)ο?,劃分邏輯更加大一些,認(rèn)知更高階,所以處理大型系統(tǒng),面向?qū)ο髸懈佑欣C嫦蜻^程和面向?qū)ο蠖伎梢宰龅綄Ψ侥艿降氖虑?,只是思維角度不一樣。說不定未來又來一個面向XX,來進(jìn)行更高級的開發(fā)。
已經(jīng)很好懂了。。
寫得很棒,我做開發(fā)2年了,也沒仔細(xì)總結(jié)過面向?qū)ο?一直是半醒半睡,描述不出來的狀態(tài),今天算是醍醐灌頂了.
會前端html+css+js就能理解這篇文章的意思,作者寫的很通俗易懂,只是函數(shù)類的定義寫法不一樣,原理是通用的,最近在自學(xué)后端php語言中……..
不用會什么技術(shù),懂得尊重技術(shù)就行
產(chǎn)品還是得懂點(diǎn)技術(shù)的吧!最基礎(chǔ)的最起碼。
對的,所以我還自學(xué)了安卓
初級產(chǎn)品經(jīng)理表示完全萌比,真的理解不了 太深奧了!
自學(xué)一個月java就行
沒關(guān)系,這就是開發(fā)的面向?qū)ο笏季S,產(chǎn)品對這要求應(yīng)該還好
就是一個豬,他有大鼻子、大耳朵這是特征,能吃、哼哼叫這是行為也就是屬性。子類可以繼承父類的屬性。就是這樣
有個問題,文中說行為是方法,特征是屬性,你說行為是屬性,誰的正確?
特征是屬性,行為是方法~
以前是做java吧
自學(xué)了Android的,感覺就很理解,蠻好