オブジェクトクラスまたはクラスオブジェクト?

新しい仕事に就いたとき、インタビューのための新しい質問を思いつきました。 私も彼にあなたにお願いしたいです。



特定のマシンを用意しましょう。 特定の! マシンのタイプやクラスではなく、人差し指で指し示す特定のマシン。 この車の所有者は、彼の車は車輪を含む多くのコンポーネントで構成されていると主張しています。 彼は自分の車には5つの車輪(スペア1つ)があると言っています。 私はすぐに、所有者が「含む」ではなく「からなる」と言っていることに注意します。



質問:車の所有者の話を聞いて、私たちは何を想像しますか:車は1つのクラスの車輪で構成されていますか?







または、車が車輪のクラスで構成されているという事実ですか?









質問に対するコメント:

  1. 構成:

    1. ガスは分子で構成されています。つまり、ガスと分子のクラスの関係を意味します。
    2. パズルは、これらの要素のうち5つで構成されています。 この場合の「からなる」は、パズルと「要素」クラスのオブジェクトとの間の5つの接続「構成」を意味します。
    3. リンゴの木は、ルート、トランク、クラウンで構成されます-リンゴの木とリストされた各オブジェクトの間の3つの「構成」接続を意味します。
  2. 集約:砂の山は2つの山で構成されています。
  3. 専門化:リンゴの木のクラスは、さまざまなリンゴの木で構成されています。 これは、多数とそのサブセットの関係です。
  4. 分類:マシンクラスはマシンで構成されます。 これは、オブジェクトのクラスとクラスのオブジェクト間の関係です。


将来のために、「からなる」という用語のこれらの6つの異なる解釈を思い出してみましょう。



ただし、この場合、「車は車輪で構成されている」という論文は、「車は車輪のクラスで構成されている」または「車は車輪のクラスのオブジェクトで構成されている」という2つの方法でしか解釈できません。



これらのオプションは両方とも、構成の関係を決定します。 哲学では、部分の合計は全体ではありえないと考えられています。 このビューは全体論と呼ばれます。 反対を公言する人々は、還元主義者と呼ばれます。 対象領域のモデリングでは、ホリスティックの原則を公言しているため、機械はそのコンポーネントの合計ではないことを確認します。 したがって、コンポジションリンクによってマシンをそのコンポーネントのいずれかに関連付けます。



もう一度質問を繰り返します:マシンは何で構成されていますか? クラス外の車輪? またはクラスの車輪から?



プログラマーにこの質問をすると、彼らは混乱に陥ります。 OOPには、オブジェクトとクラスをリンクするモデルはありません。 プログラマーは、クラス図または相互作用図のいずれかを持っています。 ただし、クラスとオブジェクトが同じダイアグラム上にある場合-これはUMLにはありません。 したがって、推論には問題があります。 さらに、クラスの下では、世界全体(プログラマーを除く)が多くのオブジェクトを理解していることをもう一度思い出さなければなりません。 そして、OOPのクラスは実世界のクラスではないことを思い出してください。 リスナーはこれを理解すると、タスク自体に進みます。 理解できない場合は、「なぜこれが必要なのか」という一般的なフラグの下に一連の質問を含めます。リスナーが質問と論文の両方を理解し、推論し始めたとします。 まず、OOPの慣性により、リスナーはクラスを検索します。 また、車のクラスはありませんが、車は1台しかありません。 リスナーは単一の要素でクラスを作成しようとしますが、とにかくOOPの観点から平穏な質問をするので、これは保存されません:車のクラスではなく車はクラスの車輪ではなく車輪のクラスに接続できますか? ショーが提供されます。



だから答え



エンジンはボルトのクラスで構成されているため、スツールは分子のクラスで構成されているように、機械は車輪のクラスで構成されていると言えます。 しかし、そのようなレトリックには車内の車輪の位置を記述する座標がないため、機械がどのように車輪で構成されているかを正確に言うことはできません。 この場合、私たちは通常言う-車は5つの車輪で構成されています。 または-5人の大工が作業に参加します。 または、家を建てるにはレンガが必要です。



