面向?qū)ο缶幊痰幕靖拍?ppt_第1頁
面向?qū)ο缶幊痰幕靖拍?ppt_第2頁
面向?qū)ο缶幊痰幕靖拍?ppt_第3頁
面向?qū)ο缶幊痰幕靖拍?ppt_第4頁
面向?qū)ο缶幊痰幕靖拍?ppt_第5頁
已閱讀5頁,還剩43頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第三章面向?qū)ο蟪绦蛟O(shè)計基本概念,面向?qū)ο蟮某绦蛟O(shè)計(OOP)已成為現(xiàn)代軟件開發(fā)的必然選擇。通過掌握面向?qū)ο蟮募夹g(shù),能開發(fā)出復(fù)雜、高級的系統(tǒng),這些系統(tǒng)是完整健全的,但又是可擴充的。OOP是建立在把對象作為基本實體看待的面向?qū)ο蟮哪P蜕系?,這種模型可以使對象之間能相互交互作用。 面向?qū)ο蟪绦蛟O(shè)計在一個好的面向?qū)ο蟪绦蛟O(shè)計語言(OOPL)的支持下能得到最好的實現(xiàn)。Java就是一種優(yōu)秀的OOPL,它提供了用來支持面向?qū)ο蟪绦蛟O(shè)計模型所需的一切條件。Java有自己完善的對象模型,并提供了一個龐大的Java類庫,并有一套完整的面向?qū)ο蠼鉀Q方案和體系結(jié)構(gòu)。 本章介紹面向?qū)ο蟮母拍詈蛯ο蠼5姆椒?,講解Jav

2、a對象模型中的核心部分:類及類的成員。使讀者學(xué)會如何用創(chuàng)建和使用Java對象。,2,3.1 對象,定義:一個對象就是變量和相關(guān)方法的封裝,其中變量表明對象的狀態(tài),方法表明對象的行為。軟件對象既可以模擬現(xiàn)實世界的對象,也可以表示抽象的概念,對象示意圖,3,3.1 對象,封裝: 能把對別的對象來說并不重要的對象的實現(xiàn)細節(jié)隱蔽起來 ,在使用一個對象時,只需知道怎樣引用它的方法而無須知道它的具體實現(xiàn)。 封裝的優(yōu)點: 模塊化一個對象的源代碼的編寫和維護獨立于其它對象的源代碼。而且,對象在系統(tǒng)中很容易使用。 信息隱蔽每個對象都有一個公共接口使得其它對象可以與其通訊。但對象能維護自己的私有信息和方法并能在任

3、何時候改變它們而不會影響使用它的其它對象。,3.1 對象 (SmallTalk的特征),(1) 所有東西都是對象。可將對象想象成一種新型變量;它保存著數(shù)據(jù),但可要求它對自身進行操作。 (2) 程序是一大堆對象的組合;通過消息傳遞,各對象知道自己該做些什么。 (3) 每個對象都有自己的存儲空間,可容納其他對象。 (4) 每個對象都有一種類型。根據(jù)語法,每個對象都是某個“類”的一個“實例”。其中,“類”(Class)是“類型”(Type)的同義詞。一個類最重要的特征就是“能將什么消息發(fā)給它?” (5)同一類所有對象都能接收相同的消息。,3.1 對象,理解對象 使用對象 對象之間的關(guān)系,面向?qū)ο蟪绦?/p>

4、設(shè)計中的對象與客觀世界中的對象并不是完全相同的概念,他們既有聯(lián)系又有區(qū)別。所以深刻理解編程中的對象本質(zhì)將有利于實踐面向?qū)ο缶幊毯烷_發(fā)。,3.1.1 理解對象,對象可以視為一組相關(guān)的操作代碼和數(shù)據(jù)的組合 對象是類的實例 對象可以互相協(xié)作,共同完成任務(wù) 通過繼承、組合或封裝等方式可以產(chǎn)成新的對象 對象根據(jù)特定的意義和用途有不同的劃分方法,3.1.2 使用對象:設(shè)計果園系統(tǒng),一個面向?qū)ο蟮墓麍@系統(tǒng) 假設(shè)我們要開發(fā)一個最簡單的果園系統(tǒng)GardenSys。用面向?qū)ο蟮姆椒▉矸治?,這個果園系統(tǒng)至少包括園丁和水果這兩個對象。園丁的工作包括種植各種水果,水果的行為包括生長和收獲,不同的水果還有不同的名稱。園丁

