現代新的簡化”物件“和”物件導向“的定義
傳統物件導向定義已經過時,過去定義已經不能滿足新語言新思想的發展,來自A Proposal for Simplified, Modern Definitions of "Object" and "Object Oriented"
一文試圖提出一種新的物件定義,以容納適應新的發展形勢。
新的物件定義是:An object is a first-class module that is invoked polymorphically
物件是能夠被多型呼叫的頂級模組。
這裡模組module定義可以是傳統語言的類Class,也可以是函式語言的函式function。這樣,物件導向定義比以前更加寬廣,可以包含Scala等新的函式語言。
多型性polymorphically被定義成執行呼叫方式,而傳統OO語言的繼承只是其中一個程式碼機制的實現,在執行時實現多型,包括執行時的Mixin實現,在不改變不變動原來程式碼情況下將新的程式碼混入執行。這就更加側重執行時的物件定義,而不是傳統意義上編碼階段的物件定義了。
作者還總結了物件哪些特性是物件的重要本質特性,其中最重要的是可變狀態Mutable State
,值物件是一種不可變物件,大部分函式語言試圖透過迴避可變狀態來實現高併發效能,但是這也許有些激進,因為可變狀態的應用越來越多。
我們有辦法從可變性分離出不變性,我們也有辦法去控制可變性(先容納再控制的哲學),比如在GOF設計模式中只有State, Memento, Observer, Decorator, 以及Chain or Responsibility 和 Adapter都需要可變性. 透過模式,我們達到重點分界可變狀態和不可變狀態,然後圍而分別殲之的策略,這樣,不可變的安全區域才會變得更加廣闊,變成一種預設語境。
作者將標識Identity也歸為物件必須的特性,在領域驅動設計DDD中我們知道實體的特點是標識,用來區別某個具體的物件,標識可以有能力來區別兩個引用是否指向同一個物件,相同物件的定義是它們的引用都指向一個單一的物件建立事件的結果。
作者認為其他特性如類Class 或方法定義Multi-methods都不適合納入新的物件定義之中,還有比如反射reflection, 靜態型別static typing, 介面interfaces, first-class classes, 併發物件concurrent objects, 同步synchronization。
一文試圖提出一種新的物件定義,以容納適應新的發展形勢。
新的物件定義是:An object is a first-class module that is invoked polymorphically
物件是能夠被多型呼叫的頂級模組。
這裡模組module定義可以是傳統語言的類Class,也可以是函式語言的函式function。這樣,物件導向定義比以前更加寬廣,可以包含Scala等新的函式語言。
多型性polymorphically被定義成執行呼叫方式,而傳統OO語言的繼承只是其中一個程式碼機制的實現,在執行時實現多型,包括執行時的Mixin實現,在不改變不變動原來程式碼情況下將新的程式碼混入執行。這就更加側重執行時的物件定義,而不是傳統意義上編碼階段的物件定義了。
作者還總結了物件哪些特性是物件的重要本質特性,其中最重要的是可變狀態Mutable State
,值物件是一種不可變物件,大部分函式語言試圖透過迴避可變狀態來實現高併發效能,但是這也許有些激進,因為可變狀態的應用越來越多。
我們有辦法從可變性分離出不變性,我們也有辦法去控制可變性(先容納再控制的哲學),比如在GOF設計模式中只有State, Memento, Observer, Decorator, 以及Chain or Responsibility 和 Adapter都需要可變性. 透過模式,我們達到重點分界可變狀態和不可變狀態,然後圍而分別殲之的策略,這樣,不可變的安全區域才會變得更加廣闊,變成一種預設語境。
作者將標識Identity也歸為物件必須的特性,在領域驅動設計DDD中我們知道實體的特點是標識,用來區別某個具體的物件,標識可以有能力來區別兩個引用是否指向同一個物件,相同物件的定義是它們的引用都指向一個單一的物件建立事件的結果。
作者認為其他特性如類Class 或方法定義Multi-methods都不適合納入新的物件定義之中,還有比如反射reflection, 靜態型別static typing, 介面interfaces, first-class classes, 併發物件concurrent objects, 同步synchronization。
相關文章
- 物件導向中類和物件的定義是什麼?物件
- python中物件導向_類_物件的概念與定義Python物件
- 物件導向:類的定義和繼承的幾種方式物件繼承
- C#學習筆記(一)--- 物件導向的思想和類的定義、物件的建立C#筆記物件
- JavaScript物件導向—物件的建立和操作JavaScript物件
- 再和“物件導向”談戀愛 - 物件簡介物件
- “程序導向”和“物件導向”物件
- 物件導向-物件導向思想物件
- js物件導向程式設計:如何定義常量?JS物件程式設計
- 物件導向的基本理論1:類和物件物件
- 簡單計算器的程式導向實現和麵向物件實現對比物件
- java的物件導向Java物件
- JavaScript的物件導向JavaScript物件
- 從物件導向到模式再到真正的物件導向 (轉)物件模式
- 物件導向,搞定物件物件
- 解釋下什麼是物件導向?物件導向和麵向過程的區別?物件
- JavaScript物件導向—繼承的實現JavaScript物件繼承
- 物件導向:簡單的我期待美好的你物件
- javascript的物件導向的繼承實現JavaScript物件繼承
- 程式導向和麵向物件的對比(轉)物件
- 物件導向和麵向過程的區別物件
- 困惑:程式導向和麵向物件的結合?物件
- 物件導向物件
- Javascript 物件導向中的建構函式和原型物件JavaScript物件函式原型
- 物件導向和麵向過程物件
- Golang 中的物件導向Golang物件
- JavaScript 的物件導向(OO)JavaScript物件
- 更多物件導向的JavaScript物件JavaScript
- Java:Java的物件導向Java物件
- 物件導向的點名器物件
- Perl的物件導向方法物件
- PHP 物件導向 (九)物件導向三大特徵PHP物件特徵
- JAVA物件導向基礎--物件導向介紹Java物件
- php中的程式導向與物件導向PHP物件
- Python物件導向基礎:設定物件屬性Python物件
- 簡單模擬javaScript物件導向JavaScript物件
- Lua 中實現物件導向物件
- js物件導向設計---建立物件的方式JS物件