linux : 電子學 : 互聯網 > 面嚮對象
目錄
No. 1
  面嚮對象(object oriented,oo)是當前計算機界關心的重點,它是90年代軟件開發方法的主流。面嚮對象的概念和應用已超越了程序設計和軟件開發,擴展到很寬的範圍。如數據庫係統、交互式界面、應用結構、應用平臺、分佈式係統、網絡管理結構、cad技術、人工智能等領域。
  談到面嚮對象,這方面的文章非常多。但是,明確地給出對象的定義或說明對象的定義的非常少——至少我現在還沒有發現。其初,“面嚮對象”是專指在程序設計中采用封裝、繼承、抽象等設計方法。可是,這個定義顯然不能再適合現在情況。面嚮對象的思想已經涉及到軟件開發的各個方面。如,面嚮對象的分析(ooa,object oriented analysis),面嚮對象的設計(ood,object oriented design)、以及我們經常說的面嚮對象的編程實現(oop,object oriented programming)。許多有關面嚮對象的文章都衹是講述在面嚮對象的開發中所需要註意的問題或所采用的比較好的設計方法。看這些文章衹有真正懂得什麽是對象,什麽是面嚮對象,才能最大程度地對自己有所裨益。這一點,恐怕對初學者甚至是從事相關工作多年的人員也會對它們的概念模糊不清。
  面嚮對象是當前計算機界關心的重點,它是90年代軟件開發方法的主流。面嚮對象的概念和應用已超越了程序設計和軟件開發,擴展到很寬的範圍。如數據庫係統、交互式界面、應用結構、應用平臺、分佈式係統、網絡管理結構、cad技術、人工智能等領域。
傳統開發方法存在問題
  1.軟件重用性差
  重用性是指同一事物不經修改或稍加修改就可多次重複使用的性質。軟件重用性是軟件工程追求的目標之一。
  2.軟件可維護性差
  軟件工程強調軟件的可維護性,強調文檔資料的重要性,規定最終的軟件産品應該由完整、一致的配置成分組成。在軟件開發過程中,始終強調軟件的可讀性、可修改性和可測試性是軟件的重要的質量指標。實踐證明,用傳統方法開發出來的軟件,維護時其費用和成本仍然很高,其原因是可修改性差,維護睏難,導致可維護性差。
  3.開發出的軟件不能滿足用戶需要
  用傳統的結構化方法開發大型軟件係統涉及各種不同領域的知識,在開發需求模糊或需求動態變化的係統時,所開發出的軟件係統往往不能真正滿足用戶的需要。
  用結構化方法開發的軟件,其穩定性、可修改性和可重用性都比較差,這是因為結構化方法的本質是功能分解,從代表目標係統整體功能的單個處理着手,自頂嚮下不斷把復雜的處理分解為子處理,這樣一層一層的分解下去,直到僅剩下若幹個容易實現的子處理功能為止,然後用相應的工具來描述各個最低層的處理。因此,結構化方法是圍繞實現處理功能的“過程”來構造係統的。然而,用戶需求的變化大部分是針對功能的,因此,這種變化對於基於過程的設計來說是災難性的。用這種方法設計出來的係統結構常常是不穩定的 ,用戶需求的變化往往造成係統結構的較大變化,從而需要花費很大代價才能實現這種變化。
面嚮對象的基本概念
  (1)對象。
  對象是人們要進行研究的任何事物,從最簡單的整數到復雜的飛機等均可看作對象,它不僅能表示具體的事物,還能表示抽象的規則、計劃或事件。
  (2)對象的狀態和行為。
  對象具有狀態,一個對象用數據值來描述它的狀態。
  對象還有操作,用於改變對象的狀態,對象及其操作就是對象的行為。
  對象實現了數據和操作的結合,使數據和操作封裝於對象的統一體中
  (3)類。
  具有相同或相似性質的對象的抽象就是類。因此,對象的抽象是類,類的具體化就是對象,也可以說類的實例是對象。
  類具有屬性,它是對象的狀態的抽象,用數據結構來描述類的屬性。
  類具有操作,它是對象的行為的抽象,用操作名和實現該操作的方法來描述。
  (4)類的結構。
  在客觀世界中有若幹類,這些類之間有一定的結構關係。通常有兩種主要的結構關係,即一般--具體結構關係,整體--部分結構關係。
  ①一般——具體結構稱為分類結構,也可以說是“或”關係,或者是“is a”關係。
  ②整體——部分結構稱為組裝結構,它們之間的關係是一種“與”關係,或者是“has a”關係。
  (5)消息和方法。
  對象之間進行通信的結構叫做消息。在對象的操作中,當一個消息發送給某個對象時,消息包含接收對象去執行某種操作的信息。發送一條消息至少要包括說明接受消息的對象名、發送給該對象的消息名(即對象名、方法名)。一般還要對參數加以說明,參數可以是認識該消息的對象所知道的變量名,或者是所有對象都知道的全局變量名。
  類中操作的實現過程叫做方法,一個方法有方法名、參數、方法體。消息傳遞如圖10-1所示。
面嚮對象的特徵
  (1)對象唯一性。
  每個對象都有自身唯一的標識,通過這種標識,可找到相應的對象。在對象的整個生命期中,它的標識都不改變,不同的對象不能有相同的標識。
  (2)分類性。
  分類性是指將具有一致的數據結構(屬性)和行為(操作)的對象抽象成類。一個類就是這樣一種抽象,它反映了與應用有關的重要性質,而忽略其他一些無關內容。任何類的劃分都是主觀的,但必須與具體的應用有關。
  (3)繼承性。
  繼承性是子類自動共享父類數據結構和方法的機製,這是類之間的一種關係。在定義和實現一個類的時候,可以在一個已經存在的類的基礎之上來進行,把這個已經存在的類所定義的內容作為自己的內容,並加入若幹新的內容。
  繼承性是面嚮對象程序設計語言不同於其它語言的最重要的特點,是其他語言所沒有的。
  在類層次中,子類衹繼承一個父類的數據結構和方法,則稱為單重繼承。
  在類層次中,子類繼承了多個父類的數據結構和方法,則稱為多重繼承。
  在軟件開發中,類的繼承性使所建立的軟件具有開放性、可擴充性,這是信息組織與分類的行之有效的方法,它簡化了對象、類的創建工作量,增加了代碼的可重性。
  采用繼承性,提供了類的規範的等級結構。通過類的繼承關係,使公共的特性能夠共享,提高了軟件的重用性。
  (4)多態性(多形性)
  多態性使指相同的操作或函數、過程可作用於多種類型的對象上並獲得不同的結果。不同的對象,收到同一消息可以産生不同的結果,這種現象稱為多態性。
  多態性允許每個對象以適合自身的方式去響應共同的消息。
  多態性增強了軟件的靈活性和重用性。
