1.編程模型
創(chuàng)新互聯(lián)-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價(jià)比東安網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫(kù),直接使用。一站式東安網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋東安地區(qū)。費(fèi)用合理售后完善,十多年實(shí)體公司更值得信賴。
所有計(jì)算機(jī)均由兩種元素組成:代碼和數(shù)據(jù).精確的說,有些程序是圍繞著"什么正在發(fā)生"而編寫,有些則是圍繞"誰(shuí)正在受影響"而編寫的.
第一種編程方式叫做"面向過程的模型",按這種模型編寫的程序以一系列的線性步驟(代碼)為特征,可被理解為作用于數(shù)據(jù)的代碼.如 C 等過程化語(yǔ)言.
第二種編程方式叫做"面向?qū)ο蟮哪P?,按這種模型編寫的程序圍繞著程序的數(shù)據(jù)(對(duì)象)和針對(duì)該對(duì)象而嚴(yán)格定義的接口來組織程序,它的特點(diǎn)是數(shù)據(jù)控制代碼的訪問.通過把控制權(quán)轉(zhuǎn)移到數(shù)據(jù)上,面向?qū)ο蟮哪P驮诮M織方式上有:抽象,封裝,繼承和多態(tài)的好處.
2.抽象
面向?qū)ο蟪绦蛟O(shè)計(jì)的基本要素是抽象,程序員通過抽象來管理復(fù)雜性.
管理抽象的有效方法是使用層次式的分類特性,這種方法允許用戶根據(jù)物理含義分解一個(gè)復(fù)雜的系統(tǒng),把它劃分成更容易管理的塊.例如,一個(gè)計(jì)算機(jī)系統(tǒng)是一個(gè)獨(dú)立的對(duì)象.而在計(jì)算機(jī)系統(tǒng)內(nèi)部由幾個(gè)子系統(tǒng)組成:顯示器,鍵盤,硬盤驅(qū)動(dòng)器,DVD-ROM,軟盤,音響等,這些子系統(tǒng)每個(gè)又由專門的部件組成.關(guān)鍵是需要使用層次抽象來管理計(jì)算機(jī)系統(tǒng)(或其他任何復(fù)雜系統(tǒng))的復(fù)雜性.
面向?qū)ο蟪绦蛟O(shè)計(jì)的本質(zhì):這些抽象的對(duì)象可以被看作具體的實(shí)體,這些實(shí)體對(duì)用來告訴我們作什么的消息進(jìn)行響應(yīng).
/* (我的理解)
*計(jì)算機(jī)是一個(gè)實(shí)體,我要輸入字符,顯示器顯示出來,那么
*計(jì)算機(jī)(對(duì)象).輸入(鍵盤屬性).顯示(顯示方法)
*使用分層來引用,操作.而不用管計(jì)算機(jī)內(nèi)部如何處理.
*只要有計(jì)算機(jī)對(duì)象,它就能響應(yīng)我的操作,而我敲鍵盤,
*計(jì)算機(jī)對(duì)象就把這個(gè)消息傳給屏幕,屏幕顯示.
*/
計(jì)算機(jī)對(duì)象包含了它所有的屬性,以及操作,這就是面向?qū)ο蟪绦蛟O(shè)計(jì)的三大原則之一:封裝.
3.封裝
封裝是一種把代碼和代碼所操作的數(shù)據(jù)捆綁在一起,使這兩者不受外界干擾和誤用的機(jī)制.封裝可被理解為一種用做保護(hù)的包裝器,以防止代碼和數(shù)據(jù)被包裝器外部所定義的其他代碼任意訪問.對(duì)包裝器內(nèi)部代碼與數(shù)據(jù)的訪問通過一個(gè)明確定義的接口來控制.封裝代碼的好處是每個(gè)人都知道怎樣訪問代碼,進(jìn)而無需考慮實(shí)現(xiàn)細(xì)節(jié)就能直接使用它,同時(shí)不用擔(dān)心不可預(yù)料的副作用.
在JAVA中,最基本的封裝單元是類,一個(gè)類定義著將由一組對(duì)象所共享的行為(數(shù)據(jù)和代碼).一個(gè)類的每個(gè)對(duì)象均包含它所定義的結(jié)構(gòu)與行為,這些對(duì)象就好象是一個(gè)模子鑄造出來的.所以對(duì)象也叫做類的實(shí)例.
在定義一個(gè)類時(shí),需要指定構(gòu)成該類的代碼與數(shù)據(jù).特別是,類所定義的對(duì)象叫做成員變量或?qū)嵗兞?操作數(shù)據(jù)的代碼叫做成員方法.方法定義怎樣使用成員變量,這意味著類的行為和接口要由操作實(shí)例數(shù)據(jù)的方法來定義.
由于類的用途是封裝復(fù)雜性,所以類的內(nèi)部有隱藏實(shí)現(xiàn)復(fù)雜性的機(jī)制.所以JAVA中提供了私有和公有的訪問模式,類的公有接口代表外部的用戶應(yīng)該知道或可以知道的每件東西.私有的方法數(shù)據(jù)只能通過該類的成員代碼來訪問.這就可以確保不會(huì)發(fā)生不希望的事情.
4.繼承
繼承是指一個(gè)對(duì)象從另一個(gè)對(duì)象中獲得屬性的過程.是面向?qū)ο蟪绦蛟O(shè)計(jì)的三大原則之二,它支持按層次分類的概念.例如,波斯貓是貓的一種,貓又是哺乳動(dòng)物的一種,哺乳動(dòng)物又是動(dòng)物的一種.如果不使用層次的概念,每個(gè)對(duì)象需要明確定義各自的全部特征.通過層次分類方式,一個(gè)對(duì)象只需要在它的類中定義是它成為唯一的 各個(gè)屬性,然后從父類中繼承它的通用屬性.因此,正是由于繼承機(jī)制,才使得一個(gè)對(duì)象可以成為一個(gè)通用類的一個(gè)特定實(shí)例.一個(gè)深度繼承的子類將繼承它在類層次中的每個(gè)祖先的所有屬性.
繼承與封裝可以互相作用.如果一個(gè)給定的類封裝了某些屬性,它的任何子類將會(huì)含有同樣得屬性,另加各個(gè)子類所有得屬性.這是面向?qū)ο蟪绦蛟趶?fù)雜性上呈線性而非幾何增長(zhǎng)的一個(gè)重要概念.新的子類繼承其所有祖先的所有屬性.子類和系統(tǒng)中的其他代碼不會(huì)產(chǎn)生無法預(yù)料的交互作用.
5.多態(tài)
多態(tài)是指一個(gè)方法只能有一個(gè)名稱,但可以有許多形態(tài),也就是程序中可以定義多個(gè)同名的方法,用"一個(gè)接口,多個(gè)方法"來描述.可以通過方法的參數(shù)和類型引用.
6.封裝,繼承,多態(tài)的組合使用
在由封裝,繼承,多態(tài)所組成的環(huán)境中,程序員可以編寫出比面向過程模型更健壯,更具擴(kuò)展性的程序.經(jīng)過仔細(xì)設(shè)計(jì)的類層次結(jié)構(gòu)是重用代碼的基礎(chǔ).封裝能讓程序員不必修改公有接口的代碼即可實(shí)現(xiàn)程序的移植.多態(tài)能使程序員開發(fā)出簡(jiǎn)潔,易懂,易修改的代碼.例如:汽車
從繼承的角度看,駕駛員都依靠繼承性來駕駛不同類型(子類)的汽車,無論這輛車是轎車還是卡車,是奔馳牌還是菲亞特牌,駕駛員都能找到方向盤,手剎,換檔器.經(jīng)過一段時(shí)間駕駛后,都能知道手動(dòng)檔與自動(dòng)檔之間的差別,因?yàn)樗麄儗?shí)際上都知道這兩者的共同超類:傳動(dòng)裝置.
從封裝的角度看,駕駛員總是看到封裝好的特性.剎車隱藏了許多復(fù)雜性,其外觀如此簡(jiǎn)單,用腳就能操作它.發(fā)動(dòng)機(jī),手剎,輪胎大小的實(shí)現(xiàn)對(duì)與剎車類的定義沒有影響.
從多態(tài)的角度看,剎車系統(tǒng)有正鎖反鎖之分,駕駛員只用腳踩剎車停車,同樣的接口可以用來控制若干種不同的實(shí)現(xiàn)(正鎖或反鎖).
這樣各個(gè)獨(dú)立的構(gòu)件才被轉(zhuǎn)換為汽車這個(gè)對(duì)象的.同樣,通過使用面向?qū)ο蟮脑O(shè)計(jì)原則,程序員可以把一個(gè)復(fù)雜程序的各個(gè)構(gòu)件組合在一起,形成一個(gè)一致,健壯,可維護(hù)的程序
我個(gè)人認(rèn)為函數(shù)這部分的重點(diǎn)給你說下哦:
1.函數(shù)的返回值類型,也就是你函數(shù)return的內(nèi)容的類型,注意如果有多種結(jié)束函數(shù)途徑的話一定要有多個(gè)return,譬如說
int fun(int x)
{
if(x0)
return 0;
else
return 1;
}
2.函數(shù)形參的傳遞關(guān)系,有的可以改變值,有的不可以改變值,也是給你個(gè)例子:
void fun1(int x,int *y,int z)
{
x=1;
*y=1;
z=1;
}
如果主函數(shù)有變量int a=b=c=2;fun(a,b,c);的話,那么b和c的值會(huì)改變,而a的值不會(huì)改變,那是因?yàn)椋?/p>
a并不對(duì)變量a所占用內(nèi)存空間的內(nèi)容進(jìn)行操作。
b是把b變量的內(nèi)存空間地址傳遞進(jìn)去了,fun函數(shù)直接對(duì)b變量所在內(nèi)存空間進(jìn)行操作,所以b會(huì)改變。
至于c,你暫時(shí)不用知道,因?yàn)樾螀nt c表示的是一個(gè)引用,是c++里面會(huì)涉及的,你現(xiàn)在用c所以暫時(shí)只要知道有這么種方法就可以了。
3.就是注意函數(shù)中變量的存活期,這個(gè)說起來有點(diǎn)麻煩,你看下書上關(guān)于局部變量和全局變量那部分的內(nèi)容吧,那個(gè)說的比較詳細(xì)。
1.最初接觸C語(yǔ)言時(shí)要弄清楚各種變量的定義方法,特別是常用的類型,int、float、char等等,還要掌握各種類型的輸入、輸出格式。這一步做到后,上機(jī)就沒有多大的問題了。
2.在對(duì)函數(shù)的學(xué)習(xí)過程中,一定要弄明白函數(shù)的作用和具體格式。值得強(qiáng)調(diào)的是在寫循環(huán)程序時(shí),一定要弄清楚循環(huán)的條件。
3.對(duì)每一個(gè)知識(shí)點(diǎn),都應(yīng)該立即編出對(duì)應(yīng)的程序,有時(shí)可能還會(huì)有語(yǔ)法錯(cuò)誤,碰到更好的方法也可以試一下,很多時(shí)候你想想代碼怎么寫和你真的寫出來了是有很大的差距的。
4.學(xué)習(xí)時(shí)一定有很多疑惑的,要及時(shí)弄清楚。
5.找一本好的課本,我并不推薦譚浩強(qiáng)的《C語(yǔ)言程序設(shè)計(jì)》,因?yàn)檫@本書把知識(shí)點(diǎn)講的太細(xì)碎太理論。我推薦《c語(yǔ)言程序設(shè)計(jì):現(xiàn)代方法》這本書,書中奧妙非凡,值得深讀體驗(yàn)。
6.不要認(rèn)為上課認(rèn)真聽課有用,寫程序不可能從課堂上學(xué)會(huì)太多的,偉大的程序員或者是很多的黑客,不是老師教出來的,你的有自己的想法自己的思路自己的,學(xué)習(xí)一門語(yǔ)言才有用,也才會(huì)得到別人傳教不了的東西。
在初學(xué)C語(yǔ)言的一個(gè)學(xué)期后,我們進(jìn)行了C語(yǔ)言實(shí)訓(xùn)階段,嘗試自己編寫一個(gè)比較復(fù)雜的程序系統(tǒng)。在為期兩周的時(shí)間中,我們同組的同學(xué)共同的感受是:C語(yǔ)言實(shí)訓(xùn)和平時(shí)上課所接觸的程序是有很大不同的,所經(jīng)受的考驗(yàn)和克服的困難是平時(shí)所無法比擬的。好在同組的搭檔們精誠(chéng)合作,分工明確,有問題共同解決,攻克了C語(yǔ)言實(shí)訓(xùn)的復(fù)雜程序。在這里,我作為其中的參與者,自然感觸良多。
剛開始接觸到C的時(shí)候,我已經(jīng)學(xué)過一些有關(guān)VB的內(nèi)容,這個(gè)在算法和思維上稍微有點(diǎn)幫助?;叵氡緦W(xué)期的學(xué)習(xí),首先,最基本的,是C的數(shù)據(jù)格式,讓我們知道整數(shù),浮點(diǎn)數(shù)以及字符常量在C中的運(yùn)用。然后,在學(xué)會(huì)了數(shù)據(jù)轉(zhuǎn)化,以及熟練的可以對(duì)各種數(shù)據(jù)處理之后,我開始進(jìn)行有關(guān)數(shù)據(jù)結(jié)構(gòu),像數(shù)組,結(jié)構(gòu)體等的學(xué)習(xí),因?yàn)橛械臇|西從現(xiàn)有的知識(shí)來看都是非常簡(jiǎn)單的,還沒有聯(lián)系到指針等等一些復(fù)雜的概念??墒?,僅僅學(xué)會(huì)這些是遠(yuǎn)遠(yuǎn)不夠的,C語(yǔ)言中,還有很多更加經(jīng)典、重要、實(shí)用的知識(shí)。
說說函數(shù)。雖說很多程序語(yǔ)言都有函數(shù)這一內(nèi)容,但我覺得C語(yǔ)言的函數(shù)是最有魅力的了。學(xué)習(xí)函數(shù)的方法是比較簡(jiǎn)單的,只有兩個(gè)字“牢記”,即:牢記函數(shù)的功能,牢記函數(shù)的用途以及如何輸入輸出。函數(shù)從本質(zhì)上講是一段通用程序,用它可以幫助我們節(jié)約很多編程的時(shí)間,學(xué)習(xí)C語(yǔ)言的“高人”都說,一個(gè)聰明的編程者在編寫程序前往往總是先找自己所編寫的程序中有多少是可以用函數(shù)來代替的。比如,大家可以作一個(gè)比較字符串的實(shí)驗(yàn),用C語(yǔ)言中的strcmp()函數(shù)只要一句話,而自己編寫的話,30句都很難實(shí)現(xiàn),可想而知函數(shù)的實(shí)用和快捷。在我們C語(yǔ)言實(shí)訓(xùn)的代碼中,函數(shù)更是得到了充分的應(yīng)用,可以說,實(shí)訓(xùn)題目的復(fù)雜代碼,就是用無數(shù)個(gè)函數(shù)的調(diào)用和嵌套積累出來的。
要注意的是,有的同學(xué)剛剛開始的時(shí)候,都是被一些大的程序激勵(lì)的,所以當(dāng)開始的時(shí)候看到繁瑣的數(shù)據(jù)轉(zhuǎn)化和簡(jiǎn)單的算法,都覺得很無聊,都想自己做幾個(gè)自己滿意的程序來看看,雖然這種想法很好,但是,我們說,沒有基礎(chǔ),純粹是搬照一些現(xiàn)成設(shè)計(jì)方法,是不足取的。要知道,程序設(shè)計(jì)講究的是個(gè)人的思維的,假如剛開始就被一些現(xiàn)成的思想束縛住,以后就會(huì)覺得很無趣。
我們知道,指針其實(shí)是C語(yǔ)言的靈魂,許多的數(shù)據(jù)結(jié)構(gòu)在我們學(xué)到這里之前都可以說是精通了。所以我們的任務(wù)就是,讓數(shù)據(jù)結(jié)構(gòu)在指針中運(yùn)行。當(dāng)然,剛剛開始接觸到這些新的東西,是一件非常痛苦的事情,所以我們一定要用非常形象的思維去看待指針,不能太固化。所以,新的東西,比如結(jié)構(gòu)體在指針中的表現(xiàn)方法,數(shù)組及多維數(shù)組在結(jié)構(gòu)體中的運(yùn)用,都一點(diǎn)一點(diǎn)的加了進(jìn)來,同時(shí)豐滿了我們對(duì)原來C的數(shù)據(jù)機(jī)構(gòu),數(shù)據(jù)表示的理解。當(dāng)我們完成了這三步的學(xué)習(xí),我們已經(jīng)可以自豪的說,我們的基礎(chǔ)都扎實(shí)了,可以進(jìn)一步的學(xué)習(xí)有關(guān)算法,設(shè)計(jì)概念等等深層次的東西了。
但是,指針,結(jié)構(gòu)體,這些太抽象的東西,在學(xué)習(xí)C語(yǔ)言的時(shí)候我們就有點(diǎn)“似懂非懂”,可是在眼下的C語(yǔ)言實(shí)訓(xùn)中,像這么重要的C語(yǔ)言知識(shí),一定要達(dá)到能熟練掌握,實(shí)際運(yùn)用的程度。在實(shí)訓(xùn)的大程序中,結(jié)構(gòu)體在指針中的表現(xiàn)方法,數(shù)組及在結(jié)構(gòu)體中的運(yùn)用等具體的技術(shù)環(huán)節(jié),都得到了體現(xiàn),不會(huì)指針,我們的工作是沒法展開的。所以,在實(shí)訓(xùn)期間,大家在鞏固基本知識(shí)的基礎(chǔ)上,逐塊攻克實(shí)訓(xùn)課題,克服了困難,自信心得到了提高。
最后,談?wù)勎覀兘M的程序軟件。商店商品管理系統(tǒng),是一個(gè)比較利于應(yīng)用,解決實(shí)際問題,方便實(shí)際管理的程序。設(shè)計(jì)代碼比較復(fù)雜,結(jié)構(gòu)比較嚴(yán)謹(jǐn)。在程序編寫的1周左右的時(shí)間里,組員們遇到了上述的困難,包括程序設(shè)計(jì)構(gòu)思,甚至是指針等某些知識(shí)點(diǎn)的欠缺,導(dǎo)致的工作中出現(xiàn)的困難。但是,當(dāng)大家一起團(tuán)結(jié)協(xié)作,解決了這些困難之后,發(fā)現(xiàn)自己也可以編寫復(fù)雜的、應(yīng)用性的程序了,更發(fā)現(xiàn)自己對(duì)C語(yǔ)言這門學(xué)科的興趣也提高了。
當(dāng)然,我們編寫的商店商品管理系統(tǒng),還存在很多疏漏和不合理之處。比如,程序復(fù)雜冗長(zhǎng),如果時(shí)間充裕,我們將在不改變程序運(yùn)行結(jié)果的基礎(chǔ)上,簡(jiǎn)化程序,使每一句更加精辟,總體上更加簡(jiǎn)化。另外,在程序的外觀上,我們由于時(shí)間問題,沒有做更多的修飾,運(yùn)行起來顯得比較死板、枯燥乏味。如果增添一些色彩和其他效果,我們的程序也許會(huì)更加完美。
以上就是我的C語(yǔ)言實(shí)訓(xùn)個(gè)人總結(jié)