CSC/ECE 517 Fall 2007/wiki2 5 pr

From Expertiza_Wiki
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search


Introduction

        Applying the object-oriented paradigm to the development of software requires individuals and teams to think and act differently than when designing procedural projects. While proponents of the object paradigm often say identifying objects is a simple and intuitive process, experienced developers know that this is not always true. The solution is the CRC (Classes, Responsibilities, Collaboration) Card method, a proven technique for identifying classes and visualizing and testing different class-based models during the design phase.


What is CRC and what are the cards?

        CRC stands for Class, Responsibilities, and Collaborators, and each of these are recorded on index cards which are then used to facilitate team-based roleplay.

        A CRC card is an index card that defines a Class, Responsibilities of classes and the interaction between the classes. They are used to determine which classes are needed and how they will interact. CRC cards are an informal approach to object oriented modeling. The cards are created through scenarios, based on the system requirements, that model the behavior of the system.

The contents of an index card are:

       

  • The class name
  • Its Super and Sub classes (if applicable)
  • The responsibilities of the class.
  • The names of other classes with which the class will collaborate to fulfill its responsibilities.
  • Author
  • A sample CRC card is as shown in the picture below:

    [Courtesy: http://www.agilemodeling.com/artifacts/crcModel.htm]

    Why bother about CRC cards?

  • They are portable. No computers are required so they can be used anywhere. Even away from the office.
  • Reduces the complexity of the design.
  • The allow the participants to experience first hand how the system will work. No computer tool can replace the interaction that happens by physically picking up the cards and playing     the roll of that object.
  • Helps the designer focus on the essentials of the class rather than getting into inner details.
  • The are a useful tool for teaching people the object-oriented paradigm.
  • They can be used as a methodology them selves or as a front end to a more formal methodology.
  • Where to learn about this innovative method?

        There are many websites and books that talk about this technique. Some in depth and some just enough to make life simpler for everyone. Listed below are some of the many websites that talk about this method along with the effectiveness with which each site explains this method.

    Review on few sites which explain CRC cards


                          http://www.csc.calpoly.edu/~dbutler/tutorials/winter96/crc_b/
    

        This site gives a very good description about CRC cards. It starts with a very simple definition of CRC cards which does not right away deal with too many technicalities. It gives a succinct description of almost all the required details, starting from a brief history to the reason behind its existence. It also gives a brief description of the advantages of having CRC cards. The Tutorial section in this link gives a step by step approach on how to go about making CRC cards and also how to use them.

    Inference:

  • A very introductory description to CRC cards.
  • The right kind of site for beginners.
  • Its disadvantage is same as its advantage, i.e it is just a basic layman way of explaining CRC cards.
  • https://olt.qut.edu.au/it/itb611/gen/index.cfm?fa=frameLink&rNum=864389     In this site the author describes the CRC concept by comparing it to the processes, data flow and data store of the procedural designs regardless of the programming language and environment. This concept is explained by taking an example from the Smalltalk-80 image. http://www.cs.umu.se/~jubo/Meetings/OOPSLA01/Contributions/RBiddle.html
        One portion of the CRC card method that hasnt been covered in most of the other sites has been covered here- Roleplay. It says 'As a design technique, roleplay really creates a focus on how the design makes objects collaborate to work through a use case.' Here they also discuss about the usual problems faced while introducing people to this concept and also gives a way around this problem. http://www.cs.umu.se/~jubo/Meetings/OOPSLA01/Contributions/MNordstrom.pdf
        This paper talks about the Object Oriented concepts using CRC cards and BlueJ. It gives a detailed case study on the benifits of using CRC cards as a tools for teaching Object oriented languages. The result of the case study proves the advantages of this technique.

    Sites which show examples which explain CRC concepts well

    Below are few sites that explain how to design the CRC cards in a specific situation.

    (i) Interactively over the Web


                          http://www.math-cs.gordon.edu/local/courses/cs211/ATMExample/CRCCards.html#Deposit 

        This is a good place for anyone to practise the use and/or implementation of CRC cards. It gives a detailed explanation with a number of state diagrams which makes the experience much more effective. Helps in understanding the concept well when relating the same using state diagrams.


    (ii) To a class of students, via in-class exercises

                          http://www.agilemodeling.com/artifacts/crcModel.htm 
    http://c2.com/doc/crc/draw.html
    http://www.cs.gordon.edu/courses/cs320/ATM_Example/CRCcards.html

        It gives a detailed step by step process on how to use CRC cards in Object Oriented programming. There are many more such sites that gives a pretty good explanation about this method. Some of them have been listed above. In these examples each card is explained well with all the required details.


    (iii) Self-study

        Most of the above sites can be used as a means of learning about CRC cards all by oneself. It has descripts for each card that is used in the example. These explain this concept using a state diagram which helps better understanding of the concept.

                          http://www.math-cs.gordon.edu/local/courses/cs211/ATMExample/CRCCards.html#Deposit
    http://www.cs.gordon.edu/courses/cs320/ATM_Example/CRCcards.html
    http://www.extremeprogramming.org/example/crcsim.html

    (iv) Tools

        There are some tools that are extremely useful in making CRC cards.These are available for various platforms like Windows, Mac OS and so on. These tools automates CRC cards, which helps the designers to quickly identify Objects, classes, relationships and related information before the coding phase. All these make the implementation a lot easier.

                          http://www.excelsoftware.com/quickcrcintro.html
    http://www.freedownloadscenter.com/Programming/Misc__Programming_Tools/QuickCRC_Windows_Download.html


    A screenshot of the tool that is used to develop the CRC card is shown below:


    [Courtesy:http://www.excelsoftware.com/quickcrcintro.html]

    Site which explain CRC concepts in Java and Ruby

    Below are few links which talk about CRC cards specific to programming languages link Java and Ruby. The concept of CRC cards is the same in these languages. The links show how they are implemented specific to a language. The concept of CRC cards is not bound to a specific language.

    JAVA:

                          http://rohan.sdsu.edu/~stewart/cs310-fall07/Ch03v2.0.ppt
    


         The above link talks about the design that can be used in Java where it makes a reference to CRC cards. How CRC cards helping reducing the design complexity. CRC is a concept and not a feature that is specific to any programming language. Hence in the presentation the author explains how this CRC concept can be used in Java to improve the design.


    RUBY:

                          http://weblog.rubyonrails.org/2006/6/14/remember-crc-cards
    


         The above URL links to a blog where the author talks about the CRC concepts, how it originated and also how it can help using this concept in Ruby. The author gives a link to the first paper written by Ward Cunningham where the CRC details are explained.

        CRC concepts are very helpful for projects which will be developed in programming language like Java and Ruby. These are object oriented languages, using CRC helps the developers identify the objects, classes their relationships. The above links explains the object oriented concepts and how CRC helps in understanding the relationship between the various classes and objects.

    Conclusion

        The overall conclusion is that CRC cards remains an effective technique for learning and practicing OO design. There are weaknesses, but strategies to compensate it too. Using these strategies, it is found that the CRC card technique is sound. We advocate use of the strategies to take advantage of the strengths of the CRC card technique, while addressing the weaknesses.

    References

    http://en.wikipedia.org/wiki/Class-Responsibility-Collaboration_card

    http://www.softstar-inc.com/Download/Intro%20to%20CRC.pdf

    http://alistair.cockburn.us/index.php/Using_CRC_cards