面嚮對象的要素
  (1)抽象。
  抽象是指強調實體的本質、內在的屬性。在係統開發中,抽象指的是在决定如何實現對象之前的對象的意義和行為。使用抽象可以盡可能避免過早考慮一些細節。
  類實現了對象的數據(即狀態)和行為的抽象。
  (2)封裝性(信息隱藏)。
  封裝性是保證軟件部件具有優良的模塊性的基礎。
  面嚮對象的類是封裝良好的模塊,類定義將其說明(用戶可見的外部接口)與實現(用戶不可見的內部實現)顯式地分開,其內部實現按其具體定義的作用域提供保護。
  對象是封裝的最基本單位。封裝防止了程序相互依賴性而帶來的變動影響。面嚮對象的封裝比傳統語言的封裝更為清晰、更為有力。
  (3)共享性
  面嚮對象技術在不同級別上促進了共享
  同一類中的共享。同一類中的對象有着相同數據結構。這些對象之間是結構、行為特徵的共享關係。
  在同一應用中共享。在同一應用的類層次結構中,存在繼承關係的各相似子類中,存在數據結構和行為的繼承,使各相似子類共享共同的結構和行為。使用繼承來實現代碼的共享,這也是面嚮對象的主要優點之一。
  在不同應用中共享。面嚮對象不僅允許在同一應用中共享信息,而且為未來目標的可重用設計準備了條件。通過類庫這種機製和結構來實現不同應用中的信息共享。
  4.強調對象結構而不是程序結構
  四、面嚮對象的開發方法
  目前,面嚮對象開發方法的研究已日趨成熟,國際上已有不少面嚮對象産品出現。面嚮對象開發方法有coad方法、booch方法和omt方法等。
  1.booch方法
  booch最先描述了面嚮對象的軟件開發方法的基礎問題,指出面嚮對象開發是一種根本不同於傳統的功能分解的設計方法。面嚮對象的軟件分解更接近人對客觀事務的理解,而功能分解衹通過問題空間的轉換來獲得。
  2.coad方法
  coad方法是1989年coad和yourdon提出的面嚮對象開發方法。該方法的主要優點是通過多年來大係統開發的經驗與面嚮對象概念的有機結合,在對象、結構、屬性和操作的認定方面,提出了一套係統的原則。該方法完成了從需求角度進一步進行類和類層次結構的認定。儘管coad方法沒有引入類和類層次結構的術語,但事實上已經在分類結構、屬性、操作、消息關聯等概念中體現了類和類層次結構的特徵。
  3.omt方法
  omt方法是1991年由james rumbaugh等5人提出來的,其經典著作為“面嚮對象的建模與設計”。
  該方法是一種新興的面嚮對象的開發方法,開發工作的基礎是對真實世界的對象建模,然後圍繞這些對象使用分析模型來進行獨立於語言的設計,面嚮對象的建模和設計促進了對需求的理解,有利於開發得更清晰、更容易維護的軟件係統。該方法為大多數應用領域的軟件開發提供了一種實際的、高效的保證,努力尋求一種問題求解的實際方法。
  4.uml(unified modeling language)語言
  軟件工程領域在1995年~1997年取得了前所未有的進展,其成果超過軟件工程領域過去15年的成就總和,其中最重要的成果之一就是統一建模語言(uml)的出現。uml將是面嚮對象技術領域內占主導地位的標準建模語言。
  uml不僅統一了booch方法、omt方法、oose方法的表示方法,而且對其作了進一步的發展,最終統一為大衆接受的標準建模語言。uml是一種定義良好、易於表達、功能強大且普遍適用的建模語言。它融入了軟件工程領域的新思想、新方法和新技術。它的作用域不限於支持面嚮對象的分析與設計,還支持從需求分析開始的軟件開發全過程。
面嚮對象的模型
  ·對象模型
  對象模型表示了靜態的、結構化的係統數據性質,描述了係統的靜態結構,它是從客觀世界實體的對象關係角度來描述,表現了對象的相互關係。該模型主要關心係統中對象的結構、屬性和操作,它是分析階段三個模型的核心,是其他兩個模型的框架。
  1.對象和類
  (1) 對象。
  對象建模的目的就是描述對象。
  (2) 類。
  通過將對象抽象成類,我們可以使問題抽象化,抽象增強了模型的歸納能力。
  (3) 屬性。
  屬性指的是類中對象所具有的性質(數據值)。
  (4) 操作和方法。
  操作是類中對象所使用的一種功能或變換。類中的各對象可以共享操作,每個操作都有一個目標對象作為其隱含參數。
  方法是類的操作的實現步驟。
  2.關聯和鏈
  關聯是建立類之間關係的一種手段,而鏈則是建立對象之間關係的一種手段。
  (1) 關聯和鏈的含義。
  鏈表示對象間的物理與概念聯結,關聯表示類之間的一種關係,鏈是關聯的實例,關聯是鏈的抽象。
  (2) 角色。
  角色說明類在關聯中的作用,它位於關聯的端點。
  (3) 受限關聯。
  受限關聯由兩個類及一個限定詞組成,限定詞是一種特定的屬性,用來有效的減少關聯的重數,限定詞在關聯的終端對象集中說明。
  限定提高了語義的精確性,增強了查詢能力,在現實世界中,常常出現限定詞。
  (4) 關聯的多重性。
  關聯的多重性是指類中有多少個對象與關聯的類的一個對象相關。重數常描述為“一”或“多”。
  圖10-8表示了各種關聯的重數。小實心圓表示“多個”,從零到多。小空心圓表示零或一。沒有符號表示的是一對一關聯。
  3.類的層次結構
  (1) 聚集關係。
  聚集是一種“整體-部分”關係。在這種關係中,有整體類和部分類之分。聚集最重要的性質是傳遞性,也具有逆對稱性。
  聚集可以有不同層次,可以把不同分類聚集起來得到一顆簡單的聚集樹,聚集樹是一種簡單表示,比畫很多綫來將部分類聯繫起來簡單得多,對象模型應該容易地反映各級層次,圖10-10表示一個關於微機的多極聚集。
  (2)一般化關係。
  一般化關係是在保留對象差異的同時共享對象相似性的一種高度抽象方式。它是“一般---具體”的關係。一般化類稱為你類,具體類又能稱為子類,各子類繼承了交類的性質,而各子類的一些共同性質和操作又歸納到你類中。因此,一般化關係和繼承是同時存在的。一般化關係的符號表示是在類關聯的連綫上加一個小三角形,如圖10-11
  4.對象模型
  (1)模板。模板是類、關聯、一般化結構的邏輯組成。
  (2)對象模型。
  對象模型是由一個或若幹個模板組成。模板將模型分為若幹個便於管理的子塊,在整個對象模型和類及關聯的構造塊之間,模板提供了一種集成的中間單元,模板中的類名及關聯名是唯一的。
  ·動態模型
  動態模型是與時間和變化有關的係統性質。該模型描述了係統的控製結構,它表示了瞬間的、行為化的係統控製
  性質,它關心的是係統的控製,操作的執行順序,它表示從對象的事件和狀態的角度出發,表現了對象的相互行為。
  該模型描述的係統屬性是觸發事件、事件序列、狀態、事件與狀態的組織。使用狀態圖作為描述工具。它涉及到事件、狀態、操作等重要概念。
  1.事件
  事件是指定時刻發生的某件事。
  2.狀態
  狀態是對象屬性值的抽象。對象的屬性值按照影響對象顯著行為的性質將其歸併到一個狀態中去。狀態指明了對象
  對輸入事件的響應。
  3.狀態圖
  狀態圖是一個標準的計算機概念,他是有限自動機的圖形表示,這裏把狀態圖作為建立動態模型的圖形工具。
  狀態圖反映了狀態與事件的關係。當接收一事件時,下一狀態就取决於當前狀態和所接收的該事件,由該事件引起的狀態變化稱為轉換。
  狀態圖是一種圖,用結點表示狀態,結點用圓圈表示;圓圈內有狀態名,用箭頭連綫表示狀態的轉換,上面標記事件名,箭頭方向表示轉換的方向。
  ·功能模型
  功能模型描述了係統的所有計算。功能模型指出發生了什麽,動態模型確定什麽時候發生,而對象模型確定發生的客體。功能模型表明一個計算如何從輸入值得到輸出值,它不考慮計算的次序。功能模型由多張數據流圖組成。數據流圖用來表示從源對象到目標對象的數據值的流嚮,它不包含控製信息,控製信息在動態模型中表示,同時數據流圖也不表示對象中值的組織,值的組織在對象模型中表示。圖10-15給出了一個窗口係統的圖標顯示的數據流圖。
  數據流圖中包含有處理、數據流、動作對象和數據存儲對象。
  1.處理
  數據流圖中的處理用來改變數據值。最低層處理是純粹的函數,一張完整的數據流圖是一個高層處理。
  2.數據流
  數據流圖中的數據流將對象的輸出與處理、處理與對象的輸入、處理與處理聯繫起來。在一個計算機中,用數據流來表示一中間數據值,數據流不能改變數據值。
  3.動作對象
  動作對象是一種主動對象,它通過生成或者使用數據值來驅動數據流圖。
  4.數據存儲對象
  數據流圖中的數據存儲是被動對象,它用來存儲數據。它與動作對象不一樣,數據存儲本身不産生任何操作,它衹響應存儲和訪問的要求。
