2.1 面向?qū)ο缶幊?/h1>
面向?qū)ο缶幊蹋∣bject-Oriented Programming谍肤,OOP)在Java中處于核心地位琅关。
兩種范式
所有計(jì)算機(jī)程序都包含2個(gè)元素:代碼煮岁、數(shù)據(jù)
面向過(guò)程模型:將程序描述為一系列步驟,并用代碼描述每一個(gè)步驟將如何作用于數(shù)據(jù)涣易。
面向?qū)ο缶幊蹋簩?shù)據(jù)設(shè)計(jì)為一系列對(duì)象画机,并為這些對(duì)象精心設(shè)計(jì)接口,使用這些接口來(lái)進(jìn)行組織代碼新症。
抽象
使用抽象管理復(fù)雜性:非面向?qū)ο蟮木幊谭绞讲绞希鶎?duì)象分解為不同的部分進(jìn)行處理;而面向?qū)ο蟮木幊谭绞酵降瑒t是把對(duì)象作為一個(gè)整理戳护,去使用這個(gè)對(duì)象。
層次化分類(lèi):如一臺(tái)車(chē)瀑焦,下面又可以分為駕駛系統(tǒng)腌且、制動(dòng)系統(tǒng)等,每層又可以繼續(xù)細(xì)分榛瓮。當(dāng)我們?nèi)ナ褂眠@個(gè)車(chē)的對(duì)象時(shí)铺董,則只需要了解各系統(tǒng)如何操作,而不需要知道這個(gè)系統(tǒng)里面由什么組成禀晓。
對(duì)變化的支持:面向?qū)ο蟮姆绞姜q如人類(lèi)理解事物一樣精续;往往事物會(huì)不斷變化,例如某一部分進(jìn)行改變粹懒;那么面向?qū)ο蟮某绦蛞材苤С诌@些變化重付,可以?xún)?yōu)美地廢除或者替換舊系統(tǒng)中的一些部分。
OOP三原則
封裝
封裝:將代碼以及其操作的數(shù)據(jù)綁定在一齊的機(jī)制凫乖∪返妫可以想象為一個(gè)保護(hù)性的盒子,只允許外部通過(guò)盒子提供的通道進(jìn)行訪問(wèn)和操作帽芽,而不允許隨意訪問(wèn)盒子里面的代碼和數(shù)據(jù)删掀。
封裝的基礎(chǔ)是類(lèi):類(lèi),是一些對(duì)象共享的一種結(jié)構(gòu)和行為(數(shù)據(jù)和代碼)导街。使用類(lèi)創(chuàng)建對(duì)象披泪,類(lèi)似使用模具生產(chǎn)零件,這些對(duì)象也稱(chēng)為類(lèi)的實(shí)例搬瑰。
變量和方法:類(lèi)里面可以定義變量和方法款票,稱(chēng)為成員變量(或?qū)嵗兞浚┖统蓡T方法(或方法)控硼。
公有/私有:類(lèi)的變量或方法可以設(shè)置為公有或私有,公有的表示外部用戶(hù)可以知道的內(nèi)容艾少,私有的表示只有類(lèi)的成員才能訪問(wèn)卡乾。
繼承
繼承:是一個(gè)對(duì)象獲得另一個(gè)對(duì)象的屬性的過(guò)程,繼承支持了層次化分類(lèi)的概念姆钉。
例如定義了一個(gè)哺乳類(lèi)動(dòng)物说订,又定義了下一層的一個(gè)類(lèi)叫犬類(lèi)抄瓦,我們定義犬類(lèi)繼承了哺乳類(lèi)潮瓶,那么就代表犬類(lèi)有哺乳類(lèi)的所有屬性和特征(變量和方法)。
多態(tài)
多態(tài)(多種形態(tài)):允許將一個(gè)接口用于一類(lèi)通用動(dòng)作钙姊。
多態(tài)是為了降低復(fù)雜性毯辅。例如一個(gè)對(duì)象有同一個(gè)行為,但是根據(jù)數(shù)據(jù)不同有不同做法的時(shí)候煞额,使用相同的接口來(lái)指定這個(gè)行為思恐,而自動(dòng)根據(jù)對(duì)應(yīng)的參數(shù),會(huì)執(zhí)行對(duì)應(yīng)的實(shí)際代碼膊毁。
封裝胀莹、繼承與多態(tài)協(xié)同工作
通過(guò)這3個(gè)原則,可以設(shè)計(jì)出健壯性強(qiáng)婚温、方便維護(hù)描焰、適應(yīng)變化的系統(tǒng)級(jí)代碼。