問題タブ [object-oriented-analysis]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - Java のインターフェースに関するクエリ
インターフェイス A とインターフェイス B の 2 つのインターフェイスがあるとします。
インターフェイス A にはメソッドがpublic int data()
あり、インターフェイス B にはメソッドがありますpublic char data()
。
クラス C にインターフェイス A と B の両方を実装すると、コンパイラでエラーが発生します。これはJavaの欠陥ですか?これが、複数のクラスを拡張することが許可されていない主な理由の 1 つであると思いますが、この問題がまだ続くのに、なぜ複数のインターフェイスを実装することが許可されているのでしょうか?
java - スレッド セーフ クラスとすべての静的メソッドを含むユーティリティ クラス
スレッド セーフとして文書化されているクラスを見るたびに、なぜそれが java.lang.Math などのすべての静的メソッドを持つユーティリティ クラスとして設計されていないのか疑問に思います。
単一のクラスで状態がなく、チェーンされたメソッドのようなシナリオでクラスを設計するときはいつでも、有効な推進力がありません。
例 1 : 「スレッドセーフ フィールド」 S を持つクラス A はどうですか。つまり、オブジェクト「S」自体はスレッドセーフです。クラス A の S のようなすべてのメソッドとフィールドを静的であると宣言できますか。
私の説明が十分に明確であることを願っています。どうか明らかにしてください。
注: javabeans、プロパティ保持クラスなどを除外します。私の質問は、入力パラメーターに基づいていくつかのアクションを実行するクラスに関するものでした。他のクラスも使用する必要があるかもしれません。
質問を編集したことをお詫びします。最初のドラフトは完全にあいまいでした。
oop - ビジネス エンティティの継承: データ アクセス レイヤーから基本クラス タイプを要求するときのサブクラス属性へのアクセスと表示
(私は比較的経験の浅いプログラマであることを心に留めておいてください。OOP には継承に関する非常に多くの哲学があるため、この質問はあまりにもオープンエンドと見なされる可能性があることを認識しています。この質問は、私の思考プロセスに向けられています。つまり、経験豊富なプログラマーにとって正しいと思われるような方法でこのシナリオに取り組んでいますか? 私の考えが明らかに正確または不正確であることは何ですか?)
私は、コンピューター、プリンター、スイッチ、ルーター、携帯電話、ハード ドライブ、およびその他のデバイスを含む IT ハードウェアに関する情報を追跡するインベントリ システムを設計しています。私はデータベースを設計しており、現在フロントエンド アプリケーションを計画中です。アプリケーションでデータ アクセス レイヤー、ビジネス ロジック レイヤー、およびビジネス エンティティを使用する予定です。私はまだ概念的な計画段階にあり、この時点で実装の詳細を検討するべきではないことを認識していますが、私の心は前に進む傾向があります。検索機能が動作するはずの方法は、ユーザーが検索条件を入力して検索を実行することです。一致するデバイス (または一致する唯一のデバイス) のリストが返されます。デバイスのリストはある種のリスト ビューで表示され、デバイスを選択すると詳細ビューが表示されます。
最終的なビジネス エンティティで継承を使用するとアプリケーションにメリットがあるのか、不要な複雑さを追加するのか、それとも単純に間違っているのか疑問に思っていました。私の最初の考えは、図のようなセットアップです。
(これは実際の設計ではなく、この投稿の単純化された概念にすぎません) タイプ固有の属性を持つ各デバイスに加えて、任意の時点でデバイスはアクティブまたはアーカイブの 2 つの状態のいずれかになります。これをモデル化する方法がまったくわかりません。
このセットアップを使用すると、クエリがどのように機能するかを考え始めました。次のように、データアクセス層からデバイスの特定のサブクラスを照会するのは簡単に思えます。
擬似コード:
この質問を書くに至った問題は、「特定の場所からすべてのデバイスを取得する」などのクエリを処理する方法です。
基本クラスのオブジェクト参照がある場合、基本的なデバイスの詳細を表示してから、特定のデバイスの詳細を表示するにはどうすればよいですか? (クレイジーなキャストやリフレクションの使用を避けようとしています)。その場所の各デバイスには、サブタイプの特定の属性がありません。特定のデバイスに関するすべてのデータを表示したい場合は、残りのフィールドを取得するためにデータベースを再度クエリする必要があります。別のクエリを実行する必要があるのは、設計が不十分な兆候ですか? さらに、正しいタイプのデバイスをどのように判断すればよいでしょうか? おそらく、それぞれをテストする大きな switch/case ステートメントDevice.Type
属性、正しいクエリを実行し、完全なサブタイプを返し、詳細をユーザーに表示しますか? または...完全なサブタイプのオブジェクトを含む個別のリストを返し、すべてのリストを繰り返し処理してリスト ビューに共通の属性を表示し、詳細ビューにサブタイプの詳細を簡単に表示する方がよいでしょうか?
これは継承の有用なケースですか、それとも誤用ですか? 私は現在、情報過多の問題に苦しんでいます。私は OOD について可能な限りすべてを読みましたが、頭の中に非常に多くのルールとガイドラインがあり、自分が正しいことをしているかどうかわかりません。脳が吸収した情報を適用しようとしているような気がするので、間違った実装を想像しています。コードの柔軟性を維持するための抽象化へのプログラミングに関するこのすべてのビジネスについて考え続けていますが、ある時点で具体的なクラスを処理する必要がありますよね? 私の見解では、継承は属性ではなく動作に関するものです。私は実際に行動をモデル化しているわけではなく (または、私と私はそれを見ることができないのでしょうか?)、デバイスに関するデータを収集しているだけなので、それらの関係を解釈するのが難しくなっています。これらのクラスは本質的に属性の愚かなコレクションであるため、それらはすべて別のクラスであるべきだと思います。繰り返しになりますが、すべてのクラスでフィールドが重複していますが、この場合は本当に問題になるのでしょうか?
OOD、継承、構成などに関する本がたくさんあることは知っています。私はそれらの本のいくつかを読みました。私は現在、さらにいくつかを読んでおり、オンラインで調査するのに何日も費やしました。誰もが分かりやすい継承の例を便利に使用しています。果物、動物、形の例について悪夢を見ています。
私の質問を読んでくれてありがとう、そしてあなたが提供できる情報や洞察に感謝します。その他のヒント、洞察、企業秘密、埋もれた宝物への地図、耐航性のあるボートと六分儀、または役立つと思われるその他の情報をお気軽に提供してください。
c# - 抽象クラスのメンバーへのアクセス
次のクラス階層があります。
ここで、(BaseClass から継承された) DerivedClassB-Object の PropertyA にアクセスするには、次のように、オブジェクトを BaseClassA の祖先にキャストする必要があります。
これらのクラスを再構築してキャストをなくす方法はありますか? このコードはライブラリの一部であり、同僚はキャストを削除するように求めています。
目標は単純に書くことcontainingObject.BaseInterfaceObjectD.PropertyA = 42
です。
python - OOP分析/設計を提案する-私の手続き上の習慣を破る
小さなプロジェクトの演習としてOOP/OODを使用したいのですが、コーディング時に手続き型アプローチを使用することがよくあります。PythonをFlask(Webフレームワーク)と組み合わせて使用します
本質的に、私のアプリは、新しい映画のリリースのRSSフィードを読み取る一種のスパイダーです。新しい映画のリリースごとに、imdbリンクを使用して、2つの異なるWebサービス(imdbapiとTMDb)から、プロット、年、ジャンル、ポスター、およびそのような情報に関する情報を収集します。優先サービスが情報を提供できない場合は、他のサービスを使用してください。最後に、すべての情報をデータベースに保存します。次に、Flaskを使用してWebサイトに情報を表示します
今のところ、Spiderクラスを作成しました。次のメソッドが含まれています(わかりやすくするためにコードは削除されています)。
「問題」は、run_update()メソッドを使用して、すべてのステップを手続き的に実行することです。また、デザインに柔軟性がないと思います。たとえば、あるサービスの映画情報を取得できない場合、他のサービスを試してみたいのですが、これを現在の形式で実装するのは簡単ではありません。
私が考えたのは、rssfeedで見つかった各映画を表すMovieクラスを作成することです。たぶん、各映画、imdbapi、TMDbに関する情報を収集するために使用するサービスごとにクラスを作成することもできますか?
では、このようなアプリをOOP / OOD方式でどのように設計しますか?車、本、果物などの教科書で使用されている単純な例を超えていると、クラスを特定するのが少し難しいと思います。
php - ローダービューメソッドでコントローラー変数を取得しますか?
ファイルやビューなど、いくつかのものをロードするために使用される静的クラスを取得するスクリプトを作成しています。
コントローラで、ビューを取得するためにviewメソッドを呼び出します。
明らかに、この方法を使用してビューファイルのコントローラーから変数にアクセスできないため、変数をキャプチャするためにビュークラスに小さな変更を加えました。
そして、キーを変数に取り込むために次のコード行を追加しました。
しかし、ファイルをロードするメソッドを使用しているため、変数にアクセスできません。
各ファイルのインクルード試行をテストしてログに記録し、ファイルをインクルードする必要があるたびにコードを繰り返さないようにするため、ファイルをロードする方法があります。そして、ローダークラス内にローダービューがあるので、この種のすべてのメソッドを一緒に持っています。クラスを使用してファイルをロードすることをあきらめる必要がありますか?コントローラの拡張可能なクラスでローダービューメソッドを使用する必要がありますか?
先に進んでスクリプト全体を変更する代わりに、いくつかの意見を聞きたいと思います...どのようなベストプラクティスを実行しますか?または、私の問題を解決する方法はありますか?たぶん__setと__getの魔法のメソッドを使用していますか?
ありがとう、
java - オブジェクト指向設計でデータとフォーマットを分離する
私は「階層」と呼ばれるオブジェクトを持つプログラムを作成しています。これはArrayList<ArrayList<String>>
、適切なゲッターを備えた文字列()を含むリストのリストにすぎません。
ユーザーは、これらの階層の表現/フォーマットを選択できる必要があります。たとえば、階層[1,2,3,4]を{1,2,3,4}または(1-4)などとして表現するかどうかを選択できます。ファイルに書き込まれる前。
この種のデータとフォーマットの分離を行うための賢い/標準的な方法はありますか?HierarchyオブジェクトとFormattingオブジェクトだけで構成される「FormattedHierarchy」オブジェクトを作成することを考えていますが、これが適切な設計上の選択であるかどうかはわかりません。
ポインタ/ヒント/回答をありがとう。
matlab - 単一の「シード」ファイルから複数の出力ファイルを生成
みなさんおはようございます、
Matlab を使用して、これから説明することに近いことができるかどうか疑問に思うことがあります。
外部ツール (つまり、Ansys、Abaqus、またはその他のソフトウェア) を使用して、次のステップの参照として使用される「シード」リスト (ファイル拡張子 .inp、.db など) ファイルを生成します。
このシードにリストされたファイルから始めて、たとえば、シードと比較していくつかのわずかな違いを含む 200 の類似したプロジェクト ファイルを取得したいと思います。たとえば、シミュレーション時間やその他の特性です。
簡単な例を挙げます。私は現在、風力エネルギー アプリケーションの空力弾性シミュレーションを実行するソフトウェア、ブレードに取り組んでいます。たとえば、Blade は乱気流の風域を生成する機会を与えてくれます。シード コードは次のようになります。
matlab を使用して、さまざまな風速とランダム シード (UBAR、SEED) に対して同様のプロジェクト ファイルを生成し、これらのファイルを所定のサブフォルダーに保存できるようにしたいと考えています。
最後に、手がかりやアドバイスがあれば教えていただければ幸いです。次に、コーディングに適したアーキテクチャを見つけることが私の仕事になります。
ご支援いただきありがとうございます。
よろしく、フランチェスコ
java - オブジェクトが変更されたかどうかを確認する(優れたクラス設計を維持する)
「階層」と呼ばれるオブジェクトがあります。基本的には文字列のリストです。[1 234]。また、FormattedHierarchiesと呼ばれるオブジェクトがあり、ユーザーが表現したい方法で階層のフォーマットされたバージョンを常に保持する必要があります(例:(1-4)または{1,2,3,4})。
私の問題はこれです:
階層が変更されたらすぐにFormattedHierarchyを更新したい(たとえば、階層が[1 2 34]から[123]に変更された場合、FormattedHierarchyは(1-4)から(1-3)に変更されます)。
グーグルはhttp://docs.oracle.com/javase/tutorial/uiswing/events/changelistener.htmlを見つけました が、私の問題はこれです:階層にChangeListenerを実装させたい場合は、メソッド「stateChanged」を実装する必要があります。
タイプ階層は、継承された抽象メソッドChangeListener.stateChanged(ChangeEvent)を実装する必要があります
階層に新しいFormattedHierarchyを作成させることは現実的ではなく、これは優れたクラス設計ではないとも考えています。これは、階層がそのフォーマットを処理するものを実装するためです(間接的な方法ではありますが)。
この問題に対する標準的または巧妙な解決策はありますか?
php - この OOP コードは根本的に正しいですか?
私は現在、ページ テンプレートを OOP に変換しようとしていますが、ナビゲーション クラスについて思いついたことが根本的に正しくないと感じています。
- これらのメソッドのいくつかは本当に の拡張クラスに属し
drawNav
ますか? getMenuBar
->generateMenuBar
->構造はgenerateMenuItems
崩壊しすぎていませんか? だけでgetMenuBar
、すべてのコンテンツを から、および に入れるgenerateMenuBar()
必要generateMenuItems()
がありgetMenuBar()
ますか?
クラスとメソッドを呼び出す方法:
コード: