我對面向對象的理解


談談你對面向對象的理解

  • 面向對象編程,即OOP,是一種編程范式,滿足面向對象編程的語言,一般會提供類、封裝、繼承等語法和概念來輔助我們進行面向對象編程。

  • 面向對象是基於萬物皆對象這個哲學觀點. 所謂的面向對象就是將我們的程序模塊化,對象化,把具體事物的特性屬性和通過這些屬性來實現一些動作的具體方法放到一個類里面

  • 面向對象的三大特征 繼承,封裝,多態

    一 繼承

    • 繼承概念:一個類繼承另一個類,則稱繼承的類為子類,被繼承的類為父類。
    • 目的:實現代碼的復用。
    • 理解:子類與父類的關系並不是日常生活中的父子關系,子類與父類而是一種特殊化與一般化的關系,是is-a的關系,子類是父類更加詳細的分類。如 class dog 繼承於 animal,就可以理解為dog is a animal.注意設計繼承的時候.
    • 結果:繼承后子類自動擁有了父類的屬性和方法,子類可以寫自己特有的屬性和方法,目的是實現功能的擴展,子類也可以復寫父類的方法即方法的重寫。

    
 二 封裝

    • 概念:封裝也稱為信息隱藏,是指利用抽象數據類型將數據和基於數據的操作封裝在一起,使其構成一個不可分割的獨立實體,數據被保護在抽象數據類型的內部,盡可能地隱藏內部的細節,只
保留一些對外接口使之與外部發生聯系。系統的其他部分只有通過包裹在數據外面的被授權的操作來與這個抽象數據類型交流與交互。也就是說,用戶無需知道對象內部方法的實現細節,但可以根據對象提供的外部接口(對象名和參數)訪問該對象。

    • 好處:(1)實現了專業的分工。將能實現某一特定功能的代碼封裝成一個獨立的實體后,各程序員可以在需要的時候調用,從而實現了專業的分工。(2)隱藏信 息,實現細節。通過控制訪問權限可以將可以將不想讓客戶端程序員看到的信息隱藏起來,如某客戶的銀行的密碼需要保密,只能對該客戶開發權限。

    三、多態

    • 概念:相同的事物,調用其相同的方法,參數也相同時,但表現的行為卻不同。

    • 理解:子類以父類的身份出現,但做事情時還是以自己的方法實現。子類以父類的身份出現需要向上轉型(upcast),其中向上轉型是由JVM自動實現的, 是安全的,但向下轉型(downcast)是不安全的,需要強制轉換。子類以父類的身份出現時自己特有的屬性和方法將不能使用。
  • “面向過程”和“面向對象”的區別

    • 面向過程就是分析出解決問題所需要的步驟,然后用函數把這些步驟一步一步實現,使用的時候一個一個依次調用就可以了;面向對象是把構成問題事務分解成各個對象,建立對象的目的不是為了完成一個步驟,而是為了描敘某個事物在整個解決問題的步驟中的行為。 
    • 可以拿生活中的實例來理解面向過程與面向對象,例如五子棋,面向過程的設計思路就是首先分析問題的步驟:
      • 1、開始游戲,2、黑子先走,3、繪制畫面,4、判斷輸贏,5、輪到白子,6、繪制畫面,7、判斷輸贏,8、返回步驟 2,9、輸出最后結果。把上面每個步驟用不同的方法來實現。
      • 如果是面向對象的設計思想來解決問題。面向對象的設計則是從另外的思路來 解決問題。整個五子棋可以分為1、黑白雙方,這兩方的行為是一模一樣的,2、棋盤系統,負責繪制畫面,3、規則系統,負責判定諸如犯規、輸贏等。第一類對 象(玩家對象)負責接受用戶輸入,並告知第二類對象(棋盤對象)棋子布局的變化,棋盤對象接收到了棋子的變化就要負責在屏幕上面顯示出這種變化,同時利用 第三類對象(規則系統)來對棋局進行判定。

對面向對象的理解2

1、什么是面向對象語言

面向對象語言(Object-Oriented Language)是一類以對象作為基本程序結構單位的程序設計語言,指用於描述的設計是以對象為核心,而對象是程序運行時刻的基本成分。

面向對象語言很多,如一直高居世界編程語言排行榜的Java、C#、C++、Object-C、PHP等等。

2、面向對象的理解

相信很多程序猿,特別是新手,都對面向對象都沒有去理解過,但都用過而且可能用的還很熟。

