從程式導向到物件導向
物件導向作為指令式程式設計的主流程式設計模型,佔有著非常重要的地位,關於物件導向的書籍可謂汗牛充棟,一說OO就是關於封裝,繼承,多型,張嘴就是設計模式,普通的模型吹的神乎其技。
開始: 我們會定義一堆的過程,封裝成各種庫。
然後:程式越寫越大,我們又開始寫起了框架,封裝常用的功能。
Function (f,x){
y = f(x);
return y;
}
在上述的程式碼中,我們重用的是Function這個函式。而Function這個函式又接受另外一個函式作為參 數,並在Function函式體內對這個過程引數進行了呼叫。 變化的部分是引數f,叫做回撥函式(callback)。 上述的簡化程式碼實際上是一種函數語言程式設計語言(Functional Programming Language)的 表達方式,函式名(過程名)可以直接作為引數傳入到另一個過程中。命令式語言一般不允許這麼做,你必須 傳入一個特殊的指定型別。
C語言中,我們通過函式指標來將函式名作為引數傳給另一個函式。
指標是什麼呢,就是一個記憶體單元中儲存了另外一個記憶體單元的地址編號。
那些蹩腳的概念,傳值,傳址,形參,實參 能有什麼意義?引數值無論如何就是個值而已,說它是記憶體單元地址編號不可以麼。。函式指標作為回撥函式去重複利用,學習的話讀《深入理解C指標》
就不錯。
C語言中複合結構是struct型別,不過他是單純為資料的屬性設計的,並不能進行函式的定義,擴充套件之後就有了class。通過class我們可以定義物件,既有資料成員又有成員函式。
Static method 可以直接通過類來使用,不需要例項化。
Class內部的method第一個引數都指向本物件的一個物件例項,
java中我們用this,Python中非常直觀,就是self
,所以我覺得Python物件導向的部分是非常值得學習的。毫無疑問這是編譯器或直譯器設定的,不需要我們去插手。
說起物件導向的特性,多型是最神祕的。 查閱資料後得知,
在java,Python等比較高階的面嚮物件語言中,所有方法都是虛方法, 虛方法的呼叫是在執行期決定的,具有物件導向程式設計的多型性,真正實現了定義與實現相分離的特性。 虛方法在物件的記憶體結構是存在於一個叫做虛表(Virtual Table,簡寫為VTable)的結構中的。物件的記憶體結 構中的最後一格內容就是虛表的地址。計算機每次呼叫虛方法的時候,需要進行兩次地址對映,首先,找到對 象記憶體結構中的虛表地址,然後,再從虛表中找到對應的虛方法。 虛表(VTable)是面嚮物件語言的非常重要的概念。基本上,所有的面嚮物件語言都是基於虛表結構來實現 的。正是由於二級對映的虛表的存在,才實現了物件導向程式設計的多型特性,從而實現了定義與實現相分離的特 性。
虛表中有兩份表格,一份物件記憶體結構表,一份虛表,物件記憶體結構表最後一行就是虛表的地址。 Java中的interface和class展示的就是定義與實現相分離的典範。
PS: 接下來談的就是設計模式了。 (待續.......)
相關文章
- 物件導向與程式導向物件
- 程式導向與物件導向物件
- 物件導向-物件導向思想物件
- python-程式導向、物件導向、類Python物件
- php中的程式導向與物件導向PHP物件
- “程序導向”和“物件導向”物件
- 20200820 - 程式導向和麵向物件物件
- Java基礎01 從HelloWorld到物件導向Java物件
- 從入門到入獄------物件導向(二)物件
- 從 Java 到 Scala(一):物件導向談起Java物件
- 物件導向物件
- 物件導向程式設計物件程式設計
- JAVA物件導向基礎--物件導向介紹Java物件
- PHP 物件導向 (九)物件導向三大特徵PHP物件特徵
- 物件導向,搞定物件物件
- PHP物件導向PHP物件
- 物件導向 -- 反射物件反射
- JavaScript 物件導向JavaScript物件
- JS物件導向JS物件
- Java物件導向Java物件
- Python——物件導向Python物件
- 物件導向--下物件
- scala物件導向物件
- 物件導向(下)物件
- Python物件導向Python物件
- 物件導向(oop)物件OOP
- [Java物件導向]Java物件
- python 物件導向Python物件
- Java — 物件導向Java物件
- 物件導向(上)物件
- Python物件導向程式設計Python物件程式設計
- 程式設計思想 物件導向程式設計物件
- js物件導向程式設計JS物件程式設計
- 十三、物件導向程式設計物件程式設計
- 十六、物件導向程式設計物件程式設計
- Python 物件導向程式設計Python物件程式設計
- 好程式設計師Java教程分享Java物件導向與程式導向程式設計師Java物件
- JS物件導向程式設計(一):物件JS物件程式設計
- 程式導向和麵向物件的對比(轉)物件