第 1 章 計(jì)算機(jī)與程序設(shè)計(jì)new_第1頁
第 1 章 計(jì)算機(jī)與程序設(shè)計(jì)new_第2頁
第 1 章 計(jì)算機(jī)與程序設(shè)計(jì)new_第3頁
第 1 章 計(jì)算機(jī)與程序設(shè)計(jì)new_第4頁
第 1 章 計(jì)算機(jī)與程序設(shè)計(jì)new_第5頁
已閱讀5頁,還剩34頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

面向?qū)ο蟪绦蛟O(shè)計(jì)武漢理工大學(xué)——計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院耿楓課程概述從過程抽象到數(shù)據(jù)抽象面向?qū)ο蠓椒▽W(xué)初步面向?qū)ο蠓治龊驮O(shè)計(jì)初步類和對(duì)象繼承與派生多態(tài)性模板標(biāo)準(zhǔn)模板庫(kù)(STL)C++的I/O實(shí)現(xiàn)第一章從過程抽象到數(shù)據(jù)抽象主要內(nèi)容面向過程程序設(shè)計(jì)從過程抽象到數(shù)據(jù)抽象面向?qū)ο蟪绦蛟O(shè)計(jì)程序設(shè)計(jì)方法的發(fā)展

隨著計(jì)算機(jī)軟、硬件技術(shù)的不斷發(fā)展,出現(xiàn)了許許多多的程序設(shè)計(jì)語言,程序設(shè)計(jì)方法也得到不斷發(fā)展,經(jīng)歷一個(gè)由低級(jí)到高級(jí),由復(fù)雜到簡(jiǎn)單的過程。主要有兩種:面向過程程序設(shè)計(jì)面向?qū)ο蟪绦蛟O(shè)計(jì)

使用傳統(tǒng)程序設(shè)計(jì)語言進(jìn)行程序設(shè)計(jì)時(shí),必須詳細(xì)準(zhǔn)確地描述解題過程。因?yàn)槌绦蛟O(shè)計(jì)工作主要圍繞設(shè)計(jì)解題過程來進(jìn)行,所以傳統(tǒng)的程序設(shè)計(jì)方法稱為面向過程的程序設(shè)計(jì)。1.1面向過程程序設(shè)計(jì)[示例]:

設(shè)有如下要求:向整數(shù)集合的某個(gè)子集添加若干元素。

在程序中用整數(shù)數(shù)組表示整數(shù)集合:集合(數(shù)組)最多含MAXLENGTH個(gè)元素,集合當(dāng)前有count個(gè)元素。數(shù)據(jù)定義如下:

intset[MAXLENGTH]; unsignedcount;[分析與實(shí)現(xiàn)]:Add(intelem,int*pset,unsigned&rcount)函數(shù)

[功能]:添加新元素elem到集合pset。若元素elem不在集合pset中,elem加到pset尾部,集合的元素個(gè)數(shù)rcount加1;否則,若元素elem已在pset中,則結(jié)束添加操作。函數(shù)定義如下:

voidAdd(intelem,int*pset,unsigned&rcount){ if(rcount<MAXLENGTH) if(!Isin(elem,pset,rcount)) *(pset+(rcount)++)=elem; }Isin(intelem,int*pset,unsignedcount)函數(shù)

[功能]:判斷元素elem是否在集合pset中。從頭至尾檢查集合pset中的元素,若有元素elem,返回1;否則,返回0。函數(shù)定義如下:

intIsin(intelem,int*pset,unsignedcount){ for(unsignedi=0;i<count&&*(pset+i)!=elem;i++); return(i<count);}源程序面向過程程序設(shè)計(jì)的原理和方法1)模塊化模塊是數(shù)據(jù)說明、可執(zhí)行的語句等程序元素的集合,它是單獨(dú)命名的而且可以通過名字來訪問。所謂模塊化,就是把一個(gè)程序劃分成若干個(gè)模塊,每個(gè)模塊完成一個(gè)子功能,把這些模塊組裝成一個(gè)整體,可以完成指定的功能。如:函數(shù)。

[注意]:在把程序劃分成模塊的時(shí)候,模塊規(guī)模應(yīng)該適當(dāng)。2)抽象人類在認(rèn)識(shí)復(fù)雜現(xiàn)象的過程中使用的最強(qiáng)有力的思維工具是抽象。人們?cè)趯?shí)踐中認(rèn)識(shí)到,在現(xiàn)實(shí)世界中一定事物、狀態(tài)或過程之間總存在著某些相似的方面(共性)。把這些相似的方面集中和概括起來,暫時(shí)忽略它們之間的差異,這就是抽象。抽象的過程是將有關(guān)事物的共性歸納、集中的過程。 抽象的作用是表示同一類事物的本質(zhì)。

