摘要:回來正題,繼續探究面向對象。其實面向對象是有一系列的繼承關系,實現關系,依賴關系組成。希望這篇文章可以幫助到一些對這方面還有困惑,不解的小白。我也是一個一年多的小白
好,今天來給大家總結一下我覺得的面向對象。
首先,我們帶著問題去想。
問題就是:什么是面向對象?
過去一些學校老師每當講到面向對象的章節,都會貓不猶豫的定義一些class(類)。那么,這就是面向對象了么?過去我也是這么認為的,但現在看來,其不然。
那么到底什么才是面向對象呢?相信到這里大家都有一些疑惑。那平時咱們寫那么多的類,難道都不是面向對象?我很遺憾的告訴你,并不全是。包括我一年前剛入職寫了很多代碼,也維護過很多"前輩"的項目,當時又傻又天真的以為:"哇,這代碼真特么牛逼,一個類就幾百幾千行"。
現在回頭一想,哎呀我去,我都沒眼看了,那些代碼,跑著跑著,是會出bug的,他們的質量不過關就,那上去跑了,跑條毛啊,最終還不是返回來給我們改bug。
到目前為止,我已經慢慢開始轉變了這些想法。其實那都不是叫面向對象,因為他們把不同類本身該有的事情都綜合起來一個類里面,所以它本身只是個類,并不具備面向對象的基本特質。
回來正題,繼續探究面向對象。想想我們人類。舉個簡單的例子:
/** * 抽象人類,人們說的人類,反正就是隨你想的 */ Interface Human { public function setLastName($last_name); public function getLastName(); public function setFirstName($first_name); public function getFirstName(); } /** * 我老爸 */ class Father implement Human { /** * 姓,在國內,姓是不能隨便改的,當然也是可以改。所以這里修飾成保護 */ protected $last_name; public $first_name; public function setLastName($last_name) { $this->last_name = $last_name; return $this; } public function getLastName() { return $this->last_name; } public function setFirstName($first_name) { $this->first_name = $first_name; return $this; } public function getFirstName() { return $this->first_name; } } /** * 兒子 - 我 */ class Son extends Father { } $father = new Father(); $father->setLastName("黃"); $son = new Son(); $son->setFirstName("總"); // 打印我的名字 echo $son->getLastName() , $son->getFirstName();
既然我繼承我老爸,當然是跟我老爸姓的啦。要改姓也可以,得問問老爸是否同意先。
不過一般我們的做法是
直接定義一個"Son"類,然后里面各種方法,甚至一些人類不可以做到的方法,比如會飛(不借助工具),反正就是一個類里頭夾雜各種不可思議的方法,真的是萬萬沒想到。那么如果是這樣,那其實我就不認為這是面向對象了,而是簡單的定義類而已。
其實面向對象是有一系列的繼承關系,實現關系,依賴關系組成。寫代碼,做開發,其實和生活是息息相關的,多留意自己的生活,多拿生活例子在開發工作中舉例,其實,原理就一目了然了。
繼續回來上面的話題,繼續面向對象。
比如說,我老爸會使用工具,但是我也會,而且過程,結果大不相同,而且使用的工具也不一樣,而且這個工具是需要買,或者找別人借的,不是自己家的。結合上面的小例子稍微修改一下。
/** * 抽象人類,人們說的人類,反正就是隨你想的 */ Interface Human { ...... // 代碼省略 public function useTools(ToolInterface $toolInterface = null); } /** * 我老爸 */ class Father implement Human { /** * 姓,在國內,姓是不能隨便改的,當然也是可以改。所以這里修飾成保護 */ ...... // 代碼省略 public function useTools(ToolInterface $toolInterface = null) { $result = $toolInterface->useTool(); ......//代碼省略,自由發揮 // 用工具得到結果,經過老爸一系列加工,變成了不一樣的東東 return $result } } /** * 兒子 - 我 */ class Son extends Father { ...... // 代碼省略 public function useTools(ToolInterface $toolInterface = null) { // 使用工具,我想調整一下這個工具再使用 ......// 調整中 $result = $toolInterface->useTool(); ......//代碼省略,自由發揮,加工結果 return $result } } Interface ToolInterface { public function useTool(); } class Nokia implements ToolInterface { // 代碼自己想想 public function useTool(); } class IPhone20Plus implements ToolInterface { // 代碼自己想想 public function useTool(); } $father = new Father(); $father->setLastName("黃"); $son = new Son(); $son->setFirstName("總"); // 打印我的名字 echo $son->getLastName() , $son->getFirstName(); // 使用工具, 我不管他們怎么使用,反正我就是給了他了。而且,只要是個工具(實現ToolInterface)就行了 $father->useTool(new Nokia()); $son->useTook(new IPhone20Plus());
那么其實到這里,你可以很清晰的看到,其實這,才算是"我理解"的面向對象。每個類都有自己多帶帶,獨有的方法,不同的操作。
而且在后面工具的哪里,我并沒有強制的在內部是使用工具,而是在外部通過注入的方式去實現想要的。
再想想現實中,我們用的iPhone,安卓,到底是哪里來的呢?就是買來的嘛,總沒有說自己出一款,就算是自己出的,零件也是需要依賴各個地方的吧。所以其實我們整個生活圈就是一個很大的生態系統,你在編程世界里面有的,基本上在生活當中都能找到影子。
而且這樣有一個很好的好處,就是你會不知不覺的,降低了類與類之間的耦合性了,我們面向對象,要的不就是這個效果嗎?再結合學過的知識,面向對象的特性,好好思考這些問題,不斷考量,改善自己的這些想法。
希望這篇文章可以幫助到一些對這方面還有困惑,不解的小白。有什么地方說的不足的,還請各位大大指點,感謝各位。
By Jan(我也是一個一年多的小白)文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/20907.html
摘要:是完全的面向對象語言,它們通過類的形式組織函數和變量,使之不能脫離對象存在。而在基于原型的面向對象方式中,對象則是依靠構造器利用原型構造出來的。 JavaScript 函數式腳本語言特性以及其看似隨意的編寫風格,導致長期以來人們對這一門語言的誤解,即認為 JavaScript 不是一門面向對象的語言,或者只是部分具備一些面向對象的特征。本文將回歸面向對象本意,從對語言感悟的角度闡述為什...
摘要:是一種典型的面向對象編程語言。這篇文章主要是來初步理解一下面向對象的思維為下面的內容先給一個基礎。針對面向對象編程的更多內容,會在后面的文章里面詳細解釋。他們都稱之為對象。之后,我們再用編程語言,把這種映射編寫出來,就是的面向對象編程啦。 showImg(https://segmentfault.com/img/remote/1460000012983458?w=900&h=500);...
showImg(https://segmentfault.com/img/remote/1460000007103938?w=391&h=247); 文章最初發表于我的個人博客非典型性程序猿 對于剛接觸JAVA或者其他面向對象編程語言的朋友們來說,可能一開始都很難理解面向對象的概念以及類和對象的關系。筆者曾經帶過一個短期培訓班教授java入門基礎,在最后結束課程的時候,還有很多同學不太理解面向對象...
摘要:眾多面向對象的編程思想雖不盡一致,但是無論哪種面向對象編程語言都具有以下的共通功能。原型編程以類為中心的傳統面向對象編程,是以類為基礎生成新對象。而原型模式的面向對象編程語言沒有類這樣一個概念。 什么是面向對象?這個問題往往會問到剛畢業的新手or實習生上,也是往往作為一個技術面試的開頭題。在這里我們不去談如何答(fu)好(yan)問(guo)題(qu),僅談談我所理解的面向對象。 從歷...
摘要:用代碼可以這樣描述安全到達國外面向過程既然說了面向對象,那么與之對應的就是面向過程。小結在這篇文章中,介紹了什么是面向對象和面向過程,以及中對象的含義。 這是 javascript 面向對象版塊的第一篇文章,主要講解對面向對象思想的一個理解。先說說什么是對象,其實這個還真的不好說。我們可以把自己當成一個對象,或者過年的時候相親,找對象,那么你未來的老婆也是一個對象。我們就要一些屬性,比...
閱讀 3202·2021-09-29 09:34
閱讀 3557·2021-09-10 10:51
閱讀 1952·2021-09-10 10:50
閱讀 6751·2021-08-12 13:31
閱讀 3004·2019-08-30 15:54
閱讀 1569·2019-08-30 15:44
閱讀 1432·2019-08-29 12:26
閱讀 2660·2019-08-26 18:36