タグ付けされた質問 「object-oriented」

システムを、モジュール方式で制御および操作できるオブジェクトのセットとしてモデル化できるようにする方法論

5
DIを使用する場合とJavaで自分を作成する場合
私はさまざまな言語でまともな量のOOPを使用していますが、Javaはかなり新しいものです。 私はクラスのコード内に多数のオブジェクトが作成される多くのチュートリアルを読んでいますが、それらを実行しようとしていますが、チュートリアルでクラスのバージョンを構築します。クラス自体。 しかし、Javaは私が使用した他の言語とは異なり、ほとんどすべてがオブジェクトです。文字通りすべてを注入すると、結果は非常に複雑で追跡が困難になります。 明らかに、あなたはStringオブジェクトをインジェクトしないでしょう、そしてインジェクトしない他のオブジェクトがあると思いますが、行がどこに行くべきかわかりません。どの時点で、DIは正しいことをやめ、いつ負荷がかかり始めるのでしょうか?何を注入し、何をインスタンス化するかを実用的にどのように決定しますか? 参考までに、私が実行しているチュートリアルは、単純なクライアントを構築するためのhttp://edn.embarcadero.com/article/31995およびhttp://docs.oracle.com/javase/tutorial/networking/sockets/clientServer.htmlです。サーバ。私はそれらを行ごとにコピーしていませんが、ベストプラクティスに従う同等のクラスを作成しようとしています

3
単一のオブジェクトが複数の変数よりも優先されますか?
タイトルに意味を込めるのはかなり大変でしたが、コードに入れるのは簡単です。 C ++ これは int offset_x = 10; int offset_y = 40; ... element.move(offset_x, offset_y); これよりも優先されますか? Vector<int> offset(10, 40); ... element.move(offset.x, offset.y); (Vector std::vectorはとは異なり、2Dベクトルです。このクラスには、やのようにnormalize()、ここでは不要な多くのメソッドがあります。これscale()には、より基本的なPointクラスが必要ですか?) JavaScript これは var offsetX = 10; var offsetY = 40; ... element.move(offsetX, offsetY); これよりも優先されますか? var offset = {x: 10, y: 40}; ... element.move(offset.x, offset.y);

2
ファサードとしてのドメインサービス
C#を使用した.NETドメイン駆動設計:問題-設計-解決策を読んだところ、作成者が各集計ルートのドメインサービスを作成していることに気付きました。 ただし、ドメインサービスは対応するリポジトリのファサードにすぎませんでした。たとえば、これは彼の本のアプリケーションのコードサンプルです。 public static class CompanyService { private static ICompanyRepository repository; private static IUnitOfWork unitOfWork; static CompanyService() { CompanyService.unitOfWork = new UnitOfWork(); CompanyService.repository = RepositoryFactory.GetRepository<ICompanyRepository, Company>(CompanyService.unitOfWork); } public static IList<Company> GetOwners() { return CompanyService.GetAllCompanies(); } public static IList<Company> GetAllCompanies() { return CompanyService.repository.FindAll(); } public static void SaveCompany(Company company) { CompanyService.repository[company.Key] …

1
一般的なデータをより具体的な形式で保存するためのAPI設計は何ですか?
私が取り組んでいるプロジェクトでは、ウィジェットに関するメッセージをメッセージキューを介して送信し、XMLとしてキューにシリアル化します。XMLスキーマには、ウィジェットタイプ、コマンド名、宛先など、これらのウィジェットメッセージのすべてのタイプに共通のプロパティのタグが含まれています。また、任意のサイズのキーと値のペアのリストを含めて、特定のタイプのウィジェットメッセージにのみ関連するプロパティを保存することもできます。WidgetMessageクラスは、このデータをカプセル化し、WidgetMessageXmlWriterそしてWidgetMessageXmlReaderクラスは、XMLにしてから直列化を提供します。 特定のメッセージをカプセル化するクラスをいくつか作成しました。たとえばFooPlaySoundMessage、「Foo」ウィジェットやBarSetLightPatternMessage「Bar」ウィジェットなどです。これらはそれぞれ、クラスとの間で変換するためのToWidgetMessageインスタンスメソッドとFromWidgetMessage静的メソッドを持っていますWidgetMessage。メッセージの各ファミリは、そのウィジェットタイプの抽象クラスから継承されます。たとえばFooMessage、and BarMessageはWidgetMessageMappingクラスから継承されます。これは、変換のためにサブクラスによって使用される共通のメッセージプロパティと保護されたメソッドを格納します。これらのクラスはWidgetMessage、キーと値のコレクションプロパティと関連するメソッドを継承したくないため、継承しません。単純なキャストではなく変換が必要です。 私はAPIの単純さを気に入っています(例:)が、FooPlaySoundMessage msg = FooPlaySoundMessage.fromWidgetMessage(widgetMessage)機能を共有するために基本クラスで保護されたメソッドを使用し、それを公開するために静的メソッドを使用しなければならないという事実は、別個のクラスまたは2つが関与する必要があるのか​​と疑問に思いますここ(WidgetMessageXmlWriterおよびと同様WidgetMessageXmlReader)。一方、OOPのポイントの一部は、データとメソッドをグループ化して、「ダムデータオブジェクト」を回避することだと思いました。 それで、データオブジェクトに変換メソッドを追加することによって正しいアイデアを持っていますか、それともその機能を別のクラスに抽出する必要がありますか? 更新: 上記の現在の設計の試みのすべての詳細において、私が解決しようとしている問題を十分に明確に説明していなかったと思います。 要約すると、強く型付けされたプロパティと、他のカスタムデータを格納するためのキーと値のペアのコレクションを持つ「ジェネリック」DTOクラスがあります。キーと値のペアが厳密に型指定されたプロパティに置き換えられていることを除いて、汎用DTOと同じデータをすべて格納するカスタムデータのセットごとに、いくつかの特殊なDTOクラスが必要です。これら2つのタイプのDTO間で変換するための最良の設計は何ですか?

