引入
如果接觸過面向過程的C語言,那么再來接觸面向?qū)ο蟮腏ava的會很好理解育韩。畢竟OOP只是在過程型語言概念的基礎(chǔ)上克蚂,又添加了許多概念而已。既然添加了許多概念筋讨,照理說Java程序比等價的過程型程序要復雜陨舱,但是實際上編寫良好的Java程序通常要比過程型程序要簡單的多,而且也更易于理解版仔。那么游盲,這么神奇的面向?qū)ο蟪绦蛟O計究竟是怎么樣的呢误墓?
知識點歸納(了解)
1.抽象過程
1.1所有編程語言都提供抽象機制。人們所能解決問題的復雜性直接取決于抽象的類型和質(zhì)量益缎。
1.2面向?qū)ο笏枷雽嵸|(zhì):程序可以通過添加新類型的對象使自身適用于某個特定問題谜慌。
1.3對象具有狀態(tài)、行為和標識
每個對象都可以擁有內(nèi)部數(shù)據(jù)(它們給出了該對象的狀態(tài))和方法(它們產(chǎn)生行為)莺奔,并且每一個對象都可以唯一地與其他對象區(qū)分開來欣范,亦即每一個可以存在于不同的機器和地址中的對象都有一個唯一的地址。
2.每個對象都有一個接口
2.1類是具有相同特性(數(shù)據(jù)元素)和行為(功能)的對象集合令哟。類實際上是一個數(shù)據(jù)類型
2.2類是對象的抽象集合恼琼,對象是類的具體實例
2.3對象的接口定義了對象可以完成哪些任務。類決定接口屏富。
3.每個對象都提供服務
3.1把對象當做服務提供者
程序通過調(diào)用其他對象所能提供的服務來向用戶提供服務晴竞。
當要解決一個問題時,我們可以想:我們需要哪些服務來解決這個問題狠半?我們需要什么樣的對象噩死?這就將問題分解為對象集合了。
3.2提高對象的內(nèi)聚性
不將過多的功能集合到一個對象中。每個對象都可以很好的完成一項任務,但不試圖做更多的事情舱禽。還可以在其他地方復用序六。
4.被隱藏的具體實現(xiàn)
4.1
4.2訪問控制存在原因
- 讓類消費者無法觸及不應該觸及的部分
- 允許類創(chuàng)建者可以改變類內(nèi)部的工作方式而不用擔心會影響到類消費者
4.3訪問控制關(guān)鍵字
public、private、protected
5.復用具體實現(xiàn)
5.1組合——利用現(xiàn)成的類合成新的類,實現(xiàn)代碼復用
- 新的類可以由任意數(shù)量、任意類型的其他對象以任意可以實現(xiàn)新的類的中想要的功能的方式所組成
- 在創(chuàng)建新類的時候艾扮,組合比繼承更加簡單靈活
6.繼承
6.1繼承——以現(xiàn)有的類為基礎(chǔ),通過添加或修改這個副本來創(chuàng)建新類
- 當源類(基類占婉、超類泡嘴、父類)發(fā)生變動時,被修改的副本(導出類逆济、繼承類酌予、子類)也會隨之變動
- 父類型包含所有子類型所共享的特性和行為〗被牛可以創(chuàng)建一個父類型來表示系統(tǒng)中某些對象的核心概念抛虫,從父類型中導出其他子類型來表示此核心可以被實現(xiàn)的各種不同方式。
- 子類擁有與父類相同的基礎(chǔ)接口
6.2繼承后父類與子類的差異性
- 直接在子類中添加新的方法
- 覆蓋——改變父類方法的具體實現(xiàn)
6.3繼承的is-a關(guān)系與is-like-a關(guān)系
- is-a關(guān)系:只覆蓋父類的方法简僧,父類與子類的接口完全相同(替代原則)
- is-like-a關(guān)系:添加新的接口元素建椰,父類無法訪問新添加的方法,父類與子類的接口并不完全相同
7.伴隨多態(tài)的可互換對象
7.1將子類對象當做泛化的父類對象看待
存在的問題:如果某個父類的方法要讓泛化的幾何形狀繪制自己岛马,那么編譯器在編譯時是不可能知道應該執(zhí)行哪一段代碼的棉姐,那么屠列,如何正確的調(diào)用子類對象的代碼呢?
7.2通過向上轉(zhuǎn)型(把子類看做父類的過程)機制實現(xiàn)多態(tài)
8.單根繼承結(jié)構(gòu)
所有的類最終都繼承自單一的基類Object伞矩。
9.容器(集合)
在任何時候都可以擴充自己以容納置于其中的東西笛洛。
Java中具有滿足不同需要的各種類型的容器,例如List(用于存儲序列)乃坤,Map(用來建立對象之間的關(guān)聯(lián))苛让,Set(每種對象類型只持有一個),還有隊列湿诊、樹狱杰、堆棧等構(gòu)件
- 不同容器提供了不同類型的接口和外部行為
- 不同容器對某些操作具有不同的效率
- 通過參數(shù)化類型(泛型)來限制容器存儲的數(shù)據(jù)類型
10.對象的創(chuàng)建和生命期
使用對象時要特別關(guān)注它們的生成和銷毀方式。
- Java完全采用了動態(tài)內(nèi)存分配方式厅须。每當想要創(chuàng)建新對象時仿畸,就要使用new關(guān)鍵字來構(gòu)建此對象的動態(tài)實例
- Java提供“垃圾回收機制”來處理內(nèi)存釋放的問題
11.異常處理
- 異常處理不是面向?qū)ο蟮奶卣鳎侨绾芜M行錯誤處理一直是最困難的問題之一九杂。
- 在面向?qū)ο笳Z言中颁湖,異常是一種對象宣蠕,它從出錯地點“拋出”例隆,并被專門設計用來處理特定類型錯誤的相應的異常處理器“捕獲”。
- 異常提供了一種從錯誤狀況進行可靠恢復的途徑∏朗矗現(xiàn)在不再是只能退出程序镀层,可以經(jīng)常進行校正,并恢復程序的執(zhí)行皿曲,這些都有助于編寫出更健壯的程序
12.并發(fā)編程
- 同一時刻處理多個任務
- 共享資源處理過程:某個任務鎖定某項資源唱逢,完成其任務,然后釋放資源鎖屋休,使其他任務可以使用這項資源坞古。
13.Java與Internet
13.1Web是一個巨型客戶/服務器系統(tǒng)
13.2客戶端編程
13.2.1插件
13.2.2腳本語言
13.2.3Java
13.2.4C#和.NET
13.4.5Internet與Intranet
13.3服務器端編程
注意事項
- 這篇文章其實都是“對象”的大致輪廓而已,有很多知識還是挺模糊不清的劫樟。而且繼承痪枫、多態(tài)、并發(fā)等問題都是只言片語無法了解透徹的叠艳。但是奶陈,正如畫畫都是從大到小,從輪廓到細致一步一步的過程附较。學習這門編程語言也應該有這樣一個過程——先了解整體性的內(nèi)容吃粒,再去逐步細化攻破每個重要點。
Q&A
1.
Q:如何區(qū)別面向過程和面向?qū)ο?br>
A:以“行走”為研究對象拒课,那么
面向過程——抬腿徐勃,往前放下事示,抬腿,放下
面向?qū)ο蟆獙⑻仁柚迹畔路庋b成一個對象很魂,這個對象具有“走”的功能
參考資料
《Java編程思想(第四版)》第一章