5、種植水果,園丁與水果存在關(guān)聯(lián)關(guān)系。,3.1.2 使用對象:對象的創(chuàng)建和銷毀,對象是通過類創(chuàng)建的,對象是類的動態(tài)實例。每個對象都有生命期。一個對象按其生命期來分析,一般有三個階段,出生、活動、死亡。而我們在編程中要做的對應(yīng)為:創(chuàng)建(初始化)、運行、銷毀。 通常,當(dāng)調(diào)用構(gòu)造函數(shù)時,該函數(shù)返回一個新分配內(nèi)存并初始化了的類的實例。 Java構(gòu)造函數(shù)是一種比較特殊的函數(shù),它不能由用戶來指定返回類型,只能返回所屬類的類型;它也不能由用戶來指定其它名稱,只能使用與類名相同的名稱。即便如此,我們?nèi)匀豢梢酝ㄟ^方法的重載(overload)來為一個類提供多個不同的構(gòu)造函數(shù)。 在Java中沒有用于銷毀和清理對象的析

6、構(gòu)函數(shù),因為Java提供了垃圾回收(Garbage Collection,簡稱gc)機制負責(zé)釋放對象所占用的內(nèi)存空間及相關(guān)的其它資源。,3.1.2 使用對象:對象和對象變量,從語義上講,對象是類的實例,類是創(chuàng)建對象的模板;從語言上講,對象也是類這種數(shù)據(jù)類型的變量,對象在內(nèi)存中占有空間。但是在具體使用中,對象與傳統(tǒng)的變量,也就是Java中基本類型的變量有區(qū)別。 對象是一種引用類型。對象由類創(chuàng)建,存儲在堆中;而對象變量則是對象的引用,存儲在棧中。在程序中我們通過對象變量,也就是對象的引用,來操縱對象。,引用類型的演示: MyClass a,b;/聲明MyClass類型的變量a和b,MyClass是

7、一個Java類 a = new MyClass();/變量a引用了MyClass類創(chuàng)建的對象實例 a.myvar = 24;/給對象實例的字段myvar賦值 b = a; /變量b得到的是變量a的一個引用的副本, /結(jié)果使他們都引用了同一個對象實例。 a.myvar = a.myvar+1;/改變對象字段的值 System.out.println(a.myvar); /此時顯示a.myvar值為25 System.out.println(b.myvar); /此時顯示b.myvar值也為25,3.1.3 對象之間的關(guān)系,對象之間的關(guān)系有: 合成關(guān)系(“hasa”) 繼承關(guān)系(“isa”) 依賴

8、關(guān)系(“usea”),面向?qū)ο蟪绦蛟O(shè)計的高效關(guān)鍵在于它讓每個對象負責(zé)執(zhí)行一組相關(guān)的任務(wù)。如果對象依賴于其他對象負責(zé)處理的任務(wù),那么它就去訪問負責(zé)這個任務(wù)的對象。這時第一個對象就請求第二個對象執(zhí)行任務(wù),即這個對象依賴于另一個對象。另外,一個對象不能直接操作另一個對象內(nèi)部的數(shù)據(jù),它也不應(yīng)讓其他對象直接訪問自己的數(shù)據(jù)。所有的通信都應(yīng)該通過方法調(diào)用來完成。通過對對象數(shù)據(jù)的封裝,就可以使可重用性最大化,減少數(shù)據(jù)依賴,并且使調(diào)試時間最小化。當(dāng)然,就像面向過程語言中的模塊一樣,不應(yīng)該讓一個對象負責(zé)過多的事情。創(chuàng)建完成少量任務(wù)、規(guī)模較小的對象會使設(shè)計和調(diào)試過程都變得較為簡單,相反,創(chuàng)建數(shù)據(jù)復(fù)雜、函數(shù)眾多的對象

9、,則會使開發(fā)過程變得極為復(fù)雜。 因此理解對象之間的關(guān)系可以幫助我們設(shè)計出可重用、易維護的代碼,降低耦合性,提高靈活性。,11,3.2 什么是消息,對象間相互作用和互相通訊是通過發(fā)送消息來實現(xiàn)的。當(dāng)對象A讓對象B執(zhí)行它的某個方法時,對象A就要向?qū)ο驜發(fā)送消息。,12,3.2 什么是消息,一個消息通常包括三部分: 接受消息的對象 接受消息的對象應(yīng)執(zhí)行的方法 方法所需要的參數(shù) 消息模式的優(yōu)點: 利用對象的方法來表示對象的行為,收發(fā)消息能支持對象間所有可能的交互作用。 收發(fā)消息的對象無須在同一個進程里,甚至無須在同一個機器里。,13,3.3 什么是類,定義:類是一類對象的抽象或原形,它定義了該類對象的

10、共同的狀態(tài)和方法 類和對象的區(qū)別: 類:是一類對象的原形,是對該類對象的抽象。 對象:是某個類的一個實例,是客觀存在并能夠使用的。 類的優(yōu)點: 有效地支持了軟件重用。程序員使用一個類可以反復(fù)創(chuàng)建多個對象。,第三章面向?qū)ο蟪绦蛟O(shè)計的基本概念,3.3 類,例如:對于園丁所種植的香蕉、橘子、葡萄等不同的水果對象,它們有共同的名稱屬性,以及種植和收獲的操作,因此可將它們劃歸為果園系統(tǒng)中的水果類。,3.3.1 什么是Java類,當(dāng)用戶編寫自己的Java程序時,主要工作就是編寫類。當(dāng)程序運行時,已聲明的類用來創(chuàng)建新對象。由類創(chuàng)建對象的過程稱為實例化(instantiation),每個對象都是類的一個新實例

11、(instance)。 類是一種抽象數(shù)據(jù)類型,在Java中類也被當(dāng)作一個數(shù)據(jù)類型來定義。類的語法結(jié)構(gòu)包括關(guān)鍵字class、跟在后面的類名稱。如果其繼承自某個基類,還需要使用extends關(guān)鍵字加基類名稱。 類通常不需要從頭生成。相反,他們可以從其他的類派生而來,繼承祖先類的可用類成員,包括:字段、方法等。即使是從頭創(chuàng)建的新類也必須是繼承自O(shè)bject類,只不過我們可以合法省略extends Object而已。,class 類名 extends 基類 /類的函數(shù)成員 構(gòu)造函數(shù)1; 構(gòu)造函數(shù)2; . 方法1; 方法2; . /類的數(shù)據(jù)成員 字段1; 字段2; . ,3.3.2 類成員,類成員包括數(shù)

12、據(jù)成員和函數(shù)成員。 數(shù)據(jù)成員是面向?qū)ο蟮男g(shù)語,用于表示類中的數(shù)據(jù)變量,即Java中的字段(field)。 函數(shù)成員也是面向?qū)ο蟮男g(shù)語,用于表示類中的操作。Java的函數(shù)成員包括方法和構(gòu)造函數(shù): 方法是一些封裝在類中的過程和函數(shù),用于執(zhí)行類的操作,完成類的任務(wù)。 構(gòu)造函數(shù)是一種特殊的方法,用于對象的創(chuàng)建和初始化。,3.3.3 類成員的可訪問性,類成員包括數(shù)據(jù)成員和函數(shù)成員,類的每個成員都有一個稱為可訪問性的屬性,用來保護類成員。Java有四種類成員的保護方式,分別為缺省的、public(公有的)、protected(保護的)、private(私有的)。 為了使程序具有良好易讀的風(fēng)格,建議最好在撰

