C++面向對象編程-000-面向對象

一、面向對象概述

面向對象(Object Oriented ,OO)它是一種設計思想,現在這種思想已經不單應用在軟件設計上,數據庫設計、計算機輔助設計(CAD)、網絡結構設計、人工智能算法設計等領域都開始應用這種思想。

針對面向對象思想應用的不同領域,面向對象又可以分為面向對象分析(Object Oriented Analysis,OOA)、面向對象設計(Object Oriented Design,OOD)、面向對象編程(Object Oriented Programming,OOP)、面向對象測試(Object Oriented Test,OOT)和麵向對象維護(Object Oriented Soft Maintenance,OOSM)。

C++面向對象編程-000-面向對象

面向對象有3大特點,即封裝、繼承和多態。

(1)封裝

封裝有兩個作用,一個是將不同的小對象封裝成一個大對象,另一個是把一部分內部屬性和功能對外界屏蔽。例如,一輛汽車是一個大對象,它由發動機、底盤、車身和輪子等這些小對象組成。在設計時可以先對這些小對象進行設計,然後小對象之間通過互相聯繫確定各自大小等方面的屬性,最後就可以安裝成一輛汽車。

(2)繼承

繼承是和類密切相關的概念。繼承性是子類自動共享父類數據結構和方法的機制,這是類之間的一種關係。在定義和實現一個類的時候,可以在一個已經存在的類的基礎之上進行,把這個已經存在的類所定義的內容作為自己的內容,並加入若干新的內容。

在類層次中,子類只繼承一個父類的數據結構和方法,稱為單重繼承,子類繼承了多個父類的數據結構和方法,則稱為多重繼承。

在軟件開發中,類的繼承性使所建立的軟件具有開放性、可擴充性,這是信息組織與分類的行之有效的方法,它簡化了對象、類的創建工作量,增加了代碼的可重用性。

繼承性是面向對象程序設計語言不同於其他語言的最重要的特點,是其他語言所沒有的。採用繼承性,使公共的特性能夠共享,提高了軟件的重用性。

C++面向對象編程-000-面向對象

(3)多態

多態性是指相同的行為可作用於多種類型的對象上並獲得不同的結果。不同的對象,收到同一消息可以產生不同的結果,這種現象稱為多態性。多態性允許每個對象以適合自身的方式去響應共同的消息。

二、面向對象與面向過程編程

1.面向過程編程

過程編程的主要思想是先做什麼後做什麼,在一個過程中實現特定功能。一個大的實現過程還可以分成各個模塊,各個模塊可以按功能進行劃分,然後組合在一起實現特定功能。在過程編程中,程序模塊可以是一個函數,也可以是整個源文件。

過程編程主要以數據為中心,傳統的面向過程的功能分解法屬於結構化分析方法。分析者將對象系統的現實世界看作一個大的處理系統,然後將其分解為若干個子處理過程,解決系統的總體控制問題。在分析過程中,用數據描述各子處理過程之間的聯繫,整理各個子處理過程的執行順序。

面向過程編程一般流程如下:

現實世界->面向過程建模(流程圖、變量、函數)->面向過程語言->執行求解。

過程編程的穩定性、可修改性和可重用性都比較差。

C++面向對象編程-000-面向對象

(1)軟件重用性差

重用性是指同一事物不經修改或稍加修改就可多次修改使用的性質。軟件重用性是軟件工程追求的目標之一。處理不同的過程都有不同的結構,當過程改變時,結構也需要改變,前期開發的代碼無法得到充分的再利用。

(2)軟件可維護性差

軟件工程強調軟件的可維護性,強調文檔資料的重要性,規定最終的軟件產品應該由完整、一致的配置成分組成。在軟件開發過程,始終強調軟件的可讀性、可修改性和可測試性是軟件的重要的質量指標。面向過程編程由於軟件的重用性差,造成維護時其費用和成本也很高,而且大量修改的代碼存在著許多未知的漏洞。

(3)開發出的軟件不能滿足用戶需要

大型軟件系統一般涉及各種不同領域的知識,面向過程編程往往描述軟件的各個最低層的,針對不同領域設計不同的結構及處理機制,當用戶需求發送變化時,就要修改最低層的結構。當處理用戶需求變化較大時,過程編程將無法修改,可能導致軟件的重新開發。

2.面向對象編程

面向過程編程有費解的數據結構、複雜的組合邏輯、詳細的過程和數據之間的關係、高深的算法,面向過程開發的程序可以描述成算法加數據結構。面向過程開發是分析過程與數據之間的邊界在哪裡,進而解決問題。面向對象則是從另一種角度思考,將編程思維設計成符合人的思維邏輯。

面向對象程序設計者的任務包括兩個方面:一是設計所需要的各種類和對象,即決定把哪些數據和操作封裝在一起;二是考慮怎樣向有關對象發送消息,以完成所需的任務。這時它如同一個總調度,不斷地向各個對象發出消息,讓這些對象活動起來(或者說激活這些對象),完成自己職責範圍內的工作。

各個對象的操作完成了,整體任務也就完成了。顯然,對一個大型任務來說,面向對象程序設計方法是十分有效的,它能大大降低程序設計人員的工作難度,減少出錯機會。

C++面向對象編程-000-面向對象

面向對象開發的程序可以描述成“對象+消息”。面向對象編程一般流程如下:

現實世界->面向對象建模(類圖、對象、方法)->面嚮對象語言->執行求解。

3.面向對象的特點

面向對象技術充分體現了分解、抽象、模塊化、信息隱藏等思想,可有效提高軟件生產率,縮短軟件開發時間,提高軟件質量,是控制複雜度的有效途徑。

面向對象不僅適合普通人員,也適合經理人員。降低維護開銷的技術可以釋放管理者的資源,將其投入到待處理的應用中。在經理們看來,面向對象不是純技術的,它即能給企業的組織也能給經理的工作帶來變化。

當一個企業採納了面向對象,其組織將發生變化。類的重用需要類庫和類庫管理人員,每個程序員都要加入到兩個組中的一個:一個是設計和編寫新類組,另一個是應用類創建新應用程序組。面向對象不太強調編程,需求分析相對地將變得更加重要。

面向對象編程主要有代碼容易修改、代碼複用性、滿足用戶需求3個特點。

(1)代碼容易修改

面向對象編程的代碼都是封裝在類裡面,如果類的某個屬性發生變化,只需要修改類中成員函數的實現即可,其他的程序函數不發生改變。如果類中屬性變化較大,則使用繼承的方法重新派生新類。

(2)代碼複用性高

面向對象編程的類都是具有特定功能的封裝,需要使用類中特定的功能,只需要聲明該類並調用其成員函數即可。如果需要的功能在不同類,還可以進行多重繼承,將不同類的成員封裝到一個類中。功能的實現可以像積木一樣隨意組合,大大提高了代碼的複用性。

(3)滿足用戶需求

由於面向對象編程的代碼複用性高,用戶的要求發生變化時,只需要修改發生變化的類。如果用戶的要求變化較大時,就對類進行重新組裝,將變化大的類重新開發,功能沒有發生變化的類可以直接拿來使用。面向對象編程可以及時地響應用戶需求的變化。


分享到:


相關文章: