抽象不僅僅是軟體領域,在有靈性的生物中都有抽象;
抽象不僅僅是oo的,非oo語言也有抽象;
抽象的級別:
類級別的抽象--類、抽象類、介面;
方法、函式級別的抽象--泛型、委託、lambda表示式;
元件級別的抽象--業務元件,資料訪問元件,ui控制項;
解決方案的抽象-設計模式;
系統級別的抽象--aop,soa
應用級別的抽象-應用框架;
1,物以類分,人以群聚--類,抽象類,介面的關係。
將事物分類(class),是我們認識世界的一種重要方式,也是一種重要的思維方式,所以把我們周圍的物件(object)劃分成乙個個的類,將大類再
細分成小類,例如由分子到原子,由原子到電子。所以,「類」是「物件」的抽象,是我們認識世界的「一級抽象」。
某些類還可以再抽象嗎?
當然可以,將類的某些共同特性進一步進行抽象就是抽象類(abstract class),我們舉乙個例子說明它們之間的關係:
類是可以被例項化的,例如
class 人
現在有乙個叫做張三的人,我們這樣表示:
人 man=new 人();
man.名字="張三";
這裡,「人」這個類被例項化成「張三」了。
我們現在向上尋找「人」歸屬與那一類,很自然,「人」類屬於「動物」類,我們修改一下「人」類的定義,讓它繼承乙個父類「動物」類:
class 人:動物
問題來了,我們可以用「動物」類例項化出「張三」來嗎?我們逆向思維一下,說到張三,我們就可以直接的想到他是乙個人,而不是先想到他是乙個動物,
況且,說到動物,我們想到的是貓、狗、獅子老虎之類的東西,顯然,我們不能用「動物」類例項化張三,我們說「動物」類是抽象的,它不是乙個具體的類,所以我們的動物類應該這樣定義:
abstract class 動物
現在我們來觀察一下「動物」類具有哪些方法,直接用**說明:
abstract class 動物
class 狗:動物
class 貓:動物
這樣我們的狗 dog 和 貓 cat它們都會吃東西,睡覺,並發出叫聲了:
狗 dog=new 狗();
貓 cat=new 貓();
dog.叫聲();//汪汪
cat.叫聲();//咪咪
現在看起來都沒有問題,看來我們的抽象類工作的很好,有一天問題來了,我們買了乙隻玩具狗,它也會「汪汪」,我們可以這麼寫嗎?
class 玩具狗:動物
顯然上面這樣寫是錯誤的,玩具狗不是動物,但它的「叫聲」怎麼處理呢?
現在,我們需要對抽象類進一步抽象了,我們只需要它原來的一部分東西,例如,我們只需要把動物抽象類中的「叫聲」抽象成
乙個介面,況且叫它「叫聲介面」,對原有的**進行以下改進:
inte***ce 叫聲介面
class 動物:叫聲介面
class 玩具狗:叫聲介面
玩具狗 dog1=new 玩具狗();
dog1.叫聲();
-------------
***************=
到這裡,我們完成了對我們世界的「初級抽象」,至於更高階的抽象,我們下篇再說。
四 時間 認知 迭代
時間認知.迭代 世界是碎的 人性的深處深不見底 共同認知,破碎的力量 後真相我們過去一般都認為所有的辯論總有乙個正確的一方,總有把道理和事實全部講清楚,我們可以選擇支援的一方,但是至少我自己越來越覺得我不想支援誰。因為我每站乙個立場,實際上我就損失了了解另外乙個立場的機會。自己的認知進步和認知迭代就...
睡 順四時有節律
睡 順四時有節律 傳統養生認為睡覺是第一大補。民間有好多俗話 一夜好睡,精神百倍 徹夜難睡,渾身疲憊。睡個好覺,有如吃個母雞。睡覺為什麼如此重要?那就是老子講的 一 陰一陽謂之道。晚間睡覺是休養生息,養精蓄銳 白天工作學習是能量的釋放。陰陽各半,缺一不可。睡覺與起床都要科學把握時間。黃帝內經 關於養...
PHP函式(四) 時間函式
時間函式 函式名描述 例項輸入 輸出操作 time 返回當前的 unix 時間戳 time int time void 返回自從 unix 紀元 格林威治時間 1970 年 1 月 1 日 00 00 00 到當前時間的秒數 mktime 取得乙個日期的 unix 時間戳 mktime 0,0,0,...