您現(xiàn)在的位置是:首頁 >生活 > 2023-11-29 14:42:23 來源:
程序設(shè)計(jì)語言有哪幾種(程序設(shè)計(jì))
大家好,我是小夏,我來為大家解答以上問題。程序設(shè)計(jì)語言有哪幾種,程序設(shè)計(jì)很多人還不知道,現(xiàn)在讓我們一起來看看吧!
1、程序設(shè)計(jì)主要方法有面向結(jié)構(gòu)的方法和面向?qū)ο蟮姆椒ā?/p>
2、結(jié)構(gòu)化程序設(shè)計(jì)
3、 隨著計(jì)算機(jī)的價(jià)格不斷下降,硬件環(huán)境不斷改善,運(yùn)行速度不斷提升。程序越寫越大,功能越來越強(qiáng),講究技巧的程序設(shè)計(jì)方法已經(jīng)不能適應(yīng)需求了。記得是哪本書上講過,一個(gè)軟件的開發(fā)成本是由:程序設(shè)計(jì) 30% 和程序維護(hù) 70% 構(gòu)成。這是書上給出的一個(gè)理論值,但實(shí)際上,從我十幾年的工作經(jīng)驗(yàn)中,我得到的體會(huì)是:程序設(shè)計(jì)占 10%,而維護(hù)要占 90%。也許我說的還是太保守了,維護(hù)的成本還應(yīng)該再提高。下面這個(gè)程序,提供了兩種設(shè)計(jì)方案,大家看看哪個(gè)更好一些那?
4、 題目:對(duì)一個(gè)數(shù)組中的100個(gè)元素,從小到大排序并顯示輸出。(BASIC)
5、 方法1:冒泡法排序,同時(shí)輸出。
6、FOR I=1 TO 100
7、 FOR J=I+1 TO 100
8、 IF A[I] > A[J] THEN T=A[J]: A[J]=A[I]: A[I]=T
9、 NEXT J
10、 ? A[I]
11、NEXT I
12、 方法2:冒泡法排序,然后再輸出。
13、FOR I=1 TO 100
14、FOR J=I+1 TO 100
15、IF A[I] > A[J] THEN T=A[J]: A[J]=A[I]: A[I]=T
16、NEXT
17、NEXT
18、FOR I=1 TO 100
19、? A[I]
20、NEXT
21、 顯然,“方法1”比“方法2”的效率要高,運(yùn)行的更快。但是,從現(xiàn)在的程序設(shè)計(jì)角度來看,“方法2”更高級(jí)。原因很簡單:(1)功能模塊分割清晰——易讀;(2)也是最重要的——易維護(hù)。程序在設(shè)計(jì)階段的時(shí)候,就要考慮以后的維護(hù)問題。比如現(xiàn)在是實(shí)現(xiàn)了在屏幕上的輸出,也許將來某一天,你要修改程序,輸出到打印機(jī)上、輸出到繪圖儀上;也許將來某一天,你學(xué)習(xí)了一個(gè)新的高級(jí)的排序方法,由“冒泡法”改進(jìn)為“快速排序”、“堆排序”。那么在“方法2”的基礎(chǔ)上進(jìn)行修改,是不是就更簡單了,更容易了?!這種把功能模塊分離的程序設(shè)計(jì)方法,就叫“結(jié)構(gòu)化程序設(shè)計(jì)”。
22、面向?qū)ο蟮某绦蛟O(shè)計(jì)
23、 隨著程序的設(shè)計(jì)的復(fù)雜性增加,結(jié)構(gòu)化程序設(shè)計(jì)方法又不夠用了。不夠用的根本原因是“代碼重用”的時(shí)候不方便。面向?qū)ο蟮姆椒ㄕQ生了,它通過繼承來實(shí)現(xiàn)比較完善的代碼重用功能。很多學(xué)生在應(yīng)聘工作,面試的時(shí)候,常被問及一個(gè)問題“你來談?wù)勈裁词敲嫦驅(qū)ο蟮某绦蛟O(shè)計(jì)”,學(xué)生無言,回來問我,這個(gè)問題應(yīng)該怎么回答。我告訴他,你只要說一句話就夠了“面向?qū)ο蟪绦蛟O(shè)計(jì)是對(duì)數(shù)據(jù)的封裝;范式(模板)的程序設(shè)計(jì)是對(duì)算法的封裝。”后來再有學(xué)生遇到了這個(gè)問題,只簡單的一句對(duì)答,對(duì)方就對(duì)這個(gè)學(xué)生就刮目相看了(學(xué)生后來自豪地告訴我的)。為什么那?因?yàn)橹挥薪?jīng)過徹底的體會(huì)和實(shí)踐才能提煉出這個(gè)精華。
24、 面向?qū)ο蟮脑O(shè)計(jì)方法和思想,其實(shí)早在70年代初就已經(jīng)被提出來了。其目的就是:強(qiáng)制程序必須通過函數(shù)的方式來操縱數(shù)據(jù)。這樣實(shí)現(xiàn)了數(shù)據(jù)的封裝,就避免了以前設(shè)計(jì)方法中的,任何代碼都可以隨便操作數(shù)據(jù)而因起的BUG,而查找修改這個(gè)BUG是非常困難的。那么你可以說,即使我不使用面向?qū)ο?,?dāng)我想訪問某個(gè)數(shù)據(jù)的時(shí)候,我就通過調(diào)用函數(shù)訪問不就可以了嗎?是的,的確可以,但并不是強(qiáng)制的。人都有惰性,當(dāng)我想對(duì) i 加1的時(shí)候,干嗎非要調(diào)用函數(shù)呀?算了,直接i++多省事呀。呵呵,正式由于這個(gè)懶惰,當(dāng)程序出BUG的時(shí)候,可就不好捉啦。而面向?qū)ο笫菑?qiáng)制性的,從編譯階段就解決了你懶惰的問題。
25、 巧合的是,面向?qū)ο蟮乃枷耄鋵?shí)和我們的日常生活中處理問題是吻合的。舉例來說,我打算丟掉一個(gè)茶杯,怎么扔那?太簡單了,拿起茶杯,走到垃圾桶,扔!注意分析這個(gè)過程,我們是先選一個(gè)“對(duì)象”------茶杯,然后向這個(gè)對(duì)象施加一個(gè)動(dòng)作——扔。每個(gè)對(duì)象所能施加在它上面的動(dòng)作是有一定限制的:茶杯,可以被扔,可以被砸,可以用來喝水,可以敲它發(fā)出聲音......;一張紙,可以被寫字,可以撕,可以燒......。也就是說,一旦確定了一個(gè)對(duì)象,則方法也就跟著確定了。我們的日常生活就是如此。但是,大家回想一下我們程序設(shè)計(jì)和對(duì)計(jì)算機(jī)的操作,卻不是這樣的。拿DOS的操作來說,我要?jiǎng)h除一個(gè)文件,方法是在DOS提示符下:c:> del 文件名<回車>。注意看這個(gè)過程,動(dòng)作在前(del),對(duì)象在后(文件名),和面向?qū)ο蟮姆椒ㄕ庙樞蛳喾?。那么只是一個(gè)順序的問題,會(huì)帶來什么影響那?呵呵,大家一定看到過這個(gè)現(xiàn)象:File not found. “啊~~~,我錯(cuò)了,我錯(cuò)了,文件名敲錯(cuò)了一個(gè)字母”,于是重新輸入:c:> del 文件名2<回車>。不幸又發(fā)生了,計(jì)算機(jī)報(bào)告:File read only. 哈哈,痛苦吧:)。所以DOS的操作其實(shí)是違反我們?nèi)粘I钪械牧?xí)慣的(當(dāng)然,以前誰也沒有提出過異議),而現(xiàn)在由于使用了面向?qū)ο蟮脑O(shè)計(jì),那么這些問題,就在編譯的時(shí)候解決了,而不是在運(yùn)行的時(shí)候。obj.fun(),對(duì)于這條語句,無論是對(duì)象,還是函數(shù),如果你輸入有問題,那么都會(huì)在編譯的時(shí)候報(bào)告出來,方便你修改,而不是在執(zhí)行的時(shí)候出錯(cuò),害的你到處去捉蟲子。
26、 同時(shí),面向?qū)ο笥帜芙鉀Q代碼重用的問題——繼承。我以前寫了一個(gè)“狗”的類,屬性有(變量):有毛、4條腿、有翹著的尾巴(耷拉著尾巴的那是狼)、鼻子很靈敏、喜歡吃肉骨頭......方法有(函數(shù)):能跑、能聞、汪汪叫......如果它去抓耗子,人家叫它“多管閑事”。好了,狗這個(gè)類寫好了。但在我實(shí)際的生活中,我家養(yǎng)的這條狗和我以前寫的這個(gè)“狗類”非常相似,只有一點(diǎn)點(diǎn)的不同,就是我的這條狗,它是:卷毛而且長長的,鼻子小,嘴小......。于是,我派生一個(gè)新的類型,叫“哈巴狗類”在“狗類”的基礎(chǔ)上,加上新的特性。好了,程序?qū)懲炅?,并且是重用了以前的正確的代碼——這就是面向?qū)ο蟪绦蛟O(shè)計(jì)的好處。我的成功只是站在了巨人的肩膀上。當(dāng)然,如果你使用VC的話,重用最多的代碼就是MFC的類庫。
本文到此講解完畢了,希望對(duì)大家有幫助。