[Java] Absolute Java (5E) Ch4 ~ 5 重點筆記 2

Object Oriented V.S. Object Based

物件導向三大特性:
Encapsulation
Inheritance
Polymorphism

Object Based 只用了前兩個: Encapsulation, Inheritance




物件導向與合約的概念相似

[合約] 交易的合約,買賣雙方
甲方:我要!
乙方:賣方,提供。

d.setWeight(42);
d.weight = 42;

乙方 "d" 負責做這件事情的人
因為寫在main裡面,method被執行到,正在被執行的物件就是甲方,
合約內容就是做這件事情,乙方就是那位 d

例:


Strong Typing v.s. Weak Typing

舉個例子:
例如“小黑”可以指人的綽號或是狗的名字
在weak typing當中,可以容許直接寫小黑,到時需要時再詳細
所以叫小黑的時候可能會有很多人回頭 XD

strong typing則是要明確在最一開始,把名字交代清楚!

所以 Java是strong typing

寫OO就好像在寫合約,
僱主(甲方)交代下去之後,就不管了,詳細過程由被呼叫的乙方來負責!


Class是結構,Object是真實的事件 (Class是一堆Object的製造藍圖)

例如病歷表,還沒填的時候一疊在那邊是Class
去看病的時候,我拿了一張填寫,我只會填寫一張,並寫上我的資料
是實際存在的一張Object,填寫好的病歷表單。


資料隱藏的必要性
例如: 圖書館裡面的書,那下來借走一定要透過館方人員,不可自行拿走在隨意還回去,因為隨便放上去不按順序放,其實那本書就等同是不見了 OAO!

所以要寫一些標準的函式來讓使用者call

封裝的概念:
把實際存放資料的方法給封起來,只開一些對外的開口讓外部使用者使用,


Constructor: 像是蓋房子的時候,先做一些預定規格
如下例,第四行到第六行,長得跟一般 function很像
但constructor的特性有
1. 不用回傳值
2. 沒有宣告變數
3. 名字跟該Class名字一樣

如果沒有寫constructor, Java會預設寫一個全空的constructor給你!
這樣才可以寫 new
例如這裡沒有寫constructor,但是其實Java會自動幫你補一個
Greeting(){   } 全空的 construtor。
沒寫的時候幫你補空的,有寫constructor時就用你寫的!


package 把一些相關的class放在一起,package大功用方便使用者不用傷腦筋一直想Class的名字


工作目錄的概念!

eclipse裡面new package





Java Reference Type
變數寫在class裡面而不是寫在function裡面的
稱為class的data member

講 new 時一連串分解動作

第一步會先宣告,Java 的 reference 跟 C 的指標一樣!
一開始,data會採用預設的值,int 就是預設 0

接著data會被設定為constructor給的預設值
然後才會被設定成使用者給的初始值22, 7, 1964
data設定完成後,接著指標指過去
每new一次都會在開一塊新的空間
如果物件沒人指了的時候,會有garbage collection
就像吃自助餐一樣,一種是自己拿去回收,一種是有人來幫你收
C是屬於前者, Java則是屬於後者。

「觀念」
所有的program在Java裡面都是Class
所有的 helping software都是由Class組成
所有program-defined type都是Class

一個.java檔可以寫很多class
一個.java檔可以產生很多.class檔

main method

get 與 set
法一 利用不同變數命名
法二 使用 this 


寫物件導向程式要先想怎麼用,而不是該怎麼做


用eclipse自動幫你寫get跟set !!
step1 選起來
step2 Source 選 Generate Getters and Setters
完成!


argument 為 actual parameter

parameter為 formal parameter



留言

這個網誌中的熱門文章

[筆記] CRLF跟LF之區別 --- 隱形的 bug

[ML筆記] Batch Normalization

[ML筆記] Ensemble - Bagging, Boosting & Stacking

[筆記] 統計實習(1) SAS 基礎用法 (匯入資料並另存SAS新檔,SUBSTR,計算總和與平均,BMI)