3
値ではなく「$ this」を返すクラスメソッドを持つことは、基本的な原則ですか、それとも非常に望ましいですか?
私は本当にOOPを学び始めたばかりです。私は約1年前に開始し、おそらく15,000行を書きました。しかし、他の人のOOPを見た経験はほとんどありませんでした。 ほとんどのクラス関数は値を返すか、クラスのプロパティを変更してtrue / falseを返します。値を返すものの一部は、その値をクラスプロパティに保存します(クラスプロパティが既に設定されているかどうかを最初に確認した後、データベースの呼び出しを回避できます)。 今私はMagento / Zendで多くの掘り下げを行っており、それらのクラスメソッドの多くが "$ this"を返すことに気づきました。私が理解しているように、通常の関数とは異なり、$ thisを返すクラスメソッドは値ではなく参照によって動作するため、コピーではなく、最初に開始したのと同じオブジェクトを取得できます。 $thisもっとやりたいことを返すのですか?コードの保守と使用が容易になりますか?$thisクラスメソッドをチェーンするために戻り値は必要ですか?

2
DDD:サービスに2つのリポジトリーが含まれています
1つのサービス内に2つのリポジトリを持つ方法は正しいですか?それはアプリケーションまたはドメインサービスですか? Passport(政府ID)オブジェクトを含むべきPassengerオブジェクトがあるとします。PassengerRepositoryからPassengerを取得しています。PassengerRepositoryはサーバーへのリクエストを作成し、受信したデータを解析してリポジトリ内に保存するよりもデータ(json)を取得します。 PassportをEntityとして保存してPassportRepositoryに置きたいのですが、パスワードに関するすべての情報に、上記で受け取ったものよりもjsonの内部が含まれているため、混乱しました。 removePassport, addPassport, getAllPassengerなどのいくつかのメソッドでPassengerRepositoryとPassportRepositoryを含むPassengerServiceを作成する必要があると思います。 更新: したがって、より良い方法はPassportをVOとして表し、すべてのパスポートをPassenger集約内に格納することだと思います。ただし、別の質問があります。管理乗客のパスポートのメソッド(メソッドはサーバーAPIを呼び出す)をどこに置くべきですか。乗客の集合体のほうがいいと思います。

3
PHPを使用する場合の(null!= $ object)と($ object!= null)の(ある場合)違いは何ですか?
私はJavaに慣れているので、条件は左から右に解釈されると常に考えています。つまりnull != $obj、$obj != null これは、PHPには当てはまらないようです。 常にnull左側から始めると、PHPで何か問題がありますか?Javaからの動作を維持できますか、それともPHPの条件を処理するときに何か他のことをするようにトレーニングする必要がありますか?

