軟件工程學面向對象

一、面向對象方法學概述

傳統的生命周期方法學在消除軟件非結構化、促進軟件開發工程化方面起了積極的作用,但仍有許多不足,存在的主要問題有:①生產率提高的幅度不能滿足需要; ②軟件重用程度很低; ③軟件很難維護; ④軟件往往不能真正滿足用戶需要。

傳統方法:系統是過程的集合 、過程與數據實體交互、 過程接受輸入產生輸出、數據與處理分離。

面向對象方法:系統是對象的集合 、對象與其它對象交互、 對象發送與響應消息、數據與處理方法封裝到對象。

面向對象的軟件工程的全面運用:①面向對象分析OOA 、②面向對象設計OOD、③面向對象編程OOP、④面向對象測試OOT、⑤面向對象軟件維護OOSM

之前講過的噴泉模型就是以對象為驅動:生存期各階段開發出來的“部件”都是類,各階段對各個類的信息進行細化,面向對象方法改進了生存期各個階段間的界面。

1、面向對象方法學的原則

①盡可能模擬人類習慣的思維方式,使開發軟件的方法與過程盡可能地接近人類認識世界解決問題的方法與過程;

②使描述問題的問題空間/問題域與實現解法的解空間/求解域在結構上盡可能一致。

2、面向對象方法學的要點

①客觀世界是由對象組成,任何事物都是對象,復雜對象可以由簡單對象組成。

②所有對象都劃分成各種對象類(簡稱類),每個類都定義了一組數據和一組方法。

③按照子類與父類的關系,將若干類組成一個層次結構的系統。

④對象彼此間僅能通過傳遞消息互相聯系。

3、面向對象方法學的優點

①與人類習慣的思維方法一致

②穩定性好? ?

③可重用性好? ?

④可維護性好?

⑤ 易開發大型軟件產品

二、面向對象的基本概念

面向對象 = 對象 + 分類+ 繼承+ 消息通信

面向對象方法是一種運用對象、類、繼承、消息傳遞、多態性等概念構造系統的軟件開發方法。

面向對象程序的每一個成份是對象,程序是通過新對象的建立和對象之間的通信執行的。

1、對象

面向對象開發模式的基本成份,是系統中描述客觀事物的一個實體。 是構成系統的一個基本單位,由一組屬性和一組對屬性進行操作的服務組成。

對象 = 對象名+ 屬性(數據)+ 操作(服務/方法)

屬性是對自身性質的抽象,通過執行操作來改變

操作是描述對象執行的功能,通過消息傳遞為其他對象使用

特點

①以數據為中心:操作圍繞對數據所需的處理來設置

②對象是主動的:對象是進行處理的主體

③實現了數據封裝:私有數據對外隱藏、不可見

④本質上具有并行性:不同對象獨立地處理自身的數據

⑤模塊獨立性好:對象內部各元素彼此結合緊密,內聚性強

2、類

具有相同特征(屬性)和行為(操作)的對象的集合構成了類。

類的定義包括一組數據屬性和一組合法操作。

類的定義可以視為一個具有類似特性與共同行為的對象的模板,可以用來產生對象。

在一個類中,每個對象都是類的實例,對象的狀態包含在實例的屬性中。

3、消息

消息是一個對象與另一個對象之間傳遞的信息,要求某個對象執行類中定義的某個操作。

消息的使用類似于函數調用,消息中指定了某一個對象名、一個操作名和一個參數表。

接收消息的對象執行消息中指定的操作,并將傳遞過來的實參與參數表中對應的形參結合起來。

4、繼承

類與類之間可能具有一般化和特殊化關系,這種關系下形成的一種層次關聯,即繼承。

繼承是父類和子類之間共享數據和方法的機制,子類自動地共享父類中定義的數據和方法。

5、多態

對象互相通信從而執行系統的功能,不同的對象對同一消息有不同的實現。

多態的實現受繼承的支持: ①利用類繼承的層次關系,把具有通用功能的消息存放在高層; ②實現該功能的不同的行為放在低層,在低層上生成的對象能夠給通用消息以不同的響應。

6、面向對象的特點

①抽象性:對象的數據抽象和行為抽象;

②封裝性:軟件開發的重要原則,有兩個含義;

③共享性: 同一類中所有實例共享數據結構和行為特征; 同一應用中所有實例通過繼承實現共享; 不同應用中所有實例通過復用實現共享。

三、面向對象建模技術OMT

模型是為了理解事物而對事物做出的一種抽象,是對事物的一種無歧義的書面描述。

建模的目的是為了減少復雜性,系統分析員應從不同角度抽象出目標系統的特性,使用精確的表示方法構造系統的模型。

面向對象方法最基本的原則,是按照人們習慣的思維方式,用面向對象觀點建立問題域的模型,開發出盡可能自然地表現求解方法的軟件。

模型化過程是一個迭代過程,通過不斷細化、完善,直至滿足真正需求,為開發工作奠定基礎。

面向對象方法開發軟件,通常需要建立以下三種形式的模型:

1、對象模型

也叫靜態模型,是OMT方法中最重要的部分,動態模型和功能模型依此而建立。

對象模型描述系統的靜態結構,包括構成系統的對象類,它們的屬性、操作及它們之間的關系。 通常,使用類圖建立對象模型。

類圖是對象模型的圖形表示

類與類之間的關系叫關聯,代表一組存在于兩個或多個對象類之間、具有相同結構和含義的具體連接。關聯可以是物理的,也可以是邏輯的。關聯有普通關聯、限定關聯、聚合關聯、泛化關聯。

普通關聯

限定關聯的限定提高了語義精確性,增強了查詢能力,通常用在一對多或多對多的關聯關系中,可以簡化模型中的重數。 在類圖中,限定詞放在關聯關系末端的一個小方框內。如

為了說明關聯的性質,可能需要一些附加信息,可以引入一個關聯類來記錄這些信息。 在類圖中,關聯類通過一條虛線與關聯連接。

?連接屬性:用附加的屬性說明類間的聯系

聚合關聯

共享聚合(弱)

組合聚合(強)

?

?泛化關聯如

2、動態模型

要想對系統了解得比較清楚,應考察在任何時刻對象及其聯系的改變。

著重描述系統與時間相關的動態行為,即系統的控制邏輯。涉及時序和改變的狀況用動態模型來描述。

包括兩個圖:狀態圖和時序圖。

狀態圖是一個狀態和事件的網絡,側重描述每一類對象的動態行為:①狀態:對某一時刻屬性特征的概括;② 狀態遷移:這一類對象在何時、對發生的哪些事件,做出何種響應。

時序圖是一種交互圖,描述對象之間的動態合作關系以及合作過程中的行為次序;展現了完成某項行為的一組對象和對象間傳遞的消息的時間順序。

按時間順序對控制流建模,注重消息的順序,揭示了一個特定“場景”中對象的交互。場景也將“腳本”,是完成系統某個功能的一個事件序列。如移動電話系統的時序圖

激活:生命線上的長方框,對象接收消息開始活動,表明某時間點哪個對象在執行。

3、功能模型

表示系統的功能性質,指明系統應該“做什么”,因此更直接地反映用戶對目標系統的需求。

由多個數據流圖組成,說明從外部輸入,通過內部操作和存儲,直到外部輸出,整個的數據流情況。

用例模型描述系統的靜態使用情況,它定義了系統的功能,回答“系統應該為每類用戶做什么”。 描述從系統的外部執行者觀看到的系統功能,而非系統內部功能的具體實現。展現了一組用例、行為者/角色及它們之間的關系。用用例圖建立起來的系統模型,成為用例模型。需要識別角色(使用用例并與系統交互的任何人或物都是行為者,確定行為者對確定用例非常有用)和識別用例(從用戶角度觀察到的系統功能,即角色如何使用系統)。

用例之間的關系:①擴展(extend):通過向被擴展的用例添加動作來擴展用例。 被擴展的用例是一般用例,擴展的用例是特殊用例。②使用(use):由一個用例使用另一個用例。

用例建模

建模過程為:①定義系統; 找出系統邊界以外的行為者/角色;

②描繪用例,定義用例間的關系;

③繪制用例圖,編寫用例描述,確認模型。

四、面向對象分析

OOA(Object-Oriented Analysis)的目的是理解應用問題和用戶需求,準確定義問題域,建立問題域的精確模型。

