面向?qū)ο蠹夹g(shù)概述.doc_第1頁(yè)
面向?qū)ο蠹夹g(shù)概述.doc_第2頁(yè)
面向?qū)ο蠹夹g(shù)概述.doc_第3頁(yè)
面向?qū)ο蠹夹g(shù)概述.doc_第4頁(yè)
面向?qū)ο蠹夹g(shù)概述.doc_第5頁(yè)
已閱讀5頁(yè),還剩5頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第1章面向?qū)ο蠹夹g(shù)概述面向?qū)ο蠹夹g(shù)是一種全新設(shè)計(jì)和構(gòu)造軟件的技術(shù),它使計(jì)算機(jī)解決問(wèn)題的方式更符合人類(lèi)的思維方式,更能直接地描述客觀(guān)世界,通過(guò)增加代碼的可重用性、可擴(kuò)充性和程序自動(dòng)生成功能來(lái)提高編程效率,并且大大減少軟件維護(hù)的開(kāi)銷(xiāo),已經(jīng)被越來(lái)越多的軟件設(shè)計(jì)人員所接受。希望通過(guò)本章的介紹,能從宏觀(guān)上了解面向?qū)ο蠹夹g(shù),有助于對(duì)具體實(shí)現(xiàn)的掌握。本章首先介紹面向?qū)ο蠹夹g(shù)的基本概念、基本特征,介紹了面向?qū)ο笈c面向過(guò)程程序設(shè)計(jì)的區(qū)別,然后介紹目前流行的幾種面向?qū)ο蟪绦蛟O(shè)計(jì)語(yǔ)言,特別強(qiáng)調(diào)C+對(duì)面向?qū)ο蠹夹g(shù)的支持及其發(fā)展現(xiàn)狀,其中還涉及到.NET技術(shù)。1.1 面向?qū)ο蠹夹g(shù)的基本概念面向?qū)ο蠹夹g(shù)是一種新的軟件技術(shù),其概念來(lái)源于程序設(shè)計(jì),從20世紀(jì)60年代提出面向?qū)ο蟮母拍?,到現(xiàn)在已發(fā)展成為一種比較成熟的編程思想,并且逐步成為目前軟件開(kāi)發(fā)領(lǐng)域的主流技術(shù)。同時(shí),它不僅局限于程序設(shè)計(jì)方面,已經(jīng)成為軟件開(kāi)發(fā)領(lǐng)域的一種方法論。它對(duì)信息科學(xué)、軟件工程、人工智能和認(rèn)知科學(xué)等都產(chǎn)生了重大影響,尤其在計(jì)算機(jī)科學(xué)與技術(shù)的各個(gè)方面影響深遠(yuǎn)。通過(guò)面向?qū)ο蠹夹g(shù),可以將客觀(guān)世界直接映射到面向?qū)ο蠼饪臻g,從而為軟件設(shè)計(jì)和系統(tǒng)開(kāi)發(fā)帶來(lái)革命性影響。1.1.1 面向?qū)ο笈c面向過(guò)程的區(qū)別在面向?qū)ο蟪绦蛟O(shè)計(jì)(Object Oriented Programming,OOP)方法出現(xiàn)之前,程序員用面向過(guò)程的方法開(kāi)發(fā)程序。面向過(guò)程的方法把密切相關(guān)、相互依賴(lài)的數(shù)據(jù)和對(duì)數(shù)據(jù)的操作相互分離,這種實(shí)質(zhì)上的依賴(lài)與形式上的分離使得大型程序不但難于編寫(xiě),而且難于調(diào)試和修改。在多人合作中,程序員之間很難讀懂對(duì)方的代碼,更談不上代碼的重用。由于現(xiàn)代應(yīng)用程序規(guī)模越來(lái)越大,對(duì)代碼的可重用性與易維護(hù)性的要求也相應(yīng)提高。面向?qū)ο蠹夹g(shù)便應(yīng)運(yùn)而生了。面向?qū)ο蠹夹g(shù)是一種以對(duì)象為基礎(chǔ),以事件或消息來(lái)驅(qū)動(dòng)對(duì)象執(zhí)行處理的程序設(shè)計(jì)技術(shù)。它以數(shù)據(jù)為中心而不是以功能為中心來(lái)描述系統(tǒng),數(shù)據(jù)相對(duì)于功能而言具有更強(qiáng)的穩(wěn)定性。它將數(shù)據(jù)和對(duì)數(shù)據(jù)的操作封裝在一起,作為一個(gè)整體來(lái)處理,采用數(shù)據(jù)抽象和信息隱蔽技術(shù),將這個(gè)整體抽象成一種新的數(shù)據(jù)類(lèi)型類(lèi),并且考慮不同類(lèi)之間的聯(lián)系和類(lèi)的重用性。類(lèi)的集成度越高,就越適合大型應(yīng)用程序的開(kāi)發(fā)。另一方面,面向?qū)ο蟪绦虻目刂屏鞒逃蛇\(yùn)行時(shí)各種事件的實(shí)際發(fā)生來(lái)觸發(fā),而不再由預(yù)定順序來(lái)決定,更符合實(shí)際。事件驅(qū)動(dòng)程序執(zhí)行圍繞消息的產(chǎn)生與處理,靠消息循環(huán)機(jī)制來(lái)實(shí)現(xiàn)。更重要的是,可以利用不斷擴(kuò)充的框架產(chǎn)品MFC(Microsoft Foundation Classes),在實(shí)際編程時(shí)可以采用搭積木的方式來(lái)組織程序,站在“巨人”肩上實(shí)現(xiàn)自己的愿望。面向?qū)ο蟮某绦蛟O(shè)計(jì)方法使得程序結(jié)構(gòu)清晰、簡(jiǎn)單,提高了代碼的重用性,有效地減少了程序的維護(hù)量,提高了軟件的開(kāi)發(fā)效率。例如,用面向?qū)ο蠹夹g(shù)來(lái)解決學(xué)生管理方面的問(wèn)題。重點(diǎn)應(yīng)該放在學(xué)生上,要了解在管理工作中,學(xué)生的主要屬性,要對(duì)學(xué)生做些什么操作等等,并且把它們作為一個(gè)整體來(lái)對(duì)待,形成一個(gè)類(lèi),稱(chēng)為學(xué)生類(lèi)。作為其實(shí)例,可以建立許多具體的學(xué)生,而每一個(gè)具體的學(xué)生就是學(xué)生類(lèi)的一個(gè)對(duì)象。學(xué)生類(lèi)中的數(shù)據(jù)和操作可以提供給相應(yīng)的應(yīng)用程序共享,還可以在學(xué)生類(lèi)的基礎(chǔ)上派生出大學(xué)生類(lèi)、中學(xué)生類(lèi)或小學(xué)生類(lèi)等,實(shí)現(xiàn)代碼的高度重用。在結(jié)構(gòu)上,面向?qū)ο蟪绦蚺c面向過(guò)程程序有很大不同,面向?qū)ο蟪绦蛴深?lèi)的定義和類(lèi)的使用兩部分組成,在主程序中定義各對(duì)象并規(guī)定它們之間傳遞消息的規(guī)律,程序中的一切操作都是通過(guò)向?qū)ο蟀l(fā)送消息來(lái)實(shí)現(xiàn)的,對(duì)象接到消息后,啟動(dòng)消息處理函數(shù)完成相應(yīng)的操作。類(lèi)與對(duì)象是面向?qū)ο蟪绦蛟O(shè)計(jì)中最基本且最重要的兩個(gè)概念,有必要仔細(xì)理解和徹底掌握。它們將貫穿全書(shū)并且逐步深化。1.1.2 對(duì)象的概念與類(lèi)的確定與人們認(rèn)識(shí)客觀(guān)世界的規(guī)律一樣,面向?qū)ο蠹夹g(shù)認(rèn)為客觀(guān)世界是由各種各樣的對(duì)象組成,每種對(duì)象都有各自的內(nèi)部狀態(tài)和運(yùn)動(dòng)規(guī)律,不同對(duì)象間的相互作用和聯(lián)系就構(gòu)成了各種不同的系統(tǒng),構(gòu)成了客觀(guān)世界。在面向?qū)ο蟪绦蛑校陀^(guān)世界被描繪成一系列完全自治、封裝的對(duì)象,這些對(duì)象通過(guò)外部接口訪(fǎng)問(wèn)其他對(duì)象。可見(jiàn),對(duì)象是組成一個(gè)系統(tǒng)的基本邏輯單元,是一個(gè)有組織形式的含有信息的實(shí)體。而類(lèi)是創(chuàng)建對(duì)象的樣板,在整體上代表一組對(duì)象,設(shè)計(jì)類(lèi)而不是設(shè)計(jì)對(duì)象可以避免重復(fù)編碼,類(lèi)只需要編碼一次,就可以創(chuàng)建本類(lèi)的所有對(duì)象。對(duì)象(Object)由屬性(Attribute)和行為(Action)兩部分組成。對(duì)象只有在具有屬性和行為的情況下才有意義,屬性是用來(lái)描述對(duì)象靜態(tài)特征的一個(gè)數(shù)據(jù)項(xiàng),行為是用來(lái)描述對(duì)象動(dòng)態(tài)特征的一個(gè)操作。對(duì)象是包含客觀(guān)事物特征的抽象實(shí)體,是屬性和行為的封裝體,在程序設(shè)計(jì)領(lǐng)域,可以用“對(duì)象數(shù)據(jù)十作用于這些數(shù)據(jù)上的操作”這一公式來(lái)表達(dá)。 類(lèi)(Class)是具有相同屬性和行為的一組對(duì)象的集合,它為屬于該類(lèi)的全部對(duì)象提供了統(tǒng)一的抽象描述,其內(nèi)部包括屬性和行為兩個(gè)主要部分,類(lèi)是對(duì)象集合的再抽象。類(lèi)與對(duì)象的關(guān)系如同一個(gè)模具與用這個(gè)模具鑄造出來(lái)的鑄件之間的關(guān)系。類(lèi)給出了屬于該類(lèi)的全部對(duì)象的抽象定義,而對(duì)象則是符合這種定義的一個(gè)實(shí)體。所以,一個(gè)對(duì)象又稱(chēng)作類(lèi)的一個(gè)實(shí)例(Instance)。在面向?qū)ο蟪绦蛟O(shè)計(jì)中,類(lèi)的確定與劃分非常重要,是軟件開(kāi)發(fā)中關(guān)鍵的一步,劃分的結(jié)果直接影響到軟件系統(tǒng)的質(zhì)量。如果劃分得當(dāng),既有利于程序進(jìn)行擴(kuò)充,又可以提高代碼的可重用性。因此,在解決實(shí)際問(wèn)題時(shí),需要正確地進(jìn)行分“類(lèi)”。理解一個(gè)類(lèi)究竟表示哪一組對(duì)象,如何把實(shí)際問(wèn)題中的事物匯聚成一個(gè)個(gè)的“類(lèi)”,而不是一組數(shù)據(jù)。這是面向?qū)ο蟪绦蛟O(shè)計(jì)中的一個(gè)難點(diǎn)。類(lèi)的確定和劃分并沒(méi)有統(tǒng)一的標(biāo)準(zhǔn)和固定的方法,基本上依賴(lài)設(shè)計(jì)人員的經(jīng)驗(yàn)、技巧以及對(duì)實(shí)際問(wèn)題的把握。但有一個(gè)基本原則:尋求一個(gè)大系統(tǒng)中事物的共性,將具有共性的系統(tǒng)成分確定為一個(gè)類(lèi)。確定某事物是一個(gè)類(lèi)的步驟包括:第一步,要判斷該事物是否有一個(gè)以上的實(shí)例,如果有,則它是一個(gè)類(lèi);第二步,要判斷類(lèi)的實(shí)例中有沒(méi)有絕對(duì)的不同點(diǎn),如果沒(méi)有,則它是一個(gè)類(lèi)。另外,還要知道什么事物不能被劃分為類(lèi)。不能把一組函數(shù)組合在一起構(gòu)成類(lèi),也就是說(shuō),不能把一個(gè)面向過(guò)程的模塊直接變成類(lèi)。類(lèi)不是函數(shù)的集合!1.1.3 消息與事件的概念消息(Message)是描述事件發(fā)生的信息,事件(Event)由多個(gè)消息組成。消息是對(duì)象之間發(fā)出的行為請(qǐng)求。封裝使對(duì)象成為一個(gè)相對(duì)獨(dú)立的實(shí)體,而消息機(jī)制為它們提供了一個(gè)相互間動(dòng)態(tài)聯(lián)系的途徑,使它們的行為能互相配合,構(gòu)成一個(gè)有機(jī)的運(yùn)行系統(tǒng)。對(duì)象通過(guò)對(duì)外提供的行為在系統(tǒng)中發(fā)揮自己的作用,當(dāng)系統(tǒng)中的其他對(duì)象請(qǐng)求這個(gè)對(duì) 象執(zhí)行某個(gè)行為時(shí),就向這個(gè)對(duì)象發(fā)送一個(gè)消息,這個(gè)對(duì)象就響應(yīng)這個(gè)請(qǐng)求,完成指定的 行為。 程序的執(zhí)行取決于事件發(fā)生的順序,由順序產(chǎn)生的消息驅(qū)動(dòng),不必預(yù)先確定消息產(chǎn)生的順序,更符合客觀(guān)世界的實(shí)際。1.2 面向?qū)ο蠹夹g(shù)的基本特征面向?qū)ο蠹夹g(shù)強(qiáng)調(diào)在軟件開(kāi)發(fā)過(guò)程中面向客觀(guān)世界或問(wèn)題域中的事物,采用人類(lèi)在認(rèn)識(shí)客觀(guān)世界的過(guò)程中普遍運(yùn)用的思維方法,直觀(guān)、自然地描述客觀(guān)世界中的有關(guān)事物。面向?qū)ο蠹夹g(shù)的基本特征主要有抽象性、封裝性、繼承性和多態(tài)性。1.2.1 抽象性把眾多的事物進(jìn)行歸納、分類(lèi)是人們?cè)谡J(rèn)識(shí)客觀(guān)世界時(shí)經(jīng)常采用的思維方法,“物以類(lèi)聚,人以群分”就是分類(lèi)的意思,分類(lèi)所依據(jù)的原則是抽象。抽象(Abstract)就是忽略事物中與當(dāng)前目標(biāo)無(wú)關(guān)的非本質(zhì)特征,更充分地注意與當(dāng)前目標(biāo)有關(guān)的本質(zhì)特征。從而找出事物的共性,并把具有共性的事物劃為一類(lèi),得到一個(gè)抽象的概念。例如,在設(shè)計(jì)一個(gè)學(xué)生成績(jī)管理系統(tǒng)的過(guò)程中,考察學(xué)生張華這個(gè)對(duì)象時(shí),就只關(guān)心他的班級(jí)、學(xué)號(hào)、成績(jī)等,而忽略他的身高、體重等信息。因此,抽象性是對(duì)事物的抽象概括描述,實(shí)現(xiàn)了客觀(guān)世界向計(jì)算機(jī)世界的轉(zhuǎn)化。將客觀(guān)事物抽象成對(duì)象及類(lèi)是比較難的過(guò)程,也是面向?qū)ο蠓椒ǖ牡谝徊?。例如,將學(xué)生抽象成對(duì)象及類(lèi)的過(guò)程如圖1-1所示。學(xué)生1學(xué)生2學(xué)生3學(xué)生4學(xué)生5屬性:服務(wù):班級(jí)查詢(xún)各屬性學(xué)號(hào)修改各屬性姓名打印各屬性專(zhuān)業(yè)成績(jī)學(xué)生類(lèi)學(xué)生對(duì)象1學(xué)生對(duì)象2學(xué)生對(duì)象3學(xué)生對(duì)象4學(xué)生對(duì)象5抽象創(chuàng)建圖1-1 抽象過(guò)程示意圖1.2.2 封裝性封裝(Encapsulation)就是把對(duì)象的屬性和行為結(jié)合成一個(gè)獨(dú)立的單位,并盡可能隱蔽對(duì)象的內(nèi)部細(xì)節(jié)。圖1-1中的學(xué)生類(lèi)也反映了封裝性。封裝有兩個(gè)含義:一是把對(duì)象的全部屬性和行為結(jié)合在一起,形成一個(gè)不可分割的獨(dú)立單位。對(duì)象的屬性值(除了公有的屬性值)只能由這個(gè)對(duì)象的行為來(lái)讀取和修改;二是盡可能隱蔽對(duì)象的內(nèi)部細(xì)節(jié),對(duì)外形成一道屏障,與外部的聯(lián)系只能通過(guò)外部接口實(shí)現(xiàn)。封裝的信息隱蔽作用反映了事物的相對(duì)獨(dú)立性,可以只關(guān)心它對(duì)外所提供的接口,即能做什么,而不注意其內(nèi)部細(xì)節(jié),即怎么提供這些服務(wù)。例如,用陶瓷封裝起來(lái)的一塊集成電路芯片,其內(nèi)部電路是不可見(jiàn)的,而且使用者也不關(guān)心它的內(nèi)部結(jié)構(gòu),只關(guān)心芯片引腳的個(gè)數(shù)、引腳的電氣參數(shù)及引腳提供的功能,利用這些引腳,使用者將各種不同的芯片連接起來(lái),就能組裝成具有一定功能的模塊。封裝的結(jié)果使對(duì)象以外的部分不能隨意存取對(duì)象的內(nèi)部屬性,從而有效地避免了外部錯(cuò)誤對(duì)它的影響,大大減小了查錯(cuò)和排錯(cuò)的難度。另一方面,當(dāng)對(duì)象內(nèi)部進(jìn)行修改時(shí),由于它只通過(guò)少量的外部接口對(duì)外提供服務(wù),因此同樣減小了內(nèi)部的修改對(duì)外部的影響。同時(shí),如果一味地強(qiáng)調(diào)封裝,則對(duì)象的任何屬性都不允許外部直接存取,要增加許多沒(méi)有其他意義,只負(fù)責(zé)讀或?qū)懙男袨椤_@為編程工作增加了負(fù)擔(dān),增加了運(yùn)行開(kāi)銷(xiāo),并且使得程序顯得臃腫。為了避免這一點(diǎn),在語(yǔ)言的具體實(shí)現(xiàn)過(guò)程中應(yīng)使對(duì)象有不同程度的可見(jiàn)性,進(jìn)而與客觀(guān)世界的具體情況相符合。封裝機(jī)制將對(duì)象的使用者與設(shè)計(jì)者分開(kāi),使用者不必知道對(duì)象行為實(shí)現(xiàn)的細(xì)節(jié),只需要用設(shè)計(jì)者提供的外部接口讓對(duì)象去做。封裝的結(jié)果實(shí)際上隱蔽了復(fù)雜性,并提供了代碼重用性,從而降低了軟件開(kāi)發(fā)的難度。1.2.3 繼承性 客觀(guān)事物既有共性,也有特性。如果只考慮事物的共性,而不考慮事物的特性,就不能反映出客觀(guān)世界中事物之間的層次關(guān)系,不能完整地、正確地對(duì)客觀(guān)世界進(jìn)行抽象描述。運(yùn)用抽象的原則就是舍棄對(duì)象的特性,提取其共性,從而得到適合一個(gè)對(duì)象集的類(lèi)。如果在這個(gè)類(lèi)的基礎(chǔ)上,再考慮抽象過(guò)程中被舍棄的一部分對(duì)象的特性,則可形成一個(gè)新的類(lèi),這個(gè)類(lèi)具有前一個(gè)類(lèi)的全部特征,是前一個(gè)類(lèi)的子集,形成一種層次結(jié)構(gòu),即繼承結(jié)構(gòu),如圖1-2所示。中學(xué)生農(nóng) 民教 師助 教學(xué) 生教 授工 人小學(xué)生研究生講 師大學(xué)生人圖1-2 類(lèi)的繼承結(jié)構(gòu)繼承(Inheritance)是一種聯(lián)結(jié)類(lèi)與類(lèi)的層次模型。繼承性是指特殊類(lèi)的對(duì)象擁有其一般類(lèi)的屬性和行為。繼承意味著“自動(dòng)地?fù)碛小?,即特殊?lèi)中不必重新定義已在一般類(lèi)中定義過(guò)的屬性和行為,而它卻自動(dòng)地、隱含地?fù)碛衅湟话泐?lèi)的屬性與行為。繼承允許和鼓勵(lì)類(lèi)的重用,提供了一種明確表述共性的方法。一個(gè)特殊類(lèi)既有自己新定義的屬性和行為,又有繼承下來(lái)的屬性和行為。盡管繼承下來(lái)的屬性和行為是隱式的,但無(wú)論在概念上還是在實(shí)際效果上,都是這個(gè)類(lèi)的屬性和行為。當(dāng)這個(gè)特殊類(lèi)又被它更下層的特殊類(lèi)繼承時(shí),它繼承來(lái)的和自己定義的屬性和行為又被下一層的特殊類(lèi)繼承下去。因此,繼承是傳遞的,體現(xiàn)了大自然中特殊與一般的關(guān)系。 在軟件開(kāi)發(fā)過(guò)程中,繼承性實(shí)現(xiàn)了軟件模塊的可重用性、獨(dú)立性,縮短了開(kāi)發(fā)周期,提高了軟件開(kāi)發(fā)的效率,同時(shí)使軟件易于維護(hù)和修改。這是因?yàn)橐薷幕蛟黾幽骋粚傩曰蛐袨?,只需在相?yīng)的類(lèi)中進(jìn)行改動(dòng),而它派生的所有類(lèi)都自動(dòng)地、隱含地作了相應(yīng)的改動(dòng)。由此可見(jiàn),繼承是對(duì)客觀(guān)世界的直接反映,通過(guò)類(lèi)的繼承,能夠?qū)崿F(xiàn)對(duì)問(wèn)題的深入抽象描述,反映出人類(lèi)認(rèn)識(shí)問(wèn)題的發(fā)展過(guò)程。1.2.4 多態(tài)性面向?qū)ο笤O(shè)計(jì)借鑒了客觀(guān)世界的多態(tài)性,體現(xiàn)在不同的對(duì)象收到相同的消息時(shí)產(chǎn)生多種不同的行為方式。例如,在一般類(lèi)“幾何圖形”中定義了一個(gè)行為“繪圖”,但并不確定執(zhí)行時(shí)到底畫(huà)一個(gè)什么圖形。特殊類(lèi)“橢圓”和“多邊形”都繼承了幾何圖形類(lèi)的繪圖行為,但其功能卻不同,一個(gè)是要畫(huà)出一個(gè)橢圓,另一個(gè)是要畫(huà)出一個(gè)多邊形。這樣一個(gè)繪圖的消息發(fā)出后,橢圓、多邊形等類(lèi)的對(duì)象接收到這個(gè)消息后各自執(zhí)行不同的繪圖函數(shù)。如圖1-3所示,這就是多態(tài)性的表現(xiàn)。類(lèi):Shape行為:Draw類(lèi):Ellipse行為:Draw類(lèi):Rectangle行為:Draw圖1-3 多態(tài)性示意圖具體來(lái)說(shuō),多態(tài)性(Polymorphism)是指類(lèi)中同一函數(shù)名對(duì)應(yīng)多個(gè)具有相似功能的不同函數(shù),可以使用相同的調(diào)用方式來(lái)調(diào)用這些具有不同功能的同名函數(shù)。繼承性和多態(tài)性的結(jié)合,可以生成一系列雖類(lèi)似但獨(dú)一無(wú)二的對(duì)象。由于繼承性,這些對(duì)象共享許多相似的特征;由于多態(tài)性,針對(duì)相同的消息,不同對(duì)象可以有獨(dú)特的表現(xiàn)方式,實(shí)現(xiàn)特性化的設(shè)計(jì)。上述面向?qū)ο蠹夹g(shù)四大特征的充分運(yùn)用,為提高軟件開(kāi)發(fā)效率起著重要的作用,通過(guò)編寫(xiě)可重用代碼、編寫(xiě)可維護(hù)代碼、改代碼模塊、共享代碼等方法充分發(fā)揮其優(yōu)勢(shì)。面向?qū)ο蠹夹g(shù)可使程序員不必反復(fù)地編寫(xiě)類(lèi)似的程序,通過(guò)繼承機(jī)制進(jìn)行特殊類(lèi)化的過(guò)程使得程序設(shè)計(jì)變成僅對(duì)特殊類(lèi)與一般類(lèi)的差異進(jìn)行編程的過(guò)程。當(dāng)高質(zhì)量的代碼可重復(fù)使用時(shí),復(fù)雜性就得以降低,效率則得到提高。不斷擴(kuò)充的MFC類(lèi)庫(kù)和繼承機(jī)制能很大程度地提高開(kāi)發(fā)人員建立、擴(kuò)充和維護(hù)系統(tǒng)的能力。面向?qū)ο蠹夹g(shù)將數(shù)據(jù)與操作封裝在一起,簡(jiǎn)化了調(diào)用過(guò)程,方便了維護(hù),并減少了程序設(shè)計(jì)過(guò)程中出錯(cuò)的可能性。繼承性和封裝性使得應(yīng)用程序的修改帶來(lái)的影響更加局部化,而且類(lèi)中的操作是易于修改的,因?yàn)樗鼈儽环旁谖┮坏牡胤?。因此,采用面向?qū)ο蠹夹g(shù)進(jìn)行程序設(shè)計(jì)具有開(kāi)發(fā)時(shí)間短、效率高、可靠性好、所開(kāi)發(fā)的程序更強(qiáng)壯等優(yōu)點(diǎn)。1.3 面向?qū)ο蟪绦蛟O(shè)計(jì)語(yǔ)言20世紀(jì)60年代,出現(xiàn)了最早的面向?qū)ο蟪绦蛟O(shè)計(jì)語(yǔ)言Simula67語(yǔ)言,具有了類(lèi)和對(duì)象的概念,被公認(rèn)為是面向?qū)ο笳Z(yǔ)言的鼻祖。隨后又推出了純面向?qū)ο蟪绦蛟O(shè)計(jì)語(yǔ)言,如美國(guó)Xerox Palo Alto研究中心推出的Smalltalk,它完整地體現(xiàn)并進(jìn)一步豐富了面向?qū)ο蟮母拍睢_M(jìn)而出現(xiàn)了混合型面向?qū)ο蟪绦蛟O(shè)計(jì)語(yǔ)言,如 C+,這類(lèi)語(yǔ)言一般是在其他語(yǔ)言的基礎(chǔ)上開(kāi)發(fā)出來(lái)的。還有與人工智能語(yǔ)言結(jié)合形成的面向?qū)ο蟪绦蛟O(shè)計(jì)語(yǔ)言,如LOOPS、Flavors和CLOS。以及適合網(wǎng)絡(luò)應(yīng)用的面向?qū)ο蟪绦蛟O(shè)計(jì)語(yǔ)言,如 Java語(yǔ)言等。下面簡(jiǎn)要介紹幾種目前常用的面向?qū)ο蟪绦蛟O(shè)計(jì)語(yǔ)言。1.3.1 混合型面向?qū)ο蟪绦蛟O(shè)計(jì)語(yǔ)言C+C+是ATT Bell實(shí)驗(yàn)室的Bjarne Stroustrup博士于20世紀(jì)80年代早期提出的,是迄今為止商業(yè)上最受歡迎的混合型面向?qū)ο蟪绦蛟O(shè)計(jì)語(yǔ)言。C+兼容了C語(yǔ)言并彌補(bǔ)了其缺陷,支持面向過(guò)程程序設(shè)計(jì)方法;增加了面向?qū)ο蟮哪芰?,支持面向?qū)ο蟪绦蛟O(shè)計(jì)方法。許多軟件公司都為C+設(shè)計(jì)編譯系統(tǒng)。如AT&T、Apple、Sun、Borland和Microsoft等,國(guó)內(nèi)最為流行的是Borland C+和 Visual C+。同時(shí),許多大學(xué)和公司也在為C+編寫(xiě)各種不同的類(lèi)庫(kù),其中Borland公司的OWL(Object Windows Libray)和Microsoft公司的MFC(Microsoft Foundation Class)是優(yōu)秀的代表作,尤其是MFC在國(guó)內(nèi)外都得到廣泛應(yīng)用。C+被數(shù)以十萬(wàn)計(jì)的程序員應(yīng)用到幾乎每個(gè)領(lǐng)域中。早期的應(yīng)用趨向于系統(tǒng)程序設(shè)計(jì),有幾個(gè)主要操作系統(tǒng)都是用C+寫(xiě)出的:Compbell、Rozier、Hamilton、Berg、Parrington,更多系統(tǒng)用C+做了其中的關(guān)鍵部分。C+還用于寫(xiě)設(shè)備驅(qū)動(dòng)程序,或者其他需要在實(shí)時(shí)約束下直接操作硬件的軟件。許多年來(lái),美國(guó)的長(zhǎng)途電話(huà)系統(tǒng)的核心控制依賴(lài)于C+。圖形學(xué)和用戶(hù)界面是使用C+最深入的領(lǐng)域,如Apple Macintosh或Windows的基本用戶(hù)界面都是C+程序。此外,一些最流行的支持UNIX中X的庫(kù)也是用C+寫(xiě)的。C+能夠有效地用到各種各樣的應(yīng)用系統(tǒng)中,并且廣泛應(yīng)用于教學(xué)和研究。1.3.2 純面向?qū)ο蟪绦蛟O(shè)計(jì)語(yǔ)言JavaJava是由SUN公司的J.Gosling、B.Joe等人在20世紀(jì)90年代初開(kāi)發(fā)出的一種純面向?qū)ο蟪绦蛟O(shè)計(jì)語(yǔ)言。Java是標(biāo)準(zhǔn)的又是大眾化的面向?qū)ο蟪绦蛟O(shè)計(jì)語(yǔ)言。首先,Java作為一種解釋型程序設(shè)計(jì)語(yǔ)言,具有簡(jiǎn)單性、面向?qū)ο笮?、平臺(tái)無(wú)關(guān)性、可移植性、安全性、動(dòng)態(tài)性和健壯性,不依賴(lài)于機(jī)器結(jié)構(gòu),并且提供了并發(fā)的機(jī)制,具有很高的性能;其次,它最大限度地利用了網(wǎng)絡(luò),Java的應(yīng)用程序(Applet)可在網(wǎng)絡(luò)上傳輸,可以說(shuō)是網(wǎng)絡(luò)世界的通用語(yǔ)言;另外,Java還提供了豐富類(lèi)庫(kù),使程序設(shè)計(jì)者可以方便地建立自己的系統(tǒng)。因此,Java具有強(qiáng)大的圖形、圖像、動(dòng)畫(huà)、音頻、視頻、多線(xiàn)程及網(wǎng)絡(luò)交互能力,使其在設(shè)計(jì)交互式、多媒體網(wǎng)頁(yè)和網(wǎng)絡(luò)應(yīng)用程序方面大顯身手。Java程序有兩種類(lèi)型:一種是可在Web網(wǎng)頁(yè)上運(yùn)行的Applet,稱(chēng)為小應(yīng)用程序。考慮到網(wǎng)絡(luò)環(huán)境、連接速度等原因,Applet一般都比較小,適合客戶(hù)端下載,很多網(wǎng)站利用Java開(kāi)發(fā)出了商業(yè)網(wǎng)絡(luò)平臺(tái),實(shí)現(xiàn)交互運(yùn)行,還有大量的Applet嵌入到網(wǎng)頁(yè),使頁(yè)面變得更加活潑生動(dòng),但Applet不能單獨(dú)運(yùn)行,必須嵌入在HTML文件中,由Web瀏覽器執(zhí)行;另一種是Application,即應(yīng)用程序,可完成任何計(jì)算任務(wù),運(yùn)行時(shí)不必借助于Web瀏覽器,可單獨(dú)執(zhí)行。Java從C+發(fā)展而來(lái)。Java摒棄了C+中許多不合理的內(nèi)容,真正做到了面向?qū)ο?。在Java中,一切都是對(duì)象。Java通過(guò)new運(yùn)算符創(chuàng)建對(duì)象,通過(guò)new運(yùn)算符返回的對(duì)象引用來(lái)操縱對(duì)象,而不是直接操作指針,這樣可以防止程序員的誤操作而導(dǎo)致的錯(cuò)誤。Java通過(guò)內(nèi)存垃圾收集機(jī)制,自動(dòng)管理內(nèi)存,不需要程序員顯式地釋放所分配的內(nèi)存,從而大大減輕了程序員的負(fù)擔(dān)。Java與C+都有類(lèi)的概念,其最大的差異是C+支持多重繼承,而Java只支持單重繼承。Java拋棄多重繼承是為了使類(lèi)之間的繼承關(guān)系更加清晰,不會(huì)造成任何混亂。1.3.3 可視化程序設(shè)計(jì)語(yǔ)言Visual Basic1991年Microsoft公司推出了基于BASIC語(yǔ)言的可視化面向?qū)ο箝_(kāi)發(fā)工具Visual Basic,標(biāo)志著軟件設(shè)計(jì)和開(kāi)發(fā)技術(shù)一個(gè)新時(shí)代的開(kāi)始。在其帶動(dòng)下,相繼產(chǎn)生了Visual C+、Visual J+、Visual FoxPro以及Borland Delphi、Power Builder等眾多可視化開(kāi)發(fā)工具,這些工具的共同特點(diǎn)是,提供了Windows界面下一些常用界面元素樣本。所謂可視化技術(shù)一般是指軟件開(kāi)發(fā)階段的可視化和對(duì)計(jì)算機(jī)圖形技術(shù)和方法的應(yīng)用。這里是指前者,即可視化程序設(shè)計(jì),是應(yīng)用可視化開(kāi)發(fā)工具開(kāi)發(fā)圖形用戶(hù)界面(GUI)應(yīng)用程序的方法。軟件開(kāi)發(fā)人員不需編寫(xiě)大量代碼去描述界面元素的外觀(guān)和位置,而只需選定特定界面元素的樣本,并用鼠標(biāo)拖放到屏幕的窗體上,然后再通過(guò)不同的方法,編寫(xiě)一些容易理解的事件處理程序,就可完成應(yīng)用軟件的設(shè)計(jì)。在 Visual Basic中,既繼承了BASIC語(yǔ)言所具有的語(yǔ)法簡(jiǎn)單、容易學(xué)習(xí)、容易使用、數(shù)據(jù)處理能力強(qiáng)的特點(diǎn),又引入了面向?qū)ο蟆⑹录?qū)動(dòng)的編程機(jī)制和可視化程序設(shè)計(jì)方法,大大降低了開(kāi)發(fā)Windows應(yīng)用程序的難度,有效地提高了應(yīng)用程序開(kāi)發(fā)的效率。同時(shí),Visual Basic還兼顧了高級(jí)編程技術(shù),不僅可以編寫(xiě)功能強(qiáng)大的數(shù)據(jù)庫(kù)應(yīng)用程序、多媒體處理程序,還可以用來(lái)建立客戶(hù)與服務(wù)器應(yīng)用程序、通過(guò)Internet訪(fǎng)問(wèn)遍及全球的分布式應(yīng)用程序、創(chuàng)建ActiveX控件以及與其他應(yīng)用程序緊密集成。它可以實(shí)現(xiàn)Windows的絕大部分高級(jí)功能,如多任務(wù)、多文檔界面(MDI)、對(duì)象的鏈接與嵌入(OLE)、動(dòng)態(tài)數(shù)據(jù)交換、動(dòng)態(tài)鏈接庫(kù)(DLL)子程序的調(diào)用等,尤其是動(dòng)態(tài)鏈接技術(shù),使得 Visual Basic可以調(diào)用 Windows系統(tǒng)的各種資源。但是,Visual Basic存在語(yǔ)法不嚴(yán)格、開(kāi)發(fā)出的系統(tǒng)穩(wěn)定性較低的缺點(diǎn)。相對(duì)Visual C+語(yǔ)言來(lái)說(shuō),Visual Basic面向系統(tǒng)底層的編程能力有限,不適合開(kāi)發(fā)系統(tǒng)監(jiān)控程序,不適合設(shè)備驅(qū)動(dòng)程序的開(kāi)發(fā)。比較而言,Visual C+雖然學(xué)習(xí)起來(lái)難度較大,但開(kāi)發(fā)出的系統(tǒng)穩(wěn)定性高,同時(shí)還能使用Visual C+做一些Windows系統(tǒng)下特殊應(yīng)用的開(kāi)發(fā),如設(shè)備驅(qū)動(dòng)程序等。1.4 C+對(duì)面向?qū)ο蠹夹g(shù)的支持 C+作為一種面向?qū)ο蟪绦蛟O(shè)計(jì)語(yǔ)言,具有對(duì)象、類(lèi)、消息等概念,同時(shí)支持面向?qū)ο蠹夹g(shù)的抽象性、封裝性、繼承性和多態(tài)性。1 C+對(duì)抽象性的支持C+抽象包括兩個(gè)方面,一是過(guò)程抽象,二是數(shù)據(jù)抽象。過(guò)程抽象是指任何一個(gè)明確定義功能的操作都可被使用者看作單個(gè)的實(shí)體看待,盡管這個(gè)操作實(shí)際上可能由一系列更低級(jí)的操作來(lái)完成。數(shù)據(jù)抽象定義了數(shù)據(jù)類(lèi)型和對(duì)該類(lèi)對(duì)象的操作,并限定了對(duì)象的值只能通過(guò)這些操作來(lái)修改和調(diào)用。 2.C+對(duì)封裝性的支持C+將數(shù)據(jù)和相關(guān)操作封裝在類(lèi)中,同時(shí)可以用訪(fǎng)問(wèn)權(quán)限控制對(duì)象內(nèi)部數(shù)據(jù)的訪(fǎng)問(wèn)。 3.C+對(duì)繼承性的支持C+允許從一個(gè)或多個(gè)已經(jīng)定義的類(lèi)中派生出新的類(lèi)并繼承其數(shù)據(jù)和操作,同時(shí)在新類(lèi)中可以重新定義或增加新的數(shù)據(jù)和操作,這樣建立起類(lèi)的層次結(jié)構(gòu)。被繼承的類(lèi)稱(chēng)為基類(lèi)或父類(lèi),派生的新類(lèi)稱(chēng)為派生類(lèi)或子類(lèi)。4.C+對(duì)多態(tài)性的支持C+多態(tài)分為編譯時(shí)多態(tài)和運(yùn)行時(shí)多態(tài)。編譯時(shí)多態(tài)是指在程序的編譯階段由編譯系統(tǒng)根據(jù)操作數(shù)確定需要調(diào)用哪個(gè)同名的函數(shù);運(yùn)行時(shí)多態(tài)是指在程序的運(yùn)行階段才根據(jù)產(chǎn)生的信息確定需要調(diào)用哪個(gè)同名的函數(shù)。調(diào)用不同的函數(shù)就意味著執(zhí)行不同的處理。在C+中,對(duì)編譯時(shí)多態(tài)的支持是通過(guò)函數(shù)重載和運(yùn)算符重載實(shí)現(xiàn)的;對(duì)運(yùn)行時(shí)多態(tài)的支持是通過(guò)繼承和虛函數(shù)來(lái)實(shí)現(xiàn)的。1.5 Visual C+的發(fā)展隨著C+逐漸成為ANSI標(biāo)準(zhǔn),便迅速成為程序員最廣泛使用的工具,其開(kāi)發(fā)環(huán)境也隨之不斷地推出。Visual C+從1.0發(fā)展到6.0等版本,軟件系統(tǒng)逐漸龐大,功能日益完善。1.5.1 Visual C+ 6.01986年Borland公司開(kāi)發(fā)了Turbo C+,而后又推出了 Borland C+。Microsoft公司于20世紀(jì)80年代中期在 Microsoft C 6.0的基礎(chǔ)上開(kāi)發(fā)了Microsoft C/C+ 7.0,同時(shí)引進(jìn)了類(lèi)庫(kù)MFC 1.0版本,完善了源代碼。這些版本都是依賴(lài)于DOS環(huán)境,或在Windows下的DOS模式下運(yùn)行。隨后Microsoft公司推出了Microsoft C/C+ 8.0,即 Visual C+1.0版本,它是Microsoft公司推出的第一個(gè)真正基于 Windows環(huán)境下的可視化集成開(kāi)發(fā)環(huán)境,將編輯、編譯、連接和運(yùn)行集成為一體。由于Internet的流行,在4.0版本中,Visual C+引進(jìn)了為Internet編程而設(shè)計(jì)的新類(lèi)庫(kù)。5.0版本也增加了一些新類(lèi),但注意力更多地集中在改善產(chǎn)品的界面上,以提供一個(gè)更好的在線(xiàn)幫助系統(tǒng)、更高級(jí)的宏能力和對(duì)在開(kāi)發(fā)者組內(nèi)進(jìn)行類(lèi)和其他代碼共享的支持。6.0版本在功能上做了進(jìn)一步的改進(jìn)。Visual C+ 一直是用于創(chuàng)建高性能的Windows和Web應(yīng)用程序與Web服務(wù)的最佳語(yǔ)言。Microsoft公司自喻Visual C+是所有開(kāi)發(fā)語(yǔ)言及工具中的“旗艦”。Visual C+不僅是C+語(yǔ)言的集成開(kāi)發(fā)環(huán)境,而且與Win32緊密相連,利用Visual C+可以完成各種各樣的應(yīng)用程序的開(kāi)發(fā),從底層軟件直到上層直接面向用戶(hù)的軟件,而且Visual C+強(qiáng)大的調(diào)試功能也為大型應(yīng)用程序的開(kāi)發(fā)提供了有效的排錯(cuò)手段。1.5.2 Visual C+.NETVisual C+.NET是Microsoft的新一代Visual C+語(yǔ)言。2000年6月22日,Microsoft公司正式推出了Microsoft.NET(以下簡(jiǎn)稱(chēng).NET),使Microsoft公司現(xiàn)有的軟件在Web時(shí)代不僅適用于傳統(tǒng)的PC,而且也能夠滿(mǎn)足新設(shè)備的需要,諸如蜂窩電話(huà)以及個(gè)人數(shù)字助理(Personal Digital Assistant,PDA)等。1.NET簡(jiǎn)介 .NET是一個(gè)開(kāi)發(fā)平臺(tái),它定義了一種公用語(yǔ)言子集(Common Language Subset,CLS),這是一種為符合其規(guī)范的語(yǔ)言與類(lèi)庫(kù)之間提供無(wú)縫集成的混合語(yǔ)言。.NET統(tǒng)一了編程類(lèi)庫(kù),提供了對(duì)下一代網(wǎng)絡(luò)通信標(biāo)準(zhǔn)可擴(kuò)展標(biāo)記語(yǔ)言(Extensible Markup Language,XML)的完全支持,使應(yīng)用程序的開(kāi)發(fā)變得更容易、更簡(jiǎn)單。Microsoft公司在其軟件中添加了手寫(xiě)和語(yǔ)音識(shí)別的功能,讓人們能夠與計(jì)算機(jī)進(jìn)行更好地交流。與Microsoft的其他產(chǎn)品一樣,.NET與Windows平臺(tái)緊密集成,其運(yùn)行庫(kù)已經(jīng)與操作系統(tǒng)融合一體。 .NET是一種面向網(wǎng)絡(luò)、支持各種用戶(hù)終端的開(kāi)發(fā)平臺(tái)。Microsoft公司的宏偉目標(biāo)是讓Microsoft.NET徹底改變軟件的開(kāi)發(fā)方式、發(fā)行方式、使用方式等等,并且面向所有開(kāi)發(fā)商與運(yùn)營(yíng)商。.NET的核心內(nèi)容之一就是要搭建第三代Internet平臺(tái),這個(gè)網(wǎng)絡(luò)平臺(tái)將解決網(wǎng)站之間的協(xié)同合作問(wèn)題,從而最大限度地獲取信息。在.NET平臺(tái)上,不同網(wǎng)站之間通過(guò)相關(guān)的協(xié)定聯(lián)系在一起,網(wǎng)站之間自動(dòng)交流,協(xié)同工作,提供最全面的服務(wù)。總之,.NET戰(zhàn)略是一場(chǎng)軟件革命。.NET為使用與開(kāi)發(fā)人員提供了功能強(qiáng)大、種類(lèi)豐富的管理與開(kāi)發(fā)工具,同時(shí)這些工具也是.NET框架提供的服務(wù),.NET平臺(tái)提供了大量的工具和服務(wù),能夠最大限度地發(fā)掘和使用計(jì)算及通信能力。其中,Visual Studio.NET是.NET的核心開(kāi)發(fā)工具,包括了Microsoft公司提供的各種開(kāi)發(fā)語(yǔ)言,其中有Visual C+.NET 和Visual C#等。2.C#與.NET當(dāng)Microsoft公司推出組件對(duì)象模型(Component Object Model,COM),通過(guò)將組件改變?yōu)橥ㄓ谩⒓尚偷臉?gòu)件,開(kāi)發(fā)人員逐漸地從過(guò)去的繁雜編程事務(wù)中解脫出來(lái),可以選擇自己最得心應(yīng)手的編程語(yǔ)言進(jìn)行編程。然而,軟件組件與應(yīng)用程序之間的結(jié)合仍然是松散的,不同的編程語(yǔ)言與開(kāi)發(fā)平臺(tái)限制了模塊間的互用性

溫馨提示

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

評(píng)論

0/150

提交評(píng)論