面向?qū)ο蟮乃枷耄寒a(chǎn)品經(jīng)理需要知道的技術(shù)知識

37 評論 96916 瀏覽 522 收藏 9 分鐘

作為產(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ā)中來,贏得更多的尊重。

0

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。

圖片1

面向?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)聚性是否高,耦合度是否低。

圖片2

通過高內(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)行交互,用戶無須了解汽車的工作原理。

圖片3

繼承是對象的另一個重要特性,類與類之間是可以有繼承關(guān)系的,子類繼承了父類,就擁有了父類的屬性與方法。

圖形類的關(guān)系圖如下:

圖片4

上面說的繼承,兒子(子類)繼承父親(父類),那么兒子就擁有了父親的所有財產(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)載。

更多精彩內(nèi)容,請關(guān)注人人都是產(chǎn)品經(jīng)理微信公眾號或下載App
評論
評論請登錄
  1. 大神啊,對于技術(shù)小白來說,很生動易懂!可惜不更新了

    來自河南 回復(fù)
  2. 優(yōu)秀啊 我可以加你微信向你請教學(xué)習(xí)嗎 我的微信號是15093437454

    來自河南 回復(fù)
  3. 其實(shí)把面向?qū)ο缶幊痰牡谝徽沦N出來就夠了。。。。這不過這里篇幅做了簡化。
    推薦PM都去學(xué)一下面向?qū)ο缶幊?。這是后端開發(fā)的基礎(chǔ)。

    來自浙江 回復(fù)
  4. 這篇文章的思路是好的講解思路,但沒有講完,戛然而止的樣子!主題是 需要懂得的技術(shù)知識,思路有了,具體的技術(shù)知識能否穿插在本文的思路中。

    來自甘肅 回復(fù)
  5. 同一父類下的子類們可以相互繼承嗎?

    來自廣東 回復(fù)
  6. 好文

    來自廣東 回復(fù)
  7. 這種向后兼容,父類指向子類并調(diào)用子類的方法就是多態(tài)。多態(tài)實(shí)現(xiàn)了父類指向子類,并可調(diào)用子類的方法,這樣有利于提高程序的擴(kuò)展性和可維護(hù)性。
    對于方法的重寫和多態(tài)好像不是這樣的。
    這個明顯是不滿足java的設(shè)計規(guī)范的,父類調(diào)用子類好神奇的邏輯。

    來自浙江 回復(fù)
  8. 產(chǎn)品應(yīng)該掌握的重要技術(shù)思想,點(diǎn)贊

    來自天津 回復(fù)
  9. 講的形象生動易懂,而且容易記憶!

    來自廣東 回復(fù)
  10. 當(dāng)初要是教我面向?qū)ο蟮睦蠋熓悄?,我現(xiàn)在也不會去搞設(shè)計

    來自山東 回復(fù)
  11. 好文

    來自浙江 回復(fù)
  12. 寫過android的,表示看起來無壓力,面向過程,面向?qū)ο?/p>

    來自陜西 回復(fù)
  13. 深入淺出,通俗易懂,文章寫的真棒??!所以懂了以后呢,對實(shí)際產(chǎn)生了什么幫助?

    來自浙江 回復(fù)
  14. 深入淺出,比喻和類比都很恰當(dāng)!

    來自江蘇 回復(fù)
  15. 文章寫的挺好,做產(chǎn)品的,確實(shí)應(yīng)了解些技術(shù),這樣有利于同開發(fā)的溝通

    來自北京 回復(fù)
  16. 寫的真好

    來自上海 回復(fù)
  17. 感謝分享,小羊肖恩~~

    來自四川 回復(fù)
  18. 理論與例子的結(jié)合總是能夠讓人毛瑟頓開。

    來自廣東 回復(fù)
  19. 其實(shí)單純的講面向?qū)ο筮@篇文章寫得很好了,只是很多人沒寫過代碼所以對抽象的概念進(jìn)行實(shí)例化的操作就有點(diǎn)迷,所以還是鼓勵大家去學(xué)點(diǎn)編程的東西吧!哈哈!

    來自江西 回復(fù)
  20. 寫的很好

    來自廣東 回復(fù)
  21. 寫得不夠通俗,看不懂,也許是我水平太差吧 ??

    來自北京 回復(fù)
    1. 已經(jīng)十分通俗易懂了

      來自四川 回復(fù)
    2. 面向?qū)ο笫窍鄬τ诿嫦蜻^程而言的。一個事物有兩種思考方式,一種是過程,一種是對象。比如多個過程如果從屬于同一個對象,在過程思維里,分了多個過程;在對象思維角度,會被整合到一起。比如洗臉,刷牙,面向過程思考,會認(rèn)為這是兩個過程,面向?qū)ο?,就是都屬于對象的方法,會被整合到對象的方法集里去??梢灾苯痈惺艿?,這是兩種不同的認(rèn)知邏輯,面向?qū)ο?,劃分邏輯更加大一些,認(rèn)知更高階,所以處理大型系統(tǒng),面向?qū)ο髸懈佑欣C嫦蜻^程和面向?qū)ο蠖伎梢宰龅綄Ψ侥艿降氖虑?,只是思維角度不一樣。說不定未來又來一個面向XX,來進(jìn)行更高級的開發(fā)。

      來自浙江 回復(fù)
    3. 已經(jīng)很好懂了。。

      來自北京 回復(fù)
  22. 寫得很棒,我做開發(fā)2年了,也沒仔細(xì)總結(jié)過面向?qū)ο?一直是半醒半睡,描述不出來的狀態(tài),今天算是醍醐灌頂了.

    來自北京 回復(fù)
  23. 會前端html+css+js就能理解這篇文章的意思,作者寫的很通俗易懂,只是函數(shù)類的定義寫法不一樣,原理是通用的,最近在自學(xué)后端php語言中……..

    來自上海 回復(fù)
  24. 不用會什么技術(shù),懂得尊重技術(shù)就行

    來自上海 回復(fù)
  25. 產(chǎn)品還是得懂點(diǎn)技術(shù)的吧!最基礎(chǔ)的最起碼。

    來自北京 回復(fù)
    1. 對的,所以我還自學(xué)了安卓

      來自江蘇 回復(fù)
  26. 初級產(chǎn)品經(jīng)理表示完全萌比,真的理解不了 太深奧了!

    回復(fù)
    1. 自學(xué)一個月java就行

      來自江蘇 回復(fù)
    2. 沒關(guān)系,這就是開發(fā)的面向?qū)ο笏季S,產(chǎn)品對這要求應(yīng)該還好

      來自北京 回復(fù)
    3. 就是一個豬,他有大鼻子、大耳朵這是特征,能吃、哼哼叫這是行為也就是屬性。子類可以繼承父類的屬性。就是這樣

      來自四川 回復(fù)
    4. 有個問題,文中說行為是方法,特征是屬性,你說行為是屬性,誰的正確?

      來自北京 回復(fù)
    5. 特征是屬性,行為是方法~

      來自廣東 回復(fù)
  27. 以前是做java吧

    回復(fù)
    1. 自學(xué)了Android的,感覺就很理解,蠻好

      來自江蘇 回復(fù)