17課件隨堂筆記_第1頁
17課件隨堂筆記_第2頁
17課件隨堂筆記_第3頁
17課件隨堂筆記_第4頁
17課件隨堂筆記_第5頁
已閱讀5頁,還剩34頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

OO概述面向?qū)ο蟮闹饕枷敕侄沃? 大任務(wù)【大項目,復(fù)雜需求】軟件:XX系統(tǒng)》子系統(tǒng)》組件類生活:1班 管理很多學(xué)生;組長【工資】2 :軍》師》…….》分公司》部門OO概述面向?qū)ο蟮闹饕枷敕侄沃? 大任務(wù)【大項目,復(fù)雜需求】軟件:XX系統(tǒng)》子系統(tǒng)》組件類生活:1班 管理很多學(xué)生;組長【工資】2 :軍》師》…….》分公司》部門3:關(guān)系密切放在同一個? 關(guān)系不密切放在不同的?UI:NGUI,UGUI耦合:解耦;關(guān)系封裝變化(細(xì)節(jié))設(shè)計模式1行1控制臺:獲得輸入2頁面:修改1)=變化2行不變3行2)原則:把痛苦留給自己,把方便留給別人實現(xiàn)調(diào)用端面向?qū)ο蟮脑O(shè)計原則【學(xué)oop之前了解之后掌握】把名稱記住!1開-(目標(biāo))擴展開放,對修改關(guān)閉理想化的目標(biāo)!需求1:寫了一段代碼【類,組件,系統(tǒng)】2:game2F1,F(xiàn)2,F(xiàn)3怎么辦?1:打開Class1F32:繼承Class2:Class1{F3}接口,組合,……..移動互聯(lián)網(wǎng):操作系統(tǒng)Ios2:game2F1,F(xiàn)2,F(xiàn)3怎么辦?1:打開Class1F32:繼承Class2:Class1{F3}接口,組合,……..移動互聯(lián)網(wǎng):操作系統(tǒng)Iosmobile》WP782類的單一職責(zé)(一個類的定義)設(shè)計,抽象得到的類:功能不要太多,越少越好,功能多,功能屬于同一類別的功能學(xué)生:上課,聽課,,講課【晨講】爭議?老師:講課,備課!一個類有且只有一個3(寫一個類時從哪入手)先做好一個好對外的接口(公有的方法實現(xiàn)不是第一步要思考.先思考做什么,為其他的組件提供什么功能,而不是去先思考功能的實現(xiàn)4使用組合而非繼承(復(fù)用的最佳實踐)優(yōu)先選擇組合復(fù)用,而非繼承復(fù)用。組合的耦合性對繼承低5(依賴抽象)客戶端代碼盡量依賴抽象的組件,因為抽象的是穩(wěn)定的。實現(xiàn)是多變的。需求》分析設(shè)計具體主角怪【泛化】抽象抽象具體依賴抽象76.017.5911027整抽象具體北京6(繼承后的重寫)父類出現(xiàn)地方可以被子類替換掉。原有的工作,在替換后依然保持不變子類在重寫父類方法時,盡量選擇擴展重寫。7接口 (功能拆分)盡量定義小而精的接口,少定義大而全的接口小接口之間功能,.或接口之間做繼承8(類與類交互的原則)不要和陌生人說話【原則6(繼承后的重寫)父類出現(xiàn)地方可以被子類替換掉。原有的工作,在替換后依然保持不變子類在重寫父類方法時,盡量選擇擴展重寫。7接口 (功能拆分)盡量定義小而精的接口,少定義大而全的接口小接口之間功能,.或接口之間做繼承8(類與類交互的原則)不要和陌生人說話【原則】類與類交互時,在滿足功能要求的基礎(chǔ)上,傳遞的數(shù)據(jù)量越少越好.因為這樣class1class21)頭軀干脖子低耦合1 (it(it,tring,it)復(fù)雜人面向?qū)ο蟮娜驝#完全全封裝:如何組織類或模塊,讓封裝的類或組件,盡量只負(fù)責(zé)一個領(lǐng)域的工作.::封裝:如何組織類或模塊,讓封裝的類或組件,盡量只負(fù)責(zé)一個領(lǐng)域的工作12》方法最常用】2》組件NGUI》開發(fā)包系統(tǒng)方便代碼的復(fù)用和維護【萬能類:能封裝到不同的類中,出了問題,容易查找。具體:方便使用者使用!Math. 小車開!保護類,實現(xiàn)類的安全性穩(wěn)定性!車前蓋!:程序員時時刻刻都在用!添加【類模板】都叫封裝【都是在使用封裝】Day01-表示一個概念,包含數(shù)據(jù)(特征)和行為(能力),對象的抽象,沒有狀態(tài)1)一組事物的統(tǒng)稱學(xué)生【同學(xué)們】一組對象>方法【>行為,功能】2)構(gòu)成:字段【學(xué)生類:id編號3)Day01-表示一個概念,包含數(shù)據(jù)(特征)和行為(能力),對象的抽象,沒有狀態(tài)1)一組事物的統(tǒng)稱學(xué)生【同學(xué)們】一組對象>方法【>行為,功能】2)構(gòu)成:字段【學(xué)生類:id編號3)classStudent{publicintid;{}}name4)特點:對象的抽象,沒有狀態(tài)【字段的取值】Studentid?id=?zs.Id=1;zs對象:表示一個實例,是類的實現(xiàn),擁有狀態(tài)定義:對象是new類得到的結(jié)果得到的結(jié)果類的實例化對象名=nw類名(;zszs.Id=1;類與類的四大關(guān)系1泛化:類與類的繼承關(guān)系。耦合度最高繼承:1》泛化多2》特化20歲》父開關(guān)母親主角,怪》 類20歲 將來的孩子飛接口2實現(xiàn):實現(xiàn)類與接口之間的關(guān)系。關(guān)聯(lián):整體與部分的關(guān)系,另一個類作為當(dāng)前類的成員出現(xiàn)組合 Person{ id,name,Head,Leg}依賴:類與類的協(xié)作關(guān)系,另一個類型作為當(dāng)前類型的方法的參數(shù)或返回值類型出現(xiàn)ClassA{Test(Coursec)}案例分析與設(shè)計1》簡要的分析,設(shè)計了解2=OO方法寫代碼3》用到的技術(shù):OO學(xué)到【封裝,類:普通的類;特殊的類】相似數(shù)據(jù)【方法:普通的方法;特殊的方法】【3原則:類的單一職責(zé)】1需求明確:ARPG:會掉落,,有的不2怪后可以得到殺怪經(jīng)驗,不同怪經(jīng)驗不同【方法:普通的方法;特殊的方法】【3原則:類的單一職責(zé)】1需求明確:ARPG:會掉落,,有的不2怪后可以得到殺怪經(jīng)驗,不同怪經(jīng)驗不同在活動過程中有相應(yīng)的動畫4系統(tǒng),成長系統(tǒng),技能系統(tǒng),動畫系統(tǒng),運動系統(tǒng),任務(wù)系統(tǒng),背包系統(tǒng),結(jié)算系統(tǒng)3分析思路:技巧+開發(fā)經(jīng)驗【項目經(jīng)驗】識別對象:技巧【從需求文字描述中找名詞,確定適合做對象的名詞】鍵盤,模擬搖桿,動畫最后的對象:主角,怪,物品,輸入控制,動畫+行為】【技巧:如何找共性的行為:】主角:收集經(jīng)驗,升級,撿物品,主角狀態(tài)(經(jīng)驗值, 力, 速度,生命,魔法),馬達(dá):移動,移動速度3,小怪狀態(tài)(貢獻(xiàn)經(jīng)驗值,生命,防御……),控制6動畫系統(tǒng):,取消,7動畫處理:處理方法3.:找關(guān)系4大關(guān)系!找調(diào)用關(guān)系【開發(fā)經(jīng)驗】移動:按下移動按鈕→調(diào)用馬達(dá)的移動方法→動畫系統(tǒng)播移動Framework打怪:按下技能按鈕→調(diào)用技能系技能→調(diào)用動畫系統(tǒng)播動畫→處理畫→調(diào)用小怪的受傷→可能調(diào)用 →調(diào)用主角的收集經(jīng)驗→級4設(shè)計=深入分析:步驟1:發(fā)現(xiàn)潛在的數(shù)據(jù)類型,潛在的字段,潛在的方法同時運用設(shè)計原則確定最終的設(shè)計結(jié)果【對象,字段,方法】步驟2:確定對象的數(shù)據(jù)類型【C#:枚舉,結(jié)構(gòu),類,接口,委托】步驟3:確定方法的類別【普通方法,抽象方法,虛方法,重寫方法,隱藏方法..】用的技術(shù):技巧+開發(fā)經(jīng)驗設(shè)計的成果:系統(tǒng)的類圖【類1圖,類2圖,接口類圖】類設(shè)計【系統(tǒng)的類圖:1.01主角狀態(tài):PlayerStatus數(shù)據(jù):經(jīng)驗(Exp,MaxExp) (Damage)LevelUpOnDamage2小怪狀態(tài):MonsterStatusDead數(shù)據(jù):生命(HP,MaxHP),魔法(SP,MaxSP),(Damage)防御(Defence)行為:受擊(OnDamage)運動系統(tǒng)距離(attackDistance)貢獻(xiàn)經(jīng)驗值(GiveExp)(Dead)3 馬達(dá):CharacterMotormoveSpeed,rotationSpeed動畫系統(tǒng)(chAnim),行為:移動(數(shù)據(jù):經(jīng)驗(Exp,MaxExp) (Damage)LevelUpOnDamage2小怪狀態(tài):MonsterStatusDead數(shù)據(jù):生命(HP,MaxHP),魔法(SP,MaxSP),(Damage)防御(Defence)行為:受擊(OnDamage)運動系統(tǒng)距離(attackDistance)貢獻(xiàn)經(jīng)驗值(GiveExp)(Dead)3 馬達(dá):CharacterMotormoveSpeed,rotationSpeed動畫系統(tǒng)(chAnim),行為:移動(Mett)4 輸入控制:CharacterInputController 數(shù)據(jù):馬達(dá)(chMotor)動畫系統(tǒng)5 CharacterAnimation數(shù)據(jù):動畫組件(anim)行為:6動畫 數(shù)據(jù):動畫組件(anim)行為:背包系統(tǒng)時使用(OnAttack)(OnCancelAnim)7 裝備:Equipment數(shù)據(jù):種類(er,名稱name,描述tion,圖片i,51類的主【框架】字段的類型暫時隨意;方法的返回類型參數(shù)隨意步驟2【根據(jù)開發(fā)經(jīng)驗-至少做過一次!跟著老師做!舉一反三】實現(xiàn)類的細(xì)節(jié):確定字段的準(zhǔn)確的類型, 性性15分鐘練5分鐘。使用類圖實現(xiàn)所有的對象注意:1文件放在Character文件夾里!2當(dāng)前ARPGDemo.Character大部分類中包含兩部分信息:數(shù)據(jù)與行為在類的語法上,類中包含五種成員:字段,方法【屬性,索引器, 】在語義上,類中的字段可以表示數(shù)據(jù),行為表示的典型代表一個類的設(shè)計遵循類的單一職責(zé)的原則Day02-繼承生活:不勞而獲!富二代!What:是復(fù)用代碼,復(fù)用概念的一種技術(shù)。【代碼復(fù)用的式】代碼,復(fù)用概念,方便管理多個類【層次,樹】一個類的設(shè)計遵循類的單一職責(zé)的原則Day02-繼承生活:不勞而獲!富二代!What:是復(fù)用代碼,復(fù)用概念的一種技術(shù)。【代碼復(fù)用的式】代碼,復(fù)用概念,方便管理多個類【層次,樹】C#寫代碼,就在使用【無意識】:父類】objectObject是任何類的直接或者間接父類!對象類的子類】為什么需要繼承為了保留原有的功能,通過繼承可以復(fù)用,不用每次都從頭開始為了能夠?qū)︻愡M(jìn)行層次性的管理狗貓動物繼承的優(yōu)點1復(fù)用代碼的式復(fù)用概念動物》狗語法上以層次化【樹】的方式管理類——————|狗|貓繼承的缺點而不需要通知子類建議:,三層即可盡量選擇抽象類來繼承繼承的語法A:BAB繼承的語法A:BAB類,A類稱為子類(派生類),B類稱為父類(基類,超類)繼承的特點:除私有成員外都繼承給子類【子類擁有父類中所有非私有成員】給子類【公共,私有】結(jié)論:因為繼承,調(diào)用父類中的方法,有三種調(diào)用法知識點不重要,unityStart1繼承給子類,2》但是在創(chuàng)建子類對象時,自動調(diào)用父類的構(gòu)造方法,且父類構(gòu)造方法先執(zhí)行,子類構(gòu)造方法后執(zhí)行.【從子進(jìn)入,再進(jìn)入父,執(zhí)行完父,new類時=創(chuàng)建對象的時候new【12調(diào)用構(gòu)造方法】無參構(gòu)造方法,如果父類沒有無參構(gòu)造方法,則報編譯錯誤,解決方法有兩個1.為父類添加無參構(gòu)造方法,base關(guān)鍵字指明要調(diào)用父類的哪一個有參構(gòu)造方法無參構(gòu)造方法】如果程序員明確的寫構(gòu)造方法,編譯器就不給生成了。PublicDog():base(“ssss”){}5Q:1構(gòu)造方法?AwA(1【1分配內(nèi)存空間,放對象;2初始化對象字段】//A:只要類型需要創(chuàng)建對象,都需要構(gòu)造方法,因為構(gòu)造方法是創(chuàng)建對象的唯一通道.6》//Q:2.為什么要重載構(gòu)造方法?通過傳遞的參數(shù)為成員賦值初始狀態(tài)不同的對象時,需要使用Mis老師:準(zhǔn)備一個教室,開新班!環(huán)境!構(gòu)造方法之間可不可以互相調(diào)用語法上:可以;實際用途:幾乎不用,沒意義this關(guān)鍵字,base關(guān)鍵字哪種情況適合用繼承組織類的關(guān)系[]構(gòu)造方法之間可不可以互相調(diào)用語法上:可以;實際用途:幾乎不用,沒意義this關(guān)鍵字,base關(guān)鍵字哪種情況適合用繼承組織類的關(guān)系[]動物,狗,貓1. 兩個或個類從概念上是一致的2. 從數(shù)據(jù)和行為上是一致的3. 會這幾個類型統(tǒng)一處理[多個類,AB is成立,適合使用繼承]動物,狗Day03-多態(tài)開閉原則Why:多態(tài)OO 繼承:復(fù)用全部可維護性多態(tài):選擇性的復(fù)用【方法名實現(xiàn)不同】可維護性怎么理解多態(tài)What:多態(tài):多種形態(tài),對象的多種形態(tài),行為的多種形態(tài)體現(xiàn)為,子類對象可以通過父類型 ,Animalobj3newDog();12obj3行為的多態(tài)體現(xiàn)為方法的重寫,隱藏,重載復(fù)用的方式。多態(tài)在共性的基礎(chǔ)上,體現(xiàn)類型及行為的個性化。一個行為有多個不同的實現(xiàn)WhowherewhenHow:多態(tài)的實現(xiàn)方式,有幾種實現(xiàn)多態(tài)的方式隱藏,重寫重載,接口,方法隱藏解決父類的方法在子類不適合的問題。此時可能選擇方法隱藏,子類新定義一個方法,與父類方法同簽名,new方法隱藏解決父類的方法在子類不適合的問題。此時可能選擇方法隱藏,子類新定義一個方法,與父類方法同簽名,new關(guān)鍵字解決父類的方法在子類不適合的問題】What:隱藏【方法隱藏,方法隱藏技術(shù),隱藏技術(shù)】隱藏是多態(tài)的一種實現(xiàn)方式。在父類中定義普通的方法 在子類中定義隱藏方法(用new修飾的和父類中的方法名相同參數(shù)相同的方法,new可以省略,最好不省略)注意:辨析方法隱藏,隱藏方法隱藏方法new修飾的方法12》子特點:w子(;我希望通過父調(diào)子w子(;好處:調(diào)用端代碼可以更加簡潔15分】【練0分】虛方法什么是虛方法:修飾的已經(jīng)實現(xiàn)的方法,即是虛方法可以在子類中重寫的方法【重寫不重寫都可以】方法重寫三種重寫的方法123(解決父類所定義方法在子類中不適用) 虛方法重寫【定義,使用步驟 】是多態(tài)實現(xiàn)的式;1123(解決父類所定義方法在子類中不適用) 虛方法重寫【定義,使用步驟 】是多態(tài)實現(xiàn)的式;1在父類中定義虛方法2在子類中定義重寫方法【重寫方法:和父類中的】注意對應(yīng)【1510練習(xí)】特點:12種寫法父調(diào)子意義 !方法重寫解決父類所定義方法在子類中不適用(虛方法或父類沒有實現(xiàn)(抽象方法),這樣的方法子類可以重寫,重寫是為了滿足子類對該方法的不同需求.三種方法可以重寫abstract方法在子類必須重寫,除非子類也是抽象類virtual方法在子類可以重寫,父類方法的做法與子類不同override方法,已經(jīng)重寫過的方法,在子類還可以繼續(xù)重寫,sealedoverride關(guān)鍵字sealed(密封)12封閉方法用在類的定義上,指示當(dāng)前類不能做父類,也就是任何類都不可繼承當(dāng)前類用在重寫的成員,指示當(dāng)前類的子類,不能再次重寫該成員override在一起sealedoverride封閉類定義:sealed修飾的類特點:不能被繼承。不能有子類。可以實例化!動態(tài)綁定(晚期綁定)與靜態(tài)綁定(早期綁定)綁定:類型與關(guān)聯(lián)的方法的調(diào)用關(guān)系,通俗講就是一個類型能夠調(diào)用哪些方法B:A A:?一個類型能調(diào)用哪些方法的過程,綁定】靜態(tài)綁定編譯時綁定:是指調(diào)用關(guān)系是在運行之前確定的,即編譯期間(運行時綁定在運行期間【過程中】確定的。所以調(diào)用速度比動態(tài)綁定要快動態(tài)綁定比靜態(tài)綁定靈活性好.速度略低方法隱藏是靜態(tài)綁定方法重寫是動態(tài)綁定方法隱藏是子類的方法表加入一個新項,新項中表示的方法簽名與繼承來的方法簽名一致,隱藏掉一個。子類用新項隱藏舊項。方法隱藏是在方法表加新項所以調(diào)用速度比動態(tài)綁定要快動態(tài)綁定比靜態(tài)綁定靈活性好.速度略低方法隱藏是靜態(tài)綁定方法重寫是動態(tài)綁定方法隱藏是子類的方法表加入一個新項,新項中表示的方法簽名與繼承來的方法簽名一致,隱藏掉一個。子類用新項隱藏舊項。方法隱藏是在方法表加新項父類的方法在子類重寫后,地址重寫了,重寫后,原方法簽名項關(guān)聯(lián)到新方法的地址。當(dāng)調(diào)用該方法時,新地址中的方法。所以方法重寫后,不管是通過父類還是子類型的,調(diào)用方法時,都調(diào)用對象真實類型中定義的方法B是子類,AShow方法在子類中重寫AobjnewBA類型obj.Show();B類型的對象BShow方法.修飾的類即為抽象類.特點:抽象類抽象類中可能包含抽象成員(方法,屬性)【可以為空,可以沒有抽象成員,可以有抽象成員】1》希望做基類,對多個類進(jìn)行統(tǒng)一管理【類將再分類】2【使用抽象類的根本原因:找共性時有方法,/有些行為,不同子類可能具體實現(xiàn)不同,這個行為需要寫成抽象的,從而這個類也要變成抽象類】語義:(數(shù)據(jù)和行為整體).表達(dá)概念中擁有的共性行為數(shù)據(jù).用于做基類,統(tǒng)一所有子類,管理子類.什么時候適合用抽象類抽象1地球 2北京 3北京海淀區(qū)這個行為需要寫成抽象的,從而這個類也要變成抽象類】語義:(數(shù)據(jù)和行為整體).表達(dá)概念中擁有的共性行為數(shù)據(jù).用于做基類,統(tǒng)一所有子類,管理子類.什么時候適合用抽象類抽象1地球 2北京 3北京海淀區(qū)4房間當(dāng)你不希望類創(chuàng)建對象{子類}>對象】當(dāng)你有行為,但是不需要實現(xiàn)的時候1.2.3.找共性【主角玩家共性】受到》面積計算!當(dāng)你有多個概念,需要一致的管理時但又不希望客戶了解具體做法。4.5.抽象方法3W1h1定義:只有【頭】【體】特點:實現(xiàn)類必須實現(xiàn)所有的抽象方法B:A必須放在抽象類中或者接口中什么時候使用抽象方法:表示的是抽象的行為,是行為的抽象【?】【找共性時/行為,不同子類可能具體實現(xiàn)不同,這個行為需要寫成抽象的】4放在抽象類中的抽象方法必須加abstract不能私有override不能私有15子類也是抽象,不實現(xiàn)可以嗎?可以!注意:抽象方法的=抽象方法的實現(xiàn)語法:沒有實現(xiàn)的方法.只有方法 ,沒有實現(xiàn)抽象方法只能出現(xiàn)在抽象類中抽象方法在本類中不實現(xiàn),實現(xiàn)推子類必須重寫實現(xiàn)子類中,語義:抽象方法一個行為的抽象,只關(guān)注本身,不關(guān)注行為實現(xiàn)抽象方法描述做什么,不描述怎么做,但往往不表達(dá)具體做法,擁有什么數(shù)據(jù),不表達(dá)語義:抽象方法一個行為的抽象,只關(guān)注本身,不關(guān)注行為實現(xiàn)抽象方法描述做什么,不描述怎么做,但往往不表達(dá)具體做法,擁有什么數(shù)據(jù),不表達(dá)數(shù)據(jù)具體取值抽象方法和虛方法2Day04-接口什么是接口What創(chuàng)建的數(shù)據(jù)類型。接口名建議用”I”ISwitch,IFly,IRun,ICompareble,接口是一組行為的抽象(接口中只有行為)接口只表達(dá)“CanDo”,不表達(dá)“HowTo”實現(xiàn)由實現(xiàn)類完成接口不關(guān)注數(shù)據(jù)(接口中不能有字段)一組對外的行為規(guī)范,要求它的實現(xiàn)類必須遵循實現(xiàn)類必須實現(xiàn)接口的所有成員!,不能加abstract,不能加 修飾符override.接口的作用用途,什么時候使用接口1.擴展一個已有類的行為1個新功能新功能更做成接口 為了新類:原來的類,接口的類復(fù)用!2.規(guī)范不同類型的行為,達(dá)到了不同類型在行為上是一致的,讓這個行為實現(xiàn)最大限度的復(fù)用!鳥/飛的接口飛昆蟲老鷹:鳥,飛的接口重構(gòu)!ARPGDemo1.1》1.2【15分鐘】接口的語法特點接口中不能包含字段,可以包含:行為【方法,屬性,索引器,】接口中的所有成員不能加任何修飾符,全部默認(rèn)公有默認(rèn)抽象的實現(xiàn)類實現(xiàn)接口用“:”與繼承相同多個接口,且每個接口中所有的成員必須都實現(xiàn)public的方式實現(xiàn)(除顯式實現(xiàn))接口的重構(gòu)!ARPGDemo1.1》1.2【15分鐘】接口的語法特點接口中不能包含字段,可以包含:行為【方法,屬性,索引器,】接口中的所有成員不能加任何修飾符,全部默認(rèn)公有默認(rèn)抽象的實現(xiàn)類實現(xiàn)接口用“:”與繼承相同多個接口,且每個接口中所有的成員必須都實現(xiàn)public的方式實現(xiàn)(除顯式實現(xiàn))接口的obj=new實現(xiàn)類()接口的使用繼承:類繼承類單繼承1類繼承接口【類實現(xiàn)接口接口支持多繼承=接口支持多實現(xiàn)【用的少,不能有實現(xiàn)】多繼承123可以實現(xiàn)接口,但不能繼承【類】接口與接口之間可繼承,且可以多繼承類與類是單繼承,類與接口是多實現(xiàn),接口與接口是多繼承類繼承接口【類實現(xiàn)接口】多繼承=接口支持多實現(xiàn)實現(xiàn)方式兩種public沒有接口名顯式實現(xiàn)很少用顯式實現(xiàn):在實現(xiàn)的成員前加接口名,并且不能加任何顯式實現(xiàn)成員:只能通過接口類型的 調(diào)用。voidInterFace1.Fun(){}作用:1解決接口中的成員對實現(xiàn)類不適用的問題【很少用】一定程度的避免了接口的污染如果寫代碼遵循了設(shè)計原則:接口 原則,就不需要用顯式實現(xiàn)2解決多接口實現(xiàn)時的二義性【【練5分鐘15分鐘】同:可以被繼承不能實例化接口中只有抽象的成員【方法,屬性…】不能有任何實現(xiàn)不同2:抽象類只能被單繼承同:可以被繼承不能實例化接口中只有抽象的成員【方法,屬性…】不能有任何實現(xiàn)不同2:抽象類只能被單繼承接口可以被多繼承【多實現(xiàn)】關(guān)系:接口是特殊的抽象類接口】什么時候使用抽象類,接口?找的共性中;找共性時有方法,方法中有些方法/有些行為,不同子類可能具體實現(xiàn)不同,這個行為需要寫成抽象的,從而這個類也要變成抽象類2:只有方法/只有行為,所有這些行為不同的實現(xiàn)類具體實現(xiàn)不同,這些行為需要寫成抽象的,從而這個數(shù)據(jù)類型要用接口表示需求分析設(shè)計對象的特征 -字段【私有】屬性對象的行為方法Framework常用接口ICmpaable常用(比較器,需要比較的方法,實現(xiàn)我!人,學(xué)生,小怪ICmpaer 比較接口(比較器,提供比較的方法,常用于排序比較IEnumerable枚舉器,使類型支持簡單迭代(foreach),,自己可以控制迭代的節(jié)奏1接口是規(guī)范】Day05-委托與什么是委托委托是方法的,委托的是方法,當(dāng)調(diào)用委托時就是調(diào)用了這個方法.委托是一類行為的抽象。是方法的字面委托或,是一種數(shù)據(jù)類型2》生活中:業(yè)主{有很多套房} 中介【,委托】 租客中介的作用,優(yōu)缺點 方便兩邊,靈活性扶貧款!1】3百=維護性好!Day05-委托與什么是委托委托是方法的,委托的是方法,當(dāng)調(diào)用委托時就是調(diào)用了這個方法.委托是一類行為的抽象。是方法的字面委托或,是一種數(shù)據(jù)類型2》生活中:業(yè)主{有很多套房} 中介【,委托】 租客中介的作用,優(yōu)缺點 方便兩邊,靈活性扶貧款!1】3百=維護性好!當(dāng)調(diào)用委托時就是調(diào)用了這個方法。詳細(xì)委托是【了返回類型和參數(shù)組成】一種數(shù)據(jù)類型;委托代表【表示,委托簽名一致的任何方法】【委托是一類行為的抽象】當(dāng)調(diào)用委托時就是調(diào)用了這個方法。【委托能方法的地址{}間接調(diào)用】含義不同有時1: 簽名=返回類型和參數(shù)組成【這里】2:簽名=方法名和參數(shù)組成【隱藏】=委托的使用【基本步驟】31定義委托delegate例如:delegatevoidHandler();習(xí)慣命名:SelectHandler【實例化委托:為委托指定綁定方法,方法名不要寫方法(】=A和B的方法的調(diào)用步驟3handler();publicstaticvoidFun()1:演示語法的使用》{}案例2練習(xí)it(it,it委托來調(diào)用使用】方式1單播委托:一個委托對象只關(guān)聯(lián)一個方法2多播執(zhí)行:一個委托對象關(guān)聯(lián)多個方法所以:委托有返回值不適合多播執(zhí)行!委托無返回值適合多播執(zhí)行!實例化委托多種寫法委托的使用步驟:三步12:實例化委托(多種寫法)3:調(diào)用委托方式一、二:基本傳統(tǒng)標(biāo)準(zhǔn)的寫法,適合于2多播執(zhí)行:一個委托對象關(guān)聯(lián)多個方法所以:委托有返回值不適合多播執(zhí)行!委托無返回值適合多播執(zhí)行!實例化委托多種寫法委托的使用步驟:三步12:實例化委托(多種寫法)3:調(diào)用委托方式一、二:基本傳統(tǒng)標(biāo)準(zhǔn)的寫法,適合于:委托已有的方法Handler handler=newHandler(Fun);Handler handlerFun;表示的是委托對象方式三:方法,適合于:功能簡單少量代碼可以完成,且該功能不需要在其它地方復(fù)用.等號右邊表示的是委托對象= 方法Handler handler={ for(inti=0;i<a;i++) Console.WriteLine("HAHA");};方式四:Lambda表達(dá)式,適合于:寫法能簡單少量代碼可以完成,且該功能不需要在其它地方復(fù)用寫法二:功能代碼超簡單,一行代碼可以完成Lambda表達(dá)式語法:=Lambda表達(dá)式;(參數(shù))=>{語句}=>goto(12)=>一行代碼;return不能寫!一個參數(shù)=>一行代碼;return不能寫!Handler handler=(p)=>Console.WriteLine(p+"HAHA");等號右邊表示的是委托對象=Lambda表達(dá)式=實例化以下的委托,分別使用4種方法來實例化完成public delegatevoidHandler8分鐘publicintHandler(inta);2分鐘方法PersonidagepublicPersonHandler(ListPersonlist,intid)//從一個集合中選擇編號=id的那個對象15分,練5分】delegate(inta)1. 將方法做為參數(shù)傳遞,可以將一個方法的執(zhí)行代碼注入到另一個方法中2(1語句塊)義方法2(委托類型委托對象){ 1. 將方法做為參數(shù)傳遞,可以將一個方法的執(zhí)行代碼注入到另一個方法中2(1語句塊)義方法2(委托類型委托對象){ 2(委托對象=lambda表達(dá)式)為什么要注入:1定義算法/方法時:/步驟能定下來,有的暫時定不下來可以使用委托表示確定不下來的Add(inta,intb)2調(diào)用515分鐘】客戶端【調(diào)用端】確定!2. 實現(xiàn)回調(diào),實現(xiàn)的方式比接口更靈活1直接調(diào)用的】2這里的含義回到調(diào)回到調(diào)用端,結(jié)束2:回家 做事情【?復(fù)習(xí),看電視,玩,聊天】12唯一,能確定的不確定的!1》接口可以作為方法的參數(shù)!2》委托可以作為方法的參數(shù)!3》有何不同?委托可以實現(xiàn)回調(diào),作為參數(shù),比接口更靈活3 用在中:離不開委托。event可以省略4 通過使用委托,實現(xiàn)任意方法的【模式】何時使用委托而不使用接口[了解]共性:和實現(xiàn)的:實現(xiàn)接口,實現(xiàn)委托委托和接口都允許類設(shè)計器分離類型 和實現(xiàn)。接口或委托可由不了解實現(xiàn)該接口或委托方法的類的對象使用。用委托:當(dāng)使用設(shè)計模式時。當(dāng)封裝靜態(tài)方法可取時。當(dāng)調(diào)用方不需要 實現(xiàn)該方法的對象中的其他屬性、方法或接口時。時。類:接口Dogobj委托和接口都允許類設(shè)計器分離類型 和實現(xiàn)。接口或委托可由不了解實現(xiàn)該接口或委托方法的類的對象使用。用委托:當(dāng)使用設(shè)計模式時。當(dāng)封裝靜態(tài)方法可取時。當(dāng)調(diào)用方不需要 實現(xiàn)該方法的對象中的其他屬性、方法或接口時。時。類:接口Dogobjobj=(接口)Dogobj到類的類型或標(biāo)識時:例如比較方法。委托實現(xiàn)方法的異步調(diào)用F1,異步調(diào)用:步驟如下:1同步調(diào)用方法:排隊調(diào)用,前一個方法執(zhí)行時,后一個方法等待它的結(jié)束后才能啟動30分鐘【31】 1分鐘再找一個老師2異步調(diào)用方法:不排隊調(diào)用,前一個方法如果異步調(diào)用,后一個方法不必等待它的結(jié)束就可啟動,異步調(diào)用的方法是創(chuàng)建了一個新線程來工作的,與后一個方法所在不同的線程,各自,互不影響3怎么調(diào)用Framework中的任何方法都可以異步調(diào)用。前提是通過委托開啟異步調(diào)用模式。1. 為需要異步調(diào)用的方法定義一個相應(yīng)的委托創(chuàng)建該委托的 指向需要異步調(diào)用的方法【實例化委托】方法開始異步調(diào)用,BeginInvoke中的參數(shù)IAsyncCallback表示異步調(diào)用的方法結(jié)束時執(zhí)行的回調(diào)方法,往往用回調(diào)方法來處理異步的結(jié)果30分鐘【31】 1分鐘再找一個老師2異步調(diào)用方法:不排隊調(diào)用,前一個方法如果異步調(diào)用,后一個方法不必等待它的結(jié)束就可啟動,異步調(diào)用的方法是創(chuàng)建了一個新線程來工作的,與后一個方法所在不同的線程,各自,互不影響3怎么調(diào)用Framework中的任何方法都可以異步調(diào)用。前提是通過委托開啟異步調(diào)用模式。1. 為需要異步調(diào)用的方法定義一個相應(yīng)的委托創(chuàng)建該委托的 指向需要異步調(diào)用的方法【實例化委托】方法開始異步調(diào)用,BeginInvoke中的參數(shù)IAsyncCallback表示異步調(diào)用的方法結(jié)束時執(zhí)行的回調(diào)方法,往往用回調(diào)方法來處理異步的結(jié)果屬性中。a)b)4. 取得返回值【沒有表示結(jié)束】msdn使用委托進(jìn)行異步編程ductVersion IAsyncResult調(diào)用異步方法什么是語義上的特點:偶發(fā),有影響,發(fā)生后,其他對象做出響應(yīng)模型是一個天然模型模型是一個天然觀察者模式的實現(xiàn)1) 是一種設(shè)計模式!叫法多【了解】叫 【 設(shè)計模式【 模式【 模型】 叫通知模型 叫觀察者設(shè)計模式【觀察者模式 叫 模型重點:的使用步驟!字面【】是為委托類型的類的成員,表示類的偶發(fā)的行為,一旦這個行為發(fā)生,往往要引起其它行為【方法】的自動執(zhí)行是用來實現(xiàn)兩個或多個行為的聯(lián)動調(diào)用的。3)張三罵李四打張三我感冒語法:我看病源:定義的類》2所在的類的使用步驟1,32,41定義2:publicevent委托類型名;:源對象.+=響應(yīng)方法傳統(tǒng)寫法如下源對象.+=new委托類型(響應(yīng)方法)+=這里 符號不同于復(fù)合加i+=i取消 -=3觸發(fā): 在類內(nèi)部觸發(fā),觸發(fā)代碼同委托調(diào)用定義在哪里就在哪里觸發(fā)【1,3同一個類中】【是用來實現(xiàn)兩個或多個行為的聯(lián)動調(diào)用的。3)張三罵李四打張三我感冒語法:我看病源:定義的類》2所在的類的使用步驟1,32,41定義2:publicevent委托類型名;:源對象.+=響應(yīng)方法傳統(tǒng)寫法如下源對象.+=new委托類型(響應(yīng)方法)+=這里 符號不同于復(fù)合加i+=i取消 -=3觸發(fā): 在類內(nèi)部觸發(fā),觸發(fā)代碼同委托調(diào)用定義在哪里就在哪里觸發(fā)【1,3同一個類中】【4】調(diào)用觸發(fā)的方法!用來解決的問題:聯(lián)動性的問題行為12技巧:行為1因C#:2果方法【醒處理程序,貓叫2:套 的語法【使用步驟】兩種方法做:普通方法;模式直觀比較模式代碼繁瑣模式的優(yōu)點:分成多步程序員完成個性化的即可!模式為了簡化NGUI,UI組件,發(fā)現(xiàn)委托不用自己定義1:確定可以使用不用自己定義觸發(fā)不用自己去實現(xiàn)15分鐘,練習(xí)如下:練習(xí):老鷹沖下來小雞逃跑狗叫,寫方法即可!FrameworkDay01-泛型與集合泛型什么是泛型泛型將類型參數(shù)的概念引入.NETFramework,類型參數(shù)使得設(shè)計如下類和方法成為可能:類型的指定推客戶端代碼并實例化該類或方法的時候。不用自己定義觸發(fā)不用自己去實現(xiàn)15分鐘,練習(xí)如下:練習(xí):老鷹沖下來小雞逃跑狗叫,寫方法即可!FrameworkDay01-泛型與集合泛型什么是泛型泛型將類型參數(shù)的概念引入.NETFramework,類型參數(shù)使得設(shè)計如下類和方法成為可能:類型的指定推客戶端代碼并實例化該類或方法的時候。或裝箱操作的風(fēng)險或成本泛型就是將類型做參數(shù)泛型的優(yōu)點類型安全,避免強制類型轉(zhuǎn)換性能較好,避免裝箱操作將一個算法基于類型的不同而復(fù)用。避免代碼膨脹泛型約束用于類型參數(shù)(泛型)的類型種類施加where約束說明泛型的應(yīng)用一句話講,需要數(shù)據(jù)類型的地方就可以用泛型(基于不同類型的復(fù)用)的算法。集合-數(shù)據(jù)結(jié)構(gòu)ArrayList特點:有序,內(nèi)存空間連續(xù),缺點:輸入,刪除的速度慢速度快,大小可變,通過位置索引取元素.System.Collections.ArrayList非泛型泛型AddRemove泛型的應(yīng)用一句話講,需要數(shù)據(jù)類型的地方就可以用泛型(基于不同類型的復(fù)用)的算法。集合-數(shù)據(jù)結(jié)構(gòu)ArrayList特點:有序,內(nèi)存空間連續(xù),缺點:輸入,刪除的速度慢速度快,大小可變,通過位置索引取元素.System.Collections.ArrayList非泛型泛型AddRemoveRemoveAtRemoveRange,InsertContainsthis[index],統(tǒng)計數(shù)量Count,ClearList新增的方法:FindFindAllFindIndexFindLastIndexRemoveAll擴展方法:SumMaxMinAveageOrderByOrderByDescendingAnyAllT:struct類型參數(shù)必須是值類型。可以指定除Nullable以外的任何值類型。有關(guān) 信息,請參見使用可以為null的類型(C#編程指南。T:class類型參數(shù)必須是 這一點也適用于任何類、接口、委托或數(shù)組類型。T:new()類型參數(shù)必須具有無參數(shù)的公共構(gòu)造函數(shù)new()約束必須最后指定。>基類或派生自指定的基類。T:<接口名稱>。可以指定多個接口約束。約束接口也可以是泛型的。T:UT提供的類型參數(shù)UU提供的參數(shù)。這稱為類型約束。特點:鍵值對的集合,通過鍵查找值,查找方便,無序?qū)傩?Count,Keys,ValuesDay02-06特點:鍵值對的集合,通過鍵查找值,查找方便,無序?qū)傩?Count,Keys,ValuesDay02-06實戰(zhàn)案例-ARPG技能系統(tǒng)設(shè)計與實現(xiàn)通用工具類數(shù)組助手類CollectionHelper排序:升序,降序查找:查找單個,查找全部選擇:選取數(shù)組中對象的某些成員形成一個對象池:GameObjectPool //PoolManager容器(用于存放緩存的對象)添加刪除取得轉(zhuǎn)向的數(shù)組Day07程序集與反射什么是程序集程序集是.NETFramework應(yīng)用程序的構(gòu)造塊;程序集構(gòu)成了部署、版本控制、重復(fù)使用、激和程序集的內(nèi)容程序集,包含程序集元數(shù)據(jù)。類型元數(shù)據(jù)。Microsoft中間語言(MSIL)代碼。集。什么是反射反射提供了描述程序集、模塊和類型的對象(Type類型。可以使用反射動態(tài)創(chuàng)建類型反射的作用了解類型信息動態(tài)創(chuàng)建類型實例3. 動態(tài)實例的成員反射開發(fā)基本流程得到數(shù)據(jù)類型集。什么是反射反射提供了描述程序集、模塊和類型的對象(Type類型。可以使用反射動態(tài)創(chuàng)建類型反射的作用了解類型信息動態(tài)創(chuàng)建類型實例3. 動態(tài)實例的成員反射開發(fā)基本流程得到數(shù)據(jù)類型動態(tài)創(chuàng)建對象查看類型信息(了解本身信息,成員信息)反射常用類適合于類型的名稱已知方式三:typeof(類型)適合于已知類型名字”);適合于類型在另一個程序集中Is系列屬性System.Reflection命名空間MethodInfo(方法)PropertyInfo(屬性)FieldInfo(字段)ConstructInfo(構(gòu)造方法)程序集名稱,stringActivator.CreateInstance(Typetype);AssemblyassemblyAssembly.Load(FieldInfo(字段)ConstructInfo(構(gòu)造方法)程序集名稱,stringActivator.CreateInstance(Typetype);AssemblyassemblyAssembly.Load(程序集);assembly.CreateInstance(Type);//找到有參構(gòu)造方法,動態(tài)調(diào)用構(gòu)造方法設(shè)計模式什么是設(shè)計模式每一個模式描述了一個在我們周圍不斷重復(fù)發(fā)生的問題,以及該問題的解決方案的。這樣,你就能一次又一次地使用該方案而不必做重復(fù)勞動創(chuàng)建型-關(guān)注對象創(chuàng)建的問題SINGLETON(單件,單例):唯一問題:如何保證一個類只創(chuàng)建一個對象,且該對象全局共享意圖:保證一個類僅有一個實例,并提供一個它的全局 點。適用性:點它時。擴展的實例時。結(jié)構(gòu):SimpleFactory多選一問題:客戶在使用對象時,在多個類型中選擇一個來創(chuàng)建對象,具體對象的類型可能有變化意圖:適用性:結(jié)構(gòu):SimpleFactory多選一問題:客戶在使用對象時,在多個類型中選擇一個來創(chuàng)建對象,具體對象的類型可能有變化意圖:適用性:候,找全局創(chuàng)建點即可.結(jié)構(gòu):AbstractFactory抽象工廠:系列問題:多個類型中以系列化的方式創(chuàng)建對象意圖:提供一個創(chuàng)建一系列相關(guān)或相互依賴對象的接口,而無需指定它們具體的類適用性:????于它的(創(chuàng)建與表示分離)(多系列中選一系列)對象的設(shè)計以便進(jìn)行使用時。(同系列中多種)類庫,而只想顯示它們的接口而不是實現(xiàn)時。AbstractFactory抽象工廠:系列問題:多個類型中以系列化的方式創(chuàng)建對象意圖:提供一個創(chuàng)建一系列相關(guān)或相互依賴對象的接口,而無需指定它們具體的類適用性:????于它的(創(chuàng)建與表示分離)(多系列中選一系列)對象的設(shè)計以便進(jìn)行使用時。(同系列中多種)類庫,而只想顯示它們的接口而不是實現(xiàn)時。(客戶端依賴抽象)結(jié)構(gòu):Builder建造器,:組裝變化:復(fù)雜對象:對象中的成員可能是其它類型的對象復(fù)雜對象的結(jié)構(gòu)是穩(wěn)定的,但是組成結(jié)構(gòu)的具體對象是變化的問題:復(fù)雜對象對于子部件構(gòu)建的過程意圖:將一個復(fù)雜對象的構(gòu)建與它的表示分離,使得同樣的構(gòu)建過程可以創(chuàng)建不同的表示。適用性:當(dāng)創(chuàng)建復(fù)雜對象的算法應(yīng)該于該對象的組成部分以及它們的裝配方式時。結(jié)構(gòu):問題:復(fù)雜對象對于子部件構(gòu)建的過程意圖:將一個復(fù)雜對象的構(gòu)建與它的表示分離,使得同樣的構(gòu)建過程可以創(chuàng)建不同的表示。適用性:當(dāng)創(chuàng)建復(fù)雜對象的算法應(yīng)該于該對象的組成部分以及它們的裝配方式時。結(jié)構(gòu):結(jié)構(gòu)型-關(guān)注類或?qū)ο蟮慕Y(jié)構(gòu)問題,組織類與類的關(guān)系Facade外觀,門面):向?qū)栴}:客戶代碼可.流程的組織交由外觀類來實現(xiàn),提供給客戶一個簡單的 接口即意圖:Facade模式定義了一個個接口使得這一子系統(tǒng)更加容易使用。適用性:復(fù)雜。大多數(shù)模式使用時都會產(chǎn)生更小的類。這使得子系統(tǒng)更具可重用性,也更容易對子系統(tǒng)進(jìn)行定制,但這也給那些不需要定制子系統(tǒng)的用戶帶來一些使用上的。Facade可以提供一個簡單的缺省視圖,這一視圖對大多數(shù)用戶來說已經(jīng)足夠,而那些需要的可定制性的用戶可以越過facade可.流程的組織交由外觀類來實現(xiàn),提供給客戶一個簡單的 接口即意圖:Facade模式定義了一個個接口使得這一子系統(tǒng)更加容易使用。適用性:復(fù)雜。大多數(shù)模式使用時都會產(chǎn)生更小的類。這使得子系統(tǒng)更具可重用性,也更容易對子系統(tǒng)進(jìn)行定制,但這也給那些不需要定制子系統(tǒng)的用戶帶來一些使用上的。Facade可以提供一個簡單的缺省視圖,這一視圖對大多數(shù)用戶來說已經(jīng)足夠,而那些需要的可定制性的用戶可以越過facade層。facade將這個子系統(tǒng)與客戶以及其他的子系統(tǒng)分離,可以提高子系統(tǒng)的性和可移植性。facade模式定義子系統(tǒng)中每層的點。之間的依賴關(guān)系。facade進(jìn)行通訊,從而簡化了它們結(jié)構(gòu)ADAPTER(適配器):轉(zhuǎn)接問題:兩個功能一致的類,但是由于接口的不同不能直接復(fù)用,加入適配器做接口轉(zhuǎn)換意圖:將一個類的接口轉(zhuǎn)換成客戶希望的另外一個接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些類可以一起工作適用性:意圖:將一個類的接口轉(zhuǎn)換成客戶希望的另外一個接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些類可以一起工作適用性:口可能不一定兼容的類)協(xié)同工作。(Adapter)你想使用一些已經(jīng)存在的子類,但是不可能對每一個都進(jìn)行子類化以匹配它們的接口。對象適配器可以適配它的父類接口。結(jié)構(gòu):BRIDGE(橋接):連接兩端的變化問題:列組合,所以將兩個變化分別,再用關(guān)聯(lián)建立主體與成員的關(guān)系,這個關(guān)聯(lián)即是橋意圖:部分(主體的成員)與它的實現(xiàn)部分分離,使它們都可以地變化。適用性:你不希望在抽象和它的實現(xiàn)部分之間有一個固定的綁定關(guān)系。例如這種情況可能是因為,在程序運行時刻實現(xiàn)部分應(yīng)可以被選擇或者切換。Bridge模式使你可以對不同的抽象接口和實現(xiàn)部分進(jìn)行組合,并分別對它們進(jìn)行擴充。正如在意圖一節(jié)的第一個類圖中所示的那樣,有許多類要生成。這樣一種類層次結(jié)構(gòu)說明你必須將一個對象分解成兩個部分。Ru適用性:你不希望在抽象和它的實現(xiàn)部分之間有一個固定的綁定關(guān)系。例如這種情況可能是因為,在程序運行時刻實現(xiàn)部分應(yīng)可以被選擇或者切換。Bridge模式使你可以對不同的抽象接口和實現(xiàn)部分進(jìn)行組合,并分別對它們進(jìn)行擴充。正如在意圖一節(jié)的第一個類圖中所示的那樣,有許多類要生成。這樣一種類層次結(jié)構(gòu)說明你必須將一個對象分解成兩個部分。Rumbaugh稱這種類層次結(jié)構(gòu)為“嵌套的泛化”(nestedgeneralizations)(可能使用計數(shù)),但同時要求客戶并不知道這一點。結(jié)構(gòu):COMPOSITE(組合):樹問題:將對象組織成樹形結(jié)構(gòu)意圖:將對象組-Composite使得用戶對單個對象和組合對象的使用具有一致性。適用性:-整體層次結(jié)構(gòu)。你希望用戶忽略組合對象與單個對象的不同,用戶將統(tǒng)一地使用組合結(jié)構(gòu)中的所有對象。結(jié)構(gòu):DECORATOR(裝飾):包裝問題:對一個對象動態(tài)擴展原有的行為能力,適用性:-整體層次結(jié)構(gòu)。你希望用戶忽略組合對象與單個對象的不同,用戶將統(tǒng)一地使用組合結(jié)構(gòu)中的所有對象。結(jié)構(gòu):DECORATOR(裝飾):包裝問題:對一個對象動態(tài)擴展原有的行為能力,不斷包裝,不斷的擴展意圖:Decorator模式相比生成子類更為靈活。適用性

溫馨提示

  • 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)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論