3
プロトタイプベースのOOPの基本を理解するための簡単なJavascriptコード[終了]
休業。この質問には、より焦点を当てる必要があります。現在、回答を受け付けていません。 この質問を改善してみませんか?質問を更新して、この投稿を編集するだけで1つの問題に焦点を当てます。 5年前休業。 私はしばらくJavaScriptを知っていますが、私はヘビーユーザーではありませんが、ネットスケープが私のブラウザだった頃から初めて知っていました。私は主なことをほとんど理解していますが、JavaScriptによるOOPへのアプローチは典型的なものであるため、把握するのに問題があります。 これに追加する1つの問題は、物事は複数の方法で行うことができるようです。ここでは、すべての例をテーブルに載せているため、本があまり役に立たないところです。 最初に必要なのはそれを行う唯一の方法です。もし誰かがプロトタイプのOOPモデルがどのように機能するかを見ることができる例の最も単純なコードで私を助けることができるなら? 役立つために、コードは継承されたオブジェクトを持ち、親のプロパティとその継承されたプロパティと親の関数にアクセスし、親の関数を上書きし、オブジェクトが他の2つのオブジェクトを継承する多重継承のインスタンスを持つ必要があります。

5
抽象DAL-内部クラスでインターフェイスを使用しますか?
データアクセスレイヤー(DAL)と緊密に結合されたビジネスロジックレイヤー(BLL)があります。次のように呼び出します。 using (FooData data = new FooData()) { data.DoSomething(); } internalBLLだけがDALにアクセスできるように、すべてのデータクラスはであり、それらはロジッククラスと同じアセンブリにあることに注意することが重要です。 (ユニットテストを容易にするために)これらを分離するための1つのアイデアは、IFooDataのようなIDataClassインターフェイスを作成することです。インターフェイスを実装するためにデータクラスをパブリックにする必要があるため、最初は問題だと思いました。ただし、メソッドをパブリックにする必要がある場合でも、データクラスを内部に保持できるはずです。 public interface IFooData { void DoSomething(); } internal class FooData : IFooData // Notice the class is internal { public void DoSomething(); // Method is public, but that's ok because class is internal } したがって、メソッドがパブリックであっても、クラス自体は内部であるため、BLLアクセスのみを許可する必要があります。 このアプローチには本質的に問題がありますか?DALを公開して世界に公開することなく、ユニットテストのためにDALを抽象化するより良い方法はありますか?

4
IDと変更可能な永続状態を持つエンティティは、関数型プログラミング言語でどのようにモデル化されますか?
この質問(ピートによって書かれた)への回答では、OOPとFPに関するいくつかの考慮事項があります。特に、FP言語は、同一性と変更可能な状態を持つ(永続的な)オブジェクトのモデリングにはあまり適していないことが推奨されます。 これが本当かどうか、つまり、関数型プログラミング言語でオブジェクトをモデル化する方法を考えていました。Haskellの基本的な知識から、モナドはなんらかの方法で使用できると思いましたが、このトピックについては明確な答えを出すのに十分な知識がありません。 それでは、アイデンティティと変更可能な永続状態を持つエンティティは通常、関数型言語でどのようにモデル化されますか? ここに、私が考えていることを明確にするための詳細をいくつか示します。(1)データベーステーブルからJavaオブジェクトにレコードを読み取る、(2)さまざまな方法でオブジェクトを変更する、(3)変更されたオブジェクトをデータベースに保存できる、典型的なJavaアプリケーションを取り上げます。 これはどのようにしてHaskellに実装されますか?最初にレコードをレコード値(データ定義で定義)に読み込み、この初期値に関数を適用してさまざまな変換を実行し(各中間値は元のレコードの新しい変更されたコピーです)、最終的なレコード値を書き込みますデータベースに。 これで全部ですか?各時点でレコードの1つのコピーのみが有効/アクセス可能であることをどのように確認できますか?同時にアクセスできるように、同じオブジェクトの異なるスナップショットを表す異なる不変の値を使用したくない場合があります。


4
すでにクラスとインターフェースがあるのに、なぜ概念(総称プログラミング)が考案されたのですか?
また、stackoverflow.com: STLの概念が存在する必要があり、実際にそれらがドキュメント化された(人間の)概念のみであり、現時点でC ++コードに変換できなかった場合に、それらを「クラス」または「インターフェース」と呼ぶのはばかげていると私は理解しています。しかし、言語を拡張して概念に対応する機会を与えられたとき、なぜそれらは単にクラスの機能および/または導入されたインターフェースを変更しなかったのですか? 概念はインターフェース(データのない100%抽象クラス)と非常に似ていませんか?それを見ると、インターフェースには公理のサポートが不足しているように見えますが、公理はC ++のインターフェースに導入されている可能性があります(概念を引き継ぐためのC ++でのインターフェースの仮定の採用を考えると)。このようなC ++インターフェイス(自動インターフェイスLessThanComparable、だれでも)に自動コンセプトでさえ簡単に追加できると思います。 concept_mapは、Adapterパターンとよく似ていませんか?すべてのメソッドがインラインの場合、アダプタは基本的にコンパイル時を超えて存在しません。コンパイラーは、インターフェースへの呼び出しをインライン化されたバージョンに置き換えるだけで、実行時にターゲットオブジェクトを直接呼び出します。 静的オブジェクト指向プログラミングと呼ばれるものを聞いたことがあります。これは、本質的に汎用プログラミングでオブジェクト指向の概念を効果的に再利用し、実行オーバーヘッドを発生させることなくOOPのパワーのほとんどを使用できることを意味します。なぜこのアイデアはさらに検討されなかったのですか? これが十分に明確であることを願っています。私がそうでなかったと思うなら、私はこれを書き直すことができます。私に知らせて。

