「法天象而應四時」 茶話軟體開發之「抽象」

2021-09-08 00:02:49 字數 1623 閱讀 5219

抽象不僅僅是軟體領域,在有靈性的生物中都有抽象;

抽象不僅僅是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,...