freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

現(xiàn)代軟件設(shè)計(jì)技術(shù)-資料下載頁(yè)

2024-10-12 08:35本頁(yè)面

【導(dǎo)讀】構(gòu)造可重用類(lèi)庫(kù)的技術(shù)。–單實(shí)例類(lèi)型,如何構(gòu)造這單個(gè)實(shí)例?Strategy、Iterator、Mediator、State、mand. parameterization)‖,使得組件更容易被定制。碼,從而獲得很高的效率。STL是成功的genericprogramming典型。genericprogramming限制代碼產(chǎn)生的方式:用實(shí)體類(lèi)型。正的代碼,無(wú)法產(chǎn)生完全新的代碼。一個(gè)系統(tǒng)的具體實(shí)現(xiàn)。交織組合既可以在pile-. –從科學(xué)計(jì)算用途-〉一般性的抽象,Activelibraries,提供一種抽象的功能,并且控制優(yōu)化過(guò)程。許多技術(shù),如policy、編譯時(shí)刻計(jì)算功能。對(duì)type進(jìn)行一些基本的邏輯操作(編程)

  

【正文】 ce) { Lock guard(mutex)。 if (!pInstance) { pInstance = new Singleton。 } } return *pInstance。 } Tabledriven pattern ? 代替 runtime switch ? 問(wèn)題:從文件中讀入一組以 CShape為基類(lèi)的對(duì)象,傳統(tǒng)的做法: ReadWord(stream, amp。typeid)。 switch (typeid) { case Line_ID: pObj = (CShape *)new CLine。 pObjLoad(stream)。 break。 case Poly_ID: …… } (pObj)。 Tabledriven pattern(續(xù) ) ? 維護(hù)一張表 (typeid, fnCreator) ? 根據(jù) typeid查找到創(chuàng)建函數(shù),然后創(chuàng)建對(duì)象,示例代碼如下: ReadWord(stream, amp。typeid)。 FnCreator fn = Table::Instance().Lookup(typeid)。 pObj = fn()。 pObjLoad(stream)。 (pObj)。 ? 在 MFC/ATL大量用到 tabledriven的技術(shù) ? 用多維表可以實(shí)現(xiàn) doubledispatch或者 multidispatch技術(shù) 用類(lèi)層次代替 union ? Union最主要的用法 – Discriminated union: tag + union – 例如 VARIANT ? 可以用一個(gè)類(lèi)層次來(lái)替代 union, 這對(duì)于那些不支持 union的語(yǔ)言很有意義 – 比如 Java – 使用類(lèi)層次的好處: ? 類(lèi)型安全性 ? 代碼簡(jiǎn)潔、清晰 ? 容易擴(kuò)展 ? 反映了類(lèi)型之間的本質(zhì)關(guān)系 (OO) – 參考:《 Effective Java》 舉例:用類(lèi)層次代替 union Java代碼 代替 enum結(jié)構(gòu) ? Enum類(lèi)型的缺點(diǎn) – 其中的常量沒(méi)有自己的名字空間 – 難以擴(kuò)展,使用 enum來(lái)定義的類(lèi)型非常脆弱 – 多方難以合作添加常量 – 與其他類(lèi)型 (比如字符串 )不便于轉(zhuǎn)換 ? typesafe enum pattern, from ―Effective Java‖ – 基本思想:定義一個(gè)類(lèi)來(lái)代表單個(gè)元素,并且不提供任何公有構(gòu)造函數(shù)。相反,提供公有的靜態(tài) final域,可枚舉類(lèi)型中的每一個(gè)常量都對(duì)應(yīng)一個(gè)域 framework ? 領(lǐng)域工程 – 單個(gè)系統(tǒng) ——〉一類(lèi)系統(tǒng) – 有較強(qiáng)的抽象能力 ? 組件庫(kù) ? 提供定制功能,允許開(kāi)發(fā)人員對(duì)于框架主體部分進(jìn)行修改 ? 不同層次上的 framework – 基于二進(jìn)制代碼的 framework, 例如 MMC – 基于源代碼的 framework, 例如 MFC 基于二進(jìn)制的 framework ? 接口: – 為應(yīng)用中的組件提供二進(jìn)制接口 ? 以對(duì)象形式封裝 ? 以功能為單位 – 粒度 ? 大而全的接口 ? 小型接口,允許動(dòng)態(tài)發(fā)現(xiàn)新的接口 ? 通信模型 – 用戶(hù)組件與框架進(jìn)行通信 – 用戶(hù)組件之間如何通信? ? 通過(guò)框架傳遞信息 ? 通過(guò)框架建立直通模型 基于源代碼的 framework ? 接口: – 一般為抽象類(lèi),用戶(hù)提供虛函數(shù)的實(shí)現(xiàn),并注冊(cè)到主框架中 – 用戶(hù)定制的余地比較大 ? 通信模型 – 用戶(hù)組件與框架進(jìn)行通信 – 用戶(hù)組件之間容易建立起直通途徑 從派生類(lèi)傳播類(lèi)型到基類(lèi)的一種模式 ? 意圖: – 基類(lèi)有時(shí)需要根據(jù)子類(lèi)的類(lèi)型執(zhí)行一些功能,而基類(lèi)又不可能直接得到子類(lèi)的靜態(tài)類(lèi)型 – 這對(duì)于 generic programming非常重要,因?yàn)榫幾g器要靠靜態(tài)類(lèi)型來(lái)實(shí)例化模板 (函數(shù)或者類(lèi) ) ? 解決方案 – 用虛函數(shù)不能解決問(wèn)題 —— runtime多態(tài)性 – 在子類(lèi)中插入一個(gè)函數(shù),由該函數(shù)調(diào)用模板函數(shù)或者模板類(lèi),或者該函數(shù)調(diào)用基類(lèi)中的模板成員函數(shù) – 僅對(duì)基于源代碼的 framework適用 Framework舉例 ? 為報(bào)社提供一套 framework SnapIn管理器 FrameSite FrameSite FrameSite SnapIn對(duì)象 SnapIn對(duì)象 SnapIn對(duì)象 Security管理器 Database管理器 UI管理器 SnapIn倉(cāng)庫(kù) IFrameSite ISnapInfo SnapIn DLL SnapIn DLL SnapIn DLL 可重用類(lèi)庫(kù)的設(shè)計(jì) (一 ) ? 在所有的系統(tǒng)設(shè)計(jì)中,可重用類(lèi)庫(kù)的設(shè)計(jì)是難度比較大的,要做到: – 使用:靈活性和易用性 – 功能:廣泛性和效率 ? 經(jīng)驗(yàn)非常重要 – 實(shí)現(xiàn)同樣的功能會(huì)有許多不同的道路,如何選擇?效果怎么樣? ? 類(lèi)庫(kù)的基礎(chǔ) – 是否使用其他的類(lèi)庫(kù)?是否使用特殊的平臺(tái)和編譯環(huán)境? ? 參考成功的類(lèi)庫(kù) – 起點(diǎn)要高 可重用類(lèi)庫(kù)的設(shè)計(jì) (二 ) ? 接口的設(shè)計(jì) – 這是類(lèi)庫(kù)的關(guān)鍵,會(huì)影響到類(lèi)庫(kù)的使用 ? 接口的類(lèi)型: C/C++ – 大而全的接口并不理想 – 接口的語(yǔ)義一定要清晰 – facade模式 ? 內(nèi)存管理 – 保證內(nèi)存分配和釋放的一致性 – 使用要方便 ? [out]參數(shù)的資源由誰(shuí)來(lái)申請(qǐng)?誰(shuí)知道 size? ? 是否使用自定義的內(nèi)存分配器,例如針對(duì)小對(duì)象的分配器 可重用類(lèi)庫(kù)的設(shè)計(jì) (三 ) ? 使用各種模式 – 模式是經(jīng)驗(yàn),成功的典范 – policy模式允許使用者定制類(lèi) – 結(jié)構(gòu)型模式有助于建立起更加合理的結(jié)構(gòu)模型,而不至于層次錯(cuò)綜復(fù)雜 – 行為型模式有助于各個(gè)類(lèi)之間有更好的協(xié)作模型 – 創(chuàng)建型模式可以提供各種合理的創(chuàng)建機(jī)制 ? 模板類(lèi)庫(kù)的特殊性 – 利用模板類(lèi)型實(shí)現(xiàn) piletime的預(yù)處理 – 熟悉編譯器的特性 – 控制模板生成代碼 可重用類(lèi)庫(kù)的設(shè)計(jì) (四 ) ? 行為前置和延后 – 在基類(lèi)中提供缺省的實(shí)現(xiàn) – 純虛函數(shù) —— 強(qiáng)制子類(lèi)提供實(shí)現(xiàn) – 利用 functor或者函數(shù)指針 – 要求 (必須 )子類(lèi)調(diào)用父類(lèi)的實(shí)現(xiàn) ? 用宏來(lái)封裝代碼 ? 代碼風(fēng)格 ? 類(lèi)庫(kù)的優(yōu)化 – 優(yōu)化需要用到內(nèi)部知識(shí),是否暴露這些知識(shí) – 允許使用者用 policy進(jìn)行配置,用不同的實(shí)現(xiàn)配置類(lèi) – 類(lèi)似于 policy的思想,在細(xì)節(jié)點(diǎn)上用開(kāi)關(guān)進(jìn)行控制 可重用類(lèi)庫(kù)的設(shè)計(jì) (五 ) ? 類(lèi)庫(kù)的調(diào)試 – 類(lèi)庫(kù)內(nèi)部調(diào)試,使用 assert支持 ? 類(lèi)庫(kù)的測(cè)試 – 比應(yīng)用系統(tǒng)的測(cè)試更加嚴(yán)格 ? 類(lèi)庫(kù)的發(fā)行 – 是否提供源代碼? – 文檔 – 編譯設(shè)置 可重用類(lèi)庫(kù)的設(shè)計(jì) (六 ) ? 舉例: MFC/ATL ? MFC – 同時(shí)也具有源代碼框架的結(jié)構(gòu) – 傳統(tǒng)意義上的 C++類(lèi)庫(kù),對(duì) Win32進(jìn)行了封裝 – 以便于使用為主要目標(biāo),優(yōu)化較少 – 用到了許多 patterns, 吻合 Windows應(yīng)用模式 – 涉及到許多類(lèi)庫(kù)設(shè)計(jì)技術(shù) – 與 Wizard結(jié)合產(chǎn)生基本代碼 ? ATL – 用到了 generic programming中許多新的技術(shù) – 模板技術(shù) – 優(yōu)化比較突出 總結(jié) ? C++基礎(chǔ) ? COM基礎(chǔ) ? COM擴(kuò)展 ? COM+ ? Design Patterns ? 軟件設(shè)計(jì)技術(shù)
點(diǎn)擊復(fù)制文檔內(nèi)容
教學(xué)課件相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1