




版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、什么是面向?qū)ο?Object-Oriented)面向?qū)ο蟛粌H是一些具體的軟件開發(fā)技術與策略,而且是一整套關于如何看待軟件系統(tǒng)與現(xiàn)實世界的關系,以什么觀點來研究問題并進行求解,以及如何進行系統(tǒng)構造的軟件方法學。面向?qū)ο蠓椒ǖ幕舅枷胧牵簭默F(xiàn)實世界中客觀存在的事物(對象)出發(fā)來構造軟件系統(tǒng),并在系統(tǒng)構造中盡可能運用人類的自然思維方式。面向?qū)ο蠓椒ㄓ腥缦乱恍┲饕攸c: 從問題域中客觀存在的事物出發(fā)來構造軟件系統(tǒng),用對象作為對這些事物的抽象表示,并以此作為系統(tǒng)的基本構成單位。 事物的靜態(tài)特征(即可用一些數(shù)據(jù)來表達特征)用對象的屬性表示;事物的動態(tài)特征(即事物的行為)用對象的服務(操作)表示。 對象的屬
2、性與操作結(jié)合為一體,成為一個獨立的實體,對外屏蔽內(nèi)部細節(jié)(稱作封裝) 對事物進行分類。把具體有相同屬性和相同操作的對象歸為一類,類是這些對象的抽象描述,每個對象是它的類的一個實例。 通過不同程度上運用抽象的原則(較多或較少的忽略事物之間的差異)可以得到一般的類和較特殊的類。特殊類繼承一般類的屬性和操作,面向?qū)ο蠓椒ㄖС诌@種繼承關系的描述和實現(xiàn),從而簡化系統(tǒng)的構造過程及其文檔。 復雜的對象可以用簡單的對象作為其構成部分(稱作聚合) 對象之間通過消息進行通信,以實現(xiàn)對象之間的動態(tài)聯(lián)系。 通過關聯(lián)表達對象之間的靜態(tài)關系面向?qū)ο蟮姆椒ㄊ且环N運用對象、類、繼承、封裝、聚合、消息傳送、多態(tài)性等概念來構造系
3、統(tǒng)的軟件開發(fā)方法。1對象(1)從概念層面講,對象是某種擁有責任的抽象。(2)從規(guī)格層面講,對象是一系列可以被其他對象使用的公共接口。(3)從語言實現(xiàn)層面講,對象封裝了代碼和數(shù)據(jù)。2軟件開發(fā)中的經(jīng)典階段:需求、分析、設計、規(guī)范、實現(xiàn)、測試、部署、維護。3設計7原則:開閉原則、里氏代換原則、依賴倒轉(zhuǎn)原則、合成/聚合復用原則、迪米特原則、接口隔離原則、單一職責原則。4面向?qū)ο蟮姆椒▽W:UML(統(tǒng)一建模語言)、RUP(統(tǒng)一軟件開發(fā)過程)、XP(極限編程)。開發(fā)方法:Booch、Coad、OMT、UML、OOSE、WirfsBrock5OOA運用面向?qū)ο蠓椒ㄟM行需求分析。OOD運用面向?qū)ο蠓椒ㄟM行系統(tǒng)設
4、計。OOP運用面向?qū)ο蠓椒ㄟM行程序設計。6OOA的基本任務:是運用面向?qū)ο蟮姆椒?,對問題域和系統(tǒng)責任進行分析和理解,對其中的事物和它們之間的關系產(chǎn)生正確的認識,找出描述問題域及系統(tǒng)責任所需的類及對象,定義這些類和對象的屬性和操作,以及它們之間所形成的結(jié)構、靜態(tài)聯(lián)系和動態(tài)聯(lián)系。最終目的:是產(chǎn)生一個符合用戶需求,并能夠直接反映問題域和系統(tǒng)責任的OOA模型及其詳細說明。優(yōu)點:(1)加強了對問題域和系統(tǒng)責任的理解。(2)改進與分析有關的各類人員之間的交流。(3)對需求的變化具有較強的適應性。(4)支持軟件復用。OOA的三大策略是:屬性策略、方法策略、對象策略。7(1)封裝:是指對象在其操作中隱藏屬性。
5、它是一種信息隱蔽技術,用戶只能看見對象封裝界面上的信息,對象的內(nèi)部實現(xiàn)對用戶是隱蔽的。封裝的目的是使對象的使用者和生產(chǎn)者分開,使對象的定義和實現(xiàn)分開。例如:要從同事那里借錢,在商店購買食物,就不會搶奪同事的錢包,大翻一通,看看里面是否有足夠的錢。而應該詢問他們是否可以借你一些錢,他們就會自己翻錢包。以表示圓的一個對象作為封裝的例子。圓的操作應能計算出半徑、直徑、周長和面積。假定選擇存儲直徑,要訪問直徑的程序員都會選擇存儲直徑屬性,而不是通過“獲取直徑”的操作來訪問。如果在軟件的后續(xù)版本中要存儲的是半徑,就必須找出系統(tǒng)中直接訪問直徑的所有代碼,并更正它們,有了封裝,就不會有問題。(2)繼承:可以
6、指定類從父類中獲取一些特性,再添加它自己的獨特特性。繼承是類間的基本關系,它是基于層次關系的不同類共享數(shù)據(jù)和操作的一種機制。父類中定義了其所有子類的公共屬性和操作,在子類中除了定義自己特有的屬性和操作外,可以繼承父類的屬性和操作,也可以對父類中的操作重新定義其實現(xiàn)方法。例如:在面向?qū)ο笾?,我們可以把洗衣機、電冰箱、微波爐、收音機看成是家用電氣類的子類,也可以說家用電器類是這些類的超類。家用電器類具有的屬性OnOffSwitch和electricWire,具有turnOn()和turnOff()操作。因此,如果你知道某物是家用電器,那么就會立即知道它具有家用電器類的屬性和操作,這種關系就是繼承。
7、每個家用電器類的子類都繼承了家用電器類的特征。同時,每個子類都增加了自己的屬性和操作。(3)多態(tài):是指同一操作作用于不同的對象上可以有不同的解釋,并產(chǎn)生不同的執(zhí)行結(jié)果。例如:“畫”操作,作用在“矩形”對象上,則在屏幕上畫一個矩形;作用在“圓”對象上, 則在屏幕上畫一個圓。也就是說,相同操作的消息發(fā)送給不同對象時,每個對象將根據(jù)自己所屬類中定義的這個操作方法去執(zhí)行,從而產(chǎn)生不同的結(jié)果。RUP螺旋式、迭代式和遞增式方法稱為Rational Unified ProcessRUP核心工作流RUP中有9個核心工作流,分為6個核心過程工作流和3個核心支持工作流1.商業(yè)建模2.需求3.分析與設計4.實現(xiàn)5.
8、測試6.部署7.配置和變更管理8.項目管理9.環(huán)境重載函數(shù)重載是指在同一個作用域內(nèi)的若干個參數(shù)特征不同的函數(shù)可以使用相同的函數(shù)名字。運算符重載是指同一個運算符可以施加于不同類型的操作數(shù)上面。抽象方法和虛方法的區(qū)別:1(abstract)抽象方法和(virtual)虛方法的區(qū)別在于:虛方法有一個實現(xiàn)部分可以為子類實現(xiàn)有共同的方法,并為派生提供了覆蓋該方法的選項,相反,抽象方法沒有提供實現(xiàn)部分,強制派生覆蓋方法(否則派生類不能成具體類).2.(abstract)抽象方法只能在抽象類中聲明,(virtual)虛方法不是。3.(abstract)抽象方法不能聲明方法實體,虛方法可以。4.包含抽象方法(
9、只有抽象類才可以包含抽象方法)的類不能實例化(也就是說只可以使用predected和private修飾符),虛方法可以Java中抽象類和接口的區(qū)別:1.一個類只能繼承一個抽象類。但是,一個類卻可以實現(xiàn)多個接口interface2.在abstract class 中可以有自己的數(shù)據(jù)成員,也可以有非abstract的成員方法,而在interface中,只能夠有靜態(tài)的不能被修改的數(shù)據(jù)成員(也就是必須是static final的,不過在 interface中一般不定義數(shù)據(jù)成員),所有的成員方法都是abstract的。3.abstract class和interface所反映出的設計理念不同。其實abs
10、tract class表示的是"is-a"關系,interface表示的是"like-a"關系。4.實現(xiàn)抽象類和接口的類必須實現(xiàn)其中的所有方法。抽象類中可以有非抽象方法。但是,接口中必須都是抽象方法(默認都是 public abstract 類型的)。5.接口中定義的變量默認是public static final 型,且必須給其初值,所以實現(xiàn)類中不能重新定義,也不能改變其值。6.抽象類中的變量,其值可以在子類中重新定義,也可以重新賦值。原則之間的相互關系:開閉原則是構造可維護性復用性軟件的基石,其他原則是達成開閉原則的手段和工具。為什么需要使用單例模式
11、屬性是系統(tǒng)的一種"資源",應當避免有多余一個的對象讀取特別是存儲屬性。此外,屬性的讀取可能會在很多地方發(fā)生,創(chuàng)建屬性對象的地方應當在哪里不是很清楚。換言之,屬性管理器應當自己創(chuàng)建自己的實例,并且自己向系統(tǒng)全程提供這一事例。因此,屬性文件管理器應當是一個單例模式負責。q 作為對象的創(chuàng)建模式GOF95, 單例模式確保某一個類只有一個實例,而且自行實例化并向整個系統(tǒng)提供這個實例。這個類稱為單例類。q 單例模式的要點單例模式的要點有三個;q 一是某各類只能有一個實例;q 二是它必須自行創(chuàng)建這個實例;q 三是它必須自行向整個系統(tǒng)提供這個實例。 1 使用簡單工廠模式設計計算器程序/Co
12、mputer.javapublic class Computer public static void main(String args) throws IOException String strA ;String strB ;String strO ; try BufferedReader br = new BufferedReader(new InputStreamReader (System.in);System.out.print("請輸入數(shù)據(jù)A:") ;strA = br.readLine( ) ;System.out.print("請選擇運算符號(+
13、、-、*、/):" ) ;strO= br.readLine( );System.out.print("請輸入數(shù)據(jù)B:") ;strB = br.readLine( ) ;String strResult = "" ;Operation oper = null ;IFactory operFactory = null ;if(strO.equals("+") ) operFactory= new AddFactory( ) ;if(strO.equals("-") ) operFactory = new
14、SubFactory( );oper = operFactory.createOperation( );oper.SetNumberA(Double.valueOf(strA).doubleValue( ) ) ;oper.SetNumberB(Double.valueOf(strB).doubleValue( ) ) ; strResult = Double.toString(oper.GetResult( ) ) ;System.out.print(strResult) ;catch(Exception e ) /Operation.Javapublic abstract class Op
15、eration private double numberA;private double numberB;public double GetNumberA()return numberA;public void SetNumberA(double a)numberA = a;public double GetNumberB()return numberB;public void SetNumberB(double b)numberB = b;public abstract double GetResult(); /IFactory.Javapublic interface IFactory
16、public abstract Operation createOperation();/AddFactory.Javapublic class AddFactory implements IFactory public Operation createOperation() return new OperationAdd();public class SubFactory implements IFactory public Operation createOperation() return new OperationSub();class OperationAdd extends Ope
17、ration public double GetResult()double result = 0;result = super.GetNumberA() + super.GetNumberB();return result;class OperationSub extends Operation public double GetResult()double result= 0;result = super.GetNumberA() - super.GetNumberB();return result;簡單工廠優(yōu)點:簡單工廠模式能夠根據(jù)外界給定的信息,決定究竟應該創(chuàng)建哪個具體類的對象。通過它
18、,外界可以從直接創(chuàng)建具體產(chǎn)品對 象的尷尬局面中擺脫出來。 外界與具體類隔離開來,偶合性低。 明確區(qū)分了各自的職責和權力,有利于整個軟件體系結(jié)構的優(yōu)化。缺點:工廠類集中了所有實例的創(chuàng)建邏輯,容易違反GRASPR的高內(nèi)聚的責任分配原則 雖然簡單工廠模式能夠適應一定的變化,但是它所能解決的問題是遠遠有限的。它所能創(chuàng)建的類只能是事先教考慮到的,如果需要添加新的類,則就需要改變工廠類了。(這個問題在工廠方法模式將得到很好的解決)2 策略模式:商場促銷public class Context public Strategy strategy ; public Context(char name) thro
19、ws Exception switch(name) case A : strategy = new ConcreteStrategyA() ; break ; case B : strategy = new ConcreteStrategyB() ; break ; case C : strategy = new ConcreteStrategyC() ; break ; default : throw new Exception(“沒有此類輸入”);public void contextInterface() strategy.algorithInterface();public abstr
20、act class Strategy public abstract void algorithInterface() ;public class ConcreteStrategyA extends Strategy public abstract void algorithInterface() system.out.println(“打折算法”) ; public class ConcreteStrategyB extends Strategy public abstract void algorithInterface() system.out.println(“滿100送60算法”)
21、; public class ConcreteStrategyC extends Strategy public abstract void algorithInterface() system.out.println(“正常收費,不參加活動!”) ; public class Client public static void main(String args) throws Exception Context context ; context = new Context(A) ; context.contextInterface() ;策略模式優(yōu)點: 1. 策略模式提供了管理相關的算法族
22、的辦法。2. 策略模式提供了可以替換繼承關系的辦法。3. 使用策略模式可以避免使用多重條件轉(zhuǎn)移語句。缺點: 1. 客戶端必須知道所有的策略類,并自行決定使用哪一個策略類。這就意味著客戶端必須理解這些算法的區(qū)別,以便適時選擇恰當?shù)乃惴?。換言之,策略模式只適用于客戶端知道所有的算法或行為的情況。2. 策略模式造成很多的策略類。有時候可以通過把依賴于環(huán)境的狀態(tài)保存到客戶端里面,而將策略類設計成可共享的,這樣策略類實例可以被不同客戶端使用。換言之,可以使用享元模式來減少對象的數(shù)量。特點:(1)Strategy屬于設計模式中的對象行為型模式,主要是定義一系列的算法,把這些算法一個個封裝成單獨的類,使它
23、們可相互替換。本模式使得算法可獨立于使用它的客戶而變化。(2)它提供了一種用多個行為中的一個行為來配置一個類的方法。 (3)它需要使用一個算法的不同變體。(4)它以避免暴露復雜的、與算法相關的數(shù)據(jù)結(jié)構。 (5)一個類定義了多種行為, 并且這些行為在這個類的操作中以多個條件語句的形式出現(xiàn)。將相關的條件分支移入它們各自的Strategy 類中以代替這些條件語句。3 裝飾模式/Person.Javapublic class Person private String name;public Person()public Person(String name) = name;publ
24、ic void show()System.out.println("裝扮的"+name);/Client.Javapublic class Clientpublic static void main(String args)Person person = new Person("流浪");System.out.println("第一種裝扮");Clothing dtx = new Tshirt();Clothing ckk = new CrossPants();dtx.Decorator(person);ckk.Decorator(d
25、tx);ckk.show();System.out.println("第二種裝扮");Clothing xz = new Suit();Clothing ld = new Tie();xz.Decorator(person);ld.Decorator(xz);ld.show();/Clothing.Javapublic class Clothing extends Personprotected Person component;public void Decorator(Person component)ponent = component;public void sho
26、w()if(component != null)component.show();/CrossPants.Javapublic class CrossPants extends Clothingpublic void show()System.out.println("穿跨褲");super.show();/suit.Javapublic class Suit extends Clothing public void show()System.out.println("穿西裝");super.show();/Tie.Javapublic class Ti
27、e extends Clothing public void show()System.out.println("打領帶");super.show();/Tshirt.Javapublic class Tshirt extends Clothing public void show()System.out.println("Tshirt");super.show();特點:動態(tài)地給一個對象添加一些額外的職責。就增加功能來說,使用裝飾模式相比用生成子類方式達到功能的擴充顯得更為靈活。我們通??梢允褂美^承來實現(xiàn)功能的拓展,如果這些需要拓展的功能種類很繁多,那么勢必生成很多子類,增加系統(tǒng)的復雜性,同時,使用繼承實現(xiàn)功能拓展,我們必須可預見這些拓展功能,這些功能是編譯時就確定了,是靜態(tài)的。使用Decorator時這些功能需要由用戶動態(tài)決定加入的方式和時機.裝飾模式提供了“即插即用”的方法,在運行期間決定何時增加何種功能。裝飾模式的優(yōu)點和缺點 使用裝飾模式主要有以下的優(yōu)點:1. 裝飾模式與繼承關系的目的都是要擴展對象的功能,但是裝飾模式可以提供比繼承更多的靈活性。 2. 通過使用不同的具
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 工業(yè)信息安全與防護技術
- 工業(yè)園區(qū)環(huán)境管理與綜合治理方案
- 工業(yè)品物流配送模式探討
- 工業(yè)產(chǎn)品設計及優(yōu)化
- 工業(yè)互聯(lián)網(wǎng)的產(chǎn)業(yè)升級與轉(zhuǎn)型
- 工業(yè)互聯(lián)網(wǎng)與數(shù)據(jù)中心網(wǎng)絡的融合實踐
- 少數(shù)民族文化在旅游中的傳承與發(fā)展研究
- 崇明島生物多樣性保護策略研究
- 小微金融在村銀行的運用與實踐研究
- 小學英語課堂互動游戲設計與實踐
- 2025年養(yǎng)老護理員職業(yè)考試試題及答案
- 揭陽惠來縣紀委監(jiān)委等部門屬下事業(yè)單位招聘筆試真題2024
- 黨課課件含講稿:以作風建設新成效激發(fā)干事創(chuàng)業(yè)新作為
- 超市百貨考試試題及答案
- 2025全國農(nóng)業(yè)(水產(chǎn))行業(yè)職業(yè)技能大賽(水生物病害防治員)選拔賽試題庫(含答案)
- 蘇州市昆山市惠民物業(yè)管理有限公司招聘考試真題2024
- 模擬電子技術(山東聯(lián)盟-山東建筑大學)知到智慧樹期末考試答案題庫2025年山東建筑大學
- 2025年中國膨潤土貓砂項目投資可行性研究報告
- 2025華陽新材料科技集團有限公司招聘(500人)筆試參考題庫附帶答案詳解
- GA 1812.2-2024銀行系統(tǒng)反恐怖防范要求第2部分:數(shù)據(jù)中心
- 《嬰幼兒游戲活動實施》課件-項目2 感官游戲設計與實施 9.2 2-3歲感官游戲設計與實施
評論
0/150
提交評論