OOPを使用しているので、プラットフォームに依存しないコードを作成しようとしています。たとえば、Windows、Mac OS X、Linuxではウィンドウができますが、アンドロイドにはビューがありますので、これを抽象化しようとしています。この場合、dynamic_castよりも優れたソリューションがありますか?
私は最初のウィンドウまたは私はビューと呼ばれるビューを表現するクラスを作っ:
class View
{
public:
virtual ~View()
{}
virtual void display() = 0;
virtual void hide() = 0;
};
さて問題は、Windows上で私が決めたがある一方でAndroid上で、ビューにはタイトルがないことです別のクラスを作成する:最後に、その後
class NameableView : public View
{
public:
virtual void setName(const std::string& name)
};
をとクラスを実装:
class WindowsView : public NameableView
{
/* Windows implementation */
}
class AndroidView : public View
{
/* Android implementation */
}
次に、可能な場合にのみビューの名前を設定するコードを作成する必要があります(NameableView
クラスから継承する場合)。
どうすればこの問題を解決できますか?私は最初にdynamic_cast
について考えましたが、あまりにも多くのことを聞いたことがよくあります。dynamic_cast
はデザイン上の問題の兆候です。私はC++の初心者ですので、正しい方法がないと思われ、デザイン全体を変更する必要があります。
'setName'を' View'に実装されたno-op関数にしますか?抽象化ブレーカはそんなにありません。 – StoryTeller
*「私はプラットフォームに依存しないコードを作っていますので、OOPを使用しています。」* - それはまずは悪い考えです。 **仮想機能**のOOPのポイントは、アプリケーションの実行中に何かの実装を選択して変更できることです。 –
まったく異なるGUI環境のための抽象的な「基本コンセプト」を設計しようとするのは間違いです。より良い設計は、それぞれ独自のシステムのニーズに応じて、互いに独立してGUIを開発し、共通のビジネスロジックコンポーネントまたはバックエンドを使用可能にすることです。 –