OOA從分析陳述用戶需求的文件開始,是抽取和整理用戶需求,并建立問題域精確模型的過程,使用戶需求逐步精確化、一致化、完全化。

分析工作主要包含理解、表達和驗證。

1、基本過程

①問題域分析

②發現和定義對象與類

③識別對象的外部聯系

④建立系統的靜態結構模型

⑤建立系統的動態結構模型

2、五個層次

面向對象分析建立的系統模型以概念為中心,稱為概念模型,由一組相關的類組成。?

構造和評審OOA概念模型的活動由五個層次組成,即類與對象、結構、屬性、服務主題層

?(1)標識類與對象

類和對象是對與應用有關的概念的抽象,是說明應用問題的重要手段,是構成軟件系統的基本元素。

面向對象分析的第一個層次,這一層工作是整個分析模型的基礎。

類和對象的識別開始于搜索選定的問題陳述,標識可以表示問題領域概念的術語。

(2)標識屬性和實例連接

對象所保存的信息稱為它的屬性。

屬性層是對前面已識別的類和對象做進一步的說明。

類的屬性描述的是狀態信息。

每個對象的屬性值表達該對象的狀態值。

(3)標識服務和消息連接

對象收到消息后所能執行的操作,稱為對象可提供的服務。

服務層的目的:定義對象的行為和對象間的通信(消息連接),說明各種對象是如何共同協作以使系統運作起來的。

(4)標識結構

結構層用于標記對象間的繼承和組裝關系,是處理OOA模型復雜性的機制之一。 典型的結構有兩種:①一般化-特殊化結構(Gen-Spec) ②整體-部分結構(Whole-Part)

(5)識別主題

主題是把一組具有較強聯系的類組織在一起而得到的類的集合,用來建立系統的高層抽象視圖,表示OOA模型的整體框架。

通過劃分主題,將復雜的對象模型分解成幾個不同的范疇,有助于開發人員或用戶理解一個大而復雜的系統模型,有助于組織一個大項目的工作。

主題的劃分有一定的靈活性和隨意性。

在概念上可以認為,OOA大體按照下列順序進行:尋找類與對象,識別結構,識別主題,定義屬性,建立動態模型,建立功能模型,定義服務

五、面向對象設計

OOD是用面向對象觀點建立求解域模型的過程,使軟件工程師能夠從實現的角度,確定從類中導出的對象,以及對象的相互關聯,描述了:①對象間的關系如何達到; ②行為如何實現; ③對象間通信如何實現。

1、過程

將已建立的OOA模型變成OOD模型,運用面向對象技術進行軟件設計,建立求解域模型,并補充一些與實現有關的部分。

逐漸擴充模型的過程,分兩個階段: ?系統設計(高層設計) 和 對象設計(低層設計)

系統設計

即高層設計,開發系統的體系結構,構造應用軟件的總體模型。

高層設計階段標識在計算機環境中解決問題所需要的概念,并增加一批需要的類,包括可使應用軟件與外部世界交互的類。

此階段的輸出是適合應用軟件要求的類、類間的關系、應用的子系統視圖規格說明。

對象設計

著重于對象及其相互交互的描述,是集中于類的詳細設計,細化屬性和方法。

在對象設計期間:創建屬性的數據結構和操作過程的詳細規約;定義屬性的可見性,精化對象接口以定義完整的消息模型的細節。

2、準則

優秀的設計是權衡了各種因素,使系統在其整個生命周期中的總開銷最小的設計。

①模塊化:對象就是模塊,把數據結構和操作方法結合在一起

②抽象:支持過程抽象和數據抽象(類)

③信息隱蔽:通過對象的封裝性實現

④弱耦合 強內聚

⑤可重用:盡量使用已有的類,創建新類時應考慮將來的重用性

兩種OOD的耦合

①交互耦合:對象間的耦合通過消息連接實現,應盡可能松散、盡量降低消息連接的復雜程度、 減少對象發送或接收的消息數

②繼承耦合:應提高繼承耦合程度,使特殊類盡量多繼承一般類

三種OOD的內聚

①服務內聚:一個服務應該完成一個且僅完成一個功能

②類內聚:一個類只有一個用途,它的屬性和服務是高內聚的

