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