面向物件
面向物件(Object Oriented,OO)是當前計算機界關心的重點,它是90年代軟體開發方法的主流。面向物件的概念和應用已超越了程式設計和軟體開發,擴充套件到很寬的範圍。如資料庫系統、互動式介面、應用結構、應用平臺、分散式系統、網路管理結構、CAD技術、人工智慧等領域。
談到面向物件,這方面的文章非常多。但是,明確地給出物件的定義或說明物件的定義的非常少——至少我現在還沒有發現。其初,“面向物件”是專指在程式設計中採用封裝、繼承、抽象等設計方法。可是,這個定義顯然不能再適合現在情況。面向物件的思想已經涉及到軟體開發的各個方面。如,面向物件的分析(OOA,Object Oriented Analysis),面向物件的設計(OOD,Object Oriented Design)、以及我們經常說的面向物件的程式設計實現(OOP,Object Oriented Programming)。許多有關面向物件的文章都只是講述在面向物件的開發中所需要注意的問題或所採用的比較好的設計方法。看這些文章只有真正懂得什麼是物件,什麼是面向物件,才能最大程度地對自己有所裨益。這一點,恐怕對初學者甚至是從事相關工作多年的人員也會對它們的概念模糊不清。
面向物件是當前計算機界關心的重點,它是90年代軟體開發方法的主流。面向物件的概念和應用已超越了程式設計和軟體開發,擴充套件到很寬的範圍。如資料庫系統、互動式介面、應用結構、應用平臺、分散式系統、網路管理結構、CAD技術、人工智慧等領域。
一、傳統開發方法存在問題
1.軟體重用性差
重用性是指同一事物不經修改或稍加修改就可多次重複使用的性質。軟體重用性是軟體工程追求的目標之一。
2.軟體可維護性差
軟體工程強調軟體的可維護性,強調文件資料的重要性,規定最終的軟體產品應該由完整、一致的配置成分組成。在軟體開發過程中,始終強調軟體的可讀性、可修改性和可測試性是軟體的重要的質量指標。實踐證明,用傳統方法開發出來的軟體,維護時其費用和成本仍然很高,其原因是可修改性差,維護困難,導致可維護性差。
3.開發出的軟體不能滿足使用者需要
用傳統的結構化方法開發大型軟體系統涉及各種不同領域的知識,在開發需求模糊或需求動態變化的系統時,所開發出的軟體系統往往不能真正滿足使用者的需要。
用結構化方法開發的軟體,其穩定性、可修改性和可重用性都比較差,這是因為結構化方法的本質是功能分解,從代表目標系統整體功能的單個處理著手,自頂向下不斷把複雜的處理分解為子處理,這樣一層一層的分解下去,直到僅剩下若干個容易實現的子處理功能為止,然後用相應的工具來描述各個最低層的處理。因此,結構化方法是圍繞實現處理功能的“過程”來構造系統的。然而,使用者需求的變化大部分是針對功能的,因此,這種變化對於基於過程的設計來說是災難性的。用這種方法設計出來的系統結構常常是不穩定的 ,使用者需求的變化往往造成系統結構的較大變化,從而需要花費很大代價才能實現這種變化。
二、面向物件的基本概念
(1)物件。
物件是人們要進行研究的任何事物,從最簡單的整數到複雜的飛機等均可看作物件,它不僅能表示具體的事物,還能表示抽象的規則、計劃或事件。
(2)物件的狀態和行為。
物件具有狀態,一個物件用資料值來描述它的狀態。
物件還有操作,用於改變物件的狀態,物件及其操作就是物件的行為。
物件實現了資料和操作的結合,使資料和操作封裝於物件的統一體中
(3)類。
具有相同或相似性質的物件的抽象就是類。因此,物件的抽象是類,類的具體化就是物件,也可以說類的例項是物件。
類具有屬性,它是物件的狀態的抽象,用資料結構來描述類的屬性。
類具有操作,它是物件的行為的抽象,用操作名和實現該操作的方法來描述。
(4)類的結構。
在客觀世界中有若干類,這些類之間有一定的結構關係。通常有兩種主要的結構關係,即一般--具體結構關係,整體--部分結構關係。
①一般——具體結構稱為分類結構,也可以說是“或”關係,或者是“is a”關係。
②整體——部分結構稱為組裝結構,它們之間的關係是一種“與”關係,或者是“has a”關係。
(5)訊息和方法。
物件之間進行通訊的結構叫做訊息。在物件的操作中,當一個訊息傳送給某個物件時,訊息包含接收物件去執行某種操作的資訊。傳送一條訊息至少要包括說明接受訊息的物件名、傳送給該物件的訊息名(即物件名、方法名)。一般還要對引數加以說明,引數可以是認識該訊息的物件所知道的變數名,或者是所有物件都知道的全域性變數名。
類中操作的實現過程叫做方法,一個方法有方法名、引數、方法體。訊息傳遞如圖10-1所示。
二、面向物件的特徵
(1)物件唯一性。
每個物件都有自身唯一的標識,透過這種標識,可找到相應的物件。在物件的整個生命期中,它的標識都不改變,不同的物件不能有相同的標識。
(2)分類性。
分類性是指將具有一致的資料結構(屬性)和行為(操作)的物件抽象成類。一個類就是這樣一種抽象,它反映了與應用有關的重要性質,而忽略其他一些無關內容。任何類的劃分都是主觀的,但必須與具體的應用有關。
(3)繼承性。
繼承性是子類自動共享父類資料結構和方法的機制,這是類之間的一種關係。在定義和實現一個類的時候,可以在一個已經存在的類的基礎之上來進行,把這個已經存在的類所定義的內容作為自己的內容,並加入若干新的內容。
繼承性是面向物件程式設計語言不同於其它語言的最重要的特點,是其他語言所沒有的。
在類層次中,子類只繼承一個父類的資料結構和方法,則稱為單重繼承。
在類層次中,子類繼承了多個父類的資料結構和方法,則稱為多重繼承。
在軟體開發中,類的繼承性使所建立的軟體具有開放性、可擴充性,這是資訊組織與分類的行之有效的方法,它簡化了物件、類的建立工作量,增加了程式碼的可重性。
採用繼承性,提供了類的規範的等級結構。透過類的繼承關係,使公共的特效能夠共享,提高了軟體的重用性。
(4)多型性(多形性)
多型性使指相同的操作或函式、過程可作用於多種型別的物件上並獲得不同的結果。不同的物件,收到同一訊息可以產生不同的結果,這種現象稱為多型性。
多型性允許每個物件以適合自身的方式去響應共同的訊息。
多型性增強了軟體的靈活性和重用性。
面向物件
面向物件(Object Oriented,OO)是當前計算機界關心的重點,它是90年代軟體開發方法的主流。面向物件的概念和應用已超越了程式設計和軟體開發,擴充套件到很寬的範圍。如資料庫系統、互動式介面、應用結構、應用平臺、分散式系統、網路管理結構、CAD技術、人工智慧等領域。
談到面向物件,這方面的文章非常多。但是,明確地給出物件的定義或說明物件的定義的非常少——至少我現在還沒有發現。其初,“面向物件”是專指在程式設計中採用封裝、繼承、抽象等設計方法。可是,這個定義顯然不能再適合現在情況。面向物件的思想已經涉及到軟體開發的各個方面。如,面向物件的分析(OOA,Object Oriented Analysis),面向物件的設計(OOD,Object Oriented Design)、以及我們經常說的面向物件的程式設計實現(OOP,Object Oriented Programming)。許多有關面向物件的文章都只是講述在面向物件的開發中所需要注意的問題或所採用的比較好的設計方法。看這些文章只有真正懂得什麼是物件,什麼是面向物件,才能最大程度地對自己有所裨益。這一點,恐怕對初學者甚至是從事相關工作多年的人員也會對它們的概念模糊不清。
面向物件是當前計算機界關心的重點,它是90年代軟體開發方法的主流。面向物件的概念和應用已超越了程式設計和軟體開發,擴充套件到很寬的範圍。如資料庫系統、互動式介面、應用結構、應用平臺、分散式系統、網路管理結構、CAD技術、人工智慧等領域。
一、傳統開發方法存在問題
1.軟體重用性差
重用性是指同一事物不經修改或稍加修改就可多次重複使用的性質。軟體重用性是軟體工程追求的目標之一。
2.軟體可維護性差
軟體工程強調軟體的可維護性,強調文件資料的重要性,規定最終的軟體產品應該由完整、一致的配置成分組成。在軟體開發過程中,始終強調軟體的可讀性、可修改性和可測試性是軟體的重要的質量指標。實踐證明,用傳統方法開發出來的軟體,維護時其費用和成本仍然很高,其原因是可修改性差,維護困難,導致可維護性差。
3.開發出的軟體不能滿足使用者需要
用傳統的結構化方法開發大型軟體系統涉及各種不同領域的知識,在開發需求模糊或需求動態變化的系統時,所開發出的軟體系統往往不能真正滿足使用者的需要。
用結構化方法開發的軟體,其穩定性、可修改性和可重用性都比較差,這是因為結構化方法的本質是功能分解,從代表目標系統整體功能的單個處理著手,自頂向下不斷把複雜的處理分解為子處理,這樣一層一層的分解下去,直到僅剩下若干個容易實現的子處理功能為止,然後用相應的工具來描述各個最低層的處理。因此,結構化方法是圍繞實現處理功能的“過程”來構造系統的。然而,使用者需求的變化大部分是針對功能的,因此,這種變化對於基於過程的設計來說是災難性的。用這種方法設計出來的系統結構常常是不穩定的 ,使用者需求的變化往往造成系統結構的較大變化,從而需要花費很大代價才能實現這種變化。
二、面向物件的基本概念
(1)物件。
物件是人們要進行研究的任何事物,從最簡單的整數到複雜的飛機等均可看作物件,它不僅能表示具體的事物,還能表示抽象的規則、計劃或事件。
(2)物件的狀態和行為。
物件具有狀態,一個物件用資料值來描述它的狀態。
物件還有操作,用於改變物件的狀態,物件及其操作就是物件的行為。
物件實現了資料和操作的結合,使資料和操作封裝於物件的統一體中
(3)類。
具有相同或相似性質的物件的抽象就是類。因此,物件的抽象是類,類的具體化就是物件,也可以說類的例項是物件。
類具有屬性,它是物件的狀態的抽象,用資料結構來描述類的屬性。
類具有操作,它是物件的行為的抽象,用操作名和實現該操作的方法來描述。
(4)類的結構。
在客觀世界中有若干類,這些類之間有一定的結構關係。通常有兩種主要的結構關係,即一般--具體結構關係,整體--部分結構關係。
①一般——具體結構稱為分類結構,也可以說是“或”關係,或者是“is a”關係。
②整體——部分結構稱為組裝結構,它們之間的關係是一種“與”關係,或者是“has a”關係。
(5)訊息和方法。
物件之間進行通訊的結構叫做訊息。在物件的操作中,當一個訊息傳送給某個物件時,訊息包含接收物件去執行某種操作的資訊。傳送一條訊息至少要包括說明接受訊息的物件名、傳送給該物件的訊息名(即物件名、方法名)。一般還要對引數加以說明,引數可以是認識該訊息的物件所知道的變數名,或者是所有物件都知道的全域性變數名。
類中操作的實現過程叫做方法,一個方法有方法名、引數、方法體。訊息傳遞如圖10-1所示。
二、面向物件的特徵
(1)物件唯一性。
每個物件都有自身唯一的標識,透過這種標識,可找到相應的物件。在物件的整個生命期中,它的標識都不改變,不同的物件不能有相同的標識。
(2)分類性。
分類性是指將具有一致的資料結構(屬性)和行為(操作)的物件抽象成類。一個類就是這樣一種抽象,它反映了與應用有關的重要性質,而忽略其他一些無關內容。任何類的劃分都是主觀的,但必須與具體的應用有關。
(3)繼承性。
繼承性是子類自動共享父類資料結構和方法的機制,這是類之間的一種關係。在定義和實現一個類的時候,可以在一個已經存在的類的基礎之上來進行,把這個已經存在的類所定義的內容作為自己的內容,並加入若干新的內容。
繼承性是面向物件程式設計語言不同於其它語言的最重要的特點,是其他語言所沒有的。
在類層次中,子類只繼承一個父類的資料結構和方法,則稱為單重繼承。
在類層次中,子類繼承了多個父類的資料結構和方法,則稱為多重繼承。
在軟體開發中,類的繼承性使所建立的軟體具有開放性、可擴充性,這是資訊組織與分類的行之有效的方法,它簡化了物件、類的建立工作量,增加了程式碼的可重性。
採用繼承性,提供了類的規範的等級結構。透過類的繼承關係,使公共的特效能夠共享,提高了軟體的重用性。
(4)多型性(多形性)
多型性使指相同的操作或函式、過程可作用於多種型別的物件上並獲得不同的結果。不同的物件,收到同一訊息可以產生不同的結果,這種現象稱為多型性。
多型性允許每個物件以適合自身的方式去響應共同的訊息。
多型性增強了軟體的靈活性和重用性。