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

下載本文檔

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

文檔簡介

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

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

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

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

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

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

[功能]:添加新元素elem到集合pset。若元素elem不在集合pset中,elem加到pset尾部,集合的元素個數(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è)計的原理和方法1)模塊化模塊是數(shù)據(jù)說明、可執(zhí)行的語句等程序元素的集合,它是單獨命名的而且可以通過名字來訪問。所謂模塊化,就是把一個程序劃分成若干個模塊,每個模塊完成一個子功能,把這些模塊組裝成一個整體,可以完成指定的功能。如:函數(shù)。

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

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

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

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

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

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

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

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

structSet{ intdata[MAXLENGTH]; unsignedcount; };

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

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

//集合初始化

voidInitialize(Set*pSet);

//向集合中添加元素elem

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

voidIsin(intelem,Set*pSet);

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

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

structNode{ intelement; Node*pNodeNext; };

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

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

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

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

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

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

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

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

雛形階段

完善階段

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

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

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

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

雛形階段

完善階段

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

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

雛形階段

完善階段

繁榮階段

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

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

溫馨提示

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

評論

0/150

提交評論