OOP 的世界真是博大精深。

最近看了一些 Objective-C (Obj-C for short) Programming 相關的文章(沒錯!是為了在 Mac 上 programming),發現 Obj-C 有一些其它語言少見(或許是我見識淺薄)的一些 OO 特性:CategoriesPosing

過去我們在 OOP 裡要擴充一個 class,最直覺的作法就是去「繼承」它(看 Java 裡用 extend 這樣的關鍵字)然後再去改寫,而 Obj-C 提供的這兩個特性也是為了讓你更方便擴充既有的 class,以下是我自行整理的心得。

Categories

如果你想要為你的 class 增加一些 methods (或是 operation),你可以再實作一個同名的 class 並加上一個分類的標籤,然後只需實作這個分類(Category)下的 method 即可,之後你在程式中使用該 class 的 instances 就可以直接使用這些擴充出來的 operation。

Posing

Posing 這個技術是另一種擴充 class 的方式,在使用 posing 時,你一樣是實作一個 class B 繼承自 class A,然後在程式中宣告讓 B pose as A,如此一來,程式中所有使用到 class A 的地方都會被替換成 class B 了!這個技術適合在你並沒擁有 class A 的原始碼時,又想要改變它行為一個很方便的方式。

不知道還有沒有其它的 OO-based 的語言有這種特性的,不過應該要那種 dynamic typing 的語言才有可能會有吧。

 

歷史上的今天