面向對象的思想:產品經理需要知道的技術知識
作為產品經理,了解面向對象思想,更好地理解開發人員的思維,與開發人員更好地溝通,實現產品設計、開發過程的流暢。
對于產品經理來說,了解了面向對象的思想才會更容易理解開發人員的程序思維。系統的構建過程就是對象的構建過程,了解了這些與程序人員的溝通會更加順暢。程序人員要實現面向對象的開發(OOP)就要先做好面向對象的設計(OOD),要做好面向對象的設計(OOD)就要先做好面向對象的分析(OOA),只有理解了什么是面向對象的思想,才能更多的參與到產品的分析、設計、開發中來,贏得更多的尊重。
90年代的開發人員是不知道什么是面向對象的,那時大家還在用BASIC和C語言進行開發,程序都是一條條代碼寫出來的,編程也是一件非常苦逼和有技術含量的事,當時硬件的發展還不夠,開發人員的關注點是內存的占用率和文件大小。隨著社會的發展,硬件變得越來越廉價,程序人員的關注點變為軟件的優化,軟件開發思想也從面向過程式的開發轉為面向對象式的開發。
面向過程與面向對象
面向過程:面向過程強調的是“過程”,體現的是操作流程。
如:早上起床的過程,1洗臉、2刷牙、3準備早餐、4吃早餐、5出門上班。面向過程的開發思想與人的思維邏輯過程很相似,但不易于了解事物的整體。面向過程的開發語言有BASIC、C。
面向對象:談面向對象就先要了解什么是對象,對象是事物存在的實體。
如:人、車、房、鳥等。對象可以劃分為動態部分和靜態部分,動態就是對象的行為,靜態就是對象的特征。如鳥的飛、叫、吃食,這些是行為;鳥有嘴、翅膀、瓜子,這些是對象的特征,我們把行為叫做方法,把特性叫做屬性。面向對象的開發語言有JAVA、C#等。
面向過程過多的強調流程,關注細節就容易忽略整體,當我們只關注一個點時是很難了解事物的全貌,不利于大系統的開發。面向對象關注的是系統中的實體及實體間信息的交互,會更宏觀的了解事物,有利于大系統的開發。
細說面向對象
對象就是實體,在系統中很多實體是有共性的(相同的特征與行為),把共性抽象出來就產生了“類”,類的具體化就是對象,對象的抽象就是類。
例如,一只大象是一個對象,大象的行為有喝水、走路、吃飯等,特征有長鼻子、四條腿、象牙等,把這些共性抽象成大象類。(類的方法:喝水、走路、吃飯;類的屬性:長鼻子、四條腿、象牙),對于沒有象牙的大象屬于個性化對象,不屬于大象類。軟件工程的一個重要思想就是“高內聚、低耦合”,它是判斷設計好壞的標準,應用于面向對象的設計,主要是看類的內聚性是否高,耦合度是否低。
通過高內聚可以更好的增強對象內部的粘性,將復雜性交給對象內部解決,對外只需留有接口。對象與對象間的交互信息盡量減少,降低信息的關聯性,通過低耦合可以有效的降低對象間的依賴,降低理解成本及交互成本。
面向對象的三個基本特性:封裝、繼承、多態。
封裝是對象的最重要特性,對象的實現細節都被封裝在類中,對于用戶是隱藏的。
類與類之間通過消息進行信息的傳遞,類中對內的方法與屬性是私有的,對向的方法與屬性是公有的,只有公有的方法與屬性才能與外部進行交互。
如:汽車,用戶是不用關心汽車發動機、制動系統與導航系統,用戶是通過方向盤、各種開關、剎車和油門與汽車進行交互,用戶無須了解汽車的工作原理。
繼承是對象的另一個重要特性,類與類之間是可以有繼承關系的,子類繼承了父類,就擁有了父類的屬性與方法。
圖形類的關系圖如下:
上面說的繼承,兒子(子類)繼承父親(父類),那么兒子就擁有了父親的所有財產(父類的方法和屬性),兒子可以直接用。但有的東西兒子繼承來了不一定有用,需要根據兒子的特點改造,如:鳥(父類)有飛行的能力,但有的鳥飛行方式有所不同,像蜂鳥。蜂鳥就可以重寫鳥類的飛行方法,以實現自己獨特的飛行方式。繼承可以讓兒子擁有父親的財產,那么父親為什么不可以用兒子的財產呢?這就是向后兼容,讓父親(父類)指向兒子(子類),實現兒子(子類)的方法。
這種向后兼容,父類指向子類并調用子類的方法就是多態。多態實現了父類指向子類,并可調用子類的方法,這樣有利于提高程序的擴展性和可維護性。
通過面向對象的方式,讓大的系統開發變為可能,在系統中將對象抽象成類,再通過繼承與信息交互建立起類與類的關系,增強了代碼的重用性,減少了重復性勞動。將復雜的問題封裝起來,對外只需要暴露出必要的接口,減少信息的交互,增強對象內部的內聚性,使系統分割清晰,簡單明了。通過多態性,讓對象增加了更多的可能性,增強對象的擴展性及維護性。通過對象的方式可以把世界看得更加清晰、透徹。
一座大廈的建立需要無數的磚頭、水泥和鋼筋,它們就是構建起這座大廈的對象,磚頭如何燒制的我們不用管,只需要直接使用磚頭對象就好了。
#專欄作家#
老吳,微信公眾號:ChanPinLaoWu,人人都是產品經理專欄作家,產品講學堂自媒體人。十多年軟件行業從業經驗,做過軟件開發、項目管理、產品經理,希望在這里能夠與大家分享更多產品經驗和知識。
本文原創發布于人人都是產品經理。未經許可,禁止轉載。
大神啊,對于技術小白來說,很生動易懂!可惜不更新了
優秀啊 我可以加你微信向你請教學習嗎 我的微信號是15093437454
其實把面向對象編程的第一章貼出來就夠了。。。。這不過這里篇幅做了簡化。
推薦PM都去學一下面向對象編程。這是后端開發的基礎。
這篇文章的思路是好的講解思路,但沒有講完,戛然而止的樣子!主題是 需要懂得的技術知識,思路有了,具體的技術知識能否穿插在本文的思路中。
同一父類下的子類們可以相互繼承嗎?
好文
這種向后兼容,父類指向子類并調用子類的方法就是多態。多態實現了父類指向子類,并可調用子類的方法,這樣有利于提高程序的擴展性和可維護性。
對于方法的重寫和多態好像不是這樣的。
這個明顯是不滿足java的設計規范的,父類調用子類好神奇的邏輯。
產品應該掌握的重要技術思想,點贊
講的形象生動易懂,而且容易記憶!
當初要是教我面向對象的老師是你,我現在也不會去搞設計
好文
寫過android的,表示看起來無壓力,面向過程,面向對象
深入淺出,通俗易懂,文章寫的真棒??!所以懂了以后呢,對實際產生了什么幫助?
深入淺出,比喻和類比都很恰當!
文章寫的挺好,做產品的,確實應了解些技術,這樣有利于同開發的溝通
寫的真好
感謝分享,小羊肖恩~~
理論與例子的結合總是能夠讓人毛瑟頓開。
其實單純的講面向對象這篇文章寫得很好了,只是很多人沒寫過代碼所以對抽象的概念進行實例化的操作就有點迷,所以還是鼓勵大家去學點編程的東西吧!哈哈!
寫的很好
寫得不夠通俗,看不懂,也許是我水平太差吧 ??
已經十分通俗易懂了
面向對象是相對于面向過程而言的。一個事物有兩種思考方式,一種是過程,一種是對象。比如多個過程如果從屬于同一個對象,在過程思維里,分了多個過程;在對象思維角度,會被整合到一起。比如洗臉,刷牙,面向過程思考,會認為這是兩個過程,面向對象,就是都屬于對象的方法,會被整合到對象的方法集里去??梢灾苯痈惺艿?,這是兩種不同的認知邏輯,面向對象,劃分邏輯更加大一些,認知更高階,所以處理大型系統,面向對象會有更加有利。面向過程和面向對象都可以做到對方能到的事情,只是思維角度不一樣。說不定未來又來一個面向XX,來進行更高級的開發。
已經很好懂了。。
寫得很棒,我做開發2年了,也沒仔細總結過面向對象,一直是半醒半睡,描述不出來的狀態,今天算是醍醐灌頂了.
會前端html+css+js就能理解這篇文章的意思,作者寫的很通俗易懂,只是函數類的定義寫法不一樣,原理是通用的,最近在自學后端php語言中……..
不用會什么技術,懂得尊重技術就行
產品還是得懂點技術的吧!最基礎的最起碼。
對的,所以我還自學了安卓
初級產品經理表示完全萌比,真的理解不了 太深奧了!
自學一個月java就行
沒關系,這就是開發的面向對象思維,產品對這要求應該還好
就是一個豬,他有大鼻子、大耳朵這是特征,能吃、哼哼叫這是行為也就是屬性。子類可以繼承父類的屬性。就是這樣
有個問題,文中說行為是方法,特征是屬性,你說行為是屬性,誰的正確?
特征是屬性,行為是方法~
以前是做java吧
自學了Android的,感覺就很理解,蠻好