| 面向?qū)ο蟮某绦蛟O計語言必須有描述對象及其相互之間關系的語言成分。這些程序設計語言可以歸納為以下幾類:系統(tǒng)中一切事物皆為對象;對象是屬性及其操作的封裝體;對象可按其性質(zhì)劃分為類,對象成為類的實例;實例關系和繼承關系是對象之間的靜態(tài)關系;消息傳遞是對象之間動態(tài)聯(lián)系的唯一形式,也是計算的唯一形式;方法是消息的序列。 簡介 從現(xiàn)實世界中客觀存在的事物(即對象)出發(fā)來構造軟件系統(tǒng),并在系統(tǒng)構造中盡可能運用人類的自然思維方式,強調(diào)直接以問題域(現(xiàn)實世界)中的事物為中心來思考問題,認識問題,并根據(jù)這些事物的本質(zhì)特點,把它們抽象地表示為系統(tǒng)中的對象,作為系統(tǒng)的基本構成單位(而不是用一些與現(xiàn)實世界中的事物相關比較遠,并且沒有對應關系的其它概念來構造系統(tǒng))。這可以使系統(tǒng)直接地映射問題域,保持問題域中事物及其相互關系的本來面貌。 理解 從世界觀的角度可以認為:面向?qū)ο蟮幕菊軐W是認為世界是由各種各樣具有自己的運動規(guī)律和內(nèi)部狀態(tài)的對象所組成的;不同對象之間的相互作用和通訊構成了完整的現(xiàn)實世界。因此,人們應當按照現(xiàn)實世界這個本來面貌來理解世界,直接通過對象及其相互關系來反映世界。這樣建立起來的系統(tǒng)才能符合現(xiàn)實世界的本來面目。 從方法學的角度可以認為:面向?qū)ο蟮姆椒ㄊ敲嫦驅(qū)ο蟮氖澜缬^在開發(fā)方法中的直接運用。它強調(diào)系統(tǒng)的結構應該直接與現(xiàn)實世界的結構相對應,應該圍繞現(xiàn)實世界中的對象來構造系統(tǒng),而不是圍繞功能來構造系統(tǒng)。 面向?qū)ο?br> 面向?qū)ο?Object Oriented,OO)是當前計算機界關心的重點,它是90年代軟件開發(fā)方法的主流。面向?qū)ο蟮母拍詈蛻靡殉搅顺绦蛟O計和軟件開發(fā),擴展到很寬的范圍。如數(shù)據(jù)庫系統(tǒng)、交互式界面、應用結構、應用平臺、分布式系統(tǒng)、網(wǎng)絡管理結構、CAD技術、人工智能等領域。 談到面向?qū)ο?,這方面的文章非常多。但是,明確地給出對象的定義或說明對象的定義的非常少——至少我還沒有發(fā)現(xiàn)。起初,“面向?qū)ο蟆笔菍V冈诔绦蛟O計中采用封裝、繼承、多態(tài)和抽象等設計方法??墒?,這個定義顯然不能再適合情況。面向?qū)ο蟮乃枷胍呀?jīng)涉及到軟件開發(fā)的各個方面。如,面向?qū)ο蟮姆治觯∣OA,Object Oriented Analysis),面向?qū)ο蟮脑O計(OOD,Object Oriented Design)、以及我們經(jīng)常說的面向?qū)ο蟮木幊虒崿F(xiàn)(OOP,Object Oriented Programming)。許多有關面向?qū)ο蟮奈恼露贾皇侵v述在面向?qū)ο蟮拈_發(fā)中所需要注意的問題或所采用的比較好的設計方法??催@些文章只有真正懂得什么是對象,什么是面向?qū)ο?,才能最大程度地對自己有所裨益。這一點,恐怕對初學者甚至是從事相關工作多年的人員也會對它們的概念模糊不清。 存在問題 1.軟件重用性差 重用性是指同一事物不經(jīng)修改或稍加修改就可多次重復使用的性質(zhì)。軟件重用性是軟件工程追求的目標之一。 2.軟件可維護性差 軟件工程強調(diào)軟件的可維護性,強調(diào)文檔資料的重要性,規(guī)定最終的軟件產(chǎn)品應該由完整、一致的配置成分組成。在軟件開發(fā)過程中,始終強調(diào)軟件的可讀性、可修改性和可測試性是軟件的重要的質(zhì)量指標。實踐證明,用傳統(tǒng)方法開發(fā)出來的軟件,維護時其費用和成本仍然很高,其原因是可修改性差,維護困難,導致可維護性差。 3.不能滿足用戶需要 用傳統(tǒng)的結構化方法開發(fā)大型軟件系統(tǒng)涉及各種不同領域的知識,在開發(fā)需求模糊或需求動態(tài)變化的系統(tǒng)時,所開發(fā)出的軟件系統(tǒng)往往不能真正滿足用戶的需要。 用結構化方法開發(fā)的軟件,其穩(wěn)定性、可修改性和可重用性都比較差,這是因為結構化方法的本質(zhì)是功能分解,從代表目標系統(tǒng)整體功能的單個處理著手,自頂向下不斷把復雜的處理分解為子處理,這樣一層一層的分解下去,直到僅剩下若干個容易實現(xiàn)的子處理功能為止,然后用相應的工具來描述各個最低層的處理。因此,結構化方法是圍繞實現(xiàn)處理功能的“過程”來構造系統(tǒng)的。然而,用戶需求的變化大部分是針對功能的,因此,這種變化對于基于過程的設計來說是災難性的。用這種方法設計出來的系統(tǒng)結構常常是不穩(wěn)定的 ,用戶需求的變化往往造成系統(tǒng)結構的較大變化,從而需要花費很大代價才能實現(xiàn)這種變化。 概念特征 一、面向?qū)ο蟮幕靖拍?br> (1)對象 對象是人們要進行研究的任何事物,從最簡單的整數(shù)到復雜的飛機等均可看作對象,它不僅能表示具體的事物,還能表示抽象的規(guī)則、計劃或事件。 (2)對象的狀態(tài)和行為 對象具有狀態(tài),一個對象用數(shù)據(jù)值來描述它的狀態(tài)。 對象還有操作,用于改變對象的狀態(tài),操作就是對象的行為。 對象實現(xiàn)了數(shù)據(jù)和操作的結合,使數(shù)據(jù)和操作封裝于對象的統(tǒng)一體中 (3)類 具有相同或相似性質(zhì)的對象的抽象就是類。因此,對象的抽象是類,類的具體化就是對象,也可以說類的實例是對象。 類具有屬性,它是對象的狀態(tài)的抽象,用數(shù)據(jù)結構來描述類的屬性。 類具有操作,它是對象的行為的抽象,用操作名和實現(xiàn)該操作的方法來描述。 (4)類的結構 在客觀世界中有若干類,這些類之間有一定的結構關系。通常有兩種主要的結構關系,即一般--具體結構關系,整體--部分結構關系。 ①一般——具體結構稱為分類結構,也可以說是“或”關系,或者是“is a”關系。 ②整體——部分結構稱為組裝結構,它們之間的關系是一種“與”關系,或者是“has a”關系。 (5)消息和方法 對象之間進行通信的結構叫做消息。在對象的操作中,當一個消息發(fā)送給某個對象時,消息包含接收對象去執(zhí)行某種操作的信息。發(fā)送一條消息至少要包括說明接受消息的對象名、發(fā)送給該對象的消息名(即對象名、方法名)。一般還要對參數(shù)加以說明,參數(shù)可以是認識該消息的對象所知道的變量名,或者是所有對象都知道的全局變量名。 類中操作的實現(xiàn)過程叫做方法,一個方法有方法名、參數(shù)、方法體。消息傳遞如圖10-1所示。 二、面向?qū)ο蟮奶卣?br> (1)對象唯一性 每個對象都有自身唯一的標識,通過這種標識,可找到相應的對象。在對象的整個生命期中,它的標識都不改變,不同的對象不能有相同的標識。 (2)分類性 分類性是指將具有一致的數(shù)據(jù)結構(屬性)和行為(操作)的對象抽象成類。一個類就是這樣一種抽象,它反映了與應用有關的重要性質(zhì),而忽略其他一些無關內(nèi)容。任何類的劃分都是主觀的,但必須與具體的應用有關。 (3)繼承性 繼承性是子類自動共享父類數(shù)據(jù)結構和方法的機制,這是類之間的一種關系。在定義和實現(xiàn)一個類的時候,可以在一個已經(jīng)存在的類的基礎之上來進行,把這個已經(jīng)存在的類所定義的內(nèi)容作為自己的內(nèi)容,并加入若干新的內(nèi)容。 繼承性是面向?qū)ο蟪绦蛟O計語言不同于其它語言的最重要的特點,是其他語言所沒有的。 在類層次中,子類只繼承一個父類的數(shù)據(jù)結構和方法,則稱為單重繼承。 在類層次中,子類繼承了多個父類的數(shù)據(jù)結構和方法,則稱為多重繼承。 在軟件開發(fā)中,類的繼承性使所建立的軟件具有開放性、可擴充性,這是信息組織與分類的行之有效的方法,它簡化了對象、類的創(chuàng)建工作量,增加了代碼的可重性。 采用繼承性,提供了類的規(guī)范的等級結構。通過類的繼承關系,使公共的特性能夠共享,提高了軟件的重用性。 (4)多態(tài)性(多形性) 多態(tài)性是指相同的操作或函數(shù)、過程可作用于多種類型的對象上并獲得不同的結果。不同的對象,收到同一消息可以產(chǎn)生不同的結果,這種現(xiàn)象稱為多態(tài)性。 多態(tài)性允許每個對象以適合自身的方式去響應共同的消息。 多態(tài)性增強了軟件的靈活性和重用性。 | |