??????開博了,來一篇償個鮮,嘿嘿……???
??????從面向過程的編程(C語言)到“真正”面向對象的編程已經有半年了,用Java也編了不少代碼,但對面向對象的概念理解還不是很深,于是把《Java編程思想》再看一遍,以達到更深的理解。
??????面向對象是把我們待解決的問題抽象成一個個對象從而進行操作,這里就出現一個問題,就是怎么抽象?從最簡單的思考出發,那就是將具體的東西和行動抽象成對象。比如,具體的桌子、板凳,行為如取款,讀取數據等,都可以抽象成一個類。如果考慮到繼承等高級特性,那么類的設計就可能需要重新設計,但是都離不開“事務和任務”這個本質。面向過程的編程是以“解決問題”為出發點,如一個單位最低層的員工,做的就是具體的事務,打掃清潔的就是琢磨怎么從一樓掃到十樓,怎么樣從東掃到西,考慮的是“過程”,而領導就不同了,領導是面向對象的,它知道張三是打掃衛生的,李四是文秘的,王二是跑業務的,在他眼里,這些人就是一個個類,他們有那些特性,能干什么?當需要打掃衛生的時候,他想到了張三(就好像面向對象編程想到某個類一樣),把張三叫過來,說你去把我的辦公室打掃一下(相當于類的發送消息,即引用),對領導而言,張三怎么打掃的,用什么工具等他不知道,但是他完成了任務了。這里唯一不同的是張三是唯一的,而不是生成的,其實這個好理解,如果這個單位有好幾個這樣的工作人員,那么領導想到那個人員也就相當于new一個類對象了。當然對于張三來說,那些清潔工具和打掃任務也可以看成是一個個類,如掃帚、拖把和清潔劑等,真是“萬物皆對象”。
??????組合的概念。組合被稱為has-a(擁有關系),如汽車(Car)擁有引擎(Engine),那么在Car類里面使用Engine對象(即Car的成員對象,成員對象就是說這個對象是另外一個類的成員,還有成員特性、成員函數),通常都將Engine的對象設為private,使得新類的客戶端程序員不能訪問它。如下:
????????????????Class Car{
???????????????????????……??????
???????????????????????priavte Engine engine;??????//這個對象是Car類所需的,但是使用Car的類不需要的
????????????????????????????????????????????????????????????????所以將其設為private
????????????????????????……
??????????????????}