③一般-特殊內聚:設計出的一般-特殊結構,應該符合多數人的概念,應該是對相應的領域知識的正確抽取。

3、啟發規則

幫助軟件開發人員提高面向對象設計的質量。包括:

①設計結果應該清晰易懂

②一般-特殊結構的深度應適當

③設計簡單的類

④使用簡單的協議

⑤使用簡單的服務

⑥把設計變動減至最小

4、系統分解

大多數系統的面向對象設計模型在邏輯上分為四大部分,對應于目標系統的四個垂直切片:

兩種子系統間的交互方式:

①?客戶—供應商關系:作為“客戶”的子系統調用作為“供應商”的子系統,后者完成某些服務并返回結果。

②平等伙伴關系:每個子系統都可能調用其他子系統,每個子系統都必須了解其他子系統的接口。

5、設計類中的服務

OOA得出的對象模型,通常并不詳細描述類中的服務;OOD是擴充、完善和細化OOA模型的過程,設計類中的服務是它的一項重要工作內容。

(1)確定類中應有的服務

綜合考慮對象模型、動態模型和功能模型,將動態模型中對象的行為以及功能模型中的數據處理,轉換成由適當的類所提供的服務。

狀態圖描繪了對象的生命周期,狀態轉換是執行對象服務的結果。事件表現為消息,接收消息的對象必然有消息選擇符指定的服務。

功能模型指明了系統必須提供的服務,數據流圖中的處理與對象提供的服務相對應。

(2)設計實現服務的方法

設計實現服務的算法:①算法復雜度,通常選用復雜度較低(即效率較高)的算法,但也不要過分追求高效率,應以能滿足用戶需求為準。②容易理解和容易實現,往往與高效率矛盾,應該對這兩個因素適當折中。③易修改,盡可能預測將來可能做的修改,在設計時預先做準備。

選擇數據結構:在分析階段,僅需考慮系統中需要的信息的邏輯結構;在設計過程中,則需要選擇能夠方便、有效地實現算法的物理數據結構。

定義內部和內部操作:在設計過程中,可能需要增添一些在需求陳述中沒有提到的類,這些新增加的類,主要用來存放在執行算法過程中所得出的某些中間結果。

六、面向對象實現

面向對象實現包括兩項工作: 把面向對象設計結果,翻譯成用某種程序設計語言書寫的面向對象程序;以及 測試并調試面向對象程序。

程序的質量基本上由面向對象設計的質量決定。

測試目標:用盡可能低的測試成本和盡可能少的測試方案發現盡可能多的錯誤。

1、程序設計語言

(1)面向對象語言的優點:一致的表示、可重用性、可維護性

(2)面向對象語言的技術特點:支持類與對象概念的機制 、實現整體-部分結構的機制 、實現一般-特殊結構的機制、 實現屬性和服務的機制、 類型檢查、 類庫、 效率 、持久保存對象 、參數化類 、開發環境

(3)選擇面向對象的語言:將來能否占主導地位 、可重用性、 類庫和開發環境 、其它因素

2、程序設計風格

(1)提高可重用性:提高方法的內聚 、減少方法的規模、 保持方法的一致性、 把策略與實現分開 、全面覆蓋 、盡量不使用全局信息 、利用繼承機制

(2)提高可擴充性: 封裝實現策略、 不要用一個方法遍歷多條關聯鏈 、避免使用多分支語句、 精心確定公有方法

(3)提高健壯性: 預防用戶的操作錯誤、 檢查參數的合法性 、不要預先確定限制條件、 先測試后優化

3、測試策略

從小規模測試開始,逐步過渡到大規模測試,就是從單元測試開始,逐步進入集成測試,最后進行確認測試和系統測試。

(1)面向對象的單元測試: 類和類的實例包裝了屬性和處理這些數據的操作; 最小的可測試單元是封裝起來的類和對象。

(2)面向對象的集成測試

基于線程的測試:把響應系統的一個輸入或一個事件所需要的一組了集成起來。分別集成并測試每個線程,同時應用回歸測試以保證沒有產生副作用。

