面向對象思想

面向對象思想

計算機術語
面向對象的程序設計語言必須有描述對象及其相互之間關系的語言成分。這些程序設計語言可以歸納為以下幾類:系統中一切皆為對象;對象是屬性及其操作的封裝體;對象可按其性質劃分為類,對象成為類的實例;實例關系和繼承關系是對象之間的靜态關系;消息傳遞是對象之間動态聯系的唯一形式,也是計算的唯一形式;方法是消息的序列。
    中文名:面向對象思想 外文名: 所屬學科: 英文名:Object Oriented 性質:思想 類别:程序設計語言 領域:軟件

簡介

從現實世界中客觀存在的事物(即對象)出發來構造軟件系統,并在系統構造中盡可能運用人類的自然思維方式,強調直接以問題域(現實世界)中的事物為中心來思考問題,認識問題,并根據這些事物的本質特點,把它們抽象地表示為系統中的對象,作為系統的基本構成單位(而不是用一些與現實世界中的事物相關比較遠,并且沒有對應關系的其它概念來構造系統)。

這可以使系統直接地映射問題域,保持問題域中事物及其相互關系的本來面貌。面向對象思想起源于計算機科學領域,逐漸擴展到其他領域,在建築設計與生成中的應用尚有較大探索空間。

理解

從世界觀的角度可以認為:面向對象的基本哲學是認為世界是由各種各樣具有自己的運動規律和内部狀态的對象所組成的;不同對象之間的相互作用和通訊構成了完整的現實世界。因此,人們應當按照現實世界這個本來面貌來理解世界,直接通過對象及其相互關系來反映世界。這樣建立起來的系統才能符合現實世界的本來面目。

從方法學的角度可以認為:面向對象的方法是面向對象的世界觀在開發方法中的直接運用。它強調系統的結構應該直接與現實世界的結構相對應,應該圍繞現實世界中的對象來構造系統,而不是圍繞功能來構造系統。

相關

面向對象(Object Oriented,OO)是當前計算機界關心的重點,它是90年代軟件開發方法的主流。面向對象的概念和應用已超越了程序設計和軟件開發,擴展到很寬的範圍。如數據庫系統、交互式界面、應用結構、應用平台、分布式系統、網絡管理結構、CAD技術、人工智能等領域。

談到面向對象,這方面的文章非常多。但是,明确地給出對象的定義或說明對象的定義的非常少——至少我現在還沒有發現。起初,“面向對象”是專指在程序設計中采用封裝、繼承、抽象等設計方法。可是,這個定義顯然不能再适合現在情況。面向對象的思想已經涉及到軟件開發的各個方面。

如,面向對象的分析(OOA,Object Oriented Analysis),面向對象的設計(OOD,Object Oriented Design)、以及我們經常說的面向對象的編程實現(OOP,Object Oriented Programming)。許多有關面向對象的文章都隻是講述在面向對象的開發中所需要注意的問題或所采用的比較好的設計方法。

看這些文章隻有真正懂得什麼是對象,什麼是面向對象,才能最大程度地對自己有所裨益。這一點,恐怕對初學者甚至是從事相關工作多年的人員也會對它們的概念模糊不清。

存在問題

1、軟件重用性差

重用性是指同一事物不經修改或稍加修改就可多次重複使用的性質。軟件重用性是軟件工程追求的目标之一。

2、軟件可維護性差

軟件工程強調軟件的可維護性,強調文檔資料的重要性,規定最終的軟件産品應該由完整、一緻的配置成分組成。在軟件開發過程中,始終強調軟件的可讀性、可修改性和可測試性是軟件的重要的質量指标。實踐證明,用傳統方法開發出來的軟件,維護時其費用和成本仍然很高,其原因是可修改性差,維護困難,導緻可維護性差。

3、開發出的軟件不能滿足用戶需要

用傳統的結構化方法開發大型軟件系統涉及各種不同領域的知識,在開發需求模糊或需求動态變化的系統時,所開發出的軟件系統往往不能真正滿足用戶的需要。

