1. 程式人生 > >C++學習(二) C++面向物件程式設計方法概述

C++學習(二) C++面向物件程式設計方法概述

(1)面向過程與面向物件的比較

面向過程程式設計方法(C語言)

分析出要解決所需要的步驟,然後用函式把各步驟逐個實現,執行時依次呼叫各個函式即可。

程式 = 演算法 + 資料結構

面向物件程式設計方法(C++語言)

把問題分解成各個物件,描述各個物件的屬性和行為,通過物件的相互作用來解決問題。

物件 = 演算法 + 資料結構
程式 = 物件s + 訊息
(訊息的作用就是對物件的控制)

(2)面向物件程式設計方法的介紹

一般步驟

定義類 –> 建立物件 –> 向物件傳送訊息,使物件行動起來

-------------------------------------
面向物件的基本概念     面向物件系統的特性
-------------------------------------
    基類         |      抽象性
------------------------------------- 
    物件         |      封裝性
-------------------------------------   
    訊息         |      繼承性
-------------------------------------
    方法         |      多型性
-------------------------------------

面向物件程式設計是程式設計的新思維,它既吸收了結構化程式設計的一切優點,又考慮了現實世界與面向物件空間的對映關係,它所追求的目標是將現實世界問題的求解儘可能簡單化。

面向物件程式設計將資料以及對資料的操作放在一起,作為一個相互依存、不可分割的整體來處理,它採用了資料抽象和資訊隱藏技術。它將物件及對物件的操作抽象成一種新的資料型別——類,並且考慮不同物件之間的聯絡和物件所在類的重用性。

面向物件程式設計優於傳統的結構化程式設計,其優越性表現在,它有希望解決軟體工程的兩個主要的問題——軟體複雜性控制和軟體生產率的提高,此外它還符合人類的思維習慣,能夠自然地表現現實世界的實體和問題,它對軟體開發過程具有很重要的意義。

面向物件的基本概念: 基類物件訊息方法

物件

物件是現實世界中一個實際存在的事物,它是有形的,也可以是無形的或無法整體觸及的抽象事件。物件是構成世界的一個獨立單位,它具有自己的靜態特徵(靜態特徵是可以用某種資料來描述)和動態特徵(動態特徵即物件所表現的行為或物件所具有的功能)。一個物件可以包含多個屬性(屬性是一組資料結構的集合,表示物件的一種狀態,物件的狀態只供物件自身使用,用來描述靜態特性)和多個服務(服務是用來描述物件動態特徵或行為的一個操作序列,是物件一組功能的體現,包括自操作和它操作。自操作是物件對其內部資料屬性進行的操作,它操作是對其他物件進行的操作),物件的屬性值只能由這個物件的服務存取和修改。物件是其自身所具有的狀態特徵及可以對這些狀態施加的操作結合在一起所構成的獨立實體。

物件具有如下的特性:

(1)具有唯一標識名,可以區別於其他物件;

(2)具有一個狀態,由與其相關聯的屬性值集合所表徵;

(3)具有一組操作方法即服務,每個操作決定物件的一種行為;

(4)一個物件的成員仍可以是一個物件;

(5)模組獨立性;

(6)動態連線性;

(7)易維護性;

類(基類)

在面向物件系統中,並不是將各個具體的物件都進行描述,而是忽略其非本質的特性,找出其共性,將物件劃分成不同的類,這一過程稱為抽象過程。類是物件的抽象及描述,是具有共同屬性和操作的多個物件的相似特性的統一描述體。在類的描述中,每個類要有一個名字標識,用以標識一組物件的共同特徵。類的每個物件都是該類的例項。類提供了完整的解決特定問題的能力,因為類描述了資料結構(物件屬性)、演算法(服務方法)和外部介面(訊息協議),是一種使用者自定義的資料型別。

訊息

訊息是面向物件系統中實現物件間的通訊和請求任務的操作,是要求某個物件執行其中某個功能操作的規格說明。傳送訊息的物件稱為傳送者,接受訊息的物件稱為接收者。物件間的聯絡,只能通過訊息來進行。物件在接收到訊息時才被啟用。

訊息具有三個性質:

(1)同一物件可接收不同形式的多個訊息,產生不同的響應;

(2)相同形式的訊息可以傳送給不同物件,所做出的響應可以是截然不同的;

(3)訊息的傳送可以不考慮具體的接收者,物件可以響應訊息,也可以對訊息不予理會,對訊息的響應並不是必需的。

方法

