![面向?qū)ο笾R(shí)點(diǎn)整理_第1頁(yè)](http://file2.renrendoc.com/fileroot_temp3/2021-12/2/b519c4e0-0d22-4390-847a-d2f23e348af4/b519c4e0-0d22-4390-847a-d2f23e348af41.gif)
![面向?qū)ο笾R(shí)點(diǎn)整理_第2頁(yè)](http://file2.renrendoc.com/fileroot_temp3/2021-12/2/b519c4e0-0d22-4390-847a-d2f23e348af4/b519c4e0-0d22-4390-847a-d2f23e348af42.gif)
![面向?qū)ο笾R(shí)點(diǎn)整理_第3頁(yè)](http://file2.renrendoc.com/fileroot_temp3/2021-12/2/b519c4e0-0d22-4390-847a-d2f23e348af4/b519c4e0-0d22-4390-847a-d2f23e348af43.gif)
![面向?qū)ο笾R(shí)點(diǎn)整理_第4頁(yè)](http://file2.renrendoc.com/fileroot_temp3/2021-12/2/b519c4e0-0d22-4390-847a-d2f23e348af4/b519c4e0-0d22-4390-847a-d2f23e348af44.gif)
![面向?qū)ο笾R(shí)點(diǎn)整理_第5頁(yè)](http://file2.renrendoc.com/fileroot_temp3/2021-12/2/b519c4e0-0d22-4390-847a-d2f23e348af4/b519c4e0-0d22-4390-847a-d2f23e348af45.gif)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<h1>第一章</h1>設(shè)計(jì)模式:解決反復(fù)出現(xiàn)的問(wèn)題的設(shè)計(jì)經(jīng)驗(yàn)面向?qū)ο蟮姆椒?一種分析方法,設(shè)計(jì)方法和思維方法.出發(fā)點(diǎn):使人們分析設(shè)計(jì)與實(shí)現(xiàn)一個(gè)系統(tǒng)的方法盡可能接近人們認(rèn)識(shí)一個(gè)系統(tǒng)的方法.使描述問(wèn)題的問(wèn)題空間與解決問(wèn)題的問(wèn)題空間盡可能一致.基本思想:從現(xiàn)實(shí)世界中客觀存在的事物出發(fā)來(lái)建立軟件系統(tǒng).充分運(yùn)用人類日常的思維方法.定義:是一種運(yùn)用對(duì)象,類,繼承,封裝,聚合,關(guān)聯(lián),消息,多態(tài)性等概念來(lái)構(gòu)造系統(tǒng)的軟件開(kāi)發(fā)方法.主要特點(diǎn):對(duì)象,屬性與服務(wù),封裝,分類,繼承,聚合,消息,關(guān)聯(lián).程序設(shè)計(jì)思想的發(fā)展歷程:階段1:大型機(jī),運(yùn)算力弱,科學(xué)計(jì)算,計(jì)算密集,小型程序,順序程序,個(gè)體
2、工作階段2:外設(shè)發(fā)展,運(yùn)算力增強(qiáng),數(shù)據(jù)密集,大型程序,并發(fā)程序.程序,管理失控,難以控制程序復(fù)雜性.結(jié)構(gòu)化程序設(shè)計(jì):自頂向下,逐步求精.模塊化,使用子程序.階段3:微機(jī).功能抽象困難,易變,分解結(jié)構(gòu)隨意,重用性差.解決:面向現(xiàn)實(shí),開(kāi)發(fā)不變性.面向?qū)ο笈c結(jié)構(gòu)化設(shè)計(jì)比較:復(fù)用性,問(wèn)題依賴.傳統(tǒng)方法面向?qū)ο蠓椒〝?shù)據(jù)結(jié)構(gòu)+算法以對(duì)象為中心組織數(shù)據(jù)屬性操作服務(wù)類型與變量類與對(duì)象函數(shù)調(diào)用消息傳送類型與子類型繼承構(gòu)造類型整體-部分結(jié)構(gòu),聚合指針關(guān)聯(lián)面向?qū)ο笫擒浖椒▽W(xué)的返璞歸真階段4:網(wǎng)絡(luò),分布計(jì)算,分布對(duì)象(COMBA,COM,RMI)面向?qū)ο蟀l(fā)展歷程:1960s:Simula67,引入了類和繼承1970
3、s:CLU,并發(fā)Pascal,Ada,Modula-2,支持?jǐn)?shù)據(jù)與操作的封裝Flex,類,對(duì)象,繼承Smalltalk-72,正式使用面向?qū)ο筮@個(gè)術(shù)語(yǔ),設(shè)計(jì)方法正式形成.Simula-67->SmallTalk-80->C+->Java發(fā)展:從編程發(fā)展到設(shè)計(jì),分析,發(fā)展到整個(gè)生命周期.幾乎覆蓋計(jì)算機(jī)軟件領(lǐng)域的所有分支.1990s后:UML,圖形化建模語(yǔ)言,為面向?qū)ο笙到y(tǒng)建立模型,具有靈活性,結(jié)構(gòu)型圖和行為型圖設(shè)計(jì)模式:使系統(tǒng)更穩(wěn)定,易修改,擴(kuò)展,理解,測(cè)試.三大類:創(chuàng)建型,結(jié)構(gòu)型,行為型代理和團(tuán)體:一個(gè)面向?qū)ο蟮某绦蚴怯幸粋€(gè)相互作用的代理團(tuán)體組成,這些代理被稱為對(duì)象.每一個(gè)對(duì)
4、象承擔(dān)一個(gè)角色.每一個(gè)對(duì)象都提供一種服務(wù)或者執(zhí)行一種動(dòng)作,為其他對(duì)象服務(wù).對(duì)象:對(duì)象是獨(dú)立存在的客觀事物,它由一組屬性和一組操作構(gòu)成.屬性和操作是對(duì)象的兩大要素.屬性隱藏,操作共享.性質(zhì):封裝性,自治性,通信性,暫存性,永久性.復(fù)合對(duì)象:劃分,聚合部分/整體關(guān)系中有兩種方式,組合和聚合,組合是部分僅屬于一個(gè)整體,聚合整體可能有交叉.消息和方法:行為的啟動(dòng)通過(guò)將消息傳遞給指定對(duì)象.如果接收了消息,就要接受消息的行為責(zé)任.消息傳遞與過(guò)程調(diào)用:指定的接受者,動(dòng)態(tài)綁定.信息隱藏:不用知道具體細(xì)節(jié).責(zé)任:用責(zé)任描述行為,只管結(jié)果,不管方法.不干預(yù)原則:允許對(duì)象以任何他認(rèn)為合適的不干涉其他對(duì)象的方式來(lái)完成
5、任務(wù).類和實(shí)例:所有對(duì)象都是類的實(shí)例.響應(yīng)方式由類的接收器來(lái)決定.類的所有對(duì)象使用同樣的方法響應(yīng)相似的消息.對(duì)象都是類的實(shí)例,類是一組相似的對(duì)象.類是對(duì)象相關(guān)行為的存儲(chǔ)庫(kù).類的層次:每一層次上都可以了解特定的信息,這些信息適用于所有較低層次.繼承:類被組織成單根的樹(shù)狀結(jié)構(gòu).與類實(shí)例相關(guān)的內(nèi)存和行為都會(huì)被樹(shù)結(jié)構(gòu)中的后代自動(dòng)繼承.<s>繼承表達(dá)了對(duì)象的一般與特殊的關(guān)系.類可以被組織成一個(gè)有層次的繼承結(jié)構(gòu).子類繼承父類屬性.抽象父類指沒(méi)有具體實(shí)例,只用來(lái)產(chǎn)生子類泛化和特化的關(guān)系.</s>改寫(xiě):子類覆蓋父類的方法,相同名稱.方法綁定與改寫(xiě):接收器搜索并執(zhí)行相應(yīng)的方法以響應(yīng)給定的
6、消息.如果沒(méi)有匹配就向父類鏈搜索.多態(tài)性:一般類中定義的屬性和服務(wù),特殊類中不改變名字,通過(guò)各自不同的實(shí)現(xiàn)具有不同的行為.OOP定義:1.一切皆對(duì)象.2.計(jì)算通過(guò)對(duì)象間相互通信,請(qǐng)求其他對(duì)象執(zhí)行動(dòng)作來(lái)實(shí)現(xiàn).對(duì)象間通過(guò)發(fā)送和接收消息來(lái)通信.3.每個(gè)對(duì)象都有自己的內(nèi)存,其中可能包括其他的對(duì)象.4.對(duì)象都是類的實(shí)例.5.類是對(duì)象相關(guān)行為的存儲(chǔ)庫(kù).6.類被組織成有單個(gè)根節(jié)點(diǎn)的樹(shù)狀結(jié)構(gòu).<h1>第二章</h2>非面向?qū)ο缶幊?程序往往是面向過(guò)程或者面向數(shù)據(jù)的.這些程序中通常有可全訪問(wèn)的數(shù)據(jù)及過(guò)程,由主程序或其子程序來(lái)控制及操作這些數(shù)據(jù).程序每個(gè)部分都可以訪問(wèn)全局?jǐn)?shù)據(jù),得到數(shù)據(jù)的一
7、部分,操作這些數(shù)據(jù),然后在需要時(shí)保存修改.面向?qū)ο缶幊?程序被劃分為一組通信的對(duì)象.每個(gè)對(duì)象均封裝了某個(gè)概念所有行為及信息.功能和數(shù)據(jù)被分布在對(duì)象中,對(duì)象接收到消息作出相應(yīng)動(dòng)作并可能返回值給調(diào)用者.對(duì)象可以創(chuàng)建對(duì)象.面向?qū)ο笳Z(yǔ)言:類的概念可以從建模角度及編程語(yǔ)言的角度來(lái)理解.類可以視為對(duì)象的模板.對(duì)象是類的實(shí)例.對(duì)象所屬的類定義了對(duì)象的數(shù)據(jù)類型,行為和責(zé)任.對(duì)象通過(guò)消息傳遞的方式通信并命令彼此進(jìn)行動(dòng)作.面向?qū)ο缶幊痰挠悬c(diǎn):"智能"被分布在對(duì)象中,將數(shù)據(jù)保存于較小的可管理單元就相對(duì)比較容易.增加代碼的可讀性.可擴(kuò)展性好,便于修改和維護(hù).修改一個(gè)對(duì)象不會(huì)影響其他對(duì)象.重用十分容
8、易.<h3>第三章</h3>抽象:抽象是指對(duì)于一個(gè)過(guò)程或者一件制品的某些細(xì)節(jié)進(jìn)行有目的的隱藏,以便突出其他方面.控制復(fù)雜性最重要的工具.抽象技術(shù):每個(gè)抽象層次包括了某些信息,也忽略了某些信息.人們通常使用一些簡(jiǎn)單的工具來(lái)建立,理解和管理復(fù)雜的系統(tǒng),其中最重要的技術(shù)被稱為抽象.抽象的層次:在典型的OOP中,有許多級(jí)抽象.更高層次的抽象部分地體現(xiàn)了面向?qū)ο蟪绦蛎嫦驅(qū)ο蟮奶卣?1.團(tuán)體:在最高級(jí)別上,程序被視為一個(gè)對(duì)象的團(tuán)體,這些對(duì)象間相互作用完成共同的目標(biāo).程序員的團(tuán)體,對(duì)象的團(tuán)體.2.單元:把協(xié)同工作的對(duì)象組合到一個(gè)單元中.暴露一些特定的名稱,隱藏其他.3.CS:接口,處
9、理兩個(gè)獨(dú)立對(duì)象之間的交互.定義行為,但不描述實(shí)現(xiàn).4.服務(wù)實(shí)現(xiàn):考慮抽象行為的具體實(shí)現(xiàn)方式.5.具體實(shí)現(xiàn):關(guān)注執(zhí)行一個(gè)方法的具體操作實(shí)現(xiàn).確定正確的抽象級(jí)別:在軟件開(kāi)發(fā)的早期,關(guān)鍵的問(wèn)題就是確定合適的層次抽象,既不要忽略太多細(xì)節(jié),也不要包括太多細(xì)節(jié).形式:分治法,特殊化,不同視角.分治法:將一層劃分為多個(gè)組成部分.特殊化:一層分幾種.視角:對(duì)同一件物品提供不同的視角.服務(wù)視角:對(duì)接口的實(shí)現(xiàn)和劃分,不僅從高層的角度是設(shè)計(jì)易于理解,而且支持組件替換.接口只描述組件所提供的服務(wù),不必描述技術(shù).團(tuán)體中的每個(gè)成員都對(duì)其他成員提供服務(wù).成員必須協(xié)作才能完成任務(wù).分類:組件數(shù)量變大時(shí)用分類來(lái)進(jìn)行組織.組合:
10、有一個(gè)簡(jiǎn)單部分構(gòu)建復(fù)雜結(jié)構(gòu).特化分層:使用特殊化的層次來(lái)構(gòu)建對(duì)象.非標(biāo)準(zhǔn)行為:面向?qū)ο蟮恼Z(yǔ)言也需要一種機(jī)制來(lái)覆蓋從上一層繼承來(lái)的信息.繼承方式:是一種,有一個(gè).模式:運(yùn)用之前的經(jīng)驗(yàn).廣泛應(yīng)用于對(duì)象團(tuán)體中成員之間的相互作用方式.抽象機(jī)制的發(fā)展歷史:過(guò)程->模塊->抽象數(shù)據(jù)類型->面向?qū)ο?.匯編語(yǔ)言:最早的抽象機(jī)制2.過(guò)程/函數(shù):部分信息隱藏,命名空間擁擠,復(fù)用困難.3.模塊:解決名稱空間擁擠.提供了將名稱空間劃分成兩個(gè)部分的能力,公有和私有.模塊不允許實(shí)例化,<strong>實(shí)例化是一種能夠建立數(shù)據(jù)區(qū)域多份拷貝的能力.</strong>4.抽象數(shù)據(jù)類型
11、:定義抽象,創(chuàng)建多個(gè)實(shí)例.使用實(shí)例,知其提供操作,不必知道如何實(shí)現(xiàn).ADT(Abstract Data Type)通過(guò)抽象規(guī)范來(lái)定義.匹配一個(gè)或多個(gè)實(shí)現(xiàn)方式.5.以服務(wù)為中心:匯編:功能,模塊和ADT:數(shù)據(jù),面向?qū)ο?服務(wù).6.消息,繼承,多態(tài):ADT基礎(chǔ)上增加的新思想.<h1>第四章</h1>封裝:利用數(shù)據(jù)抽象進(jìn)行編程.數(shù)據(jù)類型兩方面:外部用戶/實(shí)現(xiàn)者.可以避免重復(fù)代碼,保護(hù)類受到不必要的修改.概念:實(shí)例,實(shí)例變量,數(shù)據(jù)成員,數(shù)據(jù)字段.對(duì)象=狀態(tài)+行為.類的定義:可視性修飾符public,private,由程序員確定.慣例:類名ClassName,單詞首字母大寫(xiě).數(shù)據(jù)
12、字段private.使用setter,getter等訪問(wèn).SmallTalk中:無(wú)可視性修飾符,數(shù)據(jù)均private.聲明次序的建議:主要->次要.private在后.構(gòu)造方法在前.類主題的不同:接口:不提供實(shí)現(xiàn),可以聲明變量,實(shí)例可以賦值給接口類型變量.屬性:Delphi,VB,C#包含屬性的概念.預(yù)定義:多個(gè)互相引用的類,Java全文掃描,C+向前定義.內(nèi)部類:在一個(gè)類中定義另一個(gè)類.Java內(nèi)部類被連接到外部類實(shí)例上,C+僅僅是命名手段,限制可視性.類的數(shù)據(jù)字段:靜態(tài)數(shù)據(jù)字段初始化.Java由靜態(tài)塊完成.C+中由基本數(shù)據(jù)類型表示的靜態(tài)數(shù)據(jù)字段可以在類的主題中進(jìn)行初始化.或者在類外初
13、始化.靜態(tài)成員:實(shí)現(xiàn)對(duì)個(gè)對(duì)象間的數(shù)據(jù)共享.靜態(tài)函數(shù):成員函數(shù),不能訪問(wèn)非靜態(tài).沒(méi)有this構(gòu)造和析構(gòu)函數(shù)不能是靜態(tài).<h1>第五章</h1>消息:對(duì)象接受多個(gè)消息,響應(yīng)不同.同一消息不同對(duì)象,響應(yīng)不同.廣播,選擇性響應(yīng).是對(duì)象間相互請(qǐng)求或協(xié)作的途徑.語(yǔ)法:接收器,選擇器,參數(shù).響應(yīng)隨接收器不同而不同.靜態(tài)類型語(yǔ)言/動(dòng)態(tài)類型語(yǔ)言(強(qiáng)類型/弱類型,考試的時(shí)候不知道這樣寫(xiě)對(duì)不對(duì))強(qiáng)類型變量有類型屬性,編譯期檢查.高效.弱類型變量沒(méi)有類型屬性,編譯期不檢查.靈活.強(qiáng)類型:編譯時(shí)做出內(nèi)存分配決定.控制類型錯(cuò)誤.偽變量:this,current,self,好像在使用同類的實(shí)例.對(duì)象
14、的創(chuàng)建:聲明與初始化結(jié)合.聲明與創(chuàng)建分離.對(duì)象數(shù)組的創(chuàng)建:包括創(chuàng)建數(shù)組,創(chuàng)建數(shù)組包含的對(duì)象.C+使用默認(rèn)構(gòu)造函數(shù)初始化.Java需要單獨(dú)創(chuàng)建對(duì)象.內(nèi)存回收:使用new創(chuàng)建-堆內(nèi)存.堆內(nèi)存沒(méi)有綁定在過(guò)程的入口和出口處.1.顯式回收:C+/Object Pascal:delete/free2.內(nèi)存回收機(jī)制:Java/C#/SmallTalk:監(jiān)控對(duì)象操作,對(duì)象不再使用時(shí)自動(dòng)回收,通常在內(nèi)存將要耗盡時(shí)工作.付出額外代價(jià),但是可以避免使用已釋放的內(nèi)存,避免耗盡內(nèi)存.實(shí)現(xiàn):確保動(dòng)態(tài)分配的內(nèi)存對(duì)象都有一個(gè)指定的屬主.引用計(jì)數(shù):引用共享對(duì)象的指針的計(jì)數(shù)值.內(nèi)存分配策略:靜態(tài).堆式.棧式.靜態(tài):在編譯時(shí)就能確
15、定每個(gè)數(shù)據(jù)目標(biāo)在運(yùn)行時(shí)刻的存儲(chǔ)空間需求.不支持可變數(shù)據(jù)結(jié)構(gòu),遞歸,嵌套.棧式:有一個(gè)類似于堆棧的運(yùn)行棧實(shí)現(xiàn),需求完全未知,進(jìn)入模塊時(shí)必須知道程序模塊所需的數(shù)據(jù)區(qū)大小.按照先進(jìn)后出的原則進(jìn)行分配.堆式:可以在前兩個(gè)都不確定時(shí)使用,由大片可利用塊和空閑塊組成.可以按照任意順序分配和釋放.構(gòu)造函數(shù):初始化新創(chuàng)建對(duì)象.確保初始化錢(qián)不會(huì)被使用,防多次調(diào)用.Java/C+:名稱,參數(shù)Java/C#中數(shù)據(jù)字段可以初始化為特定的數(shù)值.可以重載.缺省構(gòu)造函數(shù)即無(wú)參構(gòu)造函數(shù).C+中的初始化器:public:playing_card(Suit is, int ir):suit(is),rank(ir).用于對(duì)象成員
16、的初始化和子類對(duì)父類的初始化.C+類規(guī)范:缺省構(gòu)造函數(shù),拷貝構(gòu)造函數(shù),賦值操作符,析構(gòu)函數(shù).常量初始化:Java:final變量可直接初始化或者在構(gòu)造函數(shù)中初始化.C+在初始化器中初始化.const vs final:const:常量,不允許改變.final:斷言不會(huì)重新賦值.析構(gòu)函數(shù):C+:釋放對(duì)象時(shí)自動(dòng)調(diào)用.作為對(duì)象的類:Java,SmallTalk中類本身就是對(duì)象,具有創(chuàng)建實(shí)例,返回類名等功能.全對(duì)象系統(tǒng):1.類是對(duì)象.對(duì)象產(chǎn)生的兩種基本方式:一種是以原型對(duì)象為基礎(chǔ)產(chǎn)生新的對(duì)象.一種是以類為基礎(chǔ).<strong>(原型也是一種對(duì)象)</strong>原型模型企圖通
17、過(guò)一個(gè)有代表性的對(duì)象為基礎(chǔ)產(chǎn)生各種新的對(duì)象.元類模型:類本身也是一種其他類的對(duì)象.Java和C+基于類的對(duì)象模型.JavaScript貌似基于原型.SmallTalk基于元類.SmallTalk的元類系統(tǒng):1.根類Object.2.每個(gè)類是其元類的實(shí)例.3.每個(gè)元類是類Meta的實(shí)例.4.每個(gè)元類是類Class的派生類.元類為語(yǔ)言提供了一個(gè)方法:集合類的特定性為.類首先不是作為Class的實(shí)例,而是元類的實(shí)例,元類繼承自Class,元類得到了Class的行為,也提供了定義特定行為的空間.SmallTalk的類庫(kù)及元體系結(jié)構(gòu):類中描述對(duì)象的個(gè)體性質(zhì):實(shí)例屬性.實(shí)例方法.元類中描述對(duì)象的公共性質(zhì):
18、類屬性,類方法元類是描述類的類,也是對(duì)象.類的繼承關(guān)系與相應(yīng)元類的繼承關(guān)系是平行的.優(yōu)點(diǎn):概念上一致:對(duì)象就可以表述系統(tǒng)中所有成分.改善程序設(shè)計(jì)環(huán)境(類成為運(yùn)行時(shí)一部分)繼承更規(guī)范.反射和內(nèi)省:程序在運(yùn)行過(guò)程中了解自身的能力.分類:獲取當(dāng)前計(jì)算狀態(tài)的特征.增加新的行為.類對(duì)象:反射工具都始于一個(gè)對(duì)象.類是Class類的實(shí)例.通常包括類名稱,類實(shí)例以及創(chuàng)建新實(shí)例的能力.常有功能不贅述.檢測(cè)對(duì)象類:C+:dynamic_cast,Java:instanceof,課件說(shuō)這是設(shè)計(jì)不好的標(biāo)志,我覺(jué)得這是語(yǔ)言設(shè)計(jì)不好的標(biāo)志.Java中的類行為:還是略過(guò)吧.我比較熟,懶得寫(xiě).作為對(duì)象的方法:Java中的Me
19、thod類.修改機(jī)制:Java中的ClassLoader,加載一個(gè)class文件.<h1>第六章</h1>繼承:向下傳遞,實(shí)現(xiàn)代碼復(fù)用,概念復(fù)用.使用條件:"是一個(gè)"檢測(cè).子類必須實(shí)現(xiàn)父類的全部功能,可以替換父類實(shí)例.改寫(xiě):子類有時(shí)為了避免繼承父類的行為,需要對(duì)其進(jìn)行改寫(xiě).語(yǔ)法上必須有一個(gè)簽名相同的方法(注:簽名的例子:閹割到函數(shù)名和參數(shù),例如int main(int argc, char* argv), 簽名為main(int, char*)運(yùn)行時(shí):變量聲明為一個(gè)類,值來(lái)自于子類,方法同時(shí)出現(xiàn)于父類和子類.改寫(xiě)與替換相結(jié)合時(shí),想執(zhí)行的一般都是子類的
20、方法.Java和SmallTalk只要通過(guò)同一簽名覆蓋,C+中要用virtual聲明.接口和抽象類:接口可以繼承接口.繼承類和實(shí)現(xiàn)接口非常相似,所以使用繼承這一術(shù)語(yǔ).抽象方法:定義但不實(shí)現(xiàn).創(chuàng)建實(shí)例前子類必須實(shí)現(xiàn)父類的抽象方法.Java,C#:abstractC+:virtual繼承的形式:特殊化:Window->TextWindow,新類是基類的特定類型.規(guī)范化:保證子類和父類有某個(gè)公共的接口.實(shí)現(xiàn)抽象規(guī)范.構(gòu)造:繼承幾乎所有的功能,只是改變方法名或參數(shù)列表,為了繼承而繼承.泛化:擴(kuò)展基類的行為,形成更泛化的抽象.擴(kuò)展:為了往基類中添加薪行為.限制繼承:接收繼承來(lái)的方法然后使其無(wú)效化,
21、例如雙向隊(duì)列->堆棧.違反可替換性原則.變體:不存在層次關(guān)系,但是為了實(shí)現(xiàn)類似的功能.更好的方式是提煉抽象類.合并:合并兩個(gè)或更多抽象特征.多重繼承支持.Java中的匿名類:只能創(chuàng)建一個(gè)匿名類的實(shí)例.匿名類必須繼承于父類或接口,不需要構(gòu)造函數(shù)進(jìn)行初始化.構(gòu)造函數(shù):繼承使構(gòu)造函數(shù)變得復(fù)雜.父類和子類都有待執(zhí)行的初始化代碼.創(chuàng)建新對(duì)象時(shí)都要執(zhí)行.可替換性:變量聲明時(shí)指定的類型不必與它所容納的值類型相一致.子類和子類型:子類是語(yǔ)法層面上的,只要extend了就是子類.子類型是邏輯層面上的,要滿足父類型的特征.<h1>第七章</h1>靜態(tài)和動(dòng)態(tài):靜態(tài)常用于表示編譯期確定的
22、屬性和特征.動(dòng)態(tài)表示運(yùn)行時(shí)綁定與對(duì)象的屬性或特征.靜態(tài)類和動(dòng)態(tài)類:變量的靜態(tài)類是指用于聲明變量的類.變量的動(dòng)態(tài)類是指比啊這事告訴我的當(dāng)前數(shù)值相關(guān)的類.靜態(tài)類型和動(dòng)態(tài)類型:靜態(tài)類型:表達(dá)式合法性不是基于接收器的當(dāng)前動(dòng)態(tài)數(shù)值,而是基于接收器的動(dòng)態(tài)類.運(yùn)行時(shí)的類型決定:替換原則可以通過(guò)提升數(shù)值在繼承層次上的位置來(lái)體現(xiàn).有時(shí)還需子類判定.父類強(qiáng)轉(zhuǎn)子類(反多態(tài),向下造型)方法綁定:動(dòng)態(tài)綁定:響應(yīng)消息時(shí)對(duì)那個(gè)方法進(jìn)行綁定是有接收器當(dāng)前所包含的動(dòng)態(tài)數(shù)值來(lái)決定的.多態(tài)變量:方法所執(zhí)行的消息是由最近賦值給變量的數(shù)值的類型來(lái)決定的.Java,SmallTalk變量都是多態(tài)的.C+在使用指針或引用并且virtual
23、的情況下可以多態(tài).替換:內(nèi)存布局:1.只分配基類所需的存儲(chǔ)空間2.分配最大的存儲(chǔ)空間3.只保存指針C+使用最小分配,賦值時(shí)會(huì)出現(xiàn)切割.所以只有指針和引用是多態(tài)的.最大內(nèi)存分配有難以確定對(duì)象大小的問(wèn)題.Java,SmallTalk使用動(dòng)態(tài)內(nèi)存分配,指針大小恒定,不會(huì)出現(xiàn)切割.賦值有復(fù)制語(yǔ)義和指針語(yǔ)意(C+/Java,Java中基本類型和類)復(fù)制和克隆:淺復(fù)制:共享實(shí)例變量深復(fù)制:復(fù)制實(shí)例變量C+:拷貝構(gòu)造函數(shù)Java:改寫(xiě)clone相同和同一檢驗(yàn):=(同一)和equals(相同).<h1>第八章</h1>設(shè)計(jì)目標(biāo):可擴(kuò)展性:新功能易加入系統(tǒng)靈活性:允許代碼修改平穩(wěn)發(fā)生可插
24、入性:容易將一個(gè)類換為另一個(gè)具有相同接口的類.軟件復(fù)用的意義:生產(chǎn)率,軟件質(zhì)量,可維護(hù)性.面向?qū)ο笤O(shè)計(jì)的優(yōu)點(diǎn):可在更高層次上實(shí)現(xiàn)可復(fù)用性.抽象化和繼承:概念和定義可復(fù)用多態(tài):實(shí)現(xiàn)和應(yīng)用可復(fù)用抽象化和封裝:可維護(hù)性復(fù)用的條件:抽象層次穩(wěn)定,獨(dú)立面向?qū)ο髲?fù)用:可維護(hù)型復(fù)用是以設(shè)計(jì)原則和設(shè)計(jì)模式為基礎(chǔ)的.面向?qū)ο笤O(shè)計(jì)原則:OCP(開(kāi)閉原則):對(duì)擴(kuò)展開(kāi)放,對(duì)修改關(guān)閉.試圖設(shè)計(jì)永遠(yuǎn)也不需要改變的模塊.LSP(里氏替換原則):指向基類的引用的函數(shù),必須能在不知道具體派生類對(duì)象類型的情況下使用它們.DIP(依賴倒轉(zhuǎn)原則):抽象不應(yīng)當(dāng)依賴于細(xì)節(jié),細(xì)節(jié)應(yīng)當(dāng)依賴于抽象.ISP(接口隔離原則):為同一角色提供寬窄不
25、同的接口.CRP(組合復(fù)用原則):優(yōu)先使用組合而非繼承.因?yàn)榻M合是黑盒復(fù)用,不依賴父類型細(xì)節(jié).但是導(dǎo)致對(duì)象過(guò)多.繼承的優(yōu)點(diǎn):容易進(jìn)行新的視線,因?yàn)槠浯蠖鄶?shù)可以繼承而來(lái).易于修改或擴(kuò)展被復(fù)用的實(shí)現(xiàn).LOD(迪米特法則):最少知識(shí)原則,一個(gè)對(duì)象應(yīng)該對(duì)其他對(duì)象盡可能少的了解.SRP(單一職責(zé)原則)多重繼承:一個(gè)對(duì)象可以有多個(gè)父類,繼承每個(gè)父類的數(shù)據(jù)和行為."是一個(gè)"規(guī)則,"作為一個(gè)"關(guān)系,對(duì)象同時(shí)扮演多個(gè)角色.問(wèn)題:名稱歧義:父類中同名方法.解決方法:1.使用全限定名:調(diào)用時(shí)聲明來(lái)自哪個(gè)父類2.重定義和重命名:不符合替換原則3.引入輔助類:C+中的解決方法.接
26、口的多重繼承:Java,C#使用,對(duì)于子類來(lái)說(shuō),接口不提供任何代碼,所以不會(huì)產(chǎn)生兩部分繼承代碼之間的沖突.使用內(nèi)部類進(jìn)行多重繼承:產(chǎn)生替換上的問(wèn)題.多重繼承來(lái)自公共祖先:數(shù)據(jù)應(yīng)不應(yīng)該copy多份C+使用virtual修飾符解決.<h1>第十章</h1>多態(tài)的形式:1.重載:通過(guò)類型簽名區(qū)分,例如void example()和void example(int x)2.改寫(xiě):層次關(guān)系中的相同簽名.3.多態(tài)變量4.泛型:模版類軟件復(fù)用機(jī)制:1.繼承和組合組合:利用已存在的組件來(lái)創(chuàng)建新的應(yīng)用程序,委托成員實(shí)現(xiàn)其功能,不符合替換繼承:自動(dòng)的與新的數(shù)據(jù)抽象建立聯(lián)系.比較:組合較為簡(jiǎn)
27、單,不用考慮父類定義的所有操作.繼承無(wú)法直到一個(gè)方法是否可以合法的應(yīng)用于父類.繼承代碼簡(jiǎn)潔,但是無(wú)法防止用戶使用父類方法來(lái)操縱新的數(shù)據(jù)結(jié)構(gòu).<h1>第十一章</h1>重載:重載是在編譯時(shí)執(zhí)行的,是多態(tài)的一中很強(qiáng)大的形式,非面向?qū)ο笳Z(yǔ)言也支持.范疇:我看就是他奶奶的作用域,寫(xiě)得這么專業(yè),肯定是google翻譯過(guò)來(lái)的.基于范疇的重載:相同的名稱可以在不引起歧義且不造成精度損失的情況下出現(xiàn)于不同的范疇.并不一定要語(yǔ)義相關(guān),例如繼承.基于簽名的重載:多個(gè)過(guò)程允許共享同一名稱,通過(guò)參數(shù)列表進(jìn)行區(qū)分.在編譯期基于靜態(tài)類型完成,不涉及運(yùn)行機(jī)制.強(qiáng)轉(zhuǎn):忘了的就自己看吧.重定義:當(dāng)子類定
28、義了一個(gè)與父類具有相同名稱但類型簽名不同的方法時(shí),發(fā)生重定義.類型簽名的變化是區(qū)分改寫(xiě)和重定義的主要依據(jù).Java使用融合模型,自動(dòng)調(diào)用父類的方法.C+使用分級(jí)模型,需要在子類做代理實(shí)現(xiàn)調(diào)用.<h1>第十二章</h1>改寫(xiě):與替換原則結(jié)合使用.改寫(xiě)可看成是重載的一種特殊情況.由于重載也涉及一個(gè)方法名稱和兩個(gè)或更多的方法體.差異:1.方法所在的類之間必須有繼承關(guān)系.2.發(fā)生改寫(xiě),簽名必須匹配.3.重載方法總是獨(dú)立的,而改寫(xiě)的兩個(gè)方法有時(shí)候會(huì)結(jié)合起來(lái)實(shí)現(xiàn)某種行為.4.改寫(xiě)是一種運(yùn)行時(shí)機(jī)制.標(biāo)識(shí)改寫(xiě):各種語(yǔ)言在如何通過(guò)代碼實(shí)現(xiàn)標(biāo)識(shí)改寫(xiě)這方面存在著差異.Java不需要,C+應(yīng)聲
29、明virtual.改寫(xiě)不能改變方法的可見(jiàn)性.代替:完全使用子類方法.改進(jìn):將繼承父類的方法并作為行為的一部分.延遲方法:只定義沒(méi)有實(shí)現(xiàn),C+的純虛方法,Java的抽象方法.意義:為編譯器提供信息.改寫(xiě)與遮蔽:存在語(yǔ)法的相似性.類似如重載,改寫(xiě)是運(yùn)行時(shí)機(jī)制,遮蔽基于靜態(tài)類型解析,編譯期綁定,例如Java中的static方法會(huì)根據(jù)靜態(tài)類型調(diào)用而不是動(dòng)態(tài)類型.協(xié)方差與反協(xié)方差:操他奶奶的,肯定是google翻譯過(guò)來(lái)的.我相信是相關(guān)和反相關(guān)很少有改變類型簽名的需求,通常將類型在其繼承層次上提升或降低。當(dāng)一個(gè)類型降低類型層次作為子類時(shí),將使用協(xié)方差變化術(shù)語(yǔ)。反之,當(dāng)一個(gè)類型由子類化反向提升類型層次時(shí),將
30、使用反協(xié)方差變化術(shù)語(yǔ)。協(xié)方差與替換:當(dāng)協(xié)方差變化遇到替換原則時(shí),根據(jù)替換原則,應(yīng)該能夠聲明一個(gè)類型為父類型的變量,但是卻將類型為子類型的數(shù)值賦值給它。大多數(shù)語(yǔ)言都通過(guò)使用一種稱為非方差的技術(shù)來(lái)避免這類問(wèn)題。即,子類不允許以任何方式改變關(guān)于改寫(xiě)方法的類型簽名。防止改寫(xiě):Java:final,C#:sealed<h1>設(shè)計(jì)模式</h1>模式:模式就是對(duì)已解決問(wèn)題的記錄.設(shè)計(jì)模式使人們更加簡(jiǎn)便的復(fù)用成功的設(shè)計(jì)和體系結(jié)構(gòu).設(shè)計(jì)模式要素:1.名稱:助記名,描述模式的問(wèn)題,解決方案和效果.2.問(wèn)題:描述在何時(shí)應(yīng)用模式.3.解決方案:描述設(shè)計(jì)的組成成分.4.效果:模式應(yīng)用的效果及應(yīng)權(quán)
31、衡的問(wèn)題.簡(jiǎn)單工廠模式:工廠創(chuàng)建抽象產(chǎn)品的實(shí)例具體產(chǎn)品.屬于創(chuàng)建模式.簡(jiǎn)單工廠模式是有一個(gè)工廠類根據(jù)傳入的參量決定創(chuàng)建出哪一種產(chǎn)品類的實(shí)例。例如Java里根據(jù)字符串獲得編碼對(duì)象的方法.角色與結(jié)構(gòu):工廠類:核心,有一個(gè)具體的類實(shí)現(xiàn).抽象產(chǎn)品:所有產(chǎn)品的父類.具體產(chǎn)品:工廠創(chuàng)建的對(duì)象.優(yōu)點(diǎn):核心是工廠類,必須包含判斷邏輯決定創(chuàng)建哪個(gè)類.客戶端免除直接創(chuàng)建產(chǎn)品對(duì)象的責(zé)任.實(shí)現(xiàn)了對(duì)責(zé)任的分割.缺點(diǎn):工廠類形成了全能類.擴(kuò)展困難.不滿足OCP.工廠方法模式:定義一個(gè)創(chuàng)建產(chǎn)品對(duì)象的工廠接口,將實(shí)際創(chuàng)建工作推遲到子類中,屬于創(chuàng)建模式.由于使用了多態(tài)性,保持了簡(jiǎn)單工廠的優(yōu)點(diǎn),克服了它的缺點(diǎn).角色與結(jié)構(gòu):抽象工
32、廠:是工廠方法的核心,與應(yīng)用程序無(wú)關(guān),創(chuàng)建對(duì)象的工廠類必須實(shí)現(xiàn)這個(gè)接口,常常使用抽象類實(shí)現(xiàn).具體工廠:實(shí)現(xiàn)了抽象工廠接口的具體類,含有與應(yīng)用密切相關(guān)的邏輯.創(chuàng)建產(chǎn)品對(duì)象.抽象產(chǎn)品:工廠創(chuàng)建對(duì)象的超類.常常是抽象類.具體產(chǎn)品:抽象產(chǎn)品的子類,被創(chuàng)建.活動(dòng)序列:1.客戶端創(chuàng)建具體工廠對(duì)象.其靜態(tài)類型為工廠,動(dòng)態(tài)類型為具體工廠.2.調(diào)用工廠對(duì)象的工廠方法factory().3.工廠對(duì)象創(chuàng)建出產(chǎn)品對(duì)象.是對(duì)簡(jiǎn)單工廠的推廣.完全支持OCP.抽象工廠模式:是所有工廠模式中最為抽象和最具一般性的一種形態(tài).抽象工廠模式與工廠方法模式的最大區(qū)別就在于,工廠方法模式針對(duì)的是一個(gè)產(chǎn)品等級(jí)結(jié)構(gòu);而抽象工廠模式則需要面
33、對(duì)多個(gè)產(chǎn)品等級(jí)結(jié)構(gòu)產(chǎn)品族:不同產(chǎn)品等級(jí)結(jié)構(gòu)中,功能相關(guān)聯(lián)的產(chǎn)品組成的家族.如果采用抽象工廠方法模式,就勢(shì)必要使用多個(gè)獨(dú)立的工廠等級(jí)結(jié)構(gòu)來(lái)對(duì)付多個(gè)產(chǎn)品等級(jí)結(jié)構(gòu).導(dǎo)致多個(gè)平行的工廠等級(jí)結(jié)構(gòu).角色與結(jié)構(gòu):抽象工廠,具體工廠,抽象產(chǎn)品,具體產(chǎn)品.與工廠方法模式類似,但是抽象工廠結(jié)構(gòu)中可以有多個(gè)工廠方法.單例模式:單例模式確保某一個(gè)類只有一個(gè)實(shí)例,自行實(shí)例化并向整個(gè)系統(tǒng)提供這個(gè)實(shí)例,是創(chuàng)建模式.整個(gè)系統(tǒng)共享的資源,例如Java中的Runtime類.餓漢式:類被加載時(shí),靜態(tài)變量m_instance被初始化,單例類的唯一實(shí)例就被創(chuàng)建出來(lái)了.構(gòu)造子私有,避免外界創(chuàng)建.懶漢式:類被加載時(shí)不實(shí)例化,在被引用時(shí)實(shí)例
34、化.區(qū)別:m_instance初始化為new實(shí)例還是null.餓漢式加載時(shí)實(shí)例化,資源利用效率差些.Builder模式:把一個(gè)復(fù)雜對(duì)象的構(gòu)建與它的表示分離,使得同樣的構(gòu)建過(guò)程可以創(chuàng)建不同的表示.Builder模式是一步一步創(chuàng)建一個(gè)復(fù)雜的對(duì)象,它允許用戶可以只通過(guò)指定復(fù)雜對(duì)象的類型和內(nèi)容就可以構(gòu)建它們。用戶不知道內(nèi)部的具體構(gòu)建細(xì)節(jié)。Builder模式是非常類似抽象工廠模式,細(xì)微的區(qū)別大概只有在反復(fù)使用中才能體會(huì)到.例如Java中的StringBuilder.流程:1.創(chuàng)建Builder對(duì)象.2.創(chuàng)建Director對(duì)象.3.使用Director對(duì)象指導(dǎo)Builder對(duì)象一步步生成結(jié)果.4.獲得B
35、uild的結(jié)果.結(jié)構(gòu)模式:如何將類和對(duì)象組合成一個(gè)更大的結(jié)構(gòu).可以分為類模式和對(duì)象模式.類模式采用繼承機(jī)制來(lái)組合接口和實(shí)現(xiàn).對(duì)象模式描述了如何對(duì)一些對(duì)象進(jìn)行組合,實(shí)現(xiàn)新功能的一些方法.因?yàn)榭梢栽谶\(yùn)行時(shí)刻改變對(duì)象組合關(guān)系,所以對(duì)象組合方式具有更大的靈活性 適配器模式:將一個(gè)類的接口轉(zhuǎn)換成客戶希望的另外一個(gè)接口.問(wèn)題:1.已經(jīng)存在的類接口不適用.2.一個(gè)可復(fù)用的類與其他不相關(guān)的類協(xié)作.3.想使用一些已經(jīng)存在的子類,但是不能對(duì)每個(gè)都子類化以匹配他們的接口.解決方案:Target定義Client使用的特定領(lǐng)域相關(guān)的接口.Adaptee定義對(duì)Adaptee接口需要與Target接口進(jìn)行適配.Adapte
36、r對(duì)Adaptee接口與Target接口進(jìn)行適配.類適配器:適配器同時(shí)實(shí)現(xiàn)兩端的接口.對(duì)象適配器:適配器引用被適配的類.代理模式:為其他對(duì)象提供一種代理以控制對(duì)這個(gè)對(duì)象的訪問(wèn).Proxy保存一個(gè)引用時(shí)的代理可以訪問(wèn)的實(shí)體.RealSubject是Subject的實(shí)體.Proxy會(huì)引用Subject,提供相同的接口,代理可以用來(lái)替代實(shí)體,控制實(shí)體.Subject定義RealSubject和Proxy公用的接口,這樣任何可以使用RealSubject的地方都可以使用Proxy.RealSubject定義Proxy所代表的實(shí)體.<h2>我不知道下面的東西考不考,但是課件上寫(xiě)的非常簡(jiǎn)單</h2>Composite模式:將對(duì)象組合成樹(shù)型結(jié)構(gòu)以表示"部分-整體"的層次結(jié)構(gòu).使用戶對(duì)單個(gè)對(duì)象和組合對(duì)象的使用具有一致性.Composite有Component作為子節(jié)點(diǎn),同時(shí)是Component的子類.Leaf上實(shí)現(xiàn)Operation,然后調(diào)用根節(jié)點(diǎn)的Operation時(shí)遞歸調(diào)用.Decorator模式:動(dòng)態(tài)地給對(duì)象添加一些額外的職責(zé).ConcreteDecorator作為Decorator的子類.Decorator是抽象類,包含一個(gè)對(duì)Component的引用.調(diào)用Decorator.Operation時(shí)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 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ì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年全球及中國(guó)半導(dǎo)體用水溶性助焊劑行業(yè)頭部企業(yè)市場(chǎng)占有率及排名調(diào)研報(bào)告
- 2025年全球及中國(guó)第一人稱視角射擊游戲行業(yè)頭部企業(yè)市場(chǎng)占有率及排名調(diào)研報(bào)告
- 2025年全球及中國(guó)HDPE模制容器行業(yè)頭部企業(yè)市場(chǎng)占有率及排名調(diào)研報(bào)告
- 2025年全球及中國(guó)茂金屬線型低密度聚乙烯樹(shù)脂行業(yè)頭部企業(yè)市場(chǎng)占有率及排名調(diào)研報(bào)告
- 合同起草范本
- 汽車自駕租賃合同
- 房屋委托代管合同
- 2025贈(zèng)與合同公證書(shū)
- 維修工聘用合同范本
- 收獲成長(zhǎng)迎接新起點(diǎn)主題班會(huì)
- 2024年江西省南昌市南昌縣中考一模數(shù)學(xué)試題(含解析)
- 繪本的分鏡設(shè)計(jì)-分鏡的編排
- 查干淖爾一號(hào)井環(huán)評(píng)
- 體檢中心分析報(bào)告
- 人教版初中英語(yǔ)七八九全部單詞(打印版)
- 臺(tái)球運(yùn)動(dòng)中的理論力學(xué)
- 最高人民法院婚姻法司法解釋(二)的理解與適用
- 關(guān)于醫(yī)保應(yīng)急預(yù)案
- 新人教版五年級(jí)上冊(cè)數(shù)學(xué)應(yīng)用題大全doc
- 2022年版義務(wù)教育勞動(dòng)課程標(biāo)準(zhǔn)學(xué)習(xí)培訓(xùn)解讀課件筆記
- 2022年中國(guó)止血材料行業(yè)概覽:發(fā)展現(xiàn)狀對(duì)比分析研究報(bào)告(摘要版) -頭豹
評(píng)論
0/150
提交評(píng)論