更新時間:2022-05-27 10:19:28 來源:動力節點 瀏覽1720次
面向對象的概念和應用已超越了程序設計和軟件開發,擴展到如數據庫系統,交互式界面,分布式系統,網絡管理結構和人工智能等領域。面向對象的技術已成為軟件開發的一種新方法,新技術。
面向對象的開發方法——OOSD法是一種把面向對象的思想應用于軟件開發過程,指導開發活動的系統方法。
問題空間——軟件系統所涉及到的應用領域和業務范圍(現實世界)。
解空間——用于解決某些問題的軟件系統。
(1)軟件開發過程
(2)傳統軟件開發方法存在的問題
1)傳統軟件開發方法無法實現從問題空間到解空間的直接映射。
2)傳統軟件開發方法無法實現高效的軟件復用。
原因是:傳統軟件開發方法數據與代碼(操作)分離。
3)傳統軟件開發方法難以實現從分析到設計的直接過渡。
(3)面向對象技術的特點
1)對軟件開發過程所有階段進行綜合考慮。使問題空間與解空間具有一致性,降低復雜性。
2)軟件生存期各階段所使用的方法、技術具有高度的連續性,用符合人類認識世界的思維方式來分析、解決問題。
3)將OOA(面向對象分析)、OOD(面向對象設計)、OOP(面向對象編程)有機地集成在一起。有利于系統的穩定性。
以對象為中心各種構造系統,而不是以功能為中心,能很好地適應需求變化。
4)具有良好的可重用性
由于對象所具有的封裝性和信息隱蔽,具有很強的獨立性。
理解面向對象的基本概念對于學習和掌握面向對象的開發方法十分重要。
(1)對象
對象(Object)是客觀事物或概念的抽象表述,即對客觀存在的事物的描述統稱為對象。
對象可以是事、物、或抽象概念 ,是將一組數據和使用該數據的一組基本操作或過程封裝在一起的實體。
屬性(attribute)—對象本身的性質。
操作(operation)—給對象定義一組運算。
對象將它自身的屬性及運算“包裝起來”,稱為“封裝”(encapsulation)。
對象的最基本的特征是封裝性和繼承性。
(2)類
類又稱對象類(Object Class),是一組具有相同屬性和相同操作的對象的集合。
在一個類中,每個對象都是類的實例(instance) ,它們都可以使用類中提供的函數。
類具有屬性,用數據結構來描述類的屬性,
類具有操作,它是對象的行為的抽象,操作實現的過程稱為方法(method),方法有方法名,方法體和參數。
由于對象是類的實例,在進行分析和設計時,通常把注意力集中在類上,而不是具體的對象上。
對象和類的描述:類和對象一般采用“**名字”、“屬性”和“運算”**來描述。
(3)繼承
繼承是使用現存的定義作為基礎,建立新定義的技術。是父類和子類之間共享數據結構和方法的機制,這是類之間的一種關系。
繼承性分:
單重繼承:一個子類只有一個父類。即子類只繼承一個父類的數據結構和方法。
多重繼承:一個子類可有多個父類。繼承多個父類的數據結構和方法。
(4)消息
消息就是向對象發出的服務請求(互相聯系、協同工作等)。對象之間的聯系可表示為對象間的消息傳遞,即對象間的通訊機制。
一個消息應該包含以下信息:消息名、接收消息對象的標識、服務標識 、消息和方法、輸入信息、回答信息。
在對象的操作中當一個消息發送給某個對象時,消息包含接收對象去執行某種操作的消息。
(5)多態性和動態綁定
多態性(Polymorphism)是指相同的操作或函數、過程作用于不同的對象上并獲得不同的結果。
動態綁定(dynamic binding)是在運行時根據對象接收的消息動態地確定要連接的服務代碼。
使用虛函數可實現動態聯編,不同聯編可以選擇不同的實現,這便是多態性。
繼承是動態聯編的基礎,虛函數是動態聯編的關鍵。
實現多態性的基本步驟:
1)在基類中,定義成員函數為虛函數(virtual);
2)定義基類的公有(public)派生類;
3)在基類的公有派生類中“重載”該虛函數;
4)定義指向基類的指針變量,它指向基類的公有派生類的對象。
注意:重載虛函數不是一般的重載函數,它要求函數名、返回類型、參數個數、參數類型和順序完全相同
(6)永久對象
永久對象是指生存期可以超越程序的執行時間而長期存在的對象。
大多數 OOPL(面向對象程序設計語言)不支持永久對象,如果一個對象要長期保存,必須依靠于文件系統或數據庫管理系統實現,程序員需要作對象與文件系統或數據庫之間數據格式的轉換,以及保存和恢復所需的操作等煩瑣的工作。(需要有許多額外的工作)
為了實現永久對象,使上述煩瑣工作由系統自動完成,需要較強的技術支持;需要一個基于永久對象管理系統OMS(object management system),能夠描述和處理永久對象的編程語言。
OOA的目標是完成對所求解問題的分析,確定系統“做什么”,并建立系統的模型。
基本概念:
問題域:被開發系統的應用領域。
系統責任:所開發的系統應具備的職能。
(1)需求中存在的問題
1)確定問題域和系統責任困難
2)充分交流的問題解決得不好
3)很難適應需求的不斷變化
4)難以滿足復用要求
(2)OOA的特點
1)有利于對問題及系統責任的理解;
2)有利于人員之間的交流;
3)對需求變化有較強的適應性;
4)支持軟件復用。
運用面向對象的方法,對問題域和系統責任進行分析和理解,建立分析模型。
(1)分析問題域,確定類和對象;
(2)定義類或對象屬性和操作,確定其結構;
(3)建立系統中類或對象之間的靜態聯系和動態聯系。
基本模型:是一個類圖,以直觀的方式表達系統最重要的信息。OOA基本模型的三個層次分別描述:對象(哪幾類)、屬性(內部構成)、運算(對象與外部的關系)。
主題:又稱為子系統,是將一些聯系密切的類組織在一起的類的集合。按照粒度控制原則,將系統組成幾個主題,便于理解。
交互圖:Use case與系統成分之間的對照圖。
主題圖和交互圖又稱為補充模型。
詳細說明:按照分析方法所要求的格式,對分析模型進行說明和解釋。主要以文字為主。
OOD是面向對象方法在軟件設計階段應用與擴展的結果。
將OOA所創建的分析模型轉換為設計模型,解決如何作的問題。OOD與OOA沒有明顯的分界,采用相同的符號。
(1)系統設計
將分析模型劃分為若干子系統,子系統應該具有良好的接口,子系統內的類相互協作。標識問題本身的并發性,為子系統分配處理器。
子系統的分解是關鍵,可以有分層和分塊:
分層:將軟件系統組織為層次結構,每層是一個子系統。分層結構又分為封閉式和開放式。
分塊:垂直分塊是將系統分解為若干個相對獨立的、弱耦合的子系統。每個子系統相當于一個塊,每塊實現一類服務。
常常使用分層和分塊的混合結構。
(2)對象設計
在面向對象的系統中,模塊、數據結構及接口等都集中體現在對象和對象層次結構中。
對象設計是為每個類的屬性和操作進行詳細設計,包括屬性和操作,它們的數據結構和實現算法。
(3)消息設計
設計連接類與它的協作者之間的消息規約。
(4)優化及復審
主要考慮提高效率和建立良好的繼承結構。
面向對象設計準則:
(1)模塊化
(2)抽象
(3)信息隱藏
(4)弱耦合
(5)強內聚
(6)可重用
幾種典型的面向對象的開發方法:Coda方法,,Booch方法和 OMT方法。
隨著面向對象開發方法的發展,逐漸形成了幾種主要的流派:
Coda方法
Booch方法
OMT方法
OOSE方法
Coda/Yourdon方法 — 由OOA,OOD構成
建立問題域的分析模型。該模型由5個層次組成:即主題層、對象層、結構層、屬性層和服務層。
要建立4個組元的設計模型:問題域組元、人機交互組元、任務管理組元和數據管理組元。
該方法的特點是:簡單、易學,對于對象、結構、服務的認定較系統、完整、可操作性強。
(1)Coda方法的OOA
在Coda方法中,構造和評審OOA概念模型的順序由五個層次組成:類與對象、屬性、服務、結構和主題。(這五個層次表示分析的不同側面。)
(2)Coda方法的OOD
Coda方法的OOD模型是在OOA模型5個層次基礎上,建立系統的4類組元。
Booch方法的開發模型包括靜態模型和動態模型,靜態模型分為邏輯模型和物理模型,描述了系統的構成和結構,動態模型分為狀態圖和時序圖。
(1)Booch方法的基本模型
1)類圖
類圖
2)對象圖
對象圖由對象和消息組成。
3)狀態圖
狀態圖
4)時序圖
時序圖
5)模塊圖
模塊圖
6)進程圖
進程圖
(2)面向對象的建模技術(OMT)
面向對象的方法學又稱對象模型技術。OMT是一種軟件工程方法學,支持整個軟件生存周期,覆蓋問題構成、分析、設計和實現等階段。
OMT方法使用了建模的思想,討論如何建立一個實際的應用模型。從3個不同而又相關的角度建立了三類模型:對象模型、動態模型和函數模型,OMT為每一個模型提供了圖形表示。
1)對象模型技術的基本概念
OMT方法討論的核心就是建立三類模型:
對象模型描述了由對象和相應實體構成的系統靜態結構,描述了系統中對象的標識、屬性、操作及對象的相互關系。
動態模型根據事件和狀態描述了系統的控制結構,系統中與時間和操作順序有關的內容。
函數模型描述系統中與值的轉換有關的問題,如函數、映射、約束和函數作用等。
三類模型描述角度不同,卻又相互聯系。
2)建立對象模型
對象模型描述系統的靜態模型。
構成對象模型的基本元素有:對象(類)、他們之間的關系。
類之間、對象之間的關系
關聯與鏈
①二元關聯、三元關聯
②受限關聯
③鏈屬性和角色進一步描述。
繼承性
繼承性通常又稱為概括,表示基類與子類的關系。
聚集
表整體與部分的關系。
(3)建立動態模型
動態模型著重于系統的邏輯結構;描述某時刻對象及其聯系的改變。包括狀態圖和事件追綜圖。
1)事件和狀態
狀態—對象所具有的屬性值,具有時間性和持續性。
事件—對于對象的觸發行為,指從一個對象到另一個對象的信息的單向傳遞。
腳本—在系統的某一執行期間內的一系列事件。
在系統中具有屬性值、鏈路的對象,可能相互激發,引起狀態的一系列變化。
有的事件傳遞的是簡單信號,有的事件則傳遞的是數據值。由事件傳送的數據值稱為“屬性”。
狀態圖
狀態圖是一個狀態和事件的網絡,側重于描述每一類對象的動態行為,狀態的遷移。
動態模型由多個狀態圖組成,每個有重要行為的類都有一個狀態圖。各狀態圖可并發地執行及獨立改變狀態。
2)事件追蹤圖
事件追蹤圖側重描述系統執行過程中的一個特定的“場景(Scenarios)”。場景有時也叫“腳本”,是完成系統某個功能的一個事件序列。即是描述多個對象的集體行為。
腳本—系統某一次特定運行時期內發生的事件序列。
3)建立功能模型
功能模型著重于系統內部數據的傳遞與處理。定義“做什么?”的問題,表明值之間的依賴關系及其相關的功能。
描述手段為分層數據流圖,DFD圖有助于表示功能的依賴關系,其中的處理對應于狀態圖的活動和動作,數據流對應于對象圖中的對象或屬性。建立功能模型的步驟為:
確定輸入、輸出值
先列出輸入、輸出值,輸入輸出值是系統與外部世界之間的事件的參數。
建立數據流圖
通常按層次組織
描述處理
當數據流圖已細化到一定程度后,對各處理進行描述,描述方法用自然語言、偽碼及判定樹等。
(4)面向對象的軟件工程(OOSE)
OOSE將面向對象的思想應用于軟件工程中,建立五類模型:
OOSE的開發活動主要分為三類:分析、構造和測試。
OOSE的核心—最大貢獻,是建立了Use Case 模型。
用例(Use case)是OOSE中的重要概念,在開發各種模型時,用例貫穿了OOSE活動的核心,描述了系統的需求及功能。
分析模型:use case模型通過分析來構造。
設計模型:use case模型通過設計來具體化。
實現模型:該模型依據具體化的設計來實現use case模型。
測試模型:用來測試具體化的use case模型。
模型是對系統的抽象表示,建模是在不同層次上對系統的描述。
鑒于軟件,尤其是大型軟件所具有的復雜性,以及人們對復雜問題理解的局限性,建立一種共同的建模語言,推動面向對象方法的發展是十分必要的。
以上就是關于“面向對象的設計方法概述”,如果大家想了解更多相關知識,不妨來關注一下動力節點的Java在線學習,里面的課程內容從入門到精通,細致全面,很適合沒有基礎的小伙伴學習,希望對大家能夠有所幫助。
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習