13、寫類代碼時用不同的可訪問性來組織類成員,并將public成員作為對外公布的接口放在最前面,以便引起關(guān)注。,3.3.4 方法,方法是在類中定義,用來實現(xiàn)對象操作的過程或者函數(shù)。方法是類的成員,并有自己的可訪問性。Java程序中,方法的聲明和方法的實現(xiàn)是分開的。 方法與普通函數(shù)和過程不同,方法只應(yīng)用于特定類及其祖先類的對象。另外,每一個方法都有一個隱含的參數(shù),稱為this,它引用作為方法調(diào)用主體的對象。調(diào)用一個方法的語法格式是:對象名.方法名(實際參數(shù)); 實例字段和實例方法是屬于某一具體實例對象的字段和方法,必須先創(chuàng)建這個實例對象,然后才能使用這些字段和方法。對于同一個類創(chuàng)建的不同的實例對象,其

14、字段可以有不同的取值,以反映該對象的不同狀態(tài)。 除此之外,還有一種通過類就可以直接訪問的靜態(tài)字段和靜態(tài)方法,這種靜態(tài)的字段和方法用static關(guān)鍵字標(biāo)識,不需要創(chuàng)建實例就可以通過類直接訪問。,19,3.4 什么是繼承,定義:利用現(xiàn)有的類(supperclass)定義新的類(subclass), 子類可以繼承父類的屬性和方法并可以增加新的屬性和方法或重載父類的方法。 對象的繼承是一種在保持對象差異性的同時共享對象相似性的復(fù)用。它是源自類的泛化機制。這種抽象機制允許類之間共享代碼,大大減少了代碼長度并且使軟件易于維護。對象通過繼承,保證了實現(xiàn)部分緊內(nèi)聚和松耦合的良好特性。,第三章面向?qū)ο蟪绦蛟O(shè)計的

15、基本概念,3.4 什么是繼承,第三章面向?qū)ο蟪绦蛟O(shè)計的基本概念,繼承的優(yōu)點: 子類提供了基于父類公共部分的更具體的行為。利用繼承子類可以重用父類多次; 可以定義一個稱為抽象類的父類來定義一般行為。,21,3.4 什么是繼承,交通工具,汽車,卡車,旅行車,小汽車,轎車,跑車,面包車,基類/ 祖先類,父類/子類/派生類,子類/派生類,第三章面向?qū)ο蟪绦蛟O(shè)計的基本概念,3.4.1 使用繼承,基類與派生類 Java中派生類通過extends關(guān)鍵字繼承基類,并通過super關(guān)鍵字訪問基類的構(gòu)造函數(shù)和方法。 Java中所有的類都繼承了Object類的toString方法,我們可以重寫并覆蓋toString

16、方法,使之帶有對象的具體信息,以便我們跟蹤和調(diào)試對象。 繼承關(guān)系形成了樹狀的類層次結(jié)構(gòu)。繼承產(chǎn)生的派生類不能直接訪問其基類的private成員,但所有其他基類成員通過繼承成為派生類的成員后,保持它們原來的成員的可訪問性,并可在派生類中使用。,面積 = length width,周長 = 2 (length + width),Square需要重寫并覆蓋基類的calcPerimeter方法來計算周長。 周長 = 4 length,Square可以繼承基類Rectangle的calcArea方法來計算面積,無須另寫代碼,圖 42在這個UML類圖中,Square繼承了Rectangle,是Rectan

17、gle類的擴展,示例程序 41 Retangle類(Retangle.java) public class Retangle public Retangle(double l, double w) length = l; width = w; public double calcPerimeter() return 2 * (length + width); public double calcArea() return length * width; public String toString() return 長為 + length + 寬為 + width + 的長方形; protec

18、ted double length; private double width; ,示例程序 42 Square類(Square.java) public class Square extends Retangle public Square(double side) super(side,side); public double calcPerimeter() return length * 4; public String toString() return 邊長為 + length + 的正方形; ,3.4.1 使用繼承,基類與派生類 繼承在果園系統(tǒng)中的使用,3.4.2 繼承與合成,面向

