2011年10月27日 星期四

物件導向設計:期中概念統整

Q1:Java執行是直接編譯程式碼後執行嗎??
A1:並不是,實際上是先經過java compiler編譯成bytecode(一種類機器語言),交給JAVA virtual machine(JVM)解譯之後在交由CPU執行



Q2:class(類別)object(物件)差在哪??
A2:
類別:類別是一個結構,裡面放了所需的資料,與操作資料的函數,整理在一起方便操作。
物件:所有物件都定義在類別裡面,物件是依照類別的意義去建構出來的。

class Customer<--(類別)

{
    String User = “Ray”;                     
    String Pass = “1201”;
    function Login(User, Pass)  {     (物件)-->  Lisa = new Customer                                                          
 ……                                                 (物件)-->  Peter = new Customer

    }
};                                                       (物件)-->   Ray = new Customer

 
簡單化
類別就像是一張設計圖
物件是設計圖的完成品



Q3:Information hiding啥玩意兒??
A3:將class的執行細節隱藏起來。class內的method被定義後,你只需要將input丟進去得到output即可,使用者無須理會method如何執行,避免使用者誤用而產生錯誤或更糟的結果。



Q4:encapsulated(封裝)?
A4:封裝是讓實作和界面分開, 使資料分為程式設計師的介面與使用者介面,達到Information hiding的效果降低誤用的錯誤發生。



Q5:overload(多載)?
A5:多個相同名字的method,若引數資料型態不同,則呼叫不同method



Q6:new是什麼東西,我不懂他實際在做什麼!
A6:new是一個動作,用來使class變數與class內的物件作連結,使用者可以用class變數去使用class裡面的物件,用課本P203的例子:

DateFirstTry data;                
//從DateFirstTry這個class產生一個data的物件

data = new DateFirsTry();
//將date與DateFirstTry的內容作連接
//之後可以藉由data去呼叫DateFirstTry的method(類似C語言的function)運算






Q7:constructor(建構子)overload(多載)有什麼關係呢
A7:constructor簡單來說是method跟class名稱相同,當我們在new一個class變數的時候,直接傳入引數時,那麼class變數的值,會成為constructor的回傳值。而constructor可以多載,在constructor的引數可以置入變數,並定義不同引數輸入時會執行那些constructor,使建構子擁有更便捷的功能。

(範例請自253頁開始看)



Q8:Accessor與Mutator Methods?
A8:
Accessor Methods :准許你讀取資料的方法(method)。
Mutator Methods    :允許改變在class object裡面的資料的方法(method)。



Q9:static、final、static final有何分別
A9:
static       :靜態變數,定義的變數將永久保存在記憶體,不隨方法(method)運算結束而消失,直到程式結束。


final         :定義的變數值不可改變。
static final結合以上二者的特性

2 則留言: