如何面向?qū)ο缶幊蹋?br />
先讓我知道面向?qū)ο蟮娜齻€(gè)特性:封裝封裝是把客觀(guān)事物封裝成抽象的類(lèi) , 并且類(lèi)可以把自己的數(shù)據(jù)和方法只讓可信的類(lèi)或者對(duì)象操作 , 對(duì)不可信的進(jìn)行信息隱藏 。換而言之 , 類(lèi)是一個(gè)封裝了它自身數(shù)據(jù)和操作這些數(shù)據(jù)的代碼的抽象 。在類(lèi)內(nèi)部 , 某些代碼或某些數(shù)據(jù)可以是私有的 , 不能被外界訪(fǎng)問(wèn);也可以是私有的 , 能夠被外界訪(fǎng)問(wèn) 。以此可以防止代碼中意外改變或錯(cuò)誤使用了類(lèi)的私有部分 。
繼承繼承是讓某個(gè)類(lèi)獲得另一個(gè)類(lèi)的屬性和方法 。它可以使用現(xiàn)有類(lèi)的除了私有以外的所有功能 , 不需要重新編寫(xiě)原來(lái)的類(lèi)的情況下對(duì)這些功能進(jìn)行擴(kuò)展 。通過(guò)繼承創(chuàng)建的新類(lèi)稱(chēng)為“子類(lèi)” , 被繼承的類(lèi)稱(chēng)為“父類(lèi)” 。繼承概念的實(shí)現(xiàn)方式有兩種:實(shí)現(xiàn)繼承和接口繼承 。實(shí)現(xiàn)繼承是直接使用父類(lèi)的屬性和方法而不需要額外的編碼;接口繼承是僅使用屬性和方法的名稱(chēng) , 但子類(lèi)必須實(shí)現(xiàn)父類(lèi)的方法 。
多態(tài)多態(tài)是一個(gè)類(lèi)實(shí)例的相同方法在不同情形有不同表現(xiàn)形式 。多態(tài)機(jī)制使具有不同內(nèi)部結(jié)構(gòu)的對(duì)象可以共享相同的外部接口 。這意味著 , 雖然針對(duì)不同對(duì)象的具體操作不同 , 但通過(guò)一個(gè)公共的接口 , 它們可以通過(guò)相同的方式予以調(diào)用 。多態(tài)概念的實(shí)現(xiàn)方式有兩種:重載和重寫(xiě) 。重載是同一個(gè)類(lèi)中有多個(gè)同名的方法 , 但是這些方法有著不同的參數(shù) , 方法的內(nèi)部實(shí)現(xiàn)也不同;重寫(xiě)是子類(lèi)可以覆蓋父類(lèi)的方法 , 因此同樣的方法會(huì)在父類(lèi)和子類(lèi)中有著不同的內(nèi)部實(shí)現(xiàn) 。
面向?qū)ο缶幊痰谋锥耸鞘裁矗?br />
面向?qū)ο缶幊淌且环N處理復(fù)雜問(wèn)題的設(shè)計(jì)工具 , 本身沒(méi)有什么好壞之分 , 只有用的好壞之分 。但面向?qū)ο蟮膯?wèn)題在于長(zhǎng)期以來(lái)的技術(shù)環(huán)境、編程語(yǔ)言、一些工具的推廣、培訓(xùn)和教育都大大的過(guò)分樂(lè)觀(guān)的強(qiáng)調(diào)了面向?qū)ο缶幊瘫旧砜梢詭?lái)的好處 。以至于很多學(xué)習(xí)編程的人都深深的相信“只要用了面向?qū)ο缶幊蹋ㄒ约盎谄浠A(chǔ)之上的的一系列設(shè)計(jì)模式、規(guī)范、工具、框架) , 就能得到非常容易維護(hù)、可以復(fù)用、明晰可理解的代碼“ 。
但 , 這并不是真的 。如果你經(jīng)歷過(guò)很多 , 就會(huì)發(fā)現(xiàn)“只要如何如何 , 就一定能如何如何”這個(gè)提法一旦出現(xiàn) , 基本上就不靠譜 , 不管是編程還是別的什么事情 。在大量的場(chǎng)景中 , 可以偏執(zhí)的認(rèn)為“萬(wàn)物皆對(duì)象”(或者萬(wàn)物皆別的什么) , 但是哲學(xué)上的單純并不一定能讓現(xiàn)實(shí)中的工程變得更“好” 。如果說(shuō)非得有個(gè)“萬(wàn)物皆XX” , 那么這個(gè)XX八成就是根據(jù)眾多需求綜合到一起的“折衷” 。
簡(jiǎn)單從工程講的話(huà) , 如果程序(或者說(shuō)工作)是一次性的 , 那么怎么寫(xiě)得快 , 能work就怎么來(lái) 。這個(gè)相對(duì)好理解 。但是 , 如果程序是要長(zhǎng)期維護(hù)的 , 那么如何管理其復(fù)雜性是核心的問(wèn)題 。而管理復(fù)雜性的要點(diǎn)在于讓事情本身變得簡(jiǎn)單 。這說(shuō)白了就是砍需求 , 研發(fā)和PM之間要經(jīng)常溝通去避免nice to have的需求變動(dòng)帶來(lái)的程序復(fù)雜性的劇烈變化(比如一個(gè)1對(duì)1的實(shí)體關(guān)系 , 需求變動(dòng)一點(diǎn)就變成了麻煩的多的“有時(shí)1對(duì)1 , 有時(shí)1對(duì)多”的混合關(guān)系) 。
運(yùn)用隔離的手段將復(fù)雜性拆解為互相影響很小的單元 。一個(gè)單元對(duì)外只暴露一個(gè)簡(jiǎn)單的“接口” , 隱藏內(nèi)部復(fù)雜性 。這就是“抽象”或者“封裝“的力量 。但是問(wèn)題在于 , 這個(gè)抽象本身是否做的合適是由于問(wèn)題決定的 , 而不是代碼本身決定的 。即便是抽象 , 也有很多種做法 ??梢远x一組接口 , 這個(gè)接口是一組函數(shù)、一組服務(wù)的RPC還是一個(gè)class的public method都可以根據(jù)實(shí)際情況商討 。
推薦閱讀
- qq英雄之刃怎么玩,用120HZ刷新率玩手游是一種什么體驗(yàn)
- 坦克世界viv號(hào)怎么樣,玩坦克世界是一種什么體驗(yàn)
- 常用的工具軟件有哪些,編程工具
- pthread,Pthread
- Python編程代碼,python編程代碼
- [上海交大]微型計(jì)算機(jī)組成原理,微型計(jì)算機(jī)原理
- 計(jì)算機(jī)行業(yè)職業(yè)道德個(gè)人體會(huì),如何培養(yǎng)計(jì)算機(jī)行業(yè)職業(yè)道德
- Python編程從入門(mén)到實(shí)踐,python編程從入門(mén)到實(shí)踐
- 日本工業(yè)控制與自動(dòng)化前沿,可編程邏輯
- 在線(xiàn)編程 題解,華為人才在線(xiàn)
