把本來以為很簡單的一個輸出日歷的習題做了一下,花了很多時間,到現在還遺留兩個問題,正在水木清華求助 =_=
1. 關于Calendar類
Calendar類本身是一個抽象類,使用時需要根據具體的日期制度實現。Java內置了對格列高利歷(公歷)的支持--Gregorian類。
2. Calendar 類設置具體參數的方法以前沒碰到過
set(int field, int value)
比如要設置月份為三月,就可以calendar1.set(Calendar.MONTH, Calendar.MARCH);
get(int, int)方法也類似
Chapter 10 Object-Oriented Modeling
1. 軟件開發的幾個過程
需求描述 -< 系統分析 -< 系統設計 -< 具體實現 -< 測試 -< 安裝配置 -< 維護
2. 類與類之間的關系
Association
相關聯,如教師、課程與學生三個類之間,學生 聽 課,教師 授 課
Aggregation and Composition
包含關系,composition 更為嚴格,排他性的擁有,如公民與身份證號,aggregation 則無此限制,如學生與所在學校
Inheritance
繼承,可以是接口或類
注意它們各自在UML中的符號
3. 類的設計
* 一個有過多內容的類應當被分解為幾個小類,如String, StringBuffer, 和 StringTokenizer 類各自處理不同的情況。用戶通常把不同的類按各種順序組合起來使用,因此在設計類時不能限制用戶在何時、如何使用這些類,并使用戶能夠按照任意的順序和任意的組合設置它們的屬性。
一般來講,最好提供一個無參數的構造方法,并盡可能重載equals和toString方法,在重載equals的同時也要* 重載hashCode方法,使得相同的兩個對象有相同的hash code。如果想阻止用戶創建類的實例,就把構造函數聲明為private,如Math類。
* 使用繼承和內置(composition):
inheritance:
public class Cylinder extends Circle {
//...
}
composition:
public class Cylinder {
private Circle circle;
/...
}
一般來說,要用到多態這一特性的話,就要使用繼承,否則可以使用內置,因為它相對獨立,更機動。
* Convenience class
接口比抽象類更為機動,卻不能包含具體方法,可以通過創建一個實現它的方法的抽象類來彌補這一缺陷,使用時哪一個方便就用哪一個。
4. 使用 Sequence Diagrams 和 Statecharts 建模