學物件導向最常聽到的詞就是「抽象」。抽象是什麼,我覺得有兩種定義:一、從具體的東西抽離非關鍵因素得到的簡化實體。二、引數化。
我們認識事物,都是從實體開始的,然後抽離部分細節,得到抽象簡化後,歸類對比等等得到認知。
比如你認識乙個陌生人,首先要了解他得社會身份地位,然後把他對比你其他認識的人,得出你要對他採取哪種態度。這種也叫標籤化,臉譜化。作為文學家,經常要克服這種認知慣性,把細節填充進臉譜化的人物中,讓人物與眾不同。不過程式設計師不需要做到這一步。
引數化從技術角度去論述這個問題。所謂引數化是指乙個行為可以通過函式去描述。函式有自變數和輸出值,而將行為的模式定義為引數化的函式,就把靜態關係轉化為動態關係。這相當於由點及面,由個體問題提公升為群體問題,提公升了原問題的外延,讓解決方案適用更廣泛的範疇。
因此,學習抽象應該分兩面,一方面要精簡資訊,第二方面要動態化關係。
步驟如下:
一、具體問題具體分析。
二、具體問題提取關鍵屬性和關鍵關係。
三、關係的動態化。
細則:步驟
二、篩選資訊,得出問題所需的關鍵資訊。
步驟三、通過引數化手段把緊密聯絡的靜態關係改為物件無關的動態關係。
有一些人,喜歡通過抽象去認識問題,我認為是錯誤的,應該從具體逐漸形成抽象,抽象是產物。
沒有從具體問題出發的抽象,只是憑空想象。
因此首先要強調的步驟就是資訊的蒐集階段,也叫調查階段,需求分析階段。有怎樣的實體,才有怎樣的抽象。
篩選資訊是關鍵一步,為何現實問題很複雜,難以理解,這在於無用資訊過多,影響了人們的判斷。提取資訊後,一方面可以減少無用資訊,一方面可以將表面差異很大的事物歸結為同一類,用模擬的方法去解決問題。
引數化的手法有很多,未必就是特指用函式去實現,而是指類似函式性質的方式。比如代數式就是用符號代替具體的數量,而形成乙個適用範圍很廣的公式。在程式語言中,變數,函式,以及物件,介面等高階特性都是引數化的手段。如果說第一步的目的是為了解決當前問題,這一步就是為了解決類似當前問題的所有問題而設。當然,我們程式設計未必需要做到這一步,但是如果此類問題有很多,那麼為了提高復用性,就需要我們多花點時間去做好這一步的抽象。
物件導向程式設計,人們往往喜歡什麼都歸結為物件,再程式設計。但是物件和抽象是兩碼事,物件是工具,而抽象才是方法。物件這個工具用不用,在乎我們具體問題是怎樣的。因此不能把物件當做程式設計的第一步。有時候我們只需要乙個變數,乙個陣列就解決問題,為何要去用物件這種龐大的**呢。這裡面需要強調的就是乙個優先次序的問題,解決問題是從低階方案慢慢轉化到高階方案,只有低階方案不適用的時候,才需要提公升到高階方案,而不是說我一定要用最高端最靈活的方案才是去解決問題。務實不等於不學無術。
我在網上搜了乙個經典的數學題來做案例:
我老婆去市場買菜,她8塊錢買了乙隻雞。
回來的路上,她同事想買她的雞。於是我老婆9塊錢把雞賣給了同事。
後來她想中午我想吃雞,又找到同事,10塊錢買了回來。
到了家門口,鄰居來了客人,少了菜,一定要我老婆把雞賣給他,我老婆又11塊錢賣給了鄰居。
問:我老婆賺了多少錢?
第一步就是收集資訊,「老婆,市場,雞,路上,同事,錢,中午,家門口,鄰居」,問題是老婆賺了多少錢。
第一步的結果會出現很多我們不知道它有沒有用的資訊,這需要第二步去篩選。其中老婆,市場,同事,鄰居是關鍵的物件,雞和錢是個通訊資訊,路上,中午,家門口是無用資訊。關係是:老婆和市場,同事和老婆,老婆和同事,鄰居和老婆的購買關係。
到這一步,只要按照順序寫程式的步驟就能得到具體問題的答案。
第三步,老婆,市場,同事,鄰居其實是一類東西,除了名字不同(標識不同或物件不同),他們都是懂得買和賣兩種操作的型別。因此可以把四個關係引數化為乙個關係:交易(買家,賣家)。然後只需要定義4個物件便可:
交易型別 老婆,市場,同事,鄰居。
交易(老婆,市場);
交易(同事,老婆);
交易(老婆,同事);
交易(鄰居,老婆);
輸出(老婆);
第一步,老婆-8;
第二步,老婆+9;
第三步,老婆-10;
第四步,老婆+11;
結果是賺了2塊。
如果還想輸出其他物件賺了多少,也可以援用老婆的輸出函式。這就是我們用了物件方法去引數化的好處。如果沒有這一步,就需要分別寫4個交易的具體**。
朋友該如何
在現實社會裡,人越來越虛偽,幾乎每個人都帶著面紗,做著並不真誠的自己。朋友 這個詞變的越來於抽象。朋友的含義在不同人的眼裡有著不一樣的概念。朋友,無論相識的時間長短,無論見面的次數多少,只要以誠像待的,便是朋友。有的人,用的著朋友的時候是盡量恭維,等達到目的,就嗤之以鼻,甚至在別的朋友面前嘲笑諷刺,...
該如何走過
不知不覺走過這一段時間,已是快14年底,慢慢的已經習慣了現在的工作,想想剛剛畢業時,面試找工作,自己的第乙個面試,是在蘇州街那邊,是什麼大廈給忘記了,下了地鐵一路問路,到了要面試的地方,走到公司的門口,朝眼望去,始終沒有跨過去那一步,轉身離開,跑了這麼老遠的路,到這裡,跨過這一步怎麼這麼難。沒有勇氣...
該如何存在
七八年前,乙個我認識的重慶女孩因為前一天打牌和shopping用光了現鈔,打上車才發覺,以至於只能在路邊選擇,按照她的說法,一輛不那麼新,沒有空調,噪音比較大的公交車,才能順利的回到自己的單位上班。這個女孩當天晚上由此感嘆自己在學校是ps拜金主義是如何的淺薄,沒有社會經歷的夸夸奇談是如何的幼稚。是啊...