免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
面向?qū)ο?/div>

面向?qū)ο?/a>(Object Oriented,OO)是當前計算機界關(guān)心的重點,它是90年代軟件開發(fā)方法的主流。面向對象的概念和應(yīng)用已超越了程序設(shè)計軟件開發(fā),擴展到很寬的范圍。如數(shù)據(jù)庫系統(tǒng)、交互式界面、應(yīng)用結(jié)構(gòu)、應(yīng)用平臺、分布式系統(tǒng)、網(wǎng)絡(luò)管理結(jié)構(gòu)、CAD技術(shù)、人工智能等領(lǐng)域。

      談到面向?qū)ο螅@方面的文章非常多。但是,明確地給出對象的定義或說明對象的定義的非常少——至少我現(xiàn)在還沒有發(fā)現(xiàn)。其初,“面向?qū)ο蟆笔菍V冈?a target="_new">程序設(shè)計中采用封裝、繼承、抽象等設(shè)計方法??墒?,這個定義顯然不能再適合現(xiàn)在情況。面向?qū)ο蟮乃枷胍呀?jīng)涉及到軟件開發(fā)的各個方面。如,面向?qū)ο蟮姆治觯?a target="_new">OOA,Object Oriented Analysis),面向?qū)ο蟮脑O(shè)計(OOD,Object Oriented Design)、以及我們經(jīng)常說的面向?qū)ο蟮木幊虒崿F(xiàn)(OOP,Object Oriented Programming)。許多有關(guān)面向?qū)ο蟮奈恼露贾皇侵v述在面向?qū)ο蟮拈_發(fā)中所需要注意的問題或所采用的比較好的設(shè)計方法。看這些文章只有真正懂得什么是對象,什么是面向?qū)ο?,才能最大程度地對自己有所裨益。這一點,恐怕對初學(xué)者甚至是從事相關(guān)工作多年的人員也會對它們的概念模糊不清。

 

      面向?qū)ο笫钱斍坝嬎銠C界關(guān)心的重點,它是90年代軟件開發(fā)方法的主流。面向?qū)ο蟮母拍詈蛻?yīng)用已超越了程序設(shè)計和軟件開發(fā),擴展到很寬的范圍。如數(shù)據(jù)庫系統(tǒng)、交互式界面、應(yīng)用結(jié)構(gòu)、應(yīng)用平臺、分布式系統(tǒng)、網(wǎng)絡(luò)管理結(jié)構(gòu)、CAD技術(shù)、人工智能等領(lǐng)域。

一、傳統(tǒng)開發(fā)方法存在問題

      1.軟件重用性差
      重用性是指同一事物不經(jīng)修改或稍加修改就可多次重復(fù)使用的性質(zhì)。軟件重用性是軟件工程追求的目標之一。

      2.軟件可維護性差
      軟件工程強調(diào)軟件的可維護性,強調(diào)文檔資料的重要性,規(guī)定最終的軟件產(chǎn)品應(yīng)該由完整、一致的配置成分組成。在軟件開發(fā)過程中,始終強調(diào)軟件的可讀性、可修改性和可測試性是軟件的重要的質(zhì)量指標。實踐證明,用傳統(tǒng)方法開發(fā)出來的軟件,維護時其費用和成本仍然很高,其原因是可修改性差,維護困難,導(dǎo)致可維護性差。

      3.開發(fā)出的軟件不能滿足用戶需要
      用傳統(tǒng)的結(jié)構(gòu)化方法開發(fā)大型軟件系統(tǒng)涉及各種不同領(lǐng)域的知識,在開發(fā)需求模糊或需求動態(tài)變化的系統(tǒng)時,所開發(fā)出的軟件系統(tǒng)往往不能真正滿足用戶的需要。

      用結(jié)構(gòu)化方法開發(fā)的軟件,其穩(wěn)定性、可修改性和可重用性都比較差,這是因為結(jié)構(gòu)化方法的本質(zhì)是功能分解,從代表目標系統(tǒng)整體功能的單個處理著手,自頂向下不斷把復(fù)雜的處理分解為子處理,這樣一層一層的分解下去,直到僅剩下若干個容易實現(xiàn)的子處理功能為止,然后用相應(yīng)的工具來描述各個最低層的處理。因此,結(jié)構(gòu)化方法是圍繞實現(xiàn)處理功能的“過程”來構(gòu)造系統(tǒng)的。然而,用戶需求的變化大部分是針對功能的,因此,這種變化對于基于過程的設(shè)計來說是災(zāi)難性的。用這種方法設(shè)計出來的系統(tǒng)結(jié)構(gòu)常常是不穩(wěn)定的 ,用戶需求的變化往往造成系統(tǒng)結(jié)構(gòu)的較大變化,從而需要花費很大代價才能實現(xiàn)這種變化。

二、面向?qū)ο蟮幕靖拍?/strong>

      (1)對象。
      對象是人們要進行研究的任何事物,從最簡單的整數(shù)到復(fù)雜的飛機等均可看作對象,它不僅能表示具體的事物,還能表示抽象的規(guī)則、計劃或事件。

      (2)對象的狀態(tài)和行為。
      對象具有狀態(tài),一個對象用數(shù)據(jù)值來描述它的狀態(tài)。
      對象還有操作,用于改變對象的狀態(tài),對象及其操作就是對象的行為。
      對象實現(xiàn)了數(shù)據(jù)和操作的結(jié)合,使數(shù)據(jù)和操作封裝于對象的統(tǒng)一體中

      (3)。
      具有相同或相似性質(zhì)的對象的抽象就是類。因此,對象的抽象是類,類的具體化就是對象,也可以說類的實例是對象。
      類具有屬性,它是對象的狀態(tài)的抽象,用數(shù)據(jù)結(jié)構(gòu)來描述類的屬性。
      類具有操作,它是對象的行為的抽象,用操作名和實現(xiàn)該操作的方法來描述。

      (4)類的結(jié)構(gòu)。
      在客觀世界中有若干類,這些類之間有一定的結(jié)構(gòu)關(guān)系。通常有兩種主要的結(jié)構(gòu)關(guān)系,即一般--具體結(jié)構(gòu)關(guān)系,整體--部分結(jié)構(gòu)關(guān)系。

      ①一般——具體結(jié)構(gòu)稱為分類結(jié)構(gòu),也可以說是“或”關(guān)系,或者是“is a”關(guān)系。
      ②整體——部分結(jié)構(gòu)稱為組裝結(jié)構(gòu),它們之間的關(guān)系是一種“與”關(guān)系,或者是“has a”關(guān)系。

      (5)消息和方法。
      對象之間進行通信的結(jié)構(gòu)叫做消息。在對象的操作中,當一個消息發(fā)送給某個對象時,消息包含接收對象去執(zhí)行某種操作的信息。發(fā)送一條消息至少要包括說明接受消息的對象名、發(fā)送給該對象的消息名(即對象名、方法名)。一般還要對參數(shù)加以說明,參數(shù)可以是認識該消息的對象所知道的變量名,或者是所有對象都知道的全局變量名。

      類中操作的實現(xiàn)過程叫做方法,一個方法有方法名、參數(shù)、方法體。消息傳遞如圖10-1所示。


