2011-06-29 53 views
0

如果我必須爲幾何Shape層次結構創建OOP模型,那麼考慮Point類也是最好的?Shape模型的正確層次

謝謝。

+0

你打算使用形狀爲?他們應該有哪些共同的行爲,他們的行爲應該如何區別? –

+0

我想模擬一個2d形狀(圓形,矩形等)3d形狀(球體等)的系統 – xdevel2000

+0

xdevel2000:是的,但系統是什麼?面向對象建模是一項應該完全由您感興趣的行爲驅動的活動。在面向對象設計中對所有關於真實世界的模型進行建模是不可能也沒有意義的,您需要 - 也應該 - 只模擬對於您。爲此,您需要確定您正在設計的系統的目的。 –

回答

0

使用java.awt.Shape怎麼樣?

+0

是的,但我想創建一個用於教育目的 – xdevel2000

0

如果你想完全封裝形狀的想法,它不應該是一個層次結構,因爲宇宙中有無限多的形狀。相反,它應該只是一個Shape類。它應該由一系列線條和曲線組成。然後,你可以有方法來檢查它是否符合特定的形狀定義,例如IsCircle()IsSquare()等...

您也可以有方法和/或構造函數,將其設置爲特定類型的形狀。

0

所有形狀都可能實現IShape接口。 IShape將需要Area()方法和IsIntersectingWith(IShape otherShape)方法。這個簡單化的觀點雖然提出了一些關於如何實現動態分派的其他問題(三角形/三角形交集需要與三角形/分段不同的算法)。

這當然假設你實際上需要這個功能。假設一個面向圖形的形狀庫,您可以定義像Rotate,TranslateScale這樣的轉換。您也可以強制使用Union,Intersect或其他任何設置操作(但這兩者可以表達您可能需要的所有內容)。

你也可以基於計算幾何的東西,並提供方法功能,將任何IShape轉換成Polygon

我的意思是,可以通過IShape執行的功能應該遵循預期的用途。如果你沒有任何預期的用途(因爲它的教育開始),你應該使用作爲練習本身的一部分,或作爲發現領域(如何使用,或使用,我們可以表達所有這些功能在一個界面中,或者我們應該把它分成很多)