CRC カードを使用して、どのように精巧なデザインを行うのでしょうか?

StackOverflow https://stackoverflow.com/questions/98878

  •  01-07-2019
  •  | 
  •  

質問

私はいつも、人々が CRC (階級責任協力) カードをどのように使っているのか疑問に思っていました。私はそれらについて本で読んだり、インターネットで漠然とした情報を見つけたりしましたが、実際に理解したことはありませんでした。CRC カードを使ったセッションを紹介する YouTube ビデオを誰かが作成すべきだと思います。私の本の 1 つに、CRC カードを文章で表現するのは非常に難しく、「既にマスターしている人に教える」必要があると説明されていたからです。残念なことに、この辺りでは CRC カードを使用している人を誰も知らないので、もっと知りたいと思っています。

アップデート

このテクニックを詳しく説明しているビデオへのリンクをいただければ幸いです。

役に立ちましたか?

解決

答えてみます。したがって、CRC カードは一般に、開発する必要があるシステムをより深く理解するためにオブジェクト指向環境でのモデリングに使用されます (これはすでにご存知だと思います)。CRC カードは最後、つまり実際の実装の直前に登場します。そのレベルに到達するためのさまざまな手順は次のとおりです。

  1. 開始点は要件の抽出を行うことです。ここでは、顧客を早期かつ継続的に関与させることが提案されています (アジャイル アプローチを見てください。エクストリーム プログラミング)
  2. 要件は、ユース ケース図 (UML) またはユーザー ストーリー (アジャイル エクストリーム プログラミング アプローチ) のいずれかを使用してモデル化できます。ここでの重要な問題は、適切な関連オブジェクトを見つけることです。もちろん、これはあなたがいるドメインに大きく依存します。「難しい」方法を使用する場合は、「名詞抽出」などのテクニックを適用できます。そこで、仕様書を解析し、すべての名詞 (合成名や形容詞を含む名詞を含む) を抽出します。それらをすべて分析し、無関係なものを破棄します。
  3. 適切な名詞 -> オブジェクトを取得したら、CRC カードの作成を開始できます。では、CRC セッションでは何が行われるのでしょうか?主なタスクは、(以前に) 見つけたオブジェクトを見つけて責任を割り当てることであり、それらのオブジェクトは小さなインデックス カード (CRC カード) に記録されます。「責任」は主に特定のオブジェクトの中核となる機能であり、「コラボレーション」部分は特定の機能を果たすために必要な他のオブジェクトです (これらはモデル内のさまざまなオブジェクト間の依存関係です)。責任を割り当てる際の重要な点は、責任がシステム全体に何らかのバランスの取れた方法で適切に分散されることです。もう 1 つの非常に重要な点は、オブジェクト間の責任の重複を避けることです (これは CRC カードが役立つところです)。
    CRC セッションは、開発者間で活発な議論を行うブレーンストーミング会議から開始する必要があり、実際のインデックス カードに対して直接実行する必要があります。

何とかお役に立てれば幸いです。

よろしく、
ジュリ

他のヒント

SOの回答に要約するのは難しいですが、試してみます。オブジェクトをデザインする際の課題の 1 つは、全体的な観点からの考え方と個々のオブジェクトの観点からの考え方のバランスを取ることです。計算を完了するには全体的な視点が必要ですが、ロジックとデータを効果的に細分化するには個別のオブジェクトの視点が必要です。

このバランスを維持するには、CRC カードが役立ちます。彼らがテーブルの上に座っているとき、あなたは計算全体を見ることができます。しかし、1 枚のカードを手に取ると、物理的、運動感覚的に、その 1 つのオブジェクトの視点を取るように促されます。限られたリソースでこの計算の小さな部分を実行していますが、どうやってそれを達成するのでしょうか?

時間が経つにつれて、両方の視点を同時に持つ能力が脳に染み込んでいくようです。カードに書かれることがどんどん減っていきます。その後、カードは空白になります。しばらくすると、人々は、わざわざ山から空のカードを取り出すとしたら、そのカードがどこにあるのかを指さすだけです。最終的には、人々はカードをまったく必要とせずに、この思考スタイルの恩恵を受けることになります。ただし、バランスをマスターしていない人と話すときは、リアルカードを引き出すことがコミュニケーションの助けになることがあります。

このカードの最大の弱点は、フィードバックがないことです。コードがどうなるかについて自分を騙すことができます。興味深い質問が現れるまでのみカードを使用し、確認のためにテスト/コードを使用してから、設計を再開することをお勧めします。

ウォードと私は 15 年ほど前に設計セッションのビデオを作成しましたが、オンラインのどこにも見つかりませんし、コピーも持っていません。いずれにせよ、それが教育ツールとして役立つかどうかはわかりません。他のビデオを知りませんが、特に複数の異なるデザイナーのスタイルを比較する場合には、興味深いものになるかもしれません。

に行く 起源 - ケント・ベック、ウォード・カニンガムは彼らのことを聞いたことがありますか?

あなたの発言だと思います 「この辺りでは CRC カードを使っている人を誰も知りません。」 これは、開発中の CRC カードの状態をほぼ要約したものです。私の意見では、CRC カードは、従来の計画駆動開発からアジャイル開発への道への一歩でした。世界は前進しました。CRC カードの使用方法に焦点を当てる代わりに、次のようなテクニックを調査します。 TDD, 、UML や CRC カードなどの技術を中間成果物として利用できますが、コード、特にテストに重点を置いています。これは CRC カードの発明者が採用した方向であり、あなたにも採用することをお勧めします。

私の意見では、混乱を招くことなくそれらを使用する最も簡単な方法は、次のようにファイルヘッダーに小さな CRC カードを書き込むことです。

///////////////////////
//* CRC CARD
//*  Class: UISliderEvent
//*  Responsability: Event that holds the value and id of a Slider's movement
//*  Collaborators: UISlider, UIEvent
//////////////////////

その後、機能を追加する必要があるたびにカードをチェックし、カードに記載されている契約に違反していないことを確認してください。たとえば、UIMouseEvent に突然依存する場合、それはカードのどこにもないため、含めることはできません。

彼らの本の中で オブジェクトのデザイン:役割、責任、コラボレーション 2003年に出版 レベッカ・ヴィルフス・ブロック & Alan McKean が CRC カードについて詳しく説明します。彼らは、これが非常に触覚的な体験であるべきであり、設計や要件を具体化しようとするときに物理的なオブジェクトを通過するという人々の思考を緩めることによって、手順全体に生じる違いを非常に強調しています。

その章のサブタイトルは、カードの使用が「探索的設計」フェーズの一部であることを示唆しているため、多くのコーディングを行う前にカードを使用することになると思われますが、繰り返しのたびにカードに戻ってこなくなる理由はわかりません。アジャイルプロジェクトに取り組み、自分がどこへ行こうと思っていたのかを思い出し、必要に応じてそれを見直します(もちろんグループとして)。

彼らは、ボールを持っている人だけが話すことを許可されるように、部屋の周りにボールを回して、ボールを持っている人だけが話すことを許可することさえ提案したことを覚えているようです。したがって、おそらくCRCカードというよりも、部屋に全員を集めて役割と責任について話し合うことが重要なのかもしれません。重要なオブジェクト?

実際に CRC カードが使用されているケーススタディを読みたい場合は (もちろん、Kent と Ward の元の論文に加えて)、以下をご覧ください。 CRCカードブック.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top