二、面向?qū)ο蟮奶卣?/strong>

      (1)對象唯一性。
      每個對象都有自身唯一的標識,通過這種標識,可找到相應(yīng)的對象。在對象的整個生命期中,它的標識都不改變,不同的對象不能有相同的標識。

      (2)分類性。
      分類性是指將具有一致的數(shù)據(jù)結(jié)構(gòu)(屬性)和行為(操作)的對象抽象成類。一個類就是這樣一種抽象,它反映了與應(yīng)用有關(guān)的重要性質(zhì),而忽略其他一些無關(guān)內(nèi)容。任何類的劃分都是主觀的,但必須與具體的應(yīng)用有關(guān)。

      (3)繼承性。
      繼承性是子類自動共享父類數(shù)據(jù)結(jié)構(gòu)和方法的機制,這是類之間的一種關(guān)系。在定義和實現(xiàn)一個類的時候,可以在一個已經(jīng)存在的類的基礎(chǔ)之上來進行,把這個已經(jīng)存在的類所定義的內(nèi)容作為自己的內(nèi)容,并加入若干新的內(nèi)容。

      繼承性是面向?qū)ο蟪绦蛟O(shè)計語言不同于其它語言的最重要的特點,是其他語言所沒有的。

      在類層次中,子類只繼承一個父類的數(shù)據(jù)結(jié)構(gòu)和方法,則稱為單重繼承。
      在類層次中,子類繼承了多個父類的數(shù)據(jù)結(jié)構(gòu)和方法,則稱為多重繼承。
      在軟件開發(fā)中,類的繼承性使所建立的軟件具有開放性、可擴充性,這是信息組織與分類的行之有效的方法,它簡化了對象、類的創(chuàng)建工作量,增加了代碼的可重性。
      采用繼承性,提供了類的規(guī)范的等級結(jié)構(gòu)。通過類的繼承關(guān)系,使公共的特性能夠共享,提高了軟件的重用性。

      (4)多態(tài)性(多形性)
      多態(tài)性使指相同的操作或函數(shù)、過程可作用于多種類型的對象上并獲得不同的結(jié)果。不同的對象,收到同一消息可以產(chǎn)生不同的結(jié)果,這種現(xiàn)象稱為多態(tài)性。
      多態(tài)性允許每個對象以適合自身的方式去響應(yīng)共同的消息。
      多態(tài)性增強了軟件的靈活性和重用性。

三、面向?qū)ο蟮囊?/strong>

      (1)抽象。
      抽象是指強調(diào)實體的本質(zhì)、內(nèi)在的屬性。在系統(tǒng)開發(fā)中,抽象指的是在決定如何實現(xiàn)對象之前的對象的意義和行為。使用抽象可以盡可能避免過早考慮一些細節(jié)。

      類實現(xiàn)了對象的數(shù)據(jù)(即狀態(tài))和行為的抽象。
 
      (2)封裝性(信息隱藏)。
      封裝性是保證軟件部件具有優(yōu)良的模塊性的基礎(chǔ)。
      面向?qū)ο蟮念愂欠庋b良好的模塊,類定義將其說明(用戶可見的外部接口)與實現(xiàn)(用戶不可見的內(nèi)部實現(xiàn))顯式地分開,其內(nèi)部實現(xiàn)按其具體定義的作用域提供保護。
      對象是封裝的最基本單位。封裝防止了程序相互依賴性而帶來的變動影響。面向?qū)ο蟮姆庋b比傳統(tǒng)語言的封裝更為清晰、更為有力。

      (3)共享性
      面向?qū)ο蠹夹g(shù)在不同級別上促進了共享
      同一類中的共享。同一類中的對象有著相同數(shù)據(jù)結(jié)構(gòu)。這些對象之間是結(jié)構(gòu)、行為特征的共享關(guān)系。
      在同一應(yīng)用中共享。在同一應(yīng)用的類層次結(jié)構(gòu)中,存在繼承關(guān)系的各相似子類中,存在數(shù)據(jù)結(jié)構(gòu)和行為的繼承,使各相似子類共享共同的結(jié)構(gòu)和行為。使用繼承來實現(xiàn)代碼的共享,這也是面向?qū)ο蟮闹饕獌?yōu)點之一。
      在不同應(yīng)用中共享。面向?qū)ο蟛粌H允許在同一應(yīng)用中共享信息,而且為未來目標的可重用設(shè)計準備了條件。通過類庫這種機制和結(jié)構(gòu)來實現(xiàn)不同應(yīng)用中的信息共享。

      4.強調(diào)對象結(jié)構(gòu)而不是程序結(jié)構(gòu)

