ラティス継承への返信

この出版物は、potan ユーザーが発行したテキスト「Lattice inheritance」への回答であり、著者の主観的な意見で、クラス(クラスのセットが限られている場合)に近い代替案を提案しています。



「継承の目標は、コード(メソッドのセット)を、それが提供し必要とするエンティティプロパティ(通常はオブジェクト)の最小セットにバインドすることです。」



そうですか? また、バインドの理由は何ですか? どのような理由で、これらのメソッドをこのオブジェクトに接続する必要があると結論しますが、パブリックインターフェイスを介して欠落しているプロパティ/パラメーターを取得する他のオブジェクトの一部に他のメソッドを含める必要がありますか?



私はSOLIDとオブジェクトに対する唯一の責任という考えを固守します。 したがって、この場合の継承の階層は、継承の実行が必要な特定の状況に対する責任の明確化です。



ただし、実世界(またはドメイン)のオブジェクトは、いくつかの異なる機能/責任を担うことができるため、クラスシステムへの直接マッピングが機能しない場合があります。 アプリケーションクラスシステム内のこのようなオブジェクトは、ドメインオブジェクトによってサポートされる責任のコレクション/コンテナと見なされます。 このクラスのタスクは、相互の責任を調整することです。 整列は、部分的にはクラスコンテナー内の特定の責任の子孫を通じて部分的に発生します。



記事の例に近い例を示します。



能力





スキル-スキルツリーへのリンクやスキルアイテムのスロットなど、一般的な情報を提供します。



射撃能力-狙いを定める機会を提供します。スキルのスロットには射撃武器が必要です。



MANPADSから撮影する機能-目的の機能の実装を指定します。たとえば、MANPADS画面を描画します。



泳ぐ能力-水に浸ることができ(たとえば、同時に死なずに)、時間スケールを表示します。キャラクターはどうにか水の中を飛びます。



ところで、ここで私は抽象化を見逃しました-動き回る能力、そこからあなたは泳ぐ能力と歩く能力を継承することができます。



次に、特定のキャラクターにスキルセットが含まれます。



キャラクター:





フットマン(キャラクター):





アヒル(キャラクター):





キャラクターの責任は、お互いのスキルを調整して切り替えることです。 たとえば、キャラクターが水に入ったとき。 あなたが泳ぐ能力を持っている場合-それをアクティブにし、そうでない場合-絵のキャラクターをdrれさせる。



質問:このセットが大きくなるとどうなりますか?

そして、どのように成長することができますか?





新しいスキル:

たとえば、これらが量的なものである場合、MANPADSは0.6にヒットする確率でショットされ、現在は0.8になります。これらは同じクラスのデータベース内の異なるレコードです。



新しい何か、たとえば剣の場合、いずれにせよ、最初に剣の所有を抽象的に記述する大量のコードが必要です。その後、各キャラクターが独自の詳細を追加します。 必ずしも複雑な修正ではありませんが(キャラクターと彼の相続人の抽象化が適切な場合)。



新しいクラスのキャラクター-ここでは、スキルの組み合わせ、スキルを互いに調整する方法を説明する必要があります。 キャラクターのサブクラスとしてコーディングすると、新しいキャラクターに適応したスキルのサブクラスを個別に選択できます。



既存のものに他のものを追加することはより困難です。なぜなら、 既存のコードの内部コードを再度ソートする必要があります。 そしておそらく、子孫を継承する方が簡単でしょう。



たとえば、ダックは私たちすべてに適していますが、撮影方法がわからないだけです。 これは、この機能を適用する必要があることを意味します。2つのクラスを一度に追加する方が便利な場合があります。SimpleDuckとDuckが撮影できます。 そして、アヒルのクラスでは、娘のアヒルに共通の責任を残すために-泳ぐ能力-アヒルに適応しました:水を保持し、ダイビングするという形で。



難しさのもう1つの側面は、新しい責任(クラス)を追加することです。 それをすべての既存のものに関連付ける必要があります。 潜在的に、このプロセスは無限に進む可能性があり、すでに存在するクラスが多いほど時間がかかります。 これに役立つのはトップダウン設計です。世界があり、キャラクターを作成し、スキルを使ってやり取りできるようにします。 スキルキャラクターは増減できます。



この観点から、mixinは未開発のクラスのようです。 それをより速くし、既存のクラス階層とその構成を再構築しないという願望のために、過小評価されたままでした。



All Articles