在面向物件程式設計中,要求某一物件完成某一操作時,就向物件傳送一個相應的訊息,當物件接收到發向它的訊息時,就呼叫有關的方法,執行相應的操作。方法就是物件所能執行的操作。方法包括介面(介面就是訊息的模式,它給出了方法的呼叫協議)和方法體(方法體則是實現這種操作的一系列計算步驟,也就是一段程式)兩部分;訊息和方法的關係是:物件根據接收到的訊息,呼叫相應的方法;反過來,有了方法,物件才能響應相應的訊息。

面向物件系統特性:抽象性封裝性繼承性多型性

抽象性

程式是由一組物件組成的。程式設計師可以將一組物件的共同特徵進一步抽象出來,進而形成“類”的概念。抽象是一種從一般觀點看待事物的方法,它要求程式設計師集中於事物的本質特徵,而不是具體細節或具體實現。

封裝性

資料封裝就是指一組資料和與這組資料有關的操作集合組裝在一起,形成一個能動的實體,也就是物件。資料封裝就是給資料提供了與外界聯絡的標準介面,無論是誰,只有通過這些介面並使用規範的方式,才能訪問這些資料。

繼承性

從已有的物件型別出發建立一種新的物件型別,使它繼承原物件的特點和功能,這種思想是面向物件設計方法的主要貢獻。繼承是對許多問題中分層特性的一種自然描述,因而也是類的具體化和實現重用的一種手段,它所表達的就是一種不同類之間的繼承關係。它使得某類物件可以繼承另外一類物件的特徵和能力。繼承所具有的作用有兩個方面:一方面可以減少冗餘程式碼,另一方面可以通過協調性減少介面和介面

從繼承源上劃分繼承可以分為單繼承(子類對單個直接父類的繼承稱為單一繼承)和多繼承(子類多於一個直接父類的繼承稱為多重繼承)。父類也稱為基類或超類,子類也稱為派生類。

從繼承內容上可以分為取代繼承包含繼承受限繼承特化繼承

多型性

不同的物件接收到相同的訊息時產生完全不同的行為的現象稱為多型性。C++語言支援兩種多型性,即編譯時的多型性(通過過載函式實現)和執行時的多型性(通過虛擬函式實現)。使用多型性可以大大提高人們解決複雜問題的能力。

面向物件程式設計能支援的軟體開發策略有:

(1)編寫可重用程式碼;

(2)編寫可維護程式碼;

(3)共享程式碼;

(4)精減已有程式碼;

面向物件的軟體開發:

1、面向物件分析(object oriented analysis , OOA)

2、面向物件設計(object oriented design , OOD)

3、面向物件程式設計(object oriented programming , OOP)

4、面向物件測試(object oriented test , OOT)

5、面向物件維護(object oriented soft maintenance , OOSM)

相關推薦

C++學習 C++面向物件程式設計方法概述

(1)面向過程與面向物件的比較 面向過程程式設計方法(C語言) 分析出要解決所需要的步驟,然後用函式把各步驟逐個實現,執行時依次呼叫各個函式即可。 程式 = 演算法 + 資料結構 面向物件程式設計方法(C++語言) 把問題分解成各個物件,描述各個物件的

Golang系列面向物件程式設計

面向物件程式設計:       把一組資料結構和處理它們的方法組成物件(object),把相同行為的物件歸納為類(class),通過類的封裝(encapsulation)隱藏內部細節,通過繼承(inheritance)實現類的特化(specialization)[方法的重寫,

C++學習之Visual Studio寫system語句 生成可執行文件

屬性 默認 右鍵 同學 文件夾 開發 源代碼 學習 http system命令 1、首先先介紹一些system命令 windows+tab //切換窗口 windows+R //調出命令窗口 命令: 輸入 calc 打開計算機 輸入 cmd 打開命令窗口 輸入 msp

C++語言學習——C++對C語言基礎語法的擴展

情況下 ces qtcreator 缺少 命令 ast 過多 匯編 lse C++語言學習(二)——C++對C語言基礎語法的擴展 C++是基於C語言擴展發展而來的面向對象的程序設計語言,本文將主要討論C++語言基於C語言擴展的方面。 一、實用性增強 C語言中變量的定義必須在

cpp學習C語言復習

char 兩個 手寫 匯編知識 c基礎 什麽 ada 發現 png 接下來復習一下C語言部分,畢竟C++與C語言本自同根生,並且在匯編層面C與C++可以說完全相同。假如你沒有C語言基礎的話,可以先暫停去學習一下C語言,C語言可以看“C語言之父”譚浩強的《C語言程序設計》或者

C++學習

點選開啟連結 CA* pa = &c;這句話是父類指標指向子類物件,呼叫pa->f1()時,因為父類中的f1()是虛擬函式,所以將發生動態繫結,呼叫子類CB中的f1()函式,先輸出CB::f1() 在CB類的f1()函式中,呼叫非虛擬函式f2(),但因為其父類C

Write a Shell in C 學習

上一次簡單的談了怎樣從命令列讀取輸入並對輸入進行初步的處理。下一步就是所謂執行命令了。而命令大概又分成兩個部分,一是內建命令,二是執行外部程式。這篇主要講如喝執行內建命令。 我實現的內建命令有,cd,info,pwd,exit,search。值得一提的是,我把執行外部程式的

php7新特性面向物件部分

1)、PHP 7 支援new class 來例項化一個匿名類這可以用來替代一些"用後即焚"的完整類定義。 2)、Closure::call():將一個閉包函式動態繫結到一個新的物件例項並呼叫執行該函式 3)、use:可以使用一個 use 從同一個 namespace 中匯入類、函