四、面向?qū)ο蟮拈_發(fā)方法

      目前,面向?qū)ο箝_發(fā)方法的研究已日趨成熟,國際上已有不少面向?qū)ο螽a(chǎn)品出現(xiàn)。面向?qū)ο箝_發(fā)方法有Coad方法、Booch方法和OMT方法等。

      1.Booch方法

      Booch最先描述了面向?qū)ο蟮能浖_發(fā)方法的基礎(chǔ)問題,指出面向?qū)ο箝_發(fā)是一種根本不同于傳統(tǒng)的功能分解的設(shè)計方法。面向?qū)ο蟮能浖纸飧咏藢陀^事務(wù)的理解,而功能分解只通過問題空間的轉(zhuǎn)換來獲得。

      2.Coad方法

      Coad方法是1989年Coad和Yourdon提出的面向?qū)ο箝_發(fā)方法。該方法的主要優(yōu)點是通過多年來大系統(tǒng)開發(fā)的經(jīng)驗與面向?qū)ο蟾拍畹挠袡C結(jié)合,在對象、結(jié)構(gòu)、屬性和操作的認定方面,提出了一套系統(tǒng)的原則。該方法完成了從需求角度進一步進行類和類層次結(jié)構(gòu)的認定。盡管Coad方法沒有引入類和類層次結(jié)構(gòu)的術(shù)語,但事實上已經(jīng)在分類結(jié)構(gòu)、屬性、操作、消息關(guān)聯(lián)等概念中體現(xiàn)了類和類層次結(jié)構(gòu)的特征。

      3.OMT方法

      OMT方法是1991年由James Rumbaugh等5人提出來的,其經(jīng)典著作為“面向?qū)ο蟮慕Ec設(shè)計”。

      該方法是一種新興的面向?qū)ο蟮拈_發(fā)方法,開發(fā)工作的基礎(chǔ)是對真實世界的對象建模,然后圍繞這些對象使用分析模型來進行獨立于語言的設(shè)計,面向?qū)ο蟮慕:驮O(shè)計促進了對需求的理解,有利于開發(fā)得更清晰、更容易維護的軟件系統(tǒng)。該方法為大多數(shù)應(yīng)用領(lǐng)域的軟件開發(fā)提供了一種實際的、高效的保證,努力尋求一種問題求解的實際方法。

      4.UML(Unified Modeling Language)語言

      軟件工程領(lǐng)域在1995年~1997年取得了前所未有的進展,其成果超過軟件工程領(lǐng)域過去15年的成就總和,其中最重要的成果之一就是統(tǒng)一建模語言(UML)的出現(xiàn)。UML將是面向?qū)ο蠹夹g(shù)領(lǐng)域內(nèi)占主導(dǎo)地位的標準建模語言
UML不僅統(tǒng)一了Booch方法、OMT方法、OOSE方法的表示方法,而且對其作了進一步的發(fā)展,最終統(tǒng)一為大眾接受的標準建模語言。UML是一種定義良好、易于表達、功能強大且普遍適用的建模語言。它融入了軟件工程領(lǐng)域的新思想、新方法和新技術(shù)。它的作用域不限于支持面向?qū)ο蟮姆治雠c設(shè)計,還支持從需求分析開始的軟件開發(fā)全過程。

五、面向?qū)ο蟮哪P?/strong>

 ·對象模型

      對象模型表示了靜態(tài)的、結(jié)構(gòu)化的系統(tǒng)數(shù)據(jù)性質(zhì),描述了系統(tǒng)的靜態(tài)結(jié)構(gòu),它是從客觀世界實體的對象關(guān)系角度來描述,表現(xiàn)了對象的相互關(guān)系。該模型主要關(guān)心系統(tǒng)中對象的結(jié)構(gòu)、屬性和操作,它是分析階段三個模型的核心,是其他兩個模型的框架

      1.對象和類

      (1) 對象。
      對象建模的目的就是描述對象。

      (2) 類。
      通過將對象抽象成類,我們可以使問題抽象化,抽象增強了模型的歸納能力。

      (3) 屬性。
      屬性指的是類中對象所具有的性質(zhì)(數(shù)據(jù)值)。

      (4) 操作和方法。

      操作是類中對象所使用的一種功能或變換。類中的各對象可以共享操作,每個操作都有一個目標對象作為其隱含參數(shù)。
  方法是類的操作的實現(xiàn)步驟。

      2.關(guān)聯(lián)和鏈
      關(guān)聯(lián)是建立類之間關(guān)系的一種手段,而鏈則是建立對象之間關(guān)系的一種手段。

      (1) 關(guān)聯(lián)和鏈的含義。
      鏈表示對象間的物理與概念聯(lián)結(jié),關(guān)聯(lián)表示類之間的一種關(guān)系,鏈是關(guān)聯(lián)的實例,關(guān)聯(lián)是鏈的抽象。

      (2) 角色。
      角色說明類在關(guān)聯(lián)中的作用,它位于關(guān)聯(lián)的端點。

      (3) 受限關(guān)聯(lián)。
      受限關(guān)聯(lián)由兩個類及一個限定詞組成,限定詞是一種特定的屬性,用來有效的減少關(guān)聯(lián)的重數(shù),限定詞在關(guān)聯(lián)的終端對象集中說明。
      限定提高了語義的精確性,增強了查詢能力,在現(xiàn)實世界中,常常出現(xiàn)限定詞。

      (4) 關(guān)聯(lián)的多重性。
      關(guān)聯(lián)的多重性是指類中有多少個對象與關(guān)聯(lián)的類的一個對象相關(guān)。重數(shù)常描述為“一”或“多”。
      圖10-8表示了各種關(guān)聯(lián)的重數(shù)。小實心圓表示“多個”,從零到多。小空心圓表示零或一。沒有符號表示的是一對一關(guān)聯(lián)。

      3.類的層次結(jié)構(gòu)
      (1) 聚集關(guān)系。
      聚集是一種“整體-部分”關(guān)系。在這種關(guān)系中,有整體類和部分類之分。聚集最重要的性質(zhì)是傳遞性,也具有逆對稱性。


      聚集可以有不同層次,可以把不同分類聚集起來得到一顆簡單的聚集樹,聚集樹是一種簡單表示,比畫很多線來將部分類聯(lián)系起來簡單得多,對象模型應(yīng)該容易地反映各級層次,圖10-10表示一個關(guān)于微機的多極聚集。

       (2)一般化關(guān)系。
      一般化關(guān)系是在保留對象差異的同時共享對象相似性的一種高度抽象方式。它是“一般---具體”的關(guān)系。一般化類稱為你類,具體類又能稱為子類,各子類繼承了交類的性質(zhì),而各子類的一些共同性質(zhì)和操作又歸納到你類中。因此,一般化關(guān)系和繼承是同時存在的。一般化關(guān)系的符號表示是在類關(guān)聯(lián)的連線上加一個小三角形,如圖10-11

      4.對象模型
      (1)模板。模板是類、關(guān)聯(lián)、一般化結(jié)構(gòu)的邏輯組成。
      (2)對象模型。

      對象模型是由一個或若干個模板組成。模板將模型分為若干個便于管理的子塊,在整個對象模型和類及關(guān)聯(lián)的構(gòu)造塊之間,模板提供了一種集成的中間單元,模板中的類名及關(guān)聯(lián)名是唯一的。

·動態(tài)模型

      動態(tài)模型是與時間和變化有關(guān)的系統(tǒng)性質(zhì)。該模型描述了系統(tǒng)的控制結(jié)構(gòu),它表示了瞬間的、行為化的系統(tǒng)控制