用結構化方法開發的軟件,其穩定性、可修改性和可重用性都比較差,這是因為結構化方法的本質是功能分解,從代表目标系統整體功能的單個處理着手,自頂向下不斷把複雜的處理分解為子處理,這樣一層一層的分解下去,直到僅剩下若幹個容易實現的子處理功能為止,然後用相應的工具來描述各個最低層的處理。

因此,結構化方法是圍繞實現處理功能的“過程”來構造系統的。然而,用戶需求的變化大部分是針對功能的,因此,這種變化對于基于過程的設計來說是災難性的。用這種方法設計出來的系統結構常常是不穩定的,用戶需求的變化往往造成系統結構的較大變化,從而需要花費很大代價才能實現這種變化。

概念特征

一、面向對象的基本概念

(1)對象

對象是人們要進行研究的任何事物,從最簡單的整數到複雜的飛機等均可看作對象,它不僅能表示具體的事物,還能表示抽象的規則、計劃或事件。

(2)對象的狀态和行為

對象具有狀态,一個對象用數據值來描述它的狀态。

對象還有操作,用于改變對象的狀态,操作就是對象的行為。

對象實現了數據和操作的結合,使數據和操作封裝于對象的統一體中。

(3)類

具有相同或相似性質的對象的抽象就是類。因此,對象的抽象是類,類的具體化就是對象,也可以說類的實例是對象。

類具有屬性,它是對象的狀态的抽象,用數據結構來描述類的屬性。

類具有操作,它是對象的行為的抽象,用操作名和實現該操作的方法來描述。

(4)類的結構

在客觀世界中有若幹類,這些類之間有一定的結構關系。通常有兩種主要的結構關系,即一般--具體結構關系,整體--部分結構關系。

①一般——具體結構稱為分類結構,也可以說是“或”關系,或者是“is a”關系。

②整體——部分結構稱為組裝結構,它們之間的關系是一種“與”關系,或者是“has a”關系。

(5)消息和方法

對象之間進行通信的結構叫做消息。在對象的操作中,當一個消息發送給某個對象時,消息包含接收對象去執行某種操作的信息。發送一條消息至少要包括說明接受消息的對象名、發送給該對象的消息名(即對象名、方法名)。一般還要對參數加以說明,參數可以是認識該消息的對象所知道的變量名,或者是所有對象都知道的全局變量名。

二、面向對象的特征

(1)對象唯一性

每個對象都有自身唯一的标識,通過這種标識,可找到相應的對象。在對象的整個生命期中,它的标識都不改變,不同的對象不能有相同的标識。

(2)分類性

分類性是指将具有一緻的數據結構(屬性)和行為(操作)的對象抽象成類。一個類就是這樣一種抽象,它反映了與應用有關的重要性質,而忽略其他一些無關内容。任何類的劃分都是主觀的,但必須與具體的應用有關。

(3)繼承性

繼承性是子類自動共享父類數據結構和方法的機制,這是類之間的一種關系。在定義和實現一個類的時候,可以在一個已經存在的類的基礎之上來進行,把這個已經存在的類所定義的内容作為自己的内容,并加入若幹新的内容。

繼承性是面向對象程序設計語言不同于其它語言的最重要的特點,是其他語言所沒有的。

在類層次中,子類隻繼承一個父類的數據結構和方法,則稱為單重繼承。

在類層次中,子類繼承了多個父類的數據結構和方法,則稱為多重繼承。

在軟件開發中,類的繼承性使所建立的軟件具有開放性、可擴充性,這是信息組織與分類的行之有效的方法,它簡化了對象、類的創建工作量,增加了代碼的可重性。

采用繼承性,提供了類的規範的等級結構。通過類的繼承關系,使公共的特性能夠共享,提高了軟件的重用性。

(4)多态性(多形性)

多态性使指相同的操作或函數、過程可作用于多種類型的對象上并獲得不同的結果。不同的對象,收到同一消息可以産生不同的結果,這種現象稱為多态性。

多态性允許每個對象以适合自身的方式去響應共同的消息。

多态性增強了軟件的靈活性和重用性。

要素

(1)抽象

