日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

面向对象理论概述

發(fā)布時間:2023/12/19 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 面向对象理论概述 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

2019獨角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>

轉(zhuǎn)載自:http://my.oschina.net/brucelee80/blog

面向?qū)ο笈c面向過程的區(qū)別

? ? 面向過程就是分析出解決問題所需要的步驟,然后用函數(shù)把這些步驟一步一步實現(xiàn),使用的時候一個一個依次調(diào)用就可以了。面向?qū)ο笫前褬?gòu)成問題事務(wù)分解成各個對象,建立對象的目的不是為了完成一個步驟,而是為了描敘某個事物在整個解決問題的步驟中的行為。


? ? ?例如五子棋,面向過程的設(shè)計思路就是首先分析問題的步驟:

1、開始游戲,

2、黑子先走,

3、繪制畫面,

4、判斷輸贏,

5、輪到白子,

6、繪制畫面,

7、判斷輸贏,

8、返回步驟2,

9、輸出最后結(jié)果。

把上面每個步驟用分別的函數(shù)來實現(xiàn),問題就解決了。


? ? ?而面向?qū)ο蟮脑O(shè)計則是從另外的思路來解決問題。整個五子棋可以分為:

1、黑白雙方,這兩方的行為是一模一樣的,

2、棋盤系統(tǒng),負責(zé)繪制畫面,

3、規(guī)則系統(tǒng),負責(zé)判定諸如犯規(guī)、輸贏等。

?

? ? 第一類對象(玩家對象)負責(zé)接受用戶輸入,并告知第二類對象(棋盤對象)棋子布局的變化,棋盤對象接收到了棋子的變化就要負責(zé)在屏幕上面顯示出這種變化,同時利用第三類對象(規(guī)則系統(tǒng))來對棋局進行判定。

? ? 可以明顯地看出,面向?qū)ο笫且怨δ軄韯澐謫栴},而不是步驟。同樣是繪制棋局,這樣的行為在面向過程的設(shè)計中分散在了總多步驟中,很可能出現(xiàn)不同的繪制版本,因為通常設(shè)計人員會考慮到實際情況進行各種各樣的簡化。而面向?qū)ο蟮脑O(shè)計中,繪圖只可能在棋盤對象中出現(xiàn),從而保證了繪圖的統(tǒng)一。

? ? 功能上的統(tǒng)一保證了面向?qū)ο笤O(shè)計的可擴展性。比如我要加入悔棋的功能,如果要改動面向過程的設(shè)計,那么從輸入到判斷到顯示這一連串的步驟都要改動,甚至步驟之間的循序都要進行大規(guī)模調(diào)整。如果是面向?qū)ο蟮脑?#xff0c;只用改動棋盤對象就行了,棋盤系統(tǒng)保存了黑白雙方的棋譜,簡單回溯就可以了,而顯示和規(guī)則判斷則不用顧及,同時整個對對象功能的調(diào)用順序都沒有變化,改動只是局部的。

? ? 到這里就可以很明顯的看出面向?qū)ο蠛兔嫦蜻^程的區(qū)別所在了。

?

基本概念

抽象、封裝、對象、類

? ? 面向?qū)ο蟮乃枷雭斫鉀Q問題,首先要做的是分析該問題包括哪些對象。問題中的實體和概念都可以抽象為對象來考慮。如上面例子中的黑白雙方、棋盤系統(tǒng)和規(guī)則系統(tǒng)等。

? ? 對象具有屬性、狀態(tài)以及行為,狀態(tài)是屬性的值,行為是屬性的邏輯操作。對象都屬于某個類,而每個對象都是某個類的實例。一個對象就是封裝了數(shù)據(jù)及操作這些數(shù)據(jù)的邏輯代碼的實例。

? ? 對具有相同屬性和行為的一組對象進行抽象,便成了類,它是對象的模板,而對象是類的實例化,每個對象都對類的屬性賦予不同的狀態(tài),對象具有唯一性。

?

隱藏與訪問控制

? ? 封裝并不只是簡單的屬性和行為的集結(jié),更重要的是選擇性隱藏與訪問控制。隱藏和控制那些不想提供對外訪問的屬性和行為,提供出去的便是這個對象的服務(wù)與功能。對使用者而言,隱藏了對象具體的實現(xiàn),又提供了對象可控的行為。訪問控制提高了安全性,也使協(xié)作開發(fā)有章可循。

?

組合、繼承

? ? 現(xiàn)實世界中,類與類之間不是孤立的,它們是有聯(lián)系的。