性質(zhì),它關(guān)心的是系統(tǒng)的控制,操作的執(zhí)行順序,它表示從對象的事件和狀態(tài)的角度出發(fā),表現(xiàn)了對象的相互行為。
該模型描述的系統(tǒng)屬性是觸發(fā)事件、事件序列、狀態(tài)、事件與狀態(tài)的組織。使用狀態(tài)圖作為描述工具。它涉及到事件、狀態(tài)、操作等重要概念。
       1.事件
      事件是指定時刻發(fā)生的某件事。

       2.狀態(tài)
       狀態(tài)是對象屬性值的抽象。對象的屬性值按照影響對象顯著行為的性質(zhì)將其歸并到一個狀態(tài)中去。狀態(tài)指明了對象
對輸入事件的響應(yīng)。

      3.狀態(tài)圖

      狀態(tài)圖是一個標準的計算機概念,他是有限自動機的圖形表示,這里把狀態(tài)圖作為建立動態(tài)模型的圖形工具。
      狀態(tài)圖反映了狀態(tài)與事件的關(guān)系。當接收一事件時,下一狀態(tài)就取決于當前狀態(tài)和所接收的該事件,由該事件引起的狀態(tài)變化稱為轉(zhuǎn)換。
      狀態(tài)圖是一種圖,用結(jié)點表示狀態(tài),結(jié)點用圓圈表示;圓圈內(nèi)有狀態(tài)名,用箭頭連線表示狀態(tài)的轉(zhuǎn)換,上面標記事件名,箭頭方向表示轉(zhuǎn)換的方向。

·功能模型

      功能模型描述了系統(tǒng)的所有計算。功能模型指出發(fā)生了什么,動態(tài)模型確定什么時候發(fā)生,而對象模型確定發(fā)生的客體。功能模型表明一個計算如何從輸入值得到輸出值,它不考慮計算的次序。功能模型由多張數(shù)據(jù)流圖組成。數(shù)據(jù)流圖用來表示從源對象到目標對象的數(shù)據(jù)值的流向,它不包含控制信息,控制信息在動態(tài)模型中表示,同時數(shù)據(jù)流圖也不表示對象中值的組織,值的組織在對象模型中表示。圖10-15給出了一個窗口系統(tǒng)的圖標顯示的數(shù)據(jù)流圖。

       數(shù)據(jù)流圖中包含有處理、數(shù)據(jù)流、動作對象和數(shù)據(jù)存儲對象。

      1.處理
       數(shù)據(jù)流圖中的處理用來改變數(shù)據(jù)值。最低層處理是純粹的函數(shù),一張完整的數(shù)據(jù)流圖是一個高層處理。

       2.數(shù)據(jù)流
       數(shù)據(jù)流圖中的數(shù)據(jù)流將對象的輸出與處理、處理與對象的輸入、處理與處理聯(lián)系起來。在一個計算機中,用數(shù)據(jù)流來表示一中間數(shù)據(jù)值,數(shù)據(jù)流不能改變數(shù)據(jù)值。

      3.動作對象
       動作對象是一種主動對象,它通過生成或者使用數(shù)據(jù)值來驅(qū)動數(shù)據(jù)流圖。

      4.數(shù)據(jù)存儲對象
      數(shù)據(jù)流圖中的數(shù)據(jù)存儲是被動對象,它用來存儲數(shù)據(jù)。它與動作對象不一樣,數(shù)據(jù)存儲本身不產(chǎn)生任何操作,它只響應(yīng)存儲和訪問的要求。


六、面向?qū)ο蟮姆治?/strong>

      面向?qū)ο蠓治?/a>的目的是對客觀世界的系統(tǒng)進行建模。本節(jié)以上面介紹的模型概念為基礎(chǔ),結(jié)合“銀行網(wǎng)絡(luò)系統(tǒng)”的具體實例來構(gòu)造客觀世界問題的準確、嚴密的分析模型。
      分析模型有三種用途:用來明確問題需求;為用戶和開發(fā)人員提供明確需求;為用戶和開發(fā)人員提供一個協(xié)商的基礎(chǔ),作為后繼的設(shè)計和實現(xiàn)的框架。

(一) 面向?qū)ο蟮姆治?/p>

     系統(tǒng)分析的第一步是:陳述需求。分析者必須同用戶一塊工作來提煉需求,因為這樣才表示了用戶的真實意圖,其中涉及對需求的分析及查找丟失的信息。下面以“銀行網(wǎng)絡(luò)系統(tǒng)”為例,用面向?qū)ο蠓椒?/a>進行開發(fā)。
銀行網(wǎng)絡(luò)系統(tǒng)問題陳述: 設(shè)計支持銀行網(wǎng)絡(luò)的軟件,銀行網(wǎng)絡(luò)包括人工出納站和分行共享的自動出納機。每個分理處用分理處計算機來保存各自的帳戶,處理各自的事務(wù);各自分理處的出納站與分理處計算機通信,出納站錄入帳戶和事務(wù)數(shù)據(jù);自動出納機與分行計算機通信,分行計算機與撥款分理處結(jié)帳,自動出納機與用戶接口接受現(xiàn)金卡,與分行計算機通信完成事務(wù),發(fā)放現(xiàn)金,打印收據(jù);系統(tǒng)需要記錄保管和安全措施;系統(tǒng)必須正確處理同一帳戶的并發(fā)訪問;每個分處理為自己的計算機準備軟件,銀行網(wǎng)絡(luò)費用根據(jù)顧客和現(xiàn)金卡的數(shù)目分攤給各分理處。
圖10-18給出銀行網(wǎng)絡(luò)系統(tǒng)的示意圖。


(二)建立對象模型

      首先標識和關(guān)聯(lián),因為它們影響了整體結(jié)構(gòu)和解決問題的方法,其次是增加屬性,進一步描述類和關(guān)聯(lián)的基本網(wǎng)絡(luò),使用繼承合并和組織類,最后操作增加到類中去作為構(gòu)造動態(tài)模型和功能模型的副產(chǎn)品。

      1.確定類

      構(gòu)造對象模型的第一步是標出來自問題域的相關(guān)的對象類,對象包括物理實體和概念。所有類在應(yīng)用中都必須有意義,在問題陳述中,并非所有類都是明顯給出的。有些是隱含在問題域或一般知識中的。

按圖10-19所示的過程確定類

   

