程序設計主要方法有面向結構的方法和面向對象的方法。
結構化程序設計 隨著(zhù)計算機的價(jià)格不斷下降,硬件環(huán)境不斷改善,運行速度不斷提升。程序越寫(xiě)越大,功能越來(lái)越強,講究技巧的程序設計方法已經(jīng)不能適應需求了。
記得是哪本書(shū)上講過(guò),一個(gè)軟件的開(kāi)發(fā)成本是由:程序設計 30% 和程序維護 70% 構成。這是書(shū)上給出的一個(gè)理論值,但實(shí)際上,從我十幾年的工作經(jīng)驗中,我得到的體會(huì )是:程序設計占 10%,而維護要占 90%。
也許我說(shuō)的還是太保守了,維護的成本還應該再提高。下面這個(gè)程序,提供了兩種設計方案,大家看看哪個(gè)更好一些那? 題目:對一個(gè)數組中的100個(gè)元素,從小到大排序并顯示輸出。
(BASIC) 方法1:冒泡法排序,同時(shí)輸出。 FOR I=1 TO 100 FOR J=I+1 TO 100 IF A[I] > A[J] THEN T=A[J]: A[J]=A[I]: A[I]=T NEXT J ? A[I] NEXT I 方法2:冒泡法排序,然后再輸出。
FOR I=1 TO 100 FOR J=I+1 TO 100 IF A[I] > A[J] THEN T=A[J]: A[J]=A[I]: A[I]=T NEXT NEXT FOR I=1 TO 100? A[I] NEXT 顯然,“方法1”比“方法2”的效率要高,運行的更快。但是,從現在的程序設計角度來(lái)看,“方法2”更高級。
原因很簡(jiǎn)單:(1)功能模塊分割清晰——易讀;(2)也是最重要的——易維護。程序在設計階段的時(shí)候,就要考慮以后的維護問(wèn)題。
比如現在是實(shí)現了在屏幕上的輸出,也許將來(lái)某一天,你要修改程序,輸出到打印機上、輸出到繪圖儀上;也許將來(lái)某一天,你學(xué)習了一個(gè)新的高級的排序方法,由“冒泡法”改進(jìn)為“快速排序”、“堆排序”。那么在“方法2”的基礎上進(jìn)行修改,是不是就更簡(jiǎn)單了,更容易了?!這種把功能模塊分離的程序設計方法,就叫“結構化程序設計”。
面向對象的程序設計 隨著(zhù)程序的設計的復雜性增加,結構化程序設計方法又不夠用了。不夠用的根本原因是“代碼重用”的時(shí)候不方便。
面向對象的方法誕生了,它通過(guò)繼承來(lái)實(shí)現比較完善的代碼重用功能。很多學(xué)生在應聘工作,面試的時(shí)候,常被問(wèn)及一個(gè)問(wèn)題“你來(lái)談?wù)勈裁词敲嫦驅ο蟮某绦蛟O計”,學(xué)生無(wú)言,回來(lái)問(wèn)我,這個(gè)問(wèn)題應該怎么回答。
我告訴他,你只要說(shuō)一句話(huà)就夠了“面向對象程序設計是對數據的封裝;范式(模板)的程序設計是對算法的封裝。”后來(lái)再有學(xué)生遇到了這個(gè)問(wèn)題,只簡(jiǎn)單的一句對答,對方就對這個(gè)學(xué)生就刮目相看了(學(xué)生后來(lái)自豪地告訴我的)。
為什么那?因為只有經(jīng)過(guò)徹底的體會(huì )和實(shí)踐才能提煉出這個(gè)精華。 面向對象的設計方法和思想,其實(shí)早在70年代初就已經(jīng)被提出來(lái)了。
其目的就是:強制程序必須通過(guò)函數的方式來(lái)操縱數據。這樣實(shí)現了數據的封裝,就避免了以前設計方法中的,任何代碼都可以隨便操作數據而因起的BUG,而查找修改這個(gè)BUG是非常困難的。
那么你可以說(shuō),即使我不使用面向對象,當我想訪(fǎng)問(wèn)某個(gè)數據的時(shí)候,我就通過(guò)調用函數訪(fǎng)問(wèn)不就可以了嗎?是的,的確可以,但并不是強制的。人都有惰性,當我想對 i 加1的時(shí)候,干嗎非要調用函數呀?算了,直接i++多省事呀。
呵呵,正式由于這個(gè)懶惰,當程序出BUG的時(shí)候,可就不好捉啦。而面向對象是強制性的,從編譯階段就解決了你懶惰的問(wèn)題。
巧合的是,面向對象的思想,其實(shí)和我們的日常生活中處理問(wèn)題是吻合的。舉例來(lái)說(shuō),我打算丟掉一個(gè)茶杯,怎么扔那?太簡(jiǎn)單了,拿起茶杯,走到垃圾桶,扔!注意分析這個(gè)過(guò)程,我們是先選一個(gè)“對象”------茶杯,然后向這個(gè)對象施加一個(gè)動(dòng)作——扔。
每個(gè)對象所能施加在它上面的動(dòng)作是有一定限制的:茶杯,可以被扔,可以被砸,可以用來(lái)喝水,可以敲它發(fā)出聲音。
;一張紙,可以被寫(xiě)字,可以撕,可以燒。
也就是說(shuō),一旦確定了一個(gè)對象,則方法也就跟著(zhù)確定了。
我們的日常生活就是如此。但是,大家回想一下我們程序設計和對計算機的操作,卻不是這樣的。
拿DOS的操作來(lái)說(shuō),我要刪除一個(gè)文件,方法是在DOS提示符下:c:> del 文件名。注意看這個(gè)過(guò)程,動(dòng)作在前(del),對象在后(文件名),和面向對象的方法正好順序相反。
那么只是一個(gè)順序的問(wèn)題,會(huì )帶來(lái)什么影響那?呵呵,大家一定看到過(guò)這個(gè)現象:File not found. “啊~~~,我錯了,我錯了,文件名敲錯了一個(gè)字母”,于是重新輸入:c:> del 文件名2。不幸又發(fā)生了,計算機報告:File read only. 哈哈,痛苦吧:)。
所以DOS的操作其實(shí)是違反我們日常生活中的習慣的(當然,以前誰(shuí)也沒(méi)有提出過(guò)異議),而現在由于使用了面向對象的設計,那么這些問(wèn)題,就在編譯的時(shí)候解決了,而不是在運行的時(shí)候。obj.fun(),對于這條語(yǔ)句,無(wú)論是對象,還是函數,如果你輸入有問(wèn)題,那么都會(huì )在編譯的時(shí)候報告出來(lái),方便你修改,而不是在執行的時(shí)候出錯,害的你到處去捉蟲(chóng)子。
同時(shí),面向對象又能解決代碼重用的問(wèn)題——繼承。我以前寫(xiě)了一個(gè)“狗”的類(lèi),屬性有(變量):有毛、4條腿、有翹著(zhù)的尾巴(耷拉著(zhù)尾巴的那是狼)、鼻子很靈敏、喜歡吃肉骨頭。
方法有(函數):能跑、能聞、汪汪叫。
如果它去抓耗子,人家叫它“多管閑事”。
好了,狗這個(gè)類(lèi)寫(xiě)好了。但在我實(shí)際的生活中,我家養的這條狗和我以前寫(xiě)的這個(gè)“。
程序設計方法學(xué)(Programming Methodology)有兩種含義: 一種是以程序設計方法為研究對象的學(xué)科,它不僅研究各種具體的方法,而且著(zhù)重研究各種具體方法的共性,涉及規范的全局性方法,以及這些方法的顯示背景和理論基礎;另外一種含義是針對某一領(lǐng)域或某一領(lǐng)域的一類(lèi)特定
程序設計方法學(xué)(Programming Methodology)有兩種含義:
一種是以程序設計方法為研究對象的學(xué)科,它不僅研究各種具體的方法,而且著(zhù)重研究各種具體方法的共性,涉及規范的全局性方法,以及這些方法的顯示背景和理論基礎;另外一種含義是針對某一領(lǐng)域或某一領(lǐng)域的一類(lèi)特定問(wèn)題,所用的一整套特定程序設計方法所構成的體系。
作為一門(mén)學(xué)科(第一種含義),程序設計方法學(xué)可對程序設計人員選用具體的程序設計方法起指導作用,而具體的程序設計方法對程序設計工作的質(zhì)量以及所設計出大程序的質(zhì)量影響巨大。因此,對程序設計方法學(xué)的研究是非常重要的。
作為一套完整特定的程序設計方法所構成的體系(第二種含義),如邏輯式程序設計方法學(xué)、函數式程序設計方法學(xué)、對象式程序設計方法學(xué)等。它們有各自的利弊得失,與具體領(lǐng)域、具體問(wèn)題以及具體環(huán)境相關(guān)。
兩種含義之間的關(guān)系是:第二種含義是第一種含義的基礎,第一種含義是在第二種含義的基礎上的總結、提高,并上升到原理、原則和理論的高度。這兩種含義的程序設計方法學(xué)都非常重要。
程序設計主要方法有面向結構的方法和面向對象的方法。
結構化程序設計 隨著(zhù)計算機的價(jià)格不斷下降,硬件環(huán)境不斷改善,運行速度不斷提升。程序越寫(xiě)越大,功能越來(lái)越強,講究技巧的程序設計方法已經(jīng)不能適應需求了。
記得是哪本書(shū)上講過(guò),一個(gè)軟件的開(kāi)發(fā)成本是由:程序設計 30% 和程序維護 70% 構成。這是書(shū)上給出的一個(gè)理論值,但實(shí)際上,從我十幾年的工作經(jīng)驗中,我得到的體會(huì )是:程序設計占 10%,而維護要占 90%。
也許我說(shuō)的還是太保守了,維護的成本還應該再提高。下面這個(gè)程序,提供了兩種設計方案,大家看看哪個(gè)更好一些那? 題目:對一個(gè)數組中的100個(gè)元素,從小到大排序并顯示輸出。
(BASIC) 方法1:冒泡法排序,同時(shí)輸出。 FOR I=1 TO 100 FOR J=I+1 TO 100 IF A[I] > A[J] THEN T=A[J]: A[J]=A[I]: A[I]=T NEXT J ? A[I]NEXT I 方法2:冒泡法排序,然后再輸出。
FOR I=1 TO 100FOR J=I+1 TO 100IF A[I] > A[J] THEN T=A[J]: A[J]=A[I]: A[I]=TNEXTNEXTFOR I=1 TO 100? A[I]NEXT 顯然,“方法1”比“方法2”的效率要高,運行的更快。但是,從現在的程序設計角度來(lái)看,“方法2”更高級。
原因很簡(jiǎn)單:(1)功能模塊分割清晰——易讀;(2)也是最重要的——易維護。程序在設計階段的時(shí)候,就要考慮以后的維護問(wèn)題。
比如現在是實(shí)現了在屏幕上的輸出,也許將來(lái)某一天,你要修改程序,輸出到打印機上、輸出到繪圖儀上;也許將來(lái)某一天,你學(xué)習了一個(gè)新的高級的排序方法,由“冒泡法”改進(jìn)為“快速排序”、“堆排序”。那么在“方法2”的基礎上進(jìn)行修改,是不是就更簡(jiǎn)單了,更容易了?!這種把功能模塊分離的程序設計方法,就叫“結構化程序設計”。
面向對象的程序設計 隨著(zhù)程序的設計的復雜性增加,結構化程序設計方法又不夠用了。不夠用的根本原因是“代碼重用”的時(shí)候不方便。
面向對象的方法誕生了,它通過(guò)繼承來(lái)實(shí)現比較完善的代碼重用功能。很多學(xué)生在應聘工作,面試的時(shí)候,常被問(wèn)及一個(gè)問(wèn)題“你來(lái)談?wù)勈裁词敲嫦驅ο蟮某绦蛟O計”,學(xué)生無(wú)言,回來(lái)問(wèn)我,這個(gè)問(wèn)題應該怎么回答。
我告訴他,你只要說(shuō)一句話(huà)就夠了“面向對象程序設計是對數據的封裝;范式(模板)的程序設計是對算法的封裝。”后來(lái)再有學(xué)生遇到了這個(gè)問(wèn)題,只簡(jiǎn)單的一句對答,對方就對這個(gè)學(xué)生就刮目相看了(學(xué)生后來(lái)自豪地告訴我的)。
為什么那?因為只有經(jīng)過(guò)徹底的體會(huì )和實(shí)踐才能提煉出這個(gè)精華。 面向對象的設計方法和思想,其實(shí)早在70年代初就已經(jīng)被提出來(lái)了。
其目的就是:強制程序必須通過(guò)函數的方式來(lái)操縱數據。這樣實(shí)現了數據的封裝,就避免了以前設計方法中的,任何代碼都可以隨便操作數據而因起的BUG,而查找修改這個(gè)BUG是非常困難的。
那么你可以說(shuō),即使我不使用面向對象,當我想訪(fǎng)問(wèn)某個(gè)數據的時(shí)候,我就通過(guò)調用函數訪(fǎng)問(wèn)不就可以了嗎?是的,的確可以,但并不是強制的。人都有惰性,當我想對 i 加1的時(shí)候,干嗎非要調用函數呀?算了,直接i++多省事呀。
呵呵,正式由于這個(gè)懶惰,當程序出BUG的時(shí)候,可就不好捉啦。而面向對象是強制性的,從編譯階段就解決了你懶惰的問(wèn)題。
巧合的是,面向對象的思想,其實(shí)和我們的日常生活中處理問(wèn)題是吻合的。舉例來(lái)說(shuō),我打算丟掉一個(gè)茶杯,怎么扔那?太簡(jiǎn)單了,拿起茶杯,走到垃圾桶,扔!注意分析這個(gè)過(guò)程,我們是先選一個(gè)“對象”------茶杯,然后向這個(gè)對象施加一個(gè)動(dòng)作——扔。
每個(gè)對象所能施加在它上面的動(dòng)作是有一定限制的:茶杯,可以被扔,可以被砸,可以用來(lái)喝水,可以敲它發(fā)出聲音。
;一張紙,可以被寫(xiě)字,可以撕,可以燒。
也就是說(shuō),一旦確定了一個(gè)對象,則方法也就跟著(zhù)確定了。
我們的日常生活就是如此。但是,大家回想一下我們程序設計和對計算機的操作,卻不是這樣的。
拿DOS的操作來(lái)說(shuō),我要刪除一個(gè)文件,方法是在DOS提示符下:c:> del 文件名。注意看這個(gè)過(guò)程,動(dòng)作在前(del),對象在后(文件名),和面向對象的方法正好順序相反。
那么只是一個(gè)順序的問(wèn)題,會(huì )帶來(lái)什么影響那?呵呵,大家一定看到過(guò)這個(gè)現象:File not found. “啊~~~,我錯了,我錯了,文件名敲錯了一個(gè)字母”,于是重新輸入:c:> del 文件名2。不幸又發(fā)生了,計算機報告:File read only. 哈哈,痛苦吧:)。
所以DOS的操作其實(shí)是違反我們日常生活中的習慣的(當然,以前誰(shuí)也沒(méi)有提出過(guò)異議),而現在由于使用了面向對象的設計,那么這些問(wèn)題,就在編譯的時(shí)候解決了,而不是在運行的時(shí)候。obj.fun(),對于這條語(yǔ)句,無(wú)論是對象,還是函數,如果你輸入有問(wèn)題,那么都會(huì )在編譯的時(shí)候報告出來(lái),方便你修改,而不是在執行的時(shí)候出錯,害的你到處去捉蟲(chóng)子。
同時(shí),面向對象又能解決代碼重用的問(wèn)題——繼承。我以前寫(xiě)了一個(gè)“狗”的類(lèi),屬性有(變量):有毛、4條腿、有翹著(zhù)的尾巴(耷拉著(zhù)尾巴的那是狼)、鼻子很靈敏、喜歡吃肉骨頭。
方法有(函數):能跑、能聞、汪汪叫。
如果它去抓耗子,人家叫它“多管閑事”。
好了,狗這個(gè)類(lèi)寫(xiě)好了。但在我實(shí)際的生活中,我家養的這條狗和我以前寫(xiě)的這個(gè)“狗類(lèi)”非常相似,只有一點(diǎn)點(diǎn)的不同,就是我的這條狗。
系統分析與設計的方法主要包括結構化生命周期法(又稱(chēng)瀑布法)、原型化方法(迭代法)、面向對象方法。
按時(shí)間過(guò)程來(lái)分,開(kāi)發(fā)方法分為生命周期法和原型法,實(shí)際上還有許多處于中間狀態(tài)的方法。原型法又按照對原型結果的處理方式分為試驗原型法和演進(jìn)原型法。試驗原型法只把原型當成試驗工具,試了以后就拋掉,根據試驗的結論做出新的系統。演進(jìn)原型法則把試好的結果保留,成為最終系統的一部分。
按照系統的分析要素,可以把開(kāi)發(fā)方法分為三類(lèi):
①面向處理方法(Processing Oriented ,簡(jiǎn)稱(chēng)PO)。
②面向數據方法(Data Oriented ,簡(jiǎn)稱(chēng)DO)。
③面向對象的方法(Object Oriented ,簡(jiǎn)稱(chēng)OO)。
組織設計程序與方法 設計程序工作內容 1.設計原則的確定根據企業(yè)的目標和特點(diǎn),確定組織設計的方針、原則和主要參數 2.職能分析和設計確定管理職能及其結構,層層分解到各項管理業(yè)務(wù)和工作中,進(jìn)行管理業(yè)務(wù)的總體設計 3.結構框架的設計設計各個(gè)管理層次、部門(mén)、崗位及其責任、權力。
具體表現為確定企業(yè)的組織系統圖 4.聯(lián)系方式的設計進(jìn)行控制、信息交流、綜合、協(xié)調等方式和制度的設計 5.管理規范的設計主要設計管理工作程序、管理工作標準和管理工作方法,作為管理人員的行為規范 6.人員配備和訓練根據結構設計,定質(zhì)、定量地配備各級各類(lèi)管理人員 7.運行制度的設計設計管理部門(mén)和人員績(jì)效考核制度,設計精神鼓勵和工資獎勵制度,設計管理人員培訓制度 8.反饋和修正將運行過(guò)程中的信息反饋回去,定期或不定期地對上述各項設計進(jìn)行必要的修正。
方法通過(guò)靜態(tài)分析方式和動(dòng)態(tài)分析方式相結合,實(shí)現應用程序行為分析檢測。
靜態(tài)分析通過(guò)Android的靜態(tài)反匯編和反編譯獲取應用程序的源代碼和資源配置文件,然后通過(guò)檢測源代碼中是否包含敏感行為特征,實(shí)現靜態(tài)行為分析檢測。動(dòng)態(tài)分析結合沙箱系統,實(shí)現程序的動(dòng)態(tài)運行并輸出行為日志,然后對輸出的行為日志分析,實(shí)現對應用程序動(dòng)態(tài)行為分析檢測。
靜態(tài)分析由于某些程序精心構造,無(wú)法對一些未將特征編碼在代碼文件中行為進(jìn)行分析,在檢測時(shí)無(wú)法獲取潛在的應用程序行為;動(dòng)態(tài)分析由于自動(dòng)運行行為的隨機性,不能完全觸發(fā)應用程序操作。兩種方式都存在這不足,所以本課題在實(shí)現分析系統時(shí)采取了動(dòng)靜態(tài)分析相結合方式,以更全面的實(shí)現Android應用程序的行為分析檢測,為安全分析提供依據。
MIS的開(kāi)發(fā)方式有自行開(kāi)發(fā)、委托開(kāi)發(fā)、聯(lián)合開(kāi)發(fā)、購買(mǎi)現成軟件包進(jìn)行二次開(kāi)發(fā)幾種形式。一般來(lái)說(shuō)根據企業(yè)的技術(shù)力量、資源及外部環(huán)境而定。 補充: 管理信息系統的開(kāi)發(fā)策略
不可行的開(kāi)發(fā)方法:組織結構法,機械的按照現有組織機構劃分系統,不考慮MIS的開(kāi)發(fā)原則。
數據庫法,開(kāi)發(fā)人員從數據庫設計開(kāi)始對現有系統進(jìn)行開(kāi)發(fā)。
想象系統發(fā),開(kāi)發(fā)人員基于對現有系統進(jìn)行想象為基礎進(jìn)行開(kāi)發(fā)。
可行的開(kāi)發(fā)方法:自上而下(Top__Down),從企業(yè)管理的整體進(jìn)行設計,逐漸從抽象到具體,從概要設計到詳細設計,體現結構化的設計思想。自下而上(Bottom__Up),設計系統的構件,采用搭積木的方式組成整個(gè)系統,缺點(diǎn)在于忽視系統部件的有機聯(lián)系。
兩者結合是實(shí)際開(kāi)發(fā)過(guò)程中常用的方法。通過(guò)對系統進(jìn)行分析得到系統的邏輯模型, 進(jìn)而從邏輯模型求得最優(yōu)的物理模型。邏輯模型和物理模型的這種螺旋式循環(huán)優(yōu)化的設計模式體現了自上而下、自下而上結合的設計思想。
管理信息系統的開(kāi)發(fā)方法
完整實(shí)用的文檔資料是成功MIS的標致。科學(xué)的開(kāi)發(fā)過(guò)程從可行性研究開(kāi)始,經(jīng)過(guò)系統分析、系統設計、系統實(shí)施等主要階段。每一個(gè)階段都應有文檔資料,并且在開(kāi)發(fā)過(guò)程中不斷完善和充實(shí)。目前使用的開(kāi)發(fā)方法有以下兩種:
1.瀑布模型(生命周期方法學(xué))
結構分析、結構設計,結構程序設計(簡(jiǎn)稱(chēng)SA—SD—SP方法)用瀑布模型來(lái)模擬。各階段的工作自頂向下從抽象到具體順序進(jìn)行。瀑布模型意味著(zhù)在生命周期各階段間存在著(zhù)嚴格的順序且相互依存。瀑布模型是早期MIS設計的主要手段。
2.快速原型法(面向對象方法)
快速原型法也稱(chēng)為面向對象方法是近年來(lái)針對(SA—SD—SP)的缺陷提出的設計新途徑,是適應當前計算機技術(shù)的進(jìn)步及對軟件需求的極大增長(cháng)而出現的。是一種快速、靈活、交互式的軟件開(kāi)發(fā)方法學(xué)。其核心是用交互的、快速建立起來(lái)的原型取代了形式的、僵硬的(不易修改的)大快的規格說(shuō)明,用戶(hù)通過(guò)在計算機上實(shí)際運行和試用原型而向開(kāi)發(fā)者提供真實(shí)的反饋意見(jiàn)。快速原型法的實(shí)現基礎之一是可視化的第四代語(yǔ)言的出現。
1.結構化方法:分析,設計,程序設計構成,面向數據流的開(kāi)發(fā)方法,分解和抽象的原則,數據流圖建立功能模型,完成需求分析工作。
2.Jackson方法:面向數據結構開(kāi)發(fā)方法。數據結構為驅動(dòng),適合小規模的項目,當輸入數據結構和輸出結構之間沒(méi)有對應關(guān)系,難用此方法,JSD(Jackson Structure Prograamming)是JSP(JacksonSystem Development)的擴充
3.原型化方法:和演化模型相對應,需求不清,業(yè)務(wù)理論不確定,需求經(jīng)常變化,規模不大去不太復雜時(shí)采用。
4.面向對象開(kāi)發(fā)方法:分析,設計,實(shí)現,Booch,Coad,OMT,為統一各種面向對象方法的術(shù)語(yǔ),概念和模型,推出UML (Unified Modeling Language)統一化建模語(yǔ)言,成為工業(yè)標準。
聲明:本網(wǎng)站尊重并保護知識產(chǎn)權,根據《信息網(wǎng)絡(luò )傳播權保護條例》,如果我們轉載的作品侵犯了您的權利,請在一個(gè)月內通知我們,我們會(huì )及時(shí)刪除。
蜀ICP備2020033479號-4 Copyright ? 2016 學(xué)習?shū)B(niǎo). 頁(yè)面生成時(shí)間:3.107秒