19、對象程序設(shè)計中,通過合成或通過繼承都可以在不同的環(huán)境中重用已有的設(shè)計和實現(xiàn)。但經(jīng)驗表明,除非所有繼承的方法都有意義,否則還是應(yīng)當(dāng)優(yōu)先考慮使用合成而不是繼承。因為依賴于對象合成技術(shù)的設(shè)計有更好的重用性或更簡單。,簡而言之: 面向?qū)ο?對象+類+繼承+消息,第三章面向?qū)ο蟪绦蛟O(shè)計的基本概念,3.5 多態(tài),多態(tài)的意思是具有多種形態(tài),它是面向?qū)ο蟪绦蛟O(shè)計的重要思想方法。多態(tài)在面向?qū)ο蟪绦蛟O(shè)計中意味著通過動態(tài)綁定原理,使用單個變量來引用不同類的對象,自動調(diào)用引用對象類的對應(yīng)方法。 動態(tài)綁定機制,可以在運行期判定對象的類型,并調(diào)用其相應(yīng)的方法。也就是說,編譯器無需知道對象的類型,但方法的綁定和調(diào)用機制能夠

20、找出正確的方法體并加以調(diào)用。 同名方法的覆蓋(override)和重載(overload)是兩種完全不同的機制。 替代原則(substitution principle):基類應(yīng)該可以用其派生類代換。替代過程也是派生類向上轉(zhuǎn)型的過程。向上轉(zhuǎn)型是一種常用的安全的類型轉(zhuǎn)換,通過向上轉(zhuǎn)型可實現(xiàn)多態(tài)性。,3.5.1 多態(tài)與動態(tài)綁定,派生類的對象具有多個類型 動態(tài)綁定實現(xiàn)多態(tài),public int gain() int g=input*2;/收益是投入的兩倍 return g; ,覆蓋(override),fruitsi.gain(); 程序運行時動態(tài)確定實現(xiàn)的gain方法,fruits0 = new

21、TropicalFruit(香蕉, 1000); fruits1 = new Berry(葡萄, 2000); fruits2 = new TropicalFruit(菠蘿, 2000); fruits3 = new Berry(草莓, 1000); fruits4 = new CitrusFruit(橘子, 1000);,我們可以像對待基類對象那樣對待派生類對象,它們的共性表現(xiàn)在繼承下來的同名類成員。所有繼承于共同基類的派生類對象可以當(dāng)做是這些基類的對象。 Food myFood; Fruit myFruit; CitrusFruit orange; orange = new CitrusF

22、ruit(橘子,1000); /創(chuàng)建橘子對象 myFood = orange(); /相當(dāng)于myFood = (Food)orange; myFood.eat(); /調(diào)用的是CitrusFruit的eat方法:剝皮吃橘子 myFruit = orange; /相當(dāng)于myFruit = (Fruit)orange; myFruit.eat(); /調(diào)用的還是CitrusFruit的eat方法:剝皮吃橘子,3.5.2 方法的綁定,所謂的方法綁定(Binding)就是建立方法調(diào)用(Method Call)和方法本體(Method Body)之間的關(guān)聯(lián)。如果方法是“早綁定”、“先期綁定”的,也就是在

23、編譯時編譯器就能準確地判斷應(yīng)該調(diào)用的那個方法稱為靜態(tài)綁定方法。Java中這類方法包括private、static、final方法以及構(gòu)造函數(shù)。如果方法是“晚綁定”、“后期綁定”的,也就是在運行時由虛擬機調(diào)用同該對象變量所指對象的實際類型相匹配的方法版本,動態(tài)決定的方法,稱為動態(tài)綁定方法。Java中除了private、static、final方法以及構(gòu)造函數(shù)外的其他方法都是動態(tài)綁定方法。 Java語言中使用關(guān)鍵字final來定義常量。但是關(guān)鍵字final還有另外2個重要用途:一個是阻止類(final類)被繼承,另一個是阻止方法(final方法)被覆蓋(override)。 抽象方法是一種沒有實現(xiàn)