抽象是指強調實體的本質、内在的屬性。在系統開發中,抽象指的是在決定如何實現對象之前的對象的意義和行為。使用抽象可以盡可能避免過早考慮一些細節。類實現了對象的數據(即狀态)和行為的抽象。

(2)封裝性(信息隐藏)

封裝性是保證軟件部件具有優良的模塊性的基礎。

面向對象的類是封裝良好的模塊,類定義将其說明(用戶可見的外部接口)與實現(用戶不可見的内部實現)顯式地分開,其内部實現按其具體定義的作用域提供保護。

對象是封裝的最基本單位。封裝防止了程序相互依賴性而帶來的變動影響。面向對象的封裝比傳統語言的封裝更為清晰、更為有力。

(3)共享性

面向對象技術在不同級别上促進了共享。同一類中的共享。同一類中的對象有着相同數據結構。這些對象之間是結構、行為特征的共享關系。在同一應用中共享。在同一應用的類層次結構中,存在繼承關系的各相似子類中,存在數據結構和行為的繼承,使各相似子類共享共同的結構和行為。使用繼承來實現代碼的共享,這也是面向對象的主要優點之一。

在不同應用中共享。面向對象不僅允許在同一應用中共享信息,而且為未來目标的可重用設計準備了條件。通過類庫這種機制和結構來實現不同應用中的信息共享。

開發方法

目前,面向對象開發方法的研究已日趨成熟,國際上已有不少面向對象産品出現。面向對象開發方法有Coad方法、Booch方法和OMT方法等。

1、Booch方法

Booch最先描述了面向對象的軟件開發方法的基礎問題,指出面向對象開發是一種根本不同于傳統的功能分解的設計方法。面向對象的軟件分解更接近人對客觀事務的理解,而功能分解隻通過問題空間的轉換來獲得。

2、Coad方法

Coad方法是1989年Coad和Yourdon提出的面向對象開發方法。該方法的主要優點是通過多年來大系統開發的經驗與面向對象概念的有機結合,在對象、結構、屬性和操作的認定方面,提出了一套系統的原則。該方法完成了從需求角度進一步進行類和類層次結構的認定。

盡管Coad方法沒有引入類和類層次結構的術語,但事實上已經在分類結構、屬性、操作、消息關聯等概念中體現了類和類層次結構的特征。

3、OMT方法

OMT方法是1991年由James Rumbaugh等5人提出來的,其經典著作為“面向對象的建模與設計”。

該方法是一種新興的面向對象的開發方法,開發工作的基礎是對真實世界的對象建模,然後圍繞這些對象使用分析模型來進行獨立于語言的設計,面向對象的建模和設計促進了對需求的理解,有利于開發得更清晰、更容易維護的軟件系統。該方法為大多數應用領域的軟件開發提供了一種實際的、高效的保證,努力尋求一種問題求解的實際方法。

4、UML(Unified Modeling Language)語言

軟件工程領域在1995年~1997年取得了前所未有的進展,其成果超過軟件工程領域過去15年的成就總和,其中最重要的成果之一就是統一建模語言(UML)的出現。UML将是面向對象技術領域内占主導地位的标準建模語言。

UML不僅統一了Booch方法、OMT方法、OOSE方法的表示方法,而且對其作了進一步的發展,最終統一為大衆接受的标準建模語言。UML是一種定義良好、易于表達、功能強大且普遍适用的建模語言。它融入了軟件工程領域的新思想、新方法和新技術。它的作用域不限于支持面向對象的分析與設計,還支持從需求分析開始的軟件開發全過程。

模型

對象模型表示了靜态的、結構化的系統數據性質,描述了系統的靜态結構,它是從客觀世界實體的對象關系角度來描述,表現了對象的相互關系。該模型主要關心系統中對象的結構、屬性和操作,它是分析階段三個模型的核心,是其他兩個模型的框架。

1、對象和類

(1)對象

對象建模的目的就是描述對象。

(2)類

通過将對象抽象成類,我們可以使問題抽象化,抽象增強了模型的歸納能力。

(3)屬性

屬性指的是類中對象所具有的性質(數據值)。

