我正在嘗試使用OOP範例設計一些簡單的現場模擬。我面臨的問題是,由於缺乏這種方法的經驗,我不知道如何以自然的方式定義「正確」的對象及其關係。因此,我的問題更接近於軟件架構,而不是更多的技術「如何實現這個或那個」。請注意,我正在做這個練習,正是爲了瞭解這個編程範例。如何在簡單的物理模擬中設計有意義的對象及其關係
模擬試圖解決空間2D空間中粒子之間的相互作用(碰撞,吸引等)。我想到的第一個對象是Particle
。我已經實現了這個類的位置,速度,質量等。我創建了方法來啓動它們,更新它們的位置(根據一些物理規則),甚至在畫布中繪製它們。現在,當設置物理常量或繪圖參數(畫布大小,窗口數量,每秒幀數等)時,我的問題就出現了。現在我使用全局變量,例如重力或畫布大小。這就是人們在非OOP方法中所能做到的,並且它的工作原理很遠。但我一直在想如何用一個純粹的面向對象來處理粒子之間的共享參數。我可以預見各種選擇。
- 我可以使用圖形參數創建類
Canvas
,並使用常量(例如重力)創建Universe
。然後,類Particle
將是一個擴展類。但我應該從哪個遺產中獲益呢?儘管如此,該課程將得到擴展,但不會是對象本身... - 另一個選項可能是創建
Universe
和Particle
作爲獨立的類。然後,我會通過創建一個唯一的Universe對象來關聯它們。每個粒子將包含一個指向這樣的Universe對象的指針,所以他們可以訪問物理參數。我不確定這個指針的方法是甚至是OOP ...
雖然我知道有很多方法可以做到這一點,我不知道是否有一個更直觀和「標準「至少從學術的角度來看。我想它不包含在我提出的解決方案中,所以任何關於如何在這種簡單模擬中設計結構的暗示都將非常受歡迎。
小心:OOP和性能可能難以結合。 http://programmers.stackexchange.com/questions/125753/does-object-orientation-really-affect-algorithm-performance –