<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.expertiza.ncsu.edu/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Dragon9786</id>
	<title>Expertiza_Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.expertiza.ncsu.edu/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Dragon9786"/>
	<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=Special:Contributions/Dragon9786"/>
	<updated>2026-08-07T18:28:44Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.41.0</generator>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch7_7e_GS&amp;diff=43214</id>
		<title>CSC/ECE 517 Fall 2010/ch7 7e GS</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch7_7e_GS&amp;diff=43214"/>
		<updated>2010-12-02T03:18:34Z</updated>

		<summary type="html">&lt;p&gt;Dragon9786: /* Service Lookup */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
The '''Protected Variations pattern''' [5] is one of the '''GRASP''' patterns. '''General Responsibility Assignment Software Patterns (or Principles)''', abbreviated GRASP, consists of guidelines for assigning responsibility to classes and objects in object-oriented design.[1]&lt;br /&gt;
&lt;br /&gt;
The Protected Variations pattern protects elements from the variations on other elements (objects, systems, subsystems) by wrapping the focus of instability with an interface and using polymorphism to create various implementations of this interface.&lt;br /&gt;
&lt;br /&gt;
= Protected Variation Pattern =&lt;br /&gt;
This pattern mainly deals with the problem of designing objects, subsystems and systems so that any variations or instability in these elements does not have an undesirable impact on other elements. The Protected Variation pattern tries to address this problem by identifying points of predicted variation or instability and assignsresponsibilities to create a stable interface (or protection mechanism) around them.&lt;br /&gt;
&lt;br /&gt;
That is an external object trying to modify another object can only do this by the means of a wrapper which wraps the object to be accesed. Thus this insulates the objects from any changes or variation to other objects.&lt;br /&gt;
&lt;br /&gt;
Some of the standard practices motivated by this pattern are '''Data encapsulation, [http://en.wikipedia.org/wiki/Interface_%28computer_science%29 Interfaces], [http://en.wikipedia.org/wiki/Polymorphism_in_object-oriented_programming Polymorphism] and [http://en.wikipedia.org/wiki/Indirection Indirection].'''. Also the Protected Variation pattern in principle is very similar to the '''&amp;quot;Open-Closed Principle&amp;quot;''' discussed in detail by Bertrand Meyer in [4] and also very similar to what David Parnas means by [http://en.wikipedia.org/wiki/Information_hiding '''Information Hiding'''] in [3].&lt;br /&gt;
&lt;br /&gt;
== An Example ==&lt;br /&gt;
One commercial example that we can look at that best illustrates the Protected Variations design principle is in the commercial industry of video games. Vendors who make video games make money by building complex 3D game engines, sound effects and AI(Artificial Intelligence) effects.These companies often produce many games using the same engine, and release the game on many consoles like for instance a [http://en.wikipedia.org/wiki/Xbox '''XBox'''] or a [http://en.wikipedia.org/wiki/PlayStation '''Playstation'''].&lt;br /&gt;
This can be seen as implementing the Protected Variation pattern, in that&lt;br /&gt;
&lt;br /&gt;
*If a game is to be ported to another console, the wrapper object will have to delegate3 D graphics drawing to different console-level commands.&lt;br /&gt;
&lt;br /&gt;
*It makes sense in such a case to make changes only to the wrapper since the wrapper is simpler to change than the entire game and all of its facets.&lt;br /&gt;
&lt;br /&gt;
= Other Mechanisms motivated by PV =&lt;br /&gt;
Craig Larman in [2] looks at some of the common mechanisms that exist which take motivation from the Protected Variation design principle. Several software components or systems that exist already such as Operating systems, video games use this mechanism either directly or indirectly. &lt;br /&gt;
&lt;br /&gt;
Even Components such as brokers and virtual machines are complex examples of indirection.[2]&lt;br /&gt;
&lt;br /&gt;
== Uniform Access ==&lt;br /&gt;
Uniform access is a syntactic construct which allows languages to express both a method and field access in the same way.Languages such as '''Ada, Eiffel, and C#''' support uniform access. For example, consider a '''Rectangle class''' with  public fields length and width as below&lt;br /&gt;
&lt;br /&gt;
   class Rectangle{&lt;br /&gt;
      public:&lt;br /&gt;
              float length;&lt;br /&gt;
              float width&lt;br /&gt;
      private:&lt;br /&gt;
               ......&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
Now a reference such as '''Rectangle.length''' might either refer to the public field or might internally call a method '''length():float''' depending on the implementation. This means that the developer can change public fields to access methods without changing the client code.&lt;br /&gt;
&lt;br /&gt;
== Data Driven Design ==&lt;br /&gt;
The '''Data Driver design''' covers a wide variety of techniques, including reading codes, values, class file paths, class names, ''from an external source in order to change the behavior of or “parameterize” a system in some way at runtime.'' [2]&lt;br /&gt;
&lt;br /&gt;
Impelementations such as '''style sheets, metadata for object-relational mapping, property files''' etc belong to this category.&lt;br /&gt;
&lt;br /&gt;
''In this design the system can be protected from the impact of changes to data, metadata, or declarative variations by externalizing the variant, reading the behavior-influencing data in, and reasoning with it.'' [3]&lt;br /&gt;
&lt;br /&gt;
== Service Lookup ==&lt;br /&gt;
&lt;br /&gt;
The '''Service Lookup''' technique is in fact a special case of the data-driven design. These are generally used to do look ups for obtaining services. For example a naming service such as [http://en.wikipedia.org/wiki/JNDI '''JNDI'''] can be used to do service lookups to obtain services like [http://en.wikipedia.org/wiki/Jini Jini].&lt;br /&gt;
&lt;br /&gt;
This approach uses the stable interface of the lookup service to protect clients from variations in the location of services. The classic Service Lookup and the interaction among the different components involved is illustrated in the figure. From the figure we can also see how the responsibilities are seperated and how a change can be implemented without affecting the client (or multiple clients if more than one is involved).&lt;br /&gt;
&lt;br /&gt;
[[Image:Service_Lookup.jpg|frame|center]]&lt;br /&gt;
&lt;br /&gt;
== Interpreter-Driven Design ==&lt;br /&gt;
'''Interpreter-driven designs''' are design principles that some kind of interpreters which uses internal rules that read from an external source and execute them. The external sources could be script or language interpreters that read and run programs, virtual machines, neural network engines that execute nets, constraint logic engines that read and reason with constraint sets.&lt;br /&gt;
&lt;br /&gt;
The advantage of this design approach is that we can write logic expressions externally to influence a system. Because the whole logic is externalized, the system is protected from the changes to the logic.&lt;br /&gt;
&lt;br /&gt;
== Reflective or Meta-Level Designs ==&lt;br /&gt;
'''Reflective or Meta-Level Designs''' is also a special case of data driven designs. In [2], the ''java.beans.Introspector'' example is used to explain this design principle. To obtain a Bean-Info object in java using this, the getter method of the corresponding property is first called (i.e. ''getX() for a property X'') and then calling the ''Method.invoke.Reflective algorithms''. These use '''introspection''' and '''metalanguage''' services to protect the system from the impact of logic or external code variations.&lt;br /&gt;
&lt;br /&gt;
= Advantages =&lt;br /&gt;
Protected Variations aim to reduce the undesirable impacts on objects that can be caused by variations and instability in other objects that might be related. The advantages of this design pattern are:&lt;br /&gt;
&lt;br /&gt;
* Cost for changes is lowered.&lt;br /&gt;
* There is low coupling when the Protected Variations  pattern is used.&lt;br /&gt;
* Easier to add new features and easier to adapt the existing features to a different platform since it requires only a change to the wrapper.&lt;br /&gt;
* If there are clients accessing a service from an object, new features or services can be added without affecting the clients.&lt;br /&gt;
&lt;br /&gt;
= References =&lt;br /&gt;
[1] [http://en.wikipedia.org/wiki/GRASP_%28object-oriented_design%29 '''Wikipedia GRASP patterns''']&lt;br /&gt;
&lt;br /&gt;
[2] ''Protected variation: the importance of being closed'', Larman.C, ISSN: 0740-7459, 89 - 91&lt;br /&gt;
&lt;br /&gt;
[3] ''“On the Criteria to Be Used in Decomposing Systems into Modules”'', Comm. ACM, vol.12, no. 2, Dec. 1972&lt;br /&gt;
&lt;br /&gt;
[4] Object- Oriented Software Construction (IEEE Press, 1988)&lt;br /&gt;
&lt;br /&gt;
[5] ''“Prioritizing Forces in Software Design”'', Patterns Languages of Program Design, vol. 2, Addison-Wesley, 1996&lt;br /&gt;
&lt;br /&gt;
= See Also =&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Design_pattern_%28computer_science%29 '''Design Pattern''']&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Delegation_pattern '''Delegation Pattern''']&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Open_Closed_Principle '''Open-Closed Principle''']&lt;/div&gt;</summary>
		<author><name>Dragon9786</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch7_7e_GS&amp;diff=43213</id>
		<title>CSC/ECE 517 Fall 2010/ch7 7e GS</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch7_7e_GS&amp;diff=43213"/>
		<updated>2010-12-02T03:18:23Z</updated>

		<summary type="html">&lt;p&gt;Dragon9786: /* Data Driven Design */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
The '''Protected Variations pattern''' [5] is one of the '''GRASP''' patterns. '''General Responsibility Assignment Software Patterns (or Principles)''', abbreviated GRASP, consists of guidelines for assigning responsibility to classes and objects in object-oriented design.[1]&lt;br /&gt;
&lt;br /&gt;
The Protected Variations pattern protects elements from the variations on other elements (objects, systems, subsystems) by wrapping the focus of instability with an interface and using polymorphism to create various implementations of this interface.&lt;br /&gt;
&lt;br /&gt;
= Protected Variation Pattern =&lt;br /&gt;
This pattern mainly deals with the problem of designing objects, subsystems and systems so that any variations or instability in these elements does not have an undesirable impact on other elements. The Protected Variation pattern tries to address this problem by identifying points of predicted variation or instability and assignsresponsibilities to create a stable interface (or protection mechanism) around them.&lt;br /&gt;
&lt;br /&gt;
That is an external object trying to modify another object can only do this by the means of a wrapper which wraps the object to be accesed. Thus this insulates the objects from any changes or variation to other objects.&lt;br /&gt;
&lt;br /&gt;
Some of the standard practices motivated by this pattern are '''Data encapsulation, [http://en.wikipedia.org/wiki/Interface_%28computer_science%29 Interfaces], [http://en.wikipedia.org/wiki/Polymorphism_in_object-oriented_programming Polymorphism] and [http://en.wikipedia.org/wiki/Indirection Indirection].'''. Also the Protected Variation pattern in principle is very similar to the '''&amp;quot;Open-Closed Principle&amp;quot;''' discussed in detail by Bertrand Meyer in [4] and also very similar to what David Parnas means by [http://en.wikipedia.org/wiki/Information_hiding '''Information Hiding'''] in [3].&lt;br /&gt;
&lt;br /&gt;
== An Example ==&lt;br /&gt;
One commercial example that we can look at that best illustrates the Protected Variations design principle is in the commercial industry of video games. Vendors who make video games make money by building complex 3D game engines, sound effects and AI(Artificial Intelligence) effects.These companies often produce many games using the same engine, and release the game on many consoles like for instance a [http://en.wikipedia.org/wiki/Xbox '''XBox'''] or a [http://en.wikipedia.org/wiki/PlayStation '''Playstation'''].&lt;br /&gt;
This can be seen as implementing the Protected Variation pattern, in that&lt;br /&gt;
&lt;br /&gt;
*If a game is to be ported to another console, the wrapper object will have to delegate3 D graphics drawing to different console-level commands.&lt;br /&gt;
&lt;br /&gt;
*It makes sense in such a case to make changes only to the wrapper since the wrapper is simpler to change than the entire game and all of its facets.&lt;br /&gt;
&lt;br /&gt;
= Other Mechanisms motivated by PV =&lt;br /&gt;
Craig Larman in [2] looks at some of the common mechanisms that exist which take motivation from the Protected Variation design principle. Several software components or systems that exist already such as Operating systems, video games use this mechanism either directly or indirectly. &lt;br /&gt;
&lt;br /&gt;
Even Components such as brokers and virtual machines are complex examples of indirection.[2]&lt;br /&gt;
&lt;br /&gt;
== Uniform Access ==&lt;br /&gt;
Uniform access is a syntactic construct which allows languages to express both a method and field access in the same way.Languages such as '''Ada, Eiffel, and C#''' support uniform access. For example, consider a '''Rectangle class''' with  public fields length and width as below&lt;br /&gt;
&lt;br /&gt;
   class Rectangle{&lt;br /&gt;
      public:&lt;br /&gt;
              float length;&lt;br /&gt;
              float width&lt;br /&gt;
      private:&lt;br /&gt;
               ......&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
Now a reference such as '''Rectangle.length''' might either refer to the public field or might internally call a method '''length():float''' depending on the implementation. This means that the developer can change public fields to access methods without changing the client code.&lt;br /&gt;
&lt;br /&gt;
== Data Driven Design ==&lt;br /&gt;
The '''Data Driver design''' covers a wide variety of techniques, including reading codes, values, class file paths, class names, ''from an external source in order to change the behavior of or “parameterize” a system in some way at runtime.'' [2]&lt;br /&gt;
&lt;br /&gt;
Impelementations such as '''style sheets, metadata for object-relational mapping, property files''' etc belong to this category.&lt;br /&gt;
&lt;br /&gt;
''In this design the system can be protected from the impact of changes to data, metadata, or declarative variations by externalizing the variant, reading the behavior-influencing data in, and reasoning with it.'' [3]&lt;br /&gt;
&lt;br /&gt;
== Service Lookup ==&lt;br /&gt;
&lt;br /&gt;
The Service Lookup technique is in fact a special case of the data-driven design. These are generally used to do look ups for obtaining services. For example a naming service such as [http://en.wikipedia.org/wiki/JNDI '''JNDI'''] can be used to do service lookups to obtain services like [http://en.wikipedia.org/wiki/Jini Jini].&lt;br /&gt;
&lt;br /&gt;
This approach uses the stable interface of the lookup service to protect clients from variations in the location of services. The classic Service Lookup and the interaction among the different components involved is illustrated in the figure. From the figure we can also see how the responsibilities are seperated and how a change can be implemented without affecting the client (or multiple clients if more than one is involved).&lt;br /&gt;
&lt;br /&gt;
[[Image:Service_Lookup.jpg|frame|center]]&lt;br /&gt;
&lt;br /&gt;
== Interpreter-Driven Design ==&lt;br /&gt;
'''Interpreter-driven designs''' are design principles that some kind of interpreters which uses internal rules that read from an external source and execute them. The external sources could be script or language interpreters that read and run programs, virtual machines, neural network engines that execute nets, constraint logic engines that read and reason with constraint sets.&lt;br /&gt;
&lt;br /&gt;
The advantage of this design approach is that we can write logic expressions externally to influence a system. Because the whole logic is externalized, the system is protected from the changes to the logic.&lt;br /&gt;
&lt;br /&gt;
== Reflective or Meta-Level Designs ==&lt;br /&gt;
'''Reflective or Meta-Level Designs''' is also a special case of data driven designs. In [2], the ''java.beans.Introspector'' example is used to explain this design principle. To obtain a Bean-Info object in java using this, the getter method of the corresponding property is first called (i.e. ''getX() for a property X'') and then calling the ''Method.invoke.Reflective algorithms''. These use '''introspection''' and '''metalanguage''' services to protect the system from the impact of logic or external code variations.&lt;br /&gt;
&lt;br /&gt;
= Advantages =&lt;br /&gt;
Protected Variations aim to reduce the undesirable impacts on objects that can be caused by variations and instability in other objects that might be related. The advantages of this design pattern are:&lt;br /&gt;
&lt;br /&gt;
* Cost for changes is lowered.&lt;br /&gt;
* There is low coupling when the Protected Variations  pattern is used.&lt;br /&gt;
* Easier to add new features and easier to adapt the existing features to a different platform since it requires only a change to the wrapper.&lt;br /&gt;
* If there are clients accessing a service from an object, new features or services can be added without affecting the clients.&lt;br /&gt;
&lt;br /&gt;
= References =&lt;br /&gt;
[1] [http://en.wikipedia.org/wiki/GRASP_%28object-oriented_design%29 '''Wikipedia GRASP patterns''']&lt;br /&gt;
&lt;br /&gt;
[2] ''Protected variation: the importance of being closed'', Larman.C, ISSN: 0740-7459, 89 - 91&lt;br /&gt;
&lt;br /&gt;
[3] ''“On the Criteria to Be Used in Decomposing Systems into Modules”'', Comm. ACM, vol.12, no. 2, Dec. 1972&lt;br /&gt;
&lt;br /&gt;
[4] Object- Oriented Software Construction (IEEE Press, 1988)&lt;br /&gt;
&lt;br /&gt;
[5] ''“Prioritizing Forces in Software Design”'', Patterns Languages of Program Design, vol. 2, Addison-Wesley, 1996&lt;br /&gt;
&lt;br /&gt;
= See Also =&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Design_pattern_%28computer_science%29 '''Design Pattern''']&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Delegation_pattern '''Delegation Pattern''']&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Open_Closed_Principle '''Open-Closed Principle''']&lt;/div&gt;</summary>
		<author><name>Dragon9786</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch7_7e_GS&amp;diff=43212</id>
		<title>CSC/ECE 517 Fall 2010/ch7 7e GS</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch7_7e_GS&amp;diff=43212"/>
		<updated>2010-12-02T03:17:34Z</updated>

		<summary type="html">&lt;p&gt;Dragon9786: /* Reflective or Meta-Level Designs */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
The '''Protected Variations pattern''' [5] is one of the '''GRASP''' patterns. '''General Responsibility Assignment Software Patterns (or Principles)''', abbreviated GRASP, consists of guidelines for assigning responsibility to classes and objects in object-oriented design.[1]&lt;br /&gt;
&lt;br /&gt;
The Protected Variations pattern protects elements from the variations on other elements (objects, systems, subsystems) by wrapping the focus of instability with an interface and using polymorphism to create various implementations of this interface.&lt;br /&gt;
&lt;br /&gt;
= Protected Variation Pattern =&lt;br /&gt;
This pattern mainly deals with the problem of designing objects, subsystems and systems so that any variations or instability in these elements does not have an undesirable impact on other elements. The Protected Variation pattern tries to address this problem by identifying points of predicted variation or instability and assignsresponsibilities to create a stable interface (or protection mechanism) around them.&lt;br /&gt;
&lt;br /&gt;
That is an external object trying to modify another object can only do this by the means of a wrapper which wraps the object to be accesed. Thus this insulates the objects from any changes or variation to other objects.&lt;br /&gt;
&lt;br /&gt;
Some of the standard practices motivated by this pattern are '''Data encapsulation, [http://en.wikipedia.org/wiki/Interface_%28computer_science%29 Interfaces], [http://en.wikipedia.org/wiki/Polymorphism_in_object-oriented_programming Polymorphism] and [http://en.wikipedia.org/wiki/Indirection Indirection].'''. Also the Protected Variation pattern in principle is very similar to the '''&amp;quot;Open-Closed Principle&amp;quot;''' discussed in detail by Bertrand Meyer in [4] and also very similar to what David Parnas means by [http://en.wikipedia.org/wiki/Information_hiding '''Information Hiding'''] in [3].&lt;br /&gt;
&lt;br /&gt;
== An Example ==&lt;br /&gt;
One commercial example that we can look at that best illustrates the Protected Variations design principle is in the commercial industry of video games. Vendors who make video games make money by building complex 3D game engines, sound effects and AI(Artificial Intelligence) effects.These companies often produce many games using the same engine, and release the game on many consoles like for instance a [http://en.wikipedia.org/wiki/Xbox '''XBox'''] or a [http://en.wikipedia.org/wiki/PlayStation '''Playstation'''].&lt;br /&gt;
This can be seen as implementing the Protected Variation pattern, in that&lt;br /&gt;
&lt;br /&gt;
*If a game is to be ported to another console, the wrapper object will have to delegate3 D graphics drawing to different console-level commands.&lt;br /&gt;
&lt;br /&gt;
*It makes sense in such a case to make changes only to the wrapper since the wrapper is simpler to change than the entire game and all of its facets.&lt;br /&gt;
&lt;br /&gt;
= Other Mechanisms motivated by PV =&lt;br /&gt;
Craig Larman in [2] looks at some of the common mechanisms that exist which take motivation from the Protected Variation design principle. Several software components or systems that exist already such as Operating systems, video games use this mechanism either directly or indirectly. &lt;br /&gt;
&lt;br /&gt;
Even Components such as brokers and virtual machines are complex examples of indirection.[2]&lt;br /&gt;
&lt;br /&gt;
== Uniform Access ==&lt;br /&gt;
Uniform access is a syntactic construct which allows languages to express both a method and field access in the same way.Languages such as '''Ada, Eiffel, and C#''' support uniform access. For example, consider a '''Rectangle class''' with  public fields length and width as below&lt;br /&gt;
&lt;br /&gt;
   class Rectangle{&lt;br /&gt;
      public:&lt;br /&gt;
              float length;&lt;br /&gt;
              float width&lt;br /&gt;
      private:&lt;br /&gt;
               ......&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
Now a reference such as '''Rectangle.length''' might either refer to the public field or might internally call a method '''length():float''' depending on the implementation. This means that the developer can change public fields to access methods without changing the client code.&lt;br /&gt;
&lt;br /&gt;
== Data Driven Design ==&lt;br /&gt;
This type of design covers a wide variety of techniques, including reading codes, values, class file paths, class names, ''from an external source in order to change the behavior of or “parameterize” a system in some way at runtime.'' [2]&lt;br /&gt;
&lt;br /&gt;
Impelementations such as '''style sheets, metadata for object-relational mapping, property files''' etc belong to this category.&lt;br /&gt;
&lt;br /&gt;
''In this design the system can be protected from the impact of changes to data, metadata, or declarative variations by externalizing the variant, reading the behavior-influencing data in, and reasoning with it.'' [3]&lt;br /&gt;
&lt;br /&gt;
== Service Lookup ==&lt;br /&gt;
&lt;br /&gt;
The Service Lookup technique is in fact a special case of the data-driven design. These are generally used to do look ups for obtaining services. For example a naming service such as [http://en.wikipedia.org/wiki/JNDI '''JNDI'''] can be used to do service lookups to obtain services like [http://en.wikipedia.org/wiki/Jini Jini].&lt;br /&gt;
&lt;br /&gt;
This approach uses the stable interface of the lookup service to protect clients from variations in the location of services. The classic Service Lookup and the interaction among the different components involved is illustrated in the figure. From the figure we can also see how the responsibilities are seperated and how a change can be implemented without affecting the client (or multiple clients if more than one is involved).&lt;br /&gt;
&lt;br /&gt;
[[Image:Service_Lookup.jpg|frame|center]]&lt;br /&gt;
&lt;br /&gt;
== Interpreter-Driven Design ==&lt;br /&gt;
'''Interpreter-driven designs''' are design principles that some kind of interpreters which uses internal rules that read from an external source and execute them. The external sources could be script or language interpreters that read and run programs, virtual machines, neural network engines that execute nets, constraint logic engines that read and reason with constraint sets.&lt;br /&gt;
&lt;br /&gt;
The advantage of this design approach is that we can write logic expressions externally to influence a system. Because the whole logic is externalized, the system is protected from the changes to the logic.&lt;br /&gt;
&lt;br /&gt;
== Reflective or Meta-Level Designs ==&lt;br /&gt;
'''Reflective or Meta-Level Designs''' is also a special case of data driven designs. In [2], the ''java.beans.Introspector'' example is used to explain this design principle. To obtain a Bean-Info object in java using this, the getter method of the corresponding property is first called (i.e. ''getX() for a property X'') and then calling the ''Method.invoke.Reflective algorithms''. These use '''introspection''' and '''metalanguage''' services to protect the system from the impact of logic or external code variations.&lt;br /&gt;
&lt;br /&gt;
= Advantages =&lt;br /&gt;
Protected Variations aim to reduce the undesirable impacts on objects that can be caused by variations and instability in other objects that might be related. The advantages of this design pattern are:&lt;br /&gt;
&lt;br /&gt;
* Cost for changes is lowered.&lt;br /&gt;
* There is low coupling when the Protected Variations  pattern is used.&lt;br /&gt;
* Easier to add new features and easier to adapt the existing features to a different platform since it requires only a change to the wrapper.&lt;br /&gt;
* If there are clients accessing a service from an object, new features or services can be added without affecting the clients.&lt;br /&gt;
&lt;br /&gt;
= References =&lt;br /&gt;
[1] [http://en.wikipedia.org/wiki/GRASP_%28object-oriented_design%29 '''Wikipedia GRASP patterns''']&lt;br /&gt;
&lt;br /&gt;
[2] ''Protected variation: the importance of being closed'', Larman.C, ISSN: 0740-7459, 89 - 91&lt;br /&gt;
&lt;br /&gt;
[3] ''“On the Criteria to Be Used in Decomposing Systems into Modules”'', Comm. ACM, vol.12, no. 2, Dec. 1972&lt;br /&gt;
&lt;br /&gt;
[4] Object- Oriented Software Construction (IEEE Press, 1988)&lt;br /&gt;
&lt;br /&gt;
[5] ''“Prioritizing Forces in Software Design”'', Patterns Languages of Program Design, vol. 2, Addison-Wesley, 1996&lt;br /&gt;
&lt;br /&gt;
= See Also =&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Design_pattern_%28computer_science%29 '''Design Pattern''']&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Delegation_pattern '''Delegation Pattern''']&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Open_Closed_Principle '''Open-Closed Principle''']&lt;/div&gt;</summary>
		<author><name>Dragon9786</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch7_7e_GS&amp;diff=43205</id>
		<title>CSC/ECE 517 Fall 2010/ch7 7e GS</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch7_7e_GS&amp;diff=43205"/>
		<updated>2010-12-02T03:10:14Z</updated>

		<summary type="html">&lt;p&gt;Dragon9786: /* Interpreter-Driven Design */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
The '''Protected Variations pattern''' [5] is one of the '''GRASP''' patterns. '''General Responsibility Assignment Software Patterns (or Principles)''', abbreviated GRASP, consists of guidelines for assigning responsibility to classes and objects in object-oriented design.[1]&lt;br /&gt;
&lt;br /&gt;
The Protected Variations pattern protects elements from the variations on other elements (objects, systems, subsystems) by wrapping the focus of instability with an interface and using polymorphism to create various implementations of this interface.&lt;br /&gt;
&lt;br /&gt;
= Protected Variation Pattern =&lt;br /&gt;
This pattern mainly deals with the problem of designing objects, subsystems and systems so that any variations or instability in these elements does not have an undesirable impact on other elements. The Protected Variation pattern tries to address this problem by identifying points of predicted variation or instability and assignsresponsibilities to create a stable interface (or protection mechanism) around them.&lt;br /&gt;
&lt;br /&gt;
That is an external object trying to modify another object can only do this by the means of a wrapper which wraps the object to be accesed. Thus this insulates the objects from any changes or variation to other objects.&lt;br /&gt;
&lt;br /&gt;
Some of the standard practices motivated by this pattern are '''Data encapsulation, [http://en.wikipedia.org/wiki/Interface_%28computer_science%29 Interfaces], [http://en.wikipedia.org/wiki/Polymorphism_in_object-oriented_programming Polymorphism] and [http://en.wikipedia.org/wiki/Indirection Indirection].'''. Also the Protected Variation pattern in principle is very similar to the '''&amp;quot;Open-Closed Principle&amp;quot;''' discussed in detail by Bertrand Meyer in [4] and also very similar to what David Parnas means by [http://en.wikipedia.org/wiki/Information_hiding '''Information Hiding'''] in [3].&lt;br /&gt;
&lt;br /&gt;
== An Example ==&lt;br /&gt;
One commercial example that we can look at that best illustrates the Protected Variations design principle is in the commercial industry of video games. Vendors who make video games make money by building complex 3D game engines, sound effects and AI(Artificial Intelligence) effects.These companies often produce many games using the same engine, and release the game on many consoles like for instance a [http://en.wikipedia.org/wiki/Xbox '''XBox'''] or a [http://en.wikipedia.org/wiki/PlayStation '''Playstation'''].&lt;br /&gt;
This can be seen as implementing the Protected Variation pattern, in that&lt;br /&gt;
&lt;br /&gt;
*If a game is to be ported to another console, the wrapper object will have to delegate3 D graphics drawing to different console-level commands.&lt;br /&gt;
&lt;br /&gt;
*It makes sense in such a case to make changes only to the wrapper since the wrapper is simpler to change than the entire game and all of its facets.&lt;br /&gt;
&lt;br /&gt;
= Other Mechanisms motivated by PV =&lt;br /&gt;
Craig Larman in [2] looks at some of the common mechanisms that exist which take motivation from the Protected Variation design principle. Several software components or systems that exist already such as Operating systems, video games use this mechanism either directly or indirectly. &lt;br /&gt;
&lt;br /&gt;
Even Components such as brokers and virtual machines are complex examples of indirection.[2]&lt;br /&gt;
&lt;br /&gt;
== Uniform Access ==&lt;br /&gt;
Uniform access is a syntactic construct which allows languages to express both a method and field access in the same way.Languages such as '''Ada, Eiffel, and C#''' support uniform access. For example, consider a '''Rectangle class''' with  public fields length and width as below&lt;br /&gt;
&lt;br /&gt;
   class Rectangle{&lt;br /&gt;
      public:&lt;br /&gt;
              float length;&lt;br /&gt;
              float width&lt;br /&gt;
      private:&lt;br /&gt;
               ......&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
Now a reference such as '''Rectangle.length''' might either refer to the public field or might internally call a method '''length():float''' depending on the implementation. This means that the developer can change public fields to access methods without changing the client code.&lt;br /&gt;
&lt;br /&gt;
== Data Driven Design ==&lt;br /&gt;
This type of design covers a wide variety of techniques, including reading codes, values, class file paths, class names, ''from an external source in order to change the behavior of or “parameterize” a system in some way at runtime.'' [2]&lt;br /&gt;
&lt;br /&gt;
Impelementations such as '''style sheets, metadata for object-relational mapping, property files''' etc belong to this category.&lt;br /&gt;
&lt;br /&gt;
''In this design the system can be protected from the impact of changes to data, metadata, or declarative variations by externalizing the variant, reading the behavior-influencing data in, and reasoning with it.'' [3]&lt;br /&gt;
&lt;br /&gt;
== Service Lookup ==&lt;br /&gt;
&lt;br /&gt;
The Service Lookup technique is in fact a special case of the data-driven design. These are generally used to do look ups for obtaining services. For example a naming service such as [http://en.wikipedia.org/wiki/JNDI '''JNDI'''] can be used to do service lookups to obtain services like [http://en.wikipedia.org/wiki/Jini Jini].&lt;br /&gt;
&lt;br /&gt;
This approach uses the stable interface of the lookup service to protect clients from variations in the location of services. The classic Service Lookup and the interaction among the different components involved is illustrated in the figure. From the figure we can also see how the responsibilities are seperated and how a change can be implemented without affecting the client (or multiple clients if more than one is involved).&lt;br /&gt;
&lt;br /&gt;
[[Image:Service_Lookup.jpg|frame|center]]&lt;br /&gt;
&lt;br /&gt;
== Interpreter-Driven Design ==&lt;br /&gt;
'''Interpreter-driven designs''' are design principles that some kind of interpreters which uses internal rules that read from an external source and execute them. The external sources could be script or language interpreters that read and run programs, virtual machines, neural network engines that execute nets, constraint logic engines that read and reason with constraint sets.&lt;br /&gt;
&lt;br /&gt;
The advantage of this design approach is that we can write logic expressions externally to influence a system. Because the whole logic is externalized, the system is protected from the changes to the logic.&lt;br /&gt;
&lt;br /&gt;
== Reflective or Meta-Level Designs ==&lt;br /&gt;
Reflective or Meta-Level Designs is also a special case of data driven designs.&lt;br /&gt;
&lt;br /&gt;
= Advantages =&lt;br /&gt;
Protected Variations aim to reduce the undesirable impacts on objects that can be caused by variations and instability in other objects that might be related. The advantages of this design pattern are:&lt;br /&gt;
&lt;br /&gt;
* Cost for changes is lowered.&lt;br /&gt;
* There is low coupling when the Protected Variations  pattern is used.&lt;br /&gt;
* Easier to add new features and easier to adapt the existing features to a different platform since it requires only a change to the wrapper.&lt;br /&gt;
* If there are clients accessing a service from an object, new features or services can be added without affecting the clients.&lt;br /&gt;
&lt;br /&gt;
= References =&lt;br /&gt;
[1] [http://en.wikipedia.org/wiki/GRASP_%28object-oriented_design%29 '''Wikipedia GRASP patterns''']&lt;br /&gt;
&lt;br /&gt;
[2] ''Protected variation: the importance of being closed'', Larman.C, ISSN: 0740-7459, 89 - 91&lt;br /&gt;
&lt;br /&gt;
[3] ''“On the Criteria to Be Used in Decomposing Systems into Modules”'', Comm. ACM, vol.12, no. 2, Dec. 1972&lt;br /&gt;
&lt;br /&gt;
[4] Object- Oriented Software Construction (IEEE Press, 1988)&lt;br /&gt;
&lt;br /&gt;
[5] ''“Prioritizing Forces in Software Design”'', Patterns Languages of Program Design, vol. 2, Addison-Wesley, 1996&lt;br /&gt;
&lt;br /&gt;
= See Also =&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Design_pattern_%28computer_science%29 '''Design Pattern''']&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Delegation_pattern '''Delegation Pattern''']&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Open_Closed_Principle '''Open-Closed Principle''']&lt;/div&gt;</summary>
		<author><name>Dragon9786</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch7_7e_GS&amp;diff=43204</id>
		<title>CSC/ECE 517 Fall 2010/ch7 7e GS</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch7_7e_GS&amp;diff=43204"/>
		<updated>2010-12-02T03:09:58Z</updated>

		<summary type="html">&lt;p&gt;Dragon9786: /* Reflective or Meta-Level Designs */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
The '''Protected Variations pattern''' [5] is one of the '''GRASP''' patterns. '''General Responsibility Assignment Software Patterns (or Principles)''', abbreviated GRASP, consists of guidelines for assigning responsibility to classes and objects in object-oriented design.[1]&lt;br /&gt;
&lt;br /&gt;
The Protected Variations pattern protects elements from the variations on other elements (objects, systems, subsystems) by wrapping the focus of instability with an interface and using polymorphism to create various implementations of this interface.&lt;br /&gt;
&lt;br /&gt;
= Protected Variation Pattern =&lt;br /&gt;
This pattern mainly deals with the problem of designing objects, subsystems and systems so that any variations or instability in these elements does not have an undesirable impact on other elements. The Protected Variation pattern tries to address this problem by identifying points of predicted variation or instability and assignsresponsibilities to create a stable interface (or protection mechanism) around them.&lt;br /&gt;
&lt;br /&gt;
That is an external object trying to modify another object can only do this by the means of a wrapper which wraps the object to be accesed. Thus this insulates the objects from any changes or variation to other objects.&lt;br /&gt;
&lt;br /&gt;
Some of the standard practices motivated by this pattern are '''Data encapsulation, [http://en.wikipedia.org/wiki/Interface_%28computer_science%29 Interfaces], [http://en.wikipedia.org/wiki/Polymorphism_in_object-oriented_programming Polymorphism] and [http://en.wikipedia.org/wiki/Indirection Indirection].'''. Also the Protected Variation pattern in principle is very similar to the '''&amp;quot;Open-Closed Principle&amp;quot;''' discussed in detail by Bertrand Meyer in [4] and also very similar to what David Parnas means by [http://en.wikipedia.org/wiki/Information_hiding '''Information Hiding'''] in [3].&lt;br /&gt;
&lt;br /&gt;
== An Example ==&lt;br /&gt;
One commercial example that we can look at that best illustrates the Protected Variations design principle is in the commercial industry of video games. Vendors who make video games make money by building complex 3D game engines, sound effects and AI(Artificial Intelligence) effects.These companies often produce many games using the same engine, and release the game on many consoles like for instance a [http://en.wikipedia.org/wiki/Xbox '''XBox'''] or a [http://en.wikipedia.org/wiki/PlayStation '''Playstation'''].&lt;br /&gt;
This can be seen as implementing the Protected Variation pattern, in that&lt;br /&gt;
&lt;br /&gt;
*If a game is to be ported to another console, the wrapper object will have to delegate3 D graphics drawing to different console-level commands.&lt;br /&gt;
&lt;br /&gt;
*It makes sense in such a case to make changes only to the wrapper since the wrapper is simpler to change than the entire game and all of its facets.&lt;br /&gt;
&lt;br /&gt;
= Other Mechanisms motivated by PV =&lt;br /&gt;
Craig Larman in [2] looks at some of the common mechanisms that exist which take motivation from the Protected Variation design principle. Several software components or systems that exist already such as Operating systems, video games use this mechanism either directly or indirectly. &lt;br /&gt;
&lt;br /&gt;
Even Components such as brokers and virtual machines are complex examples of indirection.[2]&lt;br /&gt;
&lt;br /&gt;
== Uniform Access ==&lt;br /&gt;
Uniform access is a syntactic construct which allows languages to express both a method and field access in the same way.Languages such as '''Ada, Eiffel, and C#''' support uniform access. For example, consider a '''Rectangle class''' with  public fields length and width as below&lt;br /&gt;
&lt;br /&gt;
   class Rectangle{&lt;br /&gt;
      public:&lt;br /&gt;
              float length;&lt;br /&gt;
              float width&lt;br /&gt;
      private:&lt;br /&gt;
               ......&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
Now a reference such as '''Rectangle.length''' might either refer to the public field or might internally call a method '''length():float''' depending on the implementation. This means that the developer can change public fields to access methods without changing the client code.&lt;br /&gt;
&lt;br /&gt;
== Data Driven Design ==&lt;br /&gt;
This type of design covers a wide variety of techniques, including reading codes, values, class file paths, class names, ''from an external source in order to change the behavior of or “parameterize” a system in some way at runtime.'' [2]&lt;br /&gt;
&lt;br /&gt;
Impelementations such as '''style sheets, metadata for object-relational mapping, property files''' etc belong to this category.&lt;br /&gt;
&lt;br /&gt;
''In this design the system can be protected from the impact of changes to data, metadata, or declarative variations by externalizing the variant, reading the behavior-influencing data in, and reasoning with it.'' [3]&lt;br /&gt;
&lt;br /&gt;
== Service Lookup ==&lt;br /&gt;
&lt;br /&gt;
The Service Lookup technique is in fact a special case of the data-driven design. These are generally used to do look ups for obtaining services. For example a naming service such as [http://en.wikipedia.org/wiki/JNDI '''JNDI'''] can be used to do service lookups to obtain services like [http://en.wikipedia.org/wiki/Jini Jini].&lt;br /&gt;
&lt;br /&gt;
This approach uses the stable interface of the lookup service to protect clients from variations in the location of services. The classic Service Lookup and the interaction among the different components involved is illustrated in the figure. From the figure we can also see how the responsibilities are seperated and how a change can be implemented without affecting the client (or multiple clients if more than one is involved).&lt;br /&gt;
&lt;br /&gt;
[[Image:Service_Lookup.jpg|frame|center]]&lt;br /&gt;
&lt;br /&gt;
== Interpreter-Driven Design ==&lt;br /&gt;
Interpreter-driven designs are design principles that some kind of interpreters which uses internal rules that read from an external source and execute them. The external sources could be script or language interpreters that read and run programs, virtual machines, neural network engines that execute nets, constraint logic engines that read and reason with constraint sets.&lt;br /&gt;
&lt;br /&gt;
The advantage of this design approach is that we can write logic expressions externally to influence a system. Because the whole logic is externalized, the system is protected from the changes to the logic.&lt;br /&gt;
&lt;br /&gt;
== Reflective or Meta-Level Designs ==&lt;br /&gt;
Reflective or Meta-Level Designs is also a special case of data driven designs.&lt;br /&gt;
&lt;br /&gt;
= Advantages =&lt;br /&gt;
Protected Variations aim to reduce the undesirable impacts on objects that can be caused by variations and instability in other objects that might be related. The advantages of this design pattern are:&lt;br /&gt;
&lt;br /&gt;
* Cost for changes is lowered.&lt;br /&gt;
* There is low coupling when the Protected Variations  pattern is used.&lt;br /&gt;
* Easier to add new features and easier to adapt the existing features to a different platform since it requires only a change to the wrapper.&lt;br /&gt;
* If there are clients accessing a service from an object, new features or services can be added without affecting the clients.&lt;br /&gt;
&lt;br /&gt;
= References =&lt;br /&gt;
[1] [http://en.wikipedia.org/wiki/GRASP_%28object-oriented_design%29 '''Wikipedia GRASP patterns''']&lt;br /&gt;
&lt;br /&gt;
[2] ''Protected variation: the importance of being closed'', Larman.C, ISSN: 0740-7459, 89 - 91&lt;br /&gt;
&lt;br /&gt;
[3] ''“On the Criteria to Be Used in Decomposing Systems into Modules”'', Comm. ACM, vol.12, no. 2, Dec. 1972&lt;br /&gt;
&lt;br /&gt;
[4] Object- Oriented Software Construction (IEEE Press, 1988)&lt;br /&gt;
&lt;br /&gt;
[5] ''“Prioritizing Forces in Software Design”'', Patterns Languages of Program Design, vol. 2, Addison-Wesley, 1996&lt;br /&gt;
&lt;br /&gt;
= See Also =&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Design_pattern_%28computer_science%29 '''Design Pattern''']&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Delegation_pattern '''Delegation Pattern''']&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Open_Closed_Principle '''Open-Closed Principle''']&lt;/div&gt;</summary>
		<author><name>Dragon9786</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch7_7e_GS&amp;diff=43201</id>
		<title>CSC/ECE 517 Fall 2010/ch7 7e GS</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch7_7e_GS&amp;diff=43201"/>
		<updated>2010-12-02T03:07:38Z</updated>

		<summary type="html">&lt;p&gt;Dragon9786: /* Interpreter-Driven Design */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
The '''Protected Variations pattern''' [5] is one of the '''GRASP''' patterns. '''General Responsibility Assignment Software Patterns (or Principles)''', abbreviated GRASP, consists of guidelines for assigning responsibility to classes and objects in object-oriented design.[1]&lt;br /&gt;
&lt;br /&gt;
The Protected Variations pattern protects elements from the variations on other elements (objects, systems, subsystems) by wrapping the focus of instability with an interface and using polymorphism to create various implementations of this interface.&lt;br /&gt;
&lt;br /&gt;
= Protected Variation Pattern =&lt;br /&gt;
This pattern mainly deals with the problem of designing objects, subsystems and systems so that any variations or instability in these elements does not have an undesirable impact on other elements. The Protected Variation pattern tries to address this problem by identifying points of predicted variation or instability and assignsresponsibilities to create a stable interface (or protection mechanism) around them.&lt;br /&gt;
&lt;br /&gt;
That is an external object trying to modify another object can only do this by the means of a wrapper which wraps the object to be accesed. Thus this insulates the objects from any changes or variation to other objects.&lt;br /&gt;
&lt;br /&gt;
Some of the standard practices motivated by this pattern are '''Data encapsulation, [http://en.wikipedia.org/wiki/Interface_%28computer_science%29 Interfaces], [http://en.wikipedia.org/wiki/Polymorphism_in_object-oriented_programming Polymorphism] and [http://en.wikipedia.org/wiki/Indirection Indirection].'''. Also the Protected Variation pattern in principle is very similar to the '''&amp;quot;Open-Closed Principle&amp;quot;''' discussed in detail by Bertrand Meyer in [4] and also very similar to what David Parnas means by [http://en.wikipedia.org/wiki/Information_hiding '''Information Hiding'''] in [3].&lt;br /&gt;
&lt;br /&gt;
== An Example ==&lt;br /&gt;
One commercial example that we can look at that best illustrates the Protected Variations design principle is in the commercial industry of video games. Vendors who make video games make money by building complex 3D game engines, sound effects and AI(Artificial Intelligence) effects.These companies often produce many games using the same engine, and release the game on many consoles like for instance a [http://en.wikipedia.org/wiki/Xbox '''XBox'''] or a [http://en.wikipedia.org/wiki/PlayStation '''Playstation'''].&lt;br /&gt;
This can be seen as implementing the Protected Variation pattern, in that&lt;br /&gt;
&lt;br /&gt;
*If a game is to be ported to another console, the wrapper object will have to delegate3 D graphics drawing to different console-level commands.&lt;br /&gt;
&lt;br /&gt;
*It makes sense in such a case to make changes only to the wrapper since the wrapper is simpler to change than the entire game and all of its facets.&lt;br /&gt;
&lt;br /&gt;
= Other Mechanisms motivated by PV =&lt;br /&gt;
Craig Larman in [2] looks at some of the common mechanisms that exist which take motivation from the Protected Variation design principle. Several software components or systems that exist already such as Operating systems, video games use this mechanism either directly or indirectly. &lt;br /&gt;
&lt;br /&gt;
Even Components such as brokers and virtual machines are complex examples of indirection.[2]&lt;br /&gt;
&lt;br /&gt;
== Uniform Access ==&lt;br /&gt;
Uniform access is a syntactic construct which allows languages to express both a method and field access in the same way.Languages such as '''Ada, Eiffel, and C#''' support uniform access. For example, consider a '''Rectangle class''' with  public fields length and width as below&lt;br /&gt;
&lt;br /&gt;
   class Rectangle{&lt;br /&gt;
      public:&lt;br /&gt;
              float length;&lt;br /&gt;
              float width&lt;br /&gt;
      private:&lt;br /&gt;
               ......&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
Now a reference such as '''Rectangle.length''' might either refer to the public field or might internally call a method '''length():float''' depending on the implementation. This means that the developer can change public fields to access methods without changing the client code.&lt;br /&gt;
&lt;br /&gt;
== Data Driven Design ==&lt;br /&gt;
This type of design covers a wide variety of techniques, including reading codes, values, class file paths, class names, ''from an external source in order to change the behavior of or “parameterize” a system in some way at runtime.'' [2]&lt;br /&gt;
&lt;br /&gt;
Impelementations such as '''style sheets, metadata for object-relational mapping, property files''' etc belong to this category.&lt;br /&gt;
&lt;br /&gt;
''In this design the system can be protected from the impact of changes to data, metadata, or declarative variations by externalizing the variant, reading the behavior-influencing data in, and reasoning with it.'' [3]&lt;br /&gt;
&lt;br /&gt;
== Service Lookup ==&lt;br /&gt;
&lt;br /&gt;
The Service Lookup technique is in fact a special case of the data-driven design. These are generally used to do look ups for obtaining services. For example a naming service such as [http://en.wikipedia.org/wiki/JNDI '''JNDI'''] can be used to do service lookups to obtain services like [http://en.wikipedia.org/wiki/Jini Jini].&lt;br /&gt;
&lt;br /&gt;
This approach uses the stable interface of the lookup service to protect clients from variations in the location of services. The classic Service Lookup and the interaction among the different components involved is illustrated in the figure. From the figure we can also see how the responsibilities are seperated and how a change can be implemented without affecting the client (or multiple clients if more than one is involved).&lt;br /&gt;
&lt;br /&gt;
[[Image:Service_Lookup.jpg|frame|center]]&lt;br /&gt;
&lt;br /&gt;
== Interpreter-Driven Design ==&lt;br /&gt;
Interpreter-driven designs are design principles that some kind of interpreters which uses internal rules that read from an external source and execute them. The external sources could be script or language interpreters that read and run programs, virtual machines, neural network engines that execute nets, constraint logic engines that read and reason with constraint sets.&lt;br /&gt;
&lt;br /&gt;
The advantage of this design approach is that we can write logic expressions externally to influence a system. Because the whole logic is externalized, the system is protected from the changes to the logic.&lt;br /&gt;
&lt;br /&gt;
== Reflective or Meta-Level Designs ==&lt;br /&gt;
&lt;br /&gt;
= Advantages =&lt;br /&gt;
Protected Variations aim to reduce the undesirable impacts on objects that can be caused by variations and instability in other objects that might be related. The advantages of this design pattern are:&lt;br /&gt;
&lt;br /&gt;
* Cost for changes is lowered.&lt;br /&gt;
* There is low coupling when the Protected Variations  pattern is used.&lt;br /&gt;
* Easier to add new features and easier to adapt the existing features to a different platform since it requires only a change to the wrapper.&lt;br /&gt;
* If there are clients accessing a service from an object, new features or services can be added without affecting the clients.&lt;br /&gt;
&lt;br /&gt;
= References =&lt;br /&gt;
[1] [http://en.wikipedia.org/wiki/GRASP_%28object-oriented_design%29 '''Wikipedia GRASP patterns''']&lt;br /&gt;
&lt;br /&gt;
[2] ''Protected variation: the importance of being closed'', Larman.C, ISSN: 0740-7459, 89 - 91&lt;br /&gt;
&lt;br /&gt;
[3] ''“On the Criteria to Be Used in Decomposing Systems into Modules”'', Comm. ACM, vol.12, no. 2, Dec. 1972&lt;br /&gt;
&lt;br /&gt;
[4] Object- Oriented Software Construction (IEEE Press, 1988)&lt;br /&gt;
&lt;br /&gt;
[5] ''“Prioritizing Forces in Software Design”'', Patterns Languages of Program Design, vol. 2, Addison-Wesley, 1996&lt;br /&gt;
&lt;br /&gt;
= See Also =&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Design_pattern_%28computer_science%29 '''Design Pattern''']&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Delegation_pattern '''Delegation Pattern''']&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Open_Closed_Principle '''Open-Closed Principle''']&lt;/div&gt;</summary>
		<author><name>Dragon9786</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch7_7e_GS&amp;diff=43181</id>
		<title>CSC/ECE 517 Fall 2010/ch7 7e GS</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch7_7e_GS&amp;diff=43181"/>
		<updated>2010-12-02T02:48:14Z</updated>

		<summary type="html">&lt;p&gt;Dragon9786: /* See Also */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
The '''Protected Variations pattern''' [5] is one of the '''GRASP''' patterns. '''General Responsibility Assignment Software Patterns (or Principles)''', abbreviated GRASP, consists of guidelines for assigning responsibility to classes and objects in object-oriented design.[1]&lt;br /&gt;
&lt;br /&gt;
The Protected Variations pattern protects elements from the variations on other elements (objects, systems, subsystems) by wrapping the focus of instability with an interface and using polymorphism to create various implementations of this interface.&lt;br /&gt;
&lt;br /&gt;
= Protected Variation Pattern =&lt;br /&gt;
This pattern mainly deals with the problem of designing objects, subsystems and systems so that any variations or instability in these elements does not have an undesirable impact on other elements. The Protected Variation pattern tries to address this problem by identifying points of predicted variation or instability and assignsresponsibilities to create a stable interface (or protection mechanism) around them.&lt;br /&gt;
&lt;br /&gt;
That is an external object trying to modify another object can only do this by the means of a wrapper which wraps the object to be accesed. Thus this insulates the objects from any changes or variation to other objects.&lt;br /&gt;
&lt;br /&gt;
Some of the standard practices motivated by this pattern are '''Data encapsulation, [http://en.wikipedia.org/wiki/Interface_%28computer_science%29 Interfaces], [http://en.wikipedia.org/wiki/Polymorphism_in_object-oriented_programming Polymorphism] and [http://en.wikipedia.org/wiki/Indirection Indirection].'''. Also the Protected Variation pattern in principle is very similar to the '''&amp;quot;Open-Closed Principle&amp;quot;''' discussed in detail by Bertrand Meyer in [4] and also very similar to what David Parnas means by [http://en.wikipedia.org/wiki/Information_hiding '''Information Hiding'''] in [3].&lt;br /&gt;
&lt;br /&gt;
== An Example ==&lt;br /&gt;
One commercial example that we can look at that best illustrates the Protected Variations design principle is in the commercial industry of video games. Vendors who make video games make money by building complex 3D game engines, sound effects and AI(Artificial Intelligence) effects.These companies often produce many games using the same engine, and release the game on many consoles like for instance a [http://en.wikipedia.org/wiki/Xbox '''XBox'''] or a [http://en.wikipedia.org/wiki/PlayStation '''Playstation'''].&lt;br /&gt;
This can be seen as implementing the Protected Variation pattern, in that&lt;br /&gt;
&lt;br /&gt;
*If a game is to be ported to another console, the wrapper object will have to delegate3 D graphics drawing to different console-level commands.&lt;br /&gt;
&lt;br /&gt;
*It makes sense in such a case to make changes only to the wrapper since the wrapper is simpler to change than the entire game and all of its facets.&lt;br /&gt;
&lt;br /&gt;
= Other Mechanisms motivated by PV =&lt;br /&gt;
Craig Larman in [2] looks at some of the common mechanisms that exist which take motivation from the Protected Variation design principle. Several software components or systems that exist already such as Operating systems, video games use this mechanism either directly or indirectly. &lt;br /&gt;
&lt;br /&gt;
Even Components such as brokers and virtual machines are complex examples of indirection.[2]&lt;br /&gt;
&lt;br /&gt;
== Uniform Access ==&lt;br /&gt;
Uniform access is a syntactic construct which allows languages to express both a method and field access in the same way.Languages such as '''Ada, Eiffel, and C#''' support uniform access. For example, consider a '''Rectangle class''' with  public fields length and width as below&lt;br /&gt;
&lt;br /&gt;
   class Rectangle{&lt;br /&gt;
      public:&lt;br /&gt;
              float length;&lt;br /&gt;
              float width&lt;br /&gt;
      private:&lt;br /&gt;
               ......&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
Now a reference such as '''Rectangle.length''' might either refer to the public field or might internally call a method '''length():float''' depending on the implementation. This means that the developer can change public fields to access methods without changing the client code.&lt;br /&gt;
&lt;br /&gt;
== Data Driven Design ==&lt;br /&gt;
This type of design covers a wide variety of techniques, including reading codes, values, class file paths, class names, ''from an external source in order to change the behavior of or “parameterize” a system in some way at runtime.'' [2]&lt;br /&gt;
&lt;br /&gt;
Impelementations such as '''style sheets, metadata for object-relational mapping, property files''' etc belong to this category.&lt;br /&gt;
&lt;br /&gt;
''In this design the system can be protected from the impact of changes to data, metadata, or declarative variations by externalizing the variant, reading the behavior-influencing data in, and reasoning with it.'' [3]&lt;br /&gt;
&lt;br /&gt;
== Service Lookup ==&lt;br /&gt;
&lt;br /&gt;
The Service Lookup technique is in fact a special case of the data-driven design. These are generally used to do look ups for obtaining services. For example a naming service such as [http://en.wikipedia.org/wiki/JNDI '''JNDI'''] can be used to do service lookups to obtain services like [http://en.wikipedia.org/wiki/Jini Jini].&lt;br /&gt;
&lt;br /&gt;
This approach uses the stable interface of the lookup service to protect clients from variations in the location of services. The classic Service Lookup and the interaction among the different components involved is illustrated in the figure. From the figure we can also see how the responsibilities are seperated and how a change can be implemented without affecting the client (or multiple clients if more than one is involved).&lt;br /&gt;
&lt;br /&gt;
[[Image:Service_Lookup.jpg|frame|center]]&lt;br /&gt;
&lt;br /&gt;
== Interpreter-Driven Design ==&lt;br /&gt;
== Reflective or Meta-Level Designs ==&lt;br /&gt;
&lt;br /&gt;
= Advantages =&lt;br /&gt;
Protected Variations aim to reduce the undesirable impacts on objects that can be caused by variations and instability in other objects that might be related. The advantages of this design pattern are:&lt;br /&gt;
&lt;br /&gt;
* Cost for changes is lowered.&lt;br /&gt;
* There is low coupling when the Protected Variations  pattern is used.&lt;br /&gt;
* Easier to add new features and easier to adapt the existing features to a different platform since it requires only a change to the wrapper.&lt;br /&gt;
* If there are clients accessing a service from an object, new features or services can be added without affecting the clients.&lt;br /&gt;
&lt;br /&gt;
= References =&lt;br /&gt;
[1] [http://en.wikipedia.org/wiki/GRASP_%28object-oriented_design%29 '''Wikipedia GRASP patterns''']&lt;br /&gt;
&lt;br /&gt;
[2] ''Protected variation: the importance of being closed'', Larman.C, ISSN: 0740-7459, 89 - 91&lt;br /&gt;
&lt;br /&gt;
[3] ''“On the Criteria to Be Used in Decomposing Systems into Modules”'', Comm. ACM, vol.12, no. 2, Dec. 1972&lt;br /&gt;
&lt;br /&gt;
[4] Object- Oriented Software Construction (IEEE Press, 1988)&lt;br /&gt;
&lt;br /&gt;
[5] ''“Prioritizing Forces in Software Design”'', Patterns Languages of Program Design, vol. 2, Addison-Wesley, 1996&lt;br /&gt;
&lt;br /&gt;
= See Also =&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Design_pattern_%28computer_science%29 '''Design Pattern''']&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Delegation_pattern '''Delegation Pattern''']&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Open_Closed_Principle '''Open-Closed Principle''']&lt;/div&gt;</summary>
		<author><name>Dragon9786</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch7_7e_GS&amp;diff=43179</id>
		<title>CSC/ECE 517 Fall 2010/ch7 7e GS</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch7_7e_GS&amp;diff=43179"/>
		<updated>2010-12-02T02:47:46Z</updated>

		<summary type="html">&lt;p&gt;Dragon9786: /* Protected Variation Pattern */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
The '''Protected Variations pattern''' [5] is one of the '''GRASP''' patterns. '''General Responsibility Assignment Software Patterns (or Principles)''', abbreviated GRASP, consists of guidelines for assigning responsibility to classes and objects in object-oriented design.[1]&lt;br /&gt;
&lt;br /&gt;
The Protected Variations pattern protects elements from the variations on other elements (objects, systems, subsystems) by wrapping the focus of instability with an interface and using polymorphism to create various implementations of this interface.&lt;br /&gt;
&lt;br /&gt;
= Protected Variation Pattern =&lt;br /&gt;
This pattern mainly deals with the problem of designing objects, subsystems and systems so that any variations or instability in these elements does not have an undesirable impact on other elements. The Protected Variation pattern tries to address this problem by identifying points of predicted variation or instability and assignsresponsibilities to create a stable interface (or protection mechanism) around them.&lt;br /&gt;
&lt;br /&gt;
That is an external object trying to modify another object can only do this by the means of a wrapper which wraps the object to be accesed. Thus this insulates the objects from any changes or variation to other objects.&lt;br /&gt;
&lt;br /&gt;
Some of the standard practices motivated by this pattern are '''Data encapsulation, [http://en.wikipedia.org/wiki/Interface_%28computer_science%29 Interfaces], [http://en.wikipedia.org/wiki/Polymorphism_in_object-oriented_programming Polymorphism] and [http://en.wikipedia.org/wiki/Indirection Indirection].'''. Also the Protected Variation pattern in principle is very similar to the '''&amp;quot;Open-Closed Principle&amp;quot;''' discussed in detail by Bertrand Meyer in [4] and also very similar to what David Parnas means by [http://en.wikipedia.org/wiki/Information_hiding '''Information Hiding'''] in [3].&lt;br /&gt;
&lt;br /&gt;
== An Example ==&lt;br /&gt;
One commercial example that we can look at that best illustrates the Protected Variations design principle is in the commercial industry of video games. Vendors who make video games make money by building complex 3D game engines, sound effects and AI(Artificial Intelligence) effects.These companies often produce many games using the same engine, and release the game on many consoles like for instance a [http://en.wikipedia.org/wiki/Xbox '''XBox'''] or a [http://en.wikipedia.org/wiki/PlayStation '''Playstation'''].&lt;br /&gt;
This can be seen as implementing the Protected Variation pattern, in that&lt;br /&gt;
&lt;br /&gt;
*If a game is to be ported to another console, the wrapper object will have to delegate3 D graphics drawing to different console-level commands.&lt;br /&gt;
&lt;br /&gt;
*It makes sense in such a case to make changes only to the wrapper since the wrapper is simpler to change than the entire game and all of its facets.&lt;br /&gt;
&lt;br /&gt;
= Other Mechanisms motivated by PV =&lt;br /&gt;
Craig Larman in [2] looks at some of the common mechanisms that exist which take motivation from the Protected Variation design principle. Several software components or systems that exist already such as Operating systems, video games use this mechanism either directly or indirectly. &lt;br /&gt;
&lt;br /&gt;
Even Components such as brokers and virtual machines are complex examples of indirection.[2]&lt;br /&gt;
&lt;br /&gt;
== Uniform Access ==&lt;br /&gt;
Uniform access is a syntactic construct which allows languages to express both a method and field access in the same way.Languages such as '''Ada, Eiffel, and C#''' support uniform access. For example, consider a '''Rectangle class''' with  public fields length and width as below&lt;br /&gt;
&lt;br /&gt;
   class Rectangle{&lt;br /&gt;
      public:&lt;br /&gt;
              float length;&lt;br /&gt;
              float width&lt;br /&gt;
      private:&lt;br /&gt;
               ......&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
Now a reference such as '''Rectangle.length''' might either refer to the public field or might internally call a method '''length():float''' depending on the implementation. This means that the developer can change public fields to access methods without changing the client code.&lt;br /&gt;
&lt;br /&gt;
== Data Driven Design ==&lt;br /&gt;
This type of design covers a wide variety of techniques, including reading codes, values, class file paths, class names, ''from an external source in order to change the behavior of or “parameterize” a system in some way at runtime.'' [2]&lt;br /&gt;
&lt;br /&gt;
Impelementations such as '''style sheets, metadata for object-relational mapping, property files''' etc belong to this category.&lt;br /&gt;
&lt;br /&gt;
''In this design the system can be protected from the impact of changes to data, metadata, or declarative variations by externalizing the variant, reading the behavior-influencing data in, and reasoning with it.'' [3]&lt;br /&gt;
&lt;br /&gt;
== Service Lookup ==&lt;br /&gt;
&lt;br /&gt;
The Service Lookup technique is in fact a special case of the data-driven design. These are generally used to do look ups for obtaining services. For example a naming service such as [http://en.wikipedia.org/wiki/JNDI '''JNDI'''] can be used to do service lookups to obtain services like [http://en.wikipedia.org/wiki/Jini Jini].&lt;br /&gt;
&lt;br /&gt;
This approach uses the stable interface of the lookup service to protect clients from variations in the location of services. The classic Service Lookup and the interaction among the different components involved is illustrated in the figure. From the figure we can also see how the responsibilities are seperated and how a change can be implemented without affecting the client (or multiple clients if more than one is involved).&lt;br /&gt;
&lt;br /&gt;
[[Image:Service_Lookup.jpg|frame|center]]&lt;br /&gt;
&lt;br /&gt;
== Interpreter-Driven Design ==&lt;br /&gt;
== Reflective or Meta-Level Designs ==&lt;br /&gt;
&lt;br /&gt;
= Advantages =&lt;br /&gt;
Protected Variations aim to reduce the undesirable impacts on objects that can be caused by variations and instability in other objects that might be related. The advantages of this design pattern are:&lt;br /&gt;
&lt;br /&gt;
* Cost for changes is lowered.&lt;br /&gt;
* There is low coupling when the Protected Variations  pattern is used.&lt;br /&gt;
* Easier to add new features and easier to adapt the existing features to a different platform since it requires only a change to the wrapper.&lt;br /&gt;
* If there are clients accessing a service from an object, new features or services can be added without affecting the clients.&lt;br /&gt;
&lt;br /&gt;
= References =&lt;br /&gt;
[1] [http://en.wikipedia.org/wiki/GRASP_%28object-oriented_design%29 '''Wikipedia GRASP patterns''']&lt;br /&gt;
&lt;br /&gt;
[2] ''Protected variation: the importance of being closed'', Larman.C, ISSN: 0740-7459, 89 - 91&lt;br /&gt;
&lt;br /&gt;
[3] ''“On the Criteria to Be Used in Decomposing Systems into Modules”'', Comm. ACM, vol.12, no. 2, Dec. 1972&lt;br /&gt;
&lt;br /&gt;
[4] Object- Oriented Software Construction (IEEE Press, 1988)&lt;br /&gt;
&lt;br /&gt;
[5] ''“Prioritizing Forces in Software Design”'', Patterns Languages of Program Design, vol. 2, Addison-Wesley, 1996&lt;br /&gt;
&lt;br /&gt;
= See Also =&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Design_pattern_%28computer_science%29 '''Design Pattern''']&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Delegation_pattern '''Delegation Pattern''']&lt;/div&gt;</summary>
		<author><name>Dragon9786</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch7_7e_GS&amp;diff=43175</id>
		<title>CSC/ECE 517 Fall 2010/ch7 7e GS</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch7_7e_GS&amp;diff=43175"/>
		<updated>2010-12-02T02:46:39Z</updated>

		<summary type="html">&lt;p&gt;Dragon9786: /* See Also */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
The '''Protected Variations pattern''' [5] is one of the '''GRASP''' patterns. '''General Responsibility Assignment Software Patterns (or Principles)''', abbreviated GRASP, consists of guidelines for assigning responsibility to classes and objects in object-oriented design.[1]&lt;br /&gt;
&lt;br /&gt;
The Protected Variations pattern protects elements from the variations on other elements (objects, systems, subsystems) by wrapping the focus of instability with an interface and using polymorphism to create various implementations of this interface.&lt;br /&gt;
&lt;br /&gt;
= Protected Variation Pattern =&lt;br /&gt;
This pattern mainly deals with the problem of designing objects, subsystems and systems so that any variations or instability in these elements does not have an undesirable impact on other elements. The Protected Variation pattern tries to address this problem by identifying points of predicted variation or instability and assignsresponsibilities to create a stable interface (or protection mechanism) around them.&lt;br /&gt;
&lt;br /&gt;
That is an external object trying to modify another object can only do this by the means of a wrapper which wraps the object to be accesed. Thus this insulates the objects from any changes or variation to other objects.&lt;br /&gt;
&lt;br /&gt;
Some of the standard practices motivated by this pattern are '''Data encapsulation, [http://en.wikipedia.org/wiki/Interface_%28computer_science%29 Interfaces], [http://en.wikipedia.org/wiki/Polymorphism_in_object-oriented_programming Polymorphism] and [http://en.wikipedia.org/wiki/Indirection Indirection].'''. Also the Protected Variation pattern in principle is very similar to the '''&amp;quot;Open-Close Principle&amp;quot;''' discussed in detail by Bertrand Meyer in [4] and also very similar to what David Parnas means by [http://en.wikipedia.org/wiki/Information_hiding '''Information Hiding'''] in [3].&lt;br /&gt;
&lt;br /&gt;
== An Example ==&lt;br /&gt;
One commercial example that we can look at that best illustrates the Protected Variations design principle is in the commercial industry of video games. Vendors who make video games make money by building complex 3D game engines, sound effects and AI(Artificial Intelligence) effects.These companies often produce many games using the same engine, and release the game on many consoles like for instance a [http://en.wikipedia.org/wiki/Xbox '''XBox'''] or a [http://en.wikipedia.org/wiki/PlayStation '''Playstation'''].&lt;br /&gt;
This can be seen as implementing the Protected Variation pattern, in that&lt;br /&gt;
&lt;br /&gt;
*If a game is to be ported to another console, the wrapper object will have to delegate3 D graphics drawing to different console-level commands.&lt;br /&gt;
&lt;br /&gt;
*It makes sense in such a case to make changes only to the wrapper since the wrapper is simpler to change than the entire game and all of its facets.&lt;br /&gt;
&lt;br /&gt;
= Other Mechanisms motivated by PV =&lt;br /&gt;
Craig Larman in [2] looks at some of the common mechanisms that exist which take motivation from the Protected Variation design principle. Several software components or systems that exist already such as Operating systems, video games use this mechanism either directly or indirectly. &lt;br /&gt;
&lt;br /&gt;
Even Components such as brokers and virtual machines are complex examples of indirection.[2]&lt;br /&gt;
&lt;br /&gt;
== Uniform Access ==&lt;br /&gt;
Uniform access is a syntactic construct which allows languages to express both a method and field access in the same way.Languages such as '''Ada, Eiffel, and C#''' support uniform access. For example, consider a '''Rectangle class''' with  public fields length and width as below&lt;br /&gt;
&lt;br /&gt;
   class Rectangle{&lt;br /&gt;
      public:&lt;br /&gt;
              float length;&lt;br /&gt;
              float width&lt;br /&gt;
      private:&lt;br /&gt;
               ......&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
Now a reference such as '''Rectangle.length''' might either refer to the public field or might internally call a method '''length():float''' depending on the implementation. This means that the developer can change public fields to access methods without changing the client code.&lt;br /&gt;
&lt;br /&gt;
== Data Driven Design ==&lt;br /&gt;
This type of design covers a wide variety of techniques, including reading codes, values, class file paths, class names, ''from an external source in order to change the behavior of or “parameterize” a system in some way at runtime.'' [2]&lt;br /&gt;
&lt;br /&gt;
Impelementations such as '''style sheets, metadata for object-relational mapping, property files''' etc belong to this category.&lt;br /&gt;
&lt;br /&gt;
''In this design the system can be protected from the impact of changes to data, metadata, or declarative variations by externalizing the variant, reading the behavior-influencing data in, and reasoning with it.'' [3]&lt;br /&gt;
&lt;br /&gt;
== Service Lookup ==&lt;br /&gt;
&lt;br /&gt;
The Service Lookup technique is in fact a special case of the data-driven design. These are generally used to do look ups for obtaining services. For example a naming service such as [http://en.wikipedia.org/wiki/JNDI '''JNDI'''] can be used to do service lookups to obtain services like [http://en.wikipedia.org/wiki/Jini Jini].&lt;br /&gt;
&lt;br /&gt;
This approach uses the stable interface of the lookup service to protect clients from variations in the location of services. The classic Service Lookup and the interaction among the different components involved is illustrated in the figure. From the figure we can also see how the responsibilities are seperated and how a change can be implemented without affecting the client (or multiple clients if more than one is involved).&lt;br /&gt;
&lt;br /&gt;
[[Image:Service_Lookup.jpg|frame|center]]&lt;br /&gt;
&lt;br /&gt;
== Interpreter-Driven Design ==&lt;br /&gt;
== Reflective or Meta-Level Designs ==&lt;br /&gt;
&lt;br /&gt;
= Advantages =&lt;br /&gt;
Protected Variations aim to reduce the undesirable impacts on objects that can be caused by variations and instability in other objects that might be related. The advantages of this design pattern are:&lt;br /&gt;
&lt;br /&gt;
* Cost for changes is lowered.&lt;br /&gt;
* There is low coupling when the Protected Variations  pattern is used.&lt;br /&gt;
* Easier to add new features and easier to adapt the existing features to a different platform since it requires only a change to the wrapper.&lt;br /&gt;
* If there are clients accessing a service from an object, new features or services can be added without affecting the clients.&lt;br /&gt;
&lt;br /&gt;
= References =&lt;br /&gt;
[1] [http://en.wikipedia.org/wiki/GRASP_%28object-oriented_design%29 '''Wikipedia GRASP patterns''']&lt;br /&gt;
&lt;br /&gt;
[2] ''Protected variation: the importance of being closed'', Larman.C, ISSN: 0740-7459, 89 - 91&lt;br /&gt;
&lt;br /&gt;
[3] ''“On the Criteria to Be Used in Decomposing Systems into Modules”'', Comm. ACM, vol.12, no. 2, Dec. 1972&lt;br /&gt;
&lt;br /&gt;
[4] Object- Oriented Software Construction (IEEE Press, 1988)&lt;br /&gt;
&lt;br /&gt;
[5] ''“Prioritizing Forces in Software Design”'', Patterns Languages of Program Design, vol. 2, Addison-Wesley, 1996&lt;br /&gt;
&lt;br /&gt;
= See Also =&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Design_pattern_%28computer_science%29 '''Design Pattern''']&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Delegation_pattern '''Delegation Pattern''']&lt;/div&gt;</summary>
		<author><name>Dragon9786</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch7_7e_GS&amp;diff=43171</id>
		<title>CSC/ECE 517 Fall 2010/ch7 7e GS</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch7_7e_GS&amp;diff=43171"/>
		<updated>2010-12-02T02:45:01Z</updated>

		<summary type="html">&lt;p&gt;Dragon9786: /* Data Driven Design */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
The '''Protected Variations pattern''' [5] is one of the '''GRASP''' patterns. '''General Responsibility Assignment Software Patterns (or Principles)''', abbreviated GRASP, consists of guidelines for assigning responsibility to classes and objects in object-oriented design.[1]&lt;br /&gt;
&lt;br /&gt;
The Protected Variations pattern protects elements from the variations on other elements (objects, systems, subsystems) by wrapping the focus of instability with an interface and using polymorphism to create various implementations of this interface.&lt;br /&gt;
&lt;br /&gt;
= Protected Variation Pattern =&lt;br /&gt;
This pattern mainly deals with the problem of designing objects, subsystems and systems so that any variations or instability in these elements does not have an undesirable impact on other elements. The Protected Variation pattern tries to address this problem by identifying points of predicted variation or instability and assignsresponsibilities to create a stable interface (or protection mechanism) around them.&lt;br /&gt;
&lt;br /&gt;
That is an external object trying to modify another object can only do this by the means of a wrapper which wraps the object to be accesed. Thus this insulates the objects from any changes or variation to other objects.&lt;br /&gt;
&lt;br /&gt;
Some of the standard practices motivated by this pattern are '''Data encapsulation, [http://en.wikipedia.org/wiki/Interface_%28computer_science%29 Interfaces], [http://en.wikipedia.org/wiki/Polymorphism_in_object-oriented_programming Polymorphism] and [http://en.wikipedia.org/wiki/Indirection Indirection].'''. Also the Protected Variation pattern in principle is very similar to the '''&amp;quot;Open-Close Principle&amp;quot;''' discussed in detail by Bertrand Meyer in [4] and also very similar to what David Parnas means by [http://en.wikipedia.org/wiki/Information_hiding '''Information Hiding'''] in [3].&lt;br /&gt;
&lt;br /&gt;
== An Example ==&lt;br /&gt;
One commercial example that we can look at that best illustrates the Protected Variations design principle is in the commercial industry of video games. Vendors who make video games make money by building complex 3D game engines, sound effects and AI(Artificial Intelligence) effects.These companies often produce many games using the same engine, and release the game on many consoles like for instance a [http://en.wikipedia.org/wiki/Xbox '''XBox'''] or a [http://en.wikipedia.org/wiki/PlayStation '''Playstation'''].&lt;br /&gt;
This can be seen as implementing the Protected Variation pattern, in that&lt;br /&gt;
&lt;br /&gt;
*If a game is to be ported to another console, the wrapper object will have to delegate3 D graphics drawing to different console-level commands.&lt;br /&gt;
&lt;br /&gt;
*It makes sense in such a case to make changes only to the wrapper since the wrapper is simpler to change than the entire game and all of its facets.&lt;br /&gt;
&lt;br /&gt;
= Other Mechanisms motivated by PV =&lt;br /&gt;
Craig Larman in [2] looks at some of the common mechanisms that exist which take motivation from the Protected Variation design principle. Several software components or systems that exist already such as Operating systems, video games use this mechanism either directly or indirectly. &lt;br /&gt;
&lt;br /&gt;
Even Components such as brokers and virtual machines are complex examples of indirection.[2]&lt;br /&gt;
&lt;br /&gt;
== Uniform Access ==&lt;br /&gt;
Uniform access is a syntactic construct which allows languages to express both a method and field access in the same way.Languages such as '''Ada, Eiffel, and C#''' support uniform access. For example, consider a '''Rectangle class''' with  public fields length and width as below&lt;br /&gt;
&lt;br /&gt;
   class Rectangle{&lt;br /&gt;
      public:&lt;br /&gt;
              float length;&lt;br /&gt;
              float width&lt;br /&gt;
      private:&lt;br /&gt;
               ......&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
Now a reference such as '''Rectangle.length''' might either refer to the public field or might internally call a method '''length():float''' depending on the implementation. This means that the developer can change public fields to access methods without changing the client code.&lt;br /&gt;
&lt;br /&gt;
== Data Driven Design ==&lt;br /&gt;
This type of design covers a wide variety of techniques, including reading codes, values, class file paths, class names, ''from an external source in order to change the behavior of or “parameterize” a system in some way at runtime.'' [2]&lt;br /&gt;
&lt;br /&gt;
Impelementations such as '''style sheets, metadata for object-relational mapping, property files''' etc belong to this category.&lt;br /&gt;
&lt;br /&gt;
''In this design the system can be protected from the impact of changes to data, metadata, or declarative variations by externalizing the variant, reading the behavior-influencing data in, and reasoning with it.'' [3]&lt;br /&gt;
&lt;br /&gt;
== Service Lookup ==&lt;br /&gt;
&lt;br /&gt;
The Service Lookup technique is in fact a special case of the data-driven design. These are generally used to do look ups for obtaining services. For example a naming service such as [http://en.wikipedia.org/wiki/JNDI '''JNDI'''] can be used to do service lookups to obtain services like [http://en.wikipedia.org/wiki/Jini Jini].&lt;br /&gt;
&lt;br /&gt;
This approach uses the stable interface of the lookup service to protect clients from variations in the location of services. The classic Service Lookup and the interaction among the different components involved is illustrated in the figure. From the figure we can also see how the responsibilities are seperated and how a change can be implemented without affecting the client (or multiple clients if more than one is involved).&lt;br /&gt;
&lt;br /&gt;
[[Image:Service_Lookup.jpg|frame|center]]&lt;br /&gt;
&lt;br /&gt;
== Interpreter-Driven Design ==&lt;br /&gt;
== Reflective or Meta-Level Designs ==&lt;br /&gt;
&lt;br /&gt;
= Advantages =&lt;br /&gt;
Protected Variations aim to reduce the undesirable impacts on objects that can be caused by variations and instability in other objects that might be related. The advantages of this design pattern are:&lt;br /&gt;
&lt;br /&gt;
* Cost for changes is lowered.&lt;br /&gt;
* There is low coupling when the Protected Variations  pattern is used.&lt;br /&gt;
* Easier to add new features and easier to adapt the existing features to a different platform since it requires only a change to the wrapper.&lt;br /&gt;
* If there are clients accessing a service from an object, new features or services can be added without affecting the clients.&lt;br /&gt;
&lt;br /&gt;
= References =&lt;br /&gt;
[1] [http://en.wikipedia.org/wiki/GRASP_%28object-oriented_design%29 '''Wikipedia GRASP patterns''']&lt;br /&gt;
&lt;br /&gt;
[2] ''Protected variation: the importance of being closed'', Larman.C, ISSN: 0740-7459, 89 - 91&lt;br /&gt;
&lt;br /&gt;
[3] ''“On the Criteria to Be Used in Decomposing Systems into Modules”'', Comm. ACM, vol.12, no. 2, Dec. 1972&lt;br /&gt;
&lt;br /&gt;
[4] Object- Oriented Software Construction (IEEE Press, 1988)&lt;br /&gt;
&lt;br /&gt;
[5] ''“Prioritizing Forces in Software Design”'', Patterns Languages of Program Design, vol. 2, Addison-Wesley, 1996&lt;br /&gt;
&lt;br /&gt;
= See Also =&lt;/div&gt;</summary>
		<author><name>Dragon9786</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch7_7e_GS&amp;diff=43170</id>
		<title>CSC/ECE 517 Fall 2010/ch7 7e GS</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch7_7e_GS&amp;diff=43170"/>
		<updated>2010-12-02T02:44:18Z</updated>

		<summary type="html">&lt;p&gt;Dragon9786: /* Service Lookup */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
The '''Protected Variations pattern''' [5] is one of the '''GRASP''' patterns. '''General Responsibility Assignment Software Patterns (or Principles)''', abbreviated GRASP, consists of guidelines for assigning responsibility to classes and objects in object-oriented design.[1]&lt;br /&gt;
&lt;br /&gt;
The Protected Variations pattern protects elements from the variations on other elements (objects, systems, subsystems) by wrapping the focus of instability with an interface and using polymorphism to create various implementations of this interface.&lt;br /&gt;
&lt;br /&gt;
= Protected Variation Pattern =&lt;br /&gt;
This pattern mainly deals with the problem of designing objects, subsystems and systems so that any variations or instability in these elements does not have an undesirable impact on other elements. The Protected Variation pattern tries to address this problem by identifying points of predicted variation or instability and assignsresponsibilities to create a stable interface (or protection mechanism) around them.&lt;br /&gt;
&lt;br /&gt;
That is an external object trying to modify another object can only do this by the means of a wrapper which wraps the object to be accesed. Thus this insulates the objects from any changes or variation to other objects.&lt;br /&gt;
&lt;br /&gt;
Some of the standard practices motivated by this pattern are '''Data encapsulation, [http://en.wikipedia.org/wiki/Interface_%28computer_science%29 Interfaces], [http://en.wikipedia.org/wiki/Polymorphism_in_object-oriented_programming Polymorphism] and [http://en.wikipedia.org/wiki/Indirection Indirection].'''. Also the Protected Variation pattern in principle is very similar to the '''&amp;quot;Open-Close Principle&amp;quot;''' discussed in detail by Bertrand Meyer in [4] and also very similar to what David Parnas means by [http://en.wikipedia.org/wiki/Information_hiding '''Information Hiding'''] in [3].&lt;br /&gt;
&lt;br /&gt;
== An Example ==&lt;br /&gt;
One commercial example that we can look at that best illustrates the Protected Variations design principle is in the commercial industry of video games. Vendors who make video games make money by building complex 3D game engines, sound effects and AI(Artificial Intelligence) effects.These companies often produce many games using the same engine, and release the game on many consoles like for instance a [http://en.wikipedia.org/wiki/Xbox '''XBox'''] or a [http://en.wikipedia.org/wiki/PlayStation '''Playstation'''].&lt;br /&gt;
This can be seen as implementing the Protected Variation pattern, in that&lt;br /&gt;
&lt;br /&gt;
*If a game is to be ported to another console, the wrapper object will have to delegate3 D graphics drawing to different console-level commands.&lt;br /&gt;
&lt;br /&gt;
*It makes sense in such a case to make changes only to the wrapper since the wrapper is simpler to change than the entire game and all of its facets.&lt;br /&gt;
&lt;br /&gt;
= Other Mechanisms motivated by PV =&lt;br /&gt;
Craig Larman in [2] looks at some of the common mechanisms that exist which take motivation from the Protected Variation design principle. Several software components or systems that exist already such as Operating systems, video games use this mechanism either directly or indirectly. &lt;br /&gt;
&lt;br /&gt;
Even Components such as brokers and virtual machines are complex examples of indirection.[2]&lt;br /&gt;
&lt;br /&gt;
== Uniform Access ==&lt;br /&gt;
Uniform access is a syntactic construct which allows languages to express both a method and field access in the same way.Languages such as '''Ada, Eiffel, and C#''' support uniform access. For example, consider a '''Rectangle class''' with  public fields length and width as below&lt;br /&gt;
&lt;br /&gt;
   class Rectangle{&lt;br /&gt;
      public:&lt;br /&gt;
              float length;&lt;br /&gt;
              float width&lt;br /&gt;
      private:&lt;br /&gt;
               ......&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
Now a reference such as '''Rectangle.length''' might either refer to the public field or might internally call a method '''length():float''' depending on the implementation. This means that the developer can change public fields to access methods without changing the client code.&lt;br /&gt;
&lt;br /&gt;
== Data Driven Design ==&lt;br /&gt;
This type of design covers a wide variety of techniques, including reading codes, values, class file paths, class names, ''from an external source in order to change the behavior of or “parameterize” a system in some way at runtime.'' [2]&lt;br /&gt;
&lt;br /&gt;
Impelementations such as '''style sheets, metadata for object-relational mapping, property files''' etc belong to this category.&lt;br /&gt;
&lt;br /&gt;
In this design the system can be protected from the impact of changes to data, metadata, or declarative variations by externalizing the variant, reading the behavior-influencing data in, and reasoning with it.&lt;br /&gt;
&lt;br /&gt;
== Service Lookup ==&lt;br /&gt;
&lt;br /&gt;
The Service Lookup technique is in fact a special case of the data-driven design. These are generally used to do look ups for obtaining services. For example a naming service such as [http://en.wikipedia.org/wiki/JNDI '''JNDI'''] can be used to do service lookups to obtain services like [http://en.wikipedia.org/wiki/Jini Jini].&lt;br /&gt;
&lt;br /&gt;
This approach uses the stable interface of the lookup service to protect clients from variations in the location of services. The classic Service Lookup and the interaction among the different components involved is illustrated in the figure. From the figure we can also see how the responsibilities are seperated and how a change can be implemented without affecting the client (or multiple clients if more than one is involved).&lt;br /&gt;
&lt;br /&gt;
[[Image:Service_Lookup.jpg|frame|center]]&lt;br /&gt;
&lt;br /&gt;
== Interpreter-Driven Design ==&lt;br /&gt;
== Reflective or Meta-Level Designs ==&lt;br /&gt;
&lt;br /&gt;
= Advantages =&lt;br /&gt;
Protected Variations aim to reduce the undesirable impacts on objects that can be caused by variations and instability in other objects that might be related. The advantages of this design pattern are:&lt;br /&gt;
&lt;br /&gt;
* Cost for changes is lowered.&lt;br /&gt;
* There is low coupling when the Protected Variations  pattern is used.&lt;br /&gt;
* Easier to add new features and easier to adapt the existing features to a different platform since it requires only a change to the wrapper.&lt;br /&gt;
* If there are clients accessing a service from an object, new features or services can be added without affecting the clients.&lt;br /&gt;
&lt;br /&gt;
= References =&lt;br /&gt;
[1] [http://en.wikipedia.org/wiki/GRASP_%28object-oriented_design%29 '''Wikipedia GRASP patterns''']&lt;br /&gt;
&lt;br /&gt;
[2] ''Protected variation: the importance of being closed'', Larman.C, ISSN: 0740-7459, 89 - 91&lt;br /&gt;
&lt;br /&gt;
[3] ''“On the Criteria to Be Used in Decomposing Systems into Modules”'', Comm. ACM, vol.12, no. 2, Dec. 1972&lt;br /&gt;
&lt;br /&gt;
[4] Object- Oriented Software Construction (IEEE Press, 1988)&lt;br /&gt;
&lt;br /&gt;
[5] ''“Prioritizing Forces in Software Design”'', Patterns Languages of Program Design, vol. 2, Addison-Wesley, 1996&lt;br /&gt;
&lt;br /&gt;
= See Also =&lt;/div&gt;</summary>
		<author><name>Dragon9786</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch7_7e_GS&amp;diff=43165</id>
		<title>CSC/ECE 517 Fall 2010/ch7 7e GS</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch7_7e_GS&amp;diff=43165"/>
		<updated>2010-12-02T02:41:55Z</updated>

		<summary type="html">&lt;p&gt;Dragon9786: /* Service Lookup */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
The '''Protected Variations pattern''' [5] is one of the '''GRASP''' patterns. '''General Responsibility Assignment Software Patterns (or Principles)''', abbreviated GRASP, consists of guidelines for assigning responsibility to classes and objects in object-oriented design.[1]&lt;br /&gt;
&lt;br /&gt;
The Protected Variations pattern protects elements from the variations on other elements (objects, systems, subsystems) by wrapping the focus of instability with an interface and using polymorphism to create various implementations of this interface.&lt;br /&gt;
&lt;br /&gt;
= Protected Variation Pattern =&lt;br /&gt;
This pattern mainly deals with the problem of designing objects, subsystems and systems so that any variations or instability in these elements does not have an undesirable impact on other elements. The Protected Variation pattern tries to address this problem by identifying points of predicted variation or instability and assignsresponsibilities to create a stable interface (or protection mechanism) around them.&lt;br /&gt;
&lt;br /&gt;
That is an external object trying to modify another object can only do this by the means of a wrapper which wraps the object to be accesed. Thus this insulates the objects from any changes or variation to other objects.&lt;br /&gt;
&lt;br /&gt;
Some of the standard practices motivated by this pattern are '''Data encapsulation, [http://en.wikipedia.org/wiki/Interface_%28computer_science%29 Interfaces], [http://en.wikipedia.org/wiki/Polymorphism_in_object-oriented_programming Polymorphism] and [http://en.wikipedia.org/wiki/Indirection Indirection].'''. Also the Protected Variation pattern in principle is very similar to the '''&amp;quot;Open-Close Principle&amp;quot;''' discussed in detail by Bertrand Meyer in [4] and also very similar to what David Parnas means by [http://en.wikipedia.org/wiki/Information_hiding '''Information Hiding'''] in [3].&lt;br /&gt;
&lt;br /&gt;
== An Example ==&lt;br /&gt;
One commercial example that we can look at that best illustrates the Protected Variations design principle is in the commercial industry of video games. Vendors who make video games make money by building complex 3D game engines, sound effects and AI(Artificial Intelligence) effects.These companies often produce many games using the same engine, and release the game on many consoles like for instance a [http://en.wikipedia.org/wiki/Xbox '''XBox'''] or a [http://en.wikipedia.org/wiki/PlayStation '''Playstation'''].&lt;br /&gt;
This can be seen as implementing the Protected Variation pattern, in that&lt;br /&gt;
&lt;br /&gt;
*If a game is to be ported to another console, the wrapper object will have to delegate3 D graphics drawing to different console-level commands.&lt;br /&gt;
&lt;br /&gt;
*It makes sense in such a case to make changes only to the wrapper since the wrapper is simpler to change than the entire game and all of its facets.&lt;br /&gt;
&lt;br /&gt;
= Other Mechanisms motivated by PV =&lt;br /&gt;
Craig Larman in [2] looks at some of the common mechanisms that exist which take motivation from the Protected Variation design principle. Several software components or systems that exist already such as Operating systems, video games use this mechanism either directly or indirectly. &lt;br /&gt;
&lt;br /&gt;
Even Components such as brokers and virtual machines are complex examples of indirection.[2]&lt;br /&gt;
&lt;br /&gt;
== Uniform Access ==&lt;br /&gt;
Uniform access is a syntactic construct which allows languages to express both a method and field access in the same way.Languages such as '''Ada, Eiffel, and C#''' support uniform access. For example, consider a '''Rectangle class''' with  public fields length and width as below&lt;br /&gt;
&lt;br /&gt;
   class Rectangle{&lt;br /&gt;
      public:&lt;br /&gt;
              float length;&lt;br /&gt;
              float width&lt;br /&gt;
      private:&lt;br /&gt;
               ......&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
Now a reference such as '''Rectangle.length''' might either refer to the public field or might internally call a method '''length():float''' depending on the implementation. This means that the developer can change public fields to access methods without changing the client code.&lt;br /&gt;
&lt;br /&gt;
== Data Driven Design ==&lt;br /&gt;
This type of design covers a wide variety of techniques, including reading codes, values, class file paths, class names, ''from an external source in order to change the behavior of or “parameterize” a system in some way at runtime.'' [2]&lt;br /&gt;
&lt;br /&gt;
Impelementations such as '''style sheets, metadata for object-relational mapping, property files''' etc belong to this category.&lt;br /&gt;
&lt;br /&gt;
In this design the system can be protected from the impact of changes to data, metadata, or declarative variations by externalizing the variant, reading the behavior-influencing data in, and reasoning with it.&lt;br /&gt;
&lt;br /&gt;
== Service Lookup ==&lt;br /&gt;
&lt;br /&gt;
The Service Lookup technique is in fact a special case of the data-driven design. These are generally used to do look ups for obtaining services. For example a naming service such as [http://en.wikipedia.org/wiki/JNDI '''JNDI'''] can be used to do service lookups to obtain services like [http://en.wikipedia.org/wiki/Jini Jini].&lt;br /&gt;
&lt;br /&gt;
This approach uses the stable interface of the lookup service to protect clients from variations in the location of services. The classic Service Lookup and the interaction among the different components involved is illustrated in the figure&lt;br /&gt;
&lt;br /&gt;
[[Image:Service_Lookup.jpg|frame|center]]&lt;br /&gt;
&lt;br /&gt;
== Interpreter-Driven Design ==&lt;br /&gt;
== Reflective or Meta-Level Designs ==&lt;br /&gt;
&lt;br /&gt;
= Advantages =&lt;br /&gt;
Protected Variations aim to reduce the undesirable impacts on objects that can be caused by variations and instability in other objects that might be related. The advantages of this design pattern are:&lt;br /&gt;
&lt;br /&gt;
* Cost for changes is lowered.&lt;br /&gt;
* There is low coupling when the Protected Variations  pattern is used.&lt;br /&gt;
* Easier to add new features and easier to adapt the existing features to a different platform since it requires only a change to the wrapper.&lt;br /&gt;
* If there are clients accessing a service from an object, new features or services can be added without affecting the clients.&lt;br /&gt;
&lt;br /&gt;
= References =&lt;br /&gt;
[1] [http://en.wikipedia.org/wiki/GRASP_%28object-oriented_design%29 '''Wikipedia GRASP patterns''']&lt;br /&gt;
&lt;br /&gt;
[2] ''Protected variation: the importance of being closed'', Larman.C, ISSN: 0740-7459, 89 - 91&lt;br /&gt;
&lt;br /&gt;
[3] ''“On the Criteria to Be Used in Decomposing Systems into Modules”'', Comm. ACM, vol.12, no. 2, Dec. 1972&lt;br /&gt;
&lt;br /&gt;
[4] Object- Oriented Software Construction (IEEE Press, 1988)&lt;br /&gt;
&lt;br /&gt;
[5] ''“Prioritizing Forces in Software Design”'', Patterns Languages of Program Design, vol. 2, Addison-Wesley, 1996&lt;br /&gt;
&lt;br /&gt;
= See Also =&lt;/div&gt;</summary>
		<author><name>Dragon9786</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Service_Lookup.jpg&amp;diff=43158</id>
		<title>File:Service Lookup.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Service_Lookup.jpg&amp;diff=43158"/>
		<updated>2010-12-02T02:36:21Z</updated>

		<summary type="html">&lt;p&gt;Dragon9786: Image showing a lookup service used to obtain a service&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Image showing a lookup service used to obtain a service&lt;/div&gt;</summary>
		<author><name>Dragon9786</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch7_7e_GS&amp;diff=43157</id>
		<title>CSC/ECE 517 Fall 2010/ch7 7e GS</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch7_7e_GS&amp;diff=43157"/>
		<updated>2010-12-02T02:35:19Z</updated>

		<summary type="html">&lt;p&gt;Dragon9786: /* Service Lookup */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
The '''Protected Variations pattern''' [5] is one of the '''GRASP''' patterns. '''General Responsibility Assignment Software Patterns (or Principles)''', abbreviated GRASP, consists of guidelines for assigning responsibility to classes and objects in object-oriented design.[1]&lt;br /&gt;
&lt;br /&gt;
The Protected Variations pattern protects elements from the variations on other elements (objects, systems, subsystems) by wrapping the focus of instability with an interface and using polymorphism to create various implementations of this interface.&lt;br /&gt;
&lt;br /&gt;
= Protected Variation Pattern =&lt;br /&gt;
This pattern mainly deals with the problem of designing objects, subsystems and systems so that any variations or instability in these elements does not have an undesirable impact on other elements. The Protected Variation pattern tries to address this problem by identifying points of predicted variation or instability and assignsresponsibilities to create a stable interface (or protection mechanism) around them.&lt;br /&gt;
&lt;br /&gt;
That is an external object trying to modify another object can only do this by the means of a wrapper which wraps the object to be accesed. Thus this insulates the objects from any changes or variation to other objects.&lt;br /&gt;
&lt;br /&gt;
Some of the standard practices motivated by this pattern are '''Data encapsulation, [http://en.wikipedia.org/wiki/Interface_%28computer_science%29 Interfaces], [http://en.wikipedia.org/wiki/Polymorphism_in_object-oriented_programming Polymorphism] and [http://en.wikipedia.org/wiki/Indirection Indirection].'''. Also the Protected Variation pattern in principle is very similar to the '''&amp;quot;Open-Close Principle&amp;quot;''' discussed in detail by Bertrand Meyer in [4] and also very similar to what David Parnas means by [http://en.wikipedia.org/wiki/Information_hiding '''Information Hiding'''] in [3].&lt;br /&gt;
&lt;br /&gt;
== An Example ==&lt;br /&gt;
One commercial example that we can look at that best illustrates the Protected Variations design principle is in the commercial industry of video games. Vendors who make video games make money by building complex 3D game engines, sound effects and AI(Artificial Intelligence) effects.These companies often produce many games using the same engine, and release the game on many consoles like for instance a [http://en.wikipedia.org/wiki/Xbox '''XBox'''] or a [http://en.wikipedia.org/wiki/PlayStation '''Playstation'''].&lt;br /&gt;
This can be seen as implementing the Protected Variation pattern, in that&lt;br /&gt;
&lt;br /&gt;
*If a game is to be ported to another console, the wrapper object will have to delegate3 D graphics drawing to different console-level commands.&lt;br /&gt;
&lt;br /&gt;
*It makes sense in such a case to make changes only to the wrapper since the wrapper is simpler to change than the entire game and all of its facets.&lt;br /&gt;
&lt;br /&gt;
= Other Mechanisms motivated by PV =&lt;br /&gt;
Craig Larman in [2] looks at some of the common mechanisms that exist which take motivation from the Protected Variation design principle. Several software components or systems that exist already such as Operating systems, video games use this mechanism either directly or indirectly. &lt;br /&gt;
&lt;br /&gt;
Even Components such as brokers and virtual machines are complex examples of indirection.[2]&lt;br /&gt;
&lt;br /&gt;
== Uniform Access ==&lt;br /&gt;
Uniform access is a syntactic construct which allows languages to express both a method and field access in the same way.Languages such as '''Ada, Eiffel, and C#''' support uniform access. For example, consider a '''Rectangle class''' with  public fields length and width as below&lt;br /&gt;
&lt;br /&gt;
   class Rectangle{&lt;br /&gt;
      public:&lt;br /&gt;
              float length;&lt;br /&gt;
              float width&lt;br /&gt;
      private:&lt;br /&gt;
               ......&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
Now a reference such as '''Rectangle.length''' might either refer to the public field or might internally call a method '''length():float''' depending on the implementation. This means that the developer can change public fields to access methods without changing the client code.&lt;br /&gt;
&lt;br /&gt;
== Data Driven Design ==&lt;br /&gt;
This type of design covers a wide variety of techniques, including reading codes, values, class file paths, class names, ''from an external source in order to change the behavior of or “parameterize” a system in some way at runtime.'' [2]&lt;br /&gt;
&lt;br /&gt;
Impelementations such as '''style sheets, metadata for object-relational mapping, property files''' etc belong to this category.&lt;br /&gt;
&lt;br /&gt;
In this design the system can be protected from the impact of changes to data, metadata, or declarative variations by externalizing the variant, reading the behavior-influencing data in, and reasoning with it.&lt;br /&gt;
&lt;br /&gt;
== Service Lookup ==&lt;br /&gt;
&lt;br /&gt;
The Service lookup technique is in fact a special case of the data-driven design. These are generally used to do look ups for obtaining services. For example a naming service such as [http://en.wikipedia.org/wiki/JNDI '''JNDI'''] can be used to do service lookups to obtain services like [http://en.wikipedia.org/wiki/Jini Jini].&lt;br /&gt;
&lt;br /&gt;
This approach uses the stable interface of the lookup service to protect clients from variations in the location of services.&lt;br /&gt;
&lt;br /&gt;
== Interpreter-Driven Design ==&lt;br /&gt;
== Reflective or Meta-Level Designs ==&lt;br /&gt;
&lt;br /&gt;
= Advantages =&lt;br /&gt;
Protected Variations aim to reduce the undesirable impacts on objects that can be caused by variations and instability in other objects that might be related. The advantages of this design pattern are:&lt;br /&gt;
&lt;br /&gt;
* Cost for changes is lowered.&lt;br /&gt;
* There is low coupling when the Protected Variations  pattern is used.&lt;br /&gt;
* Easier to add new features and easier to adapt the existing features to a different platform since it requires only a change to the wrapper.&lt;br /&gt;
* If there are clients accessing a service from an object, new features or services can be added without affecting the clients.&lt;br /&gt;
&lt;br /&gt;
= References =&lt;br /&gt;
[1] [http://en.wikipedia.org/wiki/GRASP_%28object-oriented_design%29 '''Wikipedia GRASP patterns''']&lt;br /&gt;
&lt;br /&gt;
[2] ''Protected variation: the importance of being closed'', Larman.C, ISSN: 0740-7459, 89 - 91&lt;br /&gt;
&lt;br /&gt;
[3] ''“On the Criteria to Be Used in Decomposing Systems into Modules”'', Comm. ACM, vol.12, no. 2, Dec. 1972&lt;br /&gt;
&lt;br /&gt;
[4] Object- Oriented Software Construction (IEEE Press, 1988)&lt;br /&gt;
&lt;br /&gt;
[5] ''“Prioritizing Forces in Software Design”'', Patterns Languages of Program Design, vol. 2, Addison-Wesley, 1996&lt;br /&gt;
&lt;br /&gt;
= See Also =&lt;/div&gt;</summary>
		<author><name>Dragon9786</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch7_7e_GS&amp;diff=43154</id>
		<title>CSC/ECE 517 Fall 2010/ch7 7e GS</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch7_7e_GS&amp;diff=43154"/>
		<updated>2010-12-02T02:29:58Z</updated>

		<summary type="html">&lt;p&gt;Dragon9786: /* Uniform Access */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
The '''Protected Variations pattern''' [5] is one of the '''GRASP''' patterns. '''General Responsibility Assignment Software Patterns (or Principles)''', abbreviated GRASP, consists of guidelines for assigning responsibility to classes and objects in object-oriented design.[1]&lt;br /&gt;
&lt;br /&gt;
The Protected Variations pattern protects elements from the variations on other elements (objects, systems, subsystems) by wrapping the focus of instability with an interface and using polymorphism to create various implementations of this interface.&lt;br /&gt;
&lt;br /&gt;
= Protected Variation Pattern =&lt;br /&gt;
This pattern mainly deals with the problem of designing objects, subsystems and systems so that any variations or instability in these elements does not have an undesirable impact on other elements. The Protected Variation pattern tries to address this problem by identifying points of predicted variation or instability and assignsresponsibilities to create a stable interface (or protection mechanism) around them.&lt;br /&gt;
&lt;br /&gt;
That is an external object trying to modify another object can only do this by the means of a wrapper which wraps the object to be accesed. Thus this insulates the objects from any changes or variation to other objects.&lt;br /&gt;
&lt;br /&gt;
Some of the standard practices motivated by this pattern are '''Data encapsulation, [http://en.wikipedia.org/wiki/Interface_%28computer_science%29 Interfaces], [http://en.wikipedia.org/wiki/Polymorphism_in_object-oriented_programming Polymorphism] and [http://en.wikipedia.org/wiki/Indirection Indirection].'''. Also the Protected Variation pattern in principle is very similar to the '''&amp;quot;Open-Close Principle&amp;quot;''' discussed in detail by Bertrand Meyer in [4] and also very similar to what David Parnas means by [http://en.wikipedia.org/wiki/Information_hiding '''Information Hiding'''] in [3].&lt;br /&gt;
&lt;br /&gt;
== An Example ==&lt;br /&gt;
One commercial example that we can look at that best illustrates the Protected Variations design principle is in the commercial industry of video games. Vendors who make video games make money by building complex 3D game engines, sound effects and AI(Artificial Intelligence) effects.These companies often produce many games using the same engine, and release the game on many consoles like for instance a [http://en.wikipedia.org/wiki/Xbox '''XBox'''] or a [http://en.wikipedia.org/wiki/PlayStation '''Playstation'''].&lt;br /&gt;
This can be seen as implementing the Protected Variation pattern, in that&lt;br /&gt;
&lt;br /&gt;
*If a game is to be ported to another console, the wrapper object will have to delegate3 D graphics drawing to different console-level commands.&lt;br /&gt;
&lt;br /&gt;
*It makes sense in such a case to make changes only to the wrapper since the wrapper is simpler to change than the entire game and all of its facets.&lt;br /&gt;
&lt;br /&gt;
= Other Mechanisms motivated by PV =&lt;br /&gt;
Craig Larman in [2] looks at some of the common mechanisms that exist which take motivation from the Protected Variation design principle. Several software components or systems that exist already such as Operating systems, video games use this mechanism either directly or indirectly. &lt;br /&gt;
&lt;br /&gt;
Even Components such as brokers and virtual machines are complex examples of indirection.[2]&lt;br /&gt;
&lt;br /&gt;
== Uniform Access ==&lt;br /&gt;
Uniform access is a syntactic construct which allows languages to express both a method and field access in the same way.Languages such as '''Ada, Eiffel, and C#''' support uniform access. For example, consider a '''Rectangle class''' with  public fields length and width as below&lt;br /&gt;
&lt;br /&gt;
   class Rectangle{&lt;br /&gt;
      public:&lt;br /&gt;
              float length;&lt;br /&gt;
              float width&lt;br /&gt;
      private:&lt;br /&gt;
               ......&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
Now a reference such as '''Rectangle.length''' might either refer to the public field or might internally call a method '''length():float''' depending on the implementation. This means that the developer can change public fields to access methods without changing the client code.&lt;br /&gt;
&lt;br /&gt;
== Data Driven Design ==&lt;br /&gt;
This type of design covers a wide variety of techniques, including reading codes, values, class file paths, class names, ''from an external source in order to change the behavior of or “parameterize” a system in some way at runtime.'' [2]&lt;br /&gt;
&lt;br /&gt;
Impelementations such as '''style sheets, metadata for object-relational mapping, property files''' etc belong to this category.&lt;br /&gt;
&lt;br /&gt;
In this design the system can be protected from the impact of changes to data, metadata, or declarative variations by externalizing the variant, reading the behavior-influencing data in, and reasoning with it.&lt;br /&gt;
&lt;br /&gt;
== Service Lookup ==&lt;br /&gt;
== Interpreter-Driven Design ==&lt;br /&gt;
== Reflective or Meta-Level Designs ==&lt;br /&gt;
&lt;br /&gt;
= Advantages =&lt;br /&gt;
Protected Variations aim to reduce the undesirable impacts on objects that can be caused by variations and instability in other objects that might be related. The advantages of this design pattern are:&lt;br /&gt;
&lt;br /&gt;
* Cost for changes is lowered.&lt;br /&gt;
* There is low coupling when the Protected Variations  pattern is used.&lt;br /&gt;
* Easier to add new features and easier to adapt the existing features to a different platform since it requires only a change to the wrapper.&lt;br /&gt;
* If there are clients accessing a service from an object, new features or services can be added without affecting the clients.&lt;br /&gt;
&lt;br /&gt;
= References =&lt;br /&gt;
[1] [http://en.wikipedia.org/wiki/GRASP_%28object-oriented_design%29 '''Wikipedia GRASP patterns''']&lt;br /&gt;
&lt;br /&gt;
[2] ''Protected variation: the importance of being closed'', Larman.C, ISSN: 0740-7459, 89 - 91&lt;br /&gt;
&lt;br /&gt;
[3] ''“On the Criteria to Be Used in Decomposing Systems into Modules”'', Comm. ACM, vol.12, no. 2, Dec. 1972&lt;br /&gt;
&lt;br /&gt;
[4] Object- Oriented Software Construction (IEEE Press, 1988)&lt;br /&gt;
&lt;br /&gt;
[5] ''“Prioritizing Forces in Software Design”'', Patterns Languages of Program Design, vol. 2, Addison-Wesley, 1996&lt;br /&gt;
&lt;br /&gt;
= See Also =&lt;/div&gt;</summary>
		<author><name>Dragon9786</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch7_7e_GS&amp;diff=43152</id>
		<title>CSC/ECE 517 Fall 2010/ch7 7e GS</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch7_7e_GS&amp;diff=43152"/>
		<updated>2010-12-02T02:28:51Z</updated>

		<summary type="html">&lt;p&gt;Dragon9786: /* Data Driven Design */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
The '''Protected Variations pattern''' [5] is one of the '''GRASP''' patterns. '''General Responsibility Assignment Software Patterns (or Principles)''', abbreviated GRASP, consists of guidelines for assigning responsibility to classes and objects in object-oriented design.[1]&lt;br /&gt;
&lt;br /&gt;
The Protected Variations pattern protects elements from the variations on other elements (objects, systems, subsystems) by wrapping the focus of instability with an interface and using polymorphism to create various implementations of this interface.&lt;br /&gt;
&lt;br /&gt;
= Protected Variation Pattern =&lt;br /&gt;
This pattern mainly deals with the problem of designing objects, subsystems and systems so that any variations or instability in these elements does not have an undesirable impact on other elements. The Protected Variation pattern tries to address this problem by identifying points of predicted variation or instability and assignsresponsibilities to create a stable interface (or protection mechanism) around them.&lt;br /&gt;
&lt;br /&gt;
That is an external object trying to modify another object can only do this by the means of a wrapper which wraps the object to be accesed. Thus this insulates the objects from any changes or variation to other objects.&lt;br /&gt;
&lt;br /&gt;
Some of the standard practices motivated by this pattern are '''Data encapsulation, [http://en.wikipedia.org/wiki/Interface_%28computer_science%29 Interfaces], [http://en.wikipedia.org/wiki/Polymorphism_in_object-oriented_programming Polymorphism] and [http://en.wikipedia.org/wiki/Indirection Indirection].'''. Also the Protected Variation pattern in principle is very similar to the '''&amp;quot;Open-Close Principle&amp;quot;''' discussed in detail by Bertrand Meyer in [4] and also very similar to what David Parnas means by [http://en.wikipedia.org/wiki/Information_hiding '''Information Hiding'''] in [3].&lt;br /&gt;
&lt;br /&gt;
== An Example ==&lt;br /&gt;
One commercial example that we can look at that best illustrates the Protected Variations design principle is in the commercial industry of video games. Vendors who make video games make money by building complex 3D game engines, sound effects and AI(Artificial Intelligence) effects.These companies often produce many games using the same engine, and release the game on many consoles like for instance a [http://en.wikipedia.org/wiki/Xbox '''XBox'''] or a [http://en.wikipedia.org/wiki/PlayStation '''Playstation'''].&lt;br /&gt;
This can be seen as implementing the Protected Variation pattern, in that&lt;br /&gt;
&lt;br /&gt;
*If a game is to be ported to another console, the wrapper object will have to delegate3 D graphics drawing to different console-level commands.&lt;br /&gt;
&lt;br /&gt;
*It makes sense in such a case to make changes only to the wrapper since the wrapper is simpler to change than the entire game and all of its facets.&lt;br /&gt;
&lt;br /&gt;
= Other Mechanisms motivated by PV =&lt;br /&gt;
Craig Larman in [2] looks at some of the common mechanisms that exist which take motivation from the Protected Variation design principle. Several software components or systems that exist already such as Operating systems, video games use this mechanism either directly or indirectly. &lt;br /&gt;
&lt;br /&gt;
Even Components such as brokers and virtual machines are complex examples of indirection.[2]&lt;br /&gt;
&lt;br /&gt;
== Uniform Access ==&lt;br /&gt;
Uniform access is a syntactic construct which allows languages to express both a method and field access in the same way.Languages such as Ada, Eiffel, and C# support uniform access. For example, consider a Rectangle class with  public fields length and width as below&lt;br /&gt;
&lt;br /&gt;
   class Rectangle{&lt;br /&gt;
      public:&lt;br /&gt;
              float length;&lt;br /&gt;
              float width&lt;br /&gt;
      private:&lt;br /&gt;
               ......&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
Now a reference such as '''Rectangle.length''' might either refer to the public field or might internally call a method '''length():float''' depending on the implementation. This means that the developer can change public fields to access methods without changing the client code.&lt;br /&gt;
&lt;br /&gt;
== Data Driven Design ==&lt;br /&gt;
This type of design covers a wide variety of techniques, including reading codes, values, class file paths, class names, ''from an external source in order to change the behavior of or “parameterize” a system in some way at runtime.'' [2]&lt;br /&gt;
&lt;br /&gt;
Impelementations such as '''style sheets, metadata for object-relational mapping, property files''' etc belong to this category.&lt;br /&gt;
&lt;br /&gt;
In this design the system can be protected from the impact of changes to data, metadata, or declarative variations by externalizing the variant, reading the behavior-influencing data in, and reasoning with it.&lt;br /&gt;
&lt;br /&gt;
== Service Lookup ==&lt;br /&gt;
== Interpreter-Driven Design ==&lt;br /&gt;
== Reflective or Meta-Level Designs ==&lt;br /&gt;
&lt;br /&gt;
= Advantages =&lt;br /&gt;
Protected Variations aim to reduce the undesirable impacts on objects that can be caused by variations and instability in other objects that might be related. The advantages of this design pattern are:&lt;br /&gt;
&lt;br /&gt;
* Cost for changes is lowered.&lt;br /&gt;
* There is low coupling when the Protected Variations  pattern is used.&lt;br /&gt;
* Easier to add new features and easier to adapt the existing features to a different platform since it requires only a change to the wrapper.&lt;br /&gt;
* If there are clients accessing a service from an object, new features or services can be added without affecting the clients.&lt;br /&gt;
&lt;br /&gt;
= References =&lt;br /&gt;
[1] [http://en.wikipedia.org/wiki/GRASP_%28object-oriented_design%29 '''Wikipedia GRASP patterns''']&lt;br /&gt;
&lt;br /&gt;
[2] ''Protected variation: the importance of being closed'', Larman.C, ISSN: 0740-7459, 89 - 91&lt;br /&gt;
&lt;br /&gt;
[3] ''“On the Criteria to Be Used in Decomposing Systems into Modules”'', Comm. ACM, vol.12, no. 2, Dec. 1972&lt;br /&gt;
&lt;br /&gt;
[4] Object- Oriented Software Construction (IEEE Press, 1988)&lt;br /&gt;
&lt;br /&gt;
[5] ''“Prioritizing Forces in Software Design”'', Patterns Languages of Program Design, vol. 2, Addison-Wesley, 1996&lt;br /&gt;
&lt;br /&gt;
= See Also =&lt;/div&gt;</summary>
		<author><name>Dragon9786</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch7_7e_GS&amp;diff=43148</id>
		<title>CSC/ECE 517 Fall 2010/ch7 7e GS</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch7_7e_GS&amp;diff=43148"/>
		<updated>2010-12-02T02:22:40Z</updated>

		<summary type="html">&lt;p&gt;Dragon9786: /* Uniform Access */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
The '''Protected Variations pattern''' [5] is one of the '''GRASP''' patterns. '''General Responsibility Assignment Software Patterns (or Principles)''', abbreviated GRASP, consists of guidelines for assigning responsibility to classes and objects in object-oriented design.[1]&lt;br /&gt;
&lt;br /&gt;
The Protected Variations pattern protects elements from the variations on other elements (objects, systems, subsystems) by wrapping the focus of instability with an interface and using polymorphism to create various implementations of this interface.&lt;br /&gt;
&lt;br /&gt;
= Protected Variation Pattern =&lt;br /&gt;
This pattern mainly deals with the problem of designing objects, subsystems and systems so that any variations or instability in these elements does not have an undesirable impact on other elements. The Protected Variation pattern tries to address this problem by identifying points of predicted variation or instability and assignsresponsibilities to create a stable interface (or protection mechanism) around them.&lt;br /&gt;
&lt;br /&gt;
That is an external object trying to modify another object can only do this by the means of a wrapper which wraps the object to be accesed. Thus this insulates the objects from any changes or variation to other objects.&lt;br /&gt;
&lt;br /&gt;
Some of the standard practices motivated by this pattern are '''Data encapsulation, [http://en.wikipedia.org/wiki/Interface_%28computer_science%29 Interfaces], [http://en.wikipedia.org/wiki/Polymorphism_in_object-oriented_programming Polymorphism] and [http://en.wikipedia.org/wiki/Indirection Indirection].'''. Also the Protected Variation pattern in principle is very similar to the '''&amp;quot;Open-Close Principle&amp;quot;''' discussed in detail by Bertrand Meyer in [4] and also very similar to what David Parnas means by [http://en.wikipedia.org/wiki/Information_hiding '''Information Hiding'''] in [3].&lt;br /&gt;
&lt;br /&gt;
== An Example ==&lt;br /&gt;
One commercial example that we can look at that best illustrates the Protected Variations design principle is in the commercial industry of video games. Vendors who make video games make money by building complex 3D game engines, sound effects and AI(Artificial Intelligence) effects.These companies often produce many games using the same engine, and release the game on many consoles like for instance a [http://en.wikipedia.org/wiki/Xbox '''XBox'''] or a [http://en.wikipedia.org/wiki/PlayStation '''Playstation'''].&lt;br /&gt;
This can be seen as implementing the Protected Variation pattern, in that&lt;br /&gt;
&lt;br /&gt;
*If a game is to be ported to another console, the wrapper object will have to delegate3 D graphics drawing to different console-level commands.&lt;br /&gt;
&lt;br /&gt;
*It makes sense in such a case to make changes only to the wrapper since the wrapper is simpler to change than the entire game and all of its facets.&lt;br /&gt;
&lt;br /&gt;
= Other Mechanisms motivated by PV =&lt;br /&gt;
Craig Larman in [2] looks at some of the common mechanisms that exist which take motivation from the Protected Variation design principle. Several software components or systems that exist already such as Operating systems, video games use this mechanism either directly or indirectly. &lt;br /&gt;
&lt;br /&gt;
Even Components such as brokers and virtual machines are complex examples of indirection.[2]&lt;br /&gt;
&lt;br /&gt;
== Uniform Access ==&lt;br /&gt;
Uniform access is a syntactic construct which allows languages to express both a method and field access in the same way.Languages such as Ada, Eiffel, and C# support uniform access. For example, consider a Rectangle class with  public fields length and width as below&lt;br /&gt;
&lt;br /&gt;
   class Rectangle{&lt;br /&gt;
      public:&lt;br /&gt;
              float length;&lt;br /&gt;
              float width&lt;br /&gt;
      private:&lt;br /&gt;
               ......&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
Now a reference such as '''Rectangle.length''' might either refer to the public field or might internally call a method '''length():float''' depending on the implementation. This means that the developer can change public fields to access methods without changing the client code.&lt;br /&gt;
&lt;br /&gt;
== Data Driven Design ==&lt;br /&gt;
== Service Lookup ==&lt;br /&gt;
== Interpreter-Driven Design ==&lt;br /&gt;
== Reflective or Meta-Level Designs ==&lt;br /&gt;
&lt;br /&gt;
= Advantages =&lt;br /&gt;
Protected Variations aim to reduce the undesirable impacts on objects that can be caused by variations and instability in other objects that might be related. The advantages of this design pattern are:&lt;br /&gt;
&lt;br /&gt;
* Cost for changes is lowered.&lt;br /&gt;
* There is low coupling when the Protected Variations  pattern is used.&lt;br /&gt;
* Easier to add new features and easier to adapt the existing features to a different platform since it requires only a change to the wrapper.&lt;br /&gt;
* If there are clients accessing a service from an object, new features or services can be added without affecting the clients.&lt;br /&gt;
&lt;br /&gt;
= References =&lt;br /&gt;
[1] [http://en.wikipedia.org/wiki/GRASP_%28object-oriented_design%29 '''Wikipedia GRASP patterns''']&lt;br /&gt;
&lt;br /&gt;
[2] ''Protected variation: the importance of being closed'', Larman.C, ISSN: 0740-7459, 89 - 91&lt;br /&gt;
&lt;br /&gt;
[3] ''“On the Criteria to Be Used in Decomposing Systems into Modules”'', Comm. ACM, vol.12, no. 2, Dec. 1972&lt;br /&gt;
&lt;br /&gt;
[4] Object- Oriented Software Construction (IEEE Press, 1988)&lt;br /&gt;
&lt;br /&gt;
[5] ''“Prioritizing Forces in Software Design”'', Patterns Languages of Program Design, vol. 2, Addison-Wesley, 1996&lt;br /&gt;
&lt;br /&gt;
= See Also =&lt;/div&gt;</summary>
		<author><name>Dragon9786</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch7_7e_GS&amp;diff=43144</id>
		<title>CSC/ECE 517 Fall 2010/ch7 7e GS</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch7_7e_GS&amp;diff=43144"/>
		<updated>2010-12-02T02:14:03Z</updated>

		<summary type="html">&lt;p&gt;Dragon9786: /* Uniform Access */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
The '''Protected Variations pattern''' [5] is one of the '''GRASP''' patterns. '''General Responsibility Assignment Software Patterns (or Principles)''', abbreviated GRASP, consists of guidelines for assigning responsibility to classes and objects in object-oriented design.[1]&lt;br /&gt;
&lt;br /&gt;
The Protected Variations pattern protects elements from the variations on other elements (objects, systems, subsystems) by wrapping the focus of instability with an interface and using polymorphism to create various implementations of this interface.&lt;br /&gt;
&lt;br /&gt;
= Protected Variation Pattern =&lt;br /&gt;
This pattern mainly deals with the problem of designing objects, subsystems and systems so that any variations or instability in these elements does not have an undesirable impact on other elements. The Protected Variation pattern tries to address this problem by identifying points of predicted variation or instability and assignsresponsibilities to create a stable interface (or protection mechanism) around them.&lt;br /&gt;
&lt;br /&gt;
That is an external object trying to modify another object can only do this by the means of a wrapper which wraps the object to be accesed. Thus this insulates the objects from any changes or variation to other objects.&lt;br /&gt;
&lt;br /&gt;
Some of the standard practices motivated by this pattern are '''Data encapsulation, [http://en.wikipedia.org/wiki/Interface_%28computer_science%29 Interfaces], [http://en.wikipedia.org/wiki/Polymorphism_in_object-oriented_programming Polymorphism] and [http://en.wikipedia.org/wiki/Indirection Indirection].'''. Also the Protected Variation pattern in principle is very similar to the '''&amp;quot;Open-Close Principle&amp;quot;''' discussed in detail by Bertrand Meyer in [4] and also very similar to what David Parnas means by [http://en.wikipedia.org/wiki/Information_hiding '''Information Hiding'''] in [3].&lt;br /&gt;
&lt;br /&gt;
== An Example ==&lt;br /&gt;
One commercial example that we can look at that best illustrates the Protected Variations design principle is in the commercial industry of video games. Vendors who make video games make money by building complex 3D game engines, sound effects and AI(Artificial Intelligence) effects.These companies often produce many games using the same engine, and release the game on many consoles like for instance a [http://en.wikipedia.org/wiki/Xbox '''XBox'''] or a [http://en.wikipedia.org/wiki/PlayStation '''Playstation'''].&lt;br /&gt;
This can be seen as implementing the Protected Variation pattern, in that&lt;br /&gt;
&lt;br /&gt;
*If a game is to be ported to another console, the wrapper object will have to delegate3 D graphics drawing to different console-level commands.&lt;br /&gt;
&lt;br /&gt;
*It makes sense in such a case to make changes only to the wrapper since the wrapper is simpler to change than the entire game and all of its facets.&lt;br /&gt;
&lt;br /&gt;
= Other Mechanisms motivated by PV =&lt;br /&gt;
Craig Larman in [2] looks at some of the common mechanisms that exist which take motivation from the Protected Variation design principle. Several software components or systems that exist already such as Operating systems, video games use this mechanism either directly or indirectly. &lt;br /&gt;
&lt;br /&gt;
Even Components such as brokers and virtual machines are complex examples of indirection.[2]&lt;br /&gt;
&lt;br /&gt;
== Uniform Access ==&lt;br /&gt;
Uniform access is a syntactic construct which allows languages to express both a method and field access in the same way.Languages such as Ada, Eiffel, and C# support uniform access.&lt;br /&gt;
&lt;br /&gt;
== Data Driven Design ==&lt;br /&gt;
== Service Lookup ==&lt;br /&gt;
== Interpreter-Driven Design ==&lt;br /&gt;
== Reflective or Meta-Level Designs ==&lt;br /&gt;
&lt;br /&gt;
= Advantages =&lt;br /&gt;
Protected Variations aim to reduce the undesirable impacts on objects that can be caused by variations and instability in other objects that might be related. The advantages of this design pattern are:&lt;br /&gt;
&lt;br /&gt;
* Cost for changes is lowered.&lt;br /&gt;
* There is low coupling when the Protected Variations  pattern is used.&lt;br /&gt;
* Easier to add new features and easier to adapt the existing features to a different platform since it requires only a change to the wrapper.&lt;br /&gt;
* If there are clients accessing a service from an object, new features or services can be added without affecting the clients.&lt;br /&gt;
&lt;br /&gt;
= References =&lt;br /&gt;
[1] [http://en.wikipedia.org/wiki/GRASP_%28object-oriented_design%29 '''Wikipedia GRASP patterns''']&lt;br /&gt;
&lt;br /&gt;
[2] ''Protected variation: the importance of being closed'', Larman.C, ISSN: 0740-7459, 89 - 91&lt;br /&gt;
&lt;br /&gt;
[3] ''“On the Criteria to Be Used in Decomposing Systems into Modules”'', Comm. ACM, vol.12, no. 2, Dec. 1972&lt;br /&gt;
&lt;br /&gt;
[4] Object- Oriented Software Construction (IEEE Press, 1988)&lt;br /&gt;
&lt;br /&gt;
[5] ''“Prioritizing Forces in Software Design”'', Patterns Languages of Program Design, vol. 2, Addison-Wesley, 1996&lt;br /&gt;
&lt;br /&gt;
= See Also =&lt;/div&gt;</summary>
		<author><name>Dragon9786</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch7_7e_GS&amp;diff=43142</id>
		<title>CSC/ECE 517 Fall 2010/ch7 7e GS</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch7_7e_GS&amp;diff=43142"/>
		<updated>2010-12-02T02:11:42Z</updated>

		<summary type="html">&lt;p&gt;Dragon9786: /* Advantages */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
The '''Protected Variations pattern''' [5] is one of the '''GRASP''' patterns. '''General Responsibility Assignment Software Patterns (or Principles)''', abbreviated GRASP, consists of guidelines for assigning responsibility to classes and objects in object-oriented design.[1]&lt;br /&gt;
&lt;br /&gt;
The Protected Variations pattern protects elements from the variations on other elements (objects, systems, subsystems) by wrapping the focus of instability with an interface and using polymorphism to create various implementations of this interface.&lt;br /&gt;
&lt;br /&gt;
= Protected Variation Pattern =&lt;br /&gt;
This pattern mainly deals with the problem of designing objects, subsystems and systems so that any variations or instability in these elements does not have an undesirable impact on other elements. The Protected Variation pattern tries to address this problem by identifying points of predicted variation or instability and assignsresponsibilities to create a stable interface (or protection mechanism) around them.&lt;br /&gt;
&lt;br /&gt;
That is an external object trying to modify another object can only do this by the means of a wrapper which wraps the object to be accesed. Thus this insulates the objects from any changes or variation to other objects.&lt;br /&gt;
&lt;br /&gt;
Some of the standard practices motivated by this pattern are '''Data encapsulation, [http://en.wikipedia.org/wiki/Interface_%28computer_science%29 Interfaces], [http://en.wikipedia.org/wiki/Polymorphism_in_object-oriented_programming Polymorphism] and [http://en.wikipedia.org/wiki/Indirection Indirection].'''. Also the Protected Variation pattern in principle is very similar to the '''&amp;quot;Open-Close Principle&amp;quot;''' discussed in detail by Bertrand Meyer in [4] and also very similar to what David Parnas means by [http://en.wikipedia.org/wiki/Information_hiding '''Information Hiding'''] in [3].&lt;br /&gt;
&lt;br /&gt;
== An Example ==&lt;br /&gt;
One commercial example that we can look at that best illustrates the Protected Variations design principle is in the commercial industry of video games. Vendors who make video games make money by building complex 3D game engines, sound effects and AI(Artificial Intelligence) effects.These companies often produce many games using the same engine, and release the game on many consoles like for instance a [http://en.wikipedia.org/wiki/Xbox '''XBox'''] or a [http://en.wikipedia.org/wiki/PlayStation '''Playstation'''].&lt;br /&gt;
This can be seen as implementing the Protected Variation pattern, in that&lt;br /&gt;
&lt;br /&gt;
*If a game is to be ported to another console, the wrapper object will have to delegate3 D graphics drawing to different console-level commands.&lt;br /&gt;
&lt;br /&gt;
*It makes sense in such a case to make changes only to the wrapper since the wrapper is simpler to change than the entire game and all of its facets.&lt;br /&gt;
&lt;br /&gt;
= Other Mechanisms motivated by PV =&lt;br /&gt;
Craig Larman in [2] looks at some of the common mechanisms that exist which take motivation from the Protected Variation design principle. Several software components or systems that exist already such as Operating systems, video games use this mechanism either directly or indirectly. &lt;br /&gt;
&lt;br /&gt;
Even Components such as brokers and virtual machines are complex examples of indirection.[2]&lt;br /&gt;
&lt;br /&gt;
== Uniform Access ==&lt;br /&gt;
== Data Driven Design ==&lt;br /&gt;
== Service Lookup ==&lt;br /&gt;
== Interpreter-Driven Design ==&lt;br /&gt;
== Reflective or Meta-Level Designs ==&lt;br /&gt;
&lt;br /&gt;
= Advantages =&lt;br /&gt;
Protected Variations aim to reduce the undesirable impacts on objects that can be caused by variations and instability in other objects that might be related. The advantages of this design pattern are:&lt;br /&gt;
&lt;br /&gt;
* Cost for changes is lowered.&lt;br /&gt;
* There is low coupling when the Protected Variations  pattern is used.&lt;br /&gt;
* Easier to add new features and easier to adapt the existing features to a different platform since it requires only a change to the wrapper.&lt;br /&gt;
* If there are clients accessing a service from an object, new features or services can be added without affecting the clients.&lt;br /&gt;
&lt;br /&gt;
= References =&lt;br /&gt;
[1] [http://en.wikipedia.org/wiki/GRASP_%28object-oriented_design%29 '''Wikipedia GRASP patterns''']&lt;br /&gt;
&lt;br /&gt;
[2] ''Protected variation: the importance of being closed'', Larman.C, ISSN: 0740-7459, 89 - 91&lt;br /&gt;
&lt;br /&gt;
[3] ''“On the Criteria to Be Used in Decomposing Systems into Modules”'', Comm. ACM, vol.12, no. 2, Dec. 1972&lt;br /&gt;
&lt;br /&gt;
[4] Object- Oriented Software Construction (IEEE Press, 1988)&lt;br /&gt;
&lt;br /&gt;
[5] ''“Prioritizing Forces in Software Design”'', Patterns Languages of Program Design, vol. 2, Addison-Wesley, 1996&lt;br /&gt;
&lt;br /&gt;
= See Also =&lt;/div&gt;</summary>
		<author><name>Dragon9786</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch7_7e_GS&amp;diff=43136</id>
		<title>CSC/ECE 517 Fall 2010/ch7 7e GS</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch7_7e_GS&amp;diff=43136"/>
		<updated>2010-12-02T02:03:52Z</updated>

		<summary type="html">&lt;p&gt;Dragon9786: /* Conclusion */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
The '''Protected Variations pattern''' [5] is one of the '''GRASP''' patterns. '''General Responsibility Assignment Software Patterns (or Principles)''', abbreviated GRASP, consists of guidelines for assigning responsibility to classes and objects in object-oriented design.[1]&lt;br /&gt;
&lt;br /&gt;
The Protected Variations pattern protects elements from the variations on other elements (objects, systems, subsystems) by wrapping the focus of instability with an interface and using polymorphism to create various implementations of this interface.&lt;br /&gt;
&lt;br /&gt;
= Protected Variation Pattern =&lt;br /&gt;
This pattern mainly deals with the problem of designing objects, subsystems and systems so that any variations or instability in these elements does not have an undesirable impact on other elements. The Protected Variation pattern tries to address this problem by identifying points of predicted variation or instability and assignsresponsibilities to create a stable interface (or protection mechanism) around them.&lt;br /&gt;
&lt;br /&gt;
That is an external object trying to modify another object can only do this by the means of a wrapper which wraps the object to be accesed. Thus this insulates the objects from any changes or variation to other objects.&lt;br /&gt;
&lt;br /&gt;
Some of the standard practices motivated by this pattern are '''Data encapsulation, [http://en.wikipedia.org/wiki/Interface_%28computer_science%29 Interfaces], [http://en.wikipedia.org/wiki/Polymorphism_in_object-oriented_programming Polymorphism] and [http://en.wikipedia.org/wiki/Indirection Indirection].'''. Also the Protected Variation pattern in principle is very similar to the '''&amp;quot;Open-Close Principle&amp;quot;''' discussed in detail by Bertrand Meyer in [4] and also very similar to what David Parnas means by [http://en.wikipedia.org/wiki/Information_hiding '''Information Hiding'''] in [3].&lt;br /&gt;
&lt;br /&gt;
== An Example ==&lt;br /&gt;
One commercial example that we can look at that best illustrates the Protected Variations design principle is in the commercial industry of video games. Vendors who make video games make money by building complex 3D game engines, sound effects and AI(Artificial Intelligence) effects.These companies often produce many games using the same engine, and release the game on many consoles like for instance a [http://en.wikipedia.org/wiki/Xbox '''XBox'''] or a [http://en.wikipedia.org/wiki/PlayStation '''Playstation'''].&lt;br /&gt;
This can be seen as implementing the Protected Variation pattern, in that&lt;br /&gt;
&lt;br /&gt;
*If a game is to be ported to another console, the wrapper object will have to delegate3 D graphics drawing to different console-level commands.&lt;br /&gt;
&lt;br /&gt;
*It makes sense in such a case to make changes only to the wrapper since the wrapper is simpler to change than the entire game and all of its facets.&lt;br /&gt;
&lt;br /&gt;
= Other Mechanisms motivated by PV =&lt;br /&gt;
Craig Larman in [2] looks at some of the common mechanisms that exist which take motivation from the Protected Variation design principle. Several software components or systems that exist already such as Operating systems, video games use this mechanism either directly or indirectly. &lt;br /&gt;
&lt;br /&gt;
Even Components such as brokers and virtual machines are complex examples of indirection.[2]&lt;br /&gt;
&lt;br /&gt;
== Uniform Access ==&lt;br /&gt;
== Data Driven Design ==&lt;br /&gt;
== Service Lookup ==&lt;br /&gt;
== Interpreter-Driven Design ==&lt;br /&gt;
== Reflective or Meta-Level Designs ==&lt;br /&gt;
&lt;br /&gt;
= Advantages =&lt;br /&gt;
Protected Variations &lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
= References =&lt;br /&gt;
[1] [http://en.wikipedia.org/wiki/GRASP_%28object-oriented_design%29 '''Wikipedia GRASP patterns''']&lt;br /&gt;
&lt;br /&gt;
[2] ''Protected variation: the importance of being closed'', Larman.C, ISSN: 0740-7459, 89 - 91&lt;br /&gt;
&lt;br /&gt;
[3] ''“On the Criteria to Be Used in Decomposing Systems into Modules”'', Comm. ACM, vol.12, no. 2, Dec. 1972&lt;br /&gt;
&lt;br /&gt;
[4] Object- Oriented Software Construction (IEEE Press, 1988)&lt;br /&gt;
&lt;br /&gt;
[5] ''“Prioritizing Forces in Software Design”'', Patterns Languages of Program Design, vol. 2, Addison-Wesley, 1996&lt;br /&gt;
&lt;br /&gt;
= See Also =&lt;/div&gt;</summary>
		<author><name>Dragon9786</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch7_7e_GS&amp;diff=43132</id>
		<title>CSC/ECE 517 Fall 2010/ch7 7e GS</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch7_7e_GS&amp;diff=43132"/>
		<updated>2010-12-02T01:57:04Z</updated>

		<summary type="html">&lt;p&gt;Dragon9786: /* References */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
The '''Protected Variations pattern''' [5] is one of the '''GRASP''' patterns. '''General Responsibility Assignment Software Patterns (or Principles)''', abbreviated GRASP, consists of guidelines for assigning responsibility to classes and objects in object-oriented design.[1]&lt;br /&gt;
&lt;br /&gt;
The Protected Variations pattern protects elements from the variations on other elements (objects, systems, subsystems) by wrapping the focus of instability with an interface and using polymorphism to create various implementations of this interface.&lt;br /&gt;
&lt;br /&gt;
= Protected Variation Pattern =&lt;br /&gt;
This pattern mainly deals with the problem of designing objects, subsystems and systems so that any variations or instability in these elements does not have an undesirable impact on other elements. The Protected Variation pattern tries to address this problem by identifying points of predicted variation or instability and assignsresponsibilities to create a stable interface (or protection mechanism) around them.&lt;br /&gt;
&lt;br /&gt;
That is an external object trying to modify another object can only do this by the means of a wrapper which wraps the object to be accesed. Thus this insulates the objects from any changes or variation to other objects.&lt;br /&gt;
&lt;br /&gt;
Some of the standard practices motivated by this pattern are '''Data encapsulation, [http://en.wikipedia.org/wiki/Interface_%28computer_science%29 Interfaces], [http://en.wikipedia.org/wiki/Polymorphism_in_object-oriented_programming Polymorphism] and [http://en.wikipedia.org/wiki/Indirection Indirection].'''. Also the Protected Variation pattern in principle is very similar to the '''&amp;quot;Open-Close Principle&amp;quot;''' discussed in detail by Bertrand Meyer in [4] and also very similar to what David Parnas means by [http://en.wikipedia.org/wiki/Information_hiding '''Information Hiding'''] in [3].&lt;br /&gt;
&lt;br /&gt;
== An Example ==&lt;br /&gt;
One commercial example that we can look at that best illustrates the Protected Variations design principle is in the commercial industry of video games. Vendors who make video games make money by building complex 3D game engines, sound effects and AI(Artificial Intelligence) effects.These companies often produce many games using the same engine, and release the game on many consoles like for instance a [http://en.wikipedia.org/wiki/Xbox '''XBox'''] or a [http://en.wikipedia.org/wiki/PlayStation '''Playstation'''].&lt;br /&gt;
This can be seen as implementing the Protected Variation pattern, in that&lt;br /&gt;
&lt;br /&gt;
*If a game is to be ported to another console, the wrapper object will have to delegate3 D graphics drawing to different console-level commands.&lt;br /&gt;
&lt;br /&gt;
*It makes sense in such a case to make changes only to the wrapper since the wrapper is simpler to change than the entire game and all of its facets.&lt;br /&gt;
&lt;br /&gt;
= Other Mechanisms motivated by PV =&lt;br /&gt;
Craig Larman in [2] looks at some of the common mechanisms that exist which take motivation from the Protected Variation design principle. Several software components or systems that exist already such as Operating systems, video games use this mechanism either directly or indirectly. &lt;br /&gt;
&lt;br /&gt;
Even Components such as brokers and virtual machines are complex examples of indirection.[2]&lt;br /&gt;
&lt;br /&gt;
== Uniform Access ==&lt;br /&gt;
== Data Driven Design ==&lt;br /&gt;
== Service Lookup ==&lt;br /&gt;
== Interpreter-Driven Design ==&lt;br /&gt;
== Reflective or Meta-Level Designs ==&lt;br /&gt;
&lt;br /&gt;
= Conclusion = &lt;br /&gt;
&lt;br /&gt;
= References =&lt;br /&gt;
[1] [http://en.wikipedia.org/wiki/GRASP_%28object-oriented_design%29 '''Wikipedia GRASP patterns''']&lt;br /&gt;
&lt;br /&gt;
[2] ''Protected variation: the importance of being closed'', Larman.C, ISSN: 0740-7459, 89 - 91&lt;br /&gt;
&lt;br /&gt;
[3] ''“On the Criteria to Be Used in Decomposing Systems into Modules”'', Comm. ACM, vol.12, no. 2, Dec. 1972&lt;br /&gt;
&lt;br /&gt;
[4] Object- Oriented Software Construction (IEEE Press, 1988)&lt;br /&gt;
&lt;br /&gt;
[5] ''“Prioritizing Forces in Software Design”'', Patterns Languages of Program Design, vol. 2, Addison-Wesley, 1996&lt;br /&gt;
&lt;br /&gt;
= See Also =&lt;/div&gt;</summary>
		<author><name>Dragon9786</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch7_7e_GS&amp;diff=43131</id>
		<title>CSC/ECE 517 Fall 2010/ch7 7e GS</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch7_7e_GS&amp;diff=43131"/>
		<updated>2010-12-02T01:53:05Z</updated>

		<summary type="html">&lt;p&gt;Dragon9786: /* Other Mechanisms motivated by PV */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
The '''Protected Variations pattern''' [5] is one of the '''GRASP''' patterns. '''General Responsibility Assignment Software Patterns (or Principles)''', abbreviated GRASP, consists of guidelines for assigning responsibility to classes and objects in object-oriented design.[1]&lt;br /&gt;
&lt;br /&gt;
The Protected Variations pattern protects elements from the variations on other elements (objects, systems, subsystems) by wrapping the focus of instability with an interface and using polymorphism to create various implementations of this interface.&lt;br /&gt;
&lt;br /&gt;
= Protected Variation Pattern =&lt;br /&gt;
This pattern mainly deals with the problem of designing objects, subsystems and systems so that any variations or instability in these elements does not have an undesirable impact on other elements. The Protected Variation pattern tries to address this problem by identifying points of predicted variation or instability and assignsresponsibilities to create a stable interface (or protection mechanism) around them.&lt;br /&gt;
&lt;br /&gt;
That is an external object trying to modify another object can only do this by the means of a wrapper which wraps the object to be accesed. Thus this insulates the objects from any changes or variation to other objects.&lt;br /&gt;
&lt;br /&gt;
Some of the standard practices motivated by this pattern are '''Data encapsulation, [http://en.wikipedia.org/wiki/Interface_%28computer_science%29 Interfaces], [http://en.wikipedia.org/wiki/Polymorphism_in_object-oriented_programming Polymorphism] and [http://en.wikipedia.org/wiki/Indirection Indirection].'''. Also the Protected Variation pattern in principle is very similar to the '''&amp;quot;Open-Close Principle&amp;quot;''' discussed in detail by Bertrand Meyer in [4] and also very similar to what David Parnas means by [http://en.wikipedia.org/wiki/Information_hiding '''Information Hiding'''] in [3].&lt;br /&gt;
&lt;br /&gt;
== An Example ==&lt;br /&gt;
One commercial example that we can look at that best illustrates the Protected Variations design principle is in the commercial industry of video games. Vendors who make video games make money by building complex 3D game engines, sound effects and AI(Artificial Intelligence) effects.These companies often produce many games using the same engine, and release the game on many consoles like for instance a [http://en.wikipedia.org/wiki/Xbox '''XBox'''] or a [http://en.wikipedia.org/wiki/PlayStation '''Playstation'''].&lt;br /&gt;
This can be seen as implementing the Protected Variation pattern, in that&lt;br /&gt;
&lt;br /&gt;
*If a game is to be ported to another console, the wrapper object will have to delegate3 D graphics drawing to different console-level commands.&lt;br /&gt;
&lt;br /&gt;
*It makes sense in such a case to make changes only to the wrapper since the wrapper is simpler to change than the entire game and all of its facets.&lt;br /&gt;
&lt;br /&gt;
= Other Mechanisms motivated by PV =&lt;br /&gt;
Craig Larman in [2] looks at some of the common mechanisms that exist which take motivation from the Protected Variation design principle. Several software components or systems that exist already such as Operating systems, video games use this mechanism either directly or indirectly. &lt;br /&gt;
&lt;br /&gt;
Even Components such as brokers and virtual machines are complex examples of indirection.[2]&lt;br /&gt;
&lt;br /&gt;
== Uniform Access ==&lt;br /&gt;
== Data Driven Design ==&lt;br /&gt;
== Service Lookup ==&lt;br /&gt;
== Interpreter-Driven Design ==&lt;br /&gt;
== Reflective or Meta-Level Designs ==&lt;br /&gt;
&lt;br /&gt;
= Conclusion = &lt;br /&gt;
&lt;br /&gt;
= References =&lt;br /&gt;
[1] Wikipedia GRASP patterns&lt;br /&gt;
&lt;br /&gt;
[2] Protected variation: the importance of being closed, Larman.C, ISSN: 0740-7459, 89 - 91&lt;br /&gt;
&lt;br /&gt;
[3] “On the Criteria to Be Used in Decomposing Systems into Modules” Comm. ACM, vol.12, no. 2, Dec. 1972&lt;br /&gt;
&lt;br /&gt;
[4] Object- Oriented Software Construction (IEEE Press, 1988)&lt;br /&gt;
&lt;br /&gt;
[5] “Prioritizing Forces in Software Design,” Patterns Languages of Program Design, vol. 2, Addison-Wesley, 1996&lt;br /&gt;
&lt;br /&gt;
= See Also =&lt;/div&gt;</summary>
		<author><name>Dragon9786</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch7_7e_GS&amp;diff=43125</id>
		<title>CSC/ECE 517 Fall 2010/ch7 7e GS</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch7_7e_GS&amp;diff=43125"/>
		<updated>2010-12-02T01:42:36Z</updated>

		<summary type="html">&lt;p&gt;Dragon9786: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
The '''Protected Variations pattern''' [5] is one of the '''GRASP''' patterns. '''General Responsibility Assignment Software Patterns (or Principles)''', abbreviated GRASP, consists of guidelines for assigning responsibility to classes and objects in object-oriented design.[1]&lt;br /&gt;
&lt;br /&gt;
The Protected Variations pattern protects elements from the variations on other elements (objects, systems, subsystems) by wrapping the focus of instability with an interface and using polymorphism to create various implementations of this interface.&lt;br /&gt;
&lt;br /&gt;
= Protected Variation Pattern =&lt;br /&gt;
This pattern mainly deals with the problem of designing objects, subsystems and systems so that any variations or instability in these elements does not have an undesirable impact on other elements. The Protected Variation pattern tries to address this problem by identifying points of predicted variation or instability and assignsresponsibilities to create a stable interface (or protection mechanism) around them.&lt;br /&gt;
&lt;br /&gt;
That is an external object trying to modify another object can only do this by the means of a wrapper which wraps the object to be accesed. Thus this insulates the objects from any changes or variation to other objects.&lt;br /&gt;
&lt;br /&gt;
Some of the standard practices motivated by this pattern are '''Data encapsulation, [http://en.wikipedia.org/wiki/Interface_%28computer_science%29 Interfaces], [http://en.wikipedia.org/wiki/Polymorphism_in_object-oriented_programming Polymorphism] and [http://en.wikipedia.org/wiki/Indirection Indirection].'''. Also the Protected Variation pattern in principle is very similar to the '''&amp;quot;Open-Close Principle&amp;quot;''' discussed in detail by Bertrand Meyer in [4] and also very similar to what David Parnas means by [http://en.wikipedia.org/wiki/Information_hiding '''Information Hiding'''] in [3].&lt;br /&gt;
&lt;br /&gt;
== An Example ==&lt;br /&gt;
One commercial example that we can look at that best illustrates the Protected Variations design principle is in the commercial industry of video games. Vendors who make video games make money by building complex 3D game engines, sound effects and AI(Artificial Intelligence) effects.These companies often produce many games using the same engine, and release the game on many consoles like for instance a [http://en.wikipedia.org/wiki/Xbox '''XBox'''] or a [http://en.wikipedia.org/wiki/PlayStation '''Playstation'''].&lt;br /&gt;
This can be seen as implementing the Protected Variation pattern, in that&lt;br /&gt;
&lt;br /&gt;
*If a game is to be ported to another console, the wrapper object will have to delegate3 D graphics drawing to different console-level commands.&lt;br /&gt;
&lt;br /&gt;
*It makes sense in such a case to make changes only to the wrapper since the wrapper is simpler to change than the entire game and all of its facets.&lt;br /&gt;
&lt;br /&gt;
= Other Mechanisms motivated by PV =&lt;br /&gt;
&lt;br /&gt;
= Conclusion = &lt;br /&gt;
&lt;br /&gt;
= References =&lt;br /&gt;
[1] Wikipedia GRASP patterns&lt;br /&gt;
&lt;br /&gt;
[2] Protected variation: the importance of being closed, Larman.C, ISSN: 0740-7459, 89 - 91&lt;br /&gt;
&lt;br /&gt;
[3] “On the Criteria to Be Used in Decomposing Systems into Modules” Comm. ACM, vol.12, no. 2, Dec. 1972&lt;br /&gt;
&lt;br /&gt;
[4] Object- Oriented Software Construction (IEEE Press, 1988)&lt;br /&gt;
&lt;br /&gt;
[5] “Prioritizing Forces in Software Design,” Patterns Languages of Program Design, vol. 2, Addison-Wesley, 1996&lt;br /&gt;
&lt;br /&gt;
= See Also =&lt;/div&gt;</summary>
		<author><name>Dragon9786</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch7_7e_GS&amp;diff=43123</id>
		<title>CSC/ECE 517 Fall 2010/ch7 7e GS</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch7_7e_GS&amp;diff=43123"/>
		<updated>2010-12-02T01:40:50Z</updated>

		<summary type="html">&lt;p&gt;Dragon9786: /* An Example */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
The '''Protected Variations pattern''' [5] is one of the '''GRASP''' patterns. '''General Responsibility Assignment Software Patterns (or Principles)''', abbreviated GRASP, consists of guidelines for assigning responsibility to classes and objects in object-oriented design.[1]&lt;br /&gt;
&lt;br /&gt;
The Protected Variations pattern protects elements from the variations on other elements (objects, systems, subsystems) by wrapping the focus of instability with an interface and using polymorphism to create various implementations of this interface.&lt;br /&gt;
&lt;br /&gt;
= Protected Variation Pattern =&lt;br /&gt;
This pattern mainly deals with the problem of designing objects, subsystems and systems so that any variations or instability in these elements does not have an undesirable impact on other elements. The Protected Variation pattern tries to address this problem by identifying points of predicted variation or instability and assignsresponsibilities to create a stable interface (or protection mechanism) around them.&lt;br /&gt;
&lt;br /&gt;
That is an external object trying to modify another object can only do this by the means of a wrapper which wraps the object to be accesed. Thus this insulates the objects from any changes or variation to other objects.&lt;br /&gt;
&lt;br /&gt;
Some of the standard practices motivated by this pattern are '''Data encapsulation, [http://en.wikipedia.org/wiki/Interface_%28computer_science%29 Interfaces], [http://en.wikipedia.org/wiki/Polymorphism_in_object-oriented_programming Polymorphism] and [http://en.wikipedia.org/wiki/Indirection Indirection].'''. Also the Protected Variation pattern in principle is very similar to the '''&amp;quot;Open-Close Principle&amp;quot;''' discussed in detail by Bertrand Meyer in [4] and also very similar to what David Parnas means by [http://en.wikipedia.org/wiki/Information_hiding '''Information Hiding'''] in [3].&lt;br /&gt;
&lt;br /&gt;
== An Example ==&lt;br /&gt;
One commercial example that we can look at that best illustrates the Protected Variations design principle is in the commercial industry of video games. Vendors who make video games make money by building complex 3D game engines, sound effects and AI(Artificial Intelligence) effects.These companies often produce many games using the same engine, and release the game on many consoles like for instance a [http://en.wikipedia.org/wiki/Xbox '''XBox'''] or a [http://en.wikipedia.org/wiki/PlayStation '''Playstation'''].&lt;br /&gt;
This can be seen as implementing the Protected Variation pattern, in that&lt;br /&gt;
&lt;br /&gt;
*If a game is to be ported to another console, the wrapper object will have to delegate3 D graphics drawing to different console-level commands.&lt;br /&gt;
&lt;br /&gt;
*It makes sense in such a case to make changes only to the wrapper since the wrapper is simpler to change than the entire game and all of its facets.&lt;br /&gt;
&lt;br /&gt;
= Conclusion = &lt;br /&gt;
&lt;br /&gt;
= References =&lt;br /&gt;
[1] Wikipedia GRASP patterns&lt;br /&gt;
&lt;br /&gt;
[2] Protected variation: the importance of being closed, Larman.C, ISSN: 0740-7459, 89 - 91&lt;br /&gt;
&lt;br /&gt;
[3] “On the Criteria to Be Used in Decomposing Systems into Modules” Comm. ACM, vol.12, no. 2, Dec. 1972&lt;br /&gt;
&lt;br /&gt;
[4] Object- Oriented Software Construction (IEEE Press, 1988)&lt;br /&gt;
&lt;br /&gt;
[5] “Prioritizing Forces in Software Design,” Patterns Languages of Program Design, vol. 2, Addison-Wesley, 1996&lt;br /&gt;
&lt;br /&gt;
= See Also =&lt;/div&gt;</summary>
		<author><name>Dragon9786</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch7_7e_GS&amp;diff=43121</id>
		<title>CSC/ECE 517 Fall 2010/ch7 7e GS</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch7_7e_GS&amp;diff=43121"/>
		<updated>2010-12-02T01:40:30Z</updated>

		<summary type="html">&lt;p&gt;Dragon9786: /* An Example */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
The '''Protected Variations pattern''' [5] is one of the '''GRASP''' patterns. '''General Responsibility Assignment Software Patterns (or Principles)''', abbreviated GRASP, consists of guidelines for assigning responsibility to classes and objects in object-oriented design.[1]&lt;br /&gt;
&lt;br /&gt;
The Protected Variations pattern protects elements from the variations on other elements (objects, systems, subsystems) by wrapping the focus of instability with an interface and using polymorphism to create various implementations of this interface.&lt;br /&gt;
&lt;br /&gt;
= Protected Variation Pattern =&lt;br /&gt;
This pattern mainly deals with the problem of designing objects, subsystems and systems so that any variations or instability in these elements does not have an undesirable impact on other elements. The Protected Variation pattern tries to address this problem by identifying points of predicted variation or instability and assignsresponsibilities to create a stable interface (or protection mechanism) around them.&lt;br /&gt;
&lt;br /&gt;
That is an external object trying to modify another object can only do this by the means of a wrapper which wraps the object to be accesed. Thus this insulates the objects from any changes or variation to other objects.&lt;br /&gt;
&lt;br /&gt;
Some of the standard practices motivated by this pattern are '''Data encapsulation, [http://en.wikipedia.org/wiki/Interface_%28computer_science%29 Interfaces], [http://en.wikipedia.org/wiki/Polymorphism_in_object-oriented_programming Polymorphism] and [http://en.wikipedia.org/wiki/Indirection Indirection].'''. Also the Protected Variation pattern in principle is very similar to the '''&amp;quot;Open-Close Principle&amp;quot;''' discussed in detail by Bertrand Meyer in [4] and also very similar to what David Parnas means by [http://en.wikipedia.org/wiki/Information_hiding '''Information Hiding'''] in [3].&lt;br /&gt;
&lt;br /&gt;
== An Example ==&lt;br /&gt;
One commercial example that we can look at that best illustrates the Protected Variations design principle is in the commercial industry of video games. Vendors who make video games make money by building complex 3D game engines, sound effects and AI(Artificial Intelligence) effects.These companies often produce many games using the same engine, and release the game on many consoles like for instance a [http://en.wikipedia.org/wiki/Xbox '''XBox'''] or a [http://en.wikipedia.org/wiki/PlayStation '''Playstation'''].&lt;br /&gt;
This can be seen as implementing the Protected Variation pattern, in that&lt;br /&gt;
&lt;br /&gt;
*If a game is to be ported to another console, the wrapper object will have to delegate3 D graphics drawing to different console-level commands&lt;br /&gt;
&lt;br /&gt;
*It makes sense in such a case to make changes only to the wrapper since the wrapper is simpler to change than the entire game and all of its facets&lt;br /&gt;
&lt;br /&gt;
= Conclusion = &lt;br /&gt;
&lt;br /&gt;
= References =&lt;br /&gt;
[1] Wikipedia GRASP patterns&lt;br /&gt;
&lt;br /&gt;
[2] Protected variation: the importance of being closed, Larman.C, ISSN: 0740-7459, 89 - 91&lt;br /&gt;
&lt;br /&gt;
[3] “On the Criteria to Be Used in Decomposing Systems into Modules” Comm. ACM, vol.12, no. 2, Dec. 1972&lt;br /&gt;
&lt;br /&gt;
[4] Object- Oriented Software Construction (IEEE Press, 1988)&lt;br /&gt;
&lt;br /&gt;
[5] “Prioritizing Forces in Software Design,” Patterns Languages of Program Design, vol. 2, Addison-Wesley, 1996&lt;br /&gt;
&lt;br /&gt;
= See Also =&lt;/div&gt;</summary>
		<author><name>Dragon9786</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch7_7e_GS&amp;diff=43119</id>
		<title>CSC/ECE 517 Fall 2010/ch7 7e GS</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch7_7e_GS&amp;diff=43119"/>
		<updated>2010-12-02T01:36:13Z</updated>

		<summary type="html">&lt;p&gt;Dragon9786: /* Protected Variation Pattern */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
The '''Protected Variations pattern''' [5] is one of the '''GRASP''' patterns. '''General Responsibility Assignment Software Patterns (or Principles)''', abbreviated GRASP, consists of guidelines for assigning responsibility to classes and objects in object-oriented design.[1]&lt;br /&gt;
&lt;br /&gt;
The Protected Variations pattern protects elements from the variations on other elements (objects, systems, subsystems) by wrapping the focus of instability with an interface and using polymorphism to create various implementations of this interface.&lt;br /&gt;
&lt;br /&gt;
= Protected Variation Pattern =&lt;br /&gt;
This pattern mainly deals with the problem of designing objects, subsystems and systems so that any variations or instability in these elements does not have an undesirable impact on other elements. The Protected Variation pattern tries to address this problem by identifying points of predicted variation or instability and assignsresponsibilities to create a stable interface (or protection mechanism) around them.&lt;br /&gt;
&lt;br /&gt;
That is an external object trying to modify another object can only do this by the means of a wrapper which wraps the object to be accesed. Thus this insulates the objects from any changes or variation to other objects.&lt;br /&gt;
&lt;br /&gt;
Some of the standard practices motivated by this pattern are '''Data encapsulation, [http://en.wikipedia.org/wiki/Interface_%28computer_science%29 Interfaces], [http://en.wikipedia.org/wiki/Polymorphism_in_object-oriented_programming Polymorphism] and [http://en.wikipedia.org/wiki/Indirection Indirection].'''. Also the Protected Variation pattern in principle is very similar to the '''&amp;quot;Open-Close Principle&amp;quot;''' discussed in detail by Bertrand Meyer in [4] and also very similar to what David Parnas means by [http://en.wikipedia.org/wiki/Information_hiding '''Information Hiding'''] in [3].&lt;br /&gt;
&lt;br /&gt;
== An Example ==&lt;br /&gt;
One commercial example that we can look at that best illustrates the Protected Variations design principle is in the commercial industry of video games. Vendors who make video games make money by building complex 3D game engines, sound effects and AI(Artificial Intelligence) effects.These companies often produce many games using the same engine, and release the game on many consoles like for instance a [http://en.wikipedia.org/wiki/Xbox '''XBox'''] or a [http://en.wikipedia.org/wiki/PlayStation '''Playstation'''].&lt;br /&gt;
&lt;br /&gt;
= Conclusion = &lt;br /&gt;
&lt;br /&gt;
= References =&lt;br /&gt;
[1] Wikipedia GRASP patterns&lt;br /&gt;
&lt;br /&gt;
[2] Protected variation: the importance of being closed, Larman.C, ISSN: 0740-7459, 89 - 91&lt;br /&gt;
&lt;br /&gt;
[3] “On the Criteria to Be Used in Decomposing Systems into Modules” Comm. ACM, vol.12, no. 2, Dec. 1972&lt;br /&gt;
&lt;br /&gt;
[4] Object- Oriented Software Construction (IEEE Press, 1988)&lt;br /&gt;
&lt;br /&gt;
[5] “Prioritizing Forces in Software Design,” Patterns Languages of Program Design, vol. 2, Addison-Wesley, 1996&lt;br /&gt;
&lt;br /&gt;
= See Also =&lt;/div&gt;</summary>
		<author><name>Dragon9786</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch7_7e_GS&amp;diff=43115</id>
		<title>CSC/ECE 517 Fall 2010/ch7 7e GS</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch7_7e_GS&amp;diff=43115"/>
		<updated>2010-12-02T01:32:40Z</updated>

		<summary type="html">&lt;p&gt;Dragon9786: /* An Example */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
The '''Protected Variations pattern''' [5] is one of the '''GRASP''' patterns. '''General Responsibility Assignment Software Patterns (or Principles)''', abbreviated GRASP, consists of guidelines for assigning responsibility to classes and objects in object-oriented design.[1]&lt;br /&gt;
&lt;br /&gt;
The Protected Variations pattern protects elements from the variations on other elements (objects, systems, subsystems) by wrapping the focus of instability with an interface and using polymorphism to create various implementations of this interface.&lt;br /&gt;
&lt;br /&gt;
= Protected Variation Pattern =&lt;br /&gt;
This pattern mainly deals with the problem of designing objects, subsystems and systems so that any variations or instability in these elements does not have an undesirable impact on other elements. The Protected Variation pattern tries to address this problem by identifying points of predicted variation or instability and assignsresponsibilities to create a stable interface (or protection mechanism) around them.&lt;br /&gt;
&lt;br /&gt;
That is an external object trying to modify another object can only do this by the means of a wrapper which wraps the object to be accesed. Thus this insulates the objects from any changes or variation to other objects.&lt;br /&gt;
&lt;br /&gt;
Some of the standard practices motivated by this pattern are '''Data encapsulation, interfaces, polymorphism and indirection.'''. Also the Protected Variation pattern in principle is very similar to the '''&amp;quot;Open-Close Principle&amp;quot;''' discussed in detail by Bertrand Meyer in [4] and also very similar to what David Parnas means by '''Information Hiding''' in [3].&lt;br /&gt;
&lt;br /&gt;
== An Example ==&lt;br /&gt;
One commercial example that we can look at that best illustrates the Protected Variations design principle is in the commercial industry of video games. Vendors who make video games make money by building complex 3D game engines, sound effects and AI(Artificial Intelligence) effects.These companies often produce many games using the same engine, and release the game on many consoles like for instance a [http://en.wikipedia.org/wiki/Xbox '''XBox'''] or a [http://en.wikipedia.org/wiki/PlayStation '''Playstation'''].&lt;br /&gt;
&lt;br /&gt;
= Conclusion = &lt;br /&gt;
&lt;br /&gt;
= References =&lt;br /&gt;
[1] Wikipedia GRASP patterns&lt;br /&gt;
&lt;br /&gt;
[2] Protected variation: the importance of being closed, Larman.C, ISSN: 0740-7459, 89 - 91&lt;br /&gt;
&lt;br /&gt;
[3] “On the Criteria to Be Used in Decomposing Systems into Modules” Comm. ACM, vol.12, no. 2, Dec. 1972&lt;br /&gt;
&lt;br /&gt;
[4] Object- Oriented Software Construction (IEEE Press, 1988)&lt;br /&gt;
&lt;br /&gt;
[5] “Prioritizing Forces in Software Design,” Patterns Languages of Program Design, vol. 2, Addison-Wesley, 1996&lt;br /&gt;
&lt;br /&gt;
= See Also =&lt;/div&gt;</summary>
		<author><name>Dragon9786</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch7_7e_GS&amp;diff=43112</id>
		<title>CSC/ECE 517 Fall 2010/ch7 7e GS</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch7_7e_GS&amp;diff=43112"/>
		<updated>2010-12-02T01:31:45Z</updated>

		<summary type="html">&lt;p&gt;Dragon9786: /* An Example */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
The '''Protected Variations pattern''' [5] is one of the '''GRASP''' patterns. '''General Responsibility Assignment Software Patterns (or Principles)''', abbreviated GRASP, consists of guidelines for assigning responsibility to classes and objects in object-oriented design.[1]&lt;br /&gt;
&lt;br /&gt;
The Protected Variations pattern protects elements from the variations on other elements (objects, systems, subsystems) by wrapping the focus of instability with an interface and using polymorphism to create various implementations of this interface.&lt;br /&gt;
&lt;br /&gt;
= Protected Variation Pattern =&lt;br /&gt;
This pattern mainly deals with the problem of designing objects, subsystems and systems so that any variations or instability in these elements does not have an undesirable impact on other elements. The Protected Variation pattern tries to address this problem by identifying points of predicted variation or instability and assignsresponsibilities to create a stable interface (or protection mechanism) around them.&lt;br /&gt;
&lt;br /&gt;
That is an external object trying to modify another object can only do this by the means of a wrapper which wraps the object to be accesed. Thus this insulates the objects from any changes or variation to other objects.&lt;br /&gt;
&lt;br /&gt;
Some of the standard practices motivated by this pattern are '''Data encapsulation, interfaces, polymorphism and indirection.'''. Also the Protected Variation pattern in principle is very similar to the '''&amp;quot;Open-Close Principle&amp;quot;''' discussed in detail by Bertrand Meyer in [4] and also very similar to what David Parnas means by '''Information Hiding''' in [3].&lt;br /&gt;
&lt;br /&gt;
== An Example ==&lt;br /&gt;
One commercial example that we can look at that best illustrates the Protected Variations design principle is in the commercial industry of video games. Vendors who make video games make money by building complex 3D game engines, sound effects and AI(Artificial Intelligence) effects.These companies often produce many games using the same engine, and release the game on many consoles like for instance [http://en.wikipedia.org/wiki/Xbox '''XBox'''] or Playstation.&lt;br /&gt;
&lt;br /&gt;
= Conclusion = &lt;br /&gt;
&lt;br /&gt;
= References =&lt;br /&gt;
[1] Wikipedia GRASP patterns&lt;br /&gt;
&lt;br /&gt;
[2] Protected variation: the importance of being closed, Larman.C, ISSN: 0740-7459, 89 - 91&lt;br /&gt;
&lt;br /&gt;
[3] “On the Criteria to Be Used in Decomposing Systems into Modules” Comm. ACM, vol.12, no. 2, Dec. 1972&lt;br /&gt;
&lt;br /&gt;
[4] Object- Oriented Software Construction (IEEE Press, 1988)&lt;br /&gt;
&lt;br /&gt;
[5] “Prioritizing Forces in Software Design,” Patterns Languages of Program Design, vol. 2, Addison-Wesley, 1996&lt;br /&gt;
&lt;br /&gt;
= See Also =&lt;/div&gt;</summary>
		<author><name>Dragon9786</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch7_7e_GS&amp;diff=43111</id>
		<title>CSC/ECE 517 Fall 2010/ch7 7e GS</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch7_7e_GS&amp;diff=43111"/>
		<updated>2010-12-02T01:29:55Z</updated>

		<summary type="html">&lt;p&gt;Dragon9786: /* An Example */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
The '''Protected Variations pattern''' [5] is one of the '''GRASP''' patterns. '''General Responsibility Assignment Software Patterns (or Principles)''', abbreviated GRASP, consists of guidelines for assigning responsibility to classes and objects in object-oriented design.[1]&lt;br /&gt;
&lt;br /&gt;
The Protected Variations pattern protects elements from the variations on other elements (objects, systems, subsystems) by wrapping the focus of instability with an interface and using polymorphism to create various implementations of this interface.&lt;br /&gt;
&lt;br /&gt;
= Protected Variation Pattern =&lt;br /&gt;
This pattern mainly deals with the problem of designing objects, subsystems and systems so that any variations or instability in these elements does not have an undesirable impact on other elements. The Protected Variation pattern tries to address this problem by identifying points of predicted variation or instability and assignsresponsibilities to create a stable interface (or protection mechanism) around them.&lt;br /&gt;
&lt;br /&gt;
That is an external object trying to modify another object can only do this by the means of a wrapper which wraps the object to be accesed. Thus this insulates the objects from any changes or variation to other objects.&lt;br /&gt;
&lt;br /&gt;
Some of the standard practices motivated by this pattern are '''Data encapsulation, interfaces, polymorphism and indirection.'''. Also the Protected Variation pattern in principle is very similar to the '''&amp;quot;Open-Close Principle&amp;quot;''' discussed in detail by Bertrand Meyer in [4] and also very similar to what David Parnas means by '''Information Hiding''' in [3].&lt;br /&gt;
&lt;br /&gt;
== An Example ==&lt;br /&gt;
One commercial example that we can look at that best illustrates the Protected Variations design principle is in the commercial industry of video games. Vendors who make video games make money by building complex 3D game engines, sound effects and AI(Artificial Intelligence) effects.These companies often produce many games using the same engine, and release the game on many consoles like for instance XBox or Playstation.&lt;br /&gt;
&lt;br /&gt;
= Conclusion = &lt;br /&gt;
&lt;br /&gt;
= References =&lt;br /&gt;
[1] Wikipedia GRASP patterns&lt;br /&gt;
&lt;br /&gt;
[2] Protected variation: the importance of being closed, Larman.C, ISSN: 0740-7459, 89 - 91&lt;br /&gt;
&lt;br /&gt;
[3] “On the Criteria to Be Used in Decomposing Systems into Modules” Comm. ACM, vol.12, no. 2, Dec. 1972&lt;br /&gt;
&lt;br /&gt;
[4] Object- Oriented Software Construction (IEEE Press, 1988)&lt;br /&gt;
&lt;br /&gt;
[5] “Prioritizing Forces in Software Design,” Patterns Languages of Program Design, vol. 2, Addison-Wesley, 1996&lt;br /&gt;
&lt;br /&gt;
= See Also =&lt;/div&gt;</summary>
		<author><name>Dragon9786</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch7_7e_GS&amp;diff=43109</id>
		<title>CSC/ECE 517 Fall 2010/ch7 7e GS</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch7_7e_GS&amp;diff=43109"/>
		<updated>2010-12-02T01:23:18Z</updated>

		<summary type="html">&lt;p&gt;Dragon9786: /* References */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
The '''Protected Variations pattern''' [5] is one of the '''GRASP''' patterns. '''General Responsibility Assignment Software Patterns (or Principles)''', abbreviated GRASP, consists of guidelines for assigning responsibility to classes and objects in object-oriented design.[1]&lt;br /&gt;
&lt;br /&gt;
The Protected Variations pattern protects elements from the variations on other elements (objects, systems, subsystems) by wrapping the focus of instability with an interface and using polymorphism to create various implementations of this interface.&lt;br /&gt;
&lt;br /&gt;
= Protected Variation Pattern =&lt;br /&gt;
This pattern mainly deals with the problem of designing objects, subsystems and systems so that any variations or instability in these elements does not have an undesirable impact on other elements. The Protected Variation pattern tries to address this problem by identifying points of predicted variation or instability and assignsresponsibilities to create a stable interface (or protection mechanism) around them.&lt;br /&gt;
&lt;br /&gt;
That is an external object trying to modify another object can only do this by the means of a wrapper which wraps the object to be accesed. Thus this insulates the objects from any changes or variation to other objects.&lt;br /&gt;
&lt;br /&gt;
Some of the standard practices motivated by this pattern are '''Data encapsulation, interfaces, polymorphism and indirection.'''. Also the Protected Variation pattern in principle is very similar to the '''&amp;quot;Open-Close Principle&amp;quot;''' discussed in detail by Bertrand Meyer in [4] and also very similar to what David Parnas means by '''Information Hiding''' in [3].&lt;br /&gt;
&lt;br /&gt;
== An Example ==&lt;br /&gt;
Craig Larman in [2] discusses an example of the Protected Variations Pattern.&lt;br /&gt;
&lt;br /&gt;
= Conclusion = &lt;br /&gt;
&lt;br /&gt;
= References =&lt;br /&gt;
[1] Wikipedia GRASP patterns&lt;br /&gt;
&lt;br /&gt;
[2] Protected variation: the importance of being closed, Larman.C, ISSN: 0740-7459, 89 - 91&lt;br /&gt;
&lt;br /&gt;
[3] “On the Criteria to Be Used in Decomposing Systems into Modules” Comm. ACM, vol.12, no. 2, Dec. 1972&lt;br /&gt;
&lt;br /&gt;
[4] Object- Oriented Software Construction (IEEE Press, 1988)&lt;br /&gt;
&lt;br /&gt;
[5] “Prioritizing Forces in Software Design,” Patterns Languages of Program Design, vol. 2, Addison-Wesley, 1996&lt;br /&gt;
&lt;br /&gt;
= See Also =&lt;/div&gt;</summary>
		<author><name>Dragon9786</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch7_7e_GS&amp;diff=43108</id>
		<title>CSC/ECE 517 Fall 2010/ch7 7e GS</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch7_7e_GS&amp;diff=43108"/>
		<updated>2010-12-02T01:21:44Z</updated>

		<summary type="html">&lt;p&gt;Dragon9786: /* Introduction */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
The '''Protected Variations pattern''' [5] is one of the '''GRASP''' patterns. '''General Responsibility Assignment Software Patterns (or Principles)''', abbreviated GRASP, consists of guidelines for assigning responsibility to classes and objects in object-oriented design.[1]&lt;br /&gt;
&lt;br /&gt;
The Protected Variations pattern protects elements from the variations on other elements (objects, systems, subsystems) by wrapping the focus of instability with an interface and using polymorphism to create various implementations of this interface.&lt;br /&gt;
&lt;br /&gt;
= Protected Variation Pattern =&lt;br /&gt;
This pattern mainly deals with the problem of designing objects, subsystems and systems so that any variations or instability in these elements does not have an undesirable impact on other elements. The Protected Variation pattern tries to address this problem by identifying points of predicted variation or instability and assignsresponsibilities to create a stable interface (or protection mechanism) around them.&lt;br /&gt;
&lt;br /&gt;
That is an external object trying to modify another object can only do this by the means of a wrapper which wraps the object to be accesed. Thus this insulates the objects from any changes or variation to other objects.&lt;br /&gt;
&lt;br /&gt;
Some of the standard practices motivated by this pattern are '''Data encapsulation, interfaces, polymorphism and indirection.'''. Also the Protected Variation pattern in principle is very similar to the '''&amp;quot;Open-Close Principle&amp;quot;''' discussed in detail by Bertrand Meyer in [4] and also very similar to what David Parnas means by '''Information Hiding''' in [3].&lt;br /&gt;
&lt;br /&gt;
== An Example ==&lt;br /&gt;
Craig Larman in [2] discusses an example of the Protected Variations Pattern.&lt;br /&gt;
&lt;br /&gt;
= Conclusion = &lt;br /&gt;
&lt;br /&gt;
= References =&lt;br /&gt;
[1] Wikipedia GRASP patterns&lt;br /&gt;
&lt;br /&gt;
[2] Protected variation: the importance of being closed, Larman.C, ISSN: 0740-7459, 89 - 91&lt;br /&gt;
&lt;br /&gt;
[3] “On the Criteria to Be Used in Decomposing Systems into Modules” Comm. ACM, vol.12, no. 2, Dec. 1972&lt;br /&gt;
&lt;br /&gt;
= See Also =&lt;/div&gt;</summary>
		<author><name>Dragon9786</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch7_7e_GS&amp;diff=43107</id>
		<title>CSC/ECE 517 Fall 2010/ch7 7e GS</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch7_7e_GS&amp;diff=43107"/>
		<updated>2010-12-02T01:20:47Z</updated>

		<summary type="html">&lt;p&gt;Dragon9786: /* Protected Variation Pattern */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
The protected variations pattern is one of the '''GRASP''' patterns. '''General Responsibility Assignment Software Patterns (or Principles)''', abbreviated GRASP, consists of guidelines for assigning responsibility to classes and objects in object-oriented design.[1]&lt;br /&gt;
&lt;br /&gt;
The Protected Variations pattern protects elements from the variations on other elements (objects, systems, subsystems) by wrapping the focus of instability with an interface and using polymorphism to create various implementations of this interface.&lt;br /&gt;
&lt;br /&gt;
= Protected Variation Pattern =&lt;br /&gt;
This pattern mainly deals with the problem of designing objects, subsystems and systems so that any variations or instability in these elements does not have an undesirable impact on other elements. The Protected Variation pattern tries to address this problem by identifying points of predicted variation or instability and assignsresponsibilities to create a stable interface (or protection mechanism) around them.&lt;br /&gt;
&lt;br /&gt;
That is an external object trying to modify another object can only do this by the means of a wrapper which wraps the object to be accesed. Thus this insulates the objects from any changes or variation to other objects.&lt;br /&gt;
&lt;br /&gt;
Some of the standard practices motivated by this pattern are '''Data encapsulation, interfaces, polymorphism and indirection.'''. Also the Protected Variation pattern in principle is very similar to the '''&amp;quot;Open-Close Principle&amp;quot;''' discussed in detail by Bertrand Meyer in [4] and also very similar to what David Parnas means by '''Information Hiding''' in [3].&lt;br /&gt;
&lt;br /&gt;
== An Example ==&lt;br /&gt;
Craig Larman in [2] discusses an example of the Protected Variations Pattern.&lt;br /&gt;
&lt;br /&gt;
= Conclusion = &lt;br /&gt;
&lt;br /&gt;
= References =&lt;br /&gt;
[1] Wikipedia GRASP patterns&lt;br /&gt;
&lt;br /&gt;
[2] Protected variation: the importance of being closed, Larman.C, ISSN: 0740-7459, 89 - 91&lt;br /&gt;
&lt;br /&gt;
[3] “On the Criteria to Be Used in Decomposing Systems into Modules” Comm. ACM, vol.12, no. 2, Dec. 1972&lt;br /&gt;
&lt;br /&gt;
= See Also =&lt;/div&gt;</summary>
		<author><name>Dragon9786</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch7_7e_GS&amp;diff=43106</id>
		<title>CSC/ECE 517 Fall 2010/ch7 7e GS</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch7_7e_GS&amp;diff=43106"/>
		<updated>2010-12-02T01:17:44Z</updated>

		<summary type="html">&lt;p&gt;Dragon9786: /* Protected Variations Pattern */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
The protected variations pattern is one of the '''GRASP''' patterns. '''General Responsibility Assignment Software Patterns (or Principles)''', abbreviated GRASP, consists of guidelines for assigning responsibility to classes and objects in object-oriented design.[1]&lt;br /&gt;
&lt;br /&gt;
The Protected Variations pattern protects elements from the variations on other elements (objects, systems, subsystems) by wrapping the focus of instability with an interface and using polymorphism to create various implementations of this interface.&lt;br /&gt;
&lt;br /&gt;
= Protected Variation Pattern =&lt;br /&gt;
This pattern mainly deals with the problem of designing objects, subsystems and systems so that any variations or instability in these elements does not have an undesirable impact on other elements. The Protected Variation pattern tries to address this problem by identifying points of predicted variation or instability and assignsresponsibilities to create a stable interface (or protection mechanism) around them.&lt;br /&gt;
&lt;br /&gt;
That is an external object trying to modify another object can only do this by the means of a wrapper which wraps the object to be accesed. Thus this insulates the objects from any changes or variation to other objects.&lt;br /&gt;
&lt;br /&gt;
Some of the standard practices motivated by this pattern are '''Data encapsulation, interfaces, polymorphism and indirection.'''&lt;br /&gt;
&lt;br /&gt;
== An Example ==&lt;br /&gt;
Craig Larman in [2] discusses an example of the Protected Variations Pattern.&lt;br /&gt;
&lt;br /&gt;
= Conclusion = &lt;br /&gt;
&lt;br /&gt;
= References =&lt;br /&gt;
[1] Wikipedia GRASP patterns&lt;br /&gt;
&lt;br /&gt;
[2] Protected variation: the importance of being closed, Larman.C, ISSN: 0740-7459, 89 - 91&lt;br /&gt;
&lt;br /&gt;
[3] “On the Criteria to Be Used in Decomposing Systems into Modules” Comm. ACM, vol.12, no. 2, Dec. 1972&lt;br /&gt;
&lt;br /&gt;
= See Also =&lt;/div&gt;</summary>
		<author><name>Dragon9786</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch7_7e_GS&amp;diff=43086</id>
		<title>CSC/ECE 517 Fall 2010/ch7 7e GS</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch7_7e_GS&amp;diff=43086"/>
		<updated>2010-12-02T00:14:59Z</updated>

		<summary type="html">&lt;p&gt;Dragon9786: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Protected Variations Pattern =&lt;br /&gt;
GRASP stands for General Responsibility Assignment Software Patterns and defines nine patterns, of which '''protected variations ''' is one [1].&lt;br /&gt;
&amp;lt;blockquote&amp;gt;The protected variations pattern protects elements from the variations on other elements (objects, systems, subsystems) by wrapping the focus of instability with an interface and using polymorphism to create various implementations of this interface.[1]&amp;lt;/blockquote&amp;gt;&lt;/div&gt;</summary>
		<author><name>Dragon9786</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch1_S10_ms&amp;diff=43085</id>
		<title>CSC/ECE 517 Fall 2010/ch1 S10 ms</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch1_S10_ms&amp;diff=43085"/>
		<updated>2010-12-02T00:13:45Z</updated>

		<summary type="html">&lt;p&gt;Dragon9786: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;*[[CSC/ECE 517 Fall 2010/ch1 1a vc]]&lt;br /&gt;
&lt;br /&gt;
*[[CSC/ECE 517 Fall 2010/ch1 1a br]]&lt;br /&gt;
&lt;br /&gt;
*[[CSC/ECE 517 Fall 2010/ch1 1b mg]]&lt;br /&gt;
&lt;br /&gt;
*[[CSC/ECE 517 Fall 2010/ch1 1c JF]]&lt;br /&gt;
&lt;br /&gt;
*[[CSC/ECE 517 Fall 2010/ch1 1e az]]&lt;br /&gt;
&lt;br /&gt;
*[[CSC/ECE 517 Fall 2010/ch1 1e bb]]&lt;br /&gt;
&lt;br /&gt;
*[[CSC/ECE 517 Fall 2010/ch1 1f vn]]&lt;br /&gt;
&lt;br /&gt;
*[[CSC/ECE 517 Fall 2010/ch1 25 ag]]&lt;br /&gt;
&lt;br /&gt;
*[[CSC/ECE 517 Fall 2010/ch2 2b dg]]&lt;br /&gt;
&lt;br /&gt;
*[[CSC/ECE 517 Fall 2010/ch1 2e RI]]&lt;br /&gt;
&lt;br /&gt;
*[[CSC/ECE 517 Fall 2010/ch1 S6 aa]]&lt;br /&gt;
&lt;br /&gt;
*[[CSC/ECE 517 Fall 2010/ch1 S6 km]]&lt;br /&gt;
&lt;br /&gt;
*[[CSC/ECE 517 Fall 2010/ch1 S10 GP]]&lt;br /&gt;
&lt;br /&gt;
*[[CSC/ECE 517 Fall 2010/ch1 S10 MS]]&lt;br /&gt;
&lt;br /&gt;
*[[CSC/ECE 517 Fall 2010/ch1 S10 MM]]&lt;br /&gt;
&lt;br /&gt;
*[[CSC/ECE 517 Fall 2010/ch1 S10 PH]]&lt;br /&gt;
&lt;br /&gt;
*[[CSC/ECE 517 Fall 2010/ch2 2a CB]]&lt;br /&gt;
&lt;br /&gt;
*[[CSC/ECE 517 Fall 2010/ch2 2a mw]]&lt;br /&gt;
&lt;br /&gt;
*[[CSC/ECE 517 Fall 2010/ch2 2c ck]]&lt;br /&gt;
&lt;br /&gt;
*[[CSC/ECE 517 Fall 2010/ch2 S23 GP]]&lt;br /&gt;
&lt;br /&gt;
*[[CSC/ECE 517 Fall 2010/ch2 S24 NS]]&lt;br /&gt;
&lt;br /&gt;
*[[CSC/ECE 517 Fall 2010/ch2 S23 SS]]&lt;br /&gt;
&lt;br /&gt;
*[[CSC/ECE 517 Fall 2010/ch2 S23 NR]]&lt;br /&gt;
&lt;br /&gt;
*[[CSC/ECE 517 Fall 2010/ch2 S20 TT]]&lt;br /&gt;
&lt;br /&gt;
*[[CSC/ECE 517 Fall 2010/ch2 2d AS]]&lt;br /&gt;
&lt;br /&gt;
*[[CSC/ECE 517 Fall 2010/ch2 S24 rm]]&lt;br /&gt;
&lt;br /&gt;
*[[CSC/ECE 517 Fall 2010/ch3 3a SN]]&lt;br /&gt;
&lt;br /&gt;
*[[CSC/ECE 517 Fall 2010/ch3 3b ka]]&lt;br /&gt;
&lt;br /&gt;
*[[CSC/ECE 517 Fall 2010/ch3 3e br]]&lt;br /&gt;
&lt;br /&gt;
*[[CSC/ECE 517 Fall 2010/ch3 3f lj]]&lt;br /&gt;
&lt;br /&gt;
*[[CSC/ECE 517 Fall 2010/ch3 3h az]]&lt;br /&gt;
&lt;br /&gt;
*[[CSC/ECE 517 Fall 2010/ch3 3h PW]]&lt;br /&gt;
&lt;br /&gt;
*[[CSC/ECE 517 Fall 2010/ch3 3i IC]]&lt;br /&gt;
&lt;br /&gt;
*[[CSC/ECE 517 Fall 2010/ch3 3i MM]]&lt;br /&gt;
&lt;br /&gt;
*[[CSC/ECE 517 Fall 2010/ch3 3j KS]]&lt;br /&gt;
&lt;br /&gt;
*[[CSC/ECE 517 Fall 2010/ch3 S30 SK]]&lt;br /&gt;
&lt;br /&gt;
*[[CSC/ECE 517 Fall 2010/ch3 4b mt]]&lt;br /&gt;
&lt;br /&gt;
*[[CSC/ECE 517 Fall 2010/ch4 4e ms]]&lt;br /&gt;
&lt;br /&gt;
*[[CSC/ECE 517 Fall 2010/ch4 4f sv]]&lt;br /&gt;
&lt;br /&gt;
*[[CSC/ECE 517 Fall 2010/ch4 4g HW]]&lt;br /&gt;
&lt;br /&gt;
*[[CSC/ECE 517 Fall 2010/ch4 4g km]]&lt;br /&gt;
&lt;br /&gt;
*[[CSC/ECE 517 Fall 2010/ch4 4h am]]&lt;br /&gt;
&lt;br /&gt;
*[[CSC/ECE 517 Fall 2010/ch5 5b mt]]&lt;br /&gt;
&lt;br /&gt;
*[[CSC/ECE 517 Fall 2010/ch5 5b jz]]&lt;br /&gt;
&lt;br /&gt;
*[[CSC/ECE 517 Fall 2010/ch5 5c ck]]&lt;br /&gt;
&lt;br /&gt;
*[[CSC/ECE 517 Fall 2010/ch5 5c IC]]&lt;br /&gt;
&lt;br /&gt;
*[[CSC/ECE 517 Fall 2010/ch5 5f SN]]&lt;br /&gt;
&lt;br /&gt;
*[[CSC/ECE 517 Fall 2010/ch5 5a KR]]&lt;br /&gt;
&lt;br /&gt;
*[[CSC/ECE 517 Fall 2010/ch5 5b RR]]&lt;br /&gt;
&lt;br /&gt;
*[[CSC/ECE 517 Fall 2010/ch5 5e ms]]&lt;br /&gt;
&lt;br /&gt;
*[[CSC/ECE 517 Fall 2010/chd 6d isb]]&lt;br /&gt;
&lt;br /&gt;
*[[CSC/ECE 517 Fall 2010/ch6 6b SK]]&lt;br /&gt;
&lt;br /&gt;
*[[CSC/ECE 517 Fall 2010/ch6 6c AW]]&lt;br /&gt;
&lt;br /&gt;
*[[CSC/ECE 517 Fall 2010/ch6 6d bb]]&lt;br /&gt;
&lt;br /&gt;
*[[CSC/ECE 517 Fall 2010/ch6 6h AS]]&lt;br /&gt;
&lt;br /&gt;
*[[CSC/ECE 517 Fall 2010/ch6 6f AZ]]&lt;br /&gt;
&lt;br /&gt;
*[[CSC/ECE 517 Fall 2010/ch6 6b AK]]&lt;br /&gt;
&lt;br /&gt;
*[[CSC/ECE 517 Fall 2010/ch6 6g ss]]&lt;br /&gt;
&lt;br /&gt;
*[[CSC/ECE 517 Fall 2010/ch6 6d NM]]&lt;br /&gt;
&lt;br /&gt;
*[[ CSC/ECE 517 Fall 2010/ch6 6a PC]]&lt;br /&gt;
&lt;br /&gt;
*[[ CSC/ECE 517 Fall 2010/ch2 4d RB]]&lt;br /&gt;
&lt;br /&gt;
*[[ CSC/ECE 517 Fall 2010/ch7 7e GP]]&lt;br /&gt;
&lt;br /&gt;
*[[ CSC/ECE 517 Fall 2010/ch7 7e GS]]&lt;br /&gt;
&lt;br /&gt;
*[[ CSC/ECE 517 Fall 2010/ch7 7f PW]]&lt;br /&gt;
&lt;br /&gt;
*[[ CSC/ECE 517 Fall 2010/ch7 7g ms]]&lt;/div&gt;</summary>
		<author><name>Dragon9786</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch1_2b_dg&amp;diff=36105</id>
		<title>CSC/ECE 517 Fall 2010/ch1 2b dg</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch1_2b_dg&amp;diff=36105"/>
		<updated>2010-09-22T17:49:00Z</updated>

		<summary type="html">&lt;p&gt;Dragon9786: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&amp;lt;b&amp;gt; CRC Cards &amp;lt;/b&amp;gt; also known as [http://en.wikipedia.org/wiki/Class-responsibility-collaboration_card &amp;lt;b&amp;gt; Class-Responsibility-Collaboration &amp;lt;sup&amp;gt;&amp;lt;/sup&amp;gt;&amp;lt;/b&amp;gt;] cards are a brainstorming tool to enable collaboration across different teams or individuals in contribution to design, usually used in Object Oriented Software development. This was  proposed by &amp;lt;b&amp;gt;Ward Cunningham&amp;lt;/b&amp;gt; and &amp;lt;b&amp;gt;Kent Beck&amp;lt;/b&amp;gt;&amp;lt;sup&amp;gt;[http://c2.com/doc/oopsla89/paper.html]&amp;lt;/sup&amp;gt;. The CRC card can be viewed as an index card, with the following details:&lt;br /&gt;
[[Image:crc-card.gif|frame|right|CRC Card Structure]]&lt;br /&gt;
&lt;br /&gt;
:* The Top of the card usually bears the name of the class.&lt;br /&gt;
:* The Left side of the card has the responsibilities of the class.&lt;br /&gt;
:* The Right side of the card has the collaborating classes corresponding to each of the responsibilities listed in the left side.&lt;br /&gt;
&lt;br /&gt;
Thus in general, a CRC session can be viewed as the interaction between a set of collaborating classes for a particular [http://en.wikipedia.org/wiki/Use_case Use case]. &amp;lt;br&amp;gt; &amp;lt;br&amp;gt; According to &amp;lt;sup&amp;gt;[http://www.extremeprogramming.org/rules/crccards.html]&amp;lt;/sup&amp;gt;&amp;lt;i&amp;gt;A CRC session proceeds with someone simulating the system by talking about which objects send messages to other objects. By stepping through the process weaknesses and problems are easily uncovered. Design alternatives can be explored quickly by simulating the design being proposed.&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===A CRC Example===&lt;br /&gt;
To better understand how the CRC cards work together, let us consider a simple student enrollment problem,where we are required to model the students enrolled in different courses. We can easily define the &amp;lt;b&amp;gt;Student CRC Card&amp;lt;/b&amp;gt; as having attributes such as student name, student id and responsibilities that enable a student to enroll in a course or drop the course. In this particular instance, the collaborating class would be the &amp;lt;b&amp;gt;Course&amp;lt;/b&amp;gt; class. The &amp;lt;b&amp;gt;Course CRC Card&amp;lt;/b&amp;gt; can in turn be visualized as having its own responsibilities, such as having attributes like Course Id, course name and the collaborating class would be the &amp;lt;b&amp;gt;Instructor &lt;br /&gt;
class&amp;lt;/b&amp;gt;. The CRC cards for the Student class and the Course Class are shown below.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Image:Stud_enr_Crc.jpg|frame|center|Student and Course CRC Card]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
There are also several practical designs that use the CRC card model to design Object oriented software design. The  [http://www.extremeprogramming.org/example/crcsim.html Simulator for Coffee Maker] explores an [http://en.wikipedia.org/wiki/Extreme_Programming Extreme Programming] approach combined with CRC card technique to come up with a design for the coffee maker.&lt;br /&gt;
&lt;br /&gt;
Another interesting approach using CRC cards explores a design for the [http://www.math-cs.gordon.edu/courses/cps211/ATMExample/CRCCards.html ATM Machine]&lt;br /&gt;
&lt;br /&gt;
===Advantages of CRC cards===&lt;br /&gt;
There are quite a few advantages of CRC cards that make it a preferable model in many designs. Some of the advantages of the CRC card design method are&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
:* CRC cards can allow designers to easily make audience understand a very complex system. In essence it allows for building more complex designs by slowly building the interactions between the collaborating classes, one by one.&lt;br /&gt;
:* CRC cards are a simple technique and it can be easily used by anyone with very little training and does not require any expensive computing resources(a board or a paper and a pen would suffice).&lt;br /&gt;
:* CRC is fundamentally a brainstorming tool, enabling different people in a team to come up with the design by collaborating, enabling everyone in the team to contribute&lt;br /&gt;
:* CRC can be used with other formal object oriented design methodologies such as [http://en.wikipedia.org/wiki/Extreme_Programming Extreme Programming] (an [http://en.wikipedia.org/wiki/Agile_Modeling Agile] development Technique) and can be used along with modelling languages such as [http://en.wikipedia.org/wiki/Unified_Modeling_Language Unified Modeling Language(UML)]&lt;br /&gt;
&lt;br /&gt;
==Why need a Software for CRC Cards==&lt;br /&gt;
CRC cards are limited by their scope. If we go about designing a huge project, the scope spans many classes and interactions between them. The tedious task of maintaining are CRC cards and to properly formulate interaction can get overwhelming. &lt;br /&gt;
Following reasons propel use for software for CRC Cards :&lt;br /&gt;
:* &amp;lt;b&amp;gt;Designing Scenario:&amp;lt;/b&amp;gt;  A scenario represents series of steps in which classes and objects communicate. There are be references to other cards or scenarios. &lt;br /&gt;
:* &amp;lt;b&amp;gt;Modeling :&amp;lt;/b&amp;gt;  Software provide an easy way to segregate cards and objects into different diagrams. Thus we can model our software with different functionality very easily.&lt;br /&gt;
:* &amp;lt;b&amp;gt;Simulation :&amp;lt;/b&amp;gt; Software can provides simulation of an software design. This might include single stepping backwards, forwards a scenario or jumping to a specific location in the scenario stack of a multiple scenario simulation&lt;br /&gt;
:* &amp;lt;b&amp;gt;Synchronization and Dependencies:&amp;lt;/b&amp;gt; Software can maintain relationships between cards, scenarios as design changes take place. If a card references other cards or classes, those cards are generated automatically. Also any name changes and cross references between objects are instantly updated. &lt;br /&gt;
:* &amp;lt;b&amp;gt;Revision history and Version Control :&amp;lt;/b&amp;gt; Software for CRC cards supports changes to CRC cards. It is easy to model and keep track of all changes to a CRC cards. This is extremely helpful in realizing the design changes to CRC cards.&lt;br /&gt;
&lt;br /&gt;
==Desining Software==&lt;br /&gt;
The following steps proceed while designing Software for CRC cards:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Create CRC Cards&amp;lt;/b&amp;gt;&lt;br /&gt;
A CRC model is usually created by an individual or small group of designers during the early phase of an object-oriented development project.The figure shows the design of hierarchy of classes. These set of class used for drawing objects are shown. We can see TShape class has a superclass called TObject and two subclasses, TBox and TCircle. Lets assume we create new class TWindow derived from the superclass TObject.  [[Image:Design.png|thumb|Description]]&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Assign Responsibilities&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Once a set of classes are defined, behaviors can be assigned that will provide the functions of the application. For example, the TShape card has responsibilities Initialize to create it and Draw to illustrate it on the diagram.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Add Attributes&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Attributes of classes may also be identified in a CRC Card.The TShape class has attributes fPosition, fType and&lt;br /&gt;
fSelected.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Define and simulate Scenario&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A scenario describes a sequence of steps in the design using the responsibilities of a group of collaborating&lt;br /&gt;
classes. Collaboration between classes refers to a client object that uses a responsibility performed&lt;br /&gt;
by a server object. Often a class must call upon several collaborating classes to implement one of its&lt;br /&gt;
responsibilities.A scenario describes what happens in the system from a high-level, user point of view.&lt;br /&gt;
[[Image:Scenario.png|thumb|Description]]&lt;br /&gt;
Consider situation to the right. We have defined two CRC cards with their responsibility. A scenario deinfes several steps. Each step in a scenario has a Client, Server and Responsibility field. For each step,&lt;br /&gt;
a client class uses a responsibility of a server class&lt;br /&gt;
&lt;br /&gt;
The Open Document scenario in the picture references the Initialize Document subscenario&lt;br /&gt;
by specifying its server class Document in the server field and its scenario name in the Responsibility field.&lt;br /&gt;
The first step in the Initialize Document subscenario uses Document as the server class name.&lt;br /&gt;
&lt;br /&gt;
By single stepping forwards, backwards or through each subscenario, bugs in the design can be identified and corrected early.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Partition the Design&amp;lt;/b&amp;gt;&lt;br /&gt;
As the number of CRC cards in the design grows, they can be grouped by function. Using Software for CRC cards,&lt;br /&gt;
separate diagrams are used to partition the model into different subject areas. &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Inheritance Graph&amp;lt;/b&amp;gt;&lt;br /&gt;
An automated tool can generate an inheritance graph from information on CRC cards. This diagram can&lt;br /&gt;
concisely illustrate the big picture of a large project that might contain hundreds of classes and dozens of diagrams.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Verify Your Work &amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Creating and simulating scenarios will help verify that a design is correct and complete. A CRC software&lt;br /&gt;
can perform other error checks to locate design problems.&lt;br /&gt;
For example, responsibilities that are not used in any scenarios may indicate that the design is incomplete&lt;br /&gt;
or perhaps the responsibility isn't needed.Likewise, a card that is not used by any collaboration&lt;br /&gt;
may not be needed.&lt;br /&gt;
&lt;br /&gt;
==Summary==&lt;br /&gt;
Software for CRC cards are immensely helpful in designing and modeling Software development using CRC cards.As the size of object-oriented system grow, it becomes increasingly difficult to model the problem with index based CRC cards. Thus an automated tool is required to maintain design and clear functionality.&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Unified_Modeling_Language Unified Modeling Language(UML)]&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Agile_Modeling Agile Modelling]&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Extreme_Programming Extreme Programming]&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
[1] A Laboratory For Teaching Object-Oriented Thinking: [http://c2.com/doc/oopsla89/paper.html http://c2.com/doc/oopsla89/paper.html]&lt;br /&gt;
&lt;br /&gt;
[2] CRC Cards: [http://www.extremeprogramming.org/rules/crccards.html http://www.extremeprogramming.org/rules/crccards.html]&lt;br /&gt;
&lt;br /&gt;
[3] [http://www.extremeprogramming.org/example/crcsim.html A Simulator for Coffee Maker]&lt;br /&gt;
&lt;br /&gt;
[4] [http://www.math-cs.gordon.edu/courses/cps211/ATMExample/CRCCards.html CRC Card for ATM]&lt;br /&gt;
&lt;br /&gt;
==External Links==&lt;br /&gt;
* [http://c2.com/doc/oopsla89/paper.html A Laboratory For Teaching Object-Oriented Thinking] by Ward Cunningham and Kent Beck&lt;br /&gt;
* [http://books.google.com/books?id=SGOyQai2TboC&amp;amp;printsec=frontcover&amp;amp;dq=CRC+card+book&amp;amp;hl=en&amp;amp;ei=xSOaTKSaNISclgfRqtkK&amp;amp;sa=X&amp;amp;oi=book_result&amp;amp;ct=result&amp;amp;resnum=1&amp;amp;ved=0CDYQ6AEwAA#v=onepage&amp;amp;q&amp;amp;f=false The CRC card book] by David Bellin, Susan Suchman Simone&lt;br /&gt;
&lt;br /&gt;
* [http://books.google.com/books?id=baopCOstm_kC&amp;amp;pg=PA29&amp;amp;lpg=PA29&amp;amp;dq=creating+software+for+CRC+cards&amp;amp;source=bl&amp;amp;ots=hABGQbbmXV&amp;amp;sig=CTHPtCN1GmZEyTAIPWvKE--8-M4&amp;amp;hl=en&amp;amp;ei=7ReaTISDKYL68Aadtq08&amp;amp;sa=X&amp;amp;oi=book_result&amp;amp;ct=result&amp;amp;resnum=9&amp;amp;ved=0CEsQ6AEwCDgK#v=onepage&amp;amp;q&amp;amp;f=false Using CRC Cards: An Informal Approach to Object-Oriented Development]&lt;br /&gt;
* [http://www.agilemodeling.com/artifacts/crcModel.htm Modelling CRC Cards]&lt;br /&gt;
* [http://www.excelsoftware.com/quickcrcwin.html Quick CRC]&lt;/div&gt;</summary>
		<author><name>Dragon9786</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch1_2b_dg&amp;diff=36104</id>
		<title>CSC/ECE 517 Fall 2010/ch1 2b dg</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch1_2b_dg&amp;diff=36104"/>
		<updated>2010-09-22T17:46:13Z</updated>

		<summary type="html">&lt;p&gt;Dragon9786: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&amp;lt;b&amp;gt; CRC Cards &amp;lt;/b&amp;gt; also known as [http://en.wikipedia.org/wiki/Class-responsibility-collaboration_card &amp;lt;b&amp;gt; Class-Responsibility-Collaboration &amp;lt;sup&amp;gt;&amp;lt;/sup&amp;gt;&amp;lt;/b&amp;gt;] cards are a brainstorming tool to enable collaboration across different teams or individuals in contribution to design, usually used in Object Oriented Software development. This was  proposed by &amp;lt;b&amp;gt;Ward Cunningham&amp;lt;/b&amp;gt; and &amp;lt;b&amp;gt;Kent Beck&amp;lt;/b&amp;gt;&amp;lt;sup&amp;gt;[http://c2.com/doc/oopsla89/paper.html]&amp;lt;/sup&amp;gt;. The CRC card can be viewed as an index card, with the following details:&lt;br /&gt;
[[Image:crc-card.gif|frame|right|CRC Card Structure]]&lt;br /&gt;
&lt;br /&gt;
:* The Top of the card usually bears the name of the class.&lt;br /&gt;
:* The Left side of the card has the responsibilities of the class.&lt;br /&gt;
:* The Right side of the card has the collaborating classes corresponding to each of the responsibilities listed in the left side.&lt;br /&gt;
&lt;br /&gt;
Thus in general, a CRC session can be viewed as the interaction between a set of collaborating classes for a particular [http://en.wikipedia.org/wiki/Use_case Use case]. &amp;lt;br&amp;gt; &amp;lt;br&amp;gt; According to &amp;lt;sup&amp;gt;[http://www.extremeprogramming.org/rules/crccards.html]&amp;lt;/sup&amp;gt;&amp;lt;i&amp;gt;A CRC session proceeds with someone simulating the system by talking about which objects send messages to other objects. By stepping through the process weaknesses and problems are easily uncovered. Design alternatives can be explored quickly by simulating the design being proposed.&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===A CRC Example===&lt;br /&gt;
To better understand how the CRC cards work together, let us consider a simple student enrollment problem,where we are required to model the students enrolled in different courses. We can easily define the &amp;lt;b&amp;gt;Student CRC Card&amp;lt;/b&amp;gt; as having attributes such as student name, student id and responsibilities that enable a student to enroll in a course or drop the course. In this particular instance, the collaborating class would be the &amp;lt;b&amp;gt;Course&amp;lt;/b&amp;gt; class. The &amp;lt;b&amp;gt;Course CRC Card&amp;lt;/b&amp;gt; can in turn be visualized as having its own responsibilities, such as having attributes like Course Id, course name and the collaborating class would be the &amp;lt;b&amp;gt;Instructor &lt;br /&gt;
class&amp;lt;/b&amp;gt;. The CRC cards for the Student class and the Course Class are shown below.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
There are also several practical designs that use the CRC card model to design Object oriented software design. The  [http://www.extremeprogramming.org/example/crcsim.html Simulator for Coffee Maker] explores an [http://en.wikipedia.org/wiki/Extreme_Programming Extreme Programming] approach combined with CRC card technique to come up with a design for the coffee maker.&lt;br /&gt;
&lt;br /&gt;
Another interesting approach using CRC cards explores a design for the [http://www.math-cs.gordon.edu/courses/cps211/ATMExample/CRCCards.html ATM Machine]&lt;br /&gt;
&lt;br /&gt;
===Advantages of CRC cards===&lt;br /&gt;
There are quite a few advantages of CRC cards that make it a preferable model in many designs. Some of the advantages of the CRC card design method are&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
:* CRC cards can allow designers to easily make audience understand a very complex system. In essence it allows for building more complex designs by slowly building the interactions between the collaborating classes, one by one.&lt;br /&gt;
:* CRC cards are a simple technique and it can be easily used by anyone with very little training and does not require any expensive computing resources(a board or a paper and a pen would suffice).&lt;br /&gt;
:* CRC is fundamentally a brainstorming tool, enabling different people in a team to come up with the design by collaborating, enabling everyone in the team to contribute&lt;br /&gt;
:* CRC can be used with other formal object oriented design methodologies such as [http://en.wikipedia.org/wiki/Extreme_Programming Extreme Programming] (an [http://en.wikipedia.org/wiki/Agile_Modeling Agile] development Technique) and can be used along with modelling languages such as [http://en.wikipedia.org/wiki/Unified_Modeling_Language Unified Modeling Language(UML)]&lt;br /&gt;
&lt;br /&gt;
==Why need a Software for CRC Cards==&lt;br /&gt;
CRC cards are limited by their scope. If we go about designing a huge project, the scope spans many classes and interactions between them. The tedious task of maintaining are CRC cards and to properly formulate interaction can get overwhelming. &lt;br /&gt;
Following reasons propel use for software for CRC Cards :&lt;br /&gt;
:* &amp;lt;b&amp;gt;Designing Scenario:&amp;lt;/b&amp;gt;  A scenario represents series of steps in which classes and objects communicate. There are be references to other cards or scenarios. &lt;br /&gt;
:* &amp;lt;b&amp;gt;Modeling :&amp;lt;/b&amp;gt;  Software provide an easy way to segregate cards and objects into different diagrams. Thus we can model our software with different functionality very easily.&lt;br /&gt;
:* &amp;lt;b&amp;gt;Simulation :&amp;lt;/b&amp;gt; Software can provides simulation of an software design. This might include single stepping backwards, forwards a scenario or jumping to a specific location in the scenario stack of a multiple scenario simulation&lt;br /&gt;
:* &amp;lt;b&amp;gt;Synchronization and Dependencies:&amp;lt;/b&amp;gt; Software can maintain relationships between cards, scenarios as design changes take place. If a card references other cards or classes, those cards are generated automatically. Also any name changes and cross references between objects are instantly updated. &lt;br /&gt;
:* &amp;lt;b&amp;gt;Revision history and Version Control :&amp;lt;/b&amp;gt; Software for CRC cards supports changes to CRC cards. It is easy to model and keep track of all changes to a CRC cards. This is extremely helpful in realizing the design changes to CRC cards.&lt;br /&gt;
&lt;br /&gt;
==Desining Software==&lt;br /&gt;
The following steps proceed while designing Software for CRC cards:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Create CRC Cards&amp;lt;/b&amp;gt;&lt;br /&gt;
A CRC model is usually created by an individual or small group of designers during the early phase of an object-oriented development project.The figure shows the design of hierarchy of classes. These set of class used for drawing objects are shown. We can see TShape class has a superclass called TObject and two subclasses, TBox and TCircle. Lets assume we create new class TWindow derived from the superclass TObject.  [[Image:Design.png|thumb|Description]]&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Assign Responsibilities&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Once a set of classes are defined, behaviors can be assigned that will provide the functions of the application. For example, the TShape card has responsibilities Initialize to create it and Draw to illustrate it on the diagram.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Add Attributes&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Attributes of classes may also be identified in a CRC Card.The TShape class has attributes fPosition, fType and&lt;br /&gt;
fSelected.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Define and simulate Scenario&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A scenario describes a sequence of steps in the design using the responsibilities of a group of collaborating&lt;br /&gt;
classes. Collaboration between classes refers to a client object that uses a responsibility performed&lt;br /&gt;
by a server object. Often a class must call upon several collaborating classes to implement one of its&lt;br /&gt;
responsibilities.A scenario describes what happens in the system from a high-level, user point of view.&lt;br /&gt;
[[Image:Scenario.png|thumb|Description]]&lt;br /&gt;
Consider situation to the right. We have defined two CRC cards with their responsibility. A scenario deinfes several steps. Each step in a scenario has a Client, Server and Responsibility field. For each step,&lt;br /&gt;
a client class uses a responsibility of a server class&lt;br /&gt;
&lt;br /&gt;
The Open Document scenario in the picture references the Initialize Document subscenario&lt;br /&gt;
by specifying its server class Document in the server field and its scenario name in the Responsibility field.&lt;br /&gt;
The first step in the Initialize Document subscenario uses Document as the server class name.&lt;br /&gt;
&lt;br /&gt;
By single stepping forwards, backwards or through each subscenario, bugs in the design can be identified and corrected early.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Partition the Design&amp;lt;/b&amp;gt;&lt;br /&gt;
As the number of CRC cards in the design grows, they can be grouped by function. Using Software for CRC cards,&lt;br /&gt;
separate diagrams are used to partition the model into different subject areas. &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Inheritance Graph&amp;lt;/b&amp;gt;&lt;br /&gt;
An automated tool can generate an inheritance graph from information on CRC cards. This diagram can&lt;br /&gt;
concisely illustrate the big picture of a large project that might contain hundreds of classes and dozens of diagrams.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Verify Your Work &amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Creating and simulating scenarios will help verify that a design is correct and complete. A CRC software&lt;br /&gt;
can perform other error checks to locate design problems.&lt;br /&gt;
For example, responsibilities that are not used in any scenarios may indicate that the design is incomplete&lt;br /&gt;
or perhaps the responsibility isn't needed.Likewise, a card that is not used by any collaboration&lt;br /&gt;
may not be needed.&lt;br /&gt;
&lt;br /&gt;
==Summary==&lt;br /&gt;
Software for CRC cards are immensely helpful in designing and modeling Software development using CRC cards.As the size of object-oriented system grow, it becomes increasingly difficult to model the problem with index based CRC cards. Thus an automated tool is required to maintain design and clear functionality.&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Unified_Modeling_Language Unified Modeling Language(UML)]&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Agile_Modeling Agile Modelling]&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Extreme_Programming Extreme Programming]&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
[1] A Laboratory For Teaching Object-Oriented Thinking: [http://c2.com/doc/oopsla89/paper.html http://c2.com/doc/oopsla89/paper.html]&lt;br /&gt;
&lt;br /&gt;
[2] CRC Cards: [http://www.extremeprogramming.org/rules/crccards.html http://www.extremeprogramming.org/rules/crccards.html]&lt;br /&gt;
&lt;br /&gt;
[3] [http://www.extremeprogramming.org/example/crcsim.html A Simulator for Coffee Maker]&lt;br /&gt;
&lt;br /&gt;
[4] [http://www.math-cs.gordon.edu/courses/cps211/ATMExample/CRCCards.html CRC Card for ATM]&lt;br /&gt;
&lt;br /&gt;
==External Links==&lt;br /&gt;
* [http://c2.com/doc/oopsla89/paper.html A Laboratory For Teaching Object-Oriented Thinking] by Ward Cunningham and Kent Beck&lt;br /&gt;
* [http://books.google.com/books?id=SGOyQai2TboC&amp;amp;printsec=frontcover&amp;amp;dq=CRC+card+book&amp;amp;hl=en&amp;amp;ei=xSOaTKSaNISclgfRqtkK&amp;amp;sa=X&amp;amp;oi=book_result&amp;amp;ct=result&amp;amp;resnum=1&amp;amp;ved=0CDYQ6AEwAA#v=onepage&amp;amp;q&amp;amp;f=false The CRC card book] by David Bellin, Susan Suchman Simone&lt;br /&gt;
&lt;br /&gt;
* [http://books.google.com/books?id=baopCOstm_kC&amp;amp;pg=PA29&amp;amp;lpg=PA29&amp;amp;dq=creating+software+for+CRC+cards&amp;amp;source=bl&amp;amp;ots=hABGQbbmXV&amp;amp;sig=CTHPtCN1GmZEyTAIPWvKE--8-M4&amp;amp;hl=en&amp;amp;ei=7ReaTISDKYL68Aadtq08&amp;amp;sa=X&amp;amp;oi=book_result&amp;amp;ct=result&amp;amp;resnum=9&amp;amp;ved=0CEsQ6AEwCDgK#v=onepage&amp;amp;q&amp;amp;f=false Using CRC Cards: An Informal Approach to Object-Oriented Development]&lt;br /&gt;
* [http://www.agilemodeling.com/artifacts/crcModel.htm Modelling CRC Cards]&lt;br /&gt;
* [http://www.excelsoftware.com/quickcrcwin.html Quick CRC]&lt;/div&gt;</summary>
		<author><name>Dragon9786</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch1_2b_dg&amp;diff=36103</id>
		<title>CSC/ECE 517 Fall 2010/ch1 2b dg</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch1_2b_dg&amp;diff=36103"/>
		<updated>2010-09-22T17:44:30Z</updated>

		<summary type="html">&lt;p&gt;Dragon9786: /* A CRC Example */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&amp;lt;b&amp;gt; CRC Cards &amp;lt;/b&amp;gt; also known as [http://en.wikipedia.org/wiki/Class-responsibility-collaboration_card &amp;lt;b&amp;gt; Class-Responsibility-Collaboration &amp;lt;sup&amp;gt;&amp;lt;/sup&amp;gt;&amp;lt;/b&amp;gt;] cards are a brainstorming tool to enable collaboration across different teams or individuals in contribution to design, usually used in Object Oriented Software development. This was  proposed by &amp;lt;b&amp;gt;Ward Cunningham&amp;lt;/b&amp;gt; and &amp;lt;b&amp;gt;Kent Beck&amp;lt;/b&amp;gt;&amp;lt;sup&amp;gt;[http://c2.com/doc/oopsla89/paper.html]&amp;lt;/sup&amp;gt;. The CRC card can be viewed as an index card, with the following details:&lt;br /&gt;
[[Image:crc-card.gif|frame|right|CRC Card Structure]]&lt;br /&gt;
&lt;br /&gt;
:* The Top of the card usually bears the name of the class.&lt;br /&gt;
:* The Left side of the card has the responsibilities of the class.&lt;br /&gt;
:* The Right side of the card has the collaborating classes corresponding to each of the responsibilities listed in the left side.&lt;br /&gt;
&lt;br /&gt;
Thus in general, a CRC session can be viewed as the interaction between a set of collaborating classes for a particular [http://en.wikipedia.org/wiki/Use_case Use case]. &amp;lt;br&amp;gt; &amp;lt;br&amp;gt; According to &amp;lt;sup&amp;gt;[http://www.extremeprogramming.org/rules/crccards.html]&amp;lt;/sup&amp;gt;&amp;lt;i&amp;gt;A CRC session proceeds with someone simulating the system by talking about which objects send messages to other objects. By stepping through the process weaknesses and problems are easily uncovered. Design alternatives can be explored quickly by simulating the design being proposed.&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===A CRC Example===&lt;br /&gt;
To better understand how the CRC cards work together, let us consider a simple student enrollment problem,where we are required to model the students enrolled in different courses. We can easily define the &amp;lt;b&amp;gt;Student CRC Card&amp;lt;/b&amp;gt; as having attributes such as student name, student id and responsibilities that enable a student to enroll in a course or drop the course. In this particular instance, the collaborating class would be the &amp;lt;b&amp;gt;Course&amp;lt;/b&amp;gt; class. The &amp;lt;b&amp;gt;Course CRC Card&amp;lt;/b&amp;gt; can in turn be visualized as having its own responsibilities, such as having attributes like Course Id, course name and the collaborating class would be the &amp;lt;b&amp;gt;Instructor &lt;br /&gt;
class&amp;lt;/b&amp;gt;. The CRC cards for the Student class and the Course Class are shown below.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Image:Stud_enr_Crc.jpg|frame|center|Student and Course CRC Cards]]&lt;br /&gt;
&lt;br /&gt;
There are also several practical designs that use the CRC card model to design Object oriented software design. The  [http://www.extremeprogramming.org/example/crcsim.html Simulator for Coffee Maker] explores an [http://en.wikipedia.org/wiki/Extreme_Programming Extreme Programming] approach combined with CRC card technique to come up with a design for the coffee maker.&lt;br /&gt;
&lt;br /&gt;
Another interesting approach using CRC cards explores a design for the [http://www.math-cs.gordon.edu/courses/cps211/ATMExample/CRCCards.html ATM Machine]&lt;br /&gt;
&lt;br /&gt;
===Advantages of CRC cards===&lt;br /&gt;
There are quite a few advantages of CRC cards that make it a preferable model in many designs. Some of the advantages of the CRC card design method are&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
:* CRC cards can allow designers to easily make audience understand a very complex system. In essence it allows for building more complex designs by slowly building the interactions between the collaborating classes, one by one.&lt;br /&gt;
:* CRC cards are a simple technique and it can be easily used by anyone with very little training and does not require any expensive computing resources(a board or a paper and a pen would suffice).&lt;br /&gt;
:* CRC is fundamentally a brainstorming tool, enabling different people in a team to come up with the design by collaborating, enabling everyone in the team to contribute&lt;br /&gt;
:* CRC can be used with other formal object oriented design methodologies such as [http://en.wikipedia.org/wiki/Extreme_Programming Extreme Programming] (an [http://en.wikipedia.org/wiki/Agile_Modeling Agile] development Technique) and can be used along with modelling languages such as [http://en.wikipedia.org/wiki/Unified_Modeling_Language Unified Modeling Language(UML)]&lt;br /&gt;
&lt;br /&gt;
==Why need a Software for CRC Cards==&lt;br /&gt;
CRC cards are limited by their scope. If we go about designing a huge project, the scope spans many classes and interactions between them. The tedious task of maintaining are CRC cards and to properly formulate interaction can get overwhelming. &lt;br /&gt;
Following reasons propel use for software for CRC Cards :&lt;br /&gt;
:* &amp;lt;b&amp;gt;Designing Scenario:&amp;lt;/b&amp;gt;  A scenario represents series of steps in which classes and objects communicate. There are be references to other cards or scenarios. &lt;br /&gt;
:* &amp;lt;b&amp;gt;Modeling :&amp;lt;/b&amp;gt;  Software provide an easy way to segregate cards and objects into different diagrams. Thus we can model our software with different functionality very easily.&lt;br /&gt;
:* &amp;lt;b&amp;gt;Simulation :&amp;lt;/b&amp;gt; Software can provides simulation of an software design. This might include single stepping backwards, forwards a scenario or jumping to a specific location in the scenario stack of a multiple scenario simulation&lt;br /&gt;
:* &amp;lt;b&amp;gt;Synchronization and Dependencies:&amp;lt;/b&amp;gt; Software can maintain relationships between cards, scenarios as design changes take place. If a card references other cards or classes, those cards are generated automatically. Also any name changes and cross references between objects are instantly updated. &lt;br /&gt;
:* &amp;lt;b&amp;gt;Revision history and Version Control :&amp;lt;/b&amp;gt; Software for CRC cards supports changes to CRC cards. It is easy to model and keep track of all changes to a CRC cards. This is extremely helpful in realizing the design changes to CRC cards.&lt;br /&gt;
&lt;br /&gt;
==Desining Software==&lt;br /&gt;
The following steps proceed while designing Software for CRC cards:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Create CRC Cards&amp;lt;/b&amp;gt;&lt;br /&gt;
A CRC model is usually created by an individual or small group of designers during the early phase of an object-oriented development project.The figure shows the design of hierarchy of classes. These set of class used for drawing objects are shown. We can see TShape class has a superclass called TObject and two subclasses, TBox and TCircle. Lets assume we create new class TWindow derived from the superclass TObject.  [[Image:Design.png|thumb|Description]]&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Assign Responsibilities&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Once a set of classes are defined, behaviors can be assigned that will provide the functions of the application. For example, the TShape card has responsibilities Initialize to create it and Draw to illustrate it on the diagram.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Add Attributes&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Attributes of classes may also be identified in a CRC Card.The TShape class has attributes fPosition, fType and&lt;br /&gt;
fSelected.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Define and simulate Scenario&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A scenario describes a sequence of steps in the design using the responsibilities of a group of collaborating&lt;br /&gt;
classes. Collaboration between classes refers to a client object that uses a responsibility performed&lt;br /&gt;
by a server object. Often a class must call upon several collaborating classes to implement one of its&lt;br /&gt;
responsibilities.A scenario describes what happens in the system from a high-level, user point of view.&lt;br /&gt;
[[Image:Scenario.png|thumb|Description]]&lt;br /&gt;
Consider situation to the right. We have defined two CRC cards with their responsibility. A scenario deinfes several steps. Each step in a scenario has a Client, Server and Responsibility field. For each step,&lt;br /&gt;
a client class uses a responsibility of a server class&lt;br /&gt;
&lt;br /&gt;
The Open Document scenario in the picture references the Initialize Document subscenario&lt;br /&gt;
by specifying its server class Document in the server field and its scenario name in the Responsibility field.&lt;br /&gt;
The first step in the Initialize Document subscenario uses Document as the server class name.&lt;br /&gt;
&lt;br /&gt;
By single stepping forwards, backwards or through each subscenario, bugs in the design can be identified and corrected early.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Partition the Design&amp;lt;/b&amp;gt;&lt;br /&gt;
As the number of CRC cards in the design grows, they can be grouped by function. Using Software for CRC cards,&lt;br /&gt;
separate diagrams are used to partition the model into different subject areas. &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Inheritance Graph&amp;lt;/b&amp;gt;&lt;br /&gt;
An automated tool can generate an inheritance graph from information on CRC cards. This diagram can&lt;br /&gt;
concisely illustrate the big picture of a large project that might contain hundreds of classes and dozens of diagrams.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Verify Your Work &amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Creating and simulating scenarios will help verify that a design is correct and complete. A CRC software&lt;br /&gt;
can perform other error checks to locate design problems.&lt;br /&gt;
For example, responsibilities that are not used in any scenarios may indicate that the design is incomplete&lt;br /&gt;
or perhaps the responsibility isn't needed.Likewise, a card that is not used by any collaboration&lt;br /&gt;
may not be needed.&lt;br /&gt;
&lt;br /&gt;
==Summary==&lt;br /&gt;
Software for CRC cards are immensely helpful in designing and modeling Software development using CRC cards.As the size of object-oriented system grow, it becomes increasingly difficult to model the problem with index based CRC cards. Thus an automated tool is required to maintain design and clear functionality.&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Unified_Modeling_Language Unified Modeling Language(UML)]&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Agile_Modeling Agile Modelling]&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Extreme_Programming Extreme Programming]&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
[1] A Laboratory For Teaching Object-Oriented Thinking: [http://c2.com/doc/oopsla89/paper.html http://c2.com/doc/oopsla89/paper.html]&lt;br /&gt;
&lt;br /&gt;
[2] CRC Cards: [http://www.extremeprogramming.org/rules/crccards.html http://www.extremeprogramming.org/rules/crccards.html]&lt;br /&gt;
&lt;br /&gt;
[3] [http://www.extremeprogramming.org/example/crcsim.html A Simulator for Coffee Maker]&lt;br /&gt;
&lt;br /&gt;
[4] [http://www.math-cs.gordon.edu/courses/cps211/ATMExample/CRCCards.html CRC Card for ATM]&lt;br /&gt;
&lt;br /&gt;
==External Links==&lt;br /&gt;
* [http://c2.com/doc/oopsla89/paper.html A Laboratory For Teaching Object-Oriented Thinking] by Ward Cunningham and Kent Beck&lt;br /&gt;
* [http://books.google.com/books?id=SGOyQai2TboC&amp;amp;printsec=frontcover&amp;amp;dq=CRC+card+book&amp;amp;hl=en&amp;amp;ei=xSOaTKSaNISclgfRqtkK&amp;amp;sa=X&amp;amp;oi=book_result&amp;amp;ct=result&amp;amp;resnum=1&amp;amp;ved=0CDYQ6AEwAA#v=onepage&amp;amp;q&amp;amp;f=false The CRC card book] by David Bellin, Susan Suchman Simone&lt;br /&gt;
&lt;br /&gt;
* [http://books.google.com/books?id=baopCOstm_kC&amp;amp;pg=PA29&amp;amp;lpg=PA29&amp;amp;dq=creating+software+for+CRC+cards&amp;amp;source=bl&amp;amp;ots=hABGQbbmXV&amp;amp;sig=CTHPtCN1GmZEyTAIPWvKE--8-M4&amp;amp;hl=en&amp;amp;ei=7ReaTISDKYL68Aadtq08&amp;amp;sa=X&amp;amp;oi=book_result&amp;amp;ct=result&amp;amp;resnum=9&amp;amp;ved=0CEsQ6AEwCDgK#v=onepage&amp;amp;q&amp;amp;f=false Using CRC Cards: An Informal Approach to Object-Oriented Development]&lt;br /&gt;
* [http://www.agilemodeling.com/artifacts/crcModel.htm Modelling CRC Cards]&lt;br /&gt;
* [http://www.excelsoftware.com/quickcrcwin.html Quick CRC]&lt;/div&gt;</summary>
		<author><name>Dragon9786</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Stud_enr_Crc.jpg&amp;diff=36101</id>
		<title>File:Stud enr Crc.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Stud_enr_Crc.jpg&amp;diff=36101"/>
		<updated>2010-09-22T17:38:44Z</updated>

		<summary type="html">&lt;p&gt;Dragon9786: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Dragon9786</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch1_2b_dg&amp;diff=36096</id>
		<title>CSC/ECE 517 Fall 2010/ch1 2b dg</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch1_2b_dg&amp;diff=36096"/>
		<updated>2010-09-22T17:27:12Z</updated>

		<summary type="html">&lt;p&gt;Dragon9786: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&amp;lt;b&amp;gt; CRC Cards &amp;lt;/b&amp;gt; also known as [http://en.wikipedia.org/wiki/Class-responsibility-collaboration_card &amp;lt;b&amp;gt; Class-Responsibility-Collaboration &amp;lt;sup&amp;gt;&amp;lt;/sup&amp;gt;&amp;lt;/b&amp;gt;] cards are a brainstorming tool to enable collaboration across different teams or individuals in contribution to design, usually used in Object Oriented Software development. This was  proposed by &amp;lt;b&amp;gt;Ward Cunningham&amp;lt;/b&amp;gt; and &amp;lt;b&amp;gt;Kent Beck&amp;lt;/b&amp;gt;&amp;lt;sup&amp;gt;[http://c2.com/doc/oopsla89/paper.html]&amp;lt;/sup&amp;gt;. The CRC card can be viewed as an index card, with the following details:&lt;br /&gt;
[[Image:crc-card.gif|frame|right|CRC Card Structure]]&lt;br /&gt;
&lt;br /&gt;
:* The Top of the card usually bears the name of the class.&lt;br /&gt;
:* The Left side of the card has the responsibilities of the class.&lt;br /&gt;
:* The Right side of the card has the collaborating classes corresponding to each of the responsibilities listed in the left side.&lt;br /&gt;
&lt;br /&gt;
Thus in general, a CRC session can be viewed as the interaction between a set of collaborating classes for a particular [http://en.wikipedia.org/wiki/Use_case Use case]. &amp;lt;br&amp;gt; &amp;lt;br&amp;gt; According to &amp;lt;sup&amp;gt;[http://www.extremeprogramming.org/rules/crccards.html]&amp;lt;/sup&amp;gt;&amp;lt;i&amp;gt;A CRC session proceeds with someone simulating the system by talking about which objects send messages to other objects. By stepping through the process weaknesses and problems are easily uncovered. Design alternatives can be explored quickly by simulating the design being proposed.&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===A CRC Example===&lt;br /&gt;
To better understand how the CRC cards work together, let us consider a simple student enrollment problem,where we are required to model the students enrolled in different courses. We can easily define the &amp;lt;b&amp;gt;Student CRC Card&amp;lt;/b&amp;gt; as having attributes such as student name, student id and responsibilities that enable a student to enroll in a course or drop the course. In this particular instance, the collaborating class would be the &amp;lt;b&amp;gt;Course&amp;lt;/b&amp;gt; class. The &amp;lt;b&amp;gt;Course CRC Card&amp;lt;/b&amp;gt; can in turn be visualized as having its own responsibilities, such as having attributes like Course Id, course name and the collaborating class would be the &amp;lt;b&amp;gt;Instructor &lt;br /&gt;
class&amp;lt;/b&amp;gt;. The CRC cards for the Student class and the Course Class are shown below.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
There are also several practical designs that use the CRC card model to design Object oriented software design. The  [http://www.extremeprogramming.org/example/crcsim.html Simulator for Coffee Maker] explores an [http://en.wikipedia.org/wiki/Extreme_Programming Extreme Programming] approach combined with CRC card technique to come up with a design for the coffee maker.&lt;br /&gt;
&lt;br /&gt;
Another interesting approach using CRC cards explores a design for the [http://www.math-cs.gordon.edu/courses/cps211/ATMExample/CRCCards.html ATM Machine]&lt;br /&gt;
&lt;br /&gt;
===Advantages of CRC cards===&lt;br /&gt;
There are quite a few advantages of CRC cards that make it a preferable model in many designs. Some of the advantages of the CRC card design method are&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
:* CRC cards can allow designers to easily make audience understand a very complex system. In essence it allows for building more complex designs by slowly building the interactions between the collaborating classes, one by one.&lt;br /&gt;
:* CRC cards are a simple technique and it can be easily used by anyone with very little training and does not require any expensive computing resources(a board or a paper and a pen would suffice).&lt;br /&gt;
:* CRC is fundamentally a brainstorming tool, enabling different people in a team to come up with the design by collaborating, enabling everyone in the team to contribute&lt;br /&gt;
:* CRC can be used with other formal object oriented design methodologies such as [http://en.wikipedia.org/wiki/Extreme_Programming Extreme Programming] (an [http://en.wikipedia.org/wiki/Agile_Modeling Agile] development Technique) and can be used along with modelling languages such as [http://en.wikipedia.org/wiki/Unified_Modeling_Language Unified Modeling Language(UML)]&lt;br /&gt;
&lt;br /&gt;
==Why need a Software for CRC Cards==&lt;br /&gt;
CRC cards are limited by their scope. If we go about designing a huge project, the scope spans many classes and interactions between them. The tedious task of maintaining are CRC cards and to properly formulate interaction can get overwhelming. &lt;br /&gt;
Following reasons propel use for software for CRC Cards :&lt;br /&gt;
:* &amp;lt;b&amp;gt;Designing Scenario:&amp;lt;/b&amp;gt;  A scenario represents series of steps in which classes and objects communicate. There are be references to other cards or scenarios. &lt;br /&gt;
:* &amp;lt;b&amp;gt;Modeling :&amp;lt;/b&amp;gt;  Software provide an easy way to segregate cards and objects into different diagrams. Thus we can model our software with different functionality very easily.&lt;br /&gt;
:* &amp;lt;b&amp;gt;Simulation :&amp;lt;/b&amp;gt; Software can provides simulation of an software design. This might include single stepping backwards, forwards a scenario or jumping to a specific location in the scenario stack of a multiple scenario simulation&lt;br /&gt;
:* &amp;lt;b&amp;gt;Synchronization and Dependencies:&amp;lt;/b&amp;gt; Software can maintain relationships between cards, scenarios as design changes take place. If a card references other cards or classes, those cards are generated automatically. Also any name changes and cross references between objects are instantly updated. &lt;br /&gt;
:* &amp;lt;b&amp;gt;Revision history and Version Control :&amp;lt;/b&amp;gt; Software for CRC cards supports changes to CRC cards. It is easy to model and keep track of all changes to a CRC cards. This is extremely helpful in realizing the design changes to CRC cards.&lt;br /&gt;
&lt;br /&gt;
==Desining Software==&lt;br /&gt;
The following steps proceed while designing Software for CRC cards:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Create CRC Cards&amp;lt;/b&amp;gt;&lt;br /&gt;
A CRC model is usually created by an individual or small group of designers during the early phase of an object-oriented development project.The figure shows the design of hierarchy of classes. These set of class used for drawing objects are shown. We can see TShape class has a superclass called TObject and two subclasses, TBox and TCircle. Lets assume we create new class TWindow derived from the superclass TObject.  [[Image:Design.png|thumb|Description]]&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Assign Responsibilities&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Once a set of classes are defined, behaviors can be assigned that will provide the functions of the application. For example, the TShape card has responsibilities Initialize to create it and Draw to illustrate it on the diagram.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Add Attributes&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Attributes of classes may also be identified in a CRC Card.The TShape class has attributes fPosition, fType and&lt;br /&gt;
fSelected.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Define and simulate Scenario&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A scenario describes a sequence of steps in the design using the responsibilities of a group of collaborating&lt;br /&gt;
classes. Collaboration between classes refers to a client object that uses a responsibility performed&lt;br /&gt;
by a server object. Often a class must call upon several collaborating classes to implement one of its&lt;br /&gt;
responsibilities.A scenario describes what happens in the system from a high-level, user point of view.&lt;br /&gt;
[[Image:Scenario.png|thumb|Description]]&lt;br /&gt;
Consider situation to the right. We have defined two CRC cards with their responsibility. A scenario deinfes several steps. Each step in a scenario has a Client, Server and Responsibility field. For each step,&lt;br /&gt;
a client class uses a responsibility of a server class&lt;br /&gt;
&lt;br /&gt;
The Open Document scenario in the picture references the Initialize Document subscenario&lt;br /&gt;
by specifying its server class Document in the server field and its scenario name in the Responsibility field.&lt;br /&gt;
The first step in the Initialize Document subscenario uses Document as the server class name.&lt;br /&gt;
&lt;br /&gt;
By single stepping forwards, backwards or through each subscenario, bugs in the design can be identified and corrected early.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Partition the Design&amp;lt;/b&amp;gt;&lt;br /&gt;
As the number of CRC cards in the design grows, they can be grouped by function. Using Software for CRC cards,&lt;br /&gt;
separate diagrams are used to partition the model into different subject areas. &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Inheritance Graph&amp;lt;/b&amp;gt;&lt;br /&gt;
An automated tool can generate an inheritance graph from information on CRC cards. This diagram can&lt;br /&gt;
concisely illustrate the big picture of a large project that might contain hundreds of classes and dozens of diagrams.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Verify Your Work &amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Creating and simulating scenarios will help verify that a design is correct and complete. A CRC software&lt;br /&gt;
can perform other error checks to locate design problems.&lt;br /&gt;
For example, responsibilities that are not used in any scenarios may indicate that the design is incomplete&lt;br /&gt;
or perhaps the responsibility isn't needed.Likewise, a card that is not used by any collaboration&lt;br /&gt;
may not be needed.&lt;br /&gt;
&lt;br /&gt;
==Summary==&lt;br /&gt;
Software for CRC cards are immensely helpful in designing and modeling Software development using CRC cards.As the size of object-oriented system grow, it becomes increasingly difficult to model the problem with index based CRC cards. Thus an automated tool is required to maintain design and clear functionality.&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Unified_Modeling_Language Unified Modeling Language(UML)]&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Agile_Modeling Agile Modelling]&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Extreme_Programming Extreme Programming]&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
[1] A Laboratory For Teaching Object-Oriented Thinking: [http://c2.com/doc/oopsla89/paper.html http://c2.com/doc/oopsla89/paper.html]&lt;br /&gt;
&lt;br /&gt;
[2] CRC Cards: [http://www.extremeprogramming.org/rules/crccards.html http://www.extremeprogramming.org/rules/crccards.html]&lt;br /&gt;
&lt;br /&gt;
[3] [http://www.extremeprogramming.org/example/crcsim.html A Simulator for Coffee Maker]&lt;br /&gt;
&lt;br /&gt;
[4] [http://www.math-cs.gordon.edu/courses/cps211/ATMExample/CRCCards.html CRC Card for ATM]&lt;br /&gt;
&lt;br /&gt;
==External Links==&lt;br /&gt;
* [http://c2.com/doc/oopsla89/paper.html A Laboratory For Teaching Object-Oriented Thinking] by Ward Cunningham and Kent Beck&lt;br /&gt;
* [http://books.google.com/books?id=SGOyQai2TboC&amp;amp;printsec=frontcover&amp;amp;dq=CRC+card+book&amp;amp;hl=en&amp;amp;ei=xSOaTKSaNISclgfRqtkK&amp;amp;sa=X&amp;amp;oi=book_result&amp;amp;ct=result&amp;amp;resnum=1&amp;amp;ved=0CDYQ6AEwAA#v=onepage&amp;amp;q&amp;amp;f=false The CRC card book] by David Bellin, Susan Suchman Simone&lt;br /&gt;
&lt;br /&gt;
* [http://books.google.com/books?id=baopCOstm_kC&amp;amp;pg=PA29&amp;amp;lpg=PA29&amp;amp;dq=creating+software+for+CRC+cards&amp;amp;source=bl&amp;amp;ots=hABGQbbmXV&amp;amp;sig=CTHPtCN1GmZEyTAIPWvKE--8-M4&amp;amp;hl=en&amp;amp;ei=7ReaTISDKYL68Aadtq08&amp;amp;sa=X&amp;amp;oi=book_result&amp;amp;ct=result&amp;amp;resnum=9&amp;amp;ved=0CEsQ6AEwCDgK#v=onepage&amp;amp;q&amp;amp;f=false Using CRC Cards: An Informal Approach to Object-Oriented Development]&lt;br /&gt;
* [http://www.agilemodeling.com/artifacts/crcModel.htm Modelling CRC Cards]&lt;br /&gt;
* [http://www.excelsoftware.com/quickcrcwin.html Quick CRC]&lt;/div&gt;</summary>
		<author><name>Dragon9786</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch1_2b_dg&amp;diff=36093</id>
		<title>CSC/ECE 517 Fall 2010/ch1 2b dg</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch1_2b_dg&amp;diff=36093"/>
		<updated>2010-09-22T17:23:48Z</updated>

		<summary type="html">&lt;p&gt;Dragon9786: /* A CRC Example */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&amp;lt;b&amp;gt; CRC Cards &amp;lt;/b&amp;gt; also known as [http://en.wikipedia.org/wiki/Class-responsibility-collaboration_card &amp;lt;b&amp;gt; Class-Responsibility-Collaboration &amp;lt;sup&amp;gt;&amp;lt;/sup&amp;gt;&amp;lt;/b&amp;gt;] cards are a brainstorming tool to enable collaboration across different teams or individuals in contribution to design, usually used in Object Oriented Software development. This was  proposed by &amp;lt;b&amp;gt;Ward Cunningham&amp;lt;/b&amp;gt; and &amp;lt;b&amp;gt;Kent Beck&amp;lt;/b&amp;gt;&amp;lt;sup&amp;gt;[http://c2.com/doc/oopsla89/paper.html]&amp;lt;/sup&amp;gt;. The CRC card can be viewed as an index card, with the following details:&lt;br /&gt;
[[Image:crc-card.gif|frame|right|CRC Card Structure]]&lt;br /&gt;
&lt;br /&gt;
:* The Top of the card usually bears the name of the class.&lt;br /&gt;
:* The Left side of the card has the responsibilities of the class.&lt;br /&gt;
:* The Right side of the card has the collaborating classes corresponding to each of the responsibilities listed in the left side.&lt;br /&gt;
&lt;br /&gt;
Thus in general, a CRC session can be viewed as the interaction between a set of collaborating classes for a particular [http://en.wikipedia.org/wiki/Use_case Use case]. &amp;lt;br&amp;gt; &amp;lt;br&amp;gt; According to &amp;lt;sup&amp;gt;[http://www.extremeprogramming.org/rules/crccards.html]&amp;lt;/sup&amp;gt;&amp;lt;i&amp;gt;A CRC session proceeds with someone simulating the system by talking about which objects send messages to other objects. By stepping through the process weaknesses and problems are easily uncovered. Design alternatives can be explored quickly by simulating the design being proposed.&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===A CRC Example===&lt;br /&gt;
To better understand how the CRC cards work together, let us consider a simple student enrollment problem,where we are required to model the students enrolled in different courses. We can easily define the &amp;lt;b&amp;gt;Student CRC Card&amp;lt;/b&amp;gt; as having attributes such as student name, student id and responsibilities that enable a student to enroll in a course or drop the course. In this particular instance, the collaborating class would be the &amp;lt;b&amp;gt;Course&amp;lt;/b&amp;gt; class. The &amp;lt;b&amp;gt;Course CRC Card&amp;lt;/b&amp;gt; can in turn be visualized as having its own responsibilities, such as having attributes like Course Id, course name and the collaborating class would be the &amp;lt;b&amp;gt;Instructor &lt;br /&gt;
class&amp;lt;/b&amp;gt;. The CRC cards for the Student class and the Course Class are shown below.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
There are also several practical designs that use the CRC card model to design Object oriented software design. The  [http://www.extremeprogramming.org/example/crcsim.html Simulator for Coffee Maker] explores an [http://en.wikipedia.org/wiki/Extreme_Programming Extreme Programming] approach combined with CRC card technique to come up with a design for the coffee maker.&lt;br /&gt;
&lt;br /&gt;
Another interesting approach using CRC cards explores a design for the [http://www.math-cs.gordon.edu/courses/cps211/ATMExample/CRCCards.html ATM Machine]&lt;br /&gt;
&lt;br /&gt;
===Advantages of CRC cards===&lt;br /&gt;
There are quite a few advantages of CRC cards that make it a preferable model in many designs. Some of the advantages of the CRC card design method are&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
:* CRC cards can allow designers to easily make audience understand a very complex system. In essence it allows for building more complex designs by slowly building the interactions between the collaborating classes, one by one.&lt;br /&gt;
:* CRC cards are a simple technique and it can be easily used by anyone with very little training and does not require any expensive computing resources(a board or a paper and a pen would suffice).&lt;br /&gt;
:* CRC is fundamentally a brainstorming tool, enabling different people in a team to come up with the design by collaborating, enabling everyone in the team to contribute&lt;br /&gt;
:* CRC can be used with other formal object oriented design methodologies such as [http://en.wikipedia.org/wiki/Extreme_Programming Extreme Programming] (an [http://en.wikipedia.org/wiki/Agile_Modeling Agile] development Technique) and can be used along with modelling languages such as [http://en.wikipedia.org/wiki/Unified_Modeling_Language Unified Modeling Language(UML)]&lt;br /&gt;
&lt;br /&gt;
==Why need a Software for CRC Cards==&lt;br /&gt;
CRC cards are limited by their scope. If we go about designing a huge project, the scope spans many classes and interactions between them. The tedious task of maintaining are CRC cards and to properly formulate interaction can get overwhelming. &lt;br /&gt;
Following reasons propel use for software for CRC Cards :&lt;br /&gt;
:* &amp;lt;b&amp;gt;Designing Scenario:&amp;lt;/b&amp;gt;  A scenario represents series of steps in which classes and objects communicate. There are be references to other cards or scenarios. &lt;br /&gt;
:* &amp;lt;b&amp;gt;Modeling :&amp;lt;/b&amp;gt;  Software provide an easy way to segregate cards and objects into different diagrams. Thus we can model our software with different functionality very easily.&lt;br /&gt;
:* &amp;lt;b&amp;gt;Simulation :&amp;lt;/b&amp;gt; Software can provides simulation of an software design. This might include single stepping backwards, forwards a scenario or jumping to a specific location in the scenario stack of a multiple scenario simulation&lt;br /&gt;
:* &amp;lt;b&amp;gt;Synchronization and Dependencies:&amp;lt;/b&amp;gt; Software can maintain relationships between cards, scenarios as design changes take place. If a card references other cards or classes, those cards are generated automatically. Also any name changes and cross references between objects are instantly updated. &lt;br /&gt;
:* &amp;lt;b&amp;gt;Revision history and Version Control :&amp;lt;/b&amp;gt; Software for CRC cards supports changes to CRC cards. It is easy to model and keep track of all changes to a CRC cards. This is extremely helpful in realizing the design changes to CRC cards.&lt;br /&gt;
&lt;br /&gt;
==Desining Software==&lt;br /&gt;
The following steps proceed while designing Software for CRC cards:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Create CRC Cards&amp;lt;/b&amp;gt;&lt;br /&gt;
A CRC model is usually created by an individual or small group of designers during the early phase of an object-oriented development project.The figure shows the design of hierarchy of classes. These set of class used for drawing objects are shown. We can see TShape class has a superclass called TObject and two subclasses, TBox and TCircle. Lets assume we create new class TWindow derived from the superclass TObject.  [[Image:Design.png|thumb|Description]]&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Assign Responsibilities&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Once a set of classes are defined, behaviors can be assigned that will provide the functions of the application. For example, the TShape card has responsibilities Initialize to create it and Draw to illustrate it on the diagram.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Add Attributes&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Attributes of classes may also be identified in a CRC Card.The TShape class has attributes fPosition, fType and&lt;br /&gt;
fSelected.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Define and simulate Scenario&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A scenario describes a sequence of steps in the design using the responsibilities of a group of collaborating&lt;br /&gt;
classes. Collaboration between classes refers to a client object that uses a responsibility performed&lt;br /&gt;
by a server object. Often a class must call upon several collaborating classes to implement one of its&lt;br /&gt;
responsibilities.A scenario describes what happens in the system from a high-level, user point of view.&lt;br /&gt;
[[Image:Scenario.png|thumb|Description]]&lt;br /&gt;
Consider situation to the right. We have defined two CRC cards with their responsibility. A scenario deinfes several steps. Each step in a scenario has a Client, Server and Responsibility field. For each step,&lt;br /&gt;
a client class uses a responsibility of a server class&lt;br /&gt;
&lt;br /&gt;
The Open Document scenario in the picture references the Initialize Document subscenario&lt;br /&gt;
by specifying its server class Document in the server field and its scenario name in the Responsibility field.&lt;br /&gt;
The first step in the Initialize Document subscenario uses Document as the server class name.&lt;br /&gt;
&lt;br /&gt;
By single stepping forwards, backwards or through each subscenario, bugs in the design can be identified and corrected early.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Partition the Design&amp;lt;/b&amp;gt;&lt;br /&gt;
As the number of CRC cards in the design grows, they can be grouped by function. Using Software for CRC cards,&lt;br /&gt;
separate diagrams are used to partition the model into different subject areas. &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Inheritance Graph&amp;lt;/b&amp;gt;&lt;br /&gt;
An automated tool can generate an inheritance graph from information on CRC cards. This diagram can&lt;br /&gt;
concisely illustrate the big picture of a large project that might contain hundreds of classes and dozens of diagrams.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Verify Your Work &amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Creating and simulating scenarios will help verify that a design is correct and complete. A CRC software&lt;br /&gt;
can perform other error checks to locate design problems.&lt;br /&gt;
For example, responsibilities that are not used in any scenarios may indicate that the design is incomplete&lt;br /&gt;
or perhaps the responsibility isn't needed.Likewise, a card that is not used by any collaboration&lt;br /&gt;
may not be needed.&lt;br /&gt;
&lt;br /&gt;
==Summary==&lt;br /&gt;
Software for CRC cards are immensely helpful in designing and modeling Software development using CRC cards.As the size of object-oriented system grow, it becomes increasingly difficult to model the problem with index based CRC cards. Thus an automated tool is required to maintain design and clear functionality.&lt;br /&gt;
==References==&lt;br /&gt;
[1] A Laboratory For Teaching Object-Oriented Thinking: [http://c2.com/doc/oopsla89/paper.html http://c2.com/doc/oopsla89/paper.html]&lt;br /&gt;
&lt;br /&gt;
[2] CRC Cards: [http://www.extremeprogramming.org/rules/crccards.html http://www.extremeprogramming.org/rules/crccards.html]&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Unified_Modeling_Language Unified Modeling Language(UML)]&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Agile_Modeling Agile Modelling]&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Extreme_Programming Extreme Programming]&lt;br /&gt;
&lt;br /&gt;
==External Links==&lt;br /&gt;
* [http://c2.com/doc/oopsla89/paper.html A Laboratory For Teaching Object-Oriented Thinking] by Ward Cunningham and Kent Beck&lt;br /&gt;
* [http://books.google.com/books?id=SGOyQai2TboC&amp;amp;printsec=frontcover&amp;amp;dq=CRC+card+book&amp;amp;hl=en&amp;amp;ei=xSOaTKSaNISclgfRqtkK&amp;amp;sa=X&amp;amp;oi=book_result&amp;amp;ct=result&amp;amp;resnum=1&amp;amp;ved=0CDYQ6AEwAA#v=onepage&amp;amp;q&amp;amp;f=false The CRC card book] by David Bellin, Susan Suchman Simone&lt;br /&gt;
&lt;br /&gt;
* [http://books.google.com/books?id=baopCOstm_kC&amp;amp;pg=PA29&amp;amp;lpg=PA29&amp;amp;dq=creating+software+for+CRC+cards&amp;amp;source=bl&amp;amp;ots=hABGQbbmXV&amp;amp;sig=CTHPtCN1GmZEyTAIPWvKE--8-M4&amp;amp;hl=en&amp;amp;ei=7ReaTISDKYL68Aadtq08&amp;amp;sa=X&amp;amp;oi=book_result&amp;amp;ct=result&amp;amp;resnum=9&amp;amp;ved=0CEsQ6AEwCDgK#v=onepage&amp;amp;q&amp;amp;f=false Using CRC Cards: An Informal Approach to Object-Oriented Development]&lt;br /&gt;
* [http://www.agilemodeling.com/artifacts/crcModel.htm Modelling CRC Cards]&lt;br /&gt;
* [http://www.excelsoftware.com/quickcrcwin.html Quick CRC]&lt;/div&gt;</summary>
		<author><name>Dragon9786</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch1_2b_dg&amp;diff=36082</id>
		<title>CSC/ECE 517 Fall 2010/ch1 2b dg</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch1_2b_dg&amp;diff=36082"/>
		<updated>2010-09-22T16:47:54Z</updated>

		<summary type="html">&lt;p&gt;Dragon9786: /* Advantages of CRC cards */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&amp;lt;b&amp;gt; CRC Cards &amp;lt;/b&amp;gt; also known as [http://en.wikipedia.org/wiki/Class-responsibility-collaboration_card &amp;lt;b&amp;gt; Class-Responsibility-Collaboration &amp;lt;sup&amp;gt;&amp;lt;/sup&amp;gt;&amp;lt;/b&amp;gt;] cards are a brainstorming tool to enable collaboration across different teams or individuals in contribution to design, usually used in Object Oriented Software development. This was  proposed by &amp;lt;b&amp;gt;Ward Cunningham&amp;lt;/b&amp;gt; and &amp;lt;b&amp;gt;Kent Beck&amp;lt;/b&amp;gt;&amp;lt;sup&amp;gt;[http://c2.com/doc/oopsla89/paper.html]&amp;lt;/sup&amp;gt;. The CRC card can be viewed as an index card, with the following details:&lt;br /&gt;
[[Image:crc-card.gif|frame|right|CRC Card Structure]]&lt;br /&gt;
&lt;br /&gt;
:* The Top of the card usually bears the name of the class.&lt;br /&gt;
:* The Left side of the card has the responsibilities of the class.&lt;br /&gt;
:* The Right side of the card has the collaborating classes corresponding to each of the responsibilities listed in the left side.&lt;br /&gt;
&lt;br /&gt;
Thus in general, a CRC session can be viewed as the interaction between a set of collaborating classes for a particular [http://en.wikipedia.org/wiki/Use_case Use case]. &amp;lt;br&amp;gt; &amp;lt;br&amp;gt; According to &amp;lt;sup&amp;gt;[http://www.extremeprogramming.org/rules/crccards.html]&amp;lt;/sup&amp;gt;&amp;lt;i&amp;gt;A CRC session proceeds with someone simulating the system by talking about which objects send messages to other objects. By stepping through the process weaknesses and problems are easily uncovered. Design alternatives can be explored quickly by simulating the design being proposed.&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===A CRC Example===&lt;br /&gt;
To better understand how the CRC cards work together, let us consider an example.&lt;br /&gt;
&lt;br /&gt;
===Advantages of CRC cards===&lt;br /&gt;
There are quite a few advantages of CRC cards that make it a preferable model in many designs. Some of the advantages of the CRC card design method are&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
:* CRC cards can allow designers to easily make audience understand a very complex system. In essence it allows for building more complex designs by slowly building the interactions between the collaborating classes, one by one.&lt;br /&gt;
:* CRC cards are a simple technique and it can be easily used by anyone with very little training and does not require any expensive computing resources(a board or a paper and a pen would suffice).&lt;br /&gt;
:* CRC is fundamentally a brainstorming tool, enabling different people in a team to come up with the design by collaborating, enabling everyone in the team to contribute&lt;br /&gt;
:* CRC can be used with other formal object oriented design methodologies such as [http://en.wikipedia.org/wiki/Extreme_Programming Extreme Programming] (an [http://en.wikipedia.org/wiki/Agile_Modeling Agile] development Technique) and can be used along with modelling languages such as [http://en.wikipedia.org/wiki/Unified_Modeling_Language Unified Modeling Language(UML)]&lt;br /&gt;
&lt;br /&gt;
==Why need a Software for CRC Cards==&lt;br /&gt;
CRC cards are limited by their scope. If we go about designing a huge project, the scope spans many classes and interactions between them. The tedious task of maintaining are CRC cards and to properly formulate interaction can get overwhelming. &lt;br /&gt;
Following reasons propel use for software for CRC Cards :&lt;br /&gt;
:* &amp;lt;b&amp;gt;Designing Scenario:&amp;lt;/b&amp;gt;  A scenario represents series of steps in which classes and objects communicate. There are be references to other cards or scenarios. &lt;br /&gt;
:* &amp;lt;b&amp;gt;Modeling :&amp;lt;/b&amp;gt;  Software provide an easy way to segregate cards and objects into different diagrams. Thus we can model our software with different functionality very easily.&lt;br /&gt;
:* &amp;lt;b&amp;gt;Simulation :&amp;lt;/b&amp;gt; Software can provides simulation of an software design. This might include single stepping backwards, forwards a scenario or jumping to a specific location in the scenario stack of a multiple scenario simulation&lt;br /&gt;
:* &amp;lt;b&amp;gt;Synchronization and Dependencies:&amp;lt;/b&amp;gt; Software can maintain relationships between cards, scenarios as design changes take place. If a card references other cards or classes, those cards are generated automatically. Also any name changes and cross references between objects are instantly updated. &lt;br /&gt;
:* &amp;lt;b&amp;gt;Revision history and Version Control :&amp;lt;/b&amp;gt; Software for CRC cards supports changes to CRC cards. It is easy to model and keep track of all changes to a CRC cards. This is extremely helpful in realizing the design changes to CRC cards.&lt;br /&gt;
&lt;br /&gt;
==Desining Software==&lt;br /&gt;
The following steps proceed while designing Software for CRC cards:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Create CRC Cards&amp;lt;/b&amp;gt;&lt;br /&gt;
A CRC model is usually created by an individual or small group of designers during the early phase of an object-oriented development project.The figure shows the design of hierarchy of classes. These set of class used for drawing objects are shown. We can see TShape class has a superclass called TObject and two subclasses, TBox and TCircle. Lets assume we create new class TWindow derived from the superclass TObject.  [[Image:Design.png|thumb|Description]]&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Assign Responsibilities&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Once a set of classes are defined, behaviors can be assigned that will provide the functions of the application. For example, the TShape card has responsibilities Initialize to create it and Draw to illustrate it on the diagram.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Add Attributes&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Attributes of classes may also be identified in a CRC Card.The TShape class has attributes fPosition, fType and&lt;br /&gt;
fSelected.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Define and simulate Scenario&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A scenario describes a sequence of steps in the design using the responsibilities of a group of collaborating&lt;br /&gt;
classes. Collaboration between classes refers to a client object that uses a responsibility performed&lt;br /&gt;
by a server object. Often a class must call upon several collaborating classes to implement one of its&lt;br /&gt;
responsibilities.A scenario describes what happens in the system from a high-level, user point of view.&lt;br /&gt;
[[Image:Scenario.png|thumb|Description]]&lt;br /&gt;
Consider situation to the right. We have defined two CRC cards with their responsibility. A scenario deinfes several steps. Each step in a scenario has a Client, Server and Responsibility field. For each step,&lt;br /&gt;
a client class uses a responsibility of a server class&lt;br /&gt;
&lt;br /&gt;
The Open Document scenario in the picture references the Initialize Document subscenario&lt;br /&gt;
by specifying its server class Document in the server field and its scenario name in the Responsibility field.&lt;br /&gt;
The first step in the Initialize Document subscenario uses Document as the server class name.&lt;br /&gt;
&lt;br /&gt;
By single stepping forwards, backwards or through each subscenario, bugs in the design can be identified and corrected early.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Partition the Design&amp;lt;/b&amp;gt;&lt;br /&gt;
As the number of CRC cards in the design grows, they can be grouped by function. Using Software for CRC cards,&lt;br /&gt;
separate diagrams are used to partition the model into different subject areas. &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Inheritance Graph&amp;lt;/b&amp;gt;&lt;br /&gt;
An automated tool can generate an inheritance graph from information on CRC cards. This diagram can&lt;br /&gt;
concisely illustrate the big picture of a large project that might contain hundreds of classes and dozens of diagrams.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Verify Your Work &amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Creating and simulating scenarios will help verify that a design is correct and complete. A CRC software&lt;br /&gt;
can perform other error checks to locate design problems.&lt;br /&gt;
For example, responsibilities that are not used in any scenarios may indicate that the design is incomplete&lt;br /&gt;
or perhaps the responsibility isn't needed.Likewise, a card that is not used by any collaboration&lt;br /&gt;
may not be needed.&lt;br /&gt;
&lt;br /&gt;
==Summary==&lt;br /&gt;
Software for CRC cards are immensely helpful in designing and modeling Software development using CRC cards.As the size of object-oriented system grow, it becomes increasingly difficult to model the problem with index based CRC cards. Thus an automated tool is required to maintain design and clear functionality.&lt;br /&gt;
==References==&lt;br /&gt;
[1] A Laboratory For Teaching Object-Oriented Thinking: [http://c2.com/doc/oopsla89/paper.html http://c2.com/doc/oopsla89/paper.html]&lt;br /&gt;
&lt;br /&gt;
[2] CRC Cards: [http://www.extremeprogramming.org/rules/crccards.html http://www.extremeprogramming.org/rules/crccards.html]&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Unified_Modeling_Language Unified Modeling Language(UML)]&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Agile_Modeling Agile Modelling]&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Extreme_Programming Extreme Programming]&lt;br /&gt;
&lt;br /&gt;
==External Links==&lt;br /&gt;
* [http://c2.com/doc/oopsla89/paper.html A Laboratory For Teaching Object-Oriented Thinking] by Ward Cunningham and Kent Beck&lt;br /&gt;
* [http://books.google.com/books?id=SGOyQai2TboC&amp;amp;printsec=frontcover&amp;amp;dq=CRC+card+book&amp;amp;hl=en&amp;amp;ei=xSOaTKSaNISclgfRqtkK&amp;amp;sa=X&amp;amp;oi=book_result&amp;amp;ct=result&amp;amp;resnum=1&amp;amp;ved=0CDYQ6AEwAA#v=onepage&amp;amp;q&amp;amp;f=false The CRC card book] by David Bellin, Susan Suchman Simone&lt;br /&gt;
&lt;br /&gt;
* [http://books.google.com/books?id=baopCOstm_kC&amp;amp;pg=PA29&amp;amp;lpg=PA29&amp;amp;dq=creating+software+for+CRC+cards&amp;amp;source=bl&amp;amp;ots=hABGQbbmXV&amp;amp;sig=CTHPtCN1GmZEyTAIPWvKE--8-M4&amp;amp;hl=en&amp;amp;ei=7ReaTISDKYL68Aadtq08&amp;amp;sa=X&amp;amp;oi=book_result&amp;amp;ct=result&amp;amp;resnum=9&amp;amp;ved=0CEsQ6AEwCDgK#v=onepage&amp;amp;q&amp;amp;f=false Using CRC Cards: An Informal Approach to Object-Oriented Development]&lt;br /&gt;
* [http://www.agilemodeling.com/artifacts/crcModel.htm Modelling CRC Cards]&lt;br /&gt;
* [http://www.excelsoftware.com/quickcrcwin.html Quick CRC]&lt;/div&gt;</summary>
		<author><name>Dragon9786</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch1_2b_dg&amp;diff=36081</id>
		<title>CSC/ECE 517 Fall 2010/ch1 2b dg</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch1_2b_dg&amp;diff=36081"/>
		<updated>2010-09-22T16:47:34Z</updated>

		<summary type="html">&lt;p&gt;Dragon9786: /* See Also */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&amp;lt;b&amp;gt; CRC Cards &amp;lt;/b&amp;gt; also known as [http://en.wikipedia.org/wiki/Class-responsibility-collaboration_card &amp;lt;b&amp;gt; Class-Responsibility-Collaboration &amp;lt;sup&amp;gt;&amp;lt;/sup&amp;gt;&amp;lt;/b&amp;gt;] cards are a brainstorming tool to enable collaboration across different teams or individuals in contribution to design, usually used in Object Oriented Software development. This was  proposed by &amp;lt;b&amp;gt;Ward Cunningham&amp;lt;/b&amp;gt; and &amp;lt;b&amp;gt;Kent Beck&amp;lt;/b&amp;gt;&amp;lt;sup&amp;gt;[http://c2.com/doc/oopsla89/paper.html]&amp;lt;/sup&amp;gt;. The CRC card can be viewed as an index card, with the following details:&lt;br /&gt;
[[Image:crc-card.gif|frame|right|CRC Card Structure]]&lt;br /&gt;
&lt;br /&gt;
:* The Top of the card usually bears the name of the class.&lt;br /&gt;
:* The Left side of the card has the responsibilities of the class.&lt;br /&gt;
:* The Right side of the card has the collaborating classes corresponding to each of the responsibilities listed in the left side.&lt;br /&gt;
&lt;br /&gt;
Thus in general, a CRC session can be viewed as the interaction between a set of collaborating classes for a particular [http://en.wikipedia.org/wiki/Use_case Use case]. &amp;lt;br&amp;gt; &amp;lt;br&amp;gt; According to &amp;lt;sup&amp;gt;[http://www.extremeprogramming.org/rules/crccards.html]&amp;lt;/sup&amp;gt;&amp;lt;i&amp;gt;A CRC session proceeds with someone simulating the system by talking about which objects send messages to other objects. By stepping through the process weaknesses and problems are easily uncovered. Design alternatives can be explored quickly by simulating the design being proposed.&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===A CRC Example===&lt;br /&gt;
To better understand how the CRC cards work together, let us consider an example.&lt;br /&gt;
&lt;br /&gt;
===Advantages of CRC cards===&lt;br /&gt;
There are quite a few advantages of CRC cards that make it a preferable model in many designs. Some of the advantages of the CRC card design method are&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
:* CRC cards can allow designers to easily make audience understand a very complex system. In essence it allows for building more complex designs by slowly building the interactions between the collaborating classes, one by one.&lt;br /&gt;
:* CRC cards are a simple technique and it can be easily used by anyone with very little training and does not require any expensive computing resources(a board or a paper and a pen would suffice).&lt;br /&gt;
:* CRC is fundamentally a brainstorming tool, enabling different people in a team to come up with the design by collaborating, enabling everyone in the team to contribute&lt;br /&gt;
:* CRC can be used with other formal object oriented design methodologies such as [http://en.wikipedia.org/wiki/Extreme_Programming Extreme Programming] (an [http://en.wikipedia.org/wiki/Agile_Modeling Agile] development Technique) and can be used along with modelling languages such as [http://en.wikipedia.org/wiki/Unified_Modeling_Language Unified Modelling Language(UML)]&lt;br /&gt;
&lt;br /&gt;
==Why need a Software for CRC Cards==&lt;br /&gt;
CRC cards are limited by their scope. If we go about designing a huge project, the scope spans many classes and interactions between them. The tedious task of maintaining are CRC cards and to properly formulate interaction can get overwhelming. &lt;br /&gt;
Following reasons propel use for software for CRC Cards :&lt;br /&gt;
:* &amp;lt;b&amp;gt;Designing Scenario:&amp;lt;/b&amp;gt;  A scenario represents series of steps in which classes and objects communicate. There are be references to other cards or scenarios. &lt;br /&gt;
:* &amp;lt;b&amp;gt;Modeling :&amp;lt;/b&amp;gt;  Software provide an easy way to segregate cards and objects into different diagrams. Thus we can model our software with different functionality very easily.&lt;br /&gt;
:* &amp;lt;b&amp;gt;Simulation :&amp;lt;/b&amp;gt; Software can provides simulation of an software design. This might include single stepping backwards, forwards a scenario or jumping to a specific location in the scenario stack of a multiple scenario simulation&lt;br /&gt;
:* &amp;lt;b&amp;gt;Synchronization and Dependencies:&amp;lt;/b&amp;gt; Software can maintain relationships between cards, scenarios as design changes take place. If a card references other cards or classes, those cards are generated automatically. Also any name changes and cross references between objects are instantly updated. &lt;br /&gt;
:* &amp;lt;b&amp;gt;Revision history and Version Control :&amp;lt;/b&amp;gt; Software for CRC cards supports changes to CRC cards. It is easy to model and keep track of all changes to a CRC cards. This is extremely helpful in realizing the design changes to CRC cards.&lt;br /&gt;
&lt;br /&gt;
==Desining Software==&lt;br /&gt;
The following steps proceed while designing Software for CRC cards:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Create CRC Cards&amp;lt;/b&amp;gt;&lt;br /&gt;
A CRC model is usually created by an individual or small group of designers during the early phase of an object-oriented development project.The figure shows the design of hierarchy of classes. These set of class used for drawing objects are shown. We can see TShape class has a superclass called TObject and two subclasses, TBox and TCircle. Lets assume we create new class TWindow derived from the superclass TObject.  [[Image:Design.png|thumb|Description]]&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Assign Responsibilities&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Once a set of classes are defined, behaviors can be assigned that will provide the functions of the application. For example, the TShape card has responsibilities Initialize to create it and Draw to illustrate it on the diagram.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Add Attributes&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Attributes of classes may also be identified in a CRC Card.The TShape class has attributes fPosition, fType and&lt;br /&gt;
fSelected.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Define and simulate Scenario&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A scenario describes a sequence of steps in the design using the responsibilities of a group of collaborating&lt;br /&gt;
classes. Collaboration between classes refers to a client object that uses a responsibility performed&lt;br /&gt;
by a server object. Often a class must call upon several collaborating classes to implement one of its&lt;br /&gt;
responsibilities.A scenario describes what happens in the system from a high-level, user point of view.&lt;br /&gt;
[[Image:Scenario.png|thumb|Description]]&lt;br /&gt;
Consider situation to the right. We have defined two CRC cards with their responsibility. A scenario deinfes several steps. Each step in a scenario has a Client, Server and Responsibility field. For each step,&lt;br /&gt;
a client class uses a responsibility of a server class&lt;br /&gt;
&lt;br /&gt;
The Open Document scenario in the picture references the Initialize Document subscenario&lt;br /&gt;
by specifying its server class Document in the server field and its scenario name in the Responsibility field.&lt;br /&gt;
The first step in the Initialize Document subscenario uses Document as the server class name.&lt;br /&gt;
&lt;br /&gt;
By single stepping forwards, backwards or through each subscenario, bugs in the design can be identified and corrected early.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Partition the Design&amp;lt;/b&amp;gt;&lt;br /&gt;
As the number of CRC cards in the design grows, they can be grouped by function. Using Software for CRC cards,&lt;br /&gt;
separate diagrams are used to partition the model into different subject areas. &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Inheritance Graph&amp;lt;/b&amp;gt;&lt;br /&gt;
An automated tool can generate an inheritance graph from information on CRC cards. This diagram can&lt;br /&gt;
concisely illustrate the big picture of a large project that might contain hundreds of classes and dozens of diagrams.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Verify Your Work &amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Creating and simulating scenarios will help verify that a design is correct and complete. A CRC software&lt;br /&gt;
can perform other error checks to locate design problems.&lt;br /&gt;
For example, responsibilities that are not used in any scenarios may indicate that the design is incomplete&lt;br /&gt;
or perhaps the responsibility isn't needed.Likewise, a card that is not used by any collaboration&lt;br /&gt;
may not be needed.&lt;br /&gt;
&lt;br /&gt;
==Summary==&lt;br /&gt;
Software for CRC cards are immensely helpful in designing and modeling Software development using CRC cards.As the size of object-oriented system grow, it becomes increasingly difficult to model the problem with index based CRC cards. Thus an automated tool is required to maintain design and clear functionality.&lt;br /&gt;
==References==&lt;br /&gt;
[1] A Laboratory For Teaching Object-Oriented Thinking: [http://c2.com/doc/oopsla89/paper.html http://c2.com/doc/oopsla89/paper.html]&lt;br /&gt;
&lt;br /&gt;
[2] CRC Cards: [http://www.extremeprogramming.org/rules/crccards.html http://www.extremeprogramming.org/rules/crccards.html]&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Unified_Modeling_Language Unified Modeling Language(UML)]&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Agile_Modeling Agile Modelling]&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Extreme_Programming Extreme Programming]&lt;br /&gt;
&lt;br /&gt;
==External Links==&lt;br /&gt;
* [http://c2.com/doc/oopsla89/paper.html A Laboratory For Teaching Object-Oriented Thinking] by Ward Cunningham and Kent Beck&lt;br /&gt;
* [http://books.google.com/books?id=SGOyQai2TboC&amp;amp;printsec=frontcover&amp;amp;dq=CRC+card+book&amp;amp;hl=en&amp;amp;ei=xSOaTKSaNISclgfRqtkK&amp;amp;sa=X&amp;amp;oi=book_result&amp;amp;ct=result&amp;amp;resnum=1&amp;amp;ved=0CDYQ6AEwAA#v=onepage&amp;amp;q&amp;amp;f=false The CRC card book] by David Bellin, Susan Suchman Simone&lt;br /&gt;
&lt;br /&gt;
* [http://books.google.com/books?id=baopCOstm_kC&amp;amp;pg=PA29&amp;amp;lpg=PA29&amp;amp;dq=creating+software+for+CRC+cards&amp;amp;source=bl&amp;amp;ots=hABGQbbmXV&amp;amp;sig=CTHPtCN1GmZEyTAIPWvKE--8-M4&amp;amp;hl=en&amp;amp;ei=7ReaTISDKYL68Aadtq08&amp;amp;sa=X&amp;amp;oi=book_result&amp;amp;ct=result&amp;amp;resnum=9&amp;amp;ved=0CEsQ6AEwCDgK#v=onepage&amp;amp;q&amp;amp;f=false Using CRC Cards: An Informal Approach to Object-Oriented Development]&lt;br /&gt;
* [http://www.agilemodeling.com/artifacts/crcModel.htm Modelling CRC Cards]&lt;br /&gt;
* [http://www.excelsoftware.com/quickcrcwin.html Quick CRC]&lt;/div&gt;</summary>
		<author><name>Dragon9786</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch1_2b_dg&amp;diff=36080</id>
		<title>CSC/ECE 517 Fall 2010/ch1 2b dg</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch1_2b_dg&amp;diff=36080"/>
		<updated>2010-09-22T16:44:13Z</updated>

		<summary type="html">&lt;p&gt;Dragon9786: /* Advantages of CRC cards */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&amp;lt;b&amp;gt; CRC Cards &amp;lt;/b&amp;gt; also known as [http://en.wikipedia.org/wiki/Class-responsibility-collaboration_card &amp;lt;b&amp;gt; Class-Responsibility-Collaboration &amp;lt;sup&amp;gt;&amp;lt;/sup&amp;gt;&amp;lt;/b&amp;gt;] cards are a brainstorming tool to enable collaboration across different teams or individuals in contribution to design, usually used in Object Oriented Software development. This was  proposed by &amp;lt;b&amp;gt;Ward Cunningham&amp;lt;/b&amp;gt; and &amp;lt;b&amp;gt;Kent Beck&amp;lt;/b&amp;gt;&amp;lt;sup&amp;gt;[http://c2.com/doc/oopsla89/paper.html]&amp;lt;/sup&amp;gt;. The CRC card can be viewed as an index card, with the following details:&lt;br /&gt;
[[Image:crc-card.gif|frame|right|CRC Card Structure]]&lt;br /&gt;
&lt;br /&gt;
:* The Top of the card usually bears the name of the class.&lt;br /&gt;
:* The Left side of the card has the responsibilities of the class.&lt;br /&gt;
:* The Right side of the card has the collaborating classes corresponding to each of the responsibilities listed in the left side.&lt;br /&gt;
&lt;br /&gt;
Thus in general, a CRC session can be viewed as the interaction between a set of collaborating classes for a particular [http://en.wikipedia.org/wiki/Use_case Use case]. &amp;lt;br&amp;gt; &amp;lt;br&amp;gt; According to &amp;lt;sup&amp;gt;[http://www.extremeprogramming.org/rules/crccards.html]&amp;lt;/sup&amp;gt;&amp;lt;i&amp;gt;A CRC session proceeds with someone simulating the system by talking about which objects send messages to other objects. By stepping through the process weaknesses and problems are easily uncovered. Design alternatives can be explored quickly by simulating the design being proposed.&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===A CRC Example===&lt;br /&gt;
To better understand how the CRC cards work together, let us consider an example.&lt;br /&gt;
&lt;br /&gt;
===Advantages of CRC cards===&lt;br /&gt;
There are quite a few advantages of CRC cards that make it a preferable model in many designs. Some of the advantages of the CRC card design method are&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
:* CRC cards can allow designers to easily make audience understand a very complex system. In essence it allows for building more complex designs by slowly building the interactions between the collaborating classes, one by one.&lt;br /&gt;
:* CRC cards are a simple technique and it can be easily used by anyone with very little training and does not require any expensive computing resources(a board or a paper and a pen would suffice).&lt;br /&gt;
:* CRC is fundamentally a brainstorming tool, enabling different people in a team to come up with the design by collaborating, enabling everyone in the team to contribute&lt;br /&gt;
:* CRC can be used with other formal object oriented design methodologies such as [http://en.wikipedia.org/wiki/Extreme_Programming Extreme Programming] (an [http://en.wikipedia.org/wiki/Agile_Modeling Agile] development Technique) and can be used along with modelling languages such as [http://en.wikipedia.org/wiki/Unified_Modeling_Language Unified Modelling Language(UML)]&lt;br /&gt;
&lt;br /&gt;
==Why need a Software for CRC Cards==&lt;br /&gt;
CRC cards are limited by their scope. If we go about designing a huge project, the scope spans many classes and interactions between them. The tedious task of maintaining are CRC cards and to properly formulate interaction can get overwhelming. &lt;br /&gt;
Following reasons propel use for software for CRC Cards :&lt;br /&gt;
:* &amp;lt;b&amp;gt;Designing Scenario:&amp;lt;/b&amp;gt;  A scenario represents series of steps in which classes and objects communicate. There are be references to other cards or scenarios. &lt;br /&gt;
:* &amp;lt;b&amp;gt;Modeling :&amp;lt;/b&amp;gt;  Software provide an easy way to segregate cards and objects into different diagrams. Thus we can model our software with different functionality very easily.&lt;br /&gt;
:* &amp;lt;b&amp;gt;Simulation :&amp;lt;/b&amp;gt; Software can provides simulation of an software design. This might include single stepping backwards, forwards a scenario or jumping to a specific location in the scenario stack of a multiple scenario simulation&lt;br /&gt;
:* &amp;lt;b&amp;gt;Synchronization and Dependencies:&amp;lt;/b&amp;gt; Software can maintain relationships between cards, scenarios as design changes take place. If a card references other cards or classes, those cards are generated automatically. Also any name changes and cross references between objects are instantly updated. &lt;br /&gt;
:* &amp;lt;b&amp;gt;Revision history and Version Control :&amp;lt;/b&amp;gt; Software for CRC cards supports changes to CRC cards. It is easy to model and keep track of all changes to a CRC cards. This is extremely helpful in realizing the design changes to CRC cards.&lt;br /&gt;
&lt;br /&gt;
==Desining Software==&lt;br /&gt;
The following steps proceed while designing Software for CRC cards:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Create CRC Cards&amp;lt;/b&amp;gt;&lt;br /&gt;
A CRC model is usually created by an individual or small group of designers during the early phase of an object-oriented development project.The figure shows the design of hierarchy of classes. These set of class used for drawing objects are shown. We can see TShape class has a superclass called TObject and two subclasses, TBox and TCircle. Lets assume we create new class TWindow derived from the superclass TObject.  [[Image:Design.png|thumb|Description]]&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Assign Responsibilities&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Once a set of classes are defined, behaviors can be assigned that will provide the functions of the application. For example, the TShape card has responsibilities Initialize to create it and Draw to illustrate it on the diagram.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Add Attributes&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Attributes of classes may also be identified in a CRC Card.The TShape class has attributes fPosition, fType and&lt;br /&gt;
fSelected.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Define and simulate Scenario&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A scenario describes a sequence of steps in the design using the responsibilities of a group of collaborating&lt;br /&gt;
classes. Collaboration between classes refers to a client object that uses a responsibility performed&lt;br /&gt;
by a server object. Often a class must call upon several collaborating classes to implement one of its&lt;br /&gt;
responsibilities.A scenario describes what happens in the system from a high-level, user point of view.&lt;br /&gt;
[[Image:Scenario.png|thumb|Description]]&lt;br /&gt;
Consider situation to the right. We have defined two CRC cards with their responsibility. A scenario deinfes several steps. Each step in a scenario has a Client, Server and Responsibility field. For each step,&lt;br /&gt;
a client class uses a responsibility of a server class&lt;br /&gt;
&lt;br /&gt;
The Open Document scenario in the picture references the Initialize Document subscenario&lt;br /&gt;
by specifying its server class Document in the server field and its scenario name in the Responsibility field.&lt;br /&gt;
The first step in the Initialize Document subscenario uses Document as the server class name.&lt;br /&gt;
&lt;br /&gt;
By single stepping forwards, backwards or through each subscenario, bugs in the design can be identified and corrected early.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Partition the Design&amp;lt;/b&amp;gt;&lt;br /&gt;
As the number of CRC cards in the design grows, they can be grouped by function. Using Software for CRC cards,&lt;br /&gt;
separate diagrams are used to partition the model into different subject areas. &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Inheritance Graph&amp;lt;/b&amp;gt;&lt;br /&gt;
An automated tool can generate an inheritance graph from information on CRC cards. This diagram can&lt;br /&gt;
concisely illustrate the big picture of a large project that might contain hundreds of classes and dozens of diagrams.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Verify Your Work &amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Creating and simulating scenarios will help verify that a design is correct and complete. A CRC software&lt;br /&gt;
can perform other error checks to locate design problems.&lt;br /&gt;
For example, responsibilities that are not used in any scenarios may indicate that the design is incomplete&lt;br /&gt;
or perhaps the responsibility isn't needed.Likewise, a card that is not used by any collaboration&lt;br /&gt;
may not be needed.&lt;br /&gt;
&lt;br /&gt;
==Summary==&lt;br /&gt;
Software for CRC cards are immensely helpful in designing and modeling Software development using CRC cards.As the size of object-oriented system grow, it becomes increasingly difficult to model the problem with index based CRC cards. Thus an automated tool is required to maintain design and clear functionality.&lt;br /&gt;
==References==&lt;br /&gt;
[1] A Laboratory For Teaching Object-Oriented Thinking: [http://c2.com/doc/oopsla89/paper.html http://c2.com/doc/oopsla89/paper.html]&lt;br /&gt;
&lt;br /&gt;
[2] CRC Cards: [http://www.extremeprogramming.org/rules/crccards.html http://www.extremeprogramming.org/rules/crccards.html]&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
&lt;br /&gt;
==External Links==&lt;br /&gt;
* [http://c2.com/doc/oopsla89/paper.html A Laboratory For Teaching Object-Oriented Thinking] by Ward Cunningham and Kent Beck&lt;br /&gt;
* [http://books.google.com/books?id=SGOyQai2TboC&amp;amp;printsec=frontcover&amp;amp;dq=CRC+card+book&amp;amp;hl=en&amp;amp;ei=xSOaTKSaNISclgfRqtkK&amp;amp;sa=X&amp;amp;oi=book_result&amp;amp;ct=result&amp;amp;resnum=1&amp;amp;ved=0CDYQ6AEwAA#v=onepage&amp;amp;q&amp;amp;f=false The CRC card book] by David Bellin, Susan Suchman Simone&lt;br /&gt;
&lt;br /&gt;
* [http://books.google.com/books?id=baopCOstm_kC&amp;amp;pg=PA29&amp;amp;lpg=PA29&amp;amp;dq=creating+software+for+CRC+cards&amp;amp;source=bl&amp;amp;ots=hABGQbbmXV&amp;amp;sig=CTHPtCN1GmZEyTAIPWvKE--8-M4&amp;amp;hl=en&amp;amp;ei=7ReaTISDKYL68Aadtq08&amp;amp;sa=X&amp;amp;oi=book_result&amp;amp;ct=result&amp;amp;resnum=9&amp;amp;ved=0CEsQ6AEwCDgK#v=onepage&amp;amp;q&amp;amp;f=false Using CRC Cards: An Informal Approach to Object-Oriented Development]&lt;br /&gt;
* [http://www.agilemodeling.com/artifacts/crcModel.htm Modelling CRC Cards]&lt;br /&gt;
* [http://www.excelsoftware.com/quickcrcwin.html Quick CRC]&lt;/div&gt;</summary>
		<author><name>Dragon9786</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch1_2b_dg&amp;diff=36079</id>
		<title>CSC/ECE 517 Fall 2010/ch1 2b dg</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch1_2b_dg&amp;diff=36079"/>
		<updated>2010-09-22T16:27:31Z</updated>

		<summary type="html">&lt;p&gt;Dragon9786: /* Advantages of CRC cards */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&amp;lt;b&amp;gt; CRC Cards &amp;lt;/b&amp;gt; also known as [http://en.wikipedia.org/wiki/Class-responsibility-collaboration_card &amp;lt;b&amp;gt; Class-Responsibility-Collaboration &amp;lt;sup&amp;gt;&amp;lt;/sup&amp;gt;&amp;lt;/b&amp;gt;] cards are a brainstorming tool to enable collaboration across different teams or individuals in contribution to design, usually used in Object Oriented Software development. This was  proposed by &amp;lt;b&amp;gt;Ward Cunningham&amp;lt;/b&amp;gt; and &amp;lt;b&amp;gt;Kent Beck&amp;lt;/b&amp;gt;&amp;lt;sup&amp;gt;[http://c2.com/doc/oopsla89/paper.html]&amp;lt;/sup&amp;gt;. The CRC card can be viewed as an index card, with the following details:&lt;br /&gt;
[[Image:crc-card.gif|frame|right|CRC Card Structure]]&lt;br /&gt;
&lt;br /&gt;
:* The Top of the card usually bears the name of the class.&lt;br /&gt;
:* The Left side of the card has the responsibilities of the class.&lt;br /&gt;
:* The Right side of the card has the collaborating classes corresponding to each of the responsibilities listed in the left side.&lt;br /&gt;
&lt;br /&gt;
Thus in general, a CRC session can be viewed as the interaction between a set of collaborating classes for a particular [http://en.wikipedia.org/wiki/Use_case Use case]. &amp;lt;br&amp;gt; &amp;lt;br&amp;gt; According to &amp;lt;sup&amp;gt;[http://www.extremeprogramming.org/rules/crccards.html]&amp;lt;/sup&amp;gt;&amp;lt;i&amp;gt;A CRC session proceeds with someone simulating the system by talking about which objects send messages to other objects. By stepping through the process weaknesses and problems are easily uncovered. Design alternatives can be explored quickly by simulating the design being proposed.&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===A CRC Example===&lt;br /&gt;
To better understand how the CRC cards work together, let us consider an example.&lt;br /&gt;
&lt;br /&gt;
===Advantages of CRC cards===&lt;br /&gt;
There are quite a few advantages of CRC cards that make it a preferable model in many designs. Some of the advantages of the CRC card design method are&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
:* CRC cards can allow designers to easily make audience understand a very complex system. In essence it allows for building more complex designs by slowly building the interactions between the collaborating classes, one by one.&lt;br /&gt;
:* CRC cards are a simple technique and it can be easily used by anyone with very little training and does not require any expensive computing resources(a board or a paper and a pen would suffice).&lt;br /&gt;
:* CRC is fundamentally a brainstorming tool, enabling different people in a team to come up with the design by collaborating, enabling everyone in the team to contribute&lt;br /&gt;
&lt;br /&gt;
==Why need a Software for CRC Cards==&lt;br /&gt;
CRC cards are limited by their scope. If we go about designing a huge project, the scope spans many classes and interactions between them. The tedious task of maintaining are CRC cards and to properly formulate interaction can get overwhelming. &lt;br /&gt;
Following reasons propel use for software for CRC Cards :&lt;br /&gt;
:* &amp;lt;b&amp;gt;Designing Scenario:&amp;lt;/b&amp;gt;  A scenario represents series of steps in which classes and objects communicate. There are be references to other cards or scenarios. &lt;br /&gt;
:* &amp;lt;b&amp;gt;Modeling :&amp;lt;/b&amp;gt;  Software provide an easy way to segregate cards and objects into different diagrams. Thus we can model our software with different functionality very easily.&lt;br /&gt;
:* &amp;lt;b&amp;gt;Simulation :&amp;lt;/b&amp;gt; Software can provides simulation of an software design. This might include single stepping backwards, forwards a scenario or jumping to a specific location in the scenario stack of a multiple scenario simulation&lt;br /&gt;
:* &amp;lt;b&amp;gt;Synchronization and Dependencies:&amp;lt;/b&amp;gt; Software can maintain relationships between cards, scenarios as design changes take place. If a card references other cards or classes, those cards are generated automatically. Also any name changes and cross references between objects are instantly updated. &lt;br /&gt;
:* &amp;lt;b&amp;gt;Revision history and Version Control :&amp;lt;/b&amp;gt; Software for CRC cards supports changes to CRC cards. It is easy to model and keep track of all changes to a CRC cards. This is extremely helpful in realizing the design changes to CRC cards.&lt;br /&gt;
&lt;br /&gt;
==Desining Software==&lt;br /&gt;
The following steps proceed while designing Software for CRC cards:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Create CRC Cards&amp;lt;/b&amp;gt;&lt;br /&gt;
A CRC model is usually created by an individual or small group of designers during the early phase of an object-oriented development project.The figure shows the design of hierarchy of classes. These set of class used for drawing objects are shown. We can see TShape class has a superclass called TObject and two subclasses, TBox and TCircle. Lets assume we create new class TWindow derived from the superclass TObject.  [[Image:Design.png|thumb|Description]]&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Assign Responsibilities&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Once a set of classes are defined, behaviors can be assigned that will provide the functions of the application. For example, the TShape card has responsibilities Initialize to create it and Draw to illustrate it on the diagram.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Add Attributes&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Attributes of classes may also be identified in a CRC Card.The TShape class has attributes fPosition, fType and&lt;br /&gt;
fSelected.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Define and simulate Scenario&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A scenario describes a sequence of steps in the design using the responsibilities of a group of collaborating&lt;br /&gt;
classes. Collaboration between classes refers to a client object that uses a responsibility performed&lt;br /&gt;
by a server object. Often a class must call upon several collaborating classes to implement one of its&lt;br /&gt;
responsibilities.A scenario describes what happens in the system from a high-level, user point of view.&lt;br /&gt;
[[Image:Scenario.png|thumb|Description]]&lt;br /&gt;
Consider situation to the right. We have defined two CRC cards with their responsibility. A scenario deinfes several steps. Each step in a scenario has a Client, Server and Responsibility field. For each step,&lt;br /&gt;
a client class uses a responsibility of a server class&lt;br /&gt;
&lt;br /&gt;
The Open Document scenario in the picture references the Initialize Document subscenario&lt;br /&gt;
by specifying its server class Document in the server field and its scenario name in the Responsibility field.&lt;br /&gt;
The first step in the Initialize Document subscenario uses Document as the server class name.&lt;br /&gt;
&lt;br /&gt;
By single stepping forwards, backwards or through each subscenario, bugs in the design can be identified and corrected early.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Partition the Design&amp;lt;/b&amp;gt;&lt;br /&gt;
As the number of CRC cards in the design grows, they can be grouped by function. Using Software for CRC cards,&lt;br /&gt;
separate diagrams are used to partition the model into different subject areas. &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Inheritance Graph&amp;lt;/b&amp;gt;&lt;br /&gt;
An automated tool can generate an inheritance graph from information on CRC cards. This diagram can&lt;br /&gt;
concisely illustrate the big picture of a large project that might contain hundreds of classes and dozens of diagrams.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Verify Your Work &amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Creating and simulating scenarios will help verify that a design is correct and complete. A CRC software&lt;br /&gt;
can perform other error checks to locate design problems.&lt;br /&gt;
For example, responsibilities that are not used in any scenarios may indicate that the design is incomplete&lt;br /&gt;
or perhaps the responsibility isn't needed.Likewise, a card that is not used by any collaboration&lt;br /&gt;
may not be needed.&lt;br /&gt;
&lt;br /&gt;
==Summary==&lt;br /&gt;
Software for CRC cards are immensely helpful in designing and modeling Software development using CRC cards.As the size of object-oriented system grow, it becomes increasingly difficult to model the problem with index based CRC cards. Thus an automated tool is required to maintain design and clear functionality.&lt;br /&gt;
==References==&lt;br /&gt;
[1] A Laboratory For Teaching Object-Oriented Thinking: [http://c2.com/doc/oopsla89/paper.html http://c2.com/doc/oopsla89/paper.html]&lt;br /&gt;
&lt;br /&gt;
[2] CRC Cards: [http://www.extremeprogramming.org/rules/crccards.html http://www.extremeprogramming.org/rules/crccards.html]&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
&lt;br /&gt;
==External Links==&lt;br /&gt;
* [http://c2.com/doc/oopsla89/paper.html A Laboratory For Teaching Object-Oriented Thinking] by Ward Cunningham and Kent Beck&lt;br /&gt;
* [http://books.google.com/books?id=SGOyQai2TboC&amp;amp;printsec=frontcover&amp;amp;dq=CRC+card+book&amp;amp;hl=en&amp;amp;ei=xSOaTKSaNISclgfRqtkK&amp;amp;sa=X&amp;amp;oi=book_result&amp;amp;ct=result&amp;amp;resnum=1&amp;amp;ved=0CDYQ6AEwAA#v=onepage&amp;amp;q&amp;amp;f=false The CRC card book] by David Bellin, Susan Suchman Simone&lt;br /&gt;
&lt;br /&gt;
* [http://books.google.com/books?id=baopCOstm_kC&amp;amp;pg=PA29&amp;amp;lpg=PA29&amp;amp;dq=creating+software+for+CRC+cards&amp;amp;source=bl&amp;amp;ots=hABGQbbmXV&amp;amp;sig=CTHPtCN1GmZEyTAIPWvKE--8-M4&amp;amp;hl=en&amp;amp;ei=7ReaTISDKYL68Aadtq08&amp;amp;sa=X&amp;amp;oi=book_result&amp;amp;ct=result&amp;amp;resnum=9&amp;amp;ved=0CEsQ6AEwCDgK#v=onepage&amp;amp;q&amp;amp;f=false Using CRC Cards: An Informal Approach to Object-Oriented Development]&lt;br /&gt;
* [http://www.agilemodeling.com/artifacts/crcModel.htm Modelling CRC Cards]&lt;br /&gt;
* [http://www.excelsoftware.com/quickcrcwin.html Quick CRC]&lt;/div&gt;</summary>
		<author><name>Dragon9786</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch1_2b_dg&amp;diff=36075</id>
		<title>CSC/ECE 517 Fall 2010/ch1 2b dg</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch1_2b_dg&amp;diff=36075"/>
		<updated>2010-09-22T16:16:12Z</updated>

		<summary type="html">&lt;p&gt;Dragon9786: /* Why need a Software for CRC Cards */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&amp;lt;b&amp;gt; CRC Cards &amp;lt;/b&amp;gt; also known as [http://en.wikipedia.org/wiki/Class-responsibility-collaboration_card &amp;lt;b&amp;gt; Class-Responsibility-Collaboration &amp;lt;sup&amp;gt;&amp;lt;/sup&amp;gt;&amp;lt;/b&amp;gt;] cards are a brainstorming tool to enable collaboration across different teams or individuals in contribution to design, usually used in Object Oriented Software development. This was  proposed by &amp;lt;b&amp;gt;Ward Cunningham&amp;lt;/b&amp;gt; and &amp;lt;b&amp;gt;Kent Beck&amp;lt;/b&amp;gt;&amp;lt;sup&amp;gt;[http://c2.com/doc/oopsla89/paper.html]&amp;lt;/sup&amp;gt;. The CRC card can be viewed as an index card, with the following details:&lt;br /&gt;
[[Image:crc-card.gif|frame|right|CRC Card Structure]]&lt;br /&gt;
&lt;br /&gt;
:* The Top of the card usually bears the name of the class.&lt;br /&gt;
:* The Left side of the card has the responsibilities of the class.&lt;br /&gt;
:* The Right side of the card has the collaborating classes corresponding to each of the responsibilities listed in the left side.&lt;br /&gt;
&lt;br /&gt;
Thus in general, a CRC session can be viewed as the interaction between a set of collaborating classes for a particular [http://en.wikipedia.org/wiki/Use_case Use case]. &amp;lt;br&amp;gt; &amp;lt;br&amp;gt; According to &amp;lt;sup&amp;gt;[http://www.extremeprogramming.org/rules/crccards.html]&amp;lt;/sup&amp;gt;&amp;lt;i&amp;gt;A CRC session proceeds with someone simulating the system by talking about which objects send messages to other objects. By stepping through the process weaknesses and problems are easily uncovered. Design alternatives can be explored quickly by simulating the design being proposed.&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===A CRC Example===&lt;br /&gt;
To better understand how the CRC cards work together, let us consider an example.&lt;br /&gt;
&lt;br /&gt;
===Advantages of CRC cards===&lt;br /&gt;
With Object-oriented development becoming a very&lt;br /&gt;
==Why need a Software for CRC Cards==&lt;br /&gt;
CRC cards are limited by their scope. If we go about designing a huge project, the scope spans many classes and interactions between them. The tedious task of maintaining are CRC cards and to properly formulate interaction can get overwhelming. &lt;br /&gt;
Following reasons propel use for software for CRC Cards :&lt;br /&gt;
:* &amp;lt;b&amp;gt;Designing Scenario:&amp;lt;/b&amp;gt;  A scenario represents series of steps in which classes and objects communicate. There are be references to other cards or scenarios. &lt;br /&gt;
:* &amp;lt;b&amp;gt;Modeling :&amp;lt;/b&amp;gt;  Software provide an easy way to segregate cards and objects into different diagrams. Thus we can model our software with different functionality very easily.&lt;br /&gt;
:* &amp;lt;b&amp;gt;Simulation :&amp;lt;/b&amp;gt; Software can provides simulation of an software design. This might include single stepping backwards, forwards a scenario or jumping to a specific location in the scenario stack of a multiple scenario simulation&lt;br /&gt;
:* &amp;lt;b&amp;gt;Synchronization and Dependencies:&amp;lt;/b&amp;gt; Software can maintain relationships between cards, scenarios as design changes take place. If a card references other cards or classes, those cards are generated automatically. Also any name changes and cross references between objects are instantly updated. &lt;br /&gt;
:* &amp;lt;b&amp;gt;Revision history and Version Control :&amp;lt;/b&amp;gt; Software for CRC cards supports changes to CRC cards. It is easy to model and keep track of all changes to a CRC cards. This is extremely helpful in realizing the design changes to CRC cards.&lt;br /&gt;
&lt;br /&gt;
==Desining Software==&lt;br /&gt;
The following steps proceed while designing Software for CRC cards:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Create CRC Cards&amp;lt;/b&amp;gt;&lt;br /&gt;
A CRC model is usually created by an individual or small group of designers during the early phase of an object-oriented development project.The figure shows the design of hierarchy of classes. These set of class used for drawing objects are shown. We can see TShape class has a superclass called TObject and two subclasses, TBox and TCircle. Lets assume we create new class TWindow derived from the superclass TObject.  [[Image:Design.png|thumb|Description]]&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Assign Responsibilities&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Once a set of classes are defined, behaviors can be assigned that will provide the functions of the application. For example, the TShape card has responsibilities Initialize to create it and Draw to illustrate it on the diagram.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Add Attributes&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Attributes of classes may also be identified in a CRC Card.The TShape class has attributes fPosition, fType and&lt;br /&gt;
fSelected.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Define and simulate Scenario&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A scenario describes a sequence of steps in the design using the responsibilities of a group of collaborating&lt;br /&gt;
classes. Collaboration between classes refers to a client object that uses a responsibility performed&lt;br /&gt;
by a server object. Often a class must call upon several collaborating classes to implement one of its&lt;br /&gt;
responsibilities.A scenario describes what happens in the system from a high-level, user point of view.&lt;br /&gt;
[[Image:Scenario.png|thumb|Description]]&lt;br /&gt;
Consider situation to the right. We have defined two CRC cards with their responsibility. A scenario deinfes several steps. Each step in a scenario has a Client, Server and Responsibility field. For each step,&lt;br /&gt;
a client class uses a responsibility of a server class&lt;br /&gt;
&lt;br /&gt;
The Open Document scenario in the picture references the Initialize Document subscenario&lt;br /&gt;
by specifying its server class Document in the server field and its scenario name in the Responsibility field.&lt;br /&gt;
The first step in the Initialize Document subscenario uses Document as the server class name.&lt;br /&gt;
&lt;br /&gt;
By single stepping forwards, backwards or through each subscenario, bugs in the design can be identified and corrected early.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Partition the Design&amp;lt;/b&amp;gt;&lt;br /&gt;
As the number of CRC cards in the design grows, they can be grouped by function. Using Software for CRC cards,&lt;br /&gt;
separate diagrams are used to partition the model into different subject areas. &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Inheritance Graph&amp;lt;/b&amp;gt;&lt;br /&gt;
An automated tool can generate an inheritance graph from information on CRC cards. This diagram can&lt;br /&gt;
concisely illustrate the big picture of a large project that might contain hundreds of classes and dozens of diagrams.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Verify Your Work &amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Creating and simulating scenarios will help verify that a design is correct and complete. A CRC software&lt;br /&gt;
can perform other error checks to locate design problems.&lt;br /&gt;
For example, responsibilities that are not used in any scenarios may indicate that the design is incomplete&lt;br /&gt;
or perhaps the responsibility isn't needed.Likewise, a card that is not used by any collaboration&lt;br /&gt;
may not be needed.&lt;br /&gt;
&lt;br /&gt;
==Summary==&lt;br /&gt;
Software for CRC cards are immensely helpful in designing and modeling Software development using CRC cards.As the size of object-oriented system grow, it becomes increasingly difficult to model the problem with index based CRC cards. Thus an automated tool is required to maintain design and clear functionality.&lt;br /&gt;
==References==&lt;br /&gt;
[1] A Laboratory For Teaching Object-Oriented Thinking: [http://c2.com/doc/oopsla89/paper.html http://c2.com/doc/oopsla89/paper.html]&lt;br /&gt;
&lt;br /&gt;
[2] CRC Cards: [http://www.extremeprogramming.org/rules/crccards.html http://www.extremeprogramming.org/rules/crccards.html]&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
&lt;br /&gt;
==External Links==&lt;br /&gt;
* [http://c2.com/doc/oopsla89/paper.html A Laboratory For Teaching Object-Oriented Thinking] by Ward Cunningham and Kent Beck&lt;br /&gt;
* [http://books.google.com/books?id=SGOyQai2TboC&amp;amp;printsec=frontcover&amp;amp;dq=CRC+card+book&amp;amp;hl=en&amp;amp;ei=xSOaTKSaNISclgfRqtkK&amp;amp;sa=X&amp;amp;oi=book_result&amp;amp;ct=result&amp;amp;resnum=1&amp;amp;ved=0CDYQ6AEwAA#v=onepage&amp;amp;q&amp;amp;f=false The CRC card book] by David Bellin, Susan Suchman Simone&lt;br /&gt;
&lt;br /&gt;
* [http://books.google.com/books?id=baopCOstm_kC&amp;amp;pg=PA29&amp;amp;lpg=PA29&amp;amp;dq=creating+software+for+CRC+cards&amp;amp;source=bl&amp;amp;ots=hABGQbbmXV&amp;amp;sig=CTHPtCN1GmZEyTAIPWvKE--8-M4&amp;amp;hl=en&amp;amp;ei=7ReaTISDKYL68Aadtq08&amp;amp;sa=X&amp;amp;oi=book_result&amp;amp;ct=result&amp;amp;resnum=9&amp;amp;ved=0CEsQ6AEwCDgK#v=onepage&amp;amp;q&amp;amp;f=false Using CRC Cards: An Informal Approach to Object-Oriented Development]&lt;br /&gt;
* [http://www.agilemodeling.com/artifacts/crcModel.htm Modelling CRC Cards]&lt;br /&gt;
* [http://www.excelsoftware.com/quickcrcwin.html Quick CRC]&lt;/div&gt;</summary>
		<author><name>Dragon9786</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch1_2b_dg&amp;diff=36071</id>
		<title>CSC/ECE 517 Fall 2010/ch1 2b dg</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch1_2b_dg&amp;diff=36071"/>
		<updated>2010-09-22T16:11:14Z</updated>

		<summary type="html">&lt;p&gt;Dragon9786: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&amp;lt;b&amp;gt; CRC Cards &amp;lt;/b&amp;gt; also known as [http://en.wikipedia.org/wiki/Class-responsibility-collaboration_card &amp;lt;b&amp;gt; Class-Responsibility-Collaboration &amp;lt;sup&amp;gt;&amp;lt;/sup&amp;gt;&amp;lt;/b&amp;gt;] cards are a brainstorming tool to enable collaboration across different teams or individuals in contribution to design, usually used in Object Oriented Software development. This was  proposed by &amp;lt;b&amp;gt;Ward Cunningham&amp;lt;/b&amp;gt; and &amp;lt;b&amp;gt;Kent Beck&amp;lt;/b&amp;gt;&amp;lt;sup&amp;gt;[http://c2.com/doc/oopsla89/paper.html]&amp;lt;/sup&amp;gt;. The CRC card can be viewed as an index card, with the following details:&lt;br /&gt;
[[Image:crc-card.gif|frame|right|CRC Card Structure]]&lt;br /&gt;
&lt;br /&gt;
:* The Top of the card usually bears the name of the class.&lt;br /&gt;
:* The Left side of the card has the responsibilities of the class.&lt;br /&gt;
:* The Right side of the card has the collaborating classes corresponding to each of the responsibilities listed in the left side.&lt;br /&gt;
&lt;br /&gt;
Thus in general, a CRC session can be viewed as the interaction between a set of collaborating classes for a particular [http://en.wikipedia.org/wiki/Use_case Use case]. &amp;lt;br&amp;gt; &amp;lt;br&amp;gt; According to &amp;lt;sup&amp;gt;[http://www.extremeprogramming.org/rules/crccards.html]&amp;lt;/sup&amp;gt;&amp;lt;i&amp;gt;A CRC session proceeds with someone simulating the system by talking about which objects send messages to other objects. By stepping through the process weaknesses and problems are easily uncovered. Design alternatives can be explored quickly by simulating the design being proposed.&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===A CRC Example===&lt;br /&gt;
To better understand how the CRC cards work together, let us consider an example.&lt;br /&gt;
&lt;br /&gt;
===Advantages of CRC cards===&lt;br /&gt;
With Object-oriented development becoming a very&lt;br /&gt;
==Why need a Software for CRC Cards==&lt;br /&gt;
CRC cards are limited by their scope. If we go about designing a huge project, the scope spans many classes and interactions between them. The tedious task of maintaining are CRC cards and to properly formulate interaction can get overwhelming. &lt;br /&gt;
Following reasons propel use for software for CRC Cards :&lt;br /&gt;
:* Designing Scenario:  A scenario represents series of steps in which classes and objects communicate. There are be references to other cards or scenarios. &lt;br /&gt;
:* Modeling :  Software provide an easy way to segregate cards and objects into different diagrams. Thus we can model our software with different functionality very easily.&lt;br /&gt;
:* Simulation : Software can provides simulation of an software design. This might include single stepping backwards, forwards a scenario or jumping to a specific location in the scenario stack of a multiple scenario simulation&lt;br /&gt;
:* Synchronization and Dependencies: Software can maintain relationships between cards, scenarios as design changes take place. If a card references other cards or classes, those cards are generated automatically. Also any name changes and cross references between objects are instantly updated. &lt;br /&gt;
:* Revision history and Version Control : Software for CRC cards supports changes to CRC cards. It is easy to model and keep track of all changes to a CRC cards. This is extremely helpful in realizing the design changes to CRC cards.&lt;br /&gt;
&lt;br /&gt;
==Desining Software==&lt;br /&gt;
The following steps proceed while designing Software for CRC cards:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Create CRC Cards&amp;lt;/b&amp;gt;&lt;br /&gt;
A CRC model is usually created by an individual or small group of designers during the early phase of an object-oriented development project.The figure shows the design of hierarchy of classes. These set of class used for drawing objects are shown. We can see TShape class has a superclass called TObject and two subclasses, TBox and TCircle. Lets assume we create new class TWindow derived from the superclass TObject.  [[Image:Design.png|thumb|Description]]&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Assign Responsibilities&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Once a set of classes are defined, behaviors can be assigned that will provide the functions of the application. For example, the TShape card has responsibilities Initialize to create it and Draw to illustrate it on the diagram.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Add Attributes&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Attributes of classes may also be identified in a CRC Card.The TShape class has attributes fPosition, fType and&lt;br /&gt;
fSelected.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Define and simulate Scenario&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A scenario describes a sequence of steps in the design using the responsibilities of a group of collaborating&lt;br /&gt;
classes. Collaboration between classes refers to a client object that uses a responsibility performed&lt;br /&gt;
by a server object. Often a class must call upon several collaborating classes to implement one of its&lt;br /&gt;
responsibilities.A scenario describes what happens in the system from a high-level, user point of view.&lt;br /&gt;
[[Image:Scenario.png|thumb|Description]]&lt;br /&gt;
Consider situation to the right. We have defined two CRC cards with their responsibility. A scenario deinfes several steps. Each step in a scenario has a Client, Server and Responsibility field. For each step,&lt;br /&gt;
a client class uses a responsibility of a server class&lt;br /&gt;
&lt;br /&gt;
The Open Document scenario in the picture references the Initialize Document subscenario&lt;br /&gt;
by specifying its server class Document in the server field and its scenario name in the Responsibility field.&lt;br /&gt;
The first step in the Initialize Document subscenario uses Document as the server class name.&lt;br /&gt;
&lt;br /&gt;
By single stepping forwards, backwards or through each subscenario, bugs in the design can be identified and corrected early.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Partition the Design&amp;lt;/b&amp;gt;&lt;br /&gt;
As the number of CRC cards in the design grows, they can be grouped by function. Using Software for CRC cards,&lt;br /&gt;
separate diagrams are used to partition the model into different subject areas. &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Inheritance Graph&amp;lt;/b&amp;gt;&lt;br /&gt;
An automated tool can generate an inheritance graph from information on CRC cards. This diagram can&lt;br /&gt;
concisely illustrate the big picture of a large project that might contain hundreds of classes and dozens of diagrams.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Verify Your Work &amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Creating and simulating scenarios will help verify that a design is correct and complete. A CRC software&lt;br /&gt;
can perform other error checks to locate design problems.&lt;br /&gt;
For example, responsibilities that are not used in any scenarios may indicate that the design is incomplete&lt;br /&gt;
or perhaps the responsibility isn't needed.Likewise, a card that is not used by any collaboration&lt;br /&gt;
may not be needed.&lt;br /&gt;
&lt;br /&gt;
==Summary==&lt;br /&gt;
Software for CRC cards are immensely helpful in designing and modeling Software development using CRC cards.As the size of object-oriented system grow, it becomes increasingly difficult to model the problem with index based CRC cards. Thus an automated tool is required to maintain design and clear functionality.&lt;br /&gt;
==References==&lt;br /&gt;
[1] A Laboratory For Teaching Object-Oriented Thinking: [http://c2.com/doc/oopsla89/paper.html http://c2.com/doc/oopsla89/paper.html]&lt;br /&gt;
&lt;br /&gt;
[2] CRC Cards: [http://www.extremeprogramming.org/rules/crccards.html http://www.extremeprogramming.org/rules/crccards.html]&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
&lt;br /&gt;
==External Links==&lt;br /&gt;
* [http://c2.com/doc/oopsla89/paper.html A Laboratory For Teaching Object-Oriented Thinking] by Ward Cunningham and Kent Beck&lt;br /&gt;
* [http://books.google.com/books?id=SGOyQai2TboC&amp;amp;printsec=frontcover&amp;amp;dq=CRC+card+book&amp;amp;hl=en&amp;amp;ei=xSOaTKSaNISclgfRqtkK&amp;amp;sa=X&amp;amp;oi=book_result&amp;amp;ct=result&amp;amp;resnum=1&amp;amp;ved=0CDYQ6AEwAA#v=onepage&amp;amp;q&amp;amp;f=false The CRC card book] by David Bellin, Susan Suchman Simone&lt;br /&gt;
&lt;br /&gt;
* [http://books.google.com/books?id=baopCOstm_kC&amp;amp;pg=PA29&amp;amp;lpg=PA29&amp;amp;dq=creating+software+for+CRC+cards&amp;amp;source=bl&amp;amp;ots=hABGQbbmXV&amp;amp;sig=CTHPtCN1GmZEyTAIPWvKE--8-M4&amp;amp;hl=en&amp;amp;ei=7ReaTISDKYL68Aadtq08&amp;amp;sa=X&amp;amp;oi=book_result&amp;amp;ct=result&amp;amp;resnum=9&amp;amp;ved=0CEsQ6AEwCDgK#v=onepage&amp;amp;q&amp;amp;f=false Using CRC Cards: An Informal Approach to Object-Oriented Development]&lt;br /&gt;
* [http://www.agilemodeling.com/artifacts/crcModel.htm Modelling CRC Cards]&lt;br /&gt;
* [http://www.excelsoftware.com/quickcrcwin.html Quick CRC]&lt;/div&gt;</summary>
		<author><name>Dragon9786</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch1_2b_dg&amp;diff=36070</id>
		<title>CSC/ECE 517 Fall 2010/ch1 2b dg</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch1_2b_dg&amp;diff=36070"/>
		<updated>2010-09-22T16:10:00Z</updated>

		<summary type="html">&lt;p&gt;Dragon9786: /* Desining Software */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&amp;lt;b&amp;gt; CRC Cards &amp;lt;/b&amp;gt; also known as [http://en.wikipedia.org/wiki/Class-responsibility-collaboration_card &amp;lt;b&amp;gt; Class-Responsibility-Collaboration &amp;lt;sup&amp;gt;&amp;lt;/sup&amp;gt;&amp;lt;/b&amp;gt;] cards are a brainstorming tool to enable collaboration across different teams or individuals in contribution to design, usually used in Object Oriented Software development. This was  proposed by &amp;lt;b&amp;gt;Ward Cunningham&amp;lt;/b&amp;gt; and &amp;lt;b&amp;gt;Kent Beck&amp;lt;/b&amp;gt;&amp;lt;sup&amp;gt;[http://c2.com/doc/oopsla89/paper.html]&amp;lt;/sup&amp;gt;. The CRC card can be viewed as an index card, with the following details:&lt;br /&gt;
[[Image:crc-card.gif|frame|right|CRC Card Structure]]&lt;br /&gt;
&lt;br /&gt;
:* The Top of the card usually bears the name of the class.&lt;br /&gt;
:* The Left side of the card has the responsibilities of the class.&lt;br /&gt;
:* The Right side of the card has the collaborating classes corresponding to each of the responsibilities listed in the left side.&lt;br /&gt;
&lt;br /&gt;
Thus in general, a CRC session can be viewed as the interaction between a set of collaborating classes for a particular [http://en.wikipedia.org/wiki/Use_case Use case]. &amp;lt;br&amp;gt; &amp;lt;br&amp;gt; According to &amp;lt;sup&amp;gt;[http://www.extremeprogramming.org/rules/crccards.html]&amp;lt;/sup&amp;gt;&amp;lt;i&amp;gt;A CRC session proceeds with someone simulating the system by talking about which objects send messages to other objects. By stepping through the process weaknesses and problems are easily uncovered. Design alternatives can be explored quickly by simulating the design being proposed.&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===A CRC Example===&lt;br /&gt;
To better understand how the CRC cards work together, let us consider an example.&lt;br /&gt;
&lt;br /&gt;
===Advantages of CRC cards===&lt;br /&gt;
With Object-oriented development becoming a very&lt;br /&gt;
==Why need a Software for CRC Cards==&lt;br /&gt;
CRC cards are limited by their scope. If we go about designing a huge project, the scope spans many classes and interactions between them. The tedious task of maintaining are CRC cards and to properly formulate interaction can get overwhelming. &lt;br /&gt;
Following reasons propel use for software for CRC Cards :&lt;br /&gt;
:* Designing Scenario:  A scenario represents series of steps in which classes and objects communicate. There are be references to other cards or scenarios. &lt;br /&gt;
:* Modeling :  Software provide an easy way to segregate cards and objects into different diagrams. Thus we can model our software with different functionality very easily.&lt;br /&gt;
:* Simulation : Software can provides simulation of an software design. This might include single stepping backwards, forwards a scenario or jumping to a specific location in the scenario stack of a multiple scenario simulation&lt;br /&gt;
:* Synchronization and Dependencies: Software can maintain relationships between cards, scenarios as design changes take place. If a card references other cards or classes, those cards are generated automatically. Also any name changes and cross references between objects are instantly updated. &lt;br /&gt;
:* Revision history and Version Control : Software for CRC cards supports changes to CRC cards. It is easy to model and keep track of all changes to a CRC cards. This is extremely helpful in realizing the design changes to CRC cards.&lt;br /&gt;
&lt;br /&gt;
==Desining Software==&lt;br /&gt;
The following steps proceed while designing Software for CRC cards:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Create CRC Cards&amp;lt;/b&amp;gt;&lt;br /&gt;
A CRC model is usually created by an individual or small group of designers during the early phase of an object-oriented development project.The figure shows the design of hierarchy of classes. These set of class used for drawing objects are shown. We can see TShape class has a superclass called TObject and two subclasses, TBox and TCircle. Lets assume we create new class TWindow derived from the superclass TObject.  [[Image:Design.png|thumb|Description]]&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Assign Responsibilities&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Once a set of classes are defined, behaviors can be assigned that will provide the functions of the application. For example, the TShape card has responsibilities Initialize to create it and Draw to illustrate it on the diagram.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Add Attributes&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Attributes of classes may also be identified in a CRC Card.The TShape class has attributes fPosition, fType and&lt;br /&gt;
fSelected.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Define and simulate Scenario&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A scenario describes a sequence of steps in the design using the responsibilities of a group of collaborating&lt;br /&gt;
classes. Collaboration between classes refers to a client object that uses a responsibility performed&lt;br /&gt;
by a server object. Often a class must call upon several collaborating classes to implement one of its&lt;br /&gt;
responsibilities.A scenario describes what happens in the system from a high-level, user point of view.&lt;br /&gt;
[[Image:Scenario.png|thumb|Description]]&lt;br /&gt;
Consider situation to the right. We have defined two CRC cards with their responsibility. A scenario deinfes several steps. Each step in a scenario has a Client, Server and Responsibility field. For each step,&lt;br /&gt;
a client class uses a responsibility of a server class&lt;br /&gt;
&lt;br /&gt;
The Open Document scenario in the picture references the Initialize Document subscenario&lt;br /&gt;
by specifying its server class Document in the server field and its scenario name in the Responsibility field.&lt;br /&gt;
The first step in the Initialize Document subscenario uses Document as the server class name.&lt;br /&gt;
&lt;br /&gt;
By single stepping forwards, backwards or through each subscenario, bugs in the design can be identified and corrected early.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Partition the Design&amp;lt;/b&amp;gt;&lt;br /&gt;
As the number of CRC cards in the design grows, they can be grouped by function. Using Software for CRC cards,&lt;br /&gt;
separate diagrams are used to partition the model into different subject areas. &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Inheritance Graph&amp;lt;/b&amp;gt;&lt;br /&gt;
An automated tool can generate an inheritance graph from information on CRC cards. This diagram can&lt;br /&gt;
concisely illustrate the big picture of a large project that might contain hundreds of classes and dozens of diagrams.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Verify Your Work &amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Creating and simulating scenarios will help verify that a design is correct and complete. A CRC software&lt;br /&gt;
can perform other error checks to locate design problems.&lt;br /&gt;
For example, responsibilities that are not used in any scenarios may indicate that the design is incomplete&lt;br /&gt;
or perhaps the responsibility isn't needed.Likewise, a card that is not used by any collaboration&lt;br /&gt;
may not be needed.&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
[1] A Laboratory For Teaching Object-Oriented Thinking: [http://c2.com/doc/oopsla89/paper.html http://c2.com/doc/oopsla89/paper.html]&lt;br /&gt;
&lt;br /&gt;
[2] CRC Cards: [http://www.extremeprogramming.org/rules/crccards.html http://www.extremeprogramming.org/rules/crccards.html]&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
&lt;br /&gt;
==External Links==&lt;br /&gt;
:* [http://c2.com/doc/oopsla89/paper.html A Laboratory For Teaching Object-Oriented Thinking] by Ward Cunningham and Kent Beck&lt;br /&gt;
:* [http://books.google.com/books?id=SGOyQai2TboC&amp;amp;printsec=frontcover&amp;amp;dq=CRC+card+book&amp;amp;hl=en&amp;amp;ei=xSOaTKSaNISclgfRqtkK&amp;amp;sa=X&amp;amp;oi=book_result&amp;amp;ct=result&amp;amp;resnum=1&amp;amp;ved=0CDYQ6AEwAA#v=onepage&amp;amp;q&amp;amp;f=false The CRC card book] by David Bellin, Susan Suchman Simone&lt;br /&gt;
&lt;br /&gt;
:* [http://books.google.com/books?id=baopCOstm_kC&amp;amp;pg=PA29&amp;amp;lpg=PA29&amp;amp;dq=creating+software+for+CRC+cards&amp;amp;source=bl&amp;amp;ots=hABGQbbmXV&amp;amp;sig=CTHPtCN1GmZEyTAIPWvKE--8-M4&amp;amp;hl=en&amp;amp;ei=7ReaTISDKYL68Aadtq08&amp;amp;sa=X&amp;amp;oi=book_result&amp;amp;ct=result&amp;amp;resnum=9&amp;amp;ved=0CEsQ6AEwCDgK#v=onepage&amp;amp;q&amp;amp;f=false Using CRC Cards: An Informal Approach to Object-Oriented Development]&lt;br /&gt;
:* [http://www.agilemodeling.com/artifacts/crcModel.htm Modelling CRC Cards]&lt;br /&gt;
&lt;br /&gt;
:* [http://www.excelsoftware.com/quickcrcwin.html Quick CRC]&lt;/div&gt;</summary>
		<author><name>Dragon9786</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch1_2b_dg&amp;diff=36067</id>
		<title>CSC/ECE 517 Fall 2010/ch1 2b dg</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch1_2b_dg&amp;diff=36067"/>
		<updated>2010-09-22T16:08:19Z</updated>

		<summary type="html">&lt;p&gt;Dragon9786: /* Desining Software */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&amp;lt;b&amp;gt; CRC Cards &amp;lt;/b&amp;gt; also known as [http://en.wikipedia.org/wiki/Class-responsibility-collaboration_card &amp;lt;b&amp;gt; Class-Responsibility-Collaboration &amp;lt;sup&amp;gt;&amp;lt;/sup&amp;gt;&amp;lt;/b&amp;gt;] cards are a brainstorming tool to enable collaboration across different teams or individuals in contribution to design, usually used in Object Oriented Software development. This was  proposed by &amp;lt;b&amp;gt;Ward Cunningham&amp;lt;/b&amp;gt; and &amp;lt;b&amp;gt;Kent Beck&amp;lt;/b&amp;gt;&amp;lt;sup&amp;gt;[http://c2.com/doc/oopsla89/paper.html]&amp;lt;/sup&amp;gt;. The CRC card can be viewed as an index card, with the following details:&lt;br /&gt;
[[Image:crc-card.gif|frame|right|CRC Card Structure]]&lt;br /&gt;
&lt;br /&gt;
:* The Top of the card usually bears the name of the class.&lt;br /&gt;
:* The Left side of the card has the responsibilities of the class.&lt;br /&gt;
:* The Right side of the card has the collaborating classes corresponding to each of the responsibilities listed in the left side.&lt;br /&gt;
&lt;br /&gt;
Thus in general, a CRC session can be viewed as the interaction between a set of collaborating classes for a particular [http://en.wikipedia.org/wiki/Use_case Use case]. &amp;lt;br&amp;gt; &amp;lt;br&amp;gt; According to &amp;lt;sup&amp;gt;[http://www.extremeprogramming.org/rules/crccards.html]&amp;lt;/sup&amp;gt;&amp;lt;i&amp;gt;A CRC session proceeds with someone simulating the system by talking about which objects send messages to other objects. By stepping through the process weaknesses and problems are easily uncovered. Design alternatives can be explored quickly by simulating the design being proposed.&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===A CRC Example===&lt;br /&gt;
To better understand how the CRC cards work together, let us consider an example.&lt;br /&gt;
&lt;br /&gt;
===Advantages of CRC cards===&lt;br /&gt;
With Object-oriented development becoming a very&lt;br /&gt;
==Why need a Software for CRC Cards==&lt;br /&gt;
CRC cards are limited by their scope. If we go about designing a huge project, the scope spans many classes and interactions between them. The tedious task of maintaining are CRC cards and to properly formulate interaction can get overwhelming. &lt;br /&gt;
Following reasons propel use for software for CRC Cards :&lt;br /&gt;
:* Designing Scenario:  A scenario represents series of steps in which classes and objects communicate. There are be references to other cards or scenarios. &lt;br /&gt;
:* Modeling :  Software provide an easy way to segregate cards and objects into different diagrams. Thus we can model our software with different functionality very easily.&lt;br /&gt;
:* Simulation : Software can provides simulation of an software design. This might include single stepping backwards, forwards a scenario or jumping to a specific location in the scenario stack of a multiple scenario simulation&lt;br /&gt;
:* Synchronization and Dependencies: Software can maintain relationships between cards, scenarios as design changes take place. If a card references other cards or classes, those cards are generated automatically. Also any name changes and cross references between objects are instantly updated. &lt;br /&gt;
:* Revision history and Version Control : Software for CRC cards supports changes to CRC cards. It is easy to model and keep track of all changes to a CRC cards. This is extremely helpful in realizing the design changes to CRC cards.&lt;br /&gt;
&lt;br /&gt;
==Desining Software==&lt;br /&gt;
The following steps proceed while designing Software for CRC cards:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Create CRC Cards&amp;lt;/b&amp;gt;&lt;br /&gt;
A CRC model is usually created by an individual or small group of designers during the early phase of an object-oriented development project.The figure shows the design of hierarchy of classes. These set of class used for drawing objects are shown. We can see TShape class has a superclass called TObject and two subclasses, TBox and TCircle. Lets assume we create new class TWindow derived from the superclass TObject.  [[Image:Design.png|thumb|Description]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;2) Assign Responsibilities&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Once a set of classes are defined, behaviors can be assigned that will provide the functions of the application. For example, the TShape card has responsibilities Initialize to create it and Draw to illustrate it on the diagram.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;3) Add Attributes&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Attributes of classes may also be identified in a CRC Card.The TShape class has attributes fPosition, fType and&lt;br /&gt;
fSelected.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt; 4) Define and simulate Scenario&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A scenario describes a sequence of steps in the design using the responsibilities of a group of collaborating&lt;br /&gt;
classes. Collaboration between classes refers to a client object that uses a responsibility performed&lt;br /&gt;
by a server object. Often a class must call upon several collaborating classes to implement one of its&lt;br /&gt;
responsibilities.A scenario describes what happens in the system from a high-level, user point of view.&lt;br /&gt;
[[Image:Scenario.png|thumb|Description]]&lt;br /&gt;
Consider situation to the right. We have defined two CRC cards with their responsibility. A scenario deinfes several steps. Each step in a scenario has a Client, Server and Responsibility field. For each step,&lt;br /&gt;
a client class uses a responsibility of a server class&lt;br /&gt;
&lt;br /&gt;
The Open Document scenario in the picture references the Initialize Document subscenario&lt;br /&gt;
by specifying its server class Document in the server field and its scenario name in the Responsibility field.&lt;br /&gt;
The first step in the Initialize Document subscenario uses Document as the server class name.&lt;br /&gt;
&lt;br /&gt;
By single stepping forwards, backwards or through each subscenario, bugs in the design can be identified and corrected early.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt; 5) Partition the Design&amp;lt;/b&amp;gt;&lt;br /&gt;
As the number of CRC cards in the design grows, they can be grouped by function. Using Software for CRC cards,&lt;br /&gt;
separate diagrams are used to partition the model into different subject areas. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt; 6) Inheritance Graph&amp;lt;/b&amp;gt;&lt;br /&gt;
An automated tool can generate an inheritance graph from information on CRC cards. This diagram can&lt;br /&gt;
concisely illustrate the big picture of a large project that might contain hundreds of classes and dozens of diagrams.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt; 7) Verify Your Work &amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Creating and simulating scenarios will help verify that a design is correct and complete. A CRC software&lt;br /&gt;
can perform other error checks to locate design problems.&lt;br /&gt;
For example, responsibilities that are not used in any scenarios may indicate that the design is incomplete&lt;br /&gt;
or perhaps the responsibility isn't needed.Likewise, a card that is not used by any collaboration&lt;br /&gt;
may not be needed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Summary===&lt;br /&gt;
Software for CRC cards are immensely helpful in designing and modeling Software development using CRC cards.As the size of object-oriented system grow, it becomes increasingly difficult to model the problem with index based CRC cards. Thus an automated tool is required to maintain design and clear functionality.&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
[1] A Laboratory For Teaching Object-Oriented Thinking: [http://c2.com/doc/oopsla89/paper.html http://c2.com/doc/oopsla89/paper.html]&lt;br /&gt;
&lt;br /&gt;
[2] CRC Cards: [http://www.extremeprogramming.org/rules/crccards.html http://www.extremeprogramming.org/rules/crccards.html]&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
&lt;br /&gt;
==External Links==&lt;br /&gt;
:* [http://c2.com/doc/oopsla89/paper.html A Laboratory For Teaching Object-Oriented Thinking] by Ward Cunningham and Kent Beck&lt;br /&gt;
:* [http://books.google.com/books?id=SGOyQai2TboC&amp;amp;printsec=frontcover&amp;amp;dq=CRC+card+book&amp;amp;hl=en&amp;amp;ei=xSOaTKSaNISclgfRqtkK&amp;amp;sa=X&amp;amp;oi=book_result&amp;amp;ct=result&amp;amp;resnum=1&amp;amp;ved=0CDYQ6AEwAA#v=onepage&amp;amp;q&amp;amp;f=false The CRC card book] by David Bellin, Susan Suchman Simone&lt;br /&gt;
&lt;br /&gt;
:* [http://books.google.com/books?id=baopCOstm_kC&amp;amp;pg=PA29&amp;amp;lpg=PA29&amp;amp;dq=creating+software+for+CRC+cards&amp;amp;source=bl&amp;amp;ots=hABGQbbmXV&amp;amp;sig=CTHPtCN1GmZEyTAIPWvKE--8-M4&amp;amp;hl=en&amp;amp;ei=7ReaTISDKYL68Aadtq08&amp;amp;sa=X&amp;amp;oi=book_result&amp;amp;ct=result&amp;amp;resnum=9&amp;amp;ved=0CEsQ6AEwCDgK#v=onepage&amp;amp;q&amp;amp;f=false Using CRC Cards: An Informal Approach to Object-Oriented Development]&lt;br /&gt;
:* [http://www.agilemodeling.com/artifacts/crcModel.htm Modelling CRC Cards]&lt;br /&gt;
&lt;br /&gt;
:* [http://www.excelsoftware.com/quickcrcwin.html Quick CRC]&lt;/div&gt;</summary>
		<author><name>Dragon9786</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch1_2b_dg&amp;diff=36060</id>
		<title>CSC/ECE 517 Fall 2010/ch1 2b dg</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch1_2b_dg&amp;diff=36060"/>
		<updated>2010-09-22T16:03:20Z</updated>

		<summary type="html">&lt;p&gt;Dragon9786: /* External Links */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&amp;lt;b&amp;gt; CRC Cards &amp;lt;/b&amp;gt; also known as [http://en.wikipedia.org/wiki/Class-responsibility-collaboration_card &amp;lt;b&amp;gt; Class-Responsibility-Collaboration &amp;lt;sup&amp;gt;&amp;lt;/sup&amp;gt;&amp;lt;/b&amp;gt;] cards are a brainstorming tool to enable collaboration across different teams or individuals in contribution to design, usually used in Object Oriented Software development. This was  proposed by &amp;lt;b&amp;gt;Ward Cunningham&amp;lt;/b&amp;gt; and &amp;lt;b&amp;gt;Kent Beck&amp;lt;/b&amp;gt;&amp;lt;sup&amp;gt;[http://c2.com/doc/oopsla89/paper.html]&amp;lt;/sup&amp;gt;. The CRC card can be viewed as an index card, with the following details:&lt;br /&gt;
[[Image:crc-card.gif|frame|right|CRC Card Structure]]&lt;br /&gt;
&lt;br /&gt;
:* The Top of the card usually bears the name of the class.&lt;br /&gt;
:* The Left side of the card has the responsibilities of the class.&lt;br /&gt;
:* The Right side of the card has the collaborating classes corresponding to each of the responsibilities listed in the left side.&lt;br /&gt;
&lt;br /&gt;
Thus in general, a CRC session can be viewed as the interaction between a set of collaborating classes for a particular [http://en.wikipedia.org/wiki/Use_case Use case]. &amp;lt;br&amp;gt; &amp;lt;br&amp;gt; According to &amp;lt;sup&amp;gt;[http://www.extremeprogramming.org/rules/crccards.html]&amp;lt;/sup&amp;gt;&amp;lt;i&amp;gt;A CRC session proceeds with someone simulating the system by talking about which objects send messages to other objects. By stepping through the process weaknesses and problems are easily uncovered. Design alternatives can be explored quickly by simulating the design being proposed.&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===A CRC Example===&lt;br /&gt;
To better understand how the CRC cards work together, let us consider an example.&lt;br /&gt;
&lt;br /&gt;
===Advantages of CRC cards===&lt;br /&gt;
With Object-oriented development becoming a very&lt;br /&gt;
==Why need a Software for CRC Cards==&lt;br /&gt;
CRC cards are limited by their scope. If we go about designing a huge project, the scope spans many classes and interactions between them. The tedious task of maintaining are CRC cards and to properly formulate interaction can get overwhelming. &lt;br /&gt;
Following reasons propel use for software for CRC Cards :&lt;br /&gt;
:* Designing Scenario:  A scenario represents series of steps in which classes and objects communicate. There are be references to other cards or scenarios. &lt;br /&gt;
:* Modeling :  Software provide an easy way to segregate cards and objects into different diagrams. Thus we can model our software with different functionality very easily.&lt;br /&gt;
:* Simulation : Software can provides simulation of an software design. This might include single stepping backwards, forwards a scenario or jumping to a specific location in the scenario stack of a multiple scenario simulation&lt;br /&gt;
:* Synchronization and Dependencies: Software can maintain relationships between cards, scenarios as design changes take place. If a card references other cards or classes, those cards are generated automatically. Also any name changes and cross references between objects are instantly updated. &lt;br /&gt;
:* Revision history and Version Control : Software for CRC cards supports changes to CRC cards. It is easy to model and keep track of all changes to a CRC cards. This is extremely helpful in realizing the design changes to CRC cards.&lt;br /&gt;
&lt;br /&gt;
==Desining Software==&lt;br /&gt;
The following steps proceed while designing Software for CRC cards:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;1) Create CRC Cards&amp;lt;/b&amp;gt;&lt;br /&gt;
A CRC model is usually created by an individual or small group of designers during the early phase of an object-oriented development project.The figure shows the design of hierarchy of classes. These set of class used for drawing objects are shown. We can see TShape class has a superclass called TObject and two subclasses, TBox and TCircle. Lets assume we create new class TWindow derived from the superclass TObject.  [[Image:Design.png|thumb|Description]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;2) Assign Responsibilities&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Once a set of classes are defined, behaviors can be assigned that will provide the functions of the application. For example, the TShape card has responsibilities Initialize to create it and Draw to illustrate it on the diagram.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;3) Add Attributes&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Attributes of classes may also be identified in a CRC Card.The TShape class has attributes fPosition, fType and&lt;br /&gt;
fSelected.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt; 4) Define and simulate Scenario&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A scenario describes a sequence of steps in the design using the responsibilities of a group of collaborating&lt;br /&gt;
classes. Collaboration between classes refers to a client object that uses a responsibility performed&lt;br /&gt;
by a server object. Often a class must call upon several collaborating classes to implement one of its&lt;br /&gt;
responsibilities.A scenario describes what happens in the system from a high-level, user point of view.&lt;br /&gt;
[[Image:Scenario.png|thumb|Description]]&lt;br /&gt;
Consider situation to the right. We have defined two CRC cards with their responsibility. A scenario deinfes several steps. Each step in a scenario has a Client, Server and Responsibility field. For each step,&lt;br /&gt;
a client class uses a responsibility of a server class&lt;br /&gt;
&lt;br /&gt;
The Open Document scenario in the picture references the Initialize Document subscenario&lt;br /&gt;
by specifying its server class Document in the server field and its scenario name in the Responsibility field.&lt;br /&gt;
The first step in the Initialize Document subscenario uses Document as the server class name.&lt;br /&gt;
&lt;br /&gt;
By single stepping forwards, backwards or through each subscenario, bugs in the design can be identified and corrected early.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt; 5) Partition the Design&amp;lt;/b&amp;gt;&lt;br /&gt;
As the number of CRC cards in the design grows, they can be grouped by function. Using Software for CRC cards,&lt;br /&gt;
separate diagrams are used to partition the model into different subject areas. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt; 6)Inheritance Graph&amp;lt;/b&amp;gt;&lt;br /&gt;
An automated tool can generate an inheritance graph from information on CRC cards. This diagram can&lt;br /&gt;
concisely illustrate the big picture of a large project that might contain hundreds of classes and dozens of diagrams.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt; 7)Verify Your Work &amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Creating and simulating scenarios will help verify that a design is correct and complete. A CRC software&lt;br /&gt;
can perform other error checks to locate design problems.&lt;br /&gt;
For example, responsibilities that are not used in any scenarios may indicate that the design is incomplete&lt;br /&gt;
or perhaps the responsibility isn't needed.Likewise, a card that is not used by any collaboration&lt;br /&gt;
may not be needed.&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
[1] A Laboratory For Teaching Object-Oriented Thinking: [http://c2.com/doc/oopsla89/paper.html http://c2.com/doc/oopsla89/paper.html]&lt;br /&gt;
&lt;br /&gt;
[2] CRC Cards: [http://www.extremeprogramming.org/rules/crccards.html http://www.extremeprogramming.org/rules/crccards.html]&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
&lt;br /&gt;
==External Links==&lt;br /&gt;
:* [http://c2.com/doc/oopsla89/paper.html A Laboratory For Teaching Object-Oriented Thinking] by Ward Cunningham and Kent Beck&lt;br /&gt;
:* [http://books.google.com/books?id=SGOyQai2TboC&amp;amp;printsec=frontcover&amp;amp;dq=CRC+card+book&amp;amp;hl=en&amp;amp;ei=xSOaTKSaNISclgfRqtkK&amp;amp;sa=X&amp;amp;oi=book_result&amp;amp;ct=result&amp;amp;resnum=1&amp;amp;ved=0CDYQ6AEwAA#v=onepage&amp;amp;q&amp;amp;f=false The CRC card book] by David Bellin, Susan Suchman Simone&lt;br /&gt;
&lt;br /&gt;
:* [http://books.google.com/books?id=baopCOstm_kC&amp;amp;pg=PA29&amp;amp;lpg=PA29&amp;amp;dq=creating+software+for+CRC+cards&amp;amp;source=bl&amp;amp;ots=hABGQbbmXV&amp;amp;sig=CTHPtCN1GmZEyTAIPWvKE--8-M4&amp;amp;hl=en&amp;amp;ei=7ReaTISDKYL68Aadtq08&amp;amp;sa=X&amp;amp;oi=book_result&amp;amp;ct=result&amp;amp;resnum=9&amp;amp;ved=0CEsQ6AEwCDgK#v=onepage&amp;amp;q&amp;amp;f=false Using CRC Cards: An Informal Approach to Object-Oriented Development]&lt;br /&gt;
:* [http://www.agilemodeling.com/artifacts/crcModel.htm Modelling CRC Cards]&lt;br /&gt;
&lt;br /&gt;
:* [http://www.excelsoftware.com/quickcrcwin.html Quick CRC]&lt;/div&gt;</summary>
		<author><name>Dragon9786</name></author>
	</entry>
</feed>