談面向對象編程的可替代性

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

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

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

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

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章