1、抽象過程java
程序員必須創建起在機器模型和實際待解決問題的模型之間的關聯程序員
抽象的本質應該是創建在具體的問題上,而不該該是基於計算機的結構上的。安全
第一個成功的面向對象的語言是:Smalltalk,那麼他的五個基本特徵是spa
1).萬物皆爲對象。理論上講,你能夠抽取待解決問題的任何概念化構件將其表示爲程序中的對象;它能夠存儲數據,除此以外它還能夠執行自身的操做。對象
2).程序是對象的集合,它們經過發送消息來告知彼此所要作的。經過消息進行調用對象的執行繼承
?3).每一個對象都有本身的由其餘對象所構成的存儲。接口
4).每一個對象都擁有其類型。每一個對象都是一個類的實例內存
?5).某一特定類型的全部對象均可以接收一樣的消息。變量
對象的描述:對象具備狀態、行爲、標識。這意味着每個對象都擁有內部數據和方法,而且每個對象均可以惟一的與其餘的對象區分開來,具體的說就是對象在內存中都擁有一個惟一的地址。
數據類型
2、每一個對象都有一個接口
類的由來:在程序執行過程當中具備不一樣的狀態而其餘方面都類似的對象會被分組到對象的類中。
由於類描述了具備相同特性和行爲的對象的集合,因此一個類其實是一個數據類型,在計算機看來,它和內置的對象如浮點類型的數據相似,系統都會欣然接受他的存在,而且象對待內置對象那樣對它進行內存的分配和類型檢查。它們惟一的區別在於:程序員經過定義類來適應問題,而不用再爲了適應系統使用系統提供的表示機器中的存儲單元的數據類型。
對象是用來執行任務的,因此當有請求過來時,定義的對象須要知足這些請求,這些請求由對象的接口定義產生,而且在程序中由具體的方法的實現。從這裏能夠解決的問題是:一個請求對應一個方法,當向對象請求時與之對應的方法會被調用,而後執行相對應的代碼程序。
總結一下:通俗的講,這裏的一個對象都有一個接口的意思是每個對象都是要執行一系列的請求的,這些請求的產生是在接口中定義的(這裏所說的請求指的就是方法),固然還須要有實現接口中定義的方法的代碼。
3、每一個對象都提供服務
每一個對象都提供必定的服務,咱們的目標就是可以提供理想的服務來解決問題的一系列的對象
同時將對象稱爲「服務提供者」還能夠很好的提升代碼的內聚性,由於每一個對象都有本身須要完成的任務,當一個對象中須要完成的任務若是過多的話就會出現這個對象特別的龐雜,因此通常狀況下是每個對象均可以很好的完成一項任務,他不嘗試作更多的事,這是一種很好的代碼風格,同時也提升了代碼的可複用性。
4、被隱藏的具體實現
java中存在一種保護機制,隱藏實現細節,對外只提供訪問的接口,即存在訪問控制。
訪問控制的緣由有二:其一,訪問控制能夠保證數據內部的安全性,不能有任何人去隨意改變他們不能夠修改的地方;其二,當內部實現修改時,只要對外提供的接口不改變時,就不會產生什麼影響(前提是你的實現和接口是分離的)。
java提供了三種關鍵字來實現訪問控制,private(類內部)、protected(繼承關係內部能夠訪問)、public(全部的想訪問的均可以訪問), 還有一種是省略的包訪問控制。
5、複用具體實現
面向對象的一大優勢是實現代碼的複用,簡單的複用一個類的方式就是使用該類的對象,另外,咱們還能夠將某個對象內置於某個類中,稱爲該類的一個成員變量。新的類中能夠由任意數量、任意類型的其餘的對象組成,這樣的使用現有的類合成新的類的方式被稱爲組合。組合是'has-a'關係。若是組合是動態生成的那麼稱爲聚合。
組合在uml圖中的表示方式是實心的菱形加一個箭頭。若是在相同的狀況下咱們使用組合和繼承都能達到代碼複用的效果,那麼咱們最好仍是使用組合,繼承存在必定的不安全性。
6、繼承