OO Unit4 UML
目錄
- OO Unit3 UML conclution
- 總結(jié)本單元兩次作業(yè)的架構(gòu)設(shè)計(jì)
- 總結(jié)自己在四個(gè)單元中架構(gòu)設(shè)計(jì)及OO方法理解的演進(jìn)
- 總結(jié)自己在四個(gè)單元中測(cè)試?yán)斫馀c實(shí)踐的演進(jìn)
- 總結(jié)自己的課程收獲
- 立足于自己的體會(huì)給課程提三個(gè)具體改進(jìn)建議
OO Unit3 UML conclution
總結(jié)本單元兩次作業(yè)的架構(gòu)設(shè)計(jì)
第一次作業(yè)類圖
第二次作業(yè)類圖
兩次作業(yè)的不同之處
我認(rèn)為第一次作業(yè)主要針對(duì)類圖進(jìn)行詳細(xì)而且周全的理解和分析,有各種UML元素的統(tǒng)計(jì)和建模。
第二次作業(yè)主要在于廣度,建立三個(gè)不同的UML圖,并且有三個(gè)規(guī)則的check,這三個(gè)check可以乍一看比較復(fù)雜,其實(shí)都可以轉(zhuǎn)化為圖以較快地完成。
架構(gòu)設(shè)計(jì)
第一次作業(yè),因?yàn)橹挥幸环N圖,即所有的元素都屬于這個(gè)圖,并且一個(gè)圖中有多個(gè)UMLClass類。所以我的做法是,將一個(gè)類中所有的成員——參數(shù)(Parameter)、屬性(Attribute)、接口(Interface)、關(guān)聯(lián)(Association)等都放進(jìn)一個(gè)類(MyClass)中。類與類之間的關(guān)聯(lián),比如繼承關(guān)系、接口實(shí)現(xiàn)關(guān)系、關(guān)聯(lián)關(guān)系等,由于是兩個(gè)或兩個(gè)以上類參與的過(guò)程,因此在交互類(MyUmlInteraction)中實(shí)現(xiàn)。
第二次作業(yè),因?yàn)橛腥N圖,因此,用三個(gè)類:MyClass、MyStateMachine、MyInteraction來(lái)建模三種圖;用三個(gè)交互類MyUmlClassModelInteraction、MyUmlStateChartInteraction、MyUmlCollaborationInteraction分別來(lái)協(xié)調(diào)類圖、狀態(tài)圖、順序圖之間的關(guān)聯(lián)。
流程設(shè)計(jì)
主要是第二次作業(yè)的架構(gòu)相應(yīng)的代碼流程實(shí)現(xiàn)。
根據(jù)每個(gè)diagram出現(xiàn)時(shí),在最開(kāi)始會(huì)有UMLClass元素或者UMLInteraction元素或者UMLStateMachine元素,以此來(lái)分割每個(gè)圖及其對(duì)應(yīng)的元素。
當(dāng)收集完一個(gè)圖的元素時(shí),開(kāi)始建圖,建完圖后將一張圖表示的這個(gè)類放入對(duì)應(yīng)的交互類中。設(shè)置好對(duì)應(yīng)的查找方式。
check并開(kāi)始指令。
主要算法
01矩陣的floyd(用于checkForUml008())
初始化:有直接繼承關(guān)系的類或接口其矩陣元素為1,即matrix[i][j]=1表示i直接繼承j。
floyd:當(dāng)i是mid的其中一個(gè)子類,mid是j的其中一個(gè)子類,那么i是j的其中一個(gè)子類,則將i繼承j的元素置1。即
- if (check008floyd[i][mid] == 1 && check008floyd[mid][j] == 1) {check008floyd[i][j] = 1; }
運(yùn)算結(jié)果:矩陣對(duì)角線元素為1的表示成繼承環(huán),包括自環(huán)。
到達(dá)路徑數(shù)的floyd(用于checkForUml009())
初始化:直接繼承或直接接口實(shí)現(xiàn)的次數(shù),即matrix[i][j]表示i直接繼承j的次數(shù),或i直接實(shí)現(xiàn)了j接口的次數(shù)。
floyd:從i到j(luò)的可能數(shù) = \old(從i到j(luò)的可能數(shù)) + 從i到mid的可能數(shù) * 從mid到j(luò)的可能數(shù)。元素0表示從i繼承或接口實(shí)現(xiàn)j的可能數(shù)為0,因此可以無(wú)條件執(zhí)行更新語(yǔ)句。即
matrix[i][j] += matrix[i][mid] * matrix[mid][j];運(yùn)算結(jié)果:矩陣元素表示從i到j(luò)的可能數(shù),即類或接口i繼承接口j的次數(shù),如果元素等于0,表示類或接口i不繼承接口j。如果元素大于1,表示類或接口i多次繼承接口j。
繼承關(guān)系dfs(用于找父類)
- 初始化:matrix[i][j]=k表示類i繼承的第j個(gè)父類為類k。
- 遞歸:
- 如果還未到j(luò)_max,則繼續(xù)遞歸下一個(gè)父類。
- 如果到達(dá)j_max,則返回,記錄頂層父類,并且將父類的屬性、參數(shù)、關(guān)聯(lián)關(guān)系、接口等需要傳遞給子類的東西傳遞給下一層它的子類。
- 以此類推,將上層父類的需要傳遞的東西一層層傳遞給他的子類,直到最底層。這樣,遞歸一次,可以將沿途經(jīng)過(guò)的類的繼承關(guān)系都處理好。
總結(jié)自己在四個(gè)單元中架構(gòu)設(shè)計(jì)及OO方法理解的演進(jìn)
經(jīng)過(guò)四個(gè)單元的練習(xí),我對(duì)"面向?qū)ο蟆庇辛烁由羁痰恼J(rèn)識(shí)。
第一個(gè)單元表達(dá)式計(jì)算,因?yàn)轭}目本身難度不大,用什么方法、架構(gòu)完成都可以,所以每個(gè)人的代碼思路都不同。對(duì)“對(duì)象”和“類”的劃分也各有各的邏輯,對(duì)我個(gè)人來(lái)說(shuō),在第一單元,面向?qū)ο蟮氖址ɑ緵](méi)用上,整個(gè)程序還是非常的面向過(guò)程,對(duì)象所擁有的屬性、對(duì)象所屬的類的劃分都很混亂。雖然將表達(dá)式個(gè)體當(dāng)成了分別獨(dú)立的各個(gè)對(duì)象,但是計(jì)算處理過(guò)程還是很面向過(guò)程,以致于在化簡(jiǎn)、優(yōu)化過(guò)程中碰到了很多困難。
在第二單元多線程電梯,我試圖將電梯、請(qǐng)求、控制器、總交互平臺(tái)分別劃成各個(gè)類。但是在實(shí)現(xiàn)過(guò)程中,還是將本該交給控制器類的任務(wù)交給了電梯類或者請(qǐng)求類。雖然在建模的時(shí)候?qū)φ麄€(gè)程序有一個(gè)比較明確的計(jì)劃和框架,但是在實(shí)現(xiàn)過(guò)程中還是碰到了諸多困難,以至于我選擇將一些不該放在這個(gè)類的方法或者數(shù)據(jù)成員放在了這個(gè)類中,方便處理,但導(dǎo)致了架構(gòu)混亂。
在第三單元JML主要是規(guī)格撰寫,使我對(duì)測(cè)試方法有更深刻的認(rèn)識(shí)。同時(shí),因?yàn)橐?guī)格的撰寫,我更加熟練了將特定的任務(wù)群劃分給某個(gè)類,將某一個(gè)任務(wù)劃分給某個(gè)方法來(lái)完成。這一單元的層次非常清晰,可以說(shuō)更加印象深刻地、直觀地感受到了所謂的層次清晰。
第四單元UML,隨著面向?qū)ο笏枷胗^念的深入,我開(kāi)始思考如何用更清晰的、更簡(jiǎn)單的類來(lái)表示題目要求的各類對(duì)象。把實(shí)現(xiàn)的各部分劃分成不同的責(zé)任單元,建立各個(gè)類來(lái)分別負(fù)責(zé)完成各自的任務(wù),并合理交互。從架構(gòu)方面來(lái)說(shuō),可以說(shuō)是第三單元的延續(xù),非常清晰的層次,即交互類和圖類。
總結(jié)自己在四個(gè)單元中測(cè)試?yán)斫馀c實(shí)踐的演進(jìn)
在第一單元的表達(dá)式計(jì)算中,我對(duì)測(cè)試的理解僅限于構(gòu)造完整的測(cè)試集,就是要走遍每一條代碼、走遍每一個(gè)分支或者條件選擇語(yǔ)句。在劃分等價(jià)類的時(shí)候,要把各個(gè)可能的組合都劃分開(kāi)并且測(cè)試充足。
在第二單元的多線程中,因?yàn)槎嗑€程的特殊性,測(cè)試也更有難度,每次同樣的測(cè)試數(shù)據(jù)跑出來(lái)的結(jié)果是不同的,所以在測(cè)試的時(shí)候要充分考慮到線程的執(zhí)行順序、速度等不可控因素的影響。很有可能某一種執(zhí)行順序是無(wú)法測(cè)試到或者無(wú)法重演的,那可以進(jìn)行大規(guī)模的測(cè)試,或者先進(jìn)行邏輯上的推演,并且加入一些語(yǔ)句來(lái)人為控制線程執(zhí)行的順序,確保在實(shí)際的程序運(yùn)行過(guò)程中,每一種可能的順序都不會(huì)導(dǎo)致結(jié)果出錯(cuò)。
在第三單元JML中,才算是對(duì)測(cè)試方法有了更全面并且正確的認(rèn)識(shí)。尤其是對(duì)于等價(jià)類的劃分,可以使得測(cè)試數(shù)據(jù)作用明確、定點(diǎn)投放、避免重復(fù),實(shí)現(xiàn)更加高效的測(cè)試。并且,由于規(guī)格的撰寫,可以很方便地羅列出可能會(huì)出現(xiàn)問(wèn)題的輸入可能、輸出可能、以及方法內(nèi)部的邏輯問(wèn)題。在實(shí)現(xiàn)代碼之前先進(jìn)行規(guī)格和作用的設(shè)計(jì),可以不受到代碼細(xì)節(jié)的干擾,確保每個(gè)方法 的正確性。在測(cè)試時(shí)則根據(jù)事先約定的規(guī)格,對(duì)可能的漏洞進(jìn)行針對(duì)性地設(shè)計(jì)測(cè)試集。
在第四單元UML中,它的測(cè)試主要是對(duì)于邊界情況、復(fù)雜情況的處理。比如重復(fù)繼承、循環(huán)繼承等,在遞歸或者遍歷算法的過(guò)程中要注意。相比第二單元的各種不可控、不可預(yù)知情況,第四單元更重要的似乎是邏輯和理解上的正確性,并且進(jìn)行白盒測(cè)試。
總結(jié)自己的課程收獲
OO課程如同登山,步步為營(yíng),一點(diǎn)點(diǎn)地提升,讓人很有成就感。回首學(xué)習(xí)OO的一個(gè)學(xué)期,可以說(shuō)每一次作業(yè)都做到了盡心,雖然有時(shí)候還有bug,但是總的來(lái)說(shuō)還是相對(duì)完整的回憶。
相比完成了各個(gè)單元的那么多份代碼,更重要的是確實(shí)學(xué)到了很多架構(gòu)思想、測(cè)試方法、debug方法等在以后的寫程序過(guò)程中非常有用的事情。
雖說(shuō)自始至終我都喜歡把程序?qū)懙帽M可能清晰并且邏輯簡(jiǎn)單,因?yàn)槲艺J(rèn)為越直白簡(jiǎn)單的邏輯越不容易出錯(cuò),但直到現(xiàn)在,做完了最后一個(gè)單元的最后一次作業(yè)之后,回憶起第一單元的程序架構(gòu),還是覺(jué)得當(dāng)時(shí)的想法還太復(fù)雜,還可以更加簡(jiǎn)單一些。這也可以認(rèn)為是四個(gè)單元的訓(xùn)練之后,在實(shí)現(xiàn)自己的理想狀態(tài)上的一些小進(jìn)步吧。當(dāng)然,從規(guī)格和規(guī)范性而言,并不是越簡(jiǎn)單越好,我只是就復(fù)雜和簡(jiǎn)單來(lái)說(shuō)。
立足于自己的體會(huì)給課程提三個(gè)具體改進(jìn)建議
轉(zhuǎn)載于:https://www.cnblogs.com/ffchyan/p/11047481.html
總結(jié)
以上是生活随笔為你收集整理的OO Unit4 UML的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Maven父子工程配置文件详解
- 下一篇: mock一个服务