24、的方法。定義有抽象方法的類我們稱之為抽象類。抽象方法和抽象類都使用abstract關(guān)鍵字來標(biāo)識。含有抽象方法的類必須定義為抽象類,但是沒有抽象方法的類也可以定義為抽象類。但無論如何,抽象類都不能創(chuàng)建實例。,3.6 接口,接口的概念是建立在封裝的基礎(chǔ)之上。在面向?qū)ο蟪绦蛟O(shè)計中,封裝是指對象的使用者通過預(yù)先定義的接口關(guān)聯(lián)到某一對象的服務(wù)和數(shù)據(jù)時,無需知道這些服務(wù)是如何實現(xiàn)的。因此接口在面向?qū)ο蟪绦蛟O(shè)計中有著重要的地位。 在Java中,抽象類和接口(Interface)都是一種接口抽象機制,符合接口的特點。習(xí)慣上我們只把Java語法中的接口(Interface)作為接口的窄定義。該接口是一種類型,它

25、定義了能被一個類實現(xiàn)的方法。,3.6.1 接口的概念,接口是指一些方法特征的集合,它關(guān)心的是方法的特征定義(例如方法的名稱、參數(shù)的類型及數(shù)量),而不是方法的具體實現(xiàn)。在Java中,抽象類和接口都是一種接口抽象機制,符合接口的特點。 接口提供了一種抽象機制 接口使即插即用變得可能 接口針對抽象而不是針對實現(xiàn),3.6.2 Java接口,定義接口 實現(xiàn)接口 接口與多重繼承,public interface 接口名 extends 祖先接口名 返回類型 方法名(參數(shù)列表); . 類型 常量字段名 = 值; . ,public class 類名 extends 祖先類名 implements 接口名 ,

26、 其它接口名. /類的實現(xiàn)代碼 . ,下面代碼通過實現(xiàn)Writeable接口和Eatable接口的Paper類代碼,演示了多重繼承的程序設(shè)計: public class Paper implements Eatable, Writeable public void eat() System.out.println(撕紙吃,+TASTELESS); public void write() System.out.println(在紙上書寫:); ,3.6.3 接口應(yīng)用實例,使用接口的好處是便于系統(tǒng)的擴展、維護和重用。接口的使用使得代碼模塊之間的耦合減弱。具體表現(xiàn)在對象之間的依賴關(guān)系弱化為客戶服務(wù)的

27、關(guān)系,即客戶對象請求服務(wù),服務(wù)對象提供服務(wù),而接口則成了提供服務(wù)的一種契約。 沒有經(jīng)驗的程序員設(shè)計接口時通常會犯合并接口和預(yù)留接口這兩個錯誤。根據(jù)接口隔離法則,我們在設(shè)計接口時不應(yīng)該強迫客戶端依賴于他們用不上的方法,而是應(yīng)該提供職責(zé)明確、功能專一的最小化接口。除非必要,應(yīng)該嚴格控制接口寬度,避免接口冗余。,面向?qū)ο蟮奶攸c主要概括為: 抽象性 繼承性 多態(tài)性 封裝性,小結(jié):,3.7 面向?qū)ο蠛蛯ο蠼?面向?qū)ο蠓椒▽W(xué)是面向?qū)ο蟪绦蛟O(shè)計技術(shù)的理論基礎(chǔ)。面向?qū)ο蟪绦蛟O(shè)計具有符合人類抽象思維的認知習(xí)慣,使得程序開發(fā)過程與人類的認知過程同步,便于建立規(guī)范化的分析設(shè)計方法,使程序具有更好的封裝性、可讀性、

28、可維護性、可重用性等一系列優(yōu)點。 面向?qū)ο蠹夹g(shù)以基本對象模型為單位,將對象內(nèi)部處理細節(jié)封裝在模型內(nèi)部,重視對象模塊間的接口聯(lián)系和對象與外部環(huán)境間的聯(lián)系,能層次清晰地表示對象模型。 模型提供了一個物理系統(tǒng)的抽象,模型可以讓工程師們忽略無關(guān)的細節(jié)而把注意力集中到系統(tǒng)的重要部分來進行思考。軟件模型除了用于系統(tǒng)設(shè)計還可以用在很多的方面,例如預(yù)期系統(tǒng)的質(zhì)量、當(dāng)系統(tǒng)的某些方面變化時推理特定的屬性、測試關(guān)鍵的系統(tǒng)特征等。模型可以先開發(fā)出來用于指導(dǎo)物理系統(tǒng)的開發(fā),或者也可以由一個已存在的系統(tǒng)或者開發(fā)中的系統(tǒng)產(chǎn)生,作為理解系統(tǒng)行為、優(yōu)化系統(tǒng)實現(xiàn)的手段。統(tǒng)一建模語言UML是一個通用的可視化建模語言,用于對軟件進行

