29

私はいつも、人々が CRC (クラス責任コラボレーション) カードをどのように使用しているのか疑問に思っていました。私はそれらについて本で読んだり、インターネットで漠然とした情報を見つけたりしましたが、それを本当に理解したことはありませんでした. 私の本の 1 つで、CRC カードを使用したセッションを示す YouTube ビデオを作成する必要があると思います。私の本の 1 つで、テキストで定式化するのは非常に難しいと説明されているため、「すでにマスターしている誰かに教えてもらう」必要があります。悲しいことに、私はここで CRC カードを使用している人を誰も知らないので、もっと知りたいと思っています。

アップデート

この手法を詳しく説明している人々を示すビデオへのリンクを歓迎します。

4

6 に答える 6

34

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

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

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

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

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

于 2009-02-27T18:11:28.767 に答える
13

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

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

少しでもお役に立てましたら幸いです。

よろしく、
ジュリ

于 2009-02-27T17:34:41.883 に答える
7

ソースに行きましょう - ケント・ベック、ウォード・カニンガム、彼らのことを聞いたことがありますか?

于 2008-09-19T03:15:45.923 に答える
5

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

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

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

于 2008-09-19T03:45:53.620 に答える
3

Rebecca Wirfs-Brockと Alan McKeanは、2003 年に出版された彼らの著書Object Design: roles, privilegess, and Collaborations で、CRC カードについて詳しく説明しています。彼らは、これが非常に触覚的な経験でなければならないという手順全体に与える違いを本当に強調し、設計/要件を具体化しようとするときに物理的なオブジェクトを通過するという人々の考えを緩めます.

その章のサブタイトルは、カードの使用は「探索的デザイン」フェーズの一部であることを示唆しているため、おそらく多くのコーディングを行う前に行われますが、反復のたびにそれらに戻ってこない理由はないと思います.アジャイルプロジェクトを作成し、自分がどこに向かっていると思っていたかを思い出し、必要に応じて(もちろんグループとして)レビューします。

ボールを持っている人だけが話すことができるように、部屋の周りにボールを渡すことさえ提案されていることを覚えているようです。重要なオブジェクト?

実際の CRC カードのケーススタディを読みたい場合は (もちろん Kent と Ward のオリジナルの論文に加えて)、The CRC card bookをご覧ください。

于 2009-10-13T16:24:02.710 に答える