ただし、各ホイールの位置を説明するために、マシンとクラスホイール間の接続を使用できます。 次に、車と各車輪を接続する5つの「からなる」リンクを取得します。 このような接続のそれぞれに属性「location」を割り当てることができます。この属性の値は、指定されたホイールの位置(「right front」など)を提供します。 このような関係も、5つの要素で構成される関係のクラスを形成することは明らかです。 次に、機械は車輪(5リンクを意味する)、エンジンはボルト(100リンクを意味する)、スツールは分子(多くのリンクを意味する)で構成されます。 たとえば、次のように聞こえます。車は、右前、右後、左前、左後、スペアのホイールで構成されています。



マシンと通信するために順序付けられたクラスのホイールを使用する人がいます。 この順序付けされたクラスの各番号には、ホイール位置座標を割り当てることができます。 そして、彼らは車を車輪のクラスに関連付け、同時に車輪の位置の知識を維持することが可能であると言います。 これは真実ではありません。 事実は、オブジェクトの別のクラス-数値を導入することです。 車輪と数字の間を接続し、各数字を機械に接続し、車輪の位置の属性を数字に接続します。 そのため、この場合、属性値(数値)を介して各車輪と車の間の関係を単純に形成します。

したがって、オブジェクト構造を構築するには2つの方法があります。 たとえば、オブジェクトで構成されている、またはオブジェクトのクラスで構成されていると言います。 これら2つのクラスのステートメントは互いに非常に似ていますが、区別する必要があります。



質問を複雑にしましょう



次に状況を複雑にします。 車のクラスがあります。 各車には車輪のクラス、またはクラスホイールがあります。 すべての車が5つの車輪で構成されていることは事実です。 すでに持っているオブジェクトを見てみましょう:

  1. 車のクラス(車)のオブジェクト。 そのようなオブジェクトの数N。
  2. クラスの車。 このセットNのパワー。
  3. ホイールクラスオブジェクト(ホイール)。 そのようなオブジェクトの数は5 * Nです。
  4. ホイールクラス。 このセットのパワーは5 * Nです。
  5. 1台の車に属する車輪のクラス。 そのようなオブジェクトの数N。
  6. 1台のマシンに属するホイールクラスのクラス。 このセットNのパワー。
  7. 車と車輪の間の接続。 そのようなオブジェクトの数は5 * Nです。
  8. 車と車輪の間の接続のクラス。 このセットのパワーは5 * Nです。
  9. 車と1台の機械に属する車輪のクラスとの関係。 そのようなオブジェクトの数N。
  10. マシン間の接続のクラスと、1つのマシンに属するホイールのクラス。 このセットNのパワー。
  11. 新しいリンクを追加できます:
  12. 車のクラスは、車輪のクラスに関連付けることができます。 そのようなリンクの数は1です。
  13. マシンのクラスは、1つのマシンに属するホイールのクラスのクラスに関連付けることができます。 そのようなリンクの数は1です。
  14. ホイールのクラスは、クラスホイールに関連付けることができます。 そのような結合の数は5 * Nです。


すべてのオブジェクトとすべての接続には意味的な意味があります。 たとえば、マシンクラスは、多くのマシンで構成されるオブジェクトを指します。 1つのマシンに属するホイールクラスのクラスは、ホイールセットの存在を示し、各ホイールセット(セット)は1つのマシンに属します。 車のクラスと車輪のクラスの間の接続は、論文を示しています。機械のバッチを製造するには、車輪のバッチが必要です。 などなど。 顧客のストーリーから必要なエンティティを抽出し、それらを正しくモデル化する能力は、アナリストの芸術です。 この類推を使用することで、リレーションシップのセマンティクスを自分で見つけるためのトレーニングを続けることができます。 確かに、素人の論理という点では、いくつかのつながりは非常に奇妙です。 しかし、これは彼らの不可能性を排除するものではありません。



All Articles