面嚮對象的分析
  面嚮對象分析的目的是對客觀世界的係統進行建模。本節以上面介紹的模型概念為基礎,結合“銀行網絡係統”的具體實例來構造客觀世界問題的準確、嚴密的分析模型。
  分析模型有三種用途:用來明確問題需求;為用戶和開發人員提供明確需求;為用戶和開發人員提供一個協商的基礎,作為後繼的設計和實現的框架。
  (一) 面嚮對象的分析
  係統分析的第一步是:陳述需求。分析者必須同用戶一塊工作來提煉需求,因為這樣纔表示了用戶的真實意圖,其中涉及對需求的分析及查找丟失的信息。下面以“銀行網絡係統”為例,用面嚮對象方法進行開發。
  銀行網絡係統問題陳述: 設計支持銀行網絡的軟件,銀行網絡包括人工出納站和分行共享的自動出納機。每個分理處用分理處計算機來保存各自的帳戶,處理各自的事務;各自分理處的出納站與分理處計算機通信,出納站錄入帳戶和事務數據;自動出納機與分行計算機通信,分行計算機與撥款分理處結帳,自動出納機與用戶接口接受現金卡,與分行計算機通信完成事務,發放現金,打印收據;係統需要記錄保管和安全措施;係統必須正確處理同一帳戶的並發訪問;每個分處理為自己的計算機準備軟件,銀行網絡費用根據顧客和現金卡的數目分攤給各分理處。
  圖10-18給出銀行網絡係統的示意圖。
  (二)建立對象模型
  首先標識和關聯,因為它們影響了整體結構和解决問題的方法,其次是增加屬性,進一步描述類和關聯的基本網絡,使用繼承合併和組織類,最後操作增加到類中去作為構造動態模型和功能模型的副産品。
  1.確定類
  構造對象模型的第一步是標出來自問題域的相關的對象類,對象包括物理實體和概念。所有類在應用中都必須有意義,在問題陳述中,並非所有類都是明顯給出的。有些是隱含在問題域或一般知識中的。
  按圖10-19所示的過程確定類
  查找問題陳述中的所有名詞,産生如下的暫定類。
  軟件 銀行網絡 出納員 自動出納機 分行
  分處理 分處理計算機 帳戶 事務 出納站
  事務數據 分行計算機 現金卡 用戶 現金
  收據 係統 顧客 費用 帳戶數據
  訪問 安全措施 記錄保管
  根據下列標準,去掉不必要的類和不正確的類。
  (1) 冗餘類:若兩個類表述了同一個信息 ,保留最富有描述能力的類。如"用戶"和"顧客"就是重複的描述,因為"顧客"最富有描述性,因此保留它。
  (2) 不相幹的類:除掉與問題沒有關係或根本無關的類。例如,攤派費用超出了銀行網絡的範圍。
  (3) 模糊類:類必須是確定的,有些暫定類邊界定義模糊或範圍太廣,如"記錄保管"就模糊類,它是"事務"中的一部分。
  (4) 屬性:某些名詞描述的是其他對象的屬性,則從暫定類中刪除。如果某一性質的獨立性很重要,就應該把他歸屬到類,而不把它作為屬性。
  (5) 操作:如果問題陳述中的名詞有動作含義,則描述的操作就不是類。但是具有自身性質而且需要獨立存在的操作應該描述成類。如我們衹構造電話模型,"撥號"就是動態模型的一部分而不是類,但在電話撥號係統中,"撥號"是一個重要的類,它日期、時間、受話地點等屬性。
  在銀行網絡係統中,模糊類是"係統"、"安全措施"、"記錄保管"、"銀行網絡"等。屬於屬性的有:"帳戶數據"、"收據"、"現金"、"事務數據"。屬於實現的如:"訪問"、"軟件"等。這些均應除去。
  2.準備數據字典
  為所有建模實體準備一個數據字典。準確描述各個類的精確含義,描述當前問題中的類的範圍,包括對類的成員、用法方面的假設或限製。
  3.確定關聯
  兩個或多個類之間的相互依賴就是關聯。一種依賴表示一種關聯,可用各種方式來實現關聯,但在分析模型中應刪除實現的考慮,以便設計時更為靈活。關聯常用描述性動詞或動詞詞組來表示,其中有物理位置的表示、傳導的動作、通信、所有者關係、條件的滿足等。從問題陳述中抽取所有可能的關聯表述,把它們記下來,但不要過早去細化這些表述。
  下面是銀行網絡係統中所有可能的關聯,大多數是直接抽取問題中的動詞詞組而得到的。在陳述中,有些動詞詞組表述的關聯是不明顯的。最後,還有一些關聯與客觀世界或人的假設有關,必須同用戶一起核實這種關聯,因為這種關聯在問題陳述中找不到。
  銀行網絡問題陳述中的關聯:
  ·銀行網絡包括出納站和自動出納機;
  ·分行共享自動出納機;
  ·分理處提供分理處計算機;
  ·分理處計算機保存帳戶;
  ·分理處計算機處理帳戶支付事務;
  ·分理處擁有出納站;
  ·出納站與分理處計算機通信;
  ·出納員為帳戶錄入事務;
  ·自動出納機接受現金卡;
  ·自動出納機與用戶接口;
  ·自動出納機發放現金;
  ·自動出納機打印收據;
  ·係統處理並發訪問;
  ·分理處提供軟件;
  ·費用分攤給分理處。
  隱含的動詞詞組:
  ·分行由分理處組成;
  ·分理處擁有帳戶;
  ·分行擁有分行計算機;
  ·係統提供記錄保管;
  ·係統提供安全;
  ·顧客有現金卡。
  基於問題域知識的關聯:
  ·分理處雇傭出納員;
  ·現金卡訪問帳戶。
  使用下列標準去掉不必要和不正確的關聯:
  (1) 若某個類已被刪除,那麽與它有關的關聯也必須刪除或者用其它類來重新表述。在例中,我們刪除了"銀行網絡",相關的關聯也要刪除。
  (2) 不相幹的關聯或實現階段的關聯:刪除所有問題域之外的關聯或涉及實現結構中的關聯。如"係統處理並發訪問"就是一種實現的概念。
  (3) 動作:關聯應該描述應用域的結構性質而不是瞬時事件,因此應刪除"自動出納機接受現金卡","自動出納機與用戶接口"等。
  (4) 派生關聯:省略那些可以用其他關聯來定義的關聯。因為這種關聯是冗餘的。銀行網絡係統的初步對象圖如圖10-20所示。其中含有關聯。
  4.確定屬性
  屬性是個體對象的性質,屬性通常用修飾性的名詞詞組來表示.形容詞常常表示具體的可枚舉的屬性值,屬性不可能在問題陳述中完全表述出來,必須藉助於應用域的知識及對客觀世界的知識纔可以找到它們。衹考慮與具體應用直接相關的屬性,不要考慮那些超出問題範圍的屬性。首先找出重要屬性,避免那些衹用於實現的屬性,要為各個屬性取有意義的名字。按下列標準刪除不必要的和不正確的屬性:
  (1) 對象:若實體的獨立存在比它的值重要,那麽這個實體不是屬性而是對象。如在郵政目錄中,"城市"是一個屬性,然而在人口普查中,"城市"則被看作是對象。在具體應用中,具有自身性質的實體一定是對象。
  (2) 定詞:若屬性值取决於某種具體上下文,則可考慮把該屬性重新表述為一個限定詞。
  (3) 名稱:名稱常常作為限定詞而不是對象的屬性,當名稱不依賴於上下文關係時,名稱即為一個對象屬性,尤其是它不惟一時。
  (4) 標識符:在考慮對象模糊性時,引入對象標識符表示,在對象模型中不列出這些對象標識符,它是隱含在對象模型中,衹列出存在於應用域的屬性。
  (5) 內部值:若屬性描述了對外不透明的對象的內部狀態,則應從對象模型中刪除該屬性。
  (6) 細化:忽略那些不可能對大多數操作有影響的屬性。
  5.使用繼承來細化類
  使用繼承來共享公共機構,以次來組織類,可以用兩種方式來進行。
  (1) 自底嚮上通過把現有類的共同性質一般化為父類,尋找具有相似的屬性,關係或操作的類來發現繼承。例如"遠程事務"和"出納事務"是類似的,可以一般化為"事務"。有些一般化結構常常是基於客觀世界邊界的現有分類,衹要可能,盡量使用現有概念。對稱性常有助於發現某些丟失的類。
  (2) 自頂嚮下將現有的類細化為更具體的子類。具體化常常可以從應用域中明顯看出來。應用域中各枚舉字情況是最常見的具體化的來源。例如:菜單,可以有固定菜單,頂部菜單,彈出菜單,下拉菜單等,這就可以把菜單類具體細化為各種具體菜單的子類。當同一關聯名出現多次且意義也相同時,應盡量具體化為相關聯的類,例如"事務"從"出納站"和"自動出納機"進入,則"錄入站"就是"出納站"和"自動出納站"的一般化。在類層次中,可以為具體的類分配屬性和關聯。各屬性和都應分配給最一般的適合的類,有時也加上一些修正。
  應用域中各枚舉情況是最常見的具體化的來源。
  6.完善對象模型
  對象建模不可能一次就能保證模型是完全正確的,軟件開發的整個過程就是一個不斷完善的過程。模型的不同組成部分多半是在不同的階段完成的,如果發現模型的缺陷,就必須返回到前期階段去修改,有些細化工作是在動態模型和功能模型完成之後纔開始進行的。
  (1) 幾種可能丟失對象的情況及解决辦法:
  ·同一類中存在毫無關係的屬性和操作,則分解這個類,使各部分相互關聯;
  ·一般化體係不清楚,則可能分離扮演兩種角色的類
  ·存在無目標類的操作,則找出並加上失去目標的類;
  ·存在名稱及目的相同的冗餘關聯,則通過一般化創建丟失的父類,把關聯組織在一起。
  (2) 查找多餘的類。
  類中缺少屬性,操作和關聯,則可刪除這個類。
  (3)查找丟失的關聯。
  丟失了操作的訪問路徑,則加入新的關聯以回答查詢。
  (4) 網絡係統的具體情況作如下的修改:
  ①現金卡有多個獨立的特性。把它分解為兩個對象:卡片權限和現金卡。
  a.卡片權限:它是銀行用來鑒別用戶訪問權限的卡片,表示一個或多個用戶帳戶的訪問權限;各個卡片權限對象中可能具有好幾個現金卡,每張都帶有安全碼,卡片碼,它們附在現金卡上,表現銀行的卡片權限。
  b.現金卡:它是自動出納機得到表示碼的數據卡片,它也是銀行代碼和現金卡代碼的數據載體。
  ②"事務"不能體現對帳戶之間的傳輸描述的一般性,因它衹涉及一個帳戶,一般來說,在每個帳戶中,一個"事務"包括一個或多個"更新",一個"更新"是對帳戶的一個動作,它們是取款,存款,查詢之一。一個"更新"中所有"更新"應該是一個原子操作。
  ③"分理處"和"分離處理機"之間,"分行"和"分行處理機"之間的區別似乎並不影響分析,計算機的通信處理實際上是實現的概念,將"分理處計算機"並入到"分理處",將"分行計算機"並入到"分行"。
  (三)建立動態模型
  1.準備腳本
  動態分析從尋找事件開始,然後確定各對象的可能事件順序。在分析階段不考慮算法的執行,算法是實現模型的一部分。
  2.確定事件
  確定所有外部事件。事件包括所有來自或發往用戶的信息、外部設備的信號、輸入、轉換和動作,可以發現正常事件,但不能遺漏條件和異常事件。
  3.準備事件跟蹤表
  把腳本表示成一個事件跟蹤表,即不同對象之間的事件排序表,對象為表中的列,給每個對象分配一個獨立的列。
  4.構造狀態圖
  對各對象類建立狀態圖,反映對象接收和發送的事件,每個事件跟蹤都對應於狀態圖中一條路徑。
  (四)建立功能建模
  功能模型用來說明值是如何計算的,表明值之間的依賴關係及相關的功能,數據流圖有助於表示功能依賴關係,其中的處理應於狀態圖的活動和動作,其中的數據流對應於對象圖中的對象或屬性。
  1.確定輸入值、輸出值
  先列出輸入、輸出值,輸入、輸出值是係統與外界之間的事件的參數。
  2.建立數據流圖
  數據流圖說明輸出值是怎樣從輸入值得來的,數據流圖通常按層次組織。
  (五)確定操作
  在建立對象模型時,確定了類、關聯、結構和屬性,還沒有確定操作。衹有建立了動態模型和功能模型之後,纔可能最後確定類的操作。