Linux C/C++教程-- C++對C的拓展

  目錄   一、bool型別關鍵字 二、引用 三、輸入輸出 四、函式引數 五、string類 六、左值 一、bool型別關鍵字 C++在C語言的基礎型別上新增了布林型別(bool),bool可取的值有兩個:true、false,佔

Java語言學習面向物件進階

    上篇部落格中我們初步認識了Java面向物件程式設計,下面進一步學習下。     面向物件程式設計三大特性:封裝、繼承、多型。     封裝隱藏了類的內部實現機制,對外界而言它的內部細節是隱藏的,暴露給外界的只是它的訪問方法。

java基礎-初級面向物件與類】

目錄   2、面向物件與類 2.1  面向物件思想 2.2  類與物件 2.3  成員和區域性變數 2.4  匿名物件 2.5  類的訪問許可權修飾符 2.6  static關鍵字-靜態域、靜態

Kotlin 面向物件

文章目錄 一、面向物件的概念 二、抽象類與介面 1、介面 2、抽象類 3、抽象類和介面的共性 3、抽象類和介面的區別 三、類的繼承與介面的實現

python快速學習系列6面向物件程式設計OOP

一、面向物件程式設計: 1.比設計模式更重要的是設計原則: 1)面向物件設計的目標: ·可擴充套件:新特性很容易新增到現有系統中,基本不影響系統原有功能 ·可修改:當修改某一部分程式碼時,不會影響到其他不相關的部分 ·可替代:用具有相同介面的程式碼去替換系統中某一部分程式碼時,系統不受影

C++ Template :初步超程式設計

前言   在上一篇部落格C++ Template (一):模板基礎中,簡單介紹了模板的定義,例項化,特化以及引數包的使用,在一些簡單的場景中,已經可以通過這些知識去大展手腳了。但是想真正發揮Templa

Java課堂筆記面向物件

        幾乎每一本介紹Java語言的書中都會提到“面向物件”的這個概念,然而博主初學Java時看到這方面的內容一般都是草草地看一看,甚至是直接略過。原因很簡單:考試基本不考,而且初學階段寫程式碼也很少用上。但事實上面向物件時Java中一個

設計模式面向物件及其特性分析

# 面向物件 > 根據大綱,首先我們來學習一種程式碼設計與編寫的風格,即面向物件。 ## 面向物件程式設計和麵向物件程式語言 - 面向物件程式設計是一種程式設計正規化,通俗來說,就是將 **程式碼的組織單元改成類和物件**,並將 **封裝、繼承、抽象、多型** 作為程式碼設計和編寫的基石。 -

Struts2學習運行Action中方法的三種方式

tracking 利用 content con return -m i++ var itl 1.運行execute()方法 一般的能夠直接在action中書寫execute,調用action時會自己主動運行此方法 2.配置method方法 在s

自己用的C#基礎學習筆記——C#面向物件2

1 第十一天 1.1 string stringbuffer stringbulider 1.三者在執行速度方面的比較:StringBuilder >  StringBuffer  >  String 2.String <(StringBuffer,Str

設計模式學習“觀察者模式” C#

original pan 學習筆記 pri 接口 program date contain 兩個 《深入淺出設計模式》學習筆記第二章 需求: 開發一套氣象監測應用,如圖: 氣象站,目前有三種裝置,溫度、濕度和氣壓感應裝置。 WeatherData對象追蹤氣象站的數據,並更

python面向物件學習基本語法

目錄 1. dir內建函式 2. 定義簡單的類(只包含方法) 2.1 定義只包含方法的類 2.2 建立物件 2.3 編寫第一個面向物件程式 3. 方法中的self引數 3.1 案例改造 —— 給物件新增屬性 3.2 使用 self 在