軟體設計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
  • 類別會記載物件有哪些屬性以及行為

類別之間的關係

  • 依強至弱可以分為:
    1. 依賴(dependnecy) key-word: use-a
    2. 關聯(association) keyword: has-a
    3. ownership
      • 聚合(aggression) keyword: owns-a
      • 複合(composition) keyword: is-part-of
    4. 繼承(generalization) keyword: is-a