top of page

結構化程式

物件導向程式

結構化程式

結構化程式設計,一種編程典範。它採用子程式、程式碼區塊、for迴圈以及while迴圈等結構,來取代傳統的 goto。希望藉此來改善電腦程式的明晰性、品質以及開發時間,並且避免寫出麵條式代碼。

結構化的程式是以一些簡單、有層次的程式流程架構所組成,可分為循序、選擇及重複。

  • 循序是指程式正常的執行方式,執行完一個指令後,執行後面的指令。

  • 選擇是依程式的狀態,選擇數段程式中的一個來執行,一般會使用if..then..else..endif或switch、case等關係字來識別。

  • 重複是指一直執行某一段程式,直到滿足特定條件,或是一集合體中的所有元素均已處理過,一般會使用while、repeat、for或do..until等關鍵字識別。一般會建議每個迴圈只能有一個進入點。

若一個程式語言的語法允許用成對的關鍵字包圍一段程式,形成一個結構,這種程式語言稱為有「區塊結構」,這類的結構包括用ALGOL 68的if..fi包圍的程式,或是在PL/I中用BEGIN..END包圍的一段程式,或是在C語言中用大括號{...}包圍的一段程式。

結構化程式架構

主程式

單一程式

(函數)

單一程式

(函數)

單一程式

(函數)

物件導向程式

類別:定義了一件事物的抽象特點。通常來說,類別定義了事物的屬性和它可以做到的(它的行為)。舉例來說,「狗」這個類別會包含狗的一切基礎特徵,即所有「狗」都共有的特徵或行為,例如它的孕育、毛皮顏色和吠叫的能力。類別可以為程式提供模版和結構。一個類別的方法和屬性被稱為「成員」。

物件:是類別的例項。例如,「狗」這個類別列舉狗的特點,從而使這個類別定義了世界上所有的狗。而萊絲這個物件則是一條具體的狗,它的屬性也是具體的。狗有皮毛顏色,而萊絲的皮毛顏色是棕白色的。因此,萊絲就是狗這個類別的一個例項。一個具體物件屬性的值被稱作它的「狀態」。(系統給物件分配記憶體空間,而不會給類別分配記憶體空間。這很好理解,類別是抽象的系統不可能給抽象的東西分配空間,而物件則是具體的。

訊息傳遞:一個物件通過接受訊息、處理訊息、傳出訊息或使用其他類別的方法來實作一定功能,這叫做訊息傳遞機制。如:萊絲可以通過吠叫引起人的注意,從而導致一系列的事發生。

繼承:是指,在某種情況下,一個類別會有「子類別」。子類別比原本的類別(稱為父類別)要更加具體化。例如,「狗」這個類別可能會有它的子類別「牧羊犬」和「吉娃娃犬」。在這種情況下,「萊絲」可能就是牧羊犬的一個例項。子類別會繼承父類別的屬性和行為,並且也可包含它們自己的。我們假設「狗」這個類別有一個方法(行為)叫做「吠叫()」和一個屬性叫做「毛皮顏色」。它的子類別(前例中的牧羊犬和吉娃娃犬)會繼承這些成員。這意味著程式設計師只需要將相同的代碼寫一次。

封裝性:的物件導向程式設計隱藏了某一方法的具體執行步驟,取而代之的是通過訊息傳遞機制傳送訊息給它。因此,舉例來說,「狗」這個類別有「吠叫()」的方法,這一方法定義了狗具體該通過什麼方法吠叫。但是,萊絲的朋友並不知道它到底是如何吠叫的。

多型:是指由繼承而產生的相關的不同的類別,其物件對同一訊息會做出不同的響應。例如,狗和雞都有「叫()」這一方法,但是呼叫狗的「叫()」,狗會吠叫;呼叫雞的「叫()」,雞則會啼叫。

抽象:是簡化複雜的現實問題的途徑,它可以為具體問題找到最恰當的類別定義,並且可以在最恰當的繼承級別解釋問題。舉例說明,萊絲在大多數時候都被當作一條狗,但是如果想要讓它做牧羊犬做的事,你完全可以呼叫牧羊犬的方法。如果狗這個類別還有動物的父類別,那麼你完全可以視萊絲為一個動物。

 

主程式

結構化程式

(類別)

結構化程式

(類別)

結構化程式

(類別)

bottom of page