OO

OO

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

基本介紹

  • 中文名:面向對象
  • 外文名:Object–Oriented
  • 簡稱:OO
  • 套用:指導開發活動的系統方法
簡介,詳細釋義,對象設計,對象實現,方法,OOA方法,OOD方法,Booch方法,Coad方法,OMT方法,UML語言,對象分析,面向對象的分析,建立對象模型,建立動態模型,套用,

簡介

OO(Object–Oriented )面向對象
OO方法(Object-Oriented Method,面向對象方法,面向對象的方法)是一種把面向對象的思想套用於軟體開發過程中,指導開發活動的系統方法,簡稱OO (Object-Oriented)方法,是建立在“對象”概念基礎上的方法學。對象是由數據和容許的操作組成的封裝體,與客觀實體有直接對應關係,一個對象類定義了具有相似性質的一組對象。而每繼承性是對具有層次關係的類的屬性和操作進行共享的一種方式。所謂面向對象就是基於對象概念,以對象為中心,以類和繼承為構造機制,來認識、理解、刻畫客觀世界和設計、構建相應的軟體系統。

詳細釋義

概述
面向對象方法作為一種新型的獨具優越性的新方法正引起全世界越來越廣泛的關注和高度的重視,它被譽為"研究高技術的好方法",更是當前計算機界關心的重點。十多年來,在對OO方法如火如荼的研究熱潮中,許多專家和學者預言:正象70年代結構化方法對計算機技術套用所產生的巨大影響和促進那樣,90年代OO方法會強烈地影響、推動和促進一系列高技術的發展和多學科的綜合。
Object OrientedObject Oriented
面向對象方法的由來與發展
回顧歷史可激勵現在,以規劃將來。
OO方法起源於面向對象的程式語言(簡稱為OOPL)。50年代後期,在用FORTRAN語言編寫大型程式時,常出現變數名在程式不同部分發生衝突的問題。鑒於此,ALGOL語言的設計者在ALGOL60中採用了以"Begin……End"為標識的程式塊,使塊內變數名是局部的,以避免它們與程式中塊外的同名變數相衝突。這是程式語言中首次提供封裝(保護)的嘗試。此後程式塊結構廣泛用於高級語言如PascalAda、C之中。
Object OrientedObject Oriented
60年代中後期,Simula語言在ALGOL基礎上研製開發,它將ALGOL的塊結構概念向前發展一步,提出了對象的概念,並使用了類,也支持類繼承。70年代,Smalltalk語言誕生,它取Simula的類為核心概念,它的很多內容借鑑於Lisp語言。由Xerox公司經過對Smautalk72、76持續不斷的研究和改進之後,於1980年推出商品化的,它在系統設計中強調對象概念的統一,引入對象、對象類、方法、實例等概念和術語,採用動態聯編和單繼承機制。
從80年代起,人們基於以往巳提出的有關信息隱蔽抽象數據類型等概念,以及由Modula2、Ada和Smalltalk和等語言所奠定的基礎,再加上客觀需求的推動,進行了大量的理論研究和實踐探索,不同類型的面向對象語言(如:Object-c、Eiffel、c++、Java、Object-Pascal等)逐步地發展和建立起較完整的和雨後春筍般研製開發出來,OO方法的概念理論體系和實用的軟體系統。面向對象源出於Simula,真正的OOP由Smalltalk奠基。Smalltalk現在被認為是最純的OOPL。
Object OrientedObject Oriented
正是通過Smalltalk80的研製與推廣套用,使人們注意到OO方法所具有的模組化、信息封裝與隱蔽、抽象性、繼承性、多樣性等獨特之處,這些優異特性為研製大型軟體、提高軟體可靠性、可重用性、可擴充性和可維護性提供了有效的手段和途徑。分解和模組化可以通過在不同組件設定不同的功能,把一個問題分解成多個小的獨立、互相作用的組件,來處理複雜、巨型的軟體。
80年代以來,人們將面向對象的基本概念和運行機制運用到其它領域,獲得了一系列相應領域的面向對象的技術。面向對象方法已被廣泛套用於程式設計語言、形式定義、設計方法學、作業系統、分散式系統、人工智慧、實時系統、資料庫、人機接口、計算機體系結構以及並發工程、綜合集成工程等,在許多領域的套用都得到了很大的發展。1986年在美國舉行了首屆"面向對象編程、系統、語言和套用(OOPSLA'86)"國際會議,使面向對象受到世人矚目,其後每年都舉行一次,這進一步標誌OO方法的研究已普及到全世界。
Object OrientedObject Oriented
面向對象的基本概念與特徵
用計算機解決問題需要用程式設計語言對問題求解加以描述(即編程),實質上,軟體是問題求解的一種表述形式。顯然,假如軟體能直接表現人求解問題的思維路徑(即求解問題的方法),那么軟體不僅容易被人理解,而且易於維護和修改,從而會保證軟體的可靠性和可維護性,並能提高公共問題域中的軟體模組和模組重用的可靠性。面向對象的機能念和機制恰好可以使得按照人們通常的思維方式來建立問題域的模型,設計出儘可能自然地表現求解方法的軟體。
Object OrientedObject Oriented
面向對象的基本概念
對象:對象是要研究的任何事物。從一本書到一家圖書館,單的整數到整數列龐大的資料庫、極其複雜的自動化工廠、太空梭都可看作對象,它不僅能表示有形的實體,也能表示無形的(抽象的)規則、計畫或事件。對象由數據(描述事物的屬性)和作用於數據的操作(體現事物的行為)構成一獨立整體。從程式設計者來看,對象是一個程式模組,從用戶來看,對象為他們提供所希望的行為。在對內的操作通常稱為方法。
類:類是對象的模板。即類是對一組有相同數據和相同操作的對象的定義,一個類所包含的方法和數據描述一組對象的共同屬性和行為。類是在對象之上的抽象,對象則是類的具體化,是類的實例。類可有其子類,也可有其它類,形成類層次結構。
Object OrientedObject Oriented
訊息:訊息是對象之間進行通信的一種規格說明。一般它由三部分組成:接收訊息的對象、訊息名及實際變元。
面向對象主要特徵:
封裝性:封裝是一種信息隱蔽技術,它體現於類的說明,使數據更安全.是對象的重要特性。封裝使數據和加工該數據的方法(函式)封裝為一個整體,以實現獨立性很強的模組,使得用戶只能見到對象的外特性(對象能接受哪些訊息,具有那些處理能力),而對象的內特性(保存內部狀態的私有數據和實現加工能力的算法)對用戶是隱蔽的。封裝的目的在於把對象的設計者和對象者的使用分開,使用者不必知曉行為實現的細節,只須用設計者提供的訊息來訪問該對象。
Object OrientedObject Oriented
繼承性:繼承性是子類自動共享父類之間數據和方法的機制。它由類的派生功能體現。一個類直接繼承其它類的全部描述,同時可修改和擴充。
繼承具有傳遞性和單根性.如果B類繼承了A類,而C類又繼承了B類,則可以說,C類在繼承了B類的同時,也繼承了A類,C類中的對象,可以實現A類中的方法.一個類,只能夠同時繼承另外一個類,而不能同時繼承多個類,通常所說的多繼承是指一個類在繼承其父類的同時,實現其他接口.類的對象是各自封閉的,如果沒繼承性機制,則類對象中數據、方法就會出現大量重複。繼承支持系統的可重用性,從而達到減少代碼量的作用,而且還促進系統的可擴充性。
多態性:對象根據所接收的訊息而做出動作。同一訊息為不同的對象接受時可產生完全不同的行動,這種現象稱為多態性。利用多態性用戶可傳送一個通用的信息,而將所有的實現細節都留給接受訊息的對象自行決定,如是,同一訊息即可調用不同的方法。例如:Print訊息被傳送給一圖或表時調用的列印方法與將同樣的Print訊息傳送給一正文檔案而調用的列印方法會完全不同。多態性的實現受到繼承性的支持,利用類繼承的層次關係,把具有通用功能的協定存放在類層次中儘可能高的地方,而將實現這一功能的不同方法置於較低層次,這樣,在這些低層次上生成的對象就能給通用訊息以不同的回響。在OOPL中可通過在派生類中重定義基類函式(定義為重載函式虛函式)來實現多態性。
Object OrientedObject Oriented
綜上可知,在OO方法中,對象和傳遞訊息分別表現事物及事物間相互聯繫的概念。類和繼承是是適應人們一般思維方式的描述範式。方法是允許作用於該類對象上的各種操作。這種對象、類、訊息和方法的程式設計範式的基本點在於對象的封裝性和類的繼承性。通過封裝能將對象的定義和對象的實現分開,通過繼承能體現類與類之間的關係,以及由此帶來的動態聯編和實體的多態性,從而構成了面向對象的基本特徵。
面向對象的要素
(1)抽象。
抽象是指強調實體的本質、內在的屬性。在系統開發中,抽象指的是在決定如何實現對象之前的對象的意義和行為。使用抽象可以儘可能避免過早考慮一些細節。
類實現了對象的數據(即狀態)和行為的抽象。
(2)封裝性(信息隱藏)。
封裝性是保證軟體部件具有優良的模組性的基礎。
面向對象的類是封裝良好的模組,類定義將其說明(用戶可見的外部接口)與實現(用戶不可見的內部實現)顯式地分開,其內部實現按其具體定義的作用域提供保護。
對象是封裝的最基本單位。封裝防止了程式相互依賴性而帶來的變動影響。面向對象的封裝比傳統語言的封裝更為清晰、更為有力。
(3)共享性
面向對象技術在不同級別上促進了共享
同一類中的共享。同一類中的對象有著相同數據結構。這些對象之間是結構、行為特徵的共享關係。
在同一套用中共享。在同一套用的類層次結構中,存在繼承關係的各相似子類中,存在數據結構和行為的繼承,使各相似子類共享共同的結構和行為。使用繼承來實現代碼的共享,這也是面向對象的主要優點之一。
在不同套用中共享。面向對象不僅允許在同一套用中共享信息,而且為未來目標的可重用設計準備了條件。通過類庫這種機制和結構來實現不同套用中的信息共享。
面向對象的新方法論、新范型、新技術
OO方法的作用和意義決不只局限於編程技術,它是一種新的程式設計范型--面向對象程式設計范型;是信息系統開發的新方法論--面向對象方法學;是正在興起的新技術--面向對象技術面向對象程式設計范型:程式設計范型(以下簡稱程設范型)具體指的是程式設計的體裁,正如文學上有小說、詩歌、散文等體裁,程式設計體裁是用程式設計語言表達各種概念和各種結構的一套設施。
Object OrientedObject Oriented
目前,程設范型分為:過程式程設范型、函式式程設范型,此外還有進程式程設范型、事件程設范型和類型系統程設范型。每一程設范型都有多種程式設計語言支持(如:FORTRAN、PASCAL、C均體現過程式程設范型,用來進行面向過程的程式設計),而某些語言兼備多種范型(如:Lisp屬過程與函式混合范型,C++則是進程與面向對象混合范型的語言)。
過程式程設范型是流行最廣泛的程式設計范型(人們平常所使用的程式設計語言大多屬於此類型一筆勾銷它們為面向過程的語言),這一程設范型的中心點是設計過程,所以程式設計時首先要決定的是問題解所需要的過程,然後設計過程的算法。這類范型的語言必須提供設施給過程(函式)傳送變元和返回的值,如何區分不同種類的過程(函式)、如何傳送變元是這類程式設計中關心的主要問題。面向對象程設范型是在以上范型之上發展起來的,它的關鍵在於加入了類及其繼承性,用類表示通用特性,子類繼承父類的特性,並可加入新的特性。對象以類為樣板被創建。所以在面向對象程設范中,首要的任務是決定所需要的類,每個類應設定足夠的操作,並利用繼承機制里二地共享共同的特性。
Object OrientedObject Oriented
簡而言之,面向對象程設范型具有其它范型所缺乏或不具備的特點,極富生命力,能夠適應複雜的大型的軟體開發。可以肯定地說,這種新的程設范型必將有力地推動軟體開發的新的進展。限於篇幅,其它程設范型在此不作細述。
面向對象方法學:OO方法遵循一般的認知方法學的基本概念(即有關演繹--從一般到特殊和歸納--從特殊到一般的完整理論和方法體系)而建立面向對象方法等基礎。面向對象方法學要點之一:認為客觀世界是由各種"對象"所組成的,任何事物都是對象,每一個對象都有自己的運動規律和內部狀態,每一個對象都屬於某個對象"類",都是該對象類的一個元素。複雜的對象可以是由相對比較簡單的各種對象以某種方式而構成的。不同對象的組合及相互作用就構成了我們要研究、分析和構造的客觀系統。面向對象方法學要點之二:是通過類比,發現對象間的相似性,即對象間的共同屬性,這就是構成對象類的依據。在?quot;類"、"父類"、"子類"的概念構成對象類的層次關係時,若不加特殊說明,則處在下一層次上的對象可自然地繼承位於上一層次上的對象的屬性。面向對象方法學要點之三:認為對已分成類的各個對象,可以通過定義一組"方法"來說明該對象的功能,即允許作用於該對象上的各種操作。對象間的相互聯繫是通過傳遞"訊息"來完成的,訊息就是通知對象去完成一個允許作用於該對象的操作,至於該對象將如何完成這個操作的細節,則是封裝在相應的對象類的定義中的,細節對於外界是隱蔽的。
Object OrientedObject Oriented
可見,OO方法具有很強的類的概念,因此它就能很自然地直觀地模擬人類認識客觀世界的方式,亦即模擬人類在認知進程中的由一般到特殊的演繹功能或由特殊到一般的歸納功能,類的概念既反映出對象對象的本質屬性,又提供了實現對象共享機制的理論根據。當我們遵照面向對象方法學的思想進行軟體系統開發時,首先要行面向對象的分析(OOA――Object Oriented Analysis),其任務是了解問題域所涉及的對象、對象間的關係和作用(即操作),然後構造問題的對象模型,力爭該模型能真實地反映出所要解決的"實質問題"。在這一過程中,抽象是最本質、最重要的方法。針對不同的問題性質選擇不同的抽象層次,過簡或過繁都會影響到對問題的本質屬性的了解和解決。
Object OrientedObject Oriented
其次就是進行面向對象的設計(OOD――Object Oriented Design),即設計軟體的對象模型。根據所套用的面向對象軟體開發環境的功能強弱不等,在對問題的對象模型的分析基礎上,可能要對它進行一定的改造,但應以最少改變原問題域的對象模型為原則。然後就在軟體系統內設設計各個對象、對象間的關係(如層次關係、繼承關係等)、對象間的通信方式(如訊息模式)等,總之是設計各個對?quot;應做些什麼"。
最後階段是面向對象的實現(OOI-- Object Oriented Implementation),即指軟體功能的編碼實現,它包括:每個對象的內部功能的實現;確立對象哪一些處理能力應在哪些類中進行描述;確定並實現系統的界面、輸出的形式及其它控制機理等,總之是實現在OOD階段所規定的各個對象所應完成的任務。
用OO方法進行面向對象程式設計,其基本步驟如下:
(1) 分析確定在問題空間和解空間出現的全部對象及其屬性;(2) 確定應施加於每個對象的操作,即對象固有的處理能力;
Object OrientedObject Oriented
(3) 分析對象間的聯繫,確定對象彼此間傳遞的訊息;
(4) 設計對象的訊息模式,訊息模式和處理能力共同構成對象的外部特性;
(5) 分析各個對象的外部特性,將具有相同外部特性的對象歸為一類,從而確定所需要的類;
(6) 確定類間的繼承關係,將各對象的公共性質放在較上層的類中描述,通過繼承來共享對公共性質的描述;
(7) 設計每個類關於對象外部特性的描述;
(8) 設計每個類的內部實現(數據結構和方法);
(9) 創建所需的對象(類的實例),實現對象間應有的聯繫(發訊息)。
面向對象技術:技術"泛指根據生產實踐經驗和自然科學原理
而發展起來的各種工藝操作方法與技能";"廣義地講,還包括相應的生產工具和其它物質設備,以及生產的工藝過程或作業程式、方法"。OO方法既是程式設計新范型、系統開發的新方法學,作為一門新技術它就有了基本的依據,事實上,OO方法可支持種類不同的系統開發地,已經或正在許多方面得以套用,因此,可以說OO方法是一門新的技術――面向對象技術
近十多年來,除了面向對象的程式設計以外,OO方法已發展套用到整個信息系統領域和一些新興的工業領域,包括:用戶界面(特別是圖形用戶界面――GUI)、套用集成平台、面向對象資料庫OODB)、分散式系統、網路管理結構、人工智慧領域以及並發工程、綜合集成工程等。人工智慧是和計算機密切相關的新領域,在很多方面已經採用面向對象技術,如知識的表示,專家系統的建造、用戶界面等。人工智慧的軟體通常規模較大,用面向對象技術有可能更好地設計並維護這類程式。80年代後期形成的並發工程,其概念要點是在產品開發初期(即方案設計階段)就把結構、工藝、加工、裝配、測試、使用、市場等問題同期並行地啟動運行,其實現必須有兩個基本條件:一是專家群體,二是共享並管理產品信息(將CAD、CAE、CIN緊密結合在一起)。顯然,這需要面向對象技術的支持。目前,一些公司採用並發工程組織產品的開發,已取得顯著效益:波音公司用以開發巨型777運輸機,比開發767節省了一年半時間;日本把並發工程用於新型號的汽車生產,和美國相比只用一半的時間。產業界認為它們念後的生存要依靠並發工程,而面向對象技術是促進並發工程發展的重要支持。
Object OrientedObject Oriented
綜合集成工程是開發大型開放式複雜統的新的工程概念,和並發工程相似,專家群體的組織和共享信息,是支持這一新工程概念的兩大支柱。由於開放式大系統包含人的智慧型活動,建立數學模型非常困難,而OO方法能夠比較自然地刻劃現實世界,容易達到問題空間和程式空間的一致,能夠在多種層次上支持複雜系統層次模型的建立,是研究綜合集成工程的重要工具。
面向對象技術對於並發工程和綜合集成工程的作用,一方面說明了這一新技術套用範圍的寬廣,同時也說明了它的重要影響,更證明了面向對象技術是一門新興的值得廣泛重視的技術。
綜上所述,可歸納出OO方法用於系統開發有如下優越性:
(1) 強調從現實世界中客觀存在的事物(對象)出發來認識問
題域和構造系統,這就使系統開發者大大減少了對問題域的理解難度,從而使系統能更準確地反映問題域。
(2) 運用人類日常的思維方法和原則(體現於OO方法的抽
象、分類、繼承、封裝、訊息通訊等基本原則)進行系統開發,有益於發揮人類的思維能力,並有效地控制了系 統複雜性。
(3) 對象的概念貫穿於開發過程的終,使各個開發階段的系統
成分具良好的對應,從而顯著地提高了系統的開發效率與質量,並大大降低系統維護的難度。
(4) 對象概念的一致性,使參與系統開發的各類人員在開發的各所段具有共同語言,有效地改善了人員之間的 交流和協作。
(5) 對象的相對穩定性和對易變因素隔離,增強了系統的應變能力。
(6) 對象類之間的繼承關係和對象的相對獨立性,對軟體復用提供了強有力的支持。

