[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時就用你寫的!
package 把一些相關的class放在一起,package大功用方便使用者不用傷腦筋一直想Class的名字
工作目錄的概念!
eclipse裡面new package
Java Reference Type
如果物件沒人指了的時候,會有garbage collection
就像吃自助餐一樣,一種是自己拿去回收,一種是有人來幫你收
C是屬於前者, Java則是屬於後者。
「觀念」
所有的program在Java裡面都是Class
所有的 helping software都是由Class組成
所有program-defined type都是Class
一個.java檔可以寫很多class
一個.java檔可以產生很多.class檔
main method
get 與 set
寫物件導向程式要先想怎麼用,而不是該怎麼做
用eclipse自動幫你寫get跟set !!
argument 為 actual parameter
parameter為 formal parameter
物件導向三大特性:
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。 |
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一次都會在開一塊新的空間 |
就像吃自助餐一樣,一種是自己拿去回收,一種是有人來幫你收
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
留言
張貼留言