問題タブ [oop]

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.

0 投票する
2 に答える
2462 参照

uml - visioでのオブジェクトリレーショナルダイアグラムの正しいステンシルは何ですか?

私のVisioの経験はすべて、LAN/WANのドキュメントに関するものです。私は最近、Nagios構成のオブジェクト間の関係を視覚化したいと思っていましたが、それを適切に行う方法がわからないことに気づき、より重要なことに移りました。私はこのスレッドへの応答を読んでいて、これはソフトウェア開発者が多くのことをしなければならないことであることに気づきました。

したがって、これはおそらくソフトピッチの質問ですが、Visioでオブジェクトの関係を文書化するための適切な方法は何ですか?使用するより良いテンプレートはありますか?適切なステンシルはどのステンシルコレクションに含まれていますか?

私のおそらく素朴な見方では、オブジェクトは単一の「受信」コネクタを備えた大きなボックスであり、それぞれがオブジェクトメンバーを表し、独自のコネクタを持つ複数の小さなボックスを含んでいると想像します。したがって、各オブジェクトメンバーフィールドは、メンバーのタイプのオブジェクトの「受信」コネクタに接続します。それ自体、これらのオブジェクトはかなり簡単に作成できます。私が遭遇した問題は、コネクタラインがオブジェクトを尊重せず、オブジェクトの上を走り、ひどい、使用できない混乱を引き起こしたことです。

ポインタをありがとう。

0 投票する
10 に答える
5086 参照

java - 大規模なシステムの設計をどのように開始しますか?

私は、大規模な新しいシステムの背後にある唯一の開発者になると言われています。特に、UIとデータベーススキーマを設計します。

きっと指導を受けると思いますが、靴下を脱ぎ捨てられるようにしたいと思います。その間に準備するために何ができますか?また、仕様を使用してコンピューターの前に座るときは、何を覚えておく必要がありますか?

覚えておくべきいくつかのこと:私は私の最初の実際のプログラミングの仕事で大学生です。Javaを使用します。すでに自動テストなどでSCMを設定しているので、ツールは問題ありません。

0 投票する
2 に答える
2379 参照

php - PHPの別のインターフェースから継承するメソッドを1つのインターフェースに上書きさせる

PHPで、そのインターフェイスを拡張するインターフェイスの1つのインターフェイスによって宣言されたメソッドを上書きする方法はありますか?

例:

私はおそらく何か間違ったことをしていますが、これが私が持っているものです:

通常、PHPでは、何かを拡張するときに、そこに含まれる任意のメソッドを上書きできます(右?)。ただし、あるインターフェースが別のインターフェースを拡張する場合、それは可能になりません。これが間違っていると考えていない限り...iShipperインターフェイスを実装する場合、ShipperオブジェクトにVendorオブジェクト(iVendorインターフェイスを実装する)を拡張させる必要はありません。私はちょうど言います:

FedExにiVendorとiShipperのすべてのメソッドを実装させます。ただし、__constructiVendorとiShipperの関数は一意である必要があります。を取り出すことができることはわかって$shipment = nullいますが、Shippersを作成するのはそれほど便利ではありません(インスタンス化中にvendors_noとshipmentを渡すだけです)。

誰かがこれを機能させる方法を知っていますか?私のフォールバックは、$shipper->setShipment($shipment);インスタンス化した後に荷送人に電話して出荷を設定する必要があることですが、それを回避する方法を望んでいます...

好奇心旺盛な方へのもう少しの説明:
FedExオブジェクトには、(cURLを使用して)FedExサイトにアクセスし、問題の貨物の見積もりを取得するメソッドがあります。UPSオブジェクト、BAXGlobalオブジェクト、Conwayオブジェクトなどがあります。それぞれに、実際に配送見積もりを取得するための完全に異なるメソッドがありますが、システムが知る必要があるのは、それらが「配送業者」であり、インターフェースはそれらで呼び出すことができます(したがって、それらをすべてまったく同じように扱い、「荷送人」配列でそれらをループしてgetTransitX()、貨物に最適な荷送人を見つけることができます)。

ただし、各「シッパー」は「ベンダー」でもあり、システムの他の部分(DBの取得と挿入など)ではそのように扱われます。データ設計はがらくたの山であるため、FedExは次のような企業と一緒に保管されます。 「ベンダー」テーブルのDunderMifflinは、他のすべてのベンダーのすべてのプロパティを取得できることを意味しますが、iShipperによって提供される追加のプロパティとメソッドが必要です。

0 投票する
7 に答える
1226 参照

java - equals メソッドのオーバーライドと新しいメソッドの作成