對象設計

面向對象設計是把分析階段得到的需求轉變成符合成本和質量要求的、抽象的系統實現方案的過程。從面向對象分析到面向對象設計,是一個逐漸擴充模型的過程。
瀑布模型把設計進一步劃分成概要設計詳細設計兩個階段,類似地,也可以把面向對象設計再細分為系統設計和對象設計。系統設計確定實現系統的策略和目標系統的高層結構。對象設計確定解空間中的類、關聯、接口形式及實現操作的算法。
(一)面向對象設計的準則
1.模組化
面向對象開發方法很自然地支持了把系統分解成模組的設計原則:對象就是模組。它是把數據結構和操作這些數據的方法緊密地結合在一起所構成的模組。
2.抽象
面向對象方法不僅支持過程抽象,而且支持數據抽象。
3.信息隱藏
在面向對象方法中,信息隱藏通過對象的封裝性來實現。
4.低耦合
在面向對象方法中,對象是最基本的模組,因此,耦合主要指不同對象之間相互關聯的緊密程度。低耦合是設計的一個重要標準,因為這有助於使得系統中某一部分的變化對其它部分的影響降到最低程度。
(1)操作內聚。
(2)類內聚。
(3)一般——具體內聚。
(二)面向對象設計的啟發規則
1.設計結果應該清晰易懂
使設計結果清晰、易懂、易讀是提高軟體可維護性和可重用性的重要措施。顯然,人們不會重用那些他們不理解的設計。
要做到:
(1)用詞一致。
(2)使用已有的協定。
(3)減少訊息模式的數量。
(4)避免模糊的定義。
2.一般——具體結構的深度應適當
3.設計簡單類
應該儘量設計小而簡單的類,這樣便以開發和管理。為了保持簡單,應注意以下幾點:
(1)避免包含過多的屬性。
(2)有明確的定義。
(3)儘量簡化對象之間的合作關係。
(4)不要提供太多的操作。
4.使用簡單的協定
一般來說,訊息中參數不要超過3個。
5.使用簡單的操作
面向對象設計出來的類中的操作通常都很小,一般只有3至5行源程式語句,可以用僅含一個動詞和一個賓語的簡單句子描述它的功能。
6.把設計變動減至最小
通常,設計的質量越高,設計結果保持不變的時間也越長。即使出現必須修改設計的情況,也應該使修改的範圍儘可能小。
(三)系統設計
系統設計是問題求解及建立解答的高級策略。必須制定解決問題的基本方法,系統的高層結構形式包括子系統的分解、它的固有並發性、子系統分配給硬軟體、數據存儲管理、資源協調、軟體控制實現、人機互動接口。
1.系統設計概述
設計階段先從高層入手,然後細化。系統設計要決定整個結構及風格,這種結構為後面設計階段的更詳細策略的設計提供了基礎。
(1)系統分解。
系統中主要的組成部分稱為子系統,子系統既不是一個對象也不是一個功能,而是類、關聯、操作、事件和約束的集合。
(2)確定並發性。
分析模型、現實世界及硬體中不少對象均是並發的。
(3)處理器及任務分配。
各並發子系統必須分配給單個硬體單元,要么是一個一般的處理器,要么是一個具體的功能單元。
(4)數據存儲管理。
系統中的內部數據和外部數據的存儲管理是一項重要的任務。通常各數據存儲可以將數據結構、檔案、資料庫組合在一起,不同數據存儲要在費用、訪問時間、容量及可靠性之間做出折衷考慮。
(5)全局資源的處理。
必須確定全局資源,並且制定訪問全局資源的策略。
(6)選擇軟體控制機制。
分析模型中所有互動行為都表示為對象之間的事件。系統設計必須從多種方法中選擇某種方法來實現軟體的控制。
(7)人機互動接口設計。
設計中的大部分工作都與穩定的狀態行為有關,但必須考慮用戶使用系統的互動接口。
2.系統結構的一般框架
3.系統分解——建立系統的體系結構
可用的軟體庫以及程式設計師的編程經驗。
通過面向對象分析得到的問題域精確模型,為設計體系結構奠定了良好的基礎,建立了完整的框架。
4.選擇軟體控制機制
軟體系統中存在兩種控制流,外部控制流和內部控制流。
5.數據存儲管理
數據存儲管理是系統存儲或檢索對象的基本設施,它建立在某種數據存儲管理系統之上,並且隔離了數據存儲管理模式的影響。
6.設計人機互動接口
在面向對象分析過程中,已經對用戶界面需求作了初步分析,在面向對象設計過程中,則應該對系統的人機互動接口進行詳細設計,以確定人機互動的細節,其中包括指定視窗和報表的形式、設計命令層次等項內容。
(四)對象設計
1.對象設計概述
2.三種模型的結合
(1)獲得操作。
(2)確定操作的目標對象。
3.算法設計
4.最佳化設計
5.控制的實現
6.調整繼承
7.關聯的設計

對象實現

採用面向對象方法開發軟體的基本目的和主要優點是通過重用提高軟體的生產率。因此,應該優先選用能夠最完善、最準確地表達問題域語義的面向對象語言。
在選擇程式語言時,應該考慮的其他因素還有:對用戶學習面向對象分析、設計和編碼技術所能提供的培訓操作;在使用這個面向對象語言期間能提供的技術支持;能提供給開發人員使用的開發工具、開發平台,對機器性能和記憶體的需求,集成已有軟體的容易程度。
(1)提高重用性。
(2)提高可擴充性。
(3)提高健壯性
(二)類的實現
在開發過程中,類的實現是核心問題。在用面向對象風格所寫的系統中,所有的數據都被封裝在類的實例中。而整個程式則被封裝在一個更高級的類中。在使用既存部件的面向對象系統中,可以只花費少量時間和工作量來實現軟體。只要增加類的實例,開發少量的新類和實現各個對象之間互相通信的操作,就能建立需要的軟體。
一種方案是先開發一個比較小、比較簡單的來,作為開發比較大、比較複雜的類的基礎。
(1)“原封不動”重用。
(2)進化性重用。
一個能夠完全符合要求特性的類可能並不存在。
(3)“廢棄性”開發。
不用任何重用來開發一個新類。
(4)錯誤處理。
一個類應是自主的,有責任定位和報告錯誤。
(三)套用系統的實現
套用系統的實現是在所有的類都被實現之後的事。實現一個系統是一個比用過程性方法更簡單、更簡短的過程。有些實例將在其他類的初始化過程中使用。而其餘的則必須用某種主過程顯式地加以說明,或者當作系統最高層的類的表示的一部分。
在C++和C中有一個main( )函式,可以使用這個過程來說明構成系統主要對象的那些類的實例。
(四)面向對象測試
(1)算法層。
(2)類層。
測試封裝在同一個類中的所有方法和屬性之間的相互作用。
(3)模板層。
測試一組協同工作的類之間的相互作用。
(4)系統層。
把各個子系統組裝成完整的面向對象軟體系統,在組裝過程中同時進行測試。

