编程学习笔记(第三篇)面向对象技术高级课程:绪论-软件开发方法的演化与最新趋势(3)软件开发的现状、UML扩展...
軟件領(lǐng)域正在發(fā)生一個巨變,特別是近幾年來,軟件領(lǐng)域正在發(fā)生翻天覆地的變化。 這一變化主要以這個云 + 端大數(shù)據(jù), 這些是隨著目前最先進(jìn)的一些技術(shù)的產(chǎn)生而產(chǎn)生的。 隨著這些新的技術(shù)以及軟件開發(fā)方法的不斷的提升,當(dāng)今的軟件的開發(fā)與10 年前的軟件開發(fā), 不管從方式上還是從內(nèi)涵上都發(fā)生了很大的、 深刻的變化。比如說一個非常簡單的一個現(xiàn)象就是,我們現(xiàn)在開發(fā)一個小的一個應(yīng)用程序,跟 10年前開發(fā)一個應(yīng)用程序, 采用的編程的語言,編程的這個平臺,軟件開發(fā)平臺以及借用的一些可復(fù)用的一些軟件的一些資產(chǎn)都是完全不同的。
?
程序員和架構(gòu)師的區(qū)別
程序員的主要工作就是學(xué)習(xí)各種各樣的一些編程語言。 然后用這些語言來進(jìn)行編程,編完程序之后進(jìn)行調(diào)試, 調(diào)試完了之后在測試人員的協(xié)助下可以這個修改 bug ,然后有些時候?qū)懸恍┘夹g(shù)文檔, 或者寫一些注釋。
而架構(gòu)師的主要工作可以說與代碼打交道的并不是很密切,主要是構(gòu)建一些分析設(shè)計模型,研究各種各樣的軟件、 技術(shù)或者說一些業(yè)務(wù)邏輯的一些模型一些模式, 研究更加抽象的體系結(jié)構(gòu)的架構(gòu)模型,以及企業(yè)所適用的一些技術(shù)架構(gòu),它使用的語言是建模語言,目前比較統(tǒng)一建模語言是uml。 并且他要研究不同流派的軟件開發(fā)、 軟件開發(fā)方法學(xué),在有些時候需要進(jìn)行重構(gòu)。
可以說一個軟件的架構(gòu)師, 一個非常優(yōu)秀的軟件架構(gòu)師是一個團隊乃至一個企業(yè)的靈魂。 架構(gòu)師可以領(lǐng)導(dǎo)一些的程序員避免在軟件開發(fā)中的各種各樣的困難,走向新的勝利,正像希臘神話奧德賽中的俄底修斯。如果沒有這么一個靈魂人物,很可能這個團隊就會被各種各樣的困難所壓倒。 因此這是在程序員和架構(gòu)師的一個區(qū)別。
?
軟件架構(gòu)師的能力:
-
建模語言
-
模式
-
方法學(xué)
-
模型
-
架構(gòu)
-
重構(gòu)
-
。。。
?
軟件工程能夠解決的問題:
(1)生命/安全攸關(guān)系統(tǒng)(safety-critical system):生命攸關(guān)系統(tǒng)是指一個系統(tǒng)的失效或誤動作會產(chǎn)生以下后果:人員重傷或死亡,或者設(shè)備的嚴(yán)重毀損,或者環(huán)境的危害
在這些領(lǐng)域開發(fā)軟件, 大家以為好像在這些領(lǐng)域程序也是有一些程序員這個手工編寫出來的,那就是 一個誤區(qū)了,在這些領(lǐng)域開發(fā)這些攸關(guān)系統(tǒng)的軟件,實際上需要大量的這個軟件工程的一些理念和智慧, 因為盡可能的要把這個 bug 完全地避免,如果不能完全避免的話把它這個概率發(fā)生概率要降到最低,這時候就需要比較高層次軟件工程,當(dāng)然這些工程、 這些軟件工程理念有很多的 方式,比如說自動生成代碼,還有形式化技術(shù)等等。
(2)中小型創(chuàng)新企業(yè)
創(chuàng)新型中小型公司中開發(fā)軟件受到了很多的一些制約因素,比如說資金、時間又非常緊, 工作量又特別大,在這種情況下開發(fā)軟件, 仍然不能采用人海戰(zhàn)術(shù),因為沒有足夠的實力找足夠的有經(jīng)驗的程序員來開發(fā)。這時候需要借助高級軟件工程的一些 理念、 方式方法,甚至有些情況下需要自動化的產(chǎn)生代碼。 需要通過模型的方式來驅(qū)動代碼的生成,這在一個中小型創(chuàng)業(yè)型些軟件企業(yè)是非常有用的。
(3)大型IT企業(yè)
大型的 IT 企業(yè)有悠久的歷史,它的軟件目前的這個版本,這個系統(tǒng)非常龐大,有幾千萬行代碼。它的這些代碼很可能是幾十年前某一個程序員編寫的。 如果要維護一個新的版本, 不可避免的要對這些老的這些代碼進(jìn)行修改調(diào)整。 但是往往憑借人工的方式來進(jìn)行調(diào)整的話, 這個效率非常低。 因為現(xiàn)在的人看幾十年前這個代碼,在缺失各種文檔的情況下 就顯得力不從心了。 即使能夠看明白, 它的這個體量也是非常大的,幾千萬行,無法通過手動的方式或者說人工的方式來看清。 看完之后可能要需要幾年的時間,已經(jīng)來不及了。 這時候就要借助于比較高級的軟件工程自動化的重構(gòu)技術(shù),這個通過逆向工程的方式,將原有的代碼轉(zhuǎn)化為模型,便于人理解。 甚至是可以通過自動的方式來理解這個模型。 將這個模型重構(gòu)成一個更加完備的一個模型,進(jìn)而驅(qū)動從模型到產(chǎn)生新的代碼, 這是一個整個的一套過程。
?
(4)外包領(lǐng)域
甲方提需求, 或者提出自己的一些業(yè)務(wù)模型,然后交給乙方來進(jìn)行完成。 在這個過程中,如果是甲乙雙方是兩個公司、 兩個實體,它們的辦公地點是不同的,它們之間如果說完全通過自然語言來進(jìn)行溝通這些需求、 溝通這些業(yè)務(wù)邏輯的話, 那就顯得效率非常低,并且會產(chǎn)生很多的一些誤解,很多的一些誤會,這樣的話不利于雙方協(xié)作開發(fā)。 比較好的方式往往是通過模型為主,然后以這個自然語言為輔的這種方式, 來實現(xiàn)溝通。 這個過程中甲方向乙方傳遞的往往都是一些模型,借助于模型這種有效的溝通手段, 可以使得甲乙雙方這個溝通成本降到最少。 軟件開發(fā)的效率提高很大。 這在當(dāng)前的一些金融領(lǐng)域的一些軟件公司中是非常流行的。
二、UML擴展
?
1、必要性
-
為了適應(yīng)不同方法:Petri網(wǎng)、數(shù)據(jù)庫模型、工作流等
-
為了適應(yīng)不同的領(lǐng)域:實時建模領(lǐng)域、逆向工程領(lǐng)域、軟件過程管理領(lǐng)域等
-
為了適應(yīng)不同的平臺:COBRA、EJB、COM+等
-
為了適應(yīng)新的方法與技術(shù):面向方面、語義網(wǎng)絡(luò)、Agent等
?
2、擴展要點
-
UML并不能將任何領(lǐng)域描述清楚
-
不同領(lǐng)域需要不同的規(guī)約
-
但是,如果UML可以隨便擴展,標(biāo)準(zhǔn)就失去意義
?
3、UML擴展的作用
擴展IML的語法和語義,適合不同領(lǐng)域不同層次的建模
保證擴展方案仍遵守一定的規(guī)范。仍然可以共享和交流
?
UML是一種語言,與自然語言所不同的是UML是在特定領(lǐng)域軟件工程領(lǐng)域使用的一種工程語言, 那么UML也有語法和語義,也就是說UML表面上看有十幾種圖,二維這種建模元素, 它們背后描述每一種圖的都有語法和語義規(guī)則。描述一個擴展的UML,需要符合UML的造字法、語法。
UML是一種自定義的一種語言方式,它使用了UML語法規(guī)則的一部分語法和語義來描述全部UML模型的語法結(jié)構(gòu),實際上這些部分語法規(guī)則就是類圖的一部分,最核心的類圖的一部分。 通過這個類圖,它具有與bacs范式相同的語義,所以它能夠描述一種 一個大的結(jié)構(gòu)是由哪些小結(jié)構(gòu)組成的,這些小結(jié)構(gòu)又是由哪些更小的小結(jié)構(gòu),組成的,甚至是遞歸的。
?
4、UML擴展方式
(1)Profile
Profile :外擴投影
Profiles將stereotypes(版型)、tagged values(標(biāo)記值)和constraints(約束)應(yīng)用于具體的模型元素比如類、屬性、操作和活動。一個Profile對象就是一系列為特定領(lǐng)域(比如,航空航天、保健、金融)或平臺(J2EE、.NET)自定義的UML集合。
?
profile 作用
幫助你分析并發(fā)現(xiàn)程序運行的瓶頸,找到耗時所在,同時也能幫助你發(fā)現(xiàn)不會被執(zhí)行的代碼。從而最終實現(xiàn)程序的優(yōu)化。
?
(2)sysml
對象管理組織OMG決定在對UML2.0 的子集進(jìn)行重用和擴展的基礎(chǔ)上,提出一種新的系統(tǒng)建模語言——SysML(Systems Modeling Language),作為系統(tǒng)工程的標(biāo)準(zhǔn)建模語言。和UML 用來統(tǒng)一軟件工程中使用的建模語言一樣,SysML 的目的是統(tǒng)一系統(tǒng)工程中使用的建模語言。
它實際上是在UML基礎(chǔ)上進(jìn)行的一個擴展,這個也是被OMG組織所標(biāo)準(zhǔn)化的一個規(guī)范,這個SysML不是像UML只建立軟件的一個系統(tǒng), 用SysML可以建立硬件系統(tǒng), 也可以建立一些由人組成的系統(tǒng), 或者說是由人、 軟件、 硬件組成的一個復(fù)合的一個系統(tǒng)。 SysML中包含了UML的一部分的語法和語義,此外為了適應(yīng)不同領(lǐng)域的建模,它應(yīng)用UML的語法規(guī)則,描述語法,UML語法規(guī)則的語言,也就是那個類圖的精簡版,然后自己擴充了一部分,用來表示UML所不能描述的人組成的系統(tǒng),硬件系統(tǒng),或者說是一種軟硬系統(tǒng)還有人一起結(jié)合起來的一種系統(tǒng),用SysML都是可以來描述的。
轉(zhuǎn)載于:https://www.cnblogs.com/Nicholas0707/p/9235292.html
總結(jié)
以上是生活随笔為你收集整理的编程学习笔记(第三篇)面向对象技术高级课程:绪论-软件开发方法的演化与最新趋势(3)软件开发的现状、UML扩展...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 扔掉“三缸机”动力大增!吉利ICON巧克
- 下一篇: namespace 或The conte