查找問題陳述中的所有名詞,產(chǎn)生如下的暫定類。
 軟件            銀行網(wǎng)絡(luò)         出納員        自動出納機           分行
 分處理          分處理計算機     帳戶          事務(wù)                 出納站
 事務(wù)數(shù)據(jù)        分行計算機       現(xiàn)金卡        用戶                 現(xiàn)金
 收據(jù)            系統(tǒng)             顧客          費用                 帳戶數(shù)據(jù)
 訪問            安全措施         記錄保管

     根據(jù)下列標準,去掉不必要的類和不正確的類。
 (1) 冗余類:若兩個類表述了同一個信息 ,保留最富有描述能力的類。如"用戶"和"顧客"就是重復(fù)的描述,因為"顧客"最富有描述性,因此保留它。
 (2) 不相干的類:除掉與問題沒有關(guān)系或根本無關(guān)的類。例如,攤派費用超出了銀行網(wǎng)絡(luò)的范圍。
 (3) 模糊類:類必須是確定的,有些暫定類邊界定義模糊或范圍太廣,如"記錄保管"就模糊類,它是"事務(wù)"中的一部分。
 (4) 屬性:某些名詞描述的是其他對象的屬性,則從暫定類中刪除。如果某一性質(zhì)的獨立性很重要,就應(yīng)該把他歸屬到類,而不把它作為屬性。
 (5) 操作:如果問題陳述中的名詞有動作含義,則描述的操作就不是類。但是具有自身性質(zhì)而且需要獨立存在的操作應(yīng)該描述成類。如我們只構(gòu)造電話模型,"撥號"就是動態(tài)模型的一部分而不是類,但在電話撥號系統(tǒng)中,"撥號"是一個重要的類,它日期、時間、受話地點等屬性。

      在銀行網(wǎng)絡(luò)系統(tǒng)中,模糊類是"系統(tǒng)"、"安全措施"、"記錄保管"、"銀行網(wǎng)絡(luò)"等。屬于屬性的有:"帳戶數(shù)據(jù)"、"收據(jù)"、"現(xiàn)金"、"事務(wù)數(shù)據(jù)"。屬于實現(xiàn)的如:"訪問"、"軟件"等。這些均應(yīng)除去。

   2.準備數(shù)據(jù)字典

   為所有建模實體準備一個數(shù)據(jù)字典。準確描述各個類的精確含義,描述當前問題中的類的范圍,包括對類的成員、用法方面的假設(shè)或限制。

   3.確定關(guān)聯(lián)

   兩個或多個類之間的相互依賴就是關(guān)聯(lián)。一種依賴表示一種關(guān)聯(lián),可用各種方式來實現(xiàn)關(guān)聯(lián),但在分析模型中應(yīng)刪除實現(xiàn)的考慮,以便設(shè)計時更為靈活。關(guān)聯(lián)常用描述性動詞或動詞詞組來表示,其中有物理位置的表示、傳導(dǎo)的動作、通信、所有者關(guān)系、條件的滿足等。從問題陳述中抽取所有可能的關(guān)聯(lián)表述,把它們記下來,但不要過早去細化這些表述。

  下面是銀行網(wǎng)絡(luò)系統(tǒng)中所有可能的關(guān)聯(lián),大多數(shù)是直接抽取問題中的動詞詞組而得到的。在陳述中,有些動詞詞組表述的關(guān)聯(lián)是不明顯的。最后,還有一些關(guān)聯(lián)與客觀世界或人的假設(shè)有關(guān),必須同用戶一起核實這種關(guān)聯(lián),因為這種關(guān)聯(lián)在問題陳述中找不到。

   銀行網(wǎng)絡(luò)問題陳述中的關(guān)聯(lián):
 ·銀行網(wǎng)絡(luò)包括出納站和自動出納機;
 ·分行共享自動出納機;
 ·分理處提供分理處計算機;
 ·分理處計算機保存帳戶;
 ·分理處計算機處理帳戶支付事務(wù);
 ·分理處擁有出納站;
 ·出納站與分理處計算機通信;
 ·出納員為帳戶錄入事務(wù);
 ·自動出納機接受現(xiàn)金卡;
 ·自動出納機與用戶接口;
 ·自動出納機發(fā)放現(xiàn)金;
 ·自動出納機打印收據(jù);
 ·系統(tǒng)處理并發(fā)訪問;
 ·分理處提供軟件;
 ·費用分攤給分理處。
  隱含的動詞詞組:
 ·分行由分理處組成;
 ·分理處擁有帳戶;
 ·分行擁有分行計算機;
 ·系統(tǒng)提供記錄保管;
 ·系統(tǒng)提供安全;
 ·顧客有現(xiàn)金卡。
  基于問題域知識的關(guān)聯(lián):
 ·分理處雇傭出納員;
 ·現(xiàn)金卡訪問帳戶。

  使用下列標準去掉不必要和不正確的關(guān)聯(lián):

 (1) 若某個類已被刪除,那么與它有關(guān)的關(guān)聯(lián)也必須刪除或者用其它類來重新表述。在例中,我們刪除了"銀行網(wǎng)絡(luò)",相關(guān)的關(guān)聯(lián)也要刪除。
 (2) 不相干的關(guān)聯(lián)或?qū)崿F(xiàn)階段的關(guān)聯(lián):刪除所有問題域之外的關(guān)聯(lián)或涉及實現(xiàn)結(jié)構(gòu)中的關(guān)聯(lián)。如"系統(tǒng)處理并發(fā)訪問"就是一種實現(xiàn)的概念。
 (3) 動作:關(guān)聯(lián)應(yīng)該描述應(yīng)用域的結(jié)構(gòu)性質(zhì)而不是瞬時事件,因此應(yīng)刪除"自動出納機接受現(xiàn)金卡","自動出納機與用戶接口"等。
 (4) 派生關(guān)聯(lián):省略那些可以用其他關(guān)聯(lián)來定義的關(guān)聯(lián)。因為這種關(guān)聯(lián)是冗余的。銀行網(wǎng)絡(luò)系統(tǒng)的初步