最近面試一位剛入行不久的新手,也有半年多的工作經驗了,也做過項目,其實也算不上新手,問其面向對象語言的三個基本特征之一,其回答竟然是“開源”,真是讓我大吃一驚。

或許懶、或許感覺這些抽象的文字難以學習理解、或許認為工作中用不到,但我想這些最基本知識的還是要知道的,不要工作3年,積累下的經驗可能3天都不到。

以下是個人對面向對象的理解:

什么是對象? 引用我的一位大學老師的說:一切都是類、一切都是對象

現在大部分的面向對象語言是基於類的。

他的算是啟蒙老師吧,很風趣的一位老師,在學校代課教我們時,最經常掛在嘴邊的就是這句話(只要他的課這句話最少要聽到10次以上)。以至於現在想到他,腦海里第一反應就是這句話。

除了紅字以上是我的廢話,可以忽略。

2.1、對象

一切都是對象

舉例:

將一棟房子 比作一個對象 【房子:對象】。 從圖上也可以看到這是一種新類別的房子【房子:類-Class】  如圖

這尼瑪就是對象,那對象應該包含什么呢,相信只要學過,面向對象的肯定都知道面向對象的三項基本特征:封裝、繼承、多態。

2.2、對象的基本特征一:封裝

封裝  將各個獨立功能設計成一個個獨立的單元,形成一個有規划設計的整體,減小耦合,提高內聚,避免牽一發而動全身,方便對程序的修改。

還是用房子來解釋,上面已經有房子的基本類型了,大概樣子就是那個熊樣。

舉例:

房子空間很大,但是如果男男女女有十幾人住,而且就一間屋子的話,很不方便,如果吃喝拉撒一個屋,那就成難民營,更何況晚上燈一黑,立刻就亂套了,你懂得。

這樣,就要想法解決:

工人們出動了,把房子折騰折騰給分成樓上樓下兩層,並說明了,一樓吃喝玩樂、二樓休息; 樓上樓下工人們又分別給隔離出幾個房間,就把房子這樣改造好了,然后男男女女們過來了,大家就可以各自的房間,做愛做的事,而且不會影響到其他了。

這樣一個簡單的封裝就完成 【房子:類-class】是對 【房子兩層:部分類-partialclass】的封裝  ;【房子兩層:部分類-partialclass】是對【房間:函數/方法-function】的封裝。

2.3、對象的基本特征二:繼承

 

繼承 發生在兩個對象之間,繼承對象可以肆意的使用被繼承對象的一些屬性、方法&函數等;使代碼重用,減少編碼量,間接減少維護成本。
仍然是房子。
工人們已經給分好樓、做好房間了。這時有個人覺得房子應該有個緊急避難所。好嗎,尼瑪房子都折騰的差不多了,尼瑪告訴工人要緊急避難所,工人說這不好搞哇。可以這人有錢,任性,
發話了,要搞必須搞,不好搞也要搞,而且狠狠的搞。工人們就為難了,難道再去給蓋一棟有避難所的房子?大家集思廣益最終,房子其他都還用着,再給挖個地下室。於是新房子誕生了。
一個簡單的繼承就出現了 【房子:基類-baseclass】被【新房子:擴展類-ExtensionClass】繼承。

2.4、對象的基本特征三:多態
多態 不同的場合做出不同相應,有着不同的特點,可以說是封裝的一個實現。
房子已經成型,要對房間進行裝修了,工人想法很簡單都按照一種樣式來,簡單方便快捷。但是住房的男男女女們有意見,這就是尼瑪客戶,各種千奇百怪的想法,有要在承重牆
上開扇窗戶的,有要在衛生間裝攝像頭的、要在廚房里裝空調。工人們對能實現就開始開工了,對房子的窗戶、地板、牆、樓梯等進行裝修。這樣裝修完房子內部就豐富起來了。如圖
“一種多態的展現”就出來了:【房子:類-class】 通過 【窗戶、地板、牆、樓梯等:屬性-Property】體現多態

2.5、面向對象

最后的總結,前面其實是對象的說明。現在來說一下面向對象,像開篇提到的一切都是對象。那面向對象有是怎么回事呢難道說是面向一切,真這么理解也不為過。

面向對象是一種對現實世界理解和抽象的方法,對做程序來說,就是讓程序人員,用一種思維更好的看待萬物,在編程中的本質。 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM