什么是面向?qū)ο笳Z(yǔ)言
支持類(lèi)或者對(duì)象的語(yǔ)法機(jī)制,具備封裝、抽象壹蔓、繼承、泛化語(yǔ)法特性的編程語(yǔ)言
封裝
保護(hù)數(shù)據(jù)不被任意修改猫态,僅暴露有限的接口佣蓉。
需要編程語(yǔ)言提供權(quán)限訪問(wèn)控制語(yǔ)法來(lái)支持,例如 Java 中的 private亲雪、protected勇凭、public 關(guān)鍵字。
提升類(lèi)可讀性义辕、可維護(hù)性虾标、易用性
抽象
隱藏具體實(shí)現(xiàn),使用者只需關(guān)心功能灌砖,無(wú)需關(guān)心實(shí)現(xiàn)璧函。
編程語(yǔ)言不需要特殊的語(yǔ)法機(jī)制來(lái)支持,可以通過(guò)接口類(lèi)或者抽象類(lèi)來(lái)實(shí)現(xiàn)基显。
提高代碼的可擴(kuò)展性蘸吓、維護(hù)性,修改實(shí)現(xiàn)不需要改變定義撩幽,減少代碼的改動(dòng)范圍库继。它也是處理復(fù)雜系統(tǒng)的有效手段,能有效地過(guò)濾掉不必要關(guān)注的信息。
繼承
繼承是用來(lái)表示類(lèi)之間的 is-a 關(guān)系宪萄,分為兩種模式:?jiǎn)卫^承和多繼承舅桩。
編程語(yǔ)言需要提供特殊的語(yǔ)法機(jī)制來(lái)支持。
主要是用來(lái)解決代碼復(fù)用的問(wèn)題雨膨。
多態(tài)
多態(tài)是指子類(lèi)可以替換父類(lèi)擂涛,在實(shí)際的代碼運(yùn)行過(guò)程中,調(diào)用子類(lèi)的方法實(shí)現(xiàn)聊记。
需要編程語(yǔ)言提供特殊的語(yǔ)法機(jī)制來(lái)實(shí)現(xiàn)撒妈,比如繼承、接口類(lèi)排监、duck-typing狰右。
多態(tài)可以提高代碼的擴(kuò)展性和復(fù)用性,是很多設(shè)計(jì)模式舆床、設(shè)計(jì)原則棋蚌、編程技巧的代碼實(shí)現(xiàn)基礎(chǔ)。
偽面向?qū)ο?/h2>
1. 濫用getter挨队,setter方法谷暮。定義了private屬性,確有public的get和set方法盛垦,違反封裝特性
2. 全局Constant湿弦,影響代碼復(fù)用
3. 定義數(shù)據(jù)和方法分離的類(lèi)√诤唬基于貧血模型的web開(kāi)發(fā)模式
選擇繼承或組合
類(lèi)之間的繼承結(jié)構(gòu)穩(wěn)定颊埃,層次比較淺,關(guān)系不復(fù)雜蝶俱,我們就可以大膽地使用繼承班利。反之,我們就盡量使用組合來(lái)替代繼承榨呆。
繼承主要有三個(gè)作用:表示 is-a 關(guān)系罗标,支持多態(tài)特性,代碼復(fù)用愕提。而這三個(gè)作用都可以通過(guò)組合馒稍、接口皿哨、委托三個(gè)技術(shù)手段來(lái)達(dá)成