7
OOPをMATLABプログラマーに説明する方法は?[閉まっている]
休業。この質問には、より焦点を当てる必要があります。現在、回答を受け付けていません。 この質問を改善してみませんか?質問を更新して、この投稿を編集するだけで1つの問題に焦点を当てます。 6年前休業。 私には、電気工学、物理工学、機械工学のバックグラウンドを持ち、「OOP」とは何なのかについて知りたい友達がたくさんいます。彼らはすべてMatlabをよく知っているので、基本的なプログラミングの背景があります。しかし、OOPが導入する概念の恩恵を受けることができる複雑な型システムを把握するのは非常に困難です。 誰かが私にそれを説明しようと試みることができる方法を提案できますか?私自身はMatlabに慣れていないので、類似点を見つけるのに苦労しています。形や動物のような単純な例を使用するのは、それらのエンジニアにとって少し抽象的すぎると思います。これまでに、Matrixインターフェイスと配列ベースの/スパース/あらゆる実装を使用してみましたが、それはうまく機能しませんでした。おそらく、Matlabでさまざまなマトリックスタイプがすでに十分にサポートされているためです。

8
STLはOOで実装されていますか?
Adaptor、STLに実装されたIteratorなど、いくつかの設計パターンがあります。 それは、STLがOOの概念で実装されているということですか? OOとC ++のテンプレートパーツの関係は何ですか? オブジェクト指向を正当化する仮想メンバー関数がテンプレートと矛盾することを知りましたが、これは正しいですか?

6
安全のためにカプセル化はどのように使用されますか?
OOPを学習しています。私はカプセル化について多くのことを学びましたが、読むほど、混乱しました。 私は(プライベートにすることで)データを隠し、プロパティまたはメソッドとしてクラスのユーザー(他の開発者)に公開することを理解しています。また、カプセル化によって詳細を隠すことも理解しています。 記事(http://www.csharp-station.com/Tutorial/CSharp/lesson19)で私は読んだ: 記事の要約 オブジェクトを設計するときは、他の人がそれをどのように使用できるかを考える必要があります。最良のシナリオでは、オブジェクトを使用するすべてのプログラムが適切に設計され、コードが変更されることはありません。ただし、実際にはプログラムは頻繁に変更され、チーム環境では多くの人が一度に同じコードに触れます。したがって、オブジェクトがどのように自然のままの画像だけでなく、間違って行くことができるかを検討することは有益である必要があります使用すること。 BankAccountオブジェクトの場合は、オブジェクト外のコードが10進数のAmountフィールドまたは文字列CustomerNameフィールドにアクセスできる状況を調べます。コードが作成された時点で、すべてがうまく機能します。ただし、開発サイクルの後半では、情報間の関係(または内部状態の定義を変更する他の有効な理由)を複製したくないため、BankAccountオブジェクトは文字列CustomerNameではなくint CustomerIDを追跡する必要があることに気付きます。 。このような変更は、元々設計されたとおりに(CustomerNameが文字列である)BankAccountクラスを使用するように構築されているため、コードに波及効果を引き起こし、アプリケーション全体でその状態にアクセスするコードを変更する必要があります。 カプセル化のオブジェクト指向の原則は、このような問題を回避するのに役立ち、メソッド、プロパティ、インデクサーなどの型メンバーを介して内部状態を非表示にし、アクセスを抽象化できます。カプセル化は、オブジェクト間の結合を減らし、コードの保守性を向上させるのに役立ちます。 質問 カプセル化は、コードに変更を加えるとき、およびその波及効果からどのように役立ちますか。データメンバーの場合、その型をintからfloatに変更すると(プロパティを使用してこれを公開している場合でも)、このコードを既に使用している変数の型を変更する必要があります。 カプセル化がこのような変更にどのように役立つかを教えてください。 このヘルプとガイダンスをありがとう。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.