(4)操作和方法

操作是類中對象所使用的一種功能或變換。類中的各對象可以共享操作,每個操作都有一個目标對象作為其隐含參數。

方法是類的操作的實現步驟。

2、關聯和鍊

關聯是建立類之間關系的一種手段,而鍊則是建立對象之間關系的一種手段。

(1)關聯和鍊的含義

鍊表示對象間的物理與概念聯結,關聯表示類之間的一種關系,鍊是關聯的實例,關聯是鍊的抽象。

(2)角色

角色說明類在關聯中的作用,它位于關聯的端點。

(3)受限關聯

受限關聯由兩個類及一個限定詞組成,限定詞是一種特定的屬性,用來有效的減少關聯的重數,限定詞在關聯的終端對象集中說明。

限定提高了語義的精确性,增強了查詢能力,在現實世界中,常常出現限定詞。

(4)關聯的多重性

關聯的多重性是指類中有多少個對象與關聯的類的一個對象相關。重數常描述為“一”或“多”。

3、類的層次結構

(1)聚集關系

聚集是一種“整體-部分”關系。在這種關系中,有整體類和部分類之分。聚集最重要的性質是傳遞性,也具有逆對稱性。

聚集可以有不同層次,可以把不同分類聚集起來得到一顆簡單的聚集樹,聚集樹是一種簡單表示,比畫很多線來将部分類聯系起來簡單得多,對象模型應該容易地反映各級層次,圖10-10表示一個關于微機的多極聚集。

(2)一般化關系

一般化關系是在保留對象差異的同時共享對象相似性的一種高度抽象方式。它是“一般---具體”的關系。一般化類稱為你類,具體類又能稱為子類,各子類繼承了交類的性質,而各子類的一些共同性質和操作又歸納到你類中。因此,一般化關系和繼承是同時存在的。

4、對象模型

(1)模闆

模闆是類、關聯、一般化結構的邏輯組成。

(2)對象模型

對象模型是由一個或若幹個模闆組成。模闆将模型分為若幹個便于管理的子塊,在整個對象模型和類及關聯的構造塊之間,模闆提供了一種集成的中間單元,模闆中的類名及關聯名是唯一的。

動态模型是與時間和變化有關的系統性質。該模型描述了系統的控制結構,它表示了瞬間的、行為化的系統控制。

性質,它關心的是系統的控制,操作的執行順序,它表示從對象的事件和狀态的角度出發,表現了對象的相互行為。

該模型描述的系統屬性是觸發事件、事件序列、狀态、事件與狀态的組織。使用狀态圖作為描述工具。它涉及到事件、狀态、操作等重要概念。

根據下列标準,去掉不必要的類和不正确的類。

(1)冗餘類:若兩個類表述了同一個信息,保留最富有描述能力的類。如"用戶"和"顧客"就是重複的描述,因為"顧客"最富有描述性,因此保留它。

(2)不相幹的類:除掉與問題沒有關系或根本無關的類。例如,攤派費用超出了銀行網絡的範圍。

(3)模糊類:類必須是确定的,有些暫定類邊界定義模糊或範圍太廣,如"記錄保管"就模糊類,它是"事務"中的一部分。

(4)屬性:某些名詞描述的是其他對象的屬性,則從暫定類中删除。如果某一性質的獨立性很重要,就應該把他歸屬到類,而不把它作為屬性。

(5)操作:如果問題陳述中的名詞有動作含義,則描述的操作就不是類。但是具有自身性質而且需要獨立存在的操作應該描述成類。如我們隻構造電話模型,"撥号"就是動态模型的一部分而不是類,但在電話撥号系統中,"撥号"是一個重要的類,它日期、時間、受話地點等屬性。

在銀行網絡系統中,模糊類是"系統"、"安全措施"、"記錄保管"、"銀行網絡"等。屬于屬性的有:"帳戶數據"、"收據"、"現金"、"事務數據"。屬于實現的如:"訪問"、"軟件"等。這些均應除去。

上一篇:協方差矩陣

下一篇:指針函數

相關詞條

相關搜索

其它詞條