方法

OOA方法

面向對象的分析方法(OOA),是在一個系統的開發過程中進行了系統業務調查以後,按照面向對象的思想來分析問題。OOA與結構化分析有較大的區別。OOA所強調的是在系統調查資料的基礎上,針對OO方法所需要的素材進行的歸類分析和整理,而不是對管理業務現狀和方法的分析。
(一)處理複雜問題的原則
用OOA方法對所調查結果進行分析處理時,一般依據以下幾項原則:
抽象(abstraction)是指為了某一分析目的而集中精力研究對象的某一性質,它可以忽略其它與此目的無關的部分。在使用這一概念時,我們承認客觀世界的複雜性,也知道事物包括有多個細節,但此時並不打算去完整地考慮它。抽象是我們科學地研究和處理複雜問題的重要方法。抽象機制被用在數據分析方面,稱之為數據抽象。數據抽象是OOA的核心。數據抽象把一組數據對象以及作用其上的操作組成一個程式實體。使得外部只知道它是如何做和如何表示的。在套用數據抽象原理時,系統分析人員必須確定對象的屬性以及處理這些屬性的方法,並藉助於方法獲得屬性。在OOA中屬性和方法被認為是不可分割的整體。抽象機制有時也被用在對過程的分解方面,被稱之為過程抽象。恰當的過程抽象可以對複雜過程的分解和確定以及描述對象發揮積極的作用。
封裝(encapsulation)即信息隱蔽。它是指在確定系統的某一部分內容時,應考慮到其它部分的信息及聯繫都在這一部分的內部進行,外部各部分之間的信息聯繫應儘可能的少。
繼承(inheritance)是指能直接獲得已有的性質和特徵而不必重複定義它們。OOA可以一次性地指定對象的公共屬性和方法,然後再特化和擴展這些屬性及方法為特殊情況,這樣可大大地減輕在系統實現過程中的重複勞動。在共有屬性的基礎之上,繼承者也可以定義自己獨有的特性。
相關(association)是指把某一時刻或相同環境下發生的事物聯繫在一起。
訊息通信(communication with message)是指在對象之間互相傳遞信息的通信方式。
組織方法。在分析和認識世界時,可綜合採用如下三種組織方法(method Of organization):
1。特定對象與其屬性之間的區別。
2。整體對象與相應組成部分對象之間的區別。
3。不同對象類的構成及其區別等。
比例(scale)是一種運用整體與部分原則,輔助處理複雜問題的方法。
行為範疇(categories Of behavior)是針對被分析對象而言的,它們主要包括:1。基於直接原因的行為。2。時變性行為。3。功能查詢性行為。
(二)OOA方法的基本步驟
在用OOA具體地分析一個事物時,大致上遵循如下五個基本步驟:
第一步,確定對象和類。這裡所說的對象是對數據及其處理方式的抽象,它反映了系統保存和處理現實世界中某些事物的信息的能力。類是多個對象的共同屬性和方法集合的描述,它包括如何在一個類中建立一個新對象的描述。
第二步,確定結構(structure)。結構是指問題域的複雜性和連線關係。類成員結構反映了泛化-特化關係,整體-部分結構反映整體和局部之間的關係。
第三步,確定主題(subject)。主題是指事物的總體概貌和總體分析模型。
第四步,確定屬性(attribute)。屬性就是數據元素,可用來描述對象或分類結構的實例,可在圖中給出,並在對象的存儲中指定。
第五步,確定方法(method)。方法是在收到訊息後必須進行的一些處理方法:方法要在圖中定義,並在對象的存儲中指定。對於每個對象和結構來說,那些用來增加、修改、刪除和選擇一個方法本身都是隱含的(雖然它們是要在對象的存儲中定義的,但並不在圖上給出),而有些則是顯示的。

