




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、面向對象程序設計面向對象程序設計 第2章 面向對象程序設計概述 2.1 面向對象程序設計的基本概念面向對象程序設計的基本概念 程序設計語言是軟件開發(fā)的工具,程序設計語言的發(fā) 展過程客觀地反映了程序設計方 法的發(fā)展過程。面向對 象程序設計是一種全新的軟件設計方法,它吸收了軟件 工程領域有益的概念和有效的方法。這種軟件設計方法 集抽象性、封裝性、繼承性和多態(tài)性于一體,易于實現(xiàn) 模塊化、可復用、易維護、易擴充的程序。 2.1.1 面向對象方法的產生面向對象方法的產生 在面向對象程序設計方法流行以前,面向過程程序設 計方法是程序設計的主流方法。所謂面向過程程序設計, 是指把一個復雜的待求解問題分解成若
2、干個較小的問題, 每個問題的求解是一個過程(程序中表現(xiàn)為一個函數(shù))。每 個過程都可以單獨進行設計、修改和調試,全部問題的 求解表現(xiàn)為主程序對各個函數(shù)的調用。 面向過程的方法把密切相關、相互依賴的數(shù)據(jù)和對數(shù) 據(jù)的操作相互分離,當數(shù)據(jù)結構改變時,其相關的處理過 程在絕大多數(shù)情況下需要進行全部或部分的修改,因此程 序代碼的重用性差,而且這種實質上的依賴與形式上的分 離使得大型程序不但難于編寫,而且難于調試和修改。隨 著計算機所處理的問題變得日益復雜并越來越龐大時,結 構化程序設計的面向過程方法的局限性就越來越明顯。 面向過程程序設計方法側重于系統(tǒng)功能,過程的作用 是實現(xiàn)從以參數(shù)說明的輸入數(shù)據(jù)到輸出值
3、的轉換。面向對 象程序設計著眼于系統(tǒng)數(shù)據(jù)結構,實現(xiàn)數(shù)據(jù)和操作的封裝, 對象的作用是實現(xiàn)數(shù)據(jù)存儲和系統(tǒng)狀態(tài)的響應, 2.1 面向對象程序設計的基本概念面向對象程序設計的基本概念 這是一種完全不同于原先的程序設計風范,它不再進 行功能的分解,而是把客觀世界中存在的對象映射到計算 機軟件中的對象表示。 面向對象方法與技術起源于面向對象的編程語言,從 20世紀60年代后期的面向對象程序設計語言Simula 67到 現(xiàn)在,已經經過了幾十年的發(fā)展。20世紀80年代大批面向 對象的編程語言的出現(xiàn)和效率的不斷提高標志著面向對象 技術開始走向繁榮和實用。而面向對象方法的真正意義在 于它適合于解決分析與設計期間的
4、復雜性并能夠實現(xiàn)分析 與設計的復用,因此,人們從面向對象的編程轉而研究面 向對象的分析與設計,從80 年代后期到90年代,相繼出 現(xiàn)了一大批關于面向對象分析OOA和面向對象設計OOD 的學術論文和專著,提出了許多OOA、OOD方法。迄今, 面向對象思想已經滲透到計算機軟件外的很多領域,如計 算機體系結構和人工智能等。 2.1 面向對象程序設計的基本概念面向對象程序設計的基本概念 2.1.2面向對象方法的方法與結構面向對象方法的方法與結構 面向對象程序設計方法是一種以對象為基礎, 以事件 或消息來驅動對象執(zhí)行相應處理的程序設計方法,它將數(shù) 據(jù)及對數(shù)據(jù)的操作封裝在一起,作為一個相互依存、不可 分離
5、的整體對象。面向對象程序設計以數(shù)據(jù)為中心來 描述一個應用系統(tǒng),數(shù)據(jù)相對于功能而言具有更強的穩(wěn)定 性。采用數(shù)據(jù)抽象和信息隱蔽技術,將這個整體抽象成一 種新的數(shù)據(jù)類型類,并且考慮不同類之間的聯(lián)系和類 的重用性。類的集成度越高,越適合大型應用程序的開發(fā)。 類中的大多數(shù)數(shù)據(jù),只能通過本類進行操作和處理。 類通過一個簡單的外部接口與外界發(fā)生關系,對象與對象 之間通過消息進行通信。這樣,程序模塊之間的關系比較 簡單,模塊之間的獨立性和數(shù)據(jù)安全性得到了更好的體現(xiàn)。 面向對象程序的控制流程根據(jù)運行時各種事件的實際發(fā)生 來觸發(fā),而不再由預定順序來控制,因而更客觀、更符合 軟件的實際應用情況。 2.1 面向對象程
6、序設計的基本概念面向對象程序設計的基本概念 事件驅動程序的執(zhí)行圍繞消息的產生與處理,靠消息 循環(huán)機制來實現(xiàn)。同時,通過采用繼承與多態(tài)性技術, 可以大大提高程序的可重用性。面向對象程序設計方法 使得程序結構清晰、簡單,提高了代碼的重用性,有效 地提高了軟件的開發(fā)效率,使得軟件的開發(fā)和維護都更 為方便。 在程序結構上,面向對象程序設計與面向過程程序有 很大不同。面向過程程序設計以算法過程(或稱功能)為核 心,體現(xiàn)為函數(shù)結構,程序主要通過函數(shù)調用來相互聯(lián) 系。面向對象程序由類的定義和類的使用兩部分組成。 在主程序內定義對象,并確定對象之間消息的傳遞規(guī)律, 程序中的所有操作都通過向對象發(fā)送消息來實現(xiàn),
7、對象 接到消息后,通過消息處理函數(shù)完成相應的操作。 2.1 面向對象程序設計的基本概念面向對象程序設計的基本概念 類與對象是面向對象程序設計中最基本、最重要的 兩個概念,它們將貫穿面向對象程序設計和各種應用軟 件開發(fā)的全過程。面向對象程序設計方法所強調的基本 原則之一是直接面對客觀世界中存在的問題進行軟件開 發(fā),使軟件開發(fā)方法更符合人類的思維習慣。因此,從 本質上講,面向對象編程方法的出現(xiàn)是程序設計方法的 一個接近和符合自然規(guī)律的過程。 面向對象程序設計方法是目前解決軟件開發(fā)面臨的 各種困難的最有希望和最有前途的方法。面向對象程序 設計使軟件設計可以做到分工協(xié)作,接口規(guī)范,部件組 裝。這樣,軟
8、件設計就可以像工業(yè)產品那樣,大量生產, 精心維護,不斷提高性能。 2.1.3 類和對象的概念類和對象的概念 在客觀世界中,類這一術語是對一組相似對象的抽象和描述。在 面向對象程序設計語 言中也是如此,類(Class)與對象(Object)是面向 對象程序設計中的最重要的基本概念。與人類認識客觀世界的規(guī)律一 樣,面向對象程序設計的基本思想認為客觀世界由各種各樣的對象組 成,每一類型的對象都有各自的內部狀態(tài)和行為規(guī)律,不同對象間的 相互聯(lián)系和作用 構成了不同的系統(tǒng),形成了客觀世界。一般認為, 對象是客觀世界存在的具體事物,它可以是有形的實物,也可以是無 形的事物。對象是構成世界的一個獨立單位,它具
9、有自己的靜態(tài)特征 (用數(shù)據(jù)描述)和動態(tài)特征(對象的行為或功能)。面向對象程序設計方 法中的對象,是構成軟件系統(tǒng)的一個基本單位,是系統(tǒng)用以描述客觀 事物的一個實例。對象由一組屬性和一組行為構成,對象只有在具有 屬性和行為的情況下才具有意義。屬性是用來描述對象靜態(tài)特征的數(shù) 據(jù)項,行為是用來描述對象動態(tài)特征的一系列操作。對象是包含客觀 事物本質特征的抽象實體,是具有屬性和行為的封裝體。 2.1 面向對象程序設計的基本概念面向對象程序設計的基本概念 面向對象中的類是具有相同屬性和行為的一組對象的 集合,它為屬于同一類的全部對象提供了統(tǒng)一的抽象描 述,類是對象的集合和再抽象。把眾多的事物歸納、劃 分成一
10、些類,是人類認識客觀世界時經常采用的思維方 法。分類所依據(jù)的基本原則是抽象,即忽略事物的非本 質特征,只注意那些與當前目標有關的本質特征,從而 找出同類事物的共性,把具有共同性質的事物劃分為一 類。 面向對象方法中的類,其內部包括屬性和行為兩個主 要部分。類與對象的關系猶如模具與用這個模具鑄造出 來的鑄件之間的關系,一個屬于某類的對象稱為該類的 一個實例(nstance)。類給出了屬于該類的全部對象的抽 象定義,而對象則是符合該類特征的一個實體。因此, 對象又稱為類的一個實例。 2.1 面向對象程序設計的基本概念面向對象程序設計的基本概念 在面向對象程序中,客觀世界被認為是由一系列完全 自制、
11、封裝的對象,這些對象通過外部接口訪問其他對 象??梢?,對象是面向對象程序設計方法的一個基本元 素,而類是創(chuàng)建對象的樣板,在整體上代表一組對象。 設計類而不是設計對象可以避免重復編碼,類只需編碼 一次,就可以創(chuàng)建本類的各種對象。因此,在面向對象 程序設計中,類的確定與劃分非常重要,是軟件開發(fā)中 的關鍵環(huán)節(jié),科學合理地劃分將有效提高程序質量和代 碼的可重用性。 因此,在分析和處理實際問題時,需要 正確地分析一個類究竟表示哪一組對象,要進行合理的 分“類”。 類的確定和劃分是面向對象程序設計的重要步驟,然 而類的劃分并沒有統(tǒng)一的標準和 固定的方法,主要依靠 軟件開發(fā)人員的經驗、技巧,以及對實際問題的
12、深刻理 解。 2.1 面向對象程序設計的基本概念面向對象程序設計的基本概念 基本的方法是:將目標任務中具有共性的成分確定為 一個類。確定某事物是否一個類可以按以下步驟進行初 步分析:第一,要判斷該事物是否有一個以上的實例, 如果有,則它可以被確定為一個類;第二,要判斷類的 實例中有沒有絕對的不同點,如果沒有,則它同樣可能 被確定為一個類。 另外,還要知道什么事物不能被劃分為類。不能把一 組函數(shù)組合在一起構成類,也就是說,不能把面向過程 的若干個函數(shù)簡單組合變成類,類不是函數(shù)的集合。 確定了類之后才可以創(chuàng)建對象。和客觀世界中的對象 一樣,程序設計中的對象也同樣具有三個基本特征:用 一個名稱來惟一
13、標識該對象;用一組狀態(tài)(數(shù)據(jù))來描述其 特征;用一組操作(函數(shù))來實現(xiàn)其功能。 2.1 面向對象程序設計的基本概念面向對象程序設計的基本概念 2.1.4 消息與事件的概念消息與事件的概念 在面向對象程序設計中,消息(Message)是描述事件 發(fā)生的信息,是對象之間發(fā)出的行 為請求,事件(Event) 一般由多個消息組成。對象之間通過消息聯(lián)系,彼此共同 協(xié)作,形成一個有機的系統(tǒng)。在面向對象方法中,消息是 向某個對象提出執(zhí)行該對象具有的特定服務的申請,不同 對象之間通過發(fā)送消息向對方提出服務請求,接受消息的 對象主動完成所請求的服務。提供服務的對象將會對外公 開其一部分操作,其他對象可以通過發(fā)送
14、對應的消息來激 活這些操作,從而使用該對象提供的服務,所以這些公開 的接口稱為對象的服務。服務具有一定的形式,也即需要 規(guī)定每個對象所能接受的消息的格式,這種格式稱為消息 協(xié)議。消息的發(fā)送者將會按照這種協(xié)議來發(fā)送消息。 在設計對象時,需要定義它的公共服務接口,這些接 口就是一些函數(shù)。其他對象要使用這個對象的服務時,就 調用相應的函數(shù)。 2.1 面向對象程序設計的基本概念面向對象程序設計的基本概念 調用時,需要給出被調用對象、被調用的函數(shù)和適當 的函數(shù)參數(shù),函數(shù)執(zhí)行的過程就是對消息的響應過程,函 數(shù)的返回值就是對消息的應答。 封裝使對象成為一個相對獨立的實體,而消息機制為 它們提供了一個相互間動
15、態(tài)聯(lián)系 的途徑。通常一個消息 由消息的發(fā)送者、消息的接收者、消息所要求的具體服務、 消息所要求服務的一些參數(shù)以及消息的應答組成。發(fā)送消 息的對象不需要知道接受消息的對象如何對消息進行響應。 一般情況下,消息通常具有以下三個性質:同一個對 象可以接受不同形式的多個消息, 產生的消息各不相同; 相同形式的消息可以發(fā)送給不同的對象,產生的響應可以 各不相同; 一個對象可以立即響應發(fā)送給它的消息,也 可以暫時不予響應消息。程序的執(zhí)行取決于事 件發(fā)生的 順序,完全由所產生的消息來驅動程序的執(zhí)行,無須預先 確定消息產生的順序,因而更符合客觀世界的實際情況。 2.1 面向對象程序設計的基本概念面向對象程序設
16、計的基本概念 2.2 面向對象程序設計的特點面向對象程序設計的特點 面向對象的程序設計方法強調在軟件開發(fā)過程中面 向待求解問題域中的事物,即面向 客觀世界本身,運用 人類認識客觀世界的普遍思維方法,直觀、準確、自然 地描述客觀世界中的相關事物。面向對象程序設計方法 的基本特征主要包括抽象性、封裝性、繼承性和多態(tài)性。 2.2.1 抽象性抽象性 將自然世界中的各種事物進行歸納、分類,是人類 認識客觀世界時經常采用的思維方 法,古語“物以類聚, 人以群分”即含有分類的意思,分類所依據(jù)的重要原則 是抽象 Abstract)。 2.2 面向對象程序設計的特點面向對象程序設計的特點 抽象是指在分析和提取事
17、物中與當前目標有關的本 質特征,忽略與當前目標無關的非本質特征,找出事物 的共性,并把具有共性的事物劃為一類,得到一個抽象 的概念。一般來說,抽象包括兩個方面:數(shù)據(jù)抽象和行 為抽象。數(shù)據(jù)抽象抽象出了對象屬性和狀態(tài)的描述,行 為抽象則抽象出了對象行為的描述。 因此,抽象性是對事物本質特征的概括性描述,以 便于采用面向對象技術準確描述客觀事物,實現(xiàn)了客觀 世界向計算機世界的轉化。將客觀事物抽象成類及對象 是比較難的過程,也是面向對象程序設計必須面對的首 要問題。 2.2 面向對象程序設計的特點面向對象程序設計的特點 2.2.2 封裝性封裝性 封裝(Encapsulation)是面向對象方法的一個重
18、要原則, 即將對象的屬性和行為代碼封 裝在對象的內部,形成一個 獨立的單位,并盡可能隱蔽對象的內部細節(jié)。C+面向對 象方法的封裝特性包含兩層含義:第一層含義是將對象的 全部屬性和行為封裝在對象內部,形成一個不可分割的獨 立單位。對象的屬性值(公有屬性值除外)只能由這個對象的 行為來讀取和修改;第二層含義是“信息隱蔽”,即盡可 能隱蔽對象的內部細節(jié),對外形成一道屏障,只保留有限 的對外接口與外部發(fā)生聯(lián)系。 面向對象程序設計方法的信息隱蔽作用體現(xiàn)了事物的相 對獨立性,類和對象的設計者注意其內部細節(jié)、關心其對 外提供的接口。使用者則不必關注這些,而只需關心類和 對象能做什么,如何使用類和對象提供的服
19、務等。就如同 被封裝的集成電路芯片一樣,使用者無需關心它的內部結 2.2 面向對象程序設計的特點面向對象程序設計的特點 構,只需關心芯片引腳的個數(shù)、有關的電氣參數(shù)、機 械特性及其功能,通過這些引腳,可以將該芯片與其他 芯片及各種不同的電路連接起來,集成為具有不同功能 的應用系統(tǒng)。 封裝特性使對象以外的事物不能隨意獲取對象的內部 屬性,從而有效地避免了外部錯 誤對它產生的影響,大 大減輕了軟件開發(fā)過程中查錯的工作量,有效地減小了 排錯的難度。 同樣,當需要修改對象內部數(shù)據(jù)時,由于 封裝特性,減小了因內部修改對外部的影響。面向對象 技術的封裝特性使對象的使用者與設計者可以分開,使 用者不必知道對象
20、行為實現(xiàn)的細節(jié),只需通過設計者提 供的外部接口由對象去做。因此,封裝特性事實上隱蔽 了程序設計的復雜性,提高了代碼重用性,降低了軟件 開發(fā)的難度。 2.2 面向對象程序設計的特點面向對象程序設計的特點 封裝是面向對象程序設計語言必須提供的機制。面向 對象語言必須提供把對象的屬性和操作結合在一起的程序 手段,并且需要保證其他對象只能訪問該對象的公共服務, 這種機制稱為面向對象語言的封裝機制。 在C+語言中,類的成員的訪問權限分為私有 (private)、保護(protected)和公有(public)三種。外部程序 對一個類中具有不同訪問權限的成員有不同的可見程度。 并由具有公有(public)
21、 訪問權限的成員對外提供服務。 2.2.3 繼承性繼承性 客觀事物既有共性,也有特性。如果只考慮事物的共 性,而不考慮事物的特性,就不能反映出客觀世界中事物 之間的層次關系,也不能準確地對客觀世界進行抽象描述。 抽象原則的應用就是舍棄對象與目標無關的非本質特性, 提取其共性,從而得到滿足目標需求的類。 如果在這個類的基礎上,再考慮部分對象的個性特 征,則可形成一個新的類,這個類具有前一個類的全部 特征,是前一個類的子集,這就形成了一種繼承關系的 類層次結構。圖2-1所示為電視類繼承關系的層次結構。 圖2-1 電視機類繼承關系 2.2 面向對象程序設計的特點面向對象程序設計的特點 繼承性具有重要
22、的實際意義,它簡化了人們對事物的認 識和描述。比如我們認識了電視機的特征之后,再考慮液 晶電視、等離子電視時,就會明白由于它們都具有電視機 的共性。同樣,當深入研究了電視機的共性之后,在設計 派生類手機電視時,可以認為它理所當然地具有電視機的 一般本質特征,從而只需要把精力用于發(fā)現(xiàn)和描述手機電 視獨有的那些特征即可。 繼承體現(xiàn)了類與類的層次關系。繼承使派生類中無須重 新定義在父類中已定義的屬性和行為,而是自動地、隱含 地擁有其父類的全部屬性與行為。繼承允許和鼓勵類的重 用,提供了一種明確表述共性的方法。派生類既有自己新 定義的屬性和行為,又具有繼承下來的屬性和行為。當派 生類又被它更下層的子類
23、繼承時,這個派生類繼承的及自 身定義的屬性和行為又被下一級子類繼承下去。繼承是可 以傳遞的,體現(xiàn)了自然界和社會中特殊與一般的關系。 繼 承對于軟件重用有著重要意義,是面向對象程序設計能夠 提高軟件開發(fā)效率的重要原因之一。 2.2 面向對象程序設計的特點面向對象程序設計的特點 特殊類繼承一般類,本身就是軟件復用。如果將已開 發(fā)好的類作為構件放到構件庫中,在開發(fā)新系統(tǒng)時便可以 直接使用或繼承使用。在軟件開發(fā)過程中,繼承性實現(xiàn)了 軟件模塊的可重用性、獨立性,縮短了開發(fā)周期,提高了 軟件開發(fā)的效率。繼承使得一個個原來彼此孤立的類可以 有效地組織起來,形成清晰的層次結構關系,這樣的類層 次稱為類簇。繼承
24、還增強了類接口的一致性,減少了模塊 間的接口和界面,從而大大增加了程序的易維護性。 C+中子類對父類方法的繼承,有三種不同形式: (1)完全繼承。子類全部繼承父類中的某個方法。 (2)擴充繼承。子類對父類中的某個方法在繼承的基礎 上做一些功能補充。 (3)覆蓋繼承。在保證函數(shù)返回值、函數(shù)名、參數(shù)表相 同的前提下,子類中重新定義父類中的一些方法,從而用 子類中新定義的方法覆蓋父類中舊的方法。 2.2 面向對象程序設計的特點面向對象程序設計的特點 2.2.4 多態(tài)性多態(tài)性 客觀世界具有多態(tài)性,如不同的對象個體在獲得相同 的信息(即消息)時可以產生各種 不同的行為和結果。面向 對象程序設計的多態(tài)性(
25、Polymorphism)是指父類中定義的 屬性或行為,派生類繼承之后,可以具有不同的數(shù)據(jù)類型 或表現(xiàn)出不同的行為特性。如類中的同名函數(shù)可以對應 多 個具有相似功能的不同函數(shù),可使用相同的調用方式來調 用這些具有不同功能的同名函數(shù),面向對象技術的多態(tài)性 反映了客觀世界的多態(tài)性。 從同一基類派生出的多個對象具有同一接口,因此能 響應同一格式的消息,但是響應的方式可以因對象具體類 型的不同而不同,也就是說,每個對象可用適合自身的方 式去響應共同的消息。由此而帶來的好處是,使用這類對 象提供的服務時,不必區(qū)分具體是哪種對象類型,只要發(fā) 送相同的消息就可以了。 2.2 面向對象程序設計的特點面向對象程
26、序設計的特點 多態(tài)性使得同一個屬性或行為在父類及其各派生類 中具有不同的語義。以圖2-2為例,定義一個shape類, 它具有繪制圖形行為,但這個行為并不具有具體含義, 也就是說并不確定執(zhí)行時究竟是繪制一個什么樣的圖形。 然后再定義一些派生類,cylinder、rectangle、circle, 它們都繼承父類shape的繪圖行為,因此自動具有了繪 圖功能。接下來,程序設計者可以在這些子類中根據(jù)具 體需要重新定義繪圖,使之分別實現(xiàn)對cylinder、 rectangle、circle圖形的繪制功能。 2.2 面向對象程序設計的特點面向對象程序設計的特點 圖2-2 多態(tài)性 軟件開發(fā)是一項系統(tǒng)工程,
27、軟件開發(fā)的真正決定性因 素來自前期對所解決問題的分析、 抽象和概念問題的提 出,而非后期的程序源代碼的實現(xiàn)。只有正確識別并深刻 理解了目標 問題的內在邏輯和本質特征,才可能圓滿地 解決問題,設計出優(yōu)秀的軟件。因此,在軟件開發(fā)與設計 的全過程中,程序代碼設計只是相對較小的一項工作。 在計算機產生的早期,計算機應用的領域相對簡單,因此 軟件開發(fā)所面臨的問題也比較簡單,從對問題的分析到編 程實現(xiàn)并不是太難的事情。隨著計算機應用領域的擴展和 應用的深入,計算機所處理的問題日益復雜,軟件系統(tǒng)的 規(guī)模和復雜度日益龐大,以至于軟件的復雜性和軟件開發(fā) 過程中可能產生的隱含錯誤已經達到軟件設計人員自身無 法控制
28、的程度,這就是IT業(yè)曾經一度出現(xiàn)過的“軟件危 機”。“軟件危機”的產生,促進了軟件工程學的形成、 推動了軟件工程的發(fā)展。 2.3 面向對象的軟件開發(fā)面向對象的軟件開發(fā) 對面向對象軟件開發(fā)與設計的全面掌握必須建立在對 軟件設計與維護的深刻理解的基 礎上,因此,必須了解 面向對象軟件工程的基本概念。面向對象軟件工程是面向 對象方法在軟件工程領域的全面應用,它包括面向對象分 析(OOA)、面向對象設計(OOD)、面向對象編程 (OOP)、面向對象測試(OOT)和面向對象軟件維護 (OOSM)等重要內容。 2.3.1 面向對象分析面向對象分析 面向對象分析是指在深入、全面理解問題本質需求的 基礎上,確
29、定類與對象、屬性,分析對象模式及類對象的 關聯(lián)關系,確定行為等要素。 為全面正確理解問題的實質和要素,在面向對象程序 軟件開發(fā)的分析階段,系統(tǒng)分析員應與客戶一起工作。應 從目標問題的分析和描述入手,建立一個符合系統(tǒng)內在邏 輯、能客觀反映系統(tǒng)重要特性的準確數(shù)學模型。 2.3 面向對象的軟件開發(fā)面向對象的軟件開發(fā) 在深入理解客戶需求分析的基礎上,面向對象分析 要做的主要工作包括確定類、確定類的屬性和確定類的 方法。另外,還要確定類之間的聯(lián)系方式,這稱為確定 對象模式。實際上,在一個較大的軟件系統(tǒng)分析中,確 定類和確定對象模式是結合起來完成的。 1確定類確定類 類是對象模型的基礎,尋找并整理出對象模
30、型中的 全部類,是首先要做的工作。面向對象程序設計的重要 步驟之一就是將如何將現(xiàn)實世界的對象關系映射到計算 機的虛擬世界中去,對于現(xiàn)實世界來說,對象可分為以 下幾種情況: (1) 需求分析包括的可感知的實體和抽象的概念???感知的實體如電腦、防盜門、出租車、茶杯、臺燈等, 抽象的概念如學校校規(guī)、交通法規(guī)等。 2.3 面向對象的軟件開發(fā)面向對象的軟件開發(fā) (2) 需求分析包括的人或組織的角色,如司機、教師、 學生、市長、工人、醫(yī)生、護士、病人等。 (3) 需求分析所涉及事件,如學生在食堂買飯、顧客 在商場購物、汽車發(fā)生交通事故、飛機發(fā)生空難事故等。 事件是指一個狀態(tài)的改變,或者一個活動的發(fā)生。事
31、件可 按需求分析得出的重要程度分為一般事件和重要事件。一 般事件可在相關類中增加屬性并增加相應的方法。重要事 件可設計為類,例如,飛機發(fā)生空難事故,這種需要長期 保存資料的事件就要設計成單獨的類。 一個類主要包括類名、屬性和方法三部分。面向對象 技術中類可分為兩種:一種是對象類,另一種是抽象類。 對象類是指可創(chuàng)建對象實例的類,抽象類是指不可創(chuàng)建對 象實例的類。對于圓類來說,它的一個對象就是一個圓心 明確,半徑固定,顏色清晰的圓,圓類的描述如圖2-3所 示。 2.3 面向對象的軟件開發(fā)面向對象的軟件開發(fā) 對于一個圖形類。如果產生它的一個實例,即用圖 形類產生一個圖形,則我們無法準確描述具體它的特
32、征, 也就是說,不可能創(chuàng)建出沒有具體形狀的圖形對象,因 此圖形類是抽象類,如圖2-4所示。 2.3 面向對象的軟件開發(fā)面向對象的軟件開發(fā) 圖2-3 圓類(對象類)圖2-4 圖形類(抽象類) 雖然抽象類和對象類的對象模型表示方法相同,但是 抽象類不能夠生成具體的對象。軟件系統(tǒng)中的大部 分類都是對象類。既然抽象類不能夠生成具體的對象, 那么抽象類的存在價值在于哪些方面呢? 面向對象程序設計有繼承的概念,繼承意味著子類自 動地擁有父類定義過的屬性和行為。因此,可以把若干 對象類共有的屬性和行為抽象出來,并設計成這些對象 類的公共父類,以后如再定義這些父類的子類,子類中 只需定義各自特殊的屬性和行為,
33、而不再需要重新定義 父類中定義過的共同的屬性和行為,這樣使類的代碼得 到盡可能最大化的重用,也使不同的對象類統(tǒng)一在一個 類族當中,方便了管理和維護。在C+語言中,包含有純 虛函數(shù)的類是抽象類,不包含純虛函數(shù)的類都是對象類。 2.3 面向對象的軟件開發(fā)面向對象的軟件開發(fā) 2. 確定類的屬性確定類的屬性 類的屬性是類所具有的性質、特征或狀態(tài)。通常,在 分析階段不可能確定類的所有屬性,但在分析階段要確 定每個類的基本屬性。 類的屬性可分為兩種:一種稱做實例屬性,它是類中 各對象實例具有不同屬性值的屬性項;另一種稱做類屬 性,它是類中所有對象實例都具有相同屬性值的屬性項。 類的方法分為兩種:一種稱做常
34、規(guī)性方法(或輔助性 方法),主要包括設置對象屬性值方法和獲取對象屬性值 方法等;另一種稱做功能性方法(或需求性方法),功能性 方法反映了該類對象實例所具有的功能。 確定類的方法主要是確定類的功能性方法。常規(guī)性方 法通常在實現(xiàn)階段才具體考慮。 2.3 面向對象的軟件開發(fā)面向對象的軟件開發(fā) 4確定對象模式確定對象模式 確定對象模式要做的工作主 要是建立起對象之間的聯(lián)系方式。 對象模式主要有:整體部分模 式、一般特殊模式、消息模式 三種。 (1) 組合模式組合模式 聚集是一種特殊形式的關聯(lián)。 聚集表示類之間整體與部分的關 系。對系統(tǒng)進行分析和設計時, 需求描述中的“包含”、“組 成”、“分為部分”等
35、詞常 常意味著存在聚集關系。如圖2-5 所示。 2.3 面向對象的軟件開發(fā)面向對象的軟件開發(fā) 圖 2-5 聚集關系 圖2-5中Circe類和Style類之間 是聚集關系。一個圓可以有顏色、 是否填充這呈 樣式(style)方面的屬 性,可以用一個style對象表示這些 屬性,但同一個style對象也可以表 示別的對象如矩形的一些樣式方面 的屬性,也就是說,style對象可以 用于不同的地方。如果circe這個對 象不存在了,不一定意味著style這 個對象也不存在了。 組合是一種特殊形式的聚集, 它表示的也是類之間的整體與部分 的關系,但組合關系中的整體與部 分具有同樣的生存期,如圖2-6所
36、示。 2.3 面向對象的軟件開發(fā)面向對象的軟件開發(fā) 圖2-6 組合關系 圖2-6中的Circe類和Point類之間是組合關系。一個 圓可以由半徑和圓心確定,如果圓不存在了,那么表示 這個圓的圓心也就不存在了,所以Circe類和Point類是組 合關系。 聚集關系的實例是傳遞的,反對稱的,也就是說, 聚集關系的實例之間存在偏序關系. 即聚集關系的實例之 間不能形成環(huán)。需要注意的是,這里說的是聚集關系的 實例不能形成環(huán),而不是說聚集關系不能形成環(huán)。事實 上,聚集關系可以形成環(huán)。 在類圖中使用聚集關系和組合關系的好處是簡化了 對象的定義,同時支持分析和設計時類的重用。 2.3 面向對象的軟件開發(fā)面向
37、對象的軟件開發(fā) 組合模式表示了一個整體對象概念是由若干個部分 對象概念合成的。例如,微機(僅指硬件)類由機箱類、 CPU類、內存類、電源類和風扇類等組成,這樣,微機 類與機箱類、CPU類、內存類、電源類和風扇類之間就 構成整體部分模式,如圖2-7所示。 2.3 面向對象的軟件開發(fā)面向對象的軟件開發(fā) 圖2-7 計算機類 如果從對象間的關系來說,組合關系也稱為包含關系, 即一個對象包含了另一個(或一些)對象。 組合模式中的類都是對象類,不存在抽象類。因為有 具體對象存在的類組合成的類也一定有具體對象存在,就 像有具體對象存在的機箱類、CPU類、內存類、電源類和 風扇類等所組合成的微機類也一定有具體
38、對象存在一樣。 組合模式具有傳遞性。例如,如果機器A是由部件B1 和B2組成的,部件B1又由更小的部件(零件)C1和C2組成 的,則C1和C2也是組成機器A的部件(零件)。 聚集和組合是類圖中很重要的兩個概念,但也是比較 容易混淆的概念,在實際運用往往很難確定是用聚集關系 還是用組合關系。事實上,在設計類圖時,設計人員是根 據(jù)需求分析描述的上下文來確定是使用聚集關系還是組合 關系。對于同一個設計,可能采用聚集關系和采用組合關 系都是可以的,不同的只是采用哪種關系更貼切些。下面 列出聚集和組合之間的一些區(qū)別: 2.3 面向對象的軟件開發(fā)面向對象的軟件開發(fā) 聚集關系也稱為has-a關系,組合關系也
39、稱為 contains-a關系。 聚集關系表示事物的整體/部分關系的較弱的情況,組 合關系表示事物的整體部分關系的較強的情況。 在聚集關系中,代表部分事物的對象可以屬于多個聚 集對象,可以為多個聚集對象所共享,而且可以隨時改變 它所從屬的聚集對象。代表部分事物的對象與代表聚集事 物對象的生存期無關,一旦刪除了它的一個聚集對象,不 一定也就隨即刪除代表部分事務的對象。在組合關系中, 代表整體事務的對象負責創(chuàng)建和刪除代表部分事務的對象, 代表部分事務的對象只屬于一個組合對象。一旦刪除了組 合對象,也就隨即刪除了代表部分事務的對象。 2.3 面向對象的軟件開發(fā)面向對象的軟件開發(fā) (2) 一般一般特殊
40、模式特殊模式 一般特殊模式表示類之間的一般特殊聯(lián)系方式。 在面向對象技術中,繼承性反映的就是類之間的一般 特殊關系。因此,對象模型中對象之間一般特殊模式 的實現(xiàn)方法就是繼承。對于一般特殊模式,父類包含 一般性的共有屬性和方法,子類包含各自特殊的屬性和 方法。子類的對象既有自己特殊的屬性和方法,又有父 類中一般性共有的屬性和方法。如圖2-1所示。 如果從對象間的關系來說,一般特殊模式也稱為 繼承關系,即一個對象是另一個對象的特例。 一般特殊模式具有傳遞性。例如,如果類A是類B 的基類,而類B又是類C的基類,則類A也是類C的基類。 因為此種情況下,類C不僅繼承了類B的屬性和方法,而 且也繼承了類A
41、的屬性和方法。 2.3 面向對象的軟件開發(fā)面向對象的軟件開發(fā) (3) 消息模式消息模式 消息模式表示類的實例之間通過發(fā)送消息進行聯(lián)系。 例如,對計算機商品類和生產廠商類來說,每臺計算機 都對應一個生產廠商,如果創(chuàng)建了具體的計算機商品對 象和具體的生產廠商對象,則每個計算機商品對象都應 記錄自己的生產廠商對象是誰。從對象間的關系來說, 消息模式也稱為關聯(lián)關系,即一個對象和另一個對象有 某種聯(lián)系。 2.3 面向對象的軟件開發(fā)面向對象的軟件開發(fā) 圖2-8 消息模式 要特別注意的是,在消息模式中,發(fā)送消息的類(臺 燈類)里,也設計有一個成員變量生產商),這和組合模式 中整體類(如計算機類)設計有部分類
42、的成員變量有些類似, 但這兩者在概念上完全不同。在組合模式里,整體類(計 算機類)和部分類(機箱類、CPU類、內存類、電源類和內 存類)之間是一種構成關系;而在消息模式里,一個類(臺 燈類)和另一個類(生產商類)之間是一種聯(lián)系關系。 2.3.2 面向對象設計面向對象設計 從面向對象分析到面向對象設計是一個逐漸擴充模型 的過程。在這一階段,需要對分 析階段所建立的對象模 型進行細化工作,并加入必要的實現(xiàn)細節(jié),主要包括如 下四方面的工作: (1)修改和完善對象模型,主要包括對類做修改和補 充,對對象模式做必要的調整,如重新設計類的繼承關 系等。 2.3 面向對象的軟件開發(fā)面向對象的軟件開發(fā) (2)
43、在對對象模型反復修改的基礎上,寫出所有類的 定義。類的定義包括類名、類的繼承關系、類的屬性、 類的方法。其中,類的方法包括輔助性方法和功能性方 法中要詳細列出方法名、方法函數(shù)的數(shù)據(jù)類型、方法函 數(shù)的參數(shù)及參數(shù)類型等。還可在綜合分析的基礎上,對 類的方法重新進行設計或劃分,做到功能單一、高度共 享、可重復使用程度高等設計要求。 (3) 構造基于特定計算機環(huán)境的軟件系統(tǒng)所要求的額 外的、與實現(xiàn)有關的類和對象模型。這主要有人機接口 部分、數(shù)據(jù)管理部分和系統(tǒng)接口部分對象及對象模型的 補充。人機接口是實際使用的軟件系統(tǒng)中人與系統(tǒng)的交 互接口。數(shù)據(jù)管理完成軟件系統(tǒng)中系統(tǒng)需要保存和維護 的類。系統(tǒng)接口是本系統(tǒng)設備和其它系統(tǒng)設備的接口。 2.3 面向對象的軟件開發(fā)面向對象的軟件開發(fā) 2.3 面向對象的軟件開發(fā)面向對象的軟件開發(fā) 目前,市場上提供了很多支持軟件和類庫包,對大
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025至2030年中國奧硝唑氯化鈉注射液數(shù)據(jù)監(jiān)測研究報告
- 2025至2030年中國多槽式超聲波汽相清洗機數(shù)據(jù)監(jiān)測研究報告
- 2025至2030年中國卷管車數(shù)據(jù)監(jiān)測研究報告
- 2025至2030年中國十八速后撥導輪數(shù)據(jù)監(jiān)測研究報告
- 2025至2030年中國刺繡字畫數(shù)據(jù)監(jiān)測研究報告
- 2025至2030年中國二元包裝成套氣霧劑灌裝機數(shù)據(jù)監(jiān)測研究報告
- 2025年中國高效營養(yǎng)土市場調查研究報告
- 2025年中國陶瓷浴缸市場調查研究報告
- 2025年中國立式網(wǎng)帶復合機市場調查研究報告
- 2025年中國盆景霧化器連接線市場調查研究報告
- DB23T 2656-2020樺樹液采集技術規(guī)程
- 2023年蘇州職業(yè)大學單招職業(yè)適應性測試題庫及答案解析
- 中國故事英文版哪吒英文二篇
- 2023年中智集團及下屬單位招聘筆試題庫及答案解析
- GB/T 8888-2003重有色金屬加工產品的包裝、標志、運輸和貯存
- GB/T 32685-2016工業(yè)用精對苯二甲酸(PTA)
- GB/T 21872-2008鑄造自硬呋喃樹脂用磺酸固化劑
- 酒店業(yè)主代表崗位職責標準(8篇)
- 上海市中小學生語文學業(yè)質量綠色指標測試
- 新學期幼兒園保育員培訓
- GA/T 501-2020銀行保管箱
評論
0/150
提交評論