對象圖如圖10-20所示。其中含有關(guān)聯(lián)。

     4.確定屬性

   屬性是個體對象的性質(zhì),屬性通常用修飾性的名詞詞組來表示.形容詞常常表示具體的可枚舉的屬性值,屬性不可能在問題陳述中完全表述出來,必須借助于應(yīng)用域的知識及對客觀世界的知識才可以找到它們。只考慮與具體應(yīng)用直接相關(guān)的屬性,不要考慮那些超出問題范圍的屬性。首先找出重要屬性,避免那些只用于實現(xiàn)的屬性,要為各個屬性取有意義的名字。按下列標準刪除不必要的和不正確的屬性:

 (1) 對象:若實體的獨立存在比它的值重要,那么這個實體不是屬性而是對象。如在郵政目錄中,"城市"是一個屬性,然而在人口普查中,"城市"則被看作是對象。在具體應(yīng)用中,具有自身性質(zhì)的實體一定是對象。
 (2) 定詞:若屬性值取決于某種具體上下文,則可考慮把該屬性重新表述為一個限定詞。
 (3) 名稱:名稱常常作為限定詞而不是對象的屬性,當名稱不依賴于上下文關(guān)系時,名稱即為一個對象屬性,尤其是它不惟一時。
 (4) 標識符:在考慮對象模糊性時,引入對象標識符表示,在對象模型中不列出這些對象標識符,它是隱含在對象模型中,只列出存在于應(yīng)用域的屬性。
 (5) 內(nèi)部值:若屬性描述了對外不透明的對象的內(nèi)部狀態(tài),則應(yīng)從對象模型中刪除該屬性。
 (6) 細化:忽略那些不可能對大多數(shù)操作有影響的屬性。

  5.使用繼承來細化類

   使用繼承來共享公共機構(gòu),以次來組織類,可以用兩種方式來進行。
 (1) 自底向上通過把現(xiàn)有類的共同性質(zhì)一般化為父類,尋找具有相似的屬性,關(guān)系或操作的類來發(fā)現(xiàn)繼承。例如"遠程事務(wù)"和"出納事務(wù)"是類似的,可以一般化為"事務(wù)"。有些一般化結(jié)構(gòu)常常是基于客觀世界邊界的現(xiàn)有分類,只要可能,盡量使用現(xiàn)有概念。對稱性常有助于發(fā)現(xiàn)某些丟失的類。
 (2) 自頂向下將現(xiàn)有的類細化為更具體的子類。具體化常常可以從應(yīng)用域中明顯看出來。應(yīng)用域中各枚舉字情況是最常見的具體化的來源。例如:菜單,可以有固定菜單,頂部菜單,彈出菜單,下拉菜單等,這就可以把菜單類具體細化為各種具體菜單的子類。當同一關(guān)聯(lián)名出現(xiàn)多次且意義也相同時,應(yīng)盡量具體化為相關(guān)聯(lián)的類,例如"事務(wù)"從"出納站"和"自動出納機"進入,則"錄入站"就是"出納站"和"自動出納站"的一般化。在類層次中,可以為具體的類分配屬性和關(guān)聯(lián)。各屬性和都應(yīng)分配給最一般的適合的類,有時也加上一些修正。

      應(yīng)用域中各枚舉情況是最常見的具體化的來源。

   6.完善對象模型

   對象建模不可能一次就能保證模型是完全正確的,軟件開發(fā)的整個過程就是一個不斷完善的過程。模型的不同組成部分多半是在不同的階段完成的,如果發(fā)現(xiàn)模型的缺陷,就必須返回到前期階段去修改,有些細化工作是在動態(tài)模型和功能模型完成之后才開始進行的。
  (1) 幾種可能丟失對象的情況及解決辦法:
 ·同一類中存在毫無關(guān)系的屬性和操作,則分解這個類,使各部分相互關(guān)聯(lián);
 ·一般化體系不清楚,則可能分離扮演兩種角色的類
 ·存在無目標類的操作,則找出并加上失去目標的類;
 ·存在名稱及目的相同的冗余關(guān)聯(lián),則通過一般化創(chuàng)建丟失的父類,把關(guān)聯(lián)組織在一起。

  (2) 查找多余的類。
  類中缺少屬性,操作和關(guān)聯(lián),則可刪除這個類。

  (3)查找丟失的關(guān)聯(lián)。
   丟失了操作的訪問路徑,則加入新的關(guān)聯(lián)以回答查詢。

  (4) 網(wǎng)絡(luò)系統(tǒng)的具體情況作如下的修改:
 ①現(xiàn)金卡有多個獨立的特性。把它分解為兩個對象:卡片權(quán)限和現(xiàn)金卡。
 a.卡片權(quán)限:它是銀行用來鑒別用戶訪問權(quán)限的卡片,表示一個或多個用戶帳戶的訪問權(quán)限;各個卡片權(quán)限對象中可能具有好幾個現(xiàn)金卡,每張都帶有安全碼,卡片碼,它們附在現(xiàn)金卡上,表現(xiàn)銀行的卡片權(quán)限。
 b.現(xiàn)金卡:它是自動出納機得到表示碼的數(shù)據(jù)卡片,它也是銀行代碼和現(xiàn)金卡代碼的數(shù)據(jù)載體。
 ②"事務(wù)"不能體現(xiàn)對帳戶之間的傳輸描述的一般性,因它只涉及一個帳戶,一般來說,在每個帳戶中,一個"事務(wù)"包括一個或多個"更新",一個"更新"是對帳戶的一個動作,它們是取款,存款,查詢之一。一個"更新"中所有"更新"應(yīng)該是一個原子操作。
 ③"分理處"和"分離處理機"之間,"分行"和"分行處理機"之間的區(qū)別似乎并不影響分析,計算機的通信處理實際上是實現(xiàn)的概念,將"分理處計算機"并入到"分理處",將"分行計算機"并入到"分行"。

(三)建立動態(tài)模型

   1.準備腳本
   動態(tài)分析從尋找事件開始,然后確定各對象的可能事件順序。在分析階段不考慮算法的執(zhí)行,算法是實現(xiàn)模型的一部分。

   2.確定事件
   確定所有外部事件。事件包括所有來自或發(fā)往用戶的信息、外部設(shè)備的信號、輸入、轉(zhuǎn)換和動作,可以發(fā)現(xiàn)正常事件,但不能遺漏條件和異常事件。

   3.準備事件跟蹤表
   把腳本表示成一個事件跟蹤表,即不同對象之間的事件排序表,對象為表中的列,給每個對象分配一個獨立的列。


   4.構(gòu)造狀態(tài)圖
   對各對象類建立狀態(tài)圖,反映對象接收和發(fā)送的事件,每個事件跟蹤都對應(yīng)于狀態(tài)圖中一條路徑。

(四)建立功能建模

   功能模型用來說明值是如何計算的,表明值之間的依賴關(guān)系及相關(guān)的功能,數(shù)據(jù)流圖有助于表示功能依賴關(guān)系,其中的處理應(yīng)于狀態(tài)圖的活動和動作,其中的數(shù)據(jù)流對應(yīng)于對象圖中的對象或?qū)傩浴?/p>

   1.確定輸入值、輸出值
   先列出輸入、輸出值,輸入、輸出值是系統(tǒng)與外界之間的事件的參數(shù)。

   2.建立數(shù)據(jù)流圖
   數(shù)據(jù)流圖說明輸出值是怎樣從輸入值得來的,數(shù)據(jù)流圖通常按層次組織。