OOD方法

面向對象的設計方法(OOD)是OO方法中一個中間過渡環節。其主要作用是對OOA分析的結果作進一步的規範化整理,以便能夠被OOP直接接受。在OOD的設計過程中,要展開的主要有如下幾項工作。
(一)對象定義規格的求精過程
對於OOA所抽象出來的對象-&-類以及匯集的分析文檔,OOD需要有一個根據設計要求整理和求精的過程,使之更能符合OOP的需要。這個整理和求精過程主要有兩個方面:一是要根據面向對象的概念模型整理分析所確定的對象結構、屬性、方法等內容,改正錯誤的內容,刪去不必要和重複的內容等。二是進行分類整理,以便於下一步資料庫設計和程式處理模組設計的需要。整理的方法主要是進行歸類,對類一&一對象、屬性、方法和結構、主題進行歸類。
(二)數據模型和資料庫設計
數據模型的設計需要確定類-&-對象屬性的內容、訊息連線的方式、系統訪問、數據模型的方法等。最後每個對象實例的數據都必須落實到面向對象的庫結構模型中。
(三)最佳化
OOD的最佳化設計過程是從另一個角度對分析結果和處理業務過程的整理歸納,最佳化包括對象和結構的最佳化、抽象、集成。
對象和結構的模組化表示OOD提供了一種範式,這種範式支持對類和結構的模組化。這種模組符合一般模組化所要求的所有特點,如信息隱蔽性好,內部聚合度強和模組之間耦合度弱等。
集成化使得單個構件有機地結合在一起,相互支持。