[例如]:各式各樣的人——>人類3)信息隱藏和局部化信息隱藏原理指出,在設(shè)計(jì)和確定模塊時(shí),應(yīng)該使得一個(gè)模塊內(nèi)包含的信息(數(shù)據(jù)和過程)對(duì)于不需要這些信息的模塊來說,是不可訪問的(又稱不可見的)。局部化是指把一些關(guān)系密切的程序元素物理地放得彼此靠近,處于同一局部區(qū)域內(nèi)。4)模塊獨(dú)立模塊獨(dú)立要求在設(shè)計(jì)程序結(jié)構(gòu)時(shí),應(yīng)該使得每個(gè)模塊完成一個(gè)相對(duì)獨(dú)立的特定子功能,并且和其他模塊之間的關(guān)系盡可能簡(jiǎn)單。

衡量模塊獨(dú)立程度的兩個(gè)定性標(biāo)準(zhǔn):內(nèi)聚和耦合。內(nèi)聚衡量一個(gè)模塊內(nèi)部各個(gè)元素彼此結(jié)合的緊密程度。理想內(nèi)聚的模塊只做一件事情。耦合衡量不同模塊彼此間相互依賴(連接)的緊密程度。

高內(nèi)聚和松耦合是進(jìn)行模塊化設(shè)計(jì)的重要標(biāo)準(zhǔn),實(shí)踐表明內(nèi)聚更重要。5)結(jié)構(gòu)程序設(shè)計(jì)技術(shù)把一個(gè)程序劃分成若干個(gè)模塊之后,進(jìn)一步的工作就是設(shè)計(jì)完成每個(gè)模塊功能的處理過程。

結(jié)構(gòu)程序設(shè)計(jì)是一種設(shè)計(jì)程序的技術(shù),它采用自頂向下、逐步求精的設(shè)計(jì)方法和單入口、單出口的控制結(jié)構(gòu)。結(jié)構(gòu)化程序設(shè)計(jì)包括三種結(jié)構(gòu):順序結(jié)構(gòu)、分支結(jié)構(gòu)和循環(huán)結(jié)構(gòu)。AB順序結(jié)構(gòu)A循環(huán)結(jié)構(gòu)expFTAB選擇結(jié)構(gòu)expFT結(jié)構(gòu)化程序設(shè)計(jì)的特點(diǎn):自頂向下,逐步求精。(示例圖1)模塊化。根據(jù)完成的功能,將程序劃分為相對(duì)獨(dú)立的若干模塊。模塊之間關(guān)系簡(jiǎn)單、獨(dú)立。每一模塊均是由三種結(jié)構(gòu)組成的,模塊化的實(shí)現(xiàn)的具體方法是子程序。使用結(jié)構(gòu)程序設(shè)計(jì)技術(shù)設(shè)計(jì)程序的主要好處:自頂向下逐步求精的方法符合人類解決復(fù)雜問題的普遍規(guī)律,因此可以顯著提高開發(fā)效率。用先全局后局部、先整體后細(xì)節(jié)、先抽象后具體的逐步求精過程開發(fā)出的程序有清晰的層次結(jié)構(gòu),因此容易閱讀和理解。僅使用單入口單出口的控制結(jié)構(gòu),使得程序的靜態(tài)結(jié)構(gòu)和它的動(dòng)態(tài)執(zhí)行情況比較一致??刂平Y(jié)構(gòu)有確定的邏輯模式,源程序清晰流暢,易讀易懂而且容易測(cè)試。1.1從過程抽象到數(shù)據(jù)抽象【討論區(qū)】: 針對(duì)示例,我們來討論如下兩個(gè)問題。需求變化,程序改動(dòng)是否容易?

例如,將集合的數(shù)據(jù)表示改為用鏈表存儲(chǔ),不再需要變量count,集合的兩個(gè)函數(shù)的實(shí)現(xiàn)及它們的使用都得改動(dòng)。即:整個(gè)程序都得改動(dòng),修改不是局部化的。能否重用?

函數(shù)級(jí)重用,其他難以重用。

產(chǎn)生這些問題的原因是,示例中的程序?qū)崿F(xiàn)了整數(shù)集合這樣一種數(shù)據(jù)結(jié)構(gòu),并使用這種數(shù)據(jù)結(jié)構(gòu),把兩者混在一起,過分針對(duì)具體問題。實(shí)際上,通常需要被重用的是集合,故應(yīng)該把整數(shù)集合實(shí)現(xiàn)與應(yīng)用分開,只有這樣才能做到修改局部化,提高可重用性。[分析]:[解決方案]:將集合的實(shí)現(xiàn)與使用分開方案一:使用結(jié)構(gòu)體類型,將整數(shù)集合做成以下數(shù)據(jù)類型:

