物件導向的語言
# 在大一上學期,我們學習了C語言,它是一門非常經典,非常基礎的語言,所有計算機學科的同學們估計都沒有逃脫它的魔爪,而C++從名字上就非常清楚了,它是C的一種衍生,它幾乎包括C的所有內容,但是他們的設計思路卻大不相同,C是一門面向過程的程序,而C++是面向對象的程序,下面我們來解釋一下這兩者的差異。
以過程為導向:分析出解決問題所需的步驟,然後用函數把這些步驟一步一步實現,使用的時候一個一個依序呼叫就可以了。
物件導向:是把構成問題事務分解成各個對象,建立物件的目的不是為了完成一個步驟,而是為了描敘某個事物在整個解決問題的步驟中的行為。
例如五子棋,過程導向的設計想法就是先分析問題的步驟:1、開始遊戲,2、黑子先走,3、繪製畫面,4、判斷輸贏,5、輪到白子,6、繪製畫面, 7.判斷輸贏,8、返回步驟2,9、輸出最後結果。把上面每個步驟用分別的函數來實現,問題就解決了。
而物件導向的設計則是從另外的思路來解決問題。整個五子棋可以分為 1、黑白雙方,這兩方的行為是一模一樣的,2、棋盤系統,負責繪製畫面,3、規則系統,負責判定諸如犯規、輸贏等。第一類物件(玩家物件)負責接受使用者輸入,並告知第二類物件(棋盤物件)棋子佈局的變化,棋盤物件接收到了棋子的i變化就要負責在螢幕上面顯示出這種變化,同時利用第三類對象(規則系統)來判棋局。
可以明顯看出,物件導向是以功能來劃分問題,而不是步驟。同樣是繪製棋局,這樣的行為在面向過程的設計中分散在了總多步驟中,很可能出現不同的繪製版本,因為通常設計人員會考慮到實際情況進行各種各樣的簡化。而物件導向的設計中,繪圖只可能在棋盤物件中出現,從而確保了繪圖的統一。
功能上的統一保證了物件導向設計的可擴展性。例如我要加入悔棋的功能,如果要改動面向過程的設計,那麼從輸入到判斷到顯示這一連串的步驟都要改動,甚至步驟之間的循序都要進行大規模調整。如果是物件導向的話,只用改動棋盤物件就行了,棋盤系統保存了黑白雙方的棋盤,簡單回溯就可以了,而顯示和規則判斷則不用顧及,同時整個對物件功能的呼叫順序都沒有變化,改動只是局部的。
再例如我要把這個五子棋遊戲改為圍棋遊戲,如果你是面向過程設計,那麼五子棋的規則就分佈在了你的程式的每一個角落,要改動還不如重寫。但是如果你當初就是物件導向的設計,那麼你只用改動規則物件就可以了,五子棋和圍棋的差別不就是規則嗎? (當然棋盤大小好像也不一樣,但是你會覺得這是一個難題嗎?直接在棋盤對像中進行一番小改動就可以了。)而下棋的大致步驟從面向對象的角度來看沒有任何變化。
當然,要達到改動只是局部的需要設計的人有足夠的經驗,使用對像不能保證你的程序就是面向對象,初學者或者很蹩腳的程序員很可能以面向對象之虛而行面向過程之實,這樣設計出來的所謂物件導向的程式很難有良好的可移植性和可擴展性。
(這是在百度上找的答案!不是自己寫的,謝謝回答問題的大佬!!!)
1.對象
科學的解釋:物件導向方法中的對象,是系統中用來描述客觀事實的一個實體,它是用來構成系統的一個基本單位。物件由一組屬性和一組行為構成。
自我解釋:就比如說「人「是一個非常大的概念,但是具體到你自己本人,你就是那個對象,有實體有具體意義的那個,就是對象,看完了對類的表示,希望你們好懂一些,畢竟語文不好。 。 。
2.類
把眾多的事物歸納,劃分成一些類,分類所依據的原則是抽象,即忽略事物的非本質特性,只注意那些與當前目標有關的本質特性,從而找出事物的共性,把具有共同性質的事物分成一類,得出一個抽象的概念,例如,石頭,樹木,汽車,房子等。
3.封裝
封裝是物件導向方法的重要原則,就是把物件的屬性和服務結合成一個獨立的系統單位,並且盡可能隱藏物件的內部細節。
4.繼承
繼承是物件導向技術能夠提高軟體開發效率的重要原因之一,其定義為:特殊類別的物件擁有其一般類別的全部屬性與服務,並稱為特殊類別對一般類別的繼承。
舉個例子,我們認識了輪船的特徵之後,再考慮客輪時,因為知道客輪也是輪船,於是可以認為它具有輪船的一切特徵,從而只需把精力集中於客輪獨有的特徵上。
5.多態性
多態性是指在一般類別中定義的屬性或行為,被特殊類別繼承後,可以具有不同的數據,類型或則表現出不同的行為。 (這點在之後結合具體的例子講解啦!)
相關建議:
#以上是C++總結:物件導向的基本概念的詳細內容。更多資訊請關注PHP中文網其他相關文章!