Booch方法

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

Coad方法

Coad方法是1989年Coad和Yourdon提出的面向對象開發方法。該方法的主要優點是通過多年來大系統開發的經驗與面向對象概念的有機結合,在對象、結構、屬性和操作的認定方面,提出了一套系統的原則。該方法完成了從需求角度進一步進行類和類層次結構的認定。儘管Coad方法沒有引入類和類層次結構的術語,但事實上已經在分類結構、屬性、操作、訊息關聯等概念中體現了類和類層次結構的特徵。

OMT方法

OMT方法是1991年由James Rumbaugh等5人提出來的,其經典著作為“面向對象的建模與設計”。
該方法是一種新興的面向對象的開發方法,開發工作的基礎是對真實世界的對象建模,然後圍繞這些對象使用分析模型來進行獨立於語言的設計,面向對象的建模和設計促進了對需求的理解,有利於開發得更清晰、更容易維護的軟體系統。該方法為大多數套用領域的軟體開發提供了一種實際的、高效的保證,努力尋求一種問題求解的實際方法。

UML語言

軟體工程領域在1995年~1997年取得了前所未有的進展,其成果超過軟體工程領域過去15年的成就總和,其中最重要的成果之一就是統一建模語言(UML)的出現。UML將是面向對象技術領域內占主導地位的標準建模語言
UML不僅統一了Booch方法、OMT方法、OOSE方法的表示方法,而且對其作了進一步的發展,最終統一為大眾接受的標準建模語言。UML是一種定義良好、易於表達、功能強大且普遍適用的建模語言。它融入了軟體工程領域的新思想、新方法和新技術。它的作用域不限於支持面向對象的分析與設計,還支持從需求分析開始的軟體開發全過程。

對象分析

面向對象分析的目的是對客觀世界的系統進行建模。本節以上面介紹的模型概念為基礎,結合“銀行網路系統”的具體實例來構造客觀世界問題的準確、嚴密的分析模型。
分析模型有三種用途:用來明確問題需求;為用戶和開發人員提供明確需求;為用戶和開發人員提供一個協商的基礎,作為後繼的設計和實現的框架。

面向對象的分析

系統分析的第一步是:陳述需求。分析者必須同用戶一塊工作來提煉需求,因為這樣才表示了用戶的真實意圖,其中涉及對需求的分析及查找丟失的信息。下面以“銀行網路系統”為例,用面向對象方法進行開發。
銀行網路系統問題陳述: 設計支持銀行網路的軟體,銀行網路包括人工出納站和分行共享的自動出納機。每個分理處用分理處計算機來保存各自的帳戶,處理??通信,出納站錄入帳戶和事務數據;自動出納機與分行計算機通信,分行計算機與撥款分理處結帳,自動出納機與用戶接口接受現金卡,與分行計算機通信完成事務,發放現金,列印收據;系統需要記錄保管和安全措施;系統必須正確處理同一帳戶的並發訪問;每個分處理為自己的計算機準備軟體,銀行網路費用根據顧客和現金卡的數目分攤給各分理處。

建立對象模型

