物件導向基本理論及三大特徵

2022-09-13 03:39:10 字數 2198 閱讀 3732

一組相似事物的統稱。關鍵字一組(不是乙個)、相似(不是相同)、統稱(不是具體的「稱」)。

類,代表了具有相似能力、相似屬性的一類事物。

物件,類的乙個實體。如果說「類」是職責的承擔者那麼「物件」就是職責的執行者;類從程式世界的上帝(程式猴)那裡獲得了職責,物件則在程式世界裡履行著這些職責。

一組相關的互動功能點定義的集合。關鍵字一組(不是乙個)、相關(不是隨意的)、互動(不是自娛自樂)、功能點定義集合(不是功能點實現)。

封裝,將一些東西放在一起並且實現資訊隱藏。放在一起的東西是因為它們有著相似之處,或者他們彼此需要在一起。

因為物件導向是一種符合或者比較貼近人的思維方式的程式設計理念,而人類社會又是乙個分工的社會(分工合作才能實現效率的最大化嘛),所以物件導向也應該體現「分工」的程式設計理念,而這就體現在「類」的存在上,每乙個「類」都有著自己的角色和本領——都要為系統(程式)的正常執行而做出自己的貢獻。

舉個栗子,比如我希望廚師為我做一頓大餐,那麼我只需要聘請一位廚師就好,我不需要知道廚師是如何購買原材料、如何進行烹飪,我只需知道他可以做出大餐即可。這就是現實版「封裝」:隱藏了廚師做大餐的細節——將專業的事情交給專業的人去做!其實這就是方法(做大餐)的封裝,廚師將做大餐的細節封裝在自己的腦袋裡,保證自己不會失業嘛。

再比如,我不想讓別人知道我的具體收入情況(財不外露嘛),但是我自己還是需要乙個賬本的,那麼我就要把這個賬本放在安全的地方,於是我就把賬本「封裝」到別人無法直接接觸到的地方(保險櫃?銀行?沙發、床底?),當然經過我的允許之後還是可以檢視它的內容的~。

其實,封裝包括方法封裝和資料封裝。

方法封裝的目的是「隔離複雜度」——將專業的事情交給專業的人!如果我不是廚師,而我又想自己做大餐(其實我不會這麼想的),最後可能只有我乙個人覺得它是大餐了;

資料封裝的目的是「資訊隱藏」——每個類都有自己的小秘密嘛,不想別人知道,所以就「封裝」起來。

其實,封裝的核心目的是:擁抱變化。唯一不變的只有變化本身。通過封裝,將變化所帶來的影響控制到最小,比如,廚師因為「變化」get了另一種大餐的做法,它和原來大餐的做法完全不同。正因為 「做大餐」作為一種方法被封裝在廚師內部,所以這一變化基本上沒有影響到吃大餐的人的行為(我只負責吃):新增的大餐(新增的變化)只影響到廚師,而不影響到我。事實上,通過良好的設計,可以把get大餐的新做法這一變化對廚師的影響也降到最小。

繼承描述了類和類之間的關係,實際上也是對現實世界物與物之間關係的一種描述,比如:子承父業。子類通過繼承,得到了父類的所有屬性和方法,沒錯,是所有,使得子類可以在父類的基礎上進行新的擴充套件和改進

再來談談為繼承而生的類——抽象類。

抽象類是為繼承而存在的類,它本身無法生產物件,但是它定義了子類必須實現的功能。如果說我們通過「抽象」從相似事物中得到了類,那麼我們再一次通過「抽象」從類中得到了抽象類。抽象類更多的是定義了子類必須遵守的一種規範——你要繼承我,就必須實現我對你的要求,除非你也抽象類。

其實個人認為,繼承的目的大多在於對父類的功能進行改進(可能限於**經驗,看法有些短淺也說不定哦)。

多型:多種形態。在物件導向的程式中,可以以多種形態存在的事物有哪些呢?類和方法。父類可以被多個子類繼承,這些子類就是父類的多種形態,這是通過繼承實現的多型;方法通過不同的形參獲得多種形態,這是通過函式的過載實現的多型;其實,通過子類繼承父類後重寫父類的方法是實現物件導向程式設計語言動態方法排程(當通過父類引用呼叫子類物件的重寫方法時根據子類物件的型別判斷呼叫哪一版本的方法)也就是實現執行時多型的重要方法。

》,很棒的一本書~

**博友:

Nagios基本理論及原理

一款免費開源的it基礎設施監控系統,除了主機還能監控交換機路由器等網路裝置 結構上分為兩部分 1.核心功能 輕量化 2.外掛程式 1.監控網路服務 2.監控主機資源 cpu,記憶體等 3.主動通知 發現異常報警功能 4.web頁面 5.可擴充套件 外掛程式 1.輕量級,架構簡單 2.容易部署 3.文...

物件導向三大特徵

1.繼承 什麼是繼承 繼承是一種建立新類的方式,在python中,新建的類可以繼承乙個或多個父類,父類又可稱為基類或超類,新建的類稱為派生類或子類 python中類的繼承分為 單繼承和多繼承 class parentclass1 定義父類 pass class parentclass2 定義父類 p...

物件導向三大特徵

是指將物件的狀態資訊隱藏在物件內部,不允許外部程式直接訪問而是通過類提供的方法實現類內資訊的操作和訪問。可以通過j a中的訪問控制符來實現。實現復用。j a中,通過extends實現繼承 每個類只有乙個直接父類 j a.lang.object是所有類的直接 間接父類 子類獲得父類的全部屬性和方法 除...