基于使用的測試:首先測試幾乎不使用服務器類的那些類(稱為獨立類),測試完獨立類后,接下來測試使用獨立類的下一個層次的類(稱為依賴類)。對依賴類的測試一個層次一個層次繼續下去,直到整個系統構造完為止。

(3)面向對象的確認測試: 黑盒測試可以用來設計確認測試用例; 對于面向對象的軟件來說,主要還是根據動態模型和描述系統行為的腳本來設計確認測試用例。

4、設計測試用例

目前,面向對象的軟件測試用例的設計方法,還處于研究、發展階段。與傳統軟件測試不同,面向對象測試關注于設計適當的操作序列以檢查類的狀態。

(1)測試類的方法

?單元測試主要測試單個類和類中封裝的方法。

測試單個類的方法主要有:隨機測試、劃分測試和基于故障的測試。

(2)集成測試方法

對類間協作進行測試。

可以使用隨機測試方法和劃分測試方法,以及基于情景的測試和行為測試來完成。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/40722.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/40722.shtml
英文地址,請注明出處:http://en.pswp.cn/web/40722.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

MySQL中的MVCC解析

MySQL中的MVCC解析 多版本并發控制是MySQL中實現高并發的一種關鍵技術。通過對數據進行多版本的管理,MVCC能夠在保證數據一致性的同時,提高數據庫的并發性能。本文將深入探討MySQL中的MVCC機制,包括其原理、實現方式以及優勢。 MVCC的原理 …

華為機試HJ22汽水瓶

華為機試HJ22汽水瓶 題目: 某商店規定:三個空汽水瓶可以換一瓶汽水,允許向老板借空汽水瓶(但是必須要歸還)。 小張手上有n個空汽水瓶,她想知道自己最多可以喝到多少瓶汽水。 想法: 因為可以…

硬件開發工具Arduino IDE

招聘信息共享社群 關聯上篇文章樂鑫ESPRESSIF芯片開發簡介 Arduino IDE(集成開發環境)是為Arduino硬件開發而設計的一款軟件,它提供了一個易于使用的圖形界面,允許用戶編寫、編輯、編譯和上傳代碼到Arduino開發板。Arduino IDE的…

深入分析 Android BroadcastReceiver (八)

文章目錄 深入分析 Android BroadcastReceiver (八)1. 系統與自定義實現1.1 系統廣播機制1.1.1 系統廣播的實現原理1.1.2 系統廣播的源碼分析 1.2 自定義廣播機制1.2.1 自定義廣播的實現步驟1.2.2 自定義廣播的源碼分析 2. 廣播機制設計的初衷與優勢2.1 設計初衷2.2 優勢 3. 總…

有了提示詞框架的雞,你就能讓AI下提示詞的蛋~

我們在問AI問題的時候,是不是經常感覺AI的回答沒有別人的那么好? 難道別人的AI更加聰明? 很可能是因為我們的提示詞沒寫好,那么,寫出好的提示詞很難嗎? 一點都不難,其實這都是有套路的&#…

Hive排序字段解析

Hive排序字段解析 在Hive中,CLUSTER BY、DISTRIBUTE BY、SORT BY和ORDER BY是用于數據分發和排序的關鍵子句,它們各自有不同的用途和性能特點。讓我們逐一解析這些子句: 1. DISTRIBUTE BY 用途: 主要用于控制如何將數據分發到Reducer。它可…

NSSCTF-Web題目24(RCE-空格繞過、過濾繞過)

目錄 [MoeCTF 2021]babyRCE 1、題目 2、知識點 3、思路 [SWPUCTF 2022 新生賽]funny_web 4、題目 5、知識點 6、思路 [MoeCTF 2021]babyRCE 1、題目 2、知識點 空格繞過、過濾繞過 3、思路 出現源碼,進行代碼審計 需要我們GET方式上傳一個rce變量&#x…

解碼注意力機制:自注意力與跨注意力的奧秘

標題:解碼注意力機制:自注意力與跨注意力的奧秘 自注意力(Self-Attention)和跨注意力(Cross-Attention)是深度學習中的重要概念,尤其在自然語言處理(NLP)領域的Transfor…

[FreeRTOS 功能應用] 互斥量 功能應用

