iT邦幫忙

第 11 屆 iT 邦幫忙鐵人賽

DAY 13
0
Software Development

我要轉職成 C# / .NET 工程師系列 第 13

物件模型

昨天提到物件模型主要由四個元素構成:

  1. 抽象化
  2. 封裝
  3. 模組化
  4. 階層

另外還有三個次要元素:

  1. 定型
  2. 並行性
  3. 續存性

物件模型可以幫助我們分析需求、設計系統、並在實做時幫助我們發揮物件導向程式語言的威力。

抽象化

不同人對抽象概念的定義有所不同,例如Dagl、Dijkstra與Hoare認為:

抽象概念係來自於辨識真實世界中的特定物件、狀況、或流程之間的相似性,然後專注在這些相似之處,而暫時忽略其中的差異。

而Shaw對抽象的概念定義為:

一份簡化過的系統描述或系統規格,其內容著重在系統的某些細節或屬性,其他部分則先跳過。好的抽象概念會強調讀者或使用者關心的部分,並略過一些無關緊要或令人分心的細節--至少目前先跳過。

查英文字典中abstract的意思,其實除了抽象也有簡化或摘要的意思。

總而言之,抽象化的概念是幫助我們先關注於物件的外觀、基本特徵或基本行為,將內部如何達成、如何實作等內外之間先分離開來。

封裝

封裝與抽象化是互補的蓋念,物件的抽象概念應在實作前先確立,封裝關注於物件達成行為的實作,並讓不屬於外觀或基本特徵等私密資訊隱藏起來。並可以透過封裝成為不同抽象概念之間的屏障,達到明確的責任分離。在系統開發過程中,可能有實作方式的變動,透過封裝將實作與抽象分離,在不影響抽象的情況下更改實作,避免牽一髮而動全身。

模組化

模組是幫助我們分解系統成物件的中間單位,透過模組幫我們把相關的類別與物件進行封裝,幫助我們達到元件的複用,這概念在Java中稱為package,在C#中稱為namespace。

階層

在對一個物件進行抽象化的過程中,我們可能找到很多的抽象概念,可能有共通的或獨有的,又或是某些抽象概念還能在分離。透過階層形成父與子的關係,讓子代擁有父輩能力或抽象概念,並讓自己擁有獨有能力或抽象概念形成繼承這種階層關係。除此之外不同物件之間可能有倚賴關係,例如學校與學生可以是個自獨立的個體,但是若學校沒有學生,那能稱為學校嗎?,其存在有相依性,形成聚合這種階層關係。

這邊補充一下次要元素中的定型

定型指的是透過宣告型別強制指定物件所屬的類別,讓不同型別的物件不能互相交換,或是頂多只能在特定條件下互相交換。

型別又分強型別與弱型別、靜態型別與動態型別。
強弱指的是型別一致性,我們說C#是強型別程式語言,指的是我們宣告number是int型別,number這個變數不會像javascript可以在執行時將數字內容改成字串

靜態動態指的是繫結型別的時機。靜態指的是編譯時其就決定好型別,可稱為靜態繫結或是早期繫結,而動態型別是指執行時期才決定型別,又稱為晚期繫結。

在物件導向程式設計與其他程式設計的關鍵分野是提供多型機制,讓宣告為此類別的物件可以為此類別的子類別。


上一篇
物件導向
下一篇
物件導向設計原則中的五個原則縮寫叫SOLID
系列文
我要轉職成 C# / .NET 工程師34

尚未有邦友留言

立即登入留言