今天的內容會有比較多的引用,主要是關於書中大師對於物件導向的概念描述,對我來說不是一兩天便可以理解清楚並用自己的文字來表達,今天主要參考的書是物件導向分析設計與應用。對於物件導向讓我萌生煩惱的起因是我在一本2001年出版的完全剖析C#的書上看到的一段話,以下是節錄內容:
根據C++ Programming Language的作者,Bjarne Stroustrup所說,一個語言要能稱為物件導向語言,它必須支援三個概念:物件、類別與繼承(inheritance)。然而,現在則普遍認為物件導向語言應該是架構在封裝(encapsulation)、繼承與多型(polymorphism)三個原則之上。在哲理上有這樣的轉變,主要是因為多年的經驗讓我們了解到,封裝與多型已經是我們建構以類別與繼承為基礎的物件導向系統中,不可缺少的一環了。
再翻幾本C#的書大概連上面這段的描述都沒有,直接就是以物件導向三大原則封裝、繼承與多型來開始講述物件導向,呈現出一天造就羅馬的感覺。
但對於另一本書上,作者Robert C. Martin的描述看來,就算C語言不屬於物件導向程式語言,但我們仍能用C語言來實踐封裝、繼承與多型。
昨天提到因為複雜,我們要化繁為簡分解成多個小系統,我們習慣處理小系統因為在我們學習撰寫程式的過程中,都是從小程式撰寫起來的。我們要如何以物件的角度來分解問題、我們要如何以物件的觀念來設計系統、我們要如何以物件的觀念來實踐系統。這三個問題便成了所謂的OOA、OOD、OOP,以下是這三項的中文名稱與書上所給予的定義:
物件導向分析是一種分析方法,它是從問題領域中的詞彙找出類別與物件,並由此觀點來分析系統的需求。
物件導向設計是一種設計方法,此方法包含物件導向分解的程序,以及一套用來描述系統的邏輯與實體、靜態與動態模型的圖形表示法。
物件導向程式設計是一種實做方法,以此方法撰寫的程式,是由一群相互合作的物件所組成;每個物件都是特定類別的執行個體(instance),那些類別則是透過繼承(inheritance)關係所連結之類別階層的成員。
以上三者組成了物件導向程式設計風格,對每個類型的程式來說,都有最適合的程式設計風格,在1986年Bobrow和Stefik的論文中對設計風格做了以下定義:
一種組織程式的方式,它是基於某種程式概念的設計模型,而且有一套風格明確的程式語言。
並收集了目前(指1986年)五種主要的設計風格,程序導向、物件導向、邏輯導向、規則導向、限制導向。但是沒有一種風格是一體適用,但對於現在來說(指本書作者)物件導向設計風格最適合一般用途的應用程式。
我們想要建構的是重覆可利用的系統,有彈性的系統,從第一個有提供物件的程式語言Simula於1965年誕生。到對於以物件概念思考來解決問題的概念框架--物件模型,到1980年代各式的論文提出逐漸完整。
物件模型主要由四個元素構成:
而關於物件模型.....時間不早了,明天再寫。