摘要:希賽網(wǎng)日前舉行了2025上半年系統(tǒng)分析師第一期??蓟顒樱F(xiàn)將2025上半年系統(tǒng)分析師第一期??荚嚲恚ㄕ撐模┓窒斫o大家。有需要的同學(xué)可以在本文資料處下載??荚嚲淼腜DF版本。
希賽網(wǎng)2025上半年系統(tǒng)分析師第一期??蓟顒右呀Y(jié)束,現(xiàn)將2025上半年系統(tǒng)分析師第一期??荚嚲恚ㄕ撐模┓窒斫o大家。??荚嚲鞵DF版本可在本文文首本文資料處或文末的資料下載欄目下載。
2025上半年系統(tǒng)分析師第一期??荚嚲恚ㄕ撐模┎糠秩缦拢?/p>
論面向?qū)ο笤O(shè)計方法及其應(yīng)用
系統(tǒng)設(shè)計是根據(jù)系統(tǒng)分析的結(jié)果,運用系統(tǒng)科學(xué)的思想和方法,設(shè)計出能滿是用戶所要求的目標(或目的)系統(tǒng)的過程。面向?qū)ο笤O(shè)計方法是一種接近現(xiàn)實的系統(tǒng)設(shè)計方法。在該方法中,數(shù)據(jù)結(jié)構(gòu)和在數(shù)據(jù)結(jié)構(gòu)上定義的操作算法封裝在一個對象之中。
請圍繞“面向?qū)ο笤O(shè)計方法及其應(yīng)用”論題,依次從以下三個方面進行論述。
1.概要敘述你參與管理和開發(fā)的軟件項目以及你在其中所承擔的主要工作。
2.面向?qū)ο笤O(shè)計方法包含多種設(shè)計原則,請簡要描述其中的三種設(shè)計原則。
3.具體闡述你參與管理和開發(fā)的項目是如何遵循這三種設(shè)計原則進行信息系統(tǒng)設(shè)計的。
試題答案:
一、應(yīng)結(jié)合自己參與的信息系統(tǒng)項目,說明在其中所承擔的工作。
二、面向?qū)ο笤O(shè)計的原則:
對于OO系統(tǒng)的設(shè)計而言,在支持可維護性的同時,提高系統(tǒng)的可復(fù)用性是一個至關(guān)重要的問題,如何同時提高系統(tǒng)的可維護性和可復(fù)用性,是OOD需要解決的核心問題之一。在OOD中,可維護性的復(fù)用是以設(shè)計原則為基礎(chǔ)的。常用的OOD原則包括開閉原則、里氏替換原則、依賴倒置原則、組合/聚合復(fù)用原則、接口隔離原則和最少知識原則等。這些設(shè)計原則首先都是面向復(fù)用的原則,遵循這些設(shè)計原則可以有效地提高系統(tǒng)的復(fù)用性,同時提高系統(tǒng)的可維護性。
1. 開閉原則
開閉原則是指軟件實體應(yīng)對擴展開放,而對修改關(guān)閉,即盡量在不修改原有代碼的情況下進行擴展。此處的“實體”可以指一個軟件模塊、一個由多個類組成的局部結(jié)構(gòu)或一個獨立的類。
應(yīng)用開閉原則可擴展已有的系統(tǒng),并為之提供新的行為,以滿足對軟件的新需求,使變化中的系統(tǒng)具有一定的適應(yīng)性和靈活性。對于已有的軟件模塊,特別是最重要的抽象層模塊不能再修改,這就使變化中的系統(tǒng)有一定的穩(wěn)定性和延續(xù)性,這樣的系統(tǒng)同時滿足了可復(fù)用性與可維護性。在OOD中,開閉原則一般通過在原有模塊中添加抽象層(例如,接口或抽象類)來實現(xiàn),它也是其他OOD原則的基礎(chǔ),而其他原則是實現(xiàn)開閉原則的具體措施。
2. 里氏替換原則
里氏替換原則由Barbara Liskov提出,其基本思想是,一個軟件實體如果使用的是一個基類對象,那么一定適用于其子類對象,而且覺察不出基類對象和子類對象的區(qū)別,即把基類都替換成它的子類,程序的行為沒有變化。反過來則不一定成立,如果一個軟件實體使用的是一個子類對象,那么它不一定適用于基類對象。
在運用里氏替換原則時,盡量將一些需要擴展的類或者存在變化的類設(shè)計為抽象類或者接口,并將其作為基類,在程序中盡量使用基類對象進行編程。由于子類繼承基類并實現(xiàn)其中的方法,程序運行時,子類對象可以替換基類對象,如果需要對類的行為進行修改,可以擴展基類,增加新的子類,而無需修改調(diào)用該基類對象的代碼。
3. 依賴倒置原則
依賴倒置原則是指抽象不應(yīng)該依賴于細節(jié),細節(jié)應(yīng)當依賴于抽象。換言之,要針對接口編程,而不是針對實現(xiàn)編程。在程序代碼中傳遞參數(shù)時或在組合(或聚合)關(guān)系中,盡量引用層次高的抽象層類,即使用接口和抽象類進行變量類型聲明、參數(shù)類型聲明和方法返回類型聲明,以及數(shù)據(jù)類型的轉(zhuǎn)換等,而不要用具體類來做這些事情。為了確保該原則的應(yīng)用,一個具體類應(yīng)當只實現(xiàn)接口和抽象類中聲明過的方法,而不要給出多余的方法,否則,將無法調(diào)用到在子類中增加的新方法。
實現(xiàn)開閉原則的關(guān)鍵是抽象化,并且從抽象化導(dǎo)出具體化實現(xiàn),如果說開閉原則是OOD的目標的話,那么依賴倒置原則就是OOD的主要機制。有了抽象層,可以使得系統(tǒng)具有很好的靈活性,在程序中盡量使用抽象層進行編程,而將具體類寫在配置文件中,這樣,如果系統(tǒng)行為發(fā)生變化,則只需要擴展抽象層,并修改配置文件,而無需修改原有系統(tǒng)的源代碼,在不修改的情況下來擴展系統(tǒng)功能,滿足開閉原則的要求。依賴倒置原則是COM、CORBA、EJB、Spring等技術(shù)和框架背后的基本原則之一。
4. 組合/聚合復(fù)用原則
組合/聚合復(fù)用原則又稱為合成復(fù)用原則,是在一個新的對象中通過組合關(guān)系或聚合關(guān)系來使用一些已有的對象,使之成為新對象的一部分,新對象通過委派調(diào)用已有對象的方法達到復(fù)用其已有功能的目的。簡單地說,就是要盡量使用組合/聚合關(guān)系,少用繼承。
在OOD中,可以通過兩種基本方法在不同的環(huán)境中復(fù)用已有的設(shè)計和實現(xiàn),即通過組合/聚合關(guān)系或通過繼承,但首先應(yīng)該考慮使用組合/聚合,組合/聚合可以使系統(tǒng)更加靈活,類與類之間的耦合度降低,一個類的變化對其他類造成的影響相對較少;其次才考慮繼承,在使用繼承時,需要嚴格遵循里氏替換原則,有效使用繼承會有助于對問題的理解,降低復(fù)雜度,而濫用繼承反而會增加系統(tǒng)構(gòu)建和維護的難度,以及系統(tǒng)的復(fù)雜度。
通過繼承來進行復(fù)用的主要問題在于繼承復(fù)用會破壞系統(tǒng)的封裝性,因為繼承會將基類的實現(xiàn)細節(jié)暴露給子類,由于基類的內(nèi)部細節(jié)通常對子類來說是透明的,所以這種復(fù)用是透明的復(fù)用,又稱為白盒復(fù)用。如果基類發(fā)生改變,那么子類的實現(xiàn)也不得不發(fā)生改變;從基類繼承而來的實現(xiàn)是靜態(tài)的,不可能在運行時發(fā)生改變,沒有足夠的靈活性;而且繼承只能在有限的環(huán)境中使用(例如,如果類沒有聲明不能被繼承)。
由于組合或聚合關(guān)系可以將已有的對象(也可稱為成員對象)納入到新對象中,使之成為新對象的一部分,新對象可以調(diào)用已有對象的功能,這樣做可以使得成員對象的內(nèi)部實現(xiàn)細節(jié)對于新對象是不可見的,因此,這種復(fù)用又稱為黑盒復(fù)用。相對繼承關(guān)系而言,其耦合度較低,成員對象的變化對新對象的影響不大,可以在新對象中根據(jù)實際需要有選擇性地調(diào)用成員對象的操作。組合/聚合復(fù)用可以在運行時動態(tài)進行,新對象可以動態(tài)地引用與成員對象類型相同的其他對象。
一般而言,如果兩個類之間是“Has-A”的關(guān)系,則應(yīng)使用組合或聚合;如果是“Is-A”關(guān)系,則可使用繼承?!癐s-A”是嚴格的分類學(xué)意義上的定義,意思是一個類是另一個類的“一種”。而“Has-A”則不同,它表示某一個角色具有某一項責任。
5. 接口隔離原則
接口隔離原則是指使用多個專門的接口,而不使用單一的總接口。每個接口應(yīng)該承擔一種相對獨立的角色,不多不少,不干不該干的事,該干的事都要干。這里的“接口”通常有兩種不同的含義,一種是指一個類型所具有的方法特征的集合,僅僅是一種邏輯上的抽象;另外一種是指某種語言具體的接口定義,有嚴格的定義和結(jié)構(gòu),例如,Java語言中的interface。對于這兩種不同的含義,接口隔離原則的表達方式和含義都有所不同。
如果將“接口”理解成一個類型所提供的所有方法的特征集合,這就是一種邏輯上的概念,接口的劃分將直接帶來類型的劃分。在這種情況下,可以將接口理解成角色,一個接口就只是代表一個角色,每個角色都有它特定的一個接口,此時,接口隔離原則可以稱為角色隔離原則。
如果將“接口”理解成狹義的特定語言的接口,接口隔離原則表達的意思則是指接口僅僅提供客戶端需要的行為,客戶端不需要的行為則隱藏起來,應(yīng)當為客戶端提供盡可能小的單獨的接口,而不要提供大的總接口。在面向?qū)ο缶幊陶Z言中,如果需要實現(xiàn)一個接口,就需要實現(xiàn)該接口中定義的所有方法,因此,大的總接口使用起來不一定很方便,為了使接口的職責單一,需要將大接口中的方法根據(jù)其職責不同,分別放在不同的小接口中,以確保每個接口使用起來都較為方便,并都承擔單一角色。
6. 最少知識原則
最少知識原則也稱為迪米特法則(Law of Demeter),是指一個軟件實體應(yīng)當盡可能少地與其他實體發(fā)生相互作用。這樣,當一個模塊修改時,就會盡量少的影響其他的模塊,擴展會相對容易。這是對軟件實體之間通信的限制,它要求限制軟件實體之間通信的寬度和深度。
最少知識原則可分為狹義原則和廣義原則。在狹義原則中,如果兩個類之間不必彼此直接通信,那么這兩個類就不應(yīng)當發(fā)生直接的相互作用;如果其中的一個類需要調(diào)用另一個類的某一個方法,可以通過第三者轉(zhuǎn)發(fā)這個調(diào)用。狹義原則可以降低類之間的耦合,但是會在系統(tǒng)中增加大量的小方法并散落在系統(tǒng)的各個角落,它可以使一個系統(tǒng)的局部設(shè)計簡化,因為每個局部都不會和遠距離的對象有直接的關(guān)聯(lián),但是也會造成系統(tǒng)的不同模塊之間的通信效率降低,使得系統(tǒng)的不同模塊之間不容易協(xié)調(diào)。
廣義原則是指對對象之間的信息流量、流向和信息的影響的控制,主要是對信息隱藏的控制。信息的隱藏可以使各個子系統(tǒng)之間解耦,從而允許它們獨立地被開發(fā)、優(yōu)化、使用和修改,同時可以促進軟件的復(fù)用,由于每個模塊都不依賴于其他模塊而存在,因此,每個模塊都可以獨立地在其他的地方使用。系統(tǒng)的規(guī)模越大,信息的隱藏就越重要,而信息隱藏的重要性也就越明顯。
最少知識原則的主要用途在于控制信息的過載。在將最少知識原則運用到系統(tǒng)設(shè)計中時,要注意以下幾點:
(1)在類的劃分上,應(yīng)當盡量創(chuàng)建松耦合的類,類之間的耦合度越低,就越有利于復(fù)用。一個處在松耦合中的類一旦被修改,不會對關(guān)聯(lián)的類造成太大波動。
(2)在類的結(jié)構(gòu)設(shè)計上,每個類都應(yīng)當盡量降低其屬性和方法的訪問權(quán)限。
(3)在類的設(shè)計上,只要有可能,一個類型應(yīng)當設(shè)計成不變類。
(4)在對其他類的引用上,一個對象對其他對象的引用應(yīng)當降到最低。
三、第三個問題要根據(jù)項目的實際情況來寫自己是怎么做的,遇到什么樣的問題,如何解決的。
軟考科目怎么選? 微信掃碼下方二維碼找答案 ![]() | 2025上半年真題估分 微信掃碼進入真題估分小程序 ![]() |
熱門:系統(tǒng)集成項目管理工程師備考 | 2025上半年軟考真題答案及解析
推薦:系統(tǒng)規(guī)劃與管理師網(wǎng)絡(luò)課堂 | 2025下半年軟考報名時間及入口
活動:資料下載 | 新人禮包 | 希賽24周年鉅惠狂歡
備考:軟考學(xué)習(xí)資料 | 軟考在線題庫 | 軟考AI大模型
軟考備考資料免費領(lǐng)取
去領(lǐng)取