(五)確定操作

   在建立對象模型時,確定了類、關(guān)聯(lián)、結(jié)構(gòu)和屬性,還沒有確定操作。只有建立了動態(tài)模型和功能模型之后,才可能最后確定類的操作。

七、面向?qū)ο蟮脑O(shè)計

   面向?qū)ο笤O(shè)計是把分析階段得到的需求轉(zhuǎn)變成符合成本和質(zhì)量要求的、抽象的系統(tǒng)實現(xiàn)方案的過程。從面向?qū)ο蠓治龅矫嫦驅(qū)ο笤O(shè)計,是一個逐漸擴充模型的過程。

   瀑布模型把設(shè)計進一步劃分成概要設(shè)計和詳細設(shè)計兩個階段,類似地,也可以把面向?qū)ο笤O(shè)計再細分為系統(tǒng)設(shè)計和對象設(shè)計。系統(tǒng)設(shè)計確定實現(xiàn)系統(tǒng)的策略和目標系統(tǒng)的高層結(jié)構(gòu)。對象設(shè)計確定解空間中的類、關(guān)聯(lián)、接口形式及實現(xiàn)操作的算法。

(一)面向?qū)ο笤O(shè)計的準則

   1.模塊化
   面向?qū)ο箝_發(fā)方法很自然地支持了把系統(tǒng)分解成模塊的設(shè)計原則:對象就是模塊。它是把數(shù)據(jù)結(jié)構(gòu)和操作這些數(shù)據(jù)的方法緊密地結(jié)合在一起所構(gòu)成的模塊。
   2.抽象
   面向?qū)ο蠓椒ú粌H支持過程抽象,而且支持數(shù)據(jù)抽象。
   3.信息隱藏
   在面向?qū)ο蠓椒ㄖ?,信息隱藏通過對象的封裝性來實現(xiàn)。
   4.低耦合
   在面向?qū)ο蠓椒ㄖ?,對象是最基本的模塊,因此,耦合主要指不同對象之間相互關(guān)聯(lián)的緊密程度。低耦合是設(shè)計的一個重要標準,因為這有助于使得系統(tǒng)中某一部分的變化對其它部分的影響降到最低程度。
   5.高內(nèi)聚
   (1)操作內(nèi)聚。
   (2)類內(nèi)聚。
   (3)一般——具體內(nèi)聚。

(二)面向?qū)ο笤O(shè)計的啟發(fā)規(guī)則

   1.設(shè)計結(jié)果應(yīng)該清晰易懂
   使設(shè)計結(jié)果清晰、易懂、易讀是提高軟件可維護性和可重用性的重要措施。顯然,人們不會重用那些他們不理解的設(shè)計。
   要做到:
   (1)用詞一致。
   (2)使用已有的協(xié)議。
   (3)減少消息模式的數(shù)量。
   (4)避免模糊的定義。

   2.一般——具體結(jié)構(gòu)的深度應(yīng)適當

   3.設(shè)計簡單類
   應(yīng)該盡量設(shè)計小而簡單的類,這樣便以開發(fā)和管理。為了保持簡單,應(yīng)注意以下幾點:
   (1)避免包含過多的屬性。
   (2)有明確的定義。
   (3)盡量簡化對象之間的合作關(guān)系。
   (4)不要提供太多的操作。

   4.使用簡單的協(xié)議
   一般來說,消息中參數(shù)不要超過3個。

   5.使用簡單的操作
   面向?qū)ο笤O(shè)計出來的類中的操作通常都很小,一般只有3至5行源程序語句,可以用僅含一個動詞和一個賓語的簡單句子描述它的功能

   6.把設(shè)計變動減至最小
   通常,設(shè)計的質(zhì)量越高,設(shè)計結(jié)果保持不變的時間也越長。即使出現(xiàn)必須修改設(shè)計的情況,也應(yīng)該使修改的范圍盡可能小。
(三)系統(tǒng)設(shè)計

   系統(tǒng)設(shè)計是問題求解及建立解答的高級策略。必須制定解決問題的基本方法,系統(tǒng)的高層結(jié)構(gòu)形式包括子系統(tǒng)的分解、它的固有并發(fā)性、子系統(tǒng)分配給硬軟件、數(shù)據(jù)存儲管理、資源協(xié)調(diào)、軟件控制實現(xiàn)、人機交互接口。

1.系統(tǒng)設(shè)計概述

    設(shè)計階段先從高層入手,然后細化。系統(tǒng)設(shè)計要決定整個結(jié)構(gòu)及風(fēng)格,這種結(jié)構(gòu)為后面設(shè)計階段的更詳細策略的設(shè)計提供了基礎(chǔ)。

   (1)系統(tǒng)分解。
   系統(tǒng)中主要的組成部分稱為子系統(tǒng),子系統(tǒng)既不是一個對象也不是一個功能,而是類、關(guān)聯(lián)、操作、事件和約束的集合。
   (2)確定并發(fā)性。
   分析模型、現(xiàn)實世界及硬件中不少對象均是并發(fā)的。
   (3)處理器及任務(wù)分配。
   各并發(fā)子系統(tǒng)必須分配給單個硬件單元,要么是一個一般的處理器,要么是一個具體的功能單元。
   (4)數(shù)據(jù)存儲管理。
   系統(tǒng)中的內(nèi)部數(shù)據(jù)和外部數(shù)據(jù)的存儲管理是一項重要的任務(wù)。通常各數(shù)據(jù)存儲可以將數(shù)據(jù)結(jié)構(gòu)、文件、數(shù)據(jù)庫組合在一起,不同數(shù)據(jù)存儲要在費用、訪問時間、容量及可靠性之間做出折衷考慮。
   (5)全局資源的處理。
   必須確定全局資源,并且制定訪問全局資源的策略。
   (6)選擇軟件控制機制。
   分析模型中所有交互行為都表示為對象之間的事件。系統(tǒng)設(shè)計必須從多種方法中選擇某種方法來實現(xiàn)軟件的控制。
   (7)人機交互接口設(shè)計。
   設(shè)計中的大部分工作都與穩(wěn)定的狀態(tài)行為有關(guān),但必須考慮用戶使用系統(tǒng)的交互接口。

   2.系統(tǒng)結(jié)構(gòu)的一般框架

   3.系統(tǒng)分解——建立系統(tǒng)的體系結(jié)構(gòu)
   可用的軟件庫以及程序員的編程經(jīng)驗。
   通過面向?qū)ο蠓治龅玫降膯栴}域精確模型,為設(shè)計體系結(jié)構(gòu)奠定了良好的基礎(chǔ),建立了完整的框架。

   4.選擇軟件控制機制
   軟件系統(tǒng)中存在兩種控制流,外部控制流和內(nèi)部控制流。

   5.數(shù)據(jù)存儲管理
   數(shù)據(jù)存儲管理是系統(tǒng)存儲或檢索對象的基本設(shè)施,它建立在某種數(shù)據(jù)存儲管理系統(tǒng)之上,并且隔離了數(shù)據(jù)存儲管理模式的影響。

   6.設(shè)計人機交互接口
   在面向?qū)ο蠓治鲞^程中,已經(jīng)對用戶界面需求作了初步分析,在面向?qū)ο笤O(shè)計過程中,則應(yīng)該對系統(tǒng)的人機交互接口進行詳細設(shè)計,以確定人機交互的細節(jié),其中包括指定窗口和報表的形式、設(shè)計命令層次等項內(nèi)容。

(四)對象設(shè)計
   1.對象設(shè)計概述
   2.三種模型的結(jié)合
   (1)獲得操作。
   (2)確定操作的目標對象。
   3.算法設(shè)計
   4.優(yōu)化設(shè)計
   5.控制的實現(xiàn)
   6.調(diào)整繼承
   7.關(guān)聯(lián)的設(shè)計
                               
八、面向?qū)ο蟮膶崿F(xiàn)

(一)程序設(shè)計語言

   1.選擇面向?qū)ο笳Z言
   采用面向?qū)ο蠓椒ㄩ_發(fā)軟件的基本目的和主要優(yōu)點是通過重用提高軟件的生產(chǎn)率。因此,應(yīng)該優(yōu)先選用能夠最完善、最準確地表達問題域語義的面向?qū)ο笳Z言。

   在選擇編程語言時,應(yīng)該考慮的其他因素還有:對用戶學(xué)習(xí)面向?qū)ο蠓治?、設(shè)計和編碼技術(shù)所能提供的培訓(xùn)操作;在使用這個面向?qū)ο笳Z言期間能提供的技術(shù)支持;能提供給開發(fā)人員使用的開發(fā)工具、開發(fā)平臺,對機器性能和內(nèi)存的需求,集成已有軟件的容易程度。

   2.程序設(shè)計風(fēng)格
   (1)提高重用性。
   (2)提高可擴充性。
   (3)提高健壯性。

(二)類的實現(xiàn)

   在開發(fā)過程中,類的實現(xiàn)是核心問題。在用面向?qū)ο箫L(fēng)格所寫的系統(tǒng)中,所有的數(shù)據(jù)都被封裝在類的實例中。而整個程序則被封裝在一個更高級的類中。在使用既存部件的面向?qū)ο笙到y(tǒng)中,可以只花費少量時間和工作量來實現(xiàn)軟件。只要增加類的實例,開發(fā)少量的新類和實現(xiàn)各個對象之間互相通信的操作,就能建立需要的軟件。

   一種方案是先開發(fā)一個比較小、比較簡單的來,作為開發(fā)比較大、比較復(fù)雜的類的基礎(chǔ)。

   (1)“原封不動”重用。
   (2)進化性重用。
   一個能夠完全符合要求特性的類可能并不存在。
   (3)“廢棄性”開發(fā)。
   不用任何重用來開發(fā)一個新類。
   (4)錯誤處理。
   一個類應(yīng)是自主的,有責任定位和報告錯誤。

(三)應(yīng)用系統(tǒng)的實現(xiàn)

   應(yīng)用系統(tǒng)的實現(xiàn)是在所有的類都被實現(xiàn)之后的事。實現(xiàn)一個系統(tǒng)是一個比用過程性方法更簡單、更簡短的過程。有些實例將在其他類的初始化過程中使用。而其余的則必須用某種主過程顯式地加以說明,或者當作系統(tǒng)最高層的類的表示的一部分。

   在C++和C中有一個main( )函數(shù),可以使用這個過程來說明構(gòu)成系統(tǒng)主要對象的那些類的實例。

(四)面向?qū)ο鬁y試

   (1)算法層。
   (2)類層。
   測試封裝在同一個類中的所有方法和屬性之間的相互作用。
   (3)模板層。
   測試一組協(xié)同工作的類之間的相互作用。
   (4)系統(tǒng)層。
   把各個子系統(tǒng)組裝成完整的面向?qū)ο筌浖到y(tǒng),在組裝過程中同時進行測試。

九、面向?qū)ο蠛突趯ο蟮膮^(qū)別

      很多人沒有區(qū)分“面向?qū)ο蟆焙汀盎趯ο蟆眱蓚€不同的概念。面向?qū)ο蟮娜筇攸c(封裝,繼承,多態(tài))卻一不可。通常“基于對象”是使用對象,但是無法利用現(xiàn)有的對象模板產(chǎn)生新的對象類型,繼而產(chǎn)生新的對象,也就是說“基于對象”沒有繼承的特點。而“多態(tài)”表示為父類類型的子類對象實例,沒有了繼承的概念也就無從談?wù)摗岸鄳B(tài)”?,F(xiàn)在的很多流行技術(shù)都是基于對象的,它們使用一些封裝好的對象,調(diào)用對象的方法,設(shè)置對象的屬性。但是它們無法讓程序員派生新對象類型。他們只能使用現(xiàn)有對象的方法和屬性。所以當你判斷一個新的技術(shù)是否是面向?qū)ο蟮臅r候,通??梢允褂煤髢蓚€特性來加以判斷。“面向?qū)ο蟆焙汀盎趯ο蟆倍紝崿F(xiàn)了“封裝”的概念,但是面向?qū)ο髮崿F(xiàn)了“繼承和多態(tài)”,而“基于對象”沒有實現(xiàn)這些,的確很饒口。

      從事面向?qū)ο缶幊?/a>的人按照分工來說,可以分為“類庫的創(chuàng)建者”和“類庫的使用者”。使用類庫的人并不都是具備了面向?qū)ο笏枷氲娜耍ǔV廊绾卫^承和派生新對象就可以使用類庫了,然而我們的思維并沒有真正的轉(zhuǎn)過來,使用類庫只是在形式上是面向?qū)ο螅鴮嵸|(zhì)上只是庫函數(shù)的一種擴展。

      面向?qū)ο笫且环N思想,是我們考慮事情的方法,通常表現(xiàn)為我們是將問題的解決按照過程方式來解決呢,還是將問題抽象為一個對象來解決它。很多情況下,我們會不知不覺的按照過程方式來解決它,而不是考慮將要解決問題抽象為對象去解決它。有些人打著面向?qū)ο蟮幕献樱芍^程編程的勾當。


打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
生活服務(wù)
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服