2017年7月24日 星期一

類別成員函數 (Class member variables) 常見的分類

在編寫Class的時候需要define很多member variables(又叫fields),供Class的member functions(又叫method)使用。但經常會看到一些比較大的Class被人加了許多member variables(從數十個到上百個都有),而且都是亂排,只看到一堆排列得沒有意義的variable會讓人很難了解這個class想做甚麼。寫Class寫多了見多了的時候會覺得其實member variable來來去去也是那幾個作用,所以我自己寫Class時通常會把member variable分成下面四類,同類的會放在一起,方便以後查看,也能提醒自己別漏了initialize某些variable:

Data Containers

裝著一些程式所需要用到的資料,尤其是一些複雜的資料結構(Data Structure),如map、list、queue。

Resources

一般是一些來自Library Class 的 Instance,當中常需要用到一些作業系統的API,或者IO用。
例子:

  • Socket (供UDP/TCP連接用)
  • Event
  • Critical section
  • File

States

用來記錄目前程式的狀態。這些variable一般都需要在Constructor initialize,避免之後第一次存取的時候出錯。
例子:

  • 上一次執行某程序的時間
  • 現在程式運行到哪一個階段 (Stage)
  • 目前是否連接著伺服器

Config

程式一開始的時候會載入的設定,一般來説之後較少或不會更改