私はいつも、Java の .equals() メソッドをオーバーライドして、作成したクラスに固有のものにする必要があると考えてきました。つまり、同じインスタンスへの 2 つの参照ではなく、2 つの異なるインスタンスの同等性を探すことです。しかし、デフォルトのオブジェクトの動作はそのままにして、同じクラスの 2 つのオブジェクトの同等性をテストするための新しいメソッドを作成する必要があると考えているように見える他のプログラマーに遭遇しました。

equals メソッドをオーバーライドすることの賛成意見と反対意見は何ですか?

0 投票する
30 に答える
177529 参照

c++ - C++ で「フレンド」を使用する必要があるのはいつですか?

私はC++ FAQを読んでいて、friend宣言に興味がありました。個人的には使ったことはありませんが、言語を探求することに興味があります。

を使用する良い例は何friendですか?


FAQ をもう少し読んでみると、<< >>オペレーターがオーバーロードし、それらのクラスのフレンドとして追加するというアイデアが気に入っています。ただし、これがカプセル化を壊さない方法はわかりません。これらの例外が OOP の厳格さの範囲内にとどまることができるのはいつですか?

0 投票する
4 に答える
1512 参照

oop - オブジェクトへの参照を追跡する方法は?

手動のメモリ割り当てとポインターがまだ支配している世界 (Borland Delphi) では、一般的な問題と思われるものの一般的な解決策が必要です。

特定の時点で、オブジェクトは複数の場所 (リスト、他のオブジェクトなど) から参照できます。オブジェクトが破棄されたときに更新できるように、これらすべての参照を追跡する良い方法はありますか?

0 投票する
3 に答える
843 参照

c# - 名前空間構造で継承階層を公開するのは悪い考えですか?

特定の実装を作成するためにすべて一緒にオーバーライドされる、相互に関連するクラスのグループがあります。相互に関連するサブクラスを名前空間で囲むのは良い考えかどうか疑問に思っています。

例として、次の名前空間とクラスを考えてみましょう。

名前空間を構成する最良の方法は何ですか? 基本クラスは実際には Protocol.Tcp 名前空間にも Protocol.Ftp 名前空間にも属していないため、名前空間で継承を公開することは避けられないようです。

0 投票する
9 に答える
1349 参照

c# - C# の親クラスにのみコンストラクターを表示する方法はありますか?

作成した抽象クラスから継承するクラスのコレクションがあります。抽象クラスの具体的な実装のインスタンスを作成するためのファクトリとして抽象クラスを使用したいと思います。

親クラスを除くすべてのコードからコンストラクターを非表示にする方法はありますか?

基本的にはこうしたい

しかし、私は誰もが 2 つの具象クラスを直接インスタンス化できないようにしたいと考えています。MakeAbstractClass() メソッドだけが基本クラスをインスタンス化できるようにしたいと考えています。これを行う方法はありますか?

UPDATE
Abstract クラスの外部から ConcreteClassA または B の特定のメソッドにアクセスする必要はありません。Abstract クラスが提供する public メソッドだけが必要です。具体的なクラスがインスタンス化されるのを防ぐ必要はありません。抽象クラスの内部にあるいくつかの非常に具体的なものの実装が異なるだけで、新しいパブリック インターフェイスは提供されないため、回避しようとしているだけです。

私にとって、最も簡単な解決策は、samjudson が述べたように子クラスを作成することです。ただし、抽象クラスのファイルが必要以上に大きくなるため、これは避けたいと思います。組織のために、クラスをいくつかのファイルに分割しておきたいと思います。

これは簡単に解決できるものではないと思います...

0 投票する
15 に答える
99570 参照

php - PHPのインターフェースのポイントは何ですか?

インターフェイスを使用すると、それを実装するクラスのメソッドを定義するコードを作成できます。ただし、これらのメソッドにコードを追加することはできません。

抽象クラスを使用すると、メソッドにコードを追加するだけでなく、同じことを行うことができます。

抽象クラスで同じ目標を達成できるのなら、なぜインターフェイスの概念が必要なのでしょうか?

C++ から Java までの OO 理論に関係していると言われています。これは、PHP の OO が基づいているものです。この概念はJavaでは役に立ちますが、PHPでは役に立ちませんか? 抽象クラスにプレースホルダーが散らばらないようにするための単なる方法ですか? 何か不足していますか?

0 投票する
1 に答える
409 参照

oop - dbml の XRef 関係

したがって、次のようなデータベーススキーマがあります。

ユーザー
のユーザー ID

RoleUserXRef
RoleUserId
RoleId
UserId

ロール
RoleId

User & RoleUserXRef と RoleUserXRef & Role の間に定義された外部キーを使用します。基本的に、ユーザーとロールの間には 1 対多の関係があります。

生成された User クラスに、ユーザーが割り当てた Roles のリストがあるように、これを dbml でモデル化するにはどうすればよいでしょうか?