文章目錄 一、基礎知識點二、代碼講解三、結果演示四、代碼下載 一、基礎知識點 [FreeRTOS 基礎知識] 互斥量 概念 [FreeRTOS 內部實現] 互斥量 本實驗是基于STM32F103開發移植FreeRTOS實時操作系統,互斥量實戰操作。 使用工具:Keil、串口工具 二、代碼…

Rust變量綁定

變量綁定 Rust 通過靜態類型確保類型安全。變量綁定可以在聲明時說明類型,不過在多數情況下,編譯器能夠從上下文推導出變量的類型,從而大大減少了類型說明的工作。 使用 let 綁定操作可以將值(比如字面量)綁定&#…

全面解析智慧校園行政辦公的協作日程功能

在智慧校園的行政辦公生態系統中,協作日程功能成為促進團隊互動與工作同步的橋梁,它超越了傳統個人日程的范疇,強調的是集體效率與信息的無縫對接。這一功能設計的核心,在于創造一個開放而有序的平臺,讓教育工作者們能…

2-4 Softmax 回歸的從零開始實現

就像我們從零開始實現線性回歸一樣, 我們認為softmax回歸也是重要的基礎,因此應該知道實現softmax回歸的細節。 本節我們將使用剛剛在2-3節中引入的Fashion-MNIST數據集, 并設置數據迭代器的批量大小為256。 import torch from IPython impo…

【chtagpt】pytorch中的方法對象和屬性

文章目錄 定義一個簡單的類屬性和方法對象的區別PyTorch 張量中的屬性和方法對象進一步解釋總結self.value value 的解釋示例解釋總結 為了更好地理解方法對象和屬性,我們可以通過一個簡單的類來演示這兩者的區別及其用法。 定義一個簡單的類 我們定義一個名為 My…

開發個人Go-ChatGPT--1 項目介紹

開發個人Go-ChatGPT--1 項目介紹 開發個人Go-ChatGPT--1 項目介紹知識點大綱文章目錄項目地址 開發個人Go-ChatGPT–1 項目介紹 本文將以一個使用Ollama部署的ChatGPT為背景,主要還是介紹和學習使用 go-zero 框架,開發個人Go-ChatGPT的服務器后端&#…

主從復制原理及操作

主從復制的概念 主從復制是一種在數據庫系統中常用的數據備份和讀取擴展技術,通過將一個數據庫服務器(主服務器)上的數據變更自動同步到一個或多個數據庫服務器(從服務器)上,以此來實現數據的冗余備份、讀…

解決video.js在demo中可以播放,在已有項目中無限waiting的問題

video.js的是有推薦的和react一起使用的寫法的:https://videojs.com/guides/react/ 但是這個寫法在demo中可以正常播放,在放在現有的項目中則播不出來,也不報錯,就是log里顯示on waiting后就什么動靜都沒有了,頁面顯示…

貝葉斯學習中先驗分布的詳細解釋

在貝葉斯學習中,先驗分布(Prior Distribution)是一個非常重要的概念。它代表了在觀察到任何數據之前,對未知參數的初始信念或知識。先驗分布的選擇通常基于領域知識、歷史數據或者純粹的假設。 文章目錄 先驗分布的含義先驗分布的…

dtpay聚合支付系統在跨境支付場景中技術及業務方案

1 什么是跨境支付 我們從兩個維度來分析什么是跨境支付,第一個維度我們從資金流向分析,國內的消費者在境外進行消費對于國內資金流來說這屬于資金流出,這是跨境支付的第一種應用場景。第二個場景國外游客在國內進行消費,這屬于資…

昇思25天學習打卡營第11天 | LLM原理和實踐:基于MindSpore實現BERT對話情緒識別

1. 基于MindSpore實現BERT對話情緒識別 1.1 環境配置 # 實驗環境已經預裝了mindspore2.2.14,如需更換mindspore版本,可更改下面mindspore的版本號 !pip uninstall mindspore -y !pip install -i https://pypi.mirrors.ustc.edu.cn/simple mindspore2.2…

js的作用域鏈

function test(){} 運行期上下文:當函數執行時,會創建一個稱為執行期上下文的內部對象。一個執行期上下文定義了一個函數執行時的環境,函數每次執行時對應的執行上下文都是 獨一無二的,所以多次調用一個函數對導致創建多個執行上下…