structSet{ intdata[MAXLENGTH]; unsignedcount; };

這樣,每個(gè)整數(shù)集合是一個(gè)結(jié)構(gòu)體變量,需要將成員變量初始化。

程序中需要提供如下3個(gè)函數(shù):

//集合初始化

voidInitialize(Set*pSet);

//向集合中添加元素elem

voidAdd(intelem,Set*pSet); //判斷元素elem是否在集合中

voidIsin(intelem,Set*pSet);

為將集合的實(shí)現(xiàn)和使用分開,程序需按如下結(jié)構(gòu)組織:將整數(shù)集合的定義放在一個(gè)頭文件中;文件名為Set.h將整數(shù)集合的實(shí)現(xiàn)放在一個(gè)文件中;文件名為Set.cpp將集合的應(yīng)用放在另外的文件中。文件名為AppSet.cpp源程序方案二:

使用單鏈表來存儲(chǔ)集合元素,鏈表結(jié)點(diǎn)定義為:

structNode{ intelement; Node*pNodeNext; };

集合類型只含鏈表頭,無須結(jié)點(diǎn)個(gè)數(shù)變量count,但需要增加求元素個(gè)數(shù)的函數(shù)Card。源程序面向過程程序設(shè)計(jì)的缺陷:把數(shù)據(jù)和過程分開。程序員在編程時(shí)必須考慮所要處理數(shù)據(jù)的格式,對(duì)于不同的數(shù)據(jù)格式做相同的處理或是對(duì)相同的數(shù)據(jù)格式做不同的處理都需要編寫不同的程序,因此面向過程程序設(shè)計(jì)的可復(fù)用性不好。以功能分解的設(shè)計(jì)方法很難保證系統(tǒng)的演變像需求的變化那樣平滑,有時(shí)需求的很少一點(diǎn)變化可能會(huì)導(dǎo)致系統(tǒng)的重新設(shè)計(jì)。面向過程程序設(shè)計(jì)認(rèn)為每個(gè)系統(tǒng)的主功能都可以在最高層次上抽象出來進(jìn)行恰當(dāng)描述,而實(shí)際上大多數(shù)系統(tǒng)都無法簡(jiǎn)單地用一個(gè)頂層功能來描述,也沒法簡(jiǎn)單地用一個(gè)主程序來描述系統(tǒng)的操作流程。如,操作系統(tǒng)。自頂向下的程序設(shè)計(jì)方法與復(fù)用思想本質(zhì)上時(shí)背道而馳的?;趶?fù)用的軟件構(gòu)造方式應(yīng)該是自底向上的,是用最大可能地利用現(xiàn)有部件的組合來實(shí)現(xiàn)新系統(tǒng)。軟件危機(jī)

“軟件危機(jī)”是指在開發(fā)和維護(hù)計(jì)算機(jī)軟件的過程中所遇到的一系列嚴(yán)重的問題。

1.主要表現(xiàn):對(duì)軟件開發(fā)成本和進(jìn)度的估計(jì)常常很不準(zhǔn)確。用戶對(duì)“已完成的”軟件系統(tǒng)不滿意的現(xiàn)象經(jīng)常發(fā)生。軟件產(chǎn)品的質(zhì)量常??坎蛔?。軟件常常是不可維護(hù)的。軟件通常沒有適當(dāng)?shù)奈臋n資料。軟件成本在計(jì)算機(jī)系統(tǒng)總成本中所占比例逐年上升。

2.產(chǎn)生原因:一方面是由軟件生產(chǎn)本身存在著復(fù)雜性;另一方面卻是與軟件開發(fā)所使用的方法和技術(shù)有關(guān)。3.解決途徑:一方面需要對(duì)程序設(shè)計(jì)方法、程序的正確性和軟件的可靠性等問題進(jìn)行系列的研究;另一方面,需要對(duì)軟件的編制、測(cè)試、維護(hù)和管理的方法進(jìn)行研究。1.4面向?qū)ο蟪绦蛟O(shè)計(jì)