面嚮對象的設計
  面嚮對象設計是把分析階段得到的需求轉變成符合成本和質量要求的、抽象的係統實現方案的過程。從面嚮對象分析到面嚮對象設計,是一個逐漸擴充模型的過程。
  瀑布模型把設計進一步劃分成概要設計和詳細設計兩個階段,類似地,也可以把面嚮對象設計再細分為係統設計和對象設計。係統設計確定實現係統的策略和目標係統的高層結構。對象設計確定解空間中的類、關聯、接口形式及實現操作的算法。
  (一)面嚮對象設計的準則
  1.模塊化
  面嚮對象開發方法很自然地支持了把係統分解成模塊的設計原則:對象就是模塊。它是把數據結構和操作這些數據的方法緊密地結合在一起所構成的模塊。
  2.抽象
  面嚮對象方法不僅支持過程抽象,而且支持數據抽象。
  3.信息隱藏
  在面嚮對象方法中,信息隱藏通過對象的封裝性來實現。
  4.低耦合
  在面嚮對象方法中,對象是最基本的模塊,因此,耦合主要指不同對象之間相互關聯的緊密程度。低耦合是設計的一個重要標準,因為這有助於使得係統中某一部分的變化對其它部分的影響降到最低程度。
  5.高內聚
  (1)操作內聚。
  (2)類內聚。
  (3)一般——具體內聚。
  (二)面嚮對象設計的啓發規則
  1.設計結果應該清晰易懂
  使設計結果清晰、易懂、易讀是提高軟件可維護性和可重用性的重要措施。顯然,人們不會重用那些他們不理解的設計。
  要做到:
  (1)用詞一致。
  (2)使用已有的協議。
  (3)減少消息模式的數量。
  (4)避免模糊的定義。
  2.一般——具體結構的深度應適當
  3.設計簡單類
  應該盡量設計小而簡單的類,這樣便以開發和管理。為了保持簡單,應註意以下幾點:
  (1)避免包含過多的屬性。
  (2)有明確的定義。
  (3)盡量簡化對象之間的合作關係。
  (4)不要提供太多的操作。
  4.使用簡單的協議
  一般來說,消息中參數不要超過3個。
  5.使用簡單的操作
  面嚮對象設計出來的類中的操作通常都很小,一般衹有3至5行源程序語句,可以用僅含一個動詞和一個賓語的簡單句子描述它的功能
  6.把設計變動減至最小
  通常,設計的質量越高,設計結果保持不變的時間也越長。即使出現必須修改設計的情況,也應該使修改的範圍盡可能小。
  (三)係統設計
  係統設計是問題求解及建立解答的高級策略。必須製定解决問題的基本方法,係統的高層結構形式包括子係統的分解、它的固有並發性、子係統分配給硬軟件、數據存儲管理、資源協調、軟件控製實現、人機交互接口。
  1.係統設計概述
  設計階段先從高層入手,然後細化。係統設計要决定整個結構及風格,這種結構為後面設計階段的更詳細策略的設計提供了基礎。
  (1)係統分解。
  係統中主要的組成部分稱為子係統,子係統既不是一個對象也不是一個功能,而是類、關聯、操作、事件和約束的集合。
  (2)確定並發性。
  分析模型、現實世界及硬件中不少對象均是並發的。
  (3)處理器及任務分配。
  各並發子係統必須分配給單個硬件單元,要麽是一個一般的處理器,要麽是一個具體的功能單元。
  (4)數據存儲管理。
  係統中的內部數據和外部數據的存儲管理是一項重要的任務。通常各數據存儲可以將數據結構、文件、數據庫組合在一起,不同數據存儲要在費用、訪問時間、容量及可靠性之間做出折衷考慮。
  (5)全局資源的處理。
  必須確定全局資源,並且製定訪問全局資源的策略。
  (6)選擇軟件控製機製。
  分析模型中所有交互行為都表示為對象之間的事件。係統設計必須從多種方法中選擇某種方法來實現軟件的控製。
  (7)人機交互接口設計。
  設計中的大部分工作都與穩定的狀態行為有關,但必須考慮用戶使用係統的交互接口。
  2.係統結構的一般框架
  3.係統分解——建立係統的體係結構
  可用的軟件庫以及程序員的編程經驗。
  通過面嚮對象分析得到的問題域精確模型,為設計體係結構奠定了良好的基礎,建立了完整的框架。
  4.選擇軟件控製機製
  軟件係統中存在兩種控製流,外部控製流和內部控製流。
  5.數據存儲管理
  數據存儲管理是係統存儲或檢索對象的基本設施,它建立在某種數據存儲管理係統之上,並且隔離了數據存儲管理模式的影響。
  6.設計人機交互接口
  在面嚮對象分析過程中,已經對用戶界面需求作了初步分析,在面嚮對象設計過程中,則應該對係統的人機交互接口進行詳細設計,以確定人機交互的細節,其中包括指定窗口和報表的形式、設計命令層次等項內容。
  (四)對象設計
  1.對象設計概述
  2.三種模型的結合
  (1)獲得操作。
  (2)確定操作的目標對象。
  3.算法設計
  4.優化設計
  5.控製的實現
  6.調整繼承
  7.關聯的設計
