第四講:面向?qū)ο蟪绦蛟O(shè)計(jì)方法及類、對(duì)象的概念
本文關(guān)鍵詞:面向?qū)ο蟪绦蛟O(shè)計(jì)
更多相關(guān)文章: 第四 面向 對(duì)象 程序設(shè)計(jì) 方法 概念
本講基本要求
對(duì)于規(guī)模比較小的程序,編程者可以直接編寫出一個(gè)面向過程的程序,詳細(xì)地描述每一瞬時(shí)的數(shù)據(jù)結(jié)構(gòu)及對(duì)其的操作過程。但是當(dāng)程序規(guī)模較大時(shí),就顯得力不從心了。C++就是為了解決編寫大程序過程中的困難而產(chǎn)生的。
面向?qū)ο蟮某绦蛟O(shè)計(jì)的思路和人們?nèi)粘I钪刑幚韱栴}的思路是相似的。在自然世界和社會(huì)生活中,—個(gè)復(fù)雜的事物總是由許多部分組成的。
當(dāng)人們生產(chǎn)汽車時(shí),并不是先設(shè)計(jì)和制造發(fā)動(dòng)機(jī),再設(shè)計(jì)和制造底盤,然后設(shè)計(jì)和制造車身和輪子,而是分別設(shè)計(jì)和制造發(fā)動(dòng)機(jī)、底盤、車身和輪子,最后把它們組裝在一起。在組裝時(shí),各部分之間有—定的聯(lián)系,以便協(xié)調(diào)工作。例如駕駛員踩油門,就能調(diào)節(jié)油路,控制發(fā)動(dòng)機(jī)的轉(zhuǎn)速,驅(qū)動(dòng)車輪轉(zhuǎn)動(dòng)。這就是面向?qū)ο蟮某绦蛟O(shè)計(jì)的基本思路。
下面先討論幾個(gè)有關(guān)的概念。
客觀世界中任何一個(gè)事物都可以抽象的看成一個(gè)對(duì)象(object);蛘哒f,客觀世界是由千千萬萬個(gè)對(duì)象組成的。對(duì)象可以是自然物體(如汽車、房屋、狗熊),也可以是社會(huì)生活中的一種邏輯結(jié)構(gòu)(如班級(jí)、支部、連隊(duì)),甚至一篇文章、一個(gè)圖形、一項(xiàng)計(jì)劃等都可視作對(duì)象。
2、對(duì)象可以是自然體也可以是邏輯體。
4、對(duì)象有兩個(gè)要素:靜態(tài)特征稱為屬性(attribute),動(dòng)態(tài)特征稱為行為(behavior)。
5、控制行為改變的因素稱之為消息。要使某一個(gè)對(duì)象實(shí)現(xiàn)某一種行為(即操作),應(yīng)當(dāng)向它傳送相應(yīng)的消息。
圖2.2
面向?qū)ο蟮某绦蛟O(shè)計(jì)采用了以上人們所熟悉的這種思路。使用面向?qū)ο蟮某绦蛟O(shè)計(jì)方法設(shè)計(jì)一個(gè)復(fù)雜的軟件系統(tǒng)時(shí),首要的問題是確定該系統(tǒng)是由哪些對(duì)象組成的,并且設(shè)計(jì)這些對(duì)象。在C++中,每個(gè)對(duì)象都是由數(shù)據(jù)和函數(shù)(即操作代碼)這兩部分組成的,見圖2。
⑵封裝與信息隱蔽
“封裝”---指兩方面的含義:一是將有關(guān)的數(shù)據(jù)和操作代碼封裝在一個(gè)對(duì)象中,形成一個(gè)基本單位,各個(gè)對(duì)象之間相對(duì)獨(dú)立,互不于擾。二是將對(duì)象中某些部分對(duì)外隱蔽,即隱蔽其內(nèi)部細(xì)節(jié),,只留下少量接口,以便與外界聯(lián)系,接收外界的消息。這種對(duì)外界隱蔽的做法稱為信息隱蔽(information hiding)。信息隱蔽還有利于數(shù)據(jù)安全,防止無關(guān)的人了解和修改數(shù)據(jù)。
⑶抽象
抽象的過程是將有關(guān)事物的共性歸納、集中的過程。
說明:
2、對(duì)象是具體存在的,在C++中,可以將對(duì)象抽象類型定義為“類(class)”。類是對(duì)象的抽象,而對(duì)象則是類的特例,或者說是類的具體表現(xiàn)形式。
⑷繼承與重用
C++提供了繼承機(jī)制,采用繼承的方法可以很方便地利用一個(gè)已確的類建立一個(gè)新的類,這就可以重用已有軟件中的一部分甚至大部分,大大節(jié)省了編程工作量。這就是常說的“軟件重用(software reusability)的思想,不僅可以利用自己過去所建立的類、而且可以利用別人使用的類或存放在類庫中的類,對(duì)這些類作適當(dāng)加工即可使用,大大縮短了軟件開發(fā)周期,對(duì)于大型軟件的開發(fā)具有重要意義。
⑸多態(tài)性
多態(tài)性(polymorphism)是指由繼承而產(chǎn)生的相關(guān)的不同的類,其對(duì)象對(duì)同一消息會(huì)作出不同的響應(yīng)。
說明:
多態(tài)性是面向?qū)ο蟪绦蛟O(shè)計(jì)的—個(gè)重要特征,能增加程序的靈活性。
2、面向?qū)ο蟪绦蛟O(shè)計(jì)的特點(diǎn)
圖3
面向?qū)ο蟪绦蛟O(shè)計(jì)采取的是另外一種思路。它面對(duì)的是一個(gè)個(gè)對(duì)象。實(shí)際上,每一組數(shù)據(jù)都是有特定的用途的,是某種操作的對(duì)象。也就是說,一組操作調(diào)用一組數(shù)據(jù)。例如a,b,c是三角形的三邊,只與計(jì)算三角形面積和輸出三角形的操作有關(guān),與其他操作無關(guān)。我們就把這3個(gè)數(shù)據(jù)和對(duì)三角形的操作代碼放在一起,封裝成一個(gè)對(duì)象,與外界相對(duì)分隔,正如一個(gè)家庭的人生活在一起,與外界相對(duì)獨(dú)立一樣。這是符合客觀世界本來面目的。
程序設(shè)計(jì)者的任務(wù)包括兩個(gè)方面:
1、設(shè)計(jì)所需的各種類和對(duì)象,即決定把哪些數(shù)據(jù)和操作封裝在一起。
2、考慮怎樣向有關(guān)對(duì)象發(fā)送消息,以完成所需的任務(wù)。
1、C++對(duì)C的改進(jìn),最重要的就是增加了“類”這樣一種類型。所以C++開始時(shí)被稱為“帶類的c”。
2、C++支持面向過程的程序設(shè)計(jì),也支持基于對(duì)象和面向?qū)ο蟮某绦蛟O(shè)計(jì)。
3、基于對(duì)象就是基于類。與面向過程的程序不同,基于對(duì)象的程序是以類和對(duì)象為基礎(chǔ)的,程序的操作是圍繞對(duì)象進(jìn)行的。在此基礎(chǔ)上利用了繼承機(jī)制和多態(tài)性,就成為面向?qū)ο蟮某绦蛟O(shè)計(jì)。
4、基于對(duì)象程序設(shè)計(jì)所面對(duì)的是一個(gè)個(gè)對(duì)象。所有的數(shù)據(jù)分別屬于不同的對(duì)象。人們?cè)O(shè)想把相關(guān)的數(shù)據(jù)和操作放在一起,形成—個(gè)整體,與外界相對(duì)分隔。這就是面向?qū)ο蟮某绦蛟O(shè)計(jì)中的對(duì)象。
面向過程的結(jié)構(gòu)化程序設(shè)計(jì)中: 程序=算法+數(shù)據(jù)結(jié)構(gòu)
說明:
算法和數(shù)據(jù)結(jié)構(gòu)兩者是互相獨(dú)立、分開設(shè)計(jì)的,面向過程的程序設(shè)計(jì)是以算法為主體的。
基于對(duì)象和面向?qū)ο蟪绦蛟O(shè)計(jì)中:
“對(duì)象s”表示多個(gè)對(duì)象。消息的作用就是對(duì)對(duì)象的控制。程序設(shè)計(jì)的關(guān)鍵是設(shè)計(jì)好每一個(gè)對(duì)象,以及確定向這些對(duì)象發(fā)出的命令,使各對(duì)象完成相應(yīng)的操作。
4、面向?qū)ο蟮能浖_發(fā)
在以前軟件開發(fā)所面臨的問題比較簡(jiǎn)單,從任務(wù)分析到編寫程序,再到程序的調(diào)試,難度都不太大,可以由一個(gè)人或一個(gè)小組來完成。隨著軟件規(guī)模的迅速增大,軟件人員面臨的問題十分復(fù)雜,需要考慮的因素很多,在—個(gè)軟件中所產(chǎn)生的錯(cuò)誤和隱藏的錯(cuò)誤可能達(dá)到驚人的程度,這不是程序沒計(jì)階段所能解決的。需要規(guī)范整個(gè)軟件開發(fā)過程,明確軟件開發(fā)過程中每個(gè)階段的任務(wù),在保證前一個(gè)階段工作的正確性的情況下,再進(jìn)行下一階段的工作。這就是軟件工程學(xué)需要研究和解決的問題。 面向?qū)ο蟮能浖こ贪ㄒ韵聨讉(gè)部分:
⒈面向?qū)ο蠓治?object oriented analysis,OOA)
⒉面向?qū)ο笤O(shè)計(jì)(Object oriented design,OOD)
⒊面向?qū)ο缶幊?object oriented programming,OOP)
⒋面向?qū)ο鬁y(cè)試(object oriented test,OOT)
⒌面向?qū)ο缶S護(hù)(Object oriented soft maintenance,OOSM)
二、類的聲明和對(duì)象的定義
1、類的對(duì)象的關(guān)系(事物的抽象與抽象事物的實(shí)例)
對(duì)象(object)---每一個(gè)實(shí)體都可以作為對(duì)象。
類(class)---類代表了某一批對(duì)象的共性和特征。
1、類是對(duì)象的類型。
2、類是一批有共性和特征的對(duì)象
3、類是對(duì)象的抽象,而對(duì)象是類的實(shí)例。
4、類是對(duì)象的模板。
5、對(duì)象是類的一個(gè)變量。
2、聲明類類型
類是用戶自己指定的類型。如果程序中要用到類類型,必須自己根據(jù)需要進(jìn)行聲明,或者使用別人已設(shè)計(jì)好的類。C++標(biāo)準(zhǔn)本身并不提供現(xiàn)成的類的名稱、結(jié)構(gòu)和內(nèi)容。
在C++中怎樣聲明一個(gè)類類型呢?其方法和聲明一個(gè)結(jié)構(gòu)體類型是相似的。
聲明一個(gè)結(jié)構(gòu)體類型的方法:
struct Student {char sex
};
Studentstudl,stud2; //定義了兩個(gè)結(jié)構(gòu)體變量studl和stud2
聲明一個(gè)類類型的方法:
class Student char name[20];
void display() {cout <<"sex:" <
本文編號(hào):1295690
本文鏈接:http://www.sikaile.net/wenshubaike/dxkc/1295690.html