面向?qū)ο蟪绦蛟O(shè)計(jì)是一種圍繞現(xiàn)實(shí)世界的概念來組織模型的程序設(shè)計(jì)方法,它采用對(duì)象來描述問題空間的實(shí)體。 用對(duì)象分解取代功能分解,也就是把程序分解成許多對(duì)象,不同的對(duì)象之間通過發(fā)消息向?qū)Ψ教岢龇?wù)要求,接收消息的對(duì)象主動(dòng)完成指定功能,程序中的所有對(duì)象分工協(xié)作,共同完成整個(gè)程序的功能。1.面向?qū)ο蠓椒ǜ攀?)基本思想

面向?qū)ο蠓椒▽W(xué)的出發(fā)點(diǎn)和基本原則,是盡可能模擬人類習(xí)慣的思維方式,使開發(fā)軟件的方法與過程盡可能接近人類認(rèn)識(shí)世界解決問題的方法與過程,也就是使描述問題的問題空間(也稱為問題域)與實(shí)現(xiàn)解法的解空間(也稱為求解域)在結(jié)構(gòu)上盡可能一致。認(rèn)為客觀世界是由各種對(duì)象組成的,任何事物都是對(duì)象,復(fù)雜的對(duì)象可以由比較簡(jiǎn)單的對(duì)象以某種方式組合而成。把所有對(duì)象都劃分成各種對(duì)象類(簡(jiǎn)稱為類,class),每個(gè)對(duì)象類都定義了一組數(shù)據(jù)和一組方法。按照子類(或稱為派生類)與父類(或稱為基類)的關(guān)系,把若干個(gè)對(duì)象類組成一個(gè)層次結(jié)構(gòu)的系統(tǒng)(也稱為類等級(jí))。對(duì)象彼此之間僅能通過傳遞消息互相聯(lián)系。[分析]:2)Coad&Yourdon給OO的定義面向?qū)ο蟮姆椒▽W(xué)可以用下列方程來概括:

OO=Objects+Classes+Inheritance+CommunicationWithmessages[分析]:基于對(duì)象:僅使用對(duì)象和消息基于類:僅使用對(duì)象、類和消息面向?qū)ο螅?/p>

只有同時(shí)使用對(duì)象、類、繼承和消息的方法,才是真正面向?qū)ο蟮姆椒?。所開發(fā)的程序才是面向?qū)ο蟮某绦颉?)發(fā)展歷史與現(xiàn)狀

雛形階段

完善階段

繁榮階段60年代挪威計(jì)算中心開發(fā)的Simula67——面向?qū)ο笳Z言的先驅(qū)和第一個(gè)里程碑(首先引入了類的概念和繼承機(jī)制)。

70年代CLU、并發(fā)Pascal、Ada和Modula-2等語言對(duì)抽象數(shù)據(jù)類型理論的發(fā)展起到重要作用(支持?jǐn)?shù)據(jù)與操作的封裝)。猶他大學(xué)的博士生AlanKay設(shè)計(jì)了一個(gè)實(shí)驗(yàn)性的語言Flex。從Simula67中借鑒了許多概念,如類、對(duì)象、繼承等。

1972年P(guān)aloAlno研究中心(PARC)發(fā)布了Smalltalk-72,其中正式使用了“面向?qū)ο蟆边@個(gè)術(shù)語。

Smalltalk的問世標(biāo)志著面向?qū)ο蟪绦蛟O(shè)計(jì)方法的正式形成。但是這個(gè)時(shí)期的Smalltalk語言還不夠完善。3)發(fā)展歷史與現(xiàn)狀

雛形階段

完善階段

繁榮階段PARC先后發(fā)布了Smalltalk-72,76,78等版本,直至1981年推出該語言最完善的版本Smalltalk-80。

Smalltalk-80的問世被今認(rèn)為是面向?qū)ο笳Z言發(fā)展史上最重要的里程碑。迄今絕大部分面向?qū)ο蟮幕靖拍罴捌渲С謾C(jī)制在Smalltalk-80中都已具備。它是第一個(gè)完善的、能夠?qū)嶋H應(yīng)用的面向?qū)ο笳Z言。3)發(fā)展歷史與現(xiàn)狀

雛形階段

完善階段

繁榮階段

自80年代中期到90年代,是面向?qū)ο笳Z言走向繁榮的階段。其主要表現(xiàn)是大批比較實(shí)用的OOPL的涌現(xiàn)。

OO編程語言分為純OO語言和混合型OO語言混合型語言是在傳統(tǒng)的過程式語言基礎(chǔ)上增加OO語言成分,在實(shí)用性方面具有更大的優(yōu)勢(shì)。2.面向?qū)ο蠓椒ǖ闹饕獌?yōu)點(diǎn)與人類習(xí)慣的思維方法比較一致;穩(wěn)定性好;可重用性好;可維護(hù)性好。

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論