29、描述、可視化處理、構(gòu)造和建立軟件系統(tǒng)制品的文檔。,3.7.1 面向?qū)ο蠡驹?面向?qū)ο蠹夹g(shù),正是利用對現(xiàn)實世界中對象的抽象和對象之間相互關(guān)聯(lián)和相互作用的描述來對現(xiàn)實世界進行模擬,并且使其映射到目標(biāo)系統(tǒng)中。所以面向?qū)ο蟮奶攸c主要概括為抽象性、繼承性、封裝性和多態(tài)性。 抽象性指對現(xiàn)實世界中某一類實體或事件進行抽象,從中提取共同信息,找出共同規(guī)律,反過來又把它們集中在一個集合中,定義為所設(shè)計目標(biāo)系統(tǒng)中的對象。 繼承性新的對象類由繼承原有對象類的某些特性或全部特性而產(chǎn)生出來,原有對象類稱為基類(或超類、父類),新的對象類稱為派生類(或子類),派生類可以直接繼承基類的共性,又允許派生類發(fā)展自己的個性。

30、繼承性簡化了對新的對象類的設(shè)計。 封裝性是指對象的使用者通過預(yù)先定義的接口關(guān)聯(lián)到某一對象的服務(wù)和數(shù)據(jù)時,無需知道這些服務(wù)是如何實現(xiàn)的。即用戶使用對象時無需知道對象內(nèi)部的運行細節(jié)。這樣,以前所開發(fā)的系統(tǒng)中已使用的對象能夠在新系統(tǒng)中重新采用,減少了新系統(tǒng)中分析、設(shè)計和編程的工作量。 多態(tài)性是指不同類型的對象可以對相同的激勵做出適當(dāng)?shù)牟煌鄳?yīng)的能力。多態(tài)性豐富了對象的內(nèi)容,擴大了對象的適應(yīng)性,改變了對象單一繼承的關(guān)系。,3.7.2 建立面向?qū)ο蟮乃季S,對象是建立面向?qū)ο蟪绦蛩蕾嚨幕締卧?。用更專業(yè)的話來說,所謂對象就是一種代碼的實例,這種代碼執(zhí)行特定的功能,具有自包含或者封裝的性質(zhì)。這種封裝代碼通

31、常叫做類 。 “封裝”的對象具有自己的函數(shù),這種函數(shù)被稱作“方法”,而對象的屬性則被稱為“字段”。當(dāng)對象內(nèi)部定義了字段的時候,它們通常不能擴展到實例以外。 用于創(chuàng)建對象的類有一種功能強大的特性,這就是它們可以繼承其他類。 在繼承了類后,我們可以通過覆蓋(override)方法來獲得希望的結(jié)果。 面向?qū)ο髲娬{(diào)從問題域的概念到軟件程序和界面的直接映射;心理學(xué)的研究也表明,把客觀世界看成是許多對象更接近人類的自然思維方式。對象比函數(shù)更為穩(wěn)定;軟件需求的變動往往是功能相關(guān)的變動,而其功能的執(zhí)行者對象通常不會有大的變動。另外,面向?qū)ο蟮拈_發(fā)也支持、鼓勵軟件工程實踐中的信息隱藏、數(shù)據(jù)抽象和封裝。在一個對象內(nèi)部的修改被局部隔離。面向?qū)ο箝_發(fā)的軟件易于修改、擴充和維護。,3.7.3 UML和對象建模,模型與建模 模型提供了一個物理系統(tǒng)的抽象,模型可以讓工程師們忽略無關(guān)的細節(jié)而把注意力集中到系統(tǒng)的重要部分來進行思考。從軟件建模技術(shù)的發(fā)展過程中,人們認識到建模語言是一種圖形化的文檔描述性語言,利用它可以解決在軟件建模過程中存在的溝通障礙問題。,

溫馨提示

  • 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

提交評論