問題タブ [ooad]
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 - カプセル化についての質問 (書籍: HF OOA&D )
私はこの本を読んでいます (Head First Object Oriented Design & Analysis)。第 5 章には、それについて他に考えてもらいたい提案があります。本は言う:
「オブジェクト間で異なる一連のプロパティがある場合は、Map などのコレクションを使用して、これらのプロパティを動的に保存します。」
さらに、それを行う理由をいくつか説明します。
「クラスから多くのメソッドを削除し、新しいプロパティがアプリに追加されたときにコードを変更する必要がなくなります」.
このアプローチの利点は理解していますが、ダウンサイズもありませんか? つまり、マップを使用してこれらの情報を格納し (この例では String から Enum へのマップ)、アクセスする getProperty(String) メソッドを提供する場合、このメソッドの呼び出し元は実際にどの String が許可されているかを知る必要があります。これがなんとなく苦手。もちろん、どの入力が許可されているかは javadoc に記載されている可能性があると主張できます。
これは本当にこの種の問題に対処する方法ですか?代替手段はありますか? サブクラスが大量にあるため、継承でこれを行うのは良くないことを理解しています。これらのサブクラスは、新しいプロパティを追加するだけで何かをオーバーライドすることはありません。
php - php オブジェクト指向プログラミング
OOP についていくつか質問があります。私は上級ユーザーではありませんが、以前に経験したことがあるかもしれない問題に直面しています。
基本的に、MVC を使用して PHP プロジェクトを操作しています。クラスをできるだけ独立させようとしました。でもこれはかなり厳しいと思います。例えば:
クラス Car と User があります。ユーザーは車の情報を Web サイトに投稿します。おそらく販売するためです...
クラスUserには、基本的にユーザー情報を取得するためのgetUserがあります。
したがって、Car クラスでは、setCar、getCar、saveCar を使用できます。これらの車を表示するには、displayCars() を使用します。displayCars() では、getCar を使用して車のリストを取得できます。しかし、User::getUser を使用して、それらの車を送信したユーザーのユーザー情報を取得する必要がある場合もあります。ある意味、displayCars は User::getUser に依存しています。
それで、私はここで何をすべきですか?
oop - 2D ゲームのコード設計
基本的な 2D ゲームの主要コンポーネントを設計する方法に関するリソースが必要です。それを「エンジン」と呼びましょう。レンダラー、シーン マネージャー、エンティティ マネージャー aso をどのように設計し、どのように相互にやり取りする必要がありますか? イベント管理、リソース管理についてはどうですか...
誰かがクールな UML を持っているのではないでしょうか? それとも「チュートリアル」ですか?いくつかの一般的なヒントとヒント?
c# - 抽象クラスの適切な使用
私は .Net を使用しており、単純なマスターおよびサブクラスの設計をしています。私のマスター クラスにはほぼすべての機能が含まれており、サブクラスはマスターから値を設定するだけで済みます。マスターを抽象クラスにすることを検討していましたが、オーバーライドする必要があるメソッドはありませんが、マスター クラスは必ずしも単独で存在できるわけではないという考えを強調したいと思います。また、マスターのプロパティはサブクラスで設定する必要があることを強調したいと思います。ここでは何が適切ですか?助けてくれてありがとう!
c++ - 純粋な OOD の概念をどのように把握できますか?
純粋な OOD の概念を理解するには、まだ少し問題があります。
クラス Human があり、人間が歩く (脳が足を制御する) ときもあれば、木が消え (人間がそれに気付く) ときもある 世界に住んでいるとしましょう。
最初の 2 つのケースは本当に簡単です。
今、私はヒットメソッドで本当に悪い問題を抱えています. もちろん言っていただけると嬉しいです
ここまでは、いい (何か悪いことがあれば文句を言ってください) し、散文のように読めると思います (良い OOP コードはそうあるべきです)。しかし、どうやってヒットを OOP に移すのでしょうか? アンナがボブにぶつかり、ボブが倒れた場合、転倒の直接の原因はアンナでもボブでもない。これは、ヒット、バランスの喪失、および物理学によって引き起こされます。
この場合の選択肢は 2 つしかわかりませんが、どういうわけか、どちらもダメだと思います。
この場合、アンナはボブに「倒れます」。しかし、これではまったく意味がありません。アンナがボブの体をつかんで地面に向かって動かすわけではありません。しかし、別のオプションがあります:
この場合、ボブの体は、ヒットによって地面に倒れていることに「気づき」、地面に「移動」します。これは最初のオプションよりも優れていると思いますが、それでもどうもうまくいきません。
ですから、賢明な OOP 関係者の皆さん、私に説明してください。現実の世界では A が B の状態を変更するのに、OOP の世界では B だけが B の状態を変更する必要がある場合をどのように処理しますか?
java - オブジェクトがそのインターフェースから自分自身を削除することを許可する必要がありますか?OODは正しいですか?
私は次のものを持っています:
そのようなインターフェースで作業しているときに、Fileインスタンスで表されるエンティティを削除することにした場合(つまり、リモートサーバーから削除することを意味します)、どのようにすればよいですか?
ファイルインターフェイスのメソッドを導入する必要delete()
がありますか(情報エキスパートであり、サーバーから自分自身を削除する方法を知っている可能性があるため)?または、この関数をその作成者に委任する必要があります-インターフェイスメソッドFileService
を介して?void deleteFile(File file)
なぜ?
最初のケースがより適切である場合、オブジェクトを無効にして、次の使用を回避する方法は?
および関連:ケースをどのように処理する必要がありuploadFile()
ますか?誰がこれに責任を持つべきですか?FileServiceがSRPに違反する可能性があるためです。
ありがとう、
c++ - タイプAのデータをタイプBのフォーマットに書き込む方法
結果を生成し、特定の形式のファイルに書き込むものを実装しています。
かなり単純ですが、これを動的にしたいと思います。
いくつかのクラスを破棄します。
Data - すべての結果の
基本クラスDataFile - すべてのファイル形式タイプの基本クラス、メソッドを持っていますaddData(Data * data)
ErrorData - Data から派生し、エラーに関するデータを含みます。
InfoData - Data から派生し、一般的な情報を含みます。
XmlFile - DataFile から派生し、XML 形式のデータを含みます。
BinaryFile - DataFile から派生し、バイナリ形式のデータを含みます。
私の質問はこれです:
ErrorDataをXmlFileに書き込む方法の実装はどこに置くのですか?
答えで見たくないもの:
- Data、DataFile、ErrorDataまたはXmlFileへの新しいメンバー関数(これは、新しいDataまたはDataFile派生クラスを追加するたびにそれらを追加する必要があることを意味するため)
- 派生型への型キャスト。
- 一般的な醜さ:)
基本的な C++ の仮想化などは知っているので、特に詳しく説明する必要はありません。
ただし、あいまいさが少なくなるいくつかのコードはありがたいです。
DataWriter基本クラスを作成し、特定のタイプのDataを特定のタイプのDataFileに書き込む方法を知っているクラスを派生させることについていくつか考えましたが、その詳細については少しわかりません。
編集:
例の形でもう少し明確にします。
FormatATxtFileとFormatBTxtFileという 2 つの新しいファイル形式を用意しましょう。
InfoDataオブジェクトがあり、次のパラメーターがあるとします 。
メッセージの行番号:34
メッセージ内容:Hello World
FormatATxtFileに書き込まれたオブジェクトは、ファイル内で次のようになります。
行:34;テキスト:Hello World;タイプ:情報
FormatBTxtFileでは、次のようになります。
@Info,34,ハローワールド
データを別の形式にエクスポートする一種の方法。少なくとも今は、インポートは必要ありません。
これを使用したコードは次のようになります。
編集:
Xml およびバイナリ ファイル形式でどのような問題が発生するかを十分に明確にしていないようです。ごめんなさい。
上記と同じInfoDataオブジェクトを使用して、XmlFile 形式にプッシュしてみましょう。特定の要素の下で、次のようなものが生成される場合があります。
ErrorDataクラスに次のパラメータがあるとします。
エラーの行番号: 56
エラー テキスト: リンク: 致命的なエラー LNK1168
エラー メッセージの前の 10 行: text1...
エラー メッセージの後の 10 行: text2...
何が起こったかのログ全体: text3...
これを XML 形式にプッシュすると、まったく別のものにする必要があります。
ファイル全体は次のようになります。
iphone - Default IBAction - UISegmentControl、オブジェクト指向設計のヘルプ
データを並べ替える UITableView を持つ UISegmentControl があります。私は物事を行うことができるようにしたい:
(1) デフォルトの並べ替え (ユーザーが初めてアプリをオンにすると、最初のセグメントが選択され、そのアクションで並べ替えられます)
(2)ユーザーがテーブルロードの間にいた場所を覚えています。これが意味することは、Apple のカバーフローと同様に、別のカバーに移動すると、UITableView が再作成されるということです。そのため、ユーザーが最後にそこにいた場合、並べ替えは 3 番目のセグメントにあり、それを覚えています。
私はオブジェクト指向設計に少し慣れていません。これは、どこにでも同じ冗長なコードがないようにするための最良の推測でした: (MarkersList は NSMutableArray です)
他の 2 つのような NSString や NSNumber だけではないため、3 番目の並べ替えはまだ実装していません。これまでのところ、正しく機能していると思います。ただし、問題は (1) を実装することです。テーブルが読み込まれるときに sortByName を呼び出す必要があります。NSSortDescriptors をもう一度作成することもできますが、それは冗長なようです。これを達成するためのよりOODの方法はありますか?
(2) については、そのテーブルのインデックスを辞書に保存し、そのテーブルが読み込まれたときにそれを取得できると思います。または、それらの線に沿った何か、よくわかりません。
どんな助けでも大歓迎です。ありがとう!
c# - オブジェクト指向データ構造のアドバイス
私は、ファイルの多くの異なる構造を読み取ることができるはずのログファイルデコーダーを書いています。私の質問は、このデータをどのように表現するのが最善かということです。私はC#を使用していますが、OOPは初めてです。
例:ログファイルには、さまざまなセンサー値があります。1つのセンサー読み取り値はA、別のBと呼ぶことができます。明らかに、2つ以上のエントリタイプがあります。異なるログファイルに、ABABABABABまたはAAAAABBBBBとして保存できます。
私はこれをエントリのブロックとして説明することを考えていました。したがって、最初のケースでは、ブロックは5ブロックの「AB」になります。2番目のケースでは、最初のブロックは「A」であり、5回読み取られます。この後に「B」のブロックが続き、5回読み取ります。
これは非常に単純化されています(実際には40種類のログファイルがあり、それぞれが1つのブロックに最大40個のセンサー値を持っています)。300ブロックを超えるログはありません。
現時点では、これらすべてをデータテーブルに保存しています。エントリごとに、読み取る数のプロパティを持つ列があります。これが-1に設定されている場合、ブロック内の次の列に進みます。そうでない場合は、ブロックの終わりに到達したと見なされます。
これはすべてかなり不器用なようです。誰かがこれを行うためのより良い方法を提案できますか?