1. 程式人生 > >談面向物件程式設計的可替代性

談面向物件程式設計的可替代性

面向物件程式設計是基於”事物屬性和方法有共性”的前提下才能最大化發揮其效用的。

如果一個系統中有共性的類不多,無法/沒必要進行抽象,那就不適合使用這一程式設計模型。因為類例項化需要大量運算和記憶體。此時,使用面向過程的語言更合適。面向過程語言中所有方法都是靜態的,無需例項化便可隨意呼叫,佔用記憶體和CPU時間更少。需要解決的問題是:

  1. 變數、方法的作用域問題
  2. 並行時衝突的問題
  3. 基類與子類例項變數數不同

    • 對於問題1,在可信任的程式設計環境中不必考慮惡意篡改和呼叫;即使考慮,也可以使用語言提供的機制(閉包、返回函式、模組等)進行規避;
    • 對於問題2,可以考慮使用單執行緒語言(如js)或鎖(語言提供或自己實現)進行規避;
    • 對於問題3,在面向過程程式設計中,設計方法時往往會保持純函式特性,如果函式需要用到什麼變數,通過函式引數定義傳入,函式中間不引用任何實參以外的變數,因此便沒有了成員變數的必要;

在我的實踐中,一個複雜的全量業務使用面向過程式nodejs實現時,執行時記憶體佔用也不過20M,但一個簡單業務的java實現會輕易就超過50M.