程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 面向對象理解

面向對象理解

編輯:關於C語言

一、傳統開發方法存在問題

  1.軟件重用性差
  重用性是指同一事物不經修改或稍加修改就可多次重復使用的性質。軟件重用性是軟件工程追求的目標之一。
  2.軟件可維護性差
  軟件工程強調軟件的可維護性,強調文檔資料的重要性,規定最終的軟件產品應該由完整、一致的配置成分組成。在軟件開發過程中,始終強調軟件的可讀性、可修改性和可測試性是軟件的重要的質量指標。實踐證明,用傳統方法開發出來的軟件,維護時其費用和成本仍然很高,其原因是可修改性差,維護困難,導致可維護性差。
  3.開發出的軟件不能滿足用戶需要
  用傳統的結構化方法開發大型軟件系統涉及各種不同領域的知識,在開發需求模糊或需求動態變化的系統時,所開發出的軟件系統往往不能真正滿足用戶的需要。
  用結構化方法開發的軟件,其穩定性、可修改性和可重用性都比較差,這是因為結構化方法的本質是功能分解,從代表目標系統整體功能的單個處理著手,自頂向下不斷把復雜的處理分解為子處理,這樣一層一層的分解下去,直到僅剩下若干個容易實現的子處理功能為止,然後用相應的工具來描述各個最低層的處理。因此,結構化方法是圍繞實現處理功能的“過程”來構造系統的。然而,用戶需求的變化大部分是針對功能的,因此,這種變化對於基於過程的設計來說是災難性的。用這種方法設計出來的系統結構常常是不穩定的 ,用戶需求的變化往往造成系統結構的較大變化,從而需要花費很大代價才能實現這種變化。
編輯本段
二、面向對象的基本概念

  (1)對象。
  對象是人們要進行研究的任何事物,從最簡單的整數到復雜的飛機等均可看作對象,它不僅能表示具體的事物,還能表示抽象的規則、計劃或事件。
  (2)對象的狀態和行為。
  對象具有狀態,一個對象用數據值來描述它的狀態。
  對象還有操作,用於改變對象的狀態,對象及其操作就是對象的行為。
  對象實現了數據和操作的結合,使數據和操作封裝於對象的統一體中
  (3)類。
  具有相同或相似性質的對象的抽象就是類。因此,對象的抽象是類,類的具體化就是對象,也可以說類的實例是對象。
  類具有屬性,它是對象的狀態的抽象,用數據結構來描述類的屬性。
  類具有操作,它是對象的行為的抽象,用操作名和實現該操作的方法來描述。
  (4)類的結構。
  在客觀世界中有若干類,這些類之間有一定的結構關系。通常有兩種主要的結構關系,即一般--具體結構關系,整體--部分結構關系。
  ①一般——具體結構稱為分類結構,也可以說是“或”關系,或者是“is a”關系。
  ②整體——部分結構稱為組裝結構,它們之間的關系是一種“與”關系,或者是“has a”關系。
  (5)消息和方法。
  對象之間進行通信的結構叫做消息。在對象的操作中,當一個消息發送給某個對象時,消息包含接收對象去執行某種操作的信息。發送一條消息至少要包括說明接受消息的對象名、發送給該對象的消息名(即對象名、方法名)。一般還要對參數加以說明,參數可以是認識該消息的對象所知道的變量名,或者是所有對象都知道的全局變量名。
  類中操作的實現過程叫做方法,一個方法有方法名、參數、方法體。
編輯本段
三、面向對象的特征

  (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. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved