OOA-OOD—OOP

關於面向對象(OO)程序設計的思想,如今把它記下來。c++

----OOA算法

  Object-Oriented Analysis(面向對象分析方法)是肯定需求或者業務的角度,按照面向對象的思想來分析業務。例如:OOA只是對需求中描述的問題,進行模塊化的處理,描述問題的本質,區別每一個問題的不一樣點相同點,肯定問題中的對象。OOA與結構化分析有較大的區別。OOA所強調的是在系統調查資料的基礎上,針對OO方法所須要的素材進行的歸類分析和整理,而不是對管理業務現狀和方法的分析。編程

   分析
  OOA(面向對象的分析)模型由5個層次(主題層、對象類層、結構層、屬性層和服務層)和5個活動(標識對象類、標識結構、定義主題、定義屬性和定義服務)組成。在這種方法 中定義了兩種對象類之間的結構,一種稱爲分類結構,一種稱爲組裝結構。分類結構就是所謂的通常與特殊的關係。組裝結構則反映了對象之間的總體與部分的關係。
 
   定義屬性:
  OOA在定義屬性的同時,要識別實例鏈接。實例鏈接是一個實例與另外一個實例的映射關係。
  OOA在定義服務的同時要識別消息鏈接。當一個對象須要向另外一對象發送消息時,它們之間就存在消息鏈接。
  OOA 中的5個層次和5個活動繼續貫穿在OOD(面向對象的設計)過程當中。OOD模型由4個部分組成。它們分別是設計問題域部分、設計人機交互部分、設計任務管理部分和設計數據管理部分。
 
----OOD
  面向對象設計(Object-Oriented Design,OOD)方法是OO方法中一箇中間過渡環節。其主要做用是對OOA分析的結果做進一步的規範化整理,以便可以被OOP直接接受。
  OOD的目標是管理程序內部各部分的相互依賴。爲了達到這個目標,OOD要求將程序分紅塊,每一個塊的規模應該小到能夠管理的程度,而後分別將各個塊隱藏在接口(interface)的後面,讓它們只經過接口相互交流。好比說,若是用OOD的方法來設計一個服務器-客戶端(client-server)應用,那麼服務器和客戶端之間不該該有直接的依賴,而是應該讓服務器的接口和客戶端的接口相互依賴。
這種依賴關係的轉換使得系統的各部分具備了可複用性。仍是拿上面那個例子來講,客戶端就沒必要依賴於特定的服務器,因此就能夠複用到其餘的環境下。若是要複用某一個程序塊,只要實現必須的接口就好了。
  OOD是一種解決軟件問題的設計範式(paradigm),一種抽象的範式。使用OOD這種設計範式,咱們能夠用對象(object) 來表現問題領域(problem domain)的實體,每一個對象都有相應的狀態和行爲。咱們剛纔說到:OOD是一種抽象的範式。抽象能夠分紅不少層次,從很是歸納的到很是特殊的都有,而 對象可能處於任何一個抽象層次上。另外,彼此不一樣但又互有關聯的對象能夠共同構成抽象:只要這些對象之間有類似性,就能夠把它們當成同一類的對象來處理。
  OO方法以對象爲基礎,利用特定的軟件工具直接完成從對象客體的描述到軟件結構之間的轉換。這是OO方法最主要的特色和成就。OO方法的應用解決了傳統結 構化開發方法中客觀世界描述工具與軟件結構的不一致性問題,縮短了開發週期,解決了從分析和設計到軟件模塊結構之間屢次轉換映射的繁雜過程,是一種頗有發 展前途的系統開發方法
 