面嚮對象的實現
  (一)程序設計語言
  1.選擇面嚮對象語言
  采用面嚮對象方法開發軟件的基本目的和主要優點是通過重用提高軟件的生産率。因此,應該優先選用能夠最完善、最準確地表達問題域語義的面嚮對象語言。
  在選擇編程語言時,應該考慮的其他因素還有:對用戶學習面嚮對象分析、設計和編碼技術所能提供的培訓操作;在使用這個面嚮對象語言期間能提供的技術支持;能提供給開發人員使用的開發工具、開發平臺,對機器性能和內存的需求,集成已有軟件的容易程度。
  2.程序設計風格
  (1)提高重用性。
  (2)提高可擴充性。
  (3)提高健壯性。
  (二)類的實現
  在開發過程中,類的實現是核心問題。在用面嚮對象風格所寫的係統中,所有的數據都被封裝在類的實例中。而整個程序則被封裝在一個更高級的類中。在使用既存部件的面嚮對象係統中,可以衹花費少量時間和工作量來實現軟件。衹要增加類的實例,開發少量的新類和實現各個對象之間互相通信的操作,就能建立需要的軟件。
  一種方案是先開發一個比較小、比較簡單的來,作為開發比較大、比較復雜的類的基礎。
  (1)“原封不動”重用。
  (2)進化性重用。
  一個能夠完全符合要求特性的類可能並不存在。
  (3)“廢棄性”開發。
  不用任何重用來開發一個新類。
  (4)錯誤處理。
  一個類應是自主的,有責任定位和報告錯誤。
  (三)應用係統的實現
  應用係統的實現是在所有的類都被實現之後的事。實現一個係統是一個比用過程性方法更簡單、更簡短的過程。有些實例將在其他類的初始化過程中使用。而其餘的則必須用某種主過程顯式地加以說明,或者當作係統最高層的類的表示的一部分。
  在c++和c中有一個main( )函數,可以使用這個過程來說明構成係統主要對象的那些類的實例。
  (四)面嚮對象測試
  (1)算法層。
  (2)類層。
  測試封裝在同一個類中的所有方法和屬性之間的相互作用。
  (3)模板層。
  測試一組協同工作的類之間的相互作用。
  (4)係統層。
  把各個子係統組裝成完整的面嚮對象軟件係統,在組裝過程中同時進行測試。
面嚮對象和基於對象的區別
  很多人沒有區分“面嚮對象”和“基於對象”兩個不同的概念。面嚮對象的三大特點(封裝,繼承,多態)卻一不可。通常“基於對象”是使用對象,但是無法利用現有的對象模板産生新的對象類型,繼而産生新的對象,也就是說“基於對象”沒有繼承的特點。而“多態”表示為父類類型的子類對象實例,沒有了繼承的概念也就無從談論“多態”。現在的很多流行技術都是基於對象的,它們使用一些封裝好的對象,調用對象的方法,設置對象的屬性。但是它們無法讓程序員派生新對象類型。他們衹能使用現有對象的方法和屬性。所以當你判斷一個新的技術是否是面嚮對象的時候,通常可以使用後兩個特性來加以判斷。“面嚮對象”和“基於對象”都實現了“封裝”的概念,但是面嚮對象實現了“繼承和多態”,而“基於對象”沒有實現這些,的確很饒口。
  從事面嚮對象編程的人按照分工來說,可以分為“類庫的創建者”和“類庫的使用者”。使用類庫的人並不都是具備了面嚮對象思想的人,通常知道如何繼承和派生新對象就可以使用類庫了,然而我們的思維並沒有真正的轉過來,使用類庫衹是在形式上是面嚮對象,而實質上衹是庫函數的一種擴展。
  面嚮對象是一種思想,是我們考慮事情的方法,通常表現為我們是將問題的解决按照過程方式來解决呢,還是將問題抽象為一個對象來解决它。很多情況下,我們會不知不覺的按照過程方式來解决它,而不是考慮將要解决問題抽象為對象去解决它。有些人打着面嚮對象的幌子,幹着過程編程的勾當
面嚮對象的模型
  ·對象模型
  對象模型表示了靜態的、結構化的係統數據性質,描述了係統的靜態結構,它是從客觀世界實體的對象關係角度來描述,表現了對象的相互關係。該模型主要關心係統中對象的結構、屬性和操作,它是分析階段三個模型的核心,是其他兩個模型的框架。
  1.對象和類
  (1) 對象。
  對象建模的目的就是描述對象。
  (2) 類。
  通過將對象抽象成類,我們可以使問題抽象化,抽象增強了模型的歸納能力。
  (3) 屬性。
  屬性指的是類中對象所具有的性質(數據值)。
  (4) 操作和方法。
  操作是類中對象所使用的一種功能或變換。類中的各對象可以共享操作,每個操作都有一個目標對象作為其隱含參數。
  方法是類的操作的實現步驟。
  2.關聯和鏈
  關聯是建立類之間關係的一種手段,而鏈則是建立對象之間關係的一種手段。
  (1) 關聯和鏈的含義。
  鏈表示對象間的物理與概念聯結,關聯表示類之間的一種關係,鏈是關聯的實例,關聯是鏈的抽象。
  (2) 角色。
  角色說明類在關聯中的作用,它位於關聯的端點。
  (3) 受限關聯。
  受限關聯由兩個類及一個限定詞組成,限定詞是一種特定的屬性,用來有效的減少關聯的重數,限定詞在關聯的終端對象集中說明。
  限定提高了語義的精確性,增強了查詢能力,在現實世界中,常常出現限定詞。
  (4) 關聯的多重性。
  關聯的多重性是指類中有多少個對象與關聯的類的一個對象相關。重數常描述為“一”或“多”。
  3.類的層次結構
  (1) 聚集關係。
  聚集是一種“整體-部分”關係。在這種關係中,有整體類和部分類之分。聚集最重要的性質是傳遞性,也具有逆對稱性。
  聚集可以有不同層次,可以把不同分類聚集起來得到一顆簡單的聚集樹,聚集樹是一種簡單表示,比畫很多綫來將部分類聯繫起來簡單得多,對象模型應該容易地反映各級層次。
  (2)一般化關係。
  一般化關係是在保留對象差異的同時共享對象相似性的一種高度抽象方式。它是“一般---具體”的關係。一般化類稱為你類,具體類又能稱為子類,各子類繼承了交類的性質,而各子類的一些共同性質和操作又歸納到你類中。因此,一般化關係和繼承是同時存在的。一般化關係的符號表示是在類關聯的連綫上加一個小三角形 。
  4.對象模型
  (1)模板。模板是類、關聯、一般化結構的邏輯組成。
  (2)對象模型。
  對象模型是由一個或若幹個模板組成。模板將模型分為若幹個便於管理的子塊,在整個對象模型和類及關聯的構造塊之間,模板提供了一種集成的中間單元,模板中的類名及關聯名是唯一的。
  ·動態模型
  動態模型是與時間和變化有關的係統性質。該模型描述了係統的控製結構,它表示了瞬間的、行為化的係統控製
  性質,它關心的是係統的控製,操作的執行順序,它表示從對象的事件和狀態的角度出發,表現了對象的相互行為。
  該模型描述的係統屬性是觸發事件、事件序列、狀態、事件與狀態的組織。使用狀態圖作為描述工具。它涉及到事件、狀態、操作等重要概念。
  1.事件
  事件是指定時刻發生的某件事。
  2.狀態
  狀態是對象屬性值的抽象。對象的屬性值按照影響對象顯著行為的性質將其歸併到一個狀態中去。狀態指明了對象
  對輸入事件的響應。
  3.狀態圖
  狀態圖是一個標準的計算機概念,他是有限自動機的圖形表示,這裏把狀態圖作為建立動態模型的圖形工具。
  狀態圖反映了狀態與事件的關係。當接收一事件時,下一狀態就取决於當前狀態和所接收的該事件,由該事件引起的狀態變化稱為轉換。
  狀態圖是一種圖,用結點表示狀態,結點用圓圈表示;圓圈內有狀態名,用箭頭連綫表示狀態的轉換,上面標記事件名,箭頭方向表示轉換的方向。
  ·功能模型
  功能模型描述了係統的所有計算。功能模型指出發生了什麽,動態模型確定什麽時候發生,而對象模型確定發生的客體。功能模型表明一個計算如何從輸入值得到輸出值,它不考慮計算的次序。功能模型由多張數據流圖組成。數據流圖用來表示從源對象到目標對象的數據值的流嚮,它不包含控製信息,控製信息在動態模型中表示,同時數據流圖也不表示對象中值的組織,值的組織在對象模型中表示。圖10-15給出了一個窗口係統的圖標顯示的數據流圖。
  數據流圖中包含有處理、數據流、動作對象和數據存儲對象。
  1.處理
  數據流圖中的處理用來改變數據值。最低層處理是純粹的函數,一張完整的數據流圖是一個高層處理。
  2.數據流
  數據流圖中的數據流將對象的輸出與處理、處理與對象的輸入、處理與處理聯繫起來。在一個計算機中,用數據流來表示一中間數據值,數據流不能改變數據值。
  3.動作對象
  動作對象是一種主動對象,它通過生成或者使用數據值來驅動數據流圖。
  4.數據存儲對象
  數據流圖中的數據存儲是被動對象,它用來存儲數據。它與動作對象不一樣,數據存儲本身不産生任何操作,它衹響應存儲和訪問的要求。