首先標識和關聯,因為它們影響了整體結構和解決問題的方法,其次是增加屬性,進一步描述類和關聯的基本網路,使用繼承合併和組織類,最後操作增加到類中去作為構造動態模型功能模型的副產品。
1.確定類
構造對象模型的第一步是標出來自問題域的相關的對象類,對象包括物理實體和概念。所有類在套用中都必須有意義,在問題陳述中,並非所有類都是明顯給出的。有些是隱含在問題域或一般知識中的。
查找問題陳述中的所有名詞,產生如下的暫定類。
軟體 銀行網路 出納員 自動出納機 分行
分處理 分處理計算機 帳戶 事務 出納站
事務數據 分行計算機 現金卡 用戶 現金
收據 系統 顧客 費用 帳戶數據
訪問 安全措施 記錄保管
根據下列標準,去掉不必要的類和不正確的類。
(1)冗餘類:若兩個類表述了同一個信息 ,保留最富有描述能力的類。如"用戶"和"顧客"就是重複的描述,因為"顧客"最富有描述性,因此保留它。
(2) 不相干的類:除掉與問題沒有關係或根本無關的類。例如,攤派費用超出了銀行網路的範圍。
(3) 模糊類:類必須是確定的,有些暫定類邊界定義模糊或範圍太廣,如"記錄保管"就模糊類,它是"事務"中的一部分。
(4) 屬性:某些名詞描述的是其他對象的屬性,則從暫定類中刪除。如果某一性質的獨立性很重要,就應該把他歸屬到類,而不把它作為屬性。
(5) 操作:如果問題陳述中的名詞有動作含義,則描述的操作就不是類。但是具有自身性質而且需要獨立存在的操作應該描述成類。如我們只構造電話模型,"撥號"就是動態模型的一部分而不是類,但在電話撥號系統中,"撥號"是一個重要的類,它日期、時間、受話地點等屬性。
在銀行網路系統中,模糊類是"系統"、"安全措施"、"記錄保管"、"銀行網路"等。屬於屬性的有:"帳戶數據"、"收據"、"現金"、"事務數據"。屬於實現的如:"訪問"、"軟體"等。這些均應除去。
2.準備數據字典
為所有建模實體準備一個數據字典。準確描述各個類的精確含義,描述當前問題中的類的範圍,包括對類的成員、用法方面的假設或限制。
3.確定關聯
兩個或多個類之間的相互依賴就是關聯。一種依賴表示一種關聯,可用各種方式來實現關聯,但在分析模型中應刪除實現的考慮,以便設計時更為靈活。關聯常用描述性動詞或動詞詞組來表示,其中有物理位置的表示、傳導的動作、通信、所有者關係、條件的滿足等。從問題陳述中抽取所有可能的關聯表述,把它們記下來,但不要過早去細化這些表述。
下面是銀行網路系統中所有可能的關聯,大多數是直接抽取問題中的動詞詞組而得到的。在陳述中,有些動詞詞組表述的關聯是不明顯的。最後,還有一些關聯與客觀世界或人的假設有關,必須同用戶一起核實這種關聯,因為這種關聯在問題陳述中找不到。
銀行網路問題陳述中的關聯:
·銀行網路包括出納站和自動出納機;
·分行共享自動出納機;
·分理處提供分理處計算機;
·分理處計算機保存帳戶;
·分理處計算機處理帳戶支付事務;
·分理處擁有出納站;
·出納站與分理處計算機通信;
·出納員為帳戶錄入事務;
·自動出納機接受現金卡;
·自動出納機與用戶接口;
·自動出納機發放現金;
·自動出納機列印收據;
·系統處理並發訪問;
·分理處提供軟體;
·費用分攤給分理處。
隱含的動詞詞組:
·分行由分理處組成;
·分理處擁有帳戶;
·分行擁有分行計算機;
·系統提供記錄保管;
·系統提供安全;
·顧客有現金卡。
基於問題域知識的關聯:
·分理處僱傭出納員;
·現金卡訪問帳戶。
使用下列標準去掉不必要和不正確的關聯:
(1) 若某個類已被刪除,那么與它有關的關聯也必須刪除或者用其它類來重新表述。在例中,我們刪除了"銀行網路",相關的關聯也要刪除。
(2) 不相干的關聯或實現階段的關聯:刪除所有問題域之外的關聯或涉及實現結構中的關聯。如"系統處理並發訪問"就是一種實現的概念。
(3) 動作:關聯應該描述套用域的結構性質而不是瞬時事件,因此應刪除"自動出納機接受現金卡","自動出納機與用戶接口"等。
(4) 派生關聯:省略那些可以用其他關聯來定義的關聯。因為這種關聯是冗餘的。銀行網路系統的初步對象圖其中含有關聯。
4.確定屬性
屬性是個體對象?詞常常表示具體的可枚舉的屬性值,屬性不可能在問題陳述中完全表述出來,必須藉助於套用域的知識及對客觀世界的知識才可以找到它們。只考慮與具體套用直接相關的屬性,不要考慮那些超出問題範圍的屬性。首先找出重要屬性,避免那些只用於實現的屬性,要為各個屬性取有意義的名字。按下列標準刪除不必要的和不正確的屬性:
(1) 對象:若實體的獨立存在比它的值重要,那么這個實體不是屬性而是對象。如在郵政目錄中,"城市"是一個屬性,然而在人口普查中,"城市"則被看作是對象。在具體套用中,具有自身性質的實體一定是對象。
(2) 定詞:若屬性值取決於某種具體上下文,則可考慮把該屬性重新表述為一個限定詞。
(3) 名稱:名稱常常作為限定詞而不是對象的屬性,當名稱不依賴於上下文關係時,名稱即為一個對象屬性,尤其是它不惟一時。
(4)標識符:在考慮對象模糊性時,引入對象標識符表示,在對象模型中不列出這些對象標識符,它是隱含在對象模型中,只列出存在於套用域的屬性。
(5) 內部值:若屬性描述了對外不透明的對象的內部狀態,則應從對象模型中刪除該屬性。
(6) 細化:忽略那些不可能對大多數操作有影響的屬性。
5.使用繼承來細化類
使用繼承來共享公共機構,以次來組織類,可以用兩種方式來進行。
(1) 自底向上通過把現有類的共同性質一般化為父類,尋找具有相似的屬性,關係或操作的類來發現繼承。例如"遠程事務"和"出納事務"是類似的,可以一般化為"事務"。有些一般化結構常常是基於客觀世界邊界的現有分類,只要可能,儘量使用現有概念。對稱性常有助於發現某些丟失的類。
(2) 自頂向下將現有的類細化為更具體的子類。具體化常常可以從套用域中明顯看出來。套用域中各枚舉字情況是最常見的具體化的來源。例如:選單,可以有固定選單,頂部選單,彈出選單,下拉選單等,這就可以把選單類具體細化為各種具體選單的子類。當同一關聯名出現多次且意義也相同時,應儘量具體化為相關聯的類,例如"事務"從"出納站"和"自動出納機"進入,則"錄入站"就是"出納站"和"自動出納站"的一般化。在類層次中,可以為具體的類分配屬性和關聯。各屬性和都應分配給最一般的適合的類,有時也加上一些修正。
套用域中各枚舉情況是最常見的具體化的來源。
6.完善對象模型
對象建模不可能一次就能保證模型是完全正確的,軟體開發的整個過程就是一個不斷完善的過程。模型的不同組成部分多半是在不同的階段完成的,如果發現模型的缺陷,就必須返回到前期階段去修改,有些細化工作是在動態模型功能模型完成之後才開始進行的。
(1) 幾種可能丟失對象的情況及解決辦法:
·同一類中存在毫無關係的屬性和操作,則分解這個類,使各部分相互關聯;
·一般化體系不清楚,則可能分離扮演兩種角色的類
·存在無目標類的操作,則找出並加上失去目標的類;
·存在名稱及目的相同的冗餘關聯,則通過一般化創建丟失的父類,把關聯組織在一起。
(2) 查找多餘的類。
類中缺少屬性,操作和關聯,則可刪除這個類。
(3)查找丟失的關聯。
丟失了操作的訪問路徑,則加入新的關聯以回答查詢。
(4) 網路系統的具體情況作如下的修改:
①現金卡有多個獨立的特性。把它分解為兩個對象:卡片許可權和現金卡。
a.卡片許可權:它是銀行用來鑑別用戶訪問許可權的卡片,表示一個或多個用戶帳戶的訪問許可權;各個卡片許可權對象中可能具有好幾個現金卡,每張都帶有安全碼,卡片碼,它們附在現金卡上,表現銀行的卡片許可權。
b.現金卡:它是自動出納機得到表示碼的數據卡片,它也是銀行代碼和現金卡代碼的數據載體。
②"事務"不能體現對帳戶之間的傳輸描述的一般性,因它只涉及一個帳戶,一般來說,在每個帳戶中,一個"事務"包括一個或多個"更新",一個"更新"是對帳戶的一個動作,它們是取款,存款,查詢之一。一個"更新"中所有"更新"應該是一個原子操作
③"分理處"和"分離處理機"之間,"分行"和"分行處理機"之間的區別似乎並不影響分析,計算機的通信處理實際上是實現的概念,將"分理處計算機"併入到"分理處",將"分行計算機"併入到"分行"。

