close

物件導向程式設計的優點

容易維護

    因為物件可以單獨執行(容易理解)與維護

    將物件內部的細部資料與程序隱藏起來與外界隔離,可以有效地降低程式碼改變時所產生的副作用

物件為適當的可重複使用軟體元件

    因為所需的資料結構和操作處理都已經融合在單一實體物件中

對部分軟體系統而言,真實世界實體可以很容易對應到系統的物件

(1)類別

物件導向的開發方法是從類別開始思考

m 類別可以視為產生物件的模板(template)

m 類別可以視為物件的一般化描述

m 類別可以視為Pattern (通用的概念)

m 類別可以視為物件的藍圖來描述相似物件的共同特性

m 當類別的特性定義好之後,個別的類別實例(即物件)才能產生

物件(Object)是類別的實例。例如,「狗」這個類別列舉狗的特點,從而使這個類別定義了世界上所有的狗。而萊絲這個物件則是一條具體的狗,它的屬性也是具體的。狗有皮毛顏色,而萊絲的皮毛顏色是棕白色的。因此,萊絲就是狗這個類別的一個實例。

物件與類別之特性:

m 屬性為物件所儲存的資料值

m 例如姓名、年齡、體重等

m 每個屬性名稱可以有其資料型態或預設值

每個物件皆具有唯一性:

m 在物件模型中並不一定要有明確的物件識別值,每個物件本質上即為唯一

操作(Operations) and方法(methods):

m 每個類別所產生的物件可提供操作(operation)讓其他物件來應用

m 不同類別的物件可以使用相同名稱的操作(稱為多型polymorphism)

m 物件操作的程式碼實作也可稱為方法(method) (by a different piece of code)

方法Methods (Operations操作, Services服務

方法為類別中所封裝的可執行程序,設計來操作類別中所定義的資料屬性

物件中的方法是透過訊息傳遞的方式被呼叫執行

(2)唯一性(Identity)

每個物件皆為分離且可以區別的實體

每個真實世界中物件的存在都是獨一無二的

兩個所有屬性值都相同的物件仍然為不同的兩個物件,仍然可以區別

(3)抽象性(Abstraction)

- 將實體抽象化,只取出一個實體中重要的基本部分,而忽略其他次要的附屬部分

- 通常會在分析階段執行抽象化的動作,以決定應用領域的實體概念,而非在設計與實做階段才決定

(4)封裝(encapsulation)與資訊隱藏(information hiding)

封裝是將物件的內部細部實作隱藏起來,讓外部的物件無法直接存取

物件所封裝的包括資料屬性與處理資料的邏輯操作程序

(5)多型性(polymorphism)

靜態多型性

    又稱為overloading

    呼叫執行同一個物件的相同操作時,可以使用不同資料型態或個數的參數來呼叫執行

    動態多型性指多種不同型態的物件可以符合同一個物件參考,例如一個父類別的物件可由其不同子類別的物件實例來取代,不同子類別可以有相同名稱的操作,但每個子類別的相同操作可能會有不同執行程序

(6)繼承Inheritance

透過階層化的結構關係來共享類別之間的屬性與操作

每個子類別可以繼承父類別的所有特性,包括屬性與操作,子類別還可另外增加自己獨有的特性,稱為擴充性

繼承可以達到重複使用之目的,可重複使用整個父類別而不需了解其細部的實作

(7)分類Classification /一般化Generalization

分類:

    是將具有相同屬性與操作的物件群組成為一個類別,每個物件稱為此類別的一個實例

    e.g. Bicycle object -------> Bicycle class

一般化: is-a關係

    (superclass, subclass)

    父類別稱為子類別的一般化,每個子類別可以繼承其父類別的所有特性,並可另外增加自己獨有的屬性與操作

(8)特殊化(Specialization)

    與一般化相反地,子類別稱為父類別的特殊化

    子類別可以另外增加自己獨有的屬性與操作,稱為擴充性

    子類別可以使用和父類別相同名稱的操作方法,並改寫(overriding)重新定義自己特有的程式碼

    通常子類別需要改寫的原因為各子類別需要相同的介面規格,但又需要各自不同的執行程序以得到各子類別所需的執行結果

(9)聚合性(Aggregation)

    聚合性為一種特殊的結合關係,用來描述整體與部分元件之間的whole-part (a-part-of)關係

    一般兩個物件具有association只代表這兩個物件之間有關係,加上聚合性符號則代表一個物件為另一個物件的一部份

物件導向程式設計程序之特性

-由使用案例驅動,利用使用案例來確認需求

-以軟體元件為基礎的軟體結構,可以將整個系統劃分為多個部分元件,並描述這些軟體元件如何互動與開發

-反覆式開發,將軟體開發過程分解成多個開發週期,每個開發週期反覆地產生部份結果

-漸增式開發,將軟體系統的功能分解成多個部分功能,隨著開發過程逐一漸增完成

跨元件開發

因為學習程式設計是為了控制電腦、讓電腦幫我們做事情

物件導向開發流程可以採用螺旋開發模式,將開發階段分為五個象限,包括與使用者溝通、擬定開發計畫、風險分析、系統開發、及使用者評估等五個象限,以螺旋狀方式由內而外依次反覆進行這五個開發階段

int main(void)

{

int rot,cdf;

cin >> rot;

    for(int i=0;i<=rot;i++){

            for(int j=0;j<=abs(i-rot/2);j++){

                    cout <<" ";

                    cdf=j;

                    }

&nbs

arrow
arrow
    全站熱搜

    etcvs 發表在 痞客邦 留言(5) 人氣()