軟體設計part1
前言
- 運氣不錯的抽到水球大大的課程試吃活動
- 這個系列會試著將學到的部分做一個統整筆記
- Marc Andreessen這位知名的企業家以及軟體工程師曾經說過 :
Software is eating the world
,由此可知軟體對世界的重要性越來越強
軟體工程師的使命為何?
- 透過軟體的力量完美解決的問題的人
- 如質 high quality
- 如時 on time
- 如預算 under buget
需求方常常朝令夕改使工程師心力憔悴
- 這牽涉到了三點: 領域知識、人們的需求、軟體本身無型的特質
- 可以將問題建出模型,透過視覺化的方式去達到彼此有效的共識
- 已知或未知的知識內容我們稱之為領域
- 其中以物件導向領域模型最為有效
因為世界是由形形色色的各種物件組成的,每個物件都包含著某種狀態、行為,世界是由各種物件組成,也就是說是一個物件導向的世界。
軟體開發可分為三個階段: 需求分析、設計軟體、開發軟體
- 需求分析對應物件導向分析(OOA),在這個階段盡可能去捕捉重要的知識、繪製領域模型
- 設計軟體則對於物件導向設計(OOD),這個階段注重各項高階需求(ex: 維護、分工難易度、擴充費用的多寡)
- 最後開發軟體對應物件導向軟體開發(OOP),透過前面的分析、設計,以及程式語言去實作這項專案
理解物件導向
物件的特性
- 可辨識性(identifiability)
- 獨一無二,可被辨識
- 擁有屬性(attribute)
- 用來描述事件的值
- 擁有行為(behavior)
- 有操作(operation) ex: 車子具備煞車、倒車、往前等操作
- 透過行為與其他物件建立連結稱為關係(relationship)
- 將物件進行分類後可得到class(類別)
類別
- 將像似屬性、行為的物件進行分類稱為 classfication
- 類別會記載物件有哪些屬性以及行為
類別之間的關係
- 依強至弱可以分為:
- 依賴(dependnecy) key-word: use-a
- 關聯(association) keyword: has-a
- ownership
- 聚合(aggression) keyword: owns-a
- 複合(composition) keyword: is-part-of
- 繼承(generalization) keyword: is-a