建立動態模型

1.準備腳本
動態分析從尋找事件開始,然後確定各對象的可能事件順序。在分析階段不考慮算法的執行,算法是實現模型的一部分。
2.確定事件
確定所有外部事件。事件包括所有來自或發往用戶的信息、外部設備的信號、輸入、轉換和動作,可以發現正常事件,但不能遺漏條件和異常事件。
3.準備事件跟蹤表
把腳本表示成一個事件跟蹤表,即不同對象之間的事件排序表,對象為表中的列,給每個對象分配一個獨立的列。
4.構造狀態圖
對各對象類建立狀態圖,反映對象接收和傳送的事件,每個事件跟蹤都對應於狀態圖中一條路徑。
(四)建立功能建模
功能模型用來說明值是如何計算的,表明值之間的依賴關係及相關的功能,數據流圖有助於表示功能依賴關係,其中的處理應於狀態圖的活動和動作,其中的數據流對應於對象圖中的對象或屬性。
1.確定輸入值、輸出值
先列出輸入、輸出值,輸入、輸出值是系統與外界之間的事件的參數。
2.建立數據流圖
數據流圖說明輸出值是怎樣從輸入值得來的,數據流圖通常按層次組織。
(五)確定操作
在建立對象模型時,確定了類、關聯、結構和屬性,還沒有確定操作。只有建立了動態模型功能模型之後,才可能最後確定類的操作。

套用

當前,在研究OO方法的熱潮中,有如下主要研究領域:
(1) 智慧型計算機的研究。因為OO方法可將知識片看作對象,並為相關知識的模組化提供方便,所以在知識工程領域越來越受到重視。OO方法的設計思想被引入到智慧型計算機的研究中。
(2) 新一代作業系統的研究。採用OO方法來組織設計新一代作業系統具有如下優點:採用對象來描述OS所需要設計、管理的各類資源信息,如檔案、印表機、處理機、各類解設等更為自然;引入OO方法來處理OO的諸多事務,如命名、同步、保護、管理等,會更易實現、更便於維護;OO方法對於多機、並發控制可提供有力的支持,並能得當地管理網路,使其更豐富和協調。
(3) 多學科的綜合研究。當前,人工智慧、資料庫、程式語言的研究有匯合趨勢。例如,在研究新一代資料庫系統智慧型資料庫系統)中,能否用人工智慧思想與OO方法建立描述功能更強的數椐模型?能否將資料庫語言和程式語言融為一體?為了實現多學科的綜合,OO方法是一個很有希望的匯聚點。
(4) 新一代面向對象硬體系統的研究。要支持採用OO方法設計的軟體系統的運行,必須建立更理想的能支持OO方法的硬體環境。目前採用松耦合(分布主存)結構的多處理機系統更接近於OO方法的思想;作為最新出現的神經網路計算機的體系結構與OO方法的體系結構具有驚人的類似,並能相互支持與配合:一個神經元就是一個小粒度的對象;神經元的連線機制與OO方法的訊息傳送有著天然的聯繫;一次連線可以看作一次訊息的傳送。可以預料,將OO方法與神經網路研究相互結合,必然可以開發出功能更強、更迷人的新一代計算機硬體系統

相關詞條

熱門詞條

聯絡我們