2016-02-26 43 views
1

圖像一個遊戲,你有一個董事會和董事會是由多種細胞(磚,叫他們不管你喜歡)。如何管理需要了解屬於上層環境的事情的對象?

我們有兩個班,BoardCell。董事會有一個單元格的二維數組。

如何處理這樣一個事實,即每個細胞都知道自己的事情(如何在屏幕上繪製,如果可以通過播放角色行走等等),而這些信息中的某些信息只有上層級別(如董事會所知)?例如,單元格也應該知道它在哪裏(x,y座標),但是將信息存儲在單元格(如x和y屬性)和板上(作爲數組中的索引)是多餘的。另外,例如,Cell對於瞭解它的鄰居是有用的。

什麼是在這些情況下,一個良好的面向對象設計的?

+0

抽象將是有益的吶? Board可以包含常用功能,單元可以使用Board的高級功能,並可以定義自己的功能,如getNeighbourDetails。 – Aajan

回答

1

不要存儲在這兩個類的冗餘信息。如果你描述了整個故事,我認爲兩個班都應該保持原樣。

Board應包含Cell數組你說,這將讓你的信息都在提(座標),並且將它們提供給公衆 getter函數。事情是這樣的:

class Board { 
    private: 
    Cell array[N][M]; 
    .. 
}; 

class Cell { 
    public: 
    int getX() { return x; } 
    int getY() { return y; } 
    ... 
    private: 
    int x; 
    int y; 
    ... 
}; 

當然,你可以讓他們朋友,但我不這樣做,除了一些嚴重與I/O上來。

也許,你應該開始考慮繼承太,因爲一些信息是共享的。在這種情況下,Board有權訪問它需要的數據成員,而不必提供吸氣劑的功能Cell類。

0

您可以使用Board作爲Abstract類,Cell可以在不詳細瞭解的情況下使用Board的功能,並且可以定義自己的功能。

+1

但他想要有一個「Board」類的對象,我想。 :/ – gsamaras

+1

是的,這是正確的。我沒有想到這一點。 – Aajan

相關問題