? ? 組合是指一個類擁有另外一個類(包含關(guān)系),將一個類當(dāng)做它自己的屬性。比如班級類,就可以組合學(xué)生、老師這兩個類,表示班級由學(xué)生和老師組成。

? ? 繼承是指兩個類具有父子關(guān)系,父類也稱為基類或超類,子類也稱為導(dǎo)出類、擴展類或派生類。比如動物類是父類,而飛禽類和走獸類則屬于子類,表示分禽類和走獸類都是動物類。凡是父類能用在的地方,都可以用子類來替代,因為子類就是父類,父類是子類的再抽象。比如說動物是生物,當(dāng)然可以替換成飛禽是生物。

? ? 父類的屬性和行為,子類可以原封不動的繼承下來,也可以重寫,以實現(xiàn)每個子類之間各自的新特性。

? ? 對象分析時,組合和繼承到底選哪一個,是抽象分析和封裝時需要考慮的,他們各有優(yōu)缺點。組合和繼承提高了對象的可復(fù)用性。

?

接口、抽象類

? ? 接口規(guī)范了服務(wù)提供的約束。比如電腦USB插槽就約束了USB的各種規(guī)范,各種廠商生產(chǎn)的帶有USB外接功能的數(shù)據(jù)線,都必須遵循這個接口約束規(guī)范。接口不可實例化,只有實現(xiàn)了接口的類才可被實例化成對象。

? ? 抽象類則更像是一個半成品,它只實現(xiàn)了部分功能,而其他功能必須是它的子類去完成。比如公司下發(fā)一個申報流程,必須先讓部門經(jīng)理簽字,再讓部門HR簽字,這個流程是實現(xiàn)了的,至于每個部門的經(jīng)理和HR則要每個部門具體實施時才能確定。所以,抽象類(公司申報流程)也不能直接實例化(因為公司申報流程中根本沒有具體的審批人),只能是它的子類(部門申報流程)才能被實例化對象并可用。

?

轉(zhuǎn)型

? ? 當(dāng)類之間有繼承關(guān)系時,我們就說子類是父類,這個過程其實就是將子類向上轉(zhuǎn)型為父類,從一個專有類轉(zhuǎn)換成一個通用類,這總是很安全的。相反,如果將父類強制轉(zhuǎn)換為子類,稱之為向下轉(zhuǎn)型,向下轉(zhuǎn)型需要強制轉(zhuǎn)型,具有不安全性,因為通用類無法訪問專有類的專有行為。比如貓類是動物類的子類,貓類可以抓老鼠,但是向下轉(zhuǎn)型成動物可以抓老鼠,顯然就說不通;反之,如果說貓類能行走,那么向上轉(zhuǎn)型為動物類能移動,顯然是安全的。

?

多態(tài)

? ? 多態(tài)也叫動態(tài)綁定,或后期綁定。綁定是指方法調(diào)用和方法主體關(guān)聯(lián)起來。前期綁定是指在編譯時就可確定這種關(guān)聯(lián),而后期綁定必須在程序處于運行態(tài)時才能確定。

? ? 在Java中,方法調(diào)用的默認方式是前期綁定(由編譯器和連接程序?qū)崿F(xiàn)),當(dāng)方法出現(xiàn)方法的重載和繼承時行為的重寫時,那么編譯期間就無法進行綁定,這就需要動態(tài)綁定。動態(tài)綁定使得同樣的一個方法,可以有多種實現(xiàn)方式。

? ? 比如動物類可以進食,當(dāng)進食的是水時,它就和進食的是固體所表現(xiàn)的行為就不一樣了,這種進食行為是動物類行為的重載,是多態(tài)的表現(xiàn)。又比如動物類有移動的行為,而子類飛禽類的移動是飛行,子類走獸類的移動是地面上移動,此時,對于動物類的移動行為,就是多態(tài),當(dāng)動物是飛禽,移動的行為就變成了飛行的行為,如果是走獸,這個行為又變成了地面上移動,而這一切,只有在運行期才知道,因為只有真正運行起來,程序才知道,這個動物到底是飛禽還是走獸。

? ? 多態(tài)可以提供系統(tǒng)間的松耦合性。


轉(zhuǎn)載自:http://my.oschina.net/brucelee80/blog

轉(zhuǎn)載于:https://my.oschina.net/brucelee80/blog/284245

總結(jié)

以上是生活随笔為你收集整理的面向对象理论概述的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。