面嚮對象的例子
  這裏我們將通過一個具體的實例來認識它的封裝性! 在面嚮對象方法
  中,對象可看成是屬性(數據)以及這些屬性上的專用操作的封裝體。
  封裝是一種信息屏蔽技術,封裝的目的是使對象的定義和實現分離。 
  Step1:
  1.1新建一個工程命名為VBOOP;
  1.2單擊工程菜單,選擇添加類模塊後並單擊確定按鈕;
  1.3在其屬性窗口中將類的名稱改為TScore。
  Step2:編輯TScore類模塊代碼
  2.1.這裏為TScore類定義四個私有(Private)變量,它們衹能在本模塊
  中是可見的,即類的一些成員被隱藏起來,用戶衹能通過屬性過程
  或函數等方法來訪問,從而對對象進行封裝。
  定義變量的基本語法:
  Private/Publc <變量名> As <變量類型>
  代碼部分:
  Private FName As String'學生的姓名
  Private FMath As Single'數學成績
  Private FEnglish As Single '英語成績
  2.2.為TScore類定義六個公用(Public)的屬性(Property)過程和一
  個計算總分的方法函數。
  定義方法的基本語法:
  Private/Publc Property Get <讀屬性過程名> As <屬性返回值類型>;
  Private/Public Property Let <寫屬性過程名>(ByVal 變量名 As 返回值類型);
  Private/Publc Function <函數名> As <函數返回值類型>;
  get: 將模塊中的私有變量的值賦給屬性過程,通常稱為讀;
  Let: 通過屬性過程給模塊中的私有變量值賦,通常稱為寫。
  代碼部分:
  Public Property Get GetName() As String
  GetName = FName
  End Property
  Public Property Let SetName(ByVal Name As String)
  FName = Name
  End Property
  Public Property Get GetMath() As Single
  GetMath = FMath
  End Property
  Public Property Let SetMath(ByVal Math As Single)
  FMath = Math
  End Property
  Public Property Get GetEnglish() As Single
  GetEnglish = FEnglish
  End Property
  Public Property Let SetEnglish(ByVal English As Single)
  FEnglish = English
  End Property
  Public Function Total() As Single'計算總成績函數
  Total = GetMath + GetEnglish
  End Function
  Step3:回到Form1窗口,在窗口上添加12個控件:
  3.1添加5個文本框txtName、txtMath、txtEN、txtTotal;
  3.2添加5個標簽labName、labMath、labEN、labTotal
  其Caption屬性分別為姓名、數學、英語、總成績;
  3.3添加2個命令按鈕ComSetValues、ComSearch
  其Caption屬性分別為賦值、查詢。
  Step4:編輯窗口事件
  4.1.構造Score對象及查詢關鍵字SearchKey。在面嚮對象方法
  中,我們可以這樣說定義類就是定義數據類型,而聲明對
  象就是聲明變量。也就是說,對象實際上就是變量。
  Dim Score As New TScore
  Dim SearchKey As String
  4.2.給模塊中四個私有變量賦值的單擊事件
  Private Sub ComSetValues_Click()
  If Val(txtMath.Text) >= 0 And Val(txtMath.Text) <= 100
  And Val(txtEN.Text) >= 0 And Val(txtEN.Text) <= 100
  Then
  With Score
  .SetName = txtName.Text
  .SetMath = Val(txtMath.Text)
  .SetEnglish = Val(txtEN.Text)
  End With
  txtName.Text = ""
  txtMath.Text = ""
  txtEN.Text = ""
  Print "姓名:" & Score.GetName & "數學:" & Score.GetMath & "英語:" & Score.GetEnglish
  Else
  MsgBox "成績的取值範圍:[0,100]", 64, "提示"
  End If
  End Sub