----OOP
  面向對象編程(Object Oriented Programming,OOP,面向對象程序設計)是一種計算機編程架構。OOP 的一條基本原則是計算機程序是由單個可以起到子程序做用的單元或對象組合而成。
  OOP: Object Oriented Programming,面向對象的程序設計。所謂「對象」在顯式支持面向對象的語言中,通常是指類在內存中裝載的實例,具備相關的成員變量和成員函數(也稱爲:方法)。面向對象的程序設計徹底不一樣於傳統的面向過程程序設計,它大大地下降了軟件開發的難度,使編程就像搭積木同樣簡單,是當今電腦編程的一股勢不可擋的潮流。
  OOP 達到了軟件工程的三個主要目標:重用性、靈活性和擴展性。爲了實現總體運算,每一個對象都可以接收信息、處理數據和向其它對象發送信息。OOP 主要有如下的概念和組件:
  組件 - 數據和功能一塊兒在運行着的計算機程序中造成的單元,組件在 OOP 計算機程序中是模塊和結構化的基礎。
  抽象性 - 程序有能力忽略正在處理中信息的某些方面,即對信息主要方面關注的能力。
  封裝 - 也叫作信息封裝:確保組件不會以不可預期的方式改變其它組件的內部狀態;只有在那些提供了內部狀態改變方法的組件中,才能夠訪問其內部狀態。每類組件都提供了一個與其它組件聯繫的接口,並規定了其它組件進行調用的方法。
  多態性 - 組件的引用和類集會涉及到其它許多不一樣類型的組件,並且引用組件所產生的結果得依據實際調用的類型。
  繼承性 - 容許在現存的組件基礎上建立子類組件,這統一併加強了多態性和封裝性。典型地來講就是用類來對組件進行分組,並且還能夠定義新類爲現存的類的擴展,這樣就能夠將類組織成樹形或網狀結構,這體現了動做的通用性。
  因爲抽象性、封裝性、重用性以及便於使用等方面的緣由,以組件爲基礎的編程在腳本語言中已經變得特別流行。Python 和 Ruby 是最近纔出現的語言,在開發時徹底採用了 OOP 的思想,而流行的 Perl 腳本語言從版本5開始也慢慢地加入了新的面向對象的功能組件。用組件代替「現實」上的實體成爲 JavaScript(ECMAScript) 得以流行的緣由,有論證代表對組件進行適當的組合就能夠在英特網上代替 HTML 和 XML 的文檔對象模型(DOM)。
  面向對象編程技術的關鍵性觀念是它將數據及對數據的操做行爲放在一塊兒,做爲一個相互依存、不可分割的總體——對象。對象相同類型的對象進行分類、抽象後,得出共同的特徵而造成了類。面向對象編程就是定義這些類。類是描述相同類型的對象集合。類定義好以後將座位數據類型用於建立類的對象。程序的執行表現爲一組對象之間的交互通訊。對象之間經過公共接口進行通訊,從而完成系統功能。類中聲明的public成員組成了對象的對外公共接口.
  什麼是oop的基本思想呢?把組件的實現和接口分開,而且讓組件具備多態性。不過,二者仍是有根本的不一樣。oop強調在程序構造中語言要素的語法。你必須得繼承,使用類,使用對象,對象傳遞消息。不關心你繼承或是不繼承,它的開端是分析產品的分類,有些什麼種類,他們的行爲如何。就是說,兩件東西相等意味着什麼?怎樣正確地定義相等操做?不僅僅是相等操做那麼簡單,你往深處分析就會發現「相等」這個通常觀念意味着兩個對象部分,或者至少基本部分是相等的,據此咱們就能夠有一個通用的相等操做。再說對象的 種類。假設存在一個順序序列和一組對於順序序列的操做。那麼這些操做的語義是什麼?從複雜度權衡的角度看,咱們應該向用戶提供什麼樣的順序序列?該種序列 上存在那些操做?那種排序是咱們須要的?只有對這些組件的概念型分類搞清楚了,咱們才能提到實現的問題:使用模板、繼承仍是宏?使用什麼語言和技術?gp 的基本觀點是把抽象的軟件組件和它們的行爲用標準的分類學分類,出發點就是要建造真實的、高效的和不取決於語言的算法和數據結構。固然最終的載體仍是語言,沒有語言無法編程。stl使用c++,你也能夠用ada來實現,用其餘的語言來實現也行,結果會有所不一樣,但基本的東西是同樣的。處處都要用到二分查找和排序,而這就是人們正在作的。對於容器的語義,不一樣的語言會帶來輕微的不一樣。可是基本的區別很清楚是gp所依存的語義,以及語義分解。例如,咱們決定須要一個組件swap,而後指出這個組件在不一樣的語言中若是工做。顯然重點是語義以及語義分類。而oop所強調的(我認爲是過度強調的)是清楚的定義類之間的層次關係。oop告訴了你如何創建層次關係,卻沒有告訴你這些關係的實質。
相關文章
相關標籤/搜索