十一.面嚮對象的術語
  1. 類
  類作為設計藍圖來創建對象的代碼段,它描述了對象的特徵;該對象具有什麽樣的屬性,怎樣使用對象完成一些任務,他對事件進行怎樣的響應等!
  2. 對象
  對象是類的一個實例,通常通過調用類的一個構造函數來創建它!
  3. 方法
  方法是在類中定義的函數,一般而言,一個方法描述了對象可以執行的一個操作!
  4. 屬性
  屬性是類中定義的變量,類的屬性突出刻畫了對象的性質或狀態。某些情況下,對象的使用者可能不允許改變對象的某些屬性,這是因為類的創建者已經規定了那些屬性不能被使用者更改。這就比如你衹能知道我是男生,但你沒有辦法改變!
  5.事件
  VB是由事件觸發!事件是由某個外部行為所引發的對象方法。他可與用戶行為(例如單擊某個Button)或係統行為相關聯。
  6.構造函數
  構造函數是創建對象所調用的特殊方法,在VB中,對象的創建是通過在給定的類中創建名為new的過程而實現的!
  7. 析構函數
  析構函數是釋放對象時所調用的特殊方法,在VB中,為了編寫析構函數,我們必須重寫基類的Dispose方法。但是,由於CLR自動進行垃圾收集,因此在受管代碼中很少需要顯式得調用析構函數。然後,當運行CLR之外的資源(如設備,文件句柄,網絡連接等)時,應調用Dispose方法確保計算機的性能!
  8. 繼承
  繼承是面嚮對象的一個概念,它規定一個類可以從其他的小類(基類)中派生,並且該派生類繼承其基類的接口和相應代碼!(該類稱為派生類或子類)
  9. 重寫
  重寫是面嚮對象的一個概念,它規定一個派生類可以創建其基類某個方法的不同實現代碼。實際上,它完全重寫了基類中該方法所執行的操作!
  10. 接口
  接口是一種約定,它定義了方法、屬性、時間和索引器的結構。我們不能直接從一個接口創建對象,而必須首先通過創建一個類來實現接口所定義的特徵!
  11.封裝
  封裝是一個概念,它的含義是把方法、屬性、事件集中到一個統一的類中,並對使用者屏蔽其中的細節問題一個關於的封裝的實例是小汽車——我們通過操作方向盤、剎車和加速來操作汽車。好的封裝不需要我們考慮燃料的噴出、流動問題等。
  12. 重載
  他規定一個方法可以具有許多不同的接口,但方法的名稱是相同的。
  13. 多態
  它規定,一個同樣的函數對於不同的對象可以具有不同的實現。例如一個Add方法,它既可以執行整數的加法求和操作,也可以執行字符串的連接操作!
英文解釋
  1. :  Object Oriented (OO)
相關詞
計算機程序設計方法編程程序開發java開發模式軟件工程網絡遊戲
商業智能開發技術互聯網數據庫程序設計uml更多結果...
包含詞
面嚮對象的面嚮對象語言
面嚮對象設計面嚮對象思想
面嚮對象方法面嚮對象編程
面嚮對象程序面嚮對象技術
面嚮對象理論面嚮對象表示
面嚮對象測試面嚮對象分析
面嚮對象建模面嚮對象數據
面嚮對象的技術面嚮對象數據庫
面嚮對象的分析面嚮對象的設計
面嚮對象化語言面嚮對象的語言
面嚮對象的特徵面嚮對象的要素
面嚮對象的模型面嚮對象的實現
面嚮對象程序設計面嚮對象軟件工程
面嚮對象建模基礎面嚮對象編程基礎
面嚮對象編程教程面嚮對象基礎教程
二面嚮對象的特徵面嚮對象數據模型
面嚮對象編程語言面嚮對象操作係統
四面嚮對象的要素三面嚮對象的特徵
八面嚮對象的實現七面嚮對象的設計
六面嚮對象的分析五面嚮對象的模型
三面嚮對象的要素面嚮對象係統分析與設計
面嚮對象程序設計方法UML面嚮對象建模與設計
VisualFoxPro面嚮對象程序設計解析C++面嚮對象程序設計
C++面嚮對象程序設計面嚮對象的係統設計
VisualC++面嚮對象編程教程面嚮對象分析設計與編程
結構化與面嚮對象程序設計UML面嚮對象建模基礎
VisualC++面嚮對象程序設計面嚮對象程序設計及C++
C++面嚮對象編程基礎Java面嚮對象程序設計
JAVA語言面嚮對象程序設計Delphi面嚮對象程序設計
C#面嚮對象基礎教程C++面嚮對象程序設計教程
面嚮對象程序設計實用教程面嚮對象程序設計C#
面嚮對象程序設計C++教程Java面嚮對象程序設計教程
Java面嚮對象編程基礎教程面嚮對象與Java程序設計
面嚮對象設計原理與模式UML面嚮對象分析與建模
第二代面嚮對象編程語言面嚮對象生存周期模型
面嚮對象數據庫係統面嚮對象的程序設計
面嚮對象的遊戲開發C#面嚮對象編程
面嚮對象分析與設計Java面嚮對象編程
妙解叩響面嚮對象思想之門面嚮對象編程基礎教程
面嚮對象與程序設計面嚮對象程序設計與教程
平臺與面嚮對象程序設計語言與面嚮對象程序設計
面嚮對象程序設計教程面嚮對象分析與建模
面嚮對象編程教程(第2版)語言面嚮對象程序設計
面嚮對象程序設計語言編程面嚮對象程序設計及
面嚮對象建模與設計面嚮對象程序設計教程
面嚮對象程序設計(第3版)面嚮對象數據庫教程
面嚮對象程序設計教程(版)解析面嚮對象程序設計
面嚮對象數據庫語言面嚮對象的體係結構
反射的面嚮對象編程二、面嚮對象的特徵
三、面嚮對象的要素五、面嚮對象的模型
六、面嚮對象的分析七、面嚮對象的設計
面嚮對象的基本概念面嚮對象的基本概念
八、面嚮對象的實現三、面嚮對象的特徵
四、面嚮對象的要素- 面嚮對象編程
公司出品的面嚮對象開發軟件包妙解Hibernate3.x叩響面嚮對象思想之門
.NET平臺與C#面嚮對象程序設計VisualC++面嚮對象編程教程(第2版)
面嚮對象項目開發經驗大成:基於.NET實現IT項目的面嚮對象開發及管理:電子政務係統案例分析
對象解决方案——管理面嚮對象項目(影印版)Java語言與面嚮對象程序設計
面嚮對象程序設計C++語言編程ViaualFoxPro6.0面嚮對象數據庫教程
Java面嚮對象程序設計(第3版)Java與UML面嚮對象程序設計教程
面嚮對象係統分析與設計(第2版)面嚮對象程序設計與VisualC++6.0教程
面嚮對象的現代工業控製係統實用設計技術C++面嚮對象與VisualC++程序設計案例教程
C++面嚮對象程序設計實驗與課程設計教程VisualBasic面嚮對象程序設計教程
VisualFoxPro面嚮對象程序設計實用教程寫給大傢看的面嚮對象編程書
面嚮對象設計原理與模式(Java版)深入淺出面嚮對象分析與設計
C++VC面嚮對象程序設計基礎(教育部高職高專規劃教材)軟件開發的形式化工程方法:結構化+面嚮對象+形式化
C++面嚮對象程序設計教程習題解答與上機指導深入淺出面嚮對象分析與設計(影印版)
設計模式:可復用面嚮對象軟件的基礎軟件工程:面嚮對象和傳統的方法
VisualFoxPro數據庫及面嚮對象程序設計基礎面嚮對象程序設計學習與實踐
面嚮對象程序設計教程(Java版)面嚮對象設計原理與模式(版)
面嚮對象程序設計基礎(教育部高職高專規劃教材)軟件開發的形式化工程方法結構化面嚮對象形式化
數據庫及面嚮對象程序設計基礎面嚮對象程序設計教程習題解答與上機指導
面嚮對象項目開發經驗大成基於實現對象解决方案管理面嚮對象項目(影印版)
項目的面嚮對象開發及管理電子政務係統案例分析面嚮對象程序設計實驗與課程設計教程
面嚮對象與程序設計案例教程二、面嚮對象的基本概念