<?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=Nnmodak</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=Nnmodak"/>
	<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=Special:Contributions/Nnmodak"/>
	<updated>2026-05-09T06:03:57Z</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_2007/wiki3_6_pm&amp;diff=9724</id>
		<title>CSC/ECE 517 Fall 2007/wiki3 6 pm</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2007/wiki3_6_pm&amp;diff=9724"/>
		<updated>2007-11-20T02:52:16Z</updated>

		<summary type="html">&lt;p&gt;Nnmodak: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''Take the Controller pattern (which we did not cover in class) and catalog the information on it available on the Web. Find good descriptions and good, concise, understandable examples. Tell which you consider the best to present to a class.''&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
=Design Patterns=&lt;br /&gt;
A [http://en.wikipedia.org/wiki/Design_pattern_%28computer_science%29 Design Pattern] refers to a named description of a problem and a solution that can be applied in different contexts. Patterns are ''proven solutions to common problems''.&lt;br /&gt;
&lt;br /&gt;
A pattern addresses a recurring design problem that arises in specific design situations and presents a solution to it. This is done by defining a set of rules which describes how to solve the problem at hand.&lt;br /&gt;
&lt;br /&gt;
==GRASP Patterns==&lt;br /&gt;
[http://en.wikipedia.org/wiki/GRASP_(Object_Oriented_Design) GRASP] refers to '''G'''eneral '''R'''esponsibility '''A'''ssignment '''S'''oftware '''P'''atterns. It includes a systematic approach to [http://en.wikipedia.org/wiki/Object_oriented_design Object Oriented Design], while assigning responsibilities to classes.&lt;br /&gt;
&lt;br /&gt;
GRASP Patterns are more of responsibility driven design. &lt;br /&gt;
&lt;br /&gt;
Responsibilities of an Object include two types : ''Knowing'' and ''Doing''&lt;br /&gt;
&lt;br /&gt;
''Doing'' responsibilities of an object include:&lt;br /&gt;
&lt;br /&gt;
*Doing something itself, such as creating an object or doing a calculation&lt;br /&gt;
*Initiating action in other objects&lt;br /&gt;
*Controlling and coordinating activities in other objects&lt;br /&gt;
&lt;br /&gt;
''Knowing'' responsibilities of an object include:&lt;br /&gt;
&lt;br /&gt;
*Knowing about private encapsulated data &lt;br /&gt;
*Knowing about related objects&lt;br /&gt;
*Knowing about things it can derive or calculate&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The GRASP Patterns include:&lt;br /&gt;
* Information Expert&lt;br /&gt;
* Creator&lt;br /&gt;
* Controller&lt;br /&gt;
* Low Coupling&lt;br /&gt;
* High Cohesion&lt;br /&gt;
* Polymorphism&lt;br /&gt;
* Pure Fabrication&lt;br /&gt;
* Indirection&lt;br /&gt;
* Protected Variations&lt;br /&gt;
&lt;br /&gt;
Some of these, such as &amp;quot;Low Coupling&amp;quot; and &amp;quot;High Cohesion&amp;quot; are merely good design principles, and not design patterns.&lt;br /&gt;
&lt;br /&gt;
=The Controller Pattern=&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
The '''Controller pattern''' addresses the question: ''Who handles a system event?'' It assigns responsibilities for handling system events to different objects.&lt;br /&gt;
&lt;br /&gt;
Sometimes, an event is initiated from an external source. A class receives the event, but it may not handle the event. These events should be handled by classes representing one of the following choices:&lt;br /&gt;
* A class that represents the ''overall system'', device, or subsystem (facade controller).&lt;br /&gt;
* A class that represents a ''use case scenario'' within which the system event occurs. These are often named &amp;lt;usecasename&amp;gt;Handler, &amp;lt;usecasename&amp;gt;Controller, &amp;lt;usecasename&amp;gt;Manager,and so forth.&lt;br /&gt;
&lt;br /&gt;
To choose between facade and use-case controllers:&lt;br /&gt;
&lt;br /&gt;
1. The ''Facade controller'' is suitable when there are few system events.&lt;br /&gt;
&lt;br /&gt;
2. The ''Use-case controller'' is applicable when there are many system events and the facade controller would have become too large  &lt;br /&gt;
and incohesive.&lt;br /&gt;
&lt;br /&gt;
Wikipedia succinctly states: ''&amp;quot;The [http://en.wikipedia.org/wiki/GRASP_(Object_Oriented_Design) Controller] pattern assigns the responsibility of dealing with system events to a non-UI class that represent the overall system or a use case scenario. A use case controller should be used to deal with all system events of a use case, and may be used for more than one use case (for instance, for use cases Create User and Delete User, one can have one UserController, instead of two separate use case controllers)&amp;quot;''&lt;br /&gt;
&lt;br /&gt;
==Benefits==&lt;br /&gt;
&lt;br /&gt;
*''Reuse'' of domain layer software by plugging in various interfaces&lt;br /&gt;
*It is possible to ''control'' out-of-sequence system events&lt;br /&gt;
&lt;br /&gt;
== Controller vs MVC ==&lt;br /&gt;
&lt;br /&gt;
This page disambiguates the MVC part as well:&lt;br /&gt;
[http://fredrik.nsquared2.com/ViewPost.aspx?PostId=420 Controller Pattern and MVC]&lt;br /&gt;
&lt;br /&gt;
=Examples=&lt;br /&gt;
&lt;br /&gt;
==Example 1==&lt;br /&gt;
&lt;br /&gt;
[http://www.augustana.ab.ca/~mohrj/courses/2003.fall/csc220/lecture_notes/responsibilities.html Reference 1] contains an excellent description of the controller pattern. &lt;br /&gt;
&lt;br /&gt;
  The controller is &amp;quot;A non-user interface object responsible for receiving or handling a system event, and that defines the method &lt;br /&gt;
  for the system operation&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
*A system event is said to be an event generated by an &amp;quot;external actor&amp;quot;&lt;br /&gt;
&lt;br /&gt;
*A system operation refers to the response of the system to a system event. &lt;br /&gt;
&lt;br /&gt;
[[Image:controller6.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The figure below shows allocation of different operations&lt;br /&gt;
[[Image:controller4.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:controller5.jpg]]&lt;br /&gt;
&lt;br /&gt;
== Example 2 ==&lt;br /&gt;
The game of [http://www.academic.marist.edu/~jzbv/SoftwareDevelopment/GRASP.ppt Monopoly] is an excellent example of a controller pattern. Actors, such as the human player in Monopoly, generate UI events (such as clicking a button with a mouse to play a game or make a move).  The UI software objects (such as a JFrame window and a JButton) must process the event and cause the game to play.   When objects in the UI layer pick up an event, they must delegate the request to an object in the domain layer.&lt;br /&gt;
&lt;br /&gt;
The problem in this case can be formulated as follows:&lt;br /&gt;
What first object beyond the UI layer should receive the message from the UI layer?&lt;br /&gt;
&lt;br /&gt;
As per the controller pattern the solution is as follows:&lt;br /&gt;
Assign the responsibility to an object representing either of following:&lt;br /&gt;
- Represents the overall “system” – a root object&lt;br /&gt;
- Represents a use case scenario within which the system operation occurs.&lt;br /&gt;
&lt;br /&gt;
[[Image:monopoly.jpg]]&lt;br /&gt;
&lt;br /&gt;
==Example 3==&lt;br /&gt;
This article contains an [http://www.davidhayden.com/blog/dave/archive/2004/12/10/680.aspx E-Commerce example] of the Controller Pattern. The author classifies controllers as '''Use case Controllers''' and '''Facade Controllers'''. &lt;br /&gt;
&lt;br /&gt;
Use case controllers are useful to handle messages from the User Interface Layer  when there is little coupling between messages. A facade controller to handle all messages will not suffice in this case. &lt;br /&gt;
&lt;br /&gt;
The E-Commerce application in the example considers the following messages:&lt;br /&gt;
&lt;br /&gt;
    Get Categories&lt;br /&gt;
    Get Product in Category X&lt;br /&gt;
    Get Items in Shopping Cart&lt;br /&gt;
    Add Item to Shopping Cart&lt;br /&gt;
&lt;br /&gt;
The first 2 messages are related to a ProductCatalog to ProductCatalogHandler and the last 2 messages are related to the shopper's cart to ShoppingCartHandler:&lt;br /&gt;
&lt;br /&gt;
    ProductCatalogHandler&lt;br /&gt;
          -Get Categories&lt;br /&gt;
          -Get Product in Category X&lt;br /&gt;
    ShoppingCartHandler&lt;br /&gt;
          -Get Items in Shopping Cart&lt;br /&gt;
          -Add Item to Shopping Cart&lt;br /&gt;
&lt;br /&gt;
ProductCatalogHandler and ShoppingCartHandler are highly cohesive, embodied by the Controller Pattern.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Example 4==&lt;br /&gt;
&lt;br /&gt;
[http://209.85.165.104/search?q=cache:Mgu-Um9Lx1sJ:www.soc.napier.ac.uk/module.php3%3Fop%3Dgetresource%26cloaking%3Dno%26resourceid%3D5938601+controller+pattern+GRASP&amp;amp;hl=en&amp;amp;ct=clnk&amp;amp;cd=15&amp;amp;gl=us  Reference 6] contains the following solution to the problem of who handles the system event: &amp;quot;If a program receives events from external sources other than its graphical interface, add an event class to decouple the event source(s) from the objects that actually handle the events.&amp;quot; &lt;br /&gt;
&lt;br /&gt;
The author also mentions the benefits of using the Controller Pattern as an increased potential for reuse. It leads to decoupling &lt;br /&gt;
between the external sources of events and the internal event handlers.&lt;br /&gt;
&lt;br /&gt;
Consider the example of buying items at a supermarket. The cashier enters the items to be purchased and generates a bill for the customer to make the payment at the end of the sale. The system events include:&lt;br /&gt;
&lt;br /&gt;
  ''enterItem()''&lt;br /&gt;
  ''endSale()''&lt;br /&gt;
  ''makePayment()''&lt;br /&gt;
&lt;br /&gt;
The problem can be phrased as: Who is responsible for ''enterItem()''?&lt;br /&gt;
&lt;br /&gt;
Using the Controller Pattern to solve our problem, we can choose among the following: &lt;br /&gt;
&lt;br /&gt;
*The overall system [POST]&lt;br /&gt;
*The overall business(sub-system) [STORE]&lt;br /&gt;
*Someone in the real world who is active in the task [CASHIER]&lt;br /&gt;
*The artificial handler of all system events in the use case [BuyItemsHandler]&lt;br /&gt;
&lt;br /&gt;
[[Image:controller2.jpg]]&lt;br /&gt;
&lt;br /&gt;
The choice made should reflect high cohesion and low coupling, as shown below, in which the UI layer is decoupled from the problem domain.&lt;br /&gt;
&lt;br /&gt;
[[Image:controller.jpg]]&lt;br /&gt;
&lt;br /&gt;
==Example 5==&lt;br /&gt;
&lt;br /&gt;
This [http://codebetter.com/blogs/david.hayden/archive/2005/04/08/61648.aspx Blog] mentions some examples of the Controller Pattern in the context of blogs. It demonstrates how the controller class beyond the UI layer &amp;quot;hands off&amp;quot; the message to another domain layer object to act upon the message. &lt;br /&gt;
&lt;br /&gt;
Another related [http://davidhayden.com/blog/dave/archive/2004/11/28/648.aspx article] disambiguates between the Controller Pattern and the [http://en.wikipedia.org/wiki/Model-view-controller Model-View-Controller] Architecture. The author defines the controller as &amp;quot;the first object beyond the UI layer that is responsible for receiving or handling a system operation message&amp;quot;. As entailed above, the controller is the coordinator responsible for delegating work to other objects that actually accomplish the task at hand. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=External Links=&lt;br /&gt;
&lt;br /&gt;
1.     [http://www.amazon.com/Applying-UML-Patterns-Introduction-Object-Oriented/dp/0130925691 Applying UML and Patterns: Craig Larman]&lt;br /&gt;
&lt;br /&gt;
2.     [http://people.msoe.edu/~blessing/cs489/cs489-13ch18.pdf Grasp Design Patterns]&lt;br /&gt;
&lt;br /&gt;
3.     [http://www.galileo.cs.uwindsor.ca:8000/60-322/LectureSlides/GRASPPatterns.ppt GRASP Patterns]&lt;br /&gt;
&lt;br /&gt;
4.     [http://staff.cs.utu.fi/kurssit/Programming-III/GRASP(9).pdf GRASP Controller]&lt;br /&gt;
&lt;br /&gt;
5.     [http://web.cs.wpi.edu/~gpollice/cs4233-a05/CourseNotes/pdf/CS4233%20Class%204.pdf Controller Pattern]&lt;br /&gt;
&lt;br /&gt;
=References=&lt;br /&gt;
&lt;br /&gt;
1. [http://www.augustana.ab.ca/~mohrj/courses/2003.fall/csc220/lecture_notes/responsibilities.html GRASP Patterns]&lt;br /&gt;
&lt;br /&gt;
2. [http://en.wikipedia.org/wiki/GRASP_(Object_Oriented_Design) Wikipedia link to GRASP]&lt;br /&gt;
&lt;br /&gt;
3. [http://codebetter.com/blogs/david.hayden/archive/2005/04/08/61648.aspx Blog on GRASP Controller Pattern]&lt;br /&gt;
&lt;br /&gt;
4. [http://www.davidhayden.com/blog/dave/archive/2004/12/10/680.aspx E-Commerce example]&lt;br /&gt;
&lt;br /&gt;
5. [http://class.ee.iastate.edu/berleant/home/Courses/SoftwareEngineering/CprE486fall2004/GRASP.pdf Controller responsibility]&lt;br /&gt;
&lt;br /&gt;
6. [http://209.85.165.104/search?q=cache:Mgu-Um9Lx1sJ:www.soc.napier.ac.uk/module.php3%3Fop%3Dgetresource%26cloaking%3Dno%26resourceid%3D5938601+controller+pattern+GRASP&amp;amp;hl=en&amp;amp;ct=clnk&amp;amp;cd=15&amp;amp;gl=us Presentation on GRASP]&lt;br /&gt;
&lt;br /&gt;
7. [http://www.informit.com/content/images/0130925691/samplechapter/0130925691.pdf DESIGN MODEL: USE-CASE REALIZATIONS WITH GRASP PATTERNS]&lt;br /&gt;
&lt;br /&gt;
8. [http://www.dcs.bbk.ac.uk/~niki/lecture5.ppt Presentation on Design Patterns]&lt;br /&gt;
&lt;br /&gt;
9. [http://www.academic.marist.edu/~jzbv/SoftwareDevelopment/GRASP.ppt Monopoly Example]&lt;/div&gt;</summary>
		<author><name>Nnmodak</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2007/wiki3_6_pm&amp;diff=9721</id>
		<title>CSC/ECE 517 Fall 2007/wiki3 6 pm</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2007/wiki3_6_pm&amp;diff=9721"/>
		<updated>2007-11-20T02:46:43Z</updated>

		<summary type="html">&lt;p&gt;Nnmodak: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''Take the Controller pattern (which we did not cover in class) and catalog the information on it available on the Web. Find good descriptions and good, concise, understandable examples. Tell which you consider the best to present to a class.''&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
=Design Patterns=&lt;br /&gt;
A [http://en.wikipedia.org/wiki/Design_pattern_%28computer_science%29 Design Pattern] refers to a named description of a problem and a solution that can be applied in different contexts. Patterns are ''proven solutions to common problems''.&lt;br /&gt;
&lt;br /&gt;
A pattern addresses a recurring design problem that arises in specific design situations and presents a solution to it. This is done by defining a set of rules which describes how to solve the problem at hand.&lt;br /&gt;
&lt;br /&gt;
==GRASP Patterns==&lt;br /&gt;
[http://en.wikipedia.org/wiki/GRASP_(Object_Oriented_Design) GRASP] refers to '''G'''eneral '''R'''esponsibility '''A'''ssignment '''S'''oftware '''P'''atterns. It includes a systematic approach to [http://en.wikipedia.org/wiki/Object_oriented_design Object Oriented Design], while assigning responsibilities to classes.&lt;br /&gt;
&lt;br /&gt;
GRASP Patterns are more of responsibility driven design. &lt;br /&gt;
&lt;br /&gt;
Responsibilities of an Object include two types : ''Knowing'' and ''Doing''&lt;br /&gt;
&lt;br /&gt;
''Doing'' responsibilities of an object include:&lt;br /&gt;
&lt;br /&gt;
*Doing something itself, such as creating an object or doing a calculation&lt;br /&gt;
*Initiating action in other objects&lt;br /&gt;
*Controlling and coordinating activities in other objects&lt;br /&gt;
&lt;br /&gt;
''Knowing'' responsibilities of an object include:&lt;br /&gt;
&lt;br /&gt;
*Knowing about private encapsulated data &lt;br /&gt;
*Knowing about related objects&lt;br /&gt;
*Knowing about things it can derive or calculate&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The GRASP Patterns include:&lt;br /&gt;
* Information Expert&lt;br /&gt;
* Creator&lt;br /&gt;
* Controller&lt;br /&gt;
* Low Coupling&lt;br /&gt;
* High Cohesion&lt;br /&gt;
* Polymorphism&lt;br /&gt;
* Pure Fabrication&lt;br /&gt;
* Indirection&lt;br /&gt;
* Protected Variations&lt;br /&gt;
&lt;br /&gt;
Some of these, such as &amp;quot;Low Coupling&amp;quot; and &amp;quot;High Cohesion&amp;quot; are merely good design principles, and not design patterns.&lt;br /&gt;
&lt;br /&gt;
=The Controller Pattern=&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
The '''Controller pattern''' addresses the question: ''Who handles a system event?'' It assigns responsibilities for handling system events to different objects.&lt;br /&gt;
&lt;br /&gt;
Sometimes, an event is initiated from an external source. A class receives the event, but it may not handle the event. These events should be handled by classes representing one of the following choices:&lt;br /&gt;
* A class that represents the ''overall system'', device, or subsystem (facade controller).&lt;br /&gt;
* A class that represents a ''use case scenario'' within which the system event occurs. These are often named &amp;lt;usecasename&amp;gt;Handler, &amp;lt;usecasename&amp;gt;Controller, &amp;lt;usecasename&amp;gt;Manager,and so forth.&lt;br /&gt;
&lt;br /&gt;
To choose between facade and use-case controllers:&lt;br /&gt;
&lt;br /&gt;
1. The ''Facade controller'' is suitable when there are few system events.&lt;br /&gt;
&lt;br /&gt;
2. The ''Use-case controller'' is applicable when there are many system events and the facade controller would have become too large  &lt;br /&gt;
and incohesive.&lt;br /&gt;
&lt;br /&gt;
Wikipedia succinctly states: ''&amp;quot;The [http://en.wikipedia.org/wiki/GRASP_(Object_Oriented_Design) Controller] pattern assigns the responsibility of dealing with system events to a non-UI class that represent the overall system or a use case scenario. A use case controller should be used to deal with all system events of a use case, and may be used for more than one use case (for instance, for use cases Create User and Delete User, one can have one UserController, instead of two separate use case controllers)&amp;quot;''&lt;br /&gt;
&lt;br /&gt;
==Benefits==&lt;br /&gt;
&lt;br /&gt;
*''Reuse'' of domain layer software by plugging in various interfaces&lt;br /&gt;
*It is possible to ''control'' out-of-sequence system events&lt;br /&gt;
&lt;br /&gt;
=Examples=&lt;br /&gt;
&lt;br /&gt;
==Example 1==&lt;br /&gt;
&lt;br /&gt;
[http://www.augustana.ab.ca/~mohrj/courses/2003.fall/csc220/lecture_notes/responsibilities.html Reference 1] contains an excellent description of the controller pattern. &lt;br /&gt;
&lt;br /&gt;
  The controller is &amp;quot;A non-user interface object responsible for receiving or handling a system event, and that defines the method &lt;br /&gt;
  for the system operation&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
*A system event is said to be an event generated by an &amp;quot;external actor&amp;quot;&lt;br /&gt;
&lt;br /&gt;
*A system operation refers to the response of the system to a system event. &lt;br /&gt;
&lt;br /&gt;
[[Image:controller6.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The figure below shows allocation of different operations&lt;br /&gt;
[[Image:controller4.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:controller5.jpg]]&lt;br /&gt;
&lt;br /&gt;
== Example 2 ==&lt;br /&gt;
The game of [http://www.academic.marist.edu/~jzbv/SoftwareDevelopment/GRASP.ppt Monopoly] is an excellent example of a controller pattern. Actors, such as the human player in Monopoly, generate UI events (such as clicking a button with a mouse to play a game or make a move).  The UI software objects (such as a JFrame window and a JButton) must process the event and cause the game to play.   When objects in the UI layer pick up an event, they must delegate the request to an object in the domain layer.&lt;br /&gt;
&lt;br /&gt;
The problem in this case can be formulated as follows:&lt;br /&gt;
What first object beyond the UI layer should receive the message from the UI layer?&lt;br /&gt;
&lt;br /&gt;
As per the controller pattern the solution is as follows:&lt;br /&gt;
Assign the responsibility to an object representing either of following:&lt;br /&gt;
- Represents the overall “system” – a root object&lt;br /&gt;
- Represents a use case scenario within which the system operation occurs.&lt;br /&gt;
&lt;br /&gt;
[[Image:monopoly.jpg]]&lt;br /&gt;
&lt;br /&gt;
==Example 3==&lt;br /&gt;
This article contains an [http://www.davidhayden.com/blog/dave/archive/2004/12/10/680.aspx E-Commerce example] of the Controller Pattern. The author classifies controllers as '''Use case Controllers''' and '''Facade Controllers'''. &lt;br /&gt;
&lt;br /&gt;
Use case controllers are useful to handle messages from the User Interface Layer  when there is little coupling between messages. A facade controller to handle all messages will not suffice in this case. &lt;br /&gt;
&lt;br /&gt;
The E-Commerce application in the example considers the following messages:&lt;br /&gt;
&lt;br /&gt;
    Get Categories&lt;br /&gt;
    Get Product in Category X&lt;br /&gt;
    Get Items in Shopping Cart&lt;br /&gt;
    Add Item to Shopping Cart&lt;br /&gt;
&lt;br /&gt;
The first 2 messages are related to a ProductCatalog to ProductCatalogHandler and the last 2 messages are related to the shopper's cart to ShoppingCartHandler:&lt;br /&gt;
&lt;br /&gt;
    ProductCatalogHandler&lt;br /&gt;
          -Get Categories&lt;br /&gt;
          -Get Product in Category X&lt;br /&gt;
    ShoppingCartHandler&lt;br /&gt;
          -Get Items in Shopping Cart&lt;br /&gt;
          -Add Item to Shopping Cart&lt;br /&gt;
&lt;br /&gt;
ProductCatalogHandler and ShoppingCartHandler are highly cohesive, embodied by the Controller Pattern.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Example 4==&lt;br /&gt;
&lt;br /&gt;
[http://209.85.165.104/search?q=cache:Mgu-Um9Lx1sJ:www.soc.napier.ac.uk/module.php3%3Fop%3Dgetresource%26cloaking%3Dno%26resourceid%3D5938601+controller+pattern+GRASP&amp;amp;hl=en&amp;amp;ct=clnk&amp;amp;cd=15&amp;amp;gl=us  Reference 6] contains the following solution to the problem of who handles the system event: &amp;quot;If a program receives events from external sources other than its graphical interface, add an event class to decouple the event source(s) from the objects that actually handle the events.&amp;quot; &lt;br /&gt;
&lt;br /&gt;
The author also mentions the benefits of using the Controller Pattern as an increased potential for reuse. It leads to decoupling &lt;br /&gt;
between the external sources of events and the internal event handlers.&lt;br /&gt;
&lt;br /&gt;
Consider the example of buying items at a supermarket. The cashier enters the items to be purchased and generates a bill for the customer to make the payment at the end of the sale. The system events include:&lt;br /&gt;
&lt;br /&gt;
  ''enterItem()''&lt;br /&gt;
  ''endSale()''&lt;br /&gt;
  ''makePayment()''&lt;br /&gt;
&lt;br /&gt;
The problem can be phrased as: Who is responsible for ''enterItem()''?&lt;br /&gt;
&lt;br /&gt;
Using the Controller Pattern to solve our problem, we can choose among the following: &lt;br /&gt;
&lt;br /&gt;
*The overall system [POST]&lt;br /&gt;
*The overall business(sub-system) [STORE]&lt;br /&gt;
*Someone in the real world who is active in the task [CASHIER]&lt;br /&gt;
*The artificial handler of all system events in the use case [BuyItemsHandler]&lt;br /&gt;
&lt;br /&gt;
[[Image:controller2.jpg]]&lt;br /&gt;
&lt;br /&gt;
The choice made should reflect high cohesion and low coupling, as shown below, in which the UI layer is decoupled from the problem domain.&lt;br /&gt;
&lt;br /&gt;
[[Image:controller.jpg]]&lt;br /&gt;
&lt;br /&gt;
==Example 5==&lt;br /&gt;
&lt;br /&gt;
This [http://codebetter.com/blogs/david.hayden/archive/2005/04/08/61648.aspx Blog] mentions some examples of the Controller Pattern in the context of blogs. It demonstrates how the controller class beyond the UI layer &amp;quot;hands off&amp;quot; the message to another domain layer object to act upon the message. &lt;br /&gt;
&lt;br /&gt;
Another related [http://davidhayden.com/blog/dave/archive/2004/11/28/648.aspx article] disambiguates between the Controller Pattern and the [http://en.wikipedia.org/wiki/Model-view-controller Model-View-Controller] Architecture. The author defines the controller as &amp;quot;the first object beyond the UI layer that is responsible for receiving or handling a system operation message&amp;quot;. As entailed above, the controller is the coordinator responsible for delegating work to other objects that actually accomplish the task at hand. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=External Links=&lt;br /&gt;
&lt;br /&gt;
1.     [http://www.amazon.com/Applying-UML-Patterns-Introduction-Object-Oriented/dp/0130925691 Applying UML and Patterns: Craig Larman]&lt;br /&gt;
&lt;br /&gt;
2.     [http://people.msoe.edu/~blessing/cs489/cs489-13ch18.pdf Grasp Design Patterns]&lt;br /&gt;
&lt;br /&gt;
3.     [http://www.galileo.cs.uwindsor.ca:8000/60-322/LectureSlides/GRASPPatterns.ppt GRASP Patterns]&lt;br /&gt;
&lt;br /&gt;
4.     [http://staff.cs.utu.fi/kurssit/Programming-III/GRASP(9).pdf GRASP Controller]&lt;br /&gt;
&lt;br /&gt;
=References=&lt;br /&gt;
&lt;br /&gt;
1. [http://www.augustana.ab.ca/~mohrj/courses/2003.fall/csc220/lecture_notes/responsibilities.html GRASP Patterns]&lt;br /&gt;
&lt;br /&gt;
2. [http://en.wikipedia.org/wiki/GRASP_(Object_Oriented_Design) Wikipedia link to GRASP]&lt;br /&gt;
&lt;br /&gt;
3. [http://codebetter.com/blogs/david.hayden/archive/2005/04/08/61648.aspx Blog on GRASP Controller Pattern]&lt;br /&gt;
&lt;br /&gt;
4. [http://www.davidhayden.com/blog/dave/archive/2004/12/10/680.aspx E-Commerce example]&lt;br /&gt;
&lt;br /&gt;
5. [http://class.ee.iastate.edu/berleant/home/Courses/SoftwareEngineering/CprE486fall2004/GRASP.pdf Controller responsibility]&lt;br /&gt;
&lt;br /&gt;
6. [http://209.85.165.104/search?q=cache:Mgu-Um9Lx1sJ:www.soc.napier.ac.uk/module.php3%3Fop%3Dgetresource%26cloaking%3Dno%26resourceid%3D5938601+controller+pattern+GRASP&amp;amp;hl=en&amp;amp;ct=clnk&amp;amp;cd=15&amp;amp;gl=us Presentation on GRASP]&lt;br /&gt;
&lt;br /&gt;
7. [http://www.informit.com/content/images/0130925691/samplechapter/0130925691.pdf DESIGN MODEL: USE-CASE REALIZATIONS WITH GRASP PATTERNS]&lt;br /&gt;
&lt;br /&gt;
8. [http://www.dcs.bbk.ac.uk/~niki/lecture5.ppt Presentation on Design Patterns]&lt;br /&gt;
&lt;br /&gt;
9. [http://www.academic.marist.edu/~jzbv/SoftwareDevelopment/GRASP.ppt Monopoly Example]&lt;/div&gt;</summary>
		<author><name>Nnmodak</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2007/wiki3_6_pm&amp;diff=9584</id>
		<title>CSC/ECE 517 Fall 2007/wiki3 6 pm</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2007/wiki3_6_pm&amp;diff=9584"/>
		<updated>2007-11-20T00:04:30Z</updated>

		<summary type="html">&lt;p&gt;Nnmodak: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''Take the Controller pattern (which we did not cover in class) and catalog the information on it available on the Web. Find good descriptions and good, concise, understandable examples. Tell which you consider the best to present to a class.''&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
=Design Patterns=&lt;br /&gt;
A [http://en.wikipedia.org/wiki/Design_pattern_%28computer_science%29 Design Pattern] refers to a named description of a problem and a solution that can be applied in different contexts. Patterns are ''proven solutions to common problems''.&lt;br /&gt;
&lt;br /&gt;
A pattern addresses a recurring design problem that arises in specific design situations and presents a solution to it. This is done by defining a set of rules which describes how to solve the problem at hand.&lt;br /&gt;
&lt;br /&gt;
==GRASP Patterns==&lt;br /&gt;
[http://en.wikipedia.org/wiki/GRASP_(Object_Oriented_Design) GRASP] refers to '''G'''eneral '''R'''esponsibility '''A'''ssignment '''S'''oftware '''P'''atterns. It includes a systematic approach to [http://en.wikipedia.org/wiki/Object_oriented_design Object Oriented Design], while assigning responsibilities to classes.&lt;br /&gt;
&lt;br /&gt;
GRASP Patterns are more of responsibility driven design&lt;br /&gt;
Responsibilities of an Object include two types : Knowing and Doing&lt;br /&gt;
Doing responsibilities of an object include:&lt;br /&gt;
1.Doing something itself, such as creating an object or doing a calculation&lt;br /&gt;
2.Initiating action in other objects&lt;br /&gt;
3.Controlling and coordinating activities in other objects&lt;br /&gt;
&lt;br /&gt;
Knowing responsibilities of an object include:&lt;br /&gt;
1.Knowing about private encapsulated data (know thyself, presume not God to scan)&lt;br /&gt;
2.Knowing about related objects&lt;br /&gt;
3.Knowing about things it can derive or calculate&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The GRASP Patterns include:&lt;br /&gt;
* Information Expert&lt;br /&gt;
* Creator&lt;br /&gt;
* Controller&lt;br /&gt;
* Low Coupling&lt;br /&gt;
* High Cohesion&lt;br /&gt;
* Polymorphism&lt;br /&gt;
* Pure Fabrication&lt;br /&gt;
* Indirection&lt;br /&gt;
* Protected Variations&lt;br /&gt;
&lt;br /&gt;
Some of these, such as &amp;quot;Low Coupling&amp;quot; and &amp;quot;High Cohesion&amp;quot; are merely good design principles, and not design patterns.&lt;br /&gt;
&lt;br /&gt;
=The Controller Pattern=&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
The '''Controller pattern''' addresses the question: ''Who handles a system event?'' It assigns responsibilities for handling system events to different objects.&lt;br /&gt;
&lt;br /&gt;
Sometimes, an event is initiated from an external source. A class receives the event, but it may not handle the event. These events should be handled by classes representing one of the following choices:&lt;br /&gt;
* A class that represents the ''overall system'', device, or subsystem (facade controller).&lt;br /&gt;
* A class that represents a ''use case scenario'' within which the system event occurs. These are often named &amp;lt;usecasename&amp;gt;Handler, &amp;lt;usecasename&amp;gt;Controller, &amp;lt;usecasename&amp;gt;Manager,and so forth.&lt;br /&gt;
&lt;br /&gt;
To choose between facade and use-case controllers:&lt;br /&gt;
&lt;br /&gt;
1. The ''Facade controller'' is suitable when there are few system events.&lt;br /&gt;
&lt;br /&gt;
2. The ''Use-case controller'' is applicable when there are many system events and the facade controller would have become too large  &lt;br /&gt;
and incohesive.&lt;br /&gt;
&lt;br /&gt;
Wikipedia succinctly states: ''&amp;quot;The [http://en.wikipedia.org/wiki/GRASP_(Object_Oriented_Design) Controller] pattern assigns the responsibility of dealing with system events to a non-UI class that represent the overall system or a use case scenario. A use case controller should be used to deal with all system events of a use case, and may be used for more than one use case (for instance, for use cases Create User and Delete User, one can have one UserController, instead of two separate use case controllers)&amp;quot;''&lt;br /&gt;
&lt;br /&gt;
==Benefits==&lt;br /&gt;
&lt;br /&gt;
*''Reuse'' of domain layer software by plugging in various interfaces&lt;br /&gt;
*It is possible to ''control'' out-of-sequence system events&lt;br /&gt;
&lt;br /&gt;
=Examples=&lt;br /&gt;
&lt;br /&gt;
==Example 1==&lt;br /&gt;
&lt;br /&gt;
[http://www.augustana.ab.ca/~mohrj/courses/2003.fall/csc220/lecture_notes/responsibilities.html Reference 1] contains an excellent description of the controller pattern. &lt;br /&gt;
&lt;br /&gt;
  The controller is &amp;quot;A non-user interface object responsible for receiving or handling a system event, and that defines the method &lt;br /&gt;
  for the system operation&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
*A system event is said to be an event generated by an &amp;quot;external actor&amp;quot;&lt;br /&gt;
&lt;br /&gt;
*A system operation refers to the response of the system to a system event. &lt;br /&gt;
&lt;br /&gt;
[[Image:controller6.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The figure below shows allocation of different operations&lt;br /&gt;
[[Image:controller4.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:controller5.jpg]]&lt;br /&gt;
&lt;br /&gt;
== Example 2 ==&lt;br /&gt;
The game of [http://www.academic.marist.edu/~jzbv/SoftwareDevelopment/GRASP.ppt Monopoly] is an excellent example of a controller pattern. Actors, such as the human player in Monopoly, generate UI events (such as clicking a button with a mouse to play a game or make a move).  The UI software objects (such as a JFrame window and a JButton) must process the event and cause the game to play.   When objects in the UI layer pick up an event, they must delegate the request to an object in the domain layer.&lt;br /&gt;
&lt;br /&gt;
The problem in this case can be formulated as follows:&lt;br /&gt;
What first object beyond the UI layer should receive the message from the UI layer?&lt;br /&gt;
&lt;br /&gt;
As per the controller pattern the solution is as follows:&lt;br /&gt;
Assign the responsibility to an object representing either of following:&lt;br /&gt;
- Represents the overall “system” – a root object&lt;br /&gt;
- Represents a use case scenario within which the system operation occurs.&lt;br /&gt;
&lt;br /&gt;
[[Image:monopoly.jpg]]&lt;br /&gt;
&lt;br /&gt;
==Example 3==&lt;br /&gt;
This article contains an [http://www.davidhayden.com/blog/dave/archive/2004/12/10/680.aspx E-Commerce example] of the Controller Pattern. The author classifies controllers as '''Use case Controllers''' and '''Facade Controllers'''. &lt;br /&gt;
&lt;br /&gt;
Use case controllers are useful to handle messages from the User Interface Layer  when there is little coupling between messages. A facade controller to handle all messages will not suffice in this case. &lt;br /&gt;
&lt;br /&gt;
The E-Commerce application in the example considers the following messages:&lt;br /&gt;
&lt;br /&gt;
    Get Categories&lt;br /&gt;
    Get Product in Category X&lt;br /&gt;
    Get Items in Shopping Cart&lt;br /&gt;
    Add Item to Shopping Cart&lt;br /&gt;
&lt;br /&gt;
The first 2 messages are related to a ProductCatalog to ProductCatalogHandler and the last 2 messages are related to the shopper's cart to ShoppingCartHandler:&lt;br /&gt;
&lt;br /&gt;
    ProductCatalogHandler&lt;br /&gt;
          -Get Categories&lt;br /&gt;
          -Get Product in Category X&lt;br /&gt;
    ShoppingCartHandler&lt;br /&gt;
          -Get Items in Shopping Cart&lt;br /&gt;
          -Add Item to Shopping Cart&lt;br /&gt;
&lt;br /&gt;
ProductCatalogHandler and ShoppingCartHandler are highly cohesive, embodied by the Controller Pattern.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Example 4==&lt;br /&gt;
&lt;br /&gt;
[http://209.85.165.104/search?q=cache:Mgu-Um9Lx1sJ:www.soc.napier.ac.uk/module.php3%3Fop%3Dgetresource%26cloaking%3Dno%26resourceid%3D5938601+controller+pattern+GRASP&amp;amp;hl=en&amp;amp;ct=clnk&amp;amp;cd=15&amp;amp;gl=us  Reference 6] contains the following solution to the problem of who handles the system event: &amp;quot;If a program receives events from external sources other than its graphical interface, add an event class to decouple the event source(s) from the objects that actually handle the events.&amp;quot; &lt;br /&gt;
&lt;br /&gt;
The author also mentions the benefits of using the Controller Pattern as an increased potential for reuse. It leads to decoupling &lt;br /&gt;
between the external sources of events and the internal event handlers.&lt;br /&gt;
&lt;br /&gt;
Consider the example of buying items at a supermarket. The cashier enters the items to be purchased and generates a bill for the customer to make the payment at the end of the sale. The system events include:&lt;br /&gt;
&lt;br /&gt;
  ''enterItem()''&lt;br /&gt;
  ''endSale()''&lt;br /&gt;
  ''makePayment()''&lt;br /&gt;
&lt;br /&gt;
The problem can be phrased as: Who is responsible for ''enterItem()''?&lt;br /&gt;
&lt;br /&gt;
Using the Controller Pattern to solve our problem, we can choose among the following: &lt;br /&gt;
&lt;br /&gt;
*The overall system [POST]&lt;br /&gt;
*The overall business(sub-system) [STORE]&lt;br /&gt;
*Someone in the real world who is active in the task [CASHIER]&lt;br /&gt;
*The artificial handler of all system events in the use case [BuyItemsHandler]&lt;br /&gt;
&lt;br /&gt;
[[Image:controller2.jpg]]&lt;br /&gt;
&lt;br /&gt;
The choice made should reflect high cohesion and low coupling, as shown below, in which the UI layer is decoupled from the problem domain.&lt;br /&gt;
&lt;br /&gt;
[[Image:controller.jpg]]&lt;br /&gt;
&lt;br /&gt;
==Example 5==&lt;br /&gt;
&lt;br /&gt;
This [http://codebetter.com/blogs/david.hayden/archive/2005/04/08/61648.aspx Blog] mentions some examples of the Controller Pattern in the context of blogs. It demonstrates how the controller class beyond the UI layer &amp;quot;hands off&amp;quot; the message to another domain layer object to act upon the message. &lt;br /&gt;
&lt;br /&gt;
Another related [http://davidhayden.com/blog/dave/archive/2004/11/28/648.aspx article] disambiguates between the Controller Pattern and the [http://en.wikipedia.org/wiki/Model-view-controller Model-View-Controller] Architecture. The author defines the controller as &amp;quot;the first object beyond the UI layer that is responsible for receiving or handling a system operation message&amp;quot;. As entailed above, the controller is the coordinator responsible for delegating work to other objects that actually accomplish the task at hand. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=See Also=&lt;br /&gt;
&lt;br /&gt;
1.     [http://www.amazon.com/Applying-UML-Patterns-Introduction-Object-Oriented/dp/0130925691 Applying UML and Patterns: Craig Larman]&lt;br /&gt;
&lt;br /&gt;
2.     [http://people.msoe.edu/~blessing/cs489/cs489-13ch18.pdf Grasp Design Patterns]&lt;br /&gt;
&lt;br /&gt;
3.     [http://www.galileo.cs.uwindsor.ca:8000/60-322/LectureSlides/GRASPPatterns.ppt GRASP Patterns]&lt;br /&gt;
=References=&lt;br /&gt;
&lt;br /&gt;
1. [http://www.augustana.ab.ca/~mohrj/courses/2003.fall/csc220/lecture_notes/responsibilities.html GRASP Patterns]&lt;br /&gt;
&lt;br /&gt;
2. [http://en.wikipedia.org/wiki/GRASP_(Object_Oriented_Design) Wikipedia link to GRASP]&lt;br /&gt;
&lt;br /&gt;
3. [http://codebetter.com/blogs/david.hayden/archive/2005/04/08/61648.aspx Blog on GRASP Controller Pattern]&lt;br /&gt;
&lt;br /&gt;
4. [http://www.davidhayden.com/blog/dave/archive/2004/12/10/680.aspx E-Commerce example]&lt;br /&gt;
&lt;br /&gt;
5. [http://class.ee.iastate.edu/berleant/home/Courses/SoftwareEngineering/CprE486fall2004/GRASP.pdf Controller responsibility]&lt;br /&gt;
&lt;br /&gt;
6. [http://209.85.165.104/search?q=cache:Mgu-Um9Lx1sJ:www.soc.napier.ac.uk/module.php3%3Fop%3Dgetresource%26cloaking%3Dno%26resourceid%3D5938601+controller+pattern+GRASP&amp;amp;hl=en&amp;amp;ct=clnk&amp;amp;cd=15&amp;amp;gl=us Presentation on GRASP]&lt;br /&gt;
&lt;br /&gt;
7. [http://www.informit.com/content/images/0130925691/samplechapter/0130925691.pdf DESIGN MODEL: USE-CASE REALIZATIONS WITH GRASP PATTERNS]&lt;br /&gt;
&lt;br /&gt;
8. [http://www.dcs.bbk.ac.uk/~niki/lecture5.ppt Presentation on Design Patterns]&lt;br /&gt;
&lt;br /&gt;
9. [http://www.academic.marist.edu/~jzbv/SoftwareDevelopment/GRASP.ppt Monopoly Example]&lt;/div&gt;</summary>
		<author><name>Nnmodak</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2007/wiki3_6_pm&amp;diff=9582</id>
		<title>CSC/ECE 517 Fall 2007/wiki3 6 pm</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2007/wiki3_6_pm&amp;diff=9582"/>
		<updated>2007-11-20T00:04:04Z</updated>

		<summary type="html">&lt;p&gt;Nnmodak: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''Take the Controller pattern (which we did not cover in class) and catalog the information on it available on the Web. Find good descriptions and good, concise, understandable examples. Tell which you consider the best to present to a class.''&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
=Design Patterns=&lt;br /&gt;
A [http://en.wikipedia.org/wiki/Design_pattern_%28computer_science%29 Design Pattern] refers to a named description of a problem and a solution that can be applied in different contexts. Patterns are ''proven solutions to common problems''.&lt;br /&gt;
&lt;br /&gt;
A pattern addresses a recurring design problem that arises in specific design situations and presents a solution to it. This is done by defining a set of rules which describes how to solve the problem at hand.&lt;br /&gt;
&lt;br /&gt;
==GRASP Patterns==&lt;br /&gt;
[http://en.wikipedia.org/wiki/GRASP_(Object_Oriented_Design) GRASP] refers to '''G'''eneral '''R'''esponsibility '''A'''ssignment '''S'''oftware '''P'''atterns. It includes a systematic approach to [http://en.wikipedia.org/wiki/Object_oriented_design Object Oriented Design], while assigning responsibilities to classes.&lt;br /&gt;
&lt;br /&gt;
GRASP Patterns are more of responsibility driven design&lt;br /&gt;
Responsibilities of an Object include two types : Knowing and Doing&lt;br /&gt;
Doing responsibilities of an object include:&lt;br /&gt;
1.Doing something itself, such as creating an object or doing a calculation&lt;br /&gt;
2.Initiating action in other objects&lt;br /&gt;
3.Controlling and coordinating activities in other objects&lt;br /&gt;
&lt;br /&gt;
Knowing responsibilities of an object include:&lt;br /&gt;
1.Knowing about private encapsulated data (know thyself, presume not God to scan)&lt;br /&gt;
2.Knowing about related objects&lt;br /&gt;
3.Knowing about things it can derive or calculate&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The GRASP Patterns include:&lt;br /&gt;
* Information Expert&lt;br /&gt;
* Creator&lt;br /&gt;
* Controller&lt;br /&gt;
* Low Coupling&lt;br /&gt;
* High Cohesion&lt;br /&gt;
* Polymorphism&lt;br /&gt;
* Pure Fabrication&lt;br /&gt;
* Indirection&lt;br /&gt;
* Protected Variations&lt;br /&gt;
&lt;br /&gt;
Some of these, such as &amp;quot;Low Coupling&amp;quot; and &amp;quot;High Cohesion&amp;quot; are merely good design principles, and not design patterns.&lt;br /&gt;
&lt;br /&gt;
=The Controller Pattern=&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
The '''Controller pattern''' addresses the question: ''Who handles a system event?'' It assigns responsibilities for handling system events to different objects.&lt;br /&gt;
&lt;br /&gt;
Sometimes, an event is initiated from an external source. A class receives the event, but it may not handle the event. These events should be handled by classes representing one of the following choices:&lt;br /&gt;
* A class that represents the ''overall system'', device, or subsystem (facade controller).&lt;br /&gt;
* A class that represents a ''use case scenario'' within which the system event occurs. These are often named &amp;lt;usecasename&amp;gt;Handler, &amp;lt;usecasename&amp;gt;Controller, &amp;lt;usecasename&amp;gt;Manager,and so forth.&lt;br /&gt;
&lt;br /&gt;
To choose between facade and use-case controllers:&lt;br /&gt;
&lt;br /&gt;
1. The ''Facade controller'' is suitable when there are few system events.&lt;br /&gt;
&lt;br /&gt;
2. The ''Use-case controller'' is applicable when there are many system events and the facade controller would have become too large  &lt;br /&gt;
and incohesive.&lt;br /&gt;
&lt;br /&gt;
Wikipedia succinctly states: ''&amp;quot;The [http://en.wikipedia.org/wiki/GRASP_(Object_Oriented_Design) Controller] pattern assigns the responsibility of dealing with system events to a non-UI class that represent the overall system or a use case scenario. A use case controller should be used to deal with all system events of a use case, and may be used for more than one use case (for instance, for use cases Create User and Delete User, one can have one UserController, instead of two separate use case controllers)&amp;quot;''&lt;br /&gt;
&lt;br /&gt;
==Benefits==&lt;br /&gt;
&lt;br /&gt;
*''Reuse'' of domain layer software by plugging in various interfaces&lt;br /&gt;
*It is possible to ''control'' out-of-sequence system events&lt;br /&gt;
&lt;br /&gt;
=Examples=&lt;br /&gt;
&lt;br /&gt;
==Example 1==&lt;br /&gt;
&lt;br /&gt;
[http://www.augustana.ab.ca/~mohrj/courses/2003.fall/csc220/lecture_notes/responsibilities.html Reference 1] contains an excellent description of the controller pattern. &lt;br /&gt;
&lt;br /&gt;
  The controller is &amp;quot;A non-user interface object responsible for receiving or handling a system event, and that defines the method &lt;br /&gt;
  for the system operation&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
*A system event is said to be an event generated by an &amp;quot;external actor&amp;quot;&lt;br /&gt;
&lt;br /&gt;
*A system operation refers to the response of the system to a system event. &lt;br /&gt;
&lt;br /&gt;
[[Image:controller6.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The figure below shows allocation of different operations&lt;br /&gt;
[[Image:controller4.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:controller5.jpg]]&lt;br /&gt;
&lt;br /&gt;
== Example 2 ==&lt;br /&gt;
The game of [http://www.academic.marist.edu/~jzbv/SoftwareDevelopment/GRASP.ppt Monopoly] is an excellent example of a controller pattern. Actors, such as the human player in Monopoly, generate UI events (such as clicking a button with a mouse to play a game or make a move).  The UI software objects (such as a JFrame window and a JButton) must process the event and cause the game to play.   When objects in the UI layer pick up an event, they must delegate the request to an object in the domain layer.&lt;br /&gt;
&lt;br /&gt;
The problem in this case can be formulated as follows:&lt;br /&gt;
What first object beyond the UI layer should receive the message from the UI layer?&lt;br /&gt;
&lt;br /&gt;
As per the controller pattern the solution is as follows:&lt;br /&gt;
Assign the responsibility to an object representing either of following:&lt;br /&gt;
- Represents the overall “system” – a root object&lt;br /&gt;
- Represents a use case scenario within which the system operation occurs.&lt;br /&gt;
&lt;br /&gt;
[[Image:monopoly.jpg]]&lt;br /&gt;
&lt;br /&gt;
==Example 3==&lt;br /&gt;
This article contains an [http://www.davidhayden.com/blog/dave/archive/2004/12/10/680.aspx E-Commerce example] of the Controller Pattern. The author classifies controllers as '''Use case Controllers''' and '''Facade Controllers'''. &lt;br /&gt;
&lt;br /&gt;
Use case controllers are useful to handle messages from the User Interface Layer  when there is little coupling between messages. A facade controller to handle all messages will not suffice in this case. &lt;br /&gt;
&lt;br /&gt;
The E-Commerce application in the example considers the following messages:&lt;br /&gt;
&lt;br /&gt;
    Get Categories&lt;br /&gt;
    Get Product in Category X&lt;br /&gt;
    Get Items in Shopping Cart&lt;br /&gt;
    Add Item to Shopping Cart&lt;br /&gt;
&lt;br /&gt;
The first 2 messages are related to a ProductCatalog to ProductCatalogHandler and the last 2 messages are related to the shopper's cart to ShoppingCartHandler:&lt;br /&gt;
&lt;br /&gt;
    ProductCatalogHandler&lt;br /&gt;
          -Get Categories&lt;br /&gt;
          -Get Product in Category X&lt;br /&gt;
    ShoppingCartHandler&lt;br /&gt;
          -Get Items in Shopping Cart&lt;br /&gt;
          -Add Item to Shopping Cart&lt;br /&gt;
&lt;br /&gt;
ProductCatalogHandler and ShoppingCartHandler are highly cohesive, embodied by the Controller Pattern.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Example 4==&lt;br /&gt;
&lt;br /&gt;
[http://209.85.165.104/search?q=cache:Mgu-Um9Lx1sJ:www.soc.napier.ac.uk/module.php3%3Fop%3Dgetresource%26cloaking%3Dno%26resourceid%3D5938601+controller+pattern+GRASP&amp;amp;hl=en&amp;amp;ct=clnk&amp;amp;cd=15&amp;amp;gl=us  Reference 6] contains the following solution to the problem of who handles the system event: &amp;quot;If a program receives events from external sources other than its graphical interface, add an event class to decouple the event source(s) from the objects that actually handle the events.&amp;quot; &lt;br /&gt;
&lt;br /&gt;
The author also mentions the benefits of using the Controller Pattern as an increased potential for reuse. It leads to decoupling &lt;br /&gt;
between the external sources of events and the internal event handlers.&lt;br /&gt;
&lt;br /&gt;
Consider the example of buying items at a supermarket. The cashier enters the items to be purchased and generates a bill for the customer to make the payment at the end of the sale. The system events include:&lt;br /&gt;
&lt;br /&gt;
  ''enterItem()''&lt;br /&gt;
  ''endSale()''&lt;br /&gt;
  ''makePayment()''&lt;br /&gt;
&lt;br /&gt;
The problem can be phrased as: Who is responsible for ''enterItem()''?&lt;br /&gt;
&lt;br /&gt;
Using the Controller Pattern to solve our problem, we can choose among the following: &lt;br /&gt;
&lt;br /&gt;
*The overall system [POST]&lt;br /&gt;
*The overall business(sub-system) [STORE]&lt;br /&gt;
*Someone in the real world who is active in the task [CASHIER]&lt;br /&gt;
*The artificial handler of all system events in the use case [BuyItemsHandler]&lt;br /&gt;
&lt;br /&gt;
[[Image:controller2.jpg]]&lt;br /&gt;
&lt;br /&gt;
The choice made should reflect high cohesion and low coupling, as shown below, in which the UI layer is decoupled from the problem domain.&lt;br /&gt;
&lt;br /&gt;
[[Image:controller.jpg]]&lt;br /&gt;
&lt;br /&gt;
==Example 5==&lt;br /&gt;
&lt;br /&gt;
This [http://codebetter.com/blogs/david.hayden/archive/2005/04/08/61648.aspx Blog] mentions some examples of the Controller Pattern in the context of blogs. It demonstrates how the controller class beyond the UI layer &amp;quot;hands off&amp;quot; the message to another domain layer object to act upon the message. &lt;br /&gt;
&lt;br /&gt;
Another related [http://davidhayden.com/blog/dave/archive/2004/11/28/648.aspx article] disambiguates between the Controller Pattern and the [http://en.wikipedia.org/wiki/Model-view-controller Model-View-Controller] Architecture. The author defines the controller as &amp;quot;the first object beyond the UI layer that is responsible for receiving or handling a system operation message&amp;quot;. As entailed above, the controller is the coordinator responsible for delegating work to other objects that actually accomplish the task at hand. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=See Also=&lt;br /&gt;
&lt;br /&gt;
[http://www.amazon.com/Applying-UML-Patterns-Introduction-Object-Oriented/dp/0130925691 Applying UML and Patterns: Craig Larman]&lt;br /&gt;
&lt;br /&gt;
2.     [http://people.msoe.edu/~blessing/cs489/cs489-13ch18.pdf Grasp Design Patterns]&lt;br /&gt;
&lt;br /&gt;
3.     [http://www.galileo.cs.uwindsor.ca:8000/60-322/LectureSlides/GRASPPatterns.ppt GRASP Patterns]&lt;br /&gt;
=References=&lt;br /&gt;
&lt;br /&gt;
1. [http://www.augustana.ab.ca/~mohrj/courses/2003.fall/csc220/lecture_notes/responsibilities.html GRASP Patterns]&lt;br /&gt;
&lt;br /&gt;
2. [http://en.wikipedia.org/wiki/GRASP_(Object_Oriented_Design) Wikipedia link to GRASP]&lt;br /&gt;
&lt;br /&gt;
3. [http://codebetter.com/blogs/david.hayden/archive/2005/04/08/61648.aspx Blog on GRASP Controller Pattern]&lt;br /&gt;
&lt;br /&gt;
4. [http://www.davidhayden.com/blog/dave/archive/2004/12/10/680.aspx E-Commerce example]&lt;br /&gt;
&lt;br /&gt;
5. [http://class.ee.iastate.edu/berleant/home/Courses/SoftwareEngineering/CprE486fall2004/GRASP.pdf Controller responsibility]&lt;br /&gt;
&lt;br /&gt;
6. [http://209.85.165.104/search?q=cache:Mgu-Um9Lx1sJ:www.soc.napier.ac.uk/module.php3%3Fop%3Dgetresource%26cloaking%3Dno%26resourceid%3D5938601+controller+pattern+GRASP&amp;amp;hl=en&amp;amp;ct=clnk&amp;amp;cd=15&amp;amp;gl=us Presentation on GRASP]&lt;br /&gt;
&lt;br /&gt;
7. [http://www.informit.com/content/images/0130925691/samplechapter/0130925691.pdf DESIGN MODEL: USE-CASE REALIZATIONS WITH GRASP PATTERNS]&lt;br /&gt;
&lt;br /&gt;
8. [http://www.dcs.bbk.ac.uk/~niki/lecture5.ppt Presentation on Design Patterns]&lt;br /&gt;
&lt;br /&gt;
9. [http://www.academic.marist.edu/~jzbv/SoftwareDevelopment/GRASP.ppt Monopoly Example]&lt;/div&gt;</summary>
		<author><name>Nnmodak</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Controller5.jpg&amp;diff=9575</id>
		<title>File:Controller5.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Controller5.jpg&amp;diff=9575"/>
		<updated>2007-11-19T23:58:33Z</updated>

		<summary type="html">&lt;p&gt;Nnmodak: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Nnmodak</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Controller4.jpg&amp;diff=9574</id>
		<title>File:Controller4.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Controller4.jpg&amp;diff=9574"/>
		<updated>2007-11-19T23:58:17Z</updated>

		<summary type="html">&lt;p&gt;Nnmodak: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Nnmodak</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2007/wiki3_6_pm&amp;diff=9573</id>
		<title>CSC/ECE 517 Fall 2007/wiki3 6 pm</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2007/wiki3_6_pm&amp;diff=9573"/>
		<updated>2007-11-19T23:58:04Z</updated>

		<summary type="html">&lt;p&gt;Nnmodak: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''Take the Controller pattern (which we did not cover in class) and catalog the information on it available on the Web. Find good descriptions and good, concise, understandable examples. Tell which you consider the best to present to a class.''&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
=Design Patterns=&lt;br /&gt;
A [http://en.wikipedia.org/wiki/Design_pattern_%28computer_science%29 Design Pattern] refers to a named description of a problem and a solution that can be applied in different contexts. Patterns are ''proven solutions to common problems''.&lt;br /&gt;
&lt;br /&gt;
A pattern addresses a recurring design problem that arises in specific design situations and presents a solution to it. This is done by defining a set of rules which describes how to solve the problem at hand.&lt;br /&gt;
&lt;br /&gt;
==GRASP Patterns==&lt;br /&gt;
[http://en.wikipedia.org/wiki/GRASP_(Object_Oriented_Design) GRASP] refers to '''G'''eneral '''R'''esponsibility '''A'''ssignment '''S'''oftware '''P'''atterns. It includes a systematic approach to [http://en.wikipedia.org/wiki/Object_oriented_design Object Oriented Design], while assigning responsibilities to classes.&lt;br /&gt;
&lt;br /&gt;
GRASP Patterns are more of responsibility driven design&lt;br /&gt;
Responsibilities of an Object include two types : Knowing and Doing&lt;br /&gt;
Doing responsibilities of an object include:&lt;br /&gt;
1.Doing something itself, such as creating an object or doing a calculation&lt;br /&gt;
2.Initiating action in other objects&lt;br /&gt;
3.Controlling and coordinating activities in other objects&lt;br /&gt;
&lt;br /&gt;
Knowing responsibilities of an object include:&lt;br /&gt;
1.Knowing about private encapsulated data (know thyself, presume not God to scan)&lt;br /&gt;
2.Knowing about related objects&lt;br /&gt;
3.Knowing about things it can derive or calculate&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The GRASP Patterns include:&lt;br /&gt;
* Information Expert&lt;br /&gt;
* Creator&lt;br /&gt;
* Controller&lt;br /&gt;
* Low Coupling&lt;br /&gt;
* High Cohesion&lt;br /&gt;
* Polymorphism&lt;br /&gt;
* Pure Fabrication&lt;br /&gt;
* Indirection&lt;br /&gt;
* Protected Variations&lt;br /&gt;
&lt;br /&gt;
Some of these, such as &amp;quot;Low Coupling&amp;quot; and &amp;quot;High Cohesion&amp;quot; are merely good design principles, and not design patterns.&lt;br /&gt;
&lt;br /&gt;
=The Controller Pattern=&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
The '''Controller pattern''' addresses the question: ''Who handles a system event?'' It assigns responsibilities for handling system events to different objects.&lt;br /&gt;
&lt;br /&gt;
Sometimes, an event is initiated from an external source. A class receives the event, but it may not handle the event. These events should be handled by classes representing one of the following choices:&lt;br /&gt;
* A class that represents the ''overall system'', device, or subsystem (facade controller).&lt;br /&gt;
* A class that represents a ''use case scenario'' within which the system event occurs. These are often named &amp;lt;usecasename&amp;gt;Handler, &amp;lt;usecasename&amp;gt;Controller, &amp;lt;usecasename&amp;gt;Manager,and so forth.&lt;br /&gt;
&lt;br /&gt;
To choose between facade and use-case controllers:&lt;br /&gt;
&lt;br /&gt;
1. The ''Facade controller'' is suitable when there are few system events.&lt;br /&gt;
&lt;br /&gt;
2. The ''Use-case controller'' is applicable when there are many system events and the facade controller would have become too large  &lt;br /&gt;
and incohesive.&lt;br /&gt;
&lt;br /&gt;
Wikipedia succinctly states: ''&amp;quot;The [http://en.wikipedia.org/wiki/GRASP_(Object_Oriented_Design) Controller] pattern assigns the responsibility of dealing with system events to a non-UI class that represent the overall system or a use case scenario. A use case controller should be used to deal with all system events of a use case, and may be used for more than one use case (for instance, for use cases Create User and Delete User, one can have one UserController, instead of two separate use case controllers)&amp;quot;''&lt;br /&gt;
&lt;br /&gt;
==Benefits==&lt;br /&gt;
&lt;br /&gt;
*''Reuse'' of domain layer software by plugging in various interfaces&lt;br /&gt;
*It is possible to ''control'' out-of-sequence system events&lt;br /&gt;
&lt;br /&gt;
=Examples=&lt;br /&gt;
&lt;br /&gt;
==Example 1==&lt;br /&gt;
&lt;br /&gt;
[http://www.augustana.ab.ca/~mohrj/courses/2003.fall/csc220/lecture_notes/responsibilities.html Reference 1] contains an excellent description of the controller pattern. &lt;br /&gt;
&lt;br /&gt;
  The controller is &amp;quot;A non-user interface object responsible for receiving or handling a system event, and that defines the method &lt;br /&gt;
  for the system operation&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
*A system event is said to be an event generated by an &amp;quot;external actor&amp;quot;&lt;br /&gt;
&lt;br /&gt;
*A system operation refers to the response of the system to a system event. &lt;br /&gt;
&lt;br /&gt;
[[Image:controller6.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The figure below shows allocation of different operations&lt;br /&gt;
[[Image:controller4.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:controller5.jpg]]&lt;br /&gt;
&lt;br /&gt;
== Example 2 ==&lt;br /&gt;
A game of [http://www.academic.marist.edu/~jzbv/SoftwareDevelopment/GRASP.ppt Monopoly] is an excellent example of a controller pattern.Actors, such as the human player in Monopoly, generate UI events (such as clicking a button with a mouse to play a game or make a move).  The UI software objects (such as a JFrame window and a JButton) must process the event and cause the game to play.   When objects in the UI layer pick up an event, they must delegate the request to an object in the domain layer.&lt;br /&gt;
&lt;br /&gt;
The problem in this case can be formulated as follows:&lt;br /&gt;
What first object beyond the UI layer should receive the message from the UI layer?&lt;br /&gt;
&lt;br /&gt;
As per the controller pattern the solution is as follows:&lt;br /&gt;
Assign the responsibility to an object representing either of following:&lt;br /&gt;
- Represents the overall “system” – a root object&lt;br /&gt;
- Represents a use case scenario within which the system operation occurs.&lt;br /&gt;
&lt;br /&gt;
[[Image:monopoly.jpg]]&lt;br /&gt;
&lt;br /&gt;
==Example 3==&lt;br /&gt;
This article contains an [http://www.davidhayden.com/blog/dave/archive/2004/12/10/680.aspx E-Commerce example] of the Controller Pattern. The author classifies controllers as '''Use case Controllers''' and '''Facade Controllers'''. &lt;br /&gt;
&lt;br /&gt;
Use case controllers are useful to handle messages from the User Interface Layer  when there is little coupling between messages. A facade controller to handle all messages will not suffice in this case. &lt;br /&gt;
&lt;br /&gt;
The E-Commerce application in the example considers the following messages:&lt;br /&gt;
&lt;br /&gt;
    Get Categories&lt;br /&gt;
    Get Product in Category X&lt;br /&gt;
    Get Items in Shopping Cart&lt;br /&gt;
    Add Item to Shopping Cart&lt;br /&gt;
&lt;br /&gt;
The first 2 messages are related to a ProductCatalog to ProductCatalogHandler and the last 2 messages are related to the shopper's cart to ShoppingCartHandler:&lt;br /&gt;
&lt;br /&gt;
    ProductCatalogHandler&lt;br /&gt;
          -Get Categories&lt;br /&gt;
          -Get Product in Category X&lt;br /&gt;
    ShoppingCartHandler&lt;br /&gt;
          -Get Items in Shopping Cart&lt;br /&gt;
          -Add Item to Shopping Cart&lt;br /&gt;
&lt;br /&gt;
ProductCatalogHandler and ShoppingCartHandler are highly cohesive, embodied by the Controller Pattern.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Example 4==&lt;br /&gt;
&lt;br /&gt;
[http://209.85.165.104/search?q=cache:Mgu-Um9Lx1sJ:www.soc.napier.ac.uk/module.php3%3Fop%3Dgetresource%26cloaking%3Dno%26resourceid%3D5938601+controller+pattern+GRASP&amp;amp;hl=en&amp;amp;ct=clnk&amp;amp;cd=15&amp;amp;gl=us  Reference 6] contains the following solution to the problem of who handles the system event: &amp;quot;If a program receives events from external sources other than its graphical interface, add an event class to decouple the event source(s) from the objects that actually handle the events.&amp;quot; &lt;br /&gt;
&lt;br /&gt;
The author also mentions the benefits of using the Controller Pattern as an increased potential for reuse. It leads to decoupling &lt;br /&gt;
between the external sources of events and the internal event handlers.&lt;br /&gt;
&lt;br /&gt;
Consider the example of buying items at a supermarket. The cashier enters the items to be purchased and generates a bill for the customer to make the payment at the end of the sale. The system events include:&lt;br /&gt;
&lt;br /&gt;
  ''enterItem()''&lt;br /&gt;
  ''endSale()''&lt;br /&gt;
  ''makePayment()''&lt;br /&gt;
&lt;br /&gt;
The problem can be phrased as: Who is responsible for ''enterItem()''?&lt;br /&gt;
&lt;br /&gt;
Using the Controller Pattern to solve our problem, we can choose among the following: &lt;br /&gt;
&lt;br /&gt;
*The overall system [POST]&lt;br /&gt;
*The overall business(sub-system) [STORE]&lt;br /&gt;
*Someone in the real world who is active in the task [CASHIER]&lt;br /&gt;
*The artificial handler of all system events in the use case [BuyItemsHandler]&lt;br /&gt;
&lt;br /&gt;
[[Image:controller2.jpg]]&lt;br /&gt;
&lt;br /&gt;
The choice made should reflect high cohesion and low coupling, as shown below, in which the UI layer is decoupled from the problem domain.&lt;br /&gt;
&lt;br /&gt;
[[Image:controller.jpg]]&lt;br /&gt;
&lt;br /&gt;
==Example 5==&lt;br /&gt;
&lt;br /&gt;
This [http://codebetter.com/blogs/david.hayden/archive/2005/04/08/61648.aspx Blog] mentions some examples of the Controller Pattern in the context of blogs. It demonstrates how the controller class beyond the UI layer &amp;quot;hands off&amp;quot; the message to another domain layer object to act upon the message. &lt;br /&gt;
&lt;br /&gt;
Another related [http://davidhayden.com/blog/dave/archive/2004/11/28/648.aspx article] disambiguates between the Controller Pattern and the [http://en.wikipedia.org/wiki/Model-view-controller Model-View-Controller] Architecture. The author defines the controller as &amp;quot;the first object beyond the UI layer that is responsible for receiving or handling a system operation message&amp;quot;. As entailed above, the controller is the coordinator responsible for delegating work to other objects that actually accomplish the task at hand. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=See Also=&lt;br /&gt;
&lt;br /&gt;
Applying UML and Patterns: Craig Larman&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=References=&lt;br /&gt;
&lt;br /&gt;
1. [http://www.augustana.ab.ca/~mohrj/courses/2003.fall/csc220/lecture_notes/responsibilities.html GRASP Patterns]&lt;br /&gt;
&lt;br /&gt;
2. [http://en.wikipedia.org/wiki/GRASP_(Object_Oriented_Design) Wikipedia link to GRASP]&lt;br /&gt;
&lt;br /&gt;
3. [http://codebetter.com/blogs/david.hayden/archive/2005/04/08/61648.aspx Blog on GRASP Controller Pattern]&lt;br /&gt;
&lt;br /&gt;
4. [http://www.davidhayden.com/blog/dave/archive/2004/12/10/680.aspx E-Commerce example]&lt;br /&gt;
&lt;br /&gt;
5. [http://class.ee.iastate.edu/berleant/home/Courses/SoftwareEngineering/CprE486fall2004/GRASP.pdf Controller responsibility]&lt;br /&gt;
&lt;br /&gt;
6. [http://209.85.165.104/search?q=cache:Mgu-Um9Lx1sJ:www.soc.napier.ac.uk/module.php3%3Fop%3Dgetresource%26cloaking%3Dno%26resourceid%3D5938601+controller+pattern+GRASP&amp;amp;hl=en&amp;amp;ct=clnk&amp;amp;cd=15&amp;amp;gl=us Presentation on GRASP]&lt;br /&gt;
&lt;br /&gt;
7. [http://www.informit.com/content/images/0130925691/samplechapter/0130925691.pdf DESIGN MODEL: USE-CASE REALIZATIONS WITH GRASP PATTERNS]&lt;br /&gt;
&lt;br /&gt;
8. [http://www.dcs.bbk.ac.uk/~niki/lecture5.ppt Presentation on Design Patterns]&lt;/div&gt;</summary>
		<author><name>Nnmodak</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2007/wiki3_6_pm&amp;diff=9572</id>
		<title>CSC/ECE 517 Fall 2007/wiki3 6 pm</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2007/wiki3_6_pm&amp;diff=9572"/>
		<updated>2007-11-19T23:55:52Z</updated>

		<summary type="html">&lt;p&gt;Nnmodak: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''Take the Controller pattern (which we did not cover in class) and catalog the information on it available on the Web. Find good descriptions and good, concise, understandable examples. Tell which you consider the best to present to a class.''&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
=Design Patterns=&lt;br /&gt;
A [http://en.wikipedia.org/wiki/Design_pattern_%28computer_science%29 Design Pattern] refers to a named description of a problem and a solution that can be applied in different contexts. Patterns are ''proven solutions to common problems''.&lt;br /&gt;
&lt;br /&gt;
A pattern addresses a recurring design problem that arises in specific design situations and presents a solution to it. This is done by defining a set of rules which describes how to solve the problem at hand.&lt;br /&gt;
&lt;br /&gt;
==GRASP Patterns==&lt;br /&gt;
[http://en.wikipedia.org/wiki/GRASP_(Object_Oriented_Design) GRASP] refers to '''G'''eneral '''R'''esponsibility '''A'''ssignment '''S'''oftware '''P'''atterns. It includes a systematic approach to [http://en.wikipedia.org/wiki/Object_oriented_design Object Oriented Design], while assigning responsibilities to classes.&lt;br /&gt;
&lt;br /&gt;
GRASP Patterns are more of responsibility driven design&lt;br /&gt;
Responsibilities of an Object include two types : Knowing and Doing&lt;br /&gt;
Doing responsibilities of an object include:&lt;br /&gt;
1.Doing something itself, such as creating an object or doing a calculation&lt;br /&gt;
2.Initiating action in other objects&lt;br /&gt;
3.Controlling and coordinating activities in other objects&lt;br /&gt;
&lt;br /&gt;
Knowing responsibilities of an object include:&lt;br /&gt;
1.Knowing about private encapsulated data (know thyself, presume not God to scan)&lt;br /&gt;
2.Knowing about related objects&lt;br /&gt;
3.Knowing about things it can derive or calculate&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The GRASP Patterns include:&lt;br /&gt;
* Information Expert&lt;br /&gt;
* Creator&lt;br /&gt;
* Controller&lt;br /&gt;
* Low Coupling&lt;br /&gt;
* High Cohesion&lt;br /&gt;
* Polymorphism&lt;br /&gt;
* Pure Fabrication&lt;br /&gt;
* Indirection&lt;br /&gt;
* Protected Variations&lt;br /&gt;
&lt;br /&gt;
Some of these, such as &amp;quot;Low Coupling&amp;quot; and &amp;quot;High Cohesion&amp;quot; are merely good design principles, and not design patterns.&lt;br /&gt;
&lt;br /&gt;
=The Controller Pattern=&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
The '''Controller pattern''' addresses the question: ''Who handles a system event?'' It assigns responsibilities for handling system events to different objects.&lt;br /&gt;
&lt;br /&gt;
Sometimes, an event is initiated from an external source. A class receives the event, but it may not handle the event. These events should be handled by classes representing one of the following choices:&lt;br /&gt;
* A class that represents the ''overall system'', device, or subsystem (facade controller).&lt;br /&gt;
* A class that represents a ''use case scenario'' within which the system event occurs. These are often named &amp;lt;usecasename&amp;gt;Handler, &amp;lt;usecasename&amp;gt;Controller, &amp;lt;usecasename&amp;gt;Manager,and so forth.&lt;br /&gt;
&lt;br /&gt;
To choose between facade and use-case controllers:&lt;br /&gt;
&lt;br /&gt;
1. The ''Facade controller'' is suitable when there are few system events.&lt;br /&gt;
&lt;br /&gt;
2. The ''Use-case controller'' is applicable when there are many system events and the facade controller would have become too large  &lt;br /&gt;
and incohesive.&lt;br /&gt;
&lt;br /&gt;
Wikipedia succinctly states: ''&amp;quot;The [http://en.wikipedia.org/wiki/GRASP_(Object_Oriented_Design) Controller] pattern assigns the responsibility of dealing with system events to a non-UI class that represent the overall system or a use case scenario. A use case controller should be used to deal with all system events of a use case, and may be used for more than one use case (for instance, for use cases Create User and Delete User, one can have one UserController, instead of two separate use case controllers)&amp;quot;''&lt;br /&gt;
&lt;br /&gt;
==Benefits==&lt;br /&gt;
&lt;br /&gt;
*''Reuse'' of domain layer software by plugging in various interfaces&lt;br /&gt;
*It is possible to ''control'' out-of-sequence system events&lt;br /&gt;
&lt;br /&gt;
=Examples=&lt;br /&gt;
&lt;br /&gt;
==Example 1==&lt;br /&gt;
&lt;br /&gt;
[http://www.augustana.ab.ca/~mohrj/courses/2003.fall/csc220/lecture_notes/responsibilities.html Reference 1] contains an excellent description of the controller pattern. &lt;br /&gt;
&lt;br /&gt;
  The controller is &amp;quot;A non-user interface object responsible for receiving or handling a system event, and that defines the method &lt;br /&gt;
  for the system operation&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
*A system event is said to be an event generated by an &amp;quot;external actor&amp;quot;&lt;br /&gt;
&lt;br /&gt;
*A system operation refers to the response of the system to a system event. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The figure below shows allocation of different operations&lt;br /&gt;
[[Image:controller4.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:controller5.jpg]]&lt;br /&gt;
&lt;br /&gt;
== Example 2 ==&lt;br /&gt;
A game of [http://www.academic.marist.edu/~jzbv/SoftwareDevelopment/GRASP.ppt Monopoly] is an excellent example of a controller pattern.Actors, such as the human player in Monopoly, generate UI events (such as clicking a button with a mouse to play a game or make a move).  The UI software objects (such as a JFrame window and a JButton) must process the event and cause the game to play.   When objects in the UI layer pick up an event, they must delegate the request to an object in the domain layer.&lt;br /&gt;
&lt;br /&gt;
The problem in this case can be formulated as follows:&lt;br /&gt;
What first object beyond the UI layer should receive the message from the UI layer?&lt;br /&gt;
&lt;br /&gt;
As per the controller pattern the solution is as follows:&lt;br /&gt;
Assign the responsibility to an object representing either of following:&lt;br /&gt;
- Represents the overall “system” – a root object&lt;br /&gt;
- Represents a use case scenario within which the system operation occurs.&lt;br /&gt;
&lt;br /&gt;
[[Image:monopoly.jpg]]&lt;br /&gt;
&lt;br /&gt;
==Example 3==&lt;br /&gt;
This article contains an [http://www.davidhayden.com/blog/dave/archive/2004/12/10/680.aspx E-Commerce example] of the Controller Pattern. The author classifies controllers as '''Use case Controllers''' and '''Facade Controllers'''. &lt;br /&gt;
&lt;br /&gt;
Use case controllers are useful to handle messages from the User Interface Layer  when there is little coupling between messages. A facade controller to handle all messages will not suffice in this case. &lt;br /&gt;
&lt;br /&gt;
The E-Commerce application in the example considers the following messages:&lt;br /&gt;
&lt;br /&gt;
    Get Categories&lt;br /&gt;
    Get Product in Category X&lt;br /&gt;
    Get Items in Shopping Cart&lt;br /&gt;
    Add Item to Shopping Cart&lt;br /&gt;
&lt;br /&gt;
The first 2 messages are related to a ProductCatalog to ProductCatalogHandler and the last 2 messages are related to the shopper's cart to ShoppingCartHandler:&lt;br /&gt;
&lt;br /&gt;
    ProductCatalogHandler&lt;br /&gt;
          -Get Categories&lt;br /&gt;
          -Get Product in Category X&lt;br /&gt;
    ShoppingCartHandler&lt;br /&gt;
          -Get Items in Shopping Cart&lt;br /&gt;
          -Add Item to Shopping Cart&lt;br /&gt;
&lt;br /&gt;
ProductCatalogHandler and ShoppingCartHandler are highly cohesive, embodied by the Controller Pattern.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Example 4==&lt;br /&gt;
&lt;br /&gt;
[http://209.85.165.104/search?q=cache:Mgu-Um9Lx1sJ:www.soc.napier.ac.uk/module.php3%3Fop%3Dgetresource%26cloaking%3Dno%26resourceid%3D5938601+controller+pattern+GRASP&amp;amp;hl=en&amp;amp;ct=clnk&amp;amp;cd=15&amp;amp;gl=us  Reference 6] contains the following solution to the problem of who handles the system event: &amp;quot;If a program receives events from external sources other than its graphical interface, add an event class to decouple the event source(s) from the objects that actually handle the events.&amp;quot; &lt;br /&gt;
&lt;br /&gt;
The author also mentions the benefits of using the Controller Pattern as an increased potential for reuse. It leads to decoupling &lt;br /&gt;
between the external sources of events and the internal event handlers.&lt;br /&gt;
&lt;br /&gt;
Consider the example of buying items at a supermarket. The cashier enters the items to be purchased and generates a bill for the customer to make the payment at the end of the sale. The system events include:&lt;br /&gt;
&lt;br /&gt;
  ''enterItem()''&lt;br /&gt;
  ''endSale()''&lt;br /&gt;
  ''makePayment()''&lt;br /&gt;
&lt;br /&gt;
The problem can be phrased as: Who is responsible for ''enterItem()''?&lt;br /&gt;
&lt;br /&gt;
Using the Controller Pattern to solve our problem, we can choose among the following: &lt;br /&gt;
&lt;br /&gt;
*The overall system [POST]&lt;br /&gt;
*The overall business(sub-system) [STORE]&lt;br /&gt;
*Someone in the real world who is active in the task [CASHIER]&lt;br /&gt;
*The artificial handler of all system events in the use case [BuyItemsHandler]&lt;br /&gt;
&lt;br /&gt;
[[Image:controller2.jpg]]&lt;br /&gt;
&lt;br /&gt;
The choice made should reflect high cohesion and low coupling, as shown below, in which the UI layer is decoupled from the problem domain.&lt;br /&gt;
&lt;br /&gt;
[[Image:controller.jpg]]&lt;br /&gt;
&lt;br /&gt;
==Example 5==&lt;br /&gt;
&lt;br /&gt;
This [http://codebetter.com/blogs/david.hayden/archive/2005/04/08/61648.aspx Blog] mentions some examples of the Controller Pattern in the context of blogs. It demonstrates how the controller class beyond the UI layer &amp;quot;hands off&amp;quot; the message to another domain layer object to act upon the message. &lt;br /&gt;
&lt;br /&gt;
Another related [http://davidhayden.com/blog/dave/archive/2004/11/28/648.aspx article] disambiguates between the Controller Pattern and the [http://en.wikipedia.org/wiki/Model-view-controller Model-View-Controller] Architecture. The author defines the controller as &amp;quot;the first object beyond the UI layer that is responsible for receiving or handling a system operation message&amp;quot;. As entailed above, the controller is the coordinator responsible for delegating work to other objects that actually accomplish the task at hand. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=See Also=&lt;br /&gt;
&lt;br /&gt;
Applying UML and Patterns: Craig Larman&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=References=&lt;br /&gt;
&lt;br /&gt;
1. [http://www.augustana.ab.ca/~mohrj/courses/2003.fall/csc220/lecture_notes/responsibilities.html GRASP Patterns]&lt;br /&gt;
&lt;br /&gt;
2. [http://en.wikipedia.org/wiki/GRASP_(Object_Oriented_Design) Wikipedia link to GRASP]&lt;br /&gt;
&lt;br /&gt;
3. [http://codebetter.com/blogs/david.hayden/archive/2005/04/08/61648.aspx Blog on GRASP Controller Pattern]&lt;br /&gt;
&lt;br /&gt;
4. [http://www.davidhayden.com/blog/dave/archive/2004/12/10/680.aspx E-Commerce example]&lt;br /&gt;
&lt;br /&gt;
5. [http://class.ee.iastate.edu/berleant/home/Courses/SoftwareEngineering/CprE486fall2004/GRASP.pdf Controller responsibility]&lt;br /&gt;
&lt;br /&gt;
6. [http://209.85.165.104/search?q=cache:Mgu-Um9Lx1sJ:www.soc.napier.ac.uk/module.php3%3Fop%3Dgetresource%26cloaking%3Dno%26resourceid%3D5938601+controller+pattern+GRASP&amp;amp;hl=en&amp;amp;ct=clnk&amp;amp;cd=15&amp;amp;gl=us Presentation on GRASP]&lt;br /&gt;
&lt;br /&gt;
7. [http://www.informit.com/content/images/0130925691/samplechapter/0130925691.pdf DESIGN MODEL: USE-CASE REALIZATIONS WITH GRASP PATTERNS]&lt;br /&gt;
&lt;br /&gt;
8. [http://www.dcs.bbk.ac.uk/~niki/lecture5.ppt Presentation on Design Patterns]&lt;/div&gt;</summary>
		<author><name>Nnmodak</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Controller6.jpg&amp;diff=9571</id>
		<title>File:Controller6.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Controller6.jpg&amp;diff=9571"/>
		<updated>2007-11-19T23:55:03Z</updated>

		<summary type="html">&lt;p&gt;Nnmodak: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Nnmodak</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2007/wiki3_6_pm&amp;diff=9570</id>
		<title>CSC/ECE 517 Fall 2007/wiki3 6 pm</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2007/wiki3_6_pm&amp;diff=9570"/>
		<updated>2007-11-19T23:54:55Z</updated>

		<summary type="html">&lt;p&gt;Nnmodak: /* Example 1 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''Take the Controller pattern (which we did not cover in class) and catalog the information on it available on the Web. Find good descriptions and good, concise, understandable examples. Tell which you consider the best to present to a class.''&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
=Design Patterns=&lt;br /&gt;
A [http://en.wikipedia.org/wiki/Design_pattern_%28computer_science%29 Design Pattern] refers to a named description of a problem and a solution that can be applied in different contexts. Patterns are ''proven solutions to common problems''.&lt;br /&gt;
&lt;br /&gt;
A pattern addresses a recurring design problem that arises in specific design situations and presents a solution to it. This is done by defining a set of rules which describes how to solve the problem at hand.&lt;br /&gt;
&lt;br /&gt;
==GRASP Patterns==&lt;br /&gt;
[http://en.wikipedia.org/wiki/GRASP_(Object_Oriented_Design) GRASP] refers to '''G'''eneral '''R'''esponsibility '''A'''ssignment '''S'''oftware '''P'''atterns. It includes a systematic approach to [http://en.wikipedia.org/wiki/Object_oriented_design Object Oriented Design], while assigning responsibilities to classes.&lt;br /&gt;
&lt;br /&gt;
GRASP Patterns are more of responsibility driven design&lt;br /&gt;
Responsibilities of an Object include two types : Knowing and Doing&lt;br /&gt;
Doing responsibilities of an object include:&lt;br /&gt;
1.Doing something itself, such as creating an object or doing a calculation&lt;br /&gt;
2.Initiating action in other objects&lt;br /&gt;
3.Controlling and coordinating activities in other objects&lt;br /&gt;
&lt;br /&gt;
Knowing responsibilities of an object include:&lt;br /&gt;
1.Knowing about private encapsulated data (know thyself, presume not God to scan)&lt;br /&gt;
2.Knowing about related objects&lt;br /&gt;
3.Knowing about things it can derive or calculate&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The GRASP Patterns include:&lt;br /&gt;
* Information Expert&lt;br /&gt;
* Creator&lt;br /&gt;
* Controller&lt;br /&gt;
* Low Coupling&lt;br /&gt;
* High Cohesion&lt;br /&gt;
* Polymorphism&lt;br /&gt;
* Pure Fabrication&lt;br /&gt;
* Indirection&lt;br /&gt;
* Protected Variations&lt;br /&gt;
&lt;br /&gt;
Some of these, such as &amp;quot;Low Coupling&amp;quot; and &amp;quot;High Cohesion&amp;quot; are merely good design principles, and not design patterns.&lt;br /&gt;
&lt;br /&gt;
=The Controller Pattern=&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
The '''Controller pattern''' addresses the question: ''Who handles a system event?'' It assigns responsibilities for handling system events to different objects.&lt;br /&gt;
&lt;br /&gt;
Sometimes, an event is initiated from an external source. A class receives the event, but it may not handle the event. These events should be handled by classes representing one of the following choices:&lt;br /&gt;
* A class that represents the ''overall system'', device, or subsystem (facade controller).&lt;br /&gt;
* A class that represents a ''use case scenario'' within which the system event occurs. These are often named &amp;lt;usecasename&amp;gt;Handler, &amp;lt;usecasename&amp;gt;Controller, &amp;lt;usecasename&amp;gt;Manager,and so forth.&lt;br /&gt;
&lt;br /&gt;
To choose between facade and use-case controllers:&lt;br /&gt;
&lt;br /&gt;
1. The ''Facade controller'' is suitable when there are few system events.&lt;br /&gt;
&lt;br /&gt;
2. The ''Use-case controller'' is applicable when there are many system events and the facade controller would have become too large  &lt;br /&gt;
and incohesive.&lt;br /&gt;
&lt;br /&gt;
Wikipedia succinctly states: ''&amp;quot;The [http://en.wikipedia.org/wiki/GRASP_(Object_Oriented_Design) Controller] pattern assigns the responsibility of dealing with system events to a non-UI class that represent the overall system or a use case scenario. A use case controller should be used to deal with all system events of a use case, and may be used for more than one use case (for instance, for use cases Create User and Delete User, one can have one UserController, instead of two separate use case controllers)&amp;quot;''&lt;br /&gt;
&lt;br /&gt;
==Benefits==&lt;br /&gt;
&lt;br /&gt;
*''Reuse'' of domain layer software by plugging in various interfaces&lt;br /&gt;
*It is possible to ''control'' out-of-sequence system events&lt;br /&gt;
&lt;br /&gt;
=Examples=&lt;br /&gt;
&lt;br /&gt;
==Example 1==&lt;br /&gt;
&lt;br /&gt;
[http://www.augustana.ab.ca/~mohrj/courses/2003.fall/csc220/lecture_notes/responsibilities.html Reference 1] contains an excellent description of the controller pattern. &lt;br /&gt;
&lt;br /&gt;
  The controller is &amp;quot;A non-user interface object responsible for receiving or handling a system event, and that defines the method &lt;br /&gt;
  for the system operation&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
*A system event is said to be an event generated by an &amp;quot;external actor&amp;quot;&lt;br /&gt;
&lt;br /&gt;
*A system operation refers to the response of the system to a system event. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:controller6.jpg]]&lt;br /&gt;
&lt;br /&gt;
The figure below shows allocation of different operations&lt;br /&gt;
[[Image:controller4.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:controller5.jpg]]&lt;br /&gt;
&lt;br /&gt;
== Example 2 ==&lt;br /&gt;
A game of [http://www.academic.marist.edu/~jzbv/SoftwareDevelopment/GRASP.ppt Monopoly] is an excellent example of a controller pattern.Actors, such as the human player in Monopoly, generate UI events (such as clicking a button with a mouse to play a game or make a move).  The UI software objects (such as a JFrame window and a JButton) must process the event and cause the game to play.   When objects in the UI layer pick up an event, they must delegate the request to an object in the domain layer.&lt;br /&gt;
&lt;br /&gt;
The problem in this case can be formulated as follows:&lt;br /&gt;
What first object beyond the UI layer should receive the message from the UI layer?&lt;br /&gt;
&lt;br /&gt;
As per the controller pattern the solution is as follows:&lt;br /&gt;
Assign the responsibility to an object representing either of following:&lt;br /&gt;
- Represents the overall “system” – a root object&lt;br /&gt;
- Represents a use case scenario within which the system operation occurs.&lt;br /&gt;
&lt;br /&gt;
[[Image:monopoly.jpg]]&lt;br /&gt;
&lt;br /&gt;
==Example 3==&lt;br /&gt;
This article contains an [http://www.davidhayden.com/blog/dave/archive/2004/12/10/680.aspx E-Commerce example] of the Controller Pattern. The author classifies controllers as '''Use case Controllers''' and '''Facade Controllers'''. &lt;br /&gt;
&lt;br /&gt;
Use case controllers are useful to handle messages from the User Interface Layer  when there is little coupling between messages. A facade controller to handle all messages will not suffice in this case. &lt;br /&gt;
&lt;br /&gt;
The E-Commerce application in the example considers the following messages:&lt;br /&gt;
&lt;br /&gt;
    Get Categories&lt;br /&gt;
    Get Product in Category X&lt;br /&gt;
    Get Items in Shopping Cart&lt;br /&gt;
    Add Item to Shopping Cart&lt;br /&gt;
&lt;br /&gt;
The first 2 messages are related to a ProductCatalog to ProductCatalogHandler and the last 2 messages are related to the shopper's cart to ShoppingCartHandler:&lt;br /&gt;
&lt;br /&gt;
    ProductCatalogHandler&lt;br /&gt;
          -Get Categories&lt;br /&gt;
          -Get Product in Category X&lt;br /&gt;
    ShoppingCartHandler&lt;br /&gt;
          -Get Items in Shopping Cart&lt;br /&gt;
          -Add Item to Shopping Cart&lt;br /&gt;
&lt;br /&gt;
ProductCatalogHandler and ShoppingCartHandler are highly cohesive, embodied by the Controller Pattern.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Example 4==&lt;br /&gt;
&lt;br /&gt;
[http://209.85.165.104/search?q=cache:Mgu-Um9Lx1sJ:www.soc.napier.ac.uk/module.php3%3Fop%3Dgetresource%26cloaking%3Dno%26resourceid%3D5938601+controller+pattern+GRASP&amp;amp;hl=en&amp;amp;ct=clnk&amp;amp;cd=15&amp;amp;gl=us  Reference 6] contains the following solution to the problem of who handles the system event: &amp;quot;If a program receives events from external sources other than its graphical interface, add an event class to decouple the event source(s) from the objects that actually handle the events.&amp;quot; &lt;br /&gt;
&lt;br /&gt;
The author also mentions the benefits of using the Controller Pattern as an increased potential for reuse. It leads to decoupling &lt;br /&gt;
between the external sources of events and the internal event handlers.&lt;br /&gt;
&lt;br /&gt;
Consider the example of buying items at a supermarket. The cashier enters the items to be purchased and generates a bill for the customer to make the payment at the end of the sale. The system events include:&lt;br /&gt;
&lt;br /&gt;
  ''enterItem()''&lt;br /&gt;
  ''endSale()''&lt;br /&gt;
  ''makePayment()''&lt;br /&gt;
&lt;br /&gt;
The problem can be phrased as: Who is responsible for ''enterItem()''?&lt;br /&gt;
&lt;br /&gt;
Using the Controller Pattern to solve our problem, we can choose among the following: &lt;br /&gt;
&lt;br /&gt;
*The overall system [POST]&lt;br /&gt;
*The overall business(sub-system) [STORE]&lt;br /&gt;
*Someone in the real world who is active in the task [CASHIER]&lt;br /&gt;
*The artificial handler of all system events in the use case [BuyItemsHandler]&lt;br /&gt;
&lt;br /&gt;
[[Image:controller2.jpg]]&lt;br /&gt;
&lt;br /&gt;
The choice made should reflect high cohesion and low coupling, as shown below, in which the UI layer is decoupled from the problem domain.&lt;br /&gt;
&lt;br /&gt;
[[Image:controller.jpg]]&lt;br /&gt;
&lt;br /&gt;
==Example 5==&lt;br /&gt;
&lt;br /&gt;
This [http://codebetter.com/blogs/david.hayden/archive/2005/04/08/61648.aspx Blog] mentions some examples of the Controller Pattern in the context of blogs. It demonstrates how the controller class beyond the UI layer &amp;quot;hands off&amp;quot; the message to another domain layer object to act upon the message. &lt;br /&gt;
&lt;br /&gt;
Another related [http://davidhayden.com/blog/dave/archive/2004/11/28/648.aspx article] disambiguates between the Controller Pattern and the [http://en.wikipedia.org/wiki/Model-view-controller Model-View-Controller] Architecture. The author defines the controller as &amp;quot;the first object beyond the UI layer that is responsible for receiving or handling a system operation message&amp;quot;. As entailed above, the controller is the coordinator responsible for delegating work to other objects that actually accomplish the task at hand. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=See Also=&lt;br /&gt;
&lt;br /&gt;
Applying UML and Patterns: Craig Larman&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=References=&lt;br /&gt;
&lt;br /&gt;
1. [http://www.augustana.ab.ca/~mohrj/courses/2003.fall/csc220/lecture_notes/responsibilities.html GRASP Patterns]&lt;br /&gt;
&lt;br /&gt;
2. [http://en.wikipedia.org/wiki/GRASP_(Object_Oriented_Design) Wikipedia link to GRASP]&lt;br /&gt;
&lt;br /&gt;
3. [http://codebetter.com/blogs/david.hayden/archive/2005/04/08/61648.aspx Blog on GRASP Controller Pattern]&lt;br /&gt;
&lt;br /&gt;
4. [http://www.davidhayden.com/blog/dave/archive/2004/12/10/680.aspx E-Commerce example]&lt;br /&gt;
&lt;br /&gt;
5. [http://class.ee.iastate.edu/berleant/home/Courses/SoftwareEngineering/CprE486fall2004/GRASP.pdf Controller responsibility]&lt;br /&gt;
&lt;br /&gt;
6. [http://209.85.165.104/search?q=cache:Mgu-Um9Lx1sJ:www.soc.napier.ac.uk/module.php3%3Fop%3Dgetresource%26cloaking%3Dno%26resourceid%3D5938601+controller+pattern+GRASP&amp;amp;hl=en&amp;amp;ct=clnk&amp;amp;cd=15&amp;amp;gl=us Presentation on GRASP]&lt;br /&gt;
&lt;br /&gt;
7. [http://www.informit.com/content/images/0130925691/samplechapter/0130925691.pdf DESIGN MODEL: USE-CASE REALIZATIONS WITH GRASP PATTERNS]&lt;br /&gt;
&lt;br /&gt;
8. [http://www.dcs.bbk.ac.uk/~niki/lecture5.ppt Presentation on Design Patterns]&lt;/div&gt;</summary>
		<author><name>Nnmodak</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2007/wiki3_6_pm&amp;diff=9565</id>
		<title>CSC/ECE 517 Fall 2007/wiki3 6 pm</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2007/wiki3_6_pm&amp;diff=9565"/>
		<updated>2007-11-19T23:42:34Z</updated>

		<summary type="html">&lt;p&gt;Nnmodak: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''Take the Controller pattern (which we did not cover in class) and catalog the information on it available on the Web. Find good descriptions and good, concise, understandable examples. Tell which you consider the best to present to a class.''&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
=Design Patterns=&lt;br /&gt;
A [http://en.wikipedia.org/wiki/Design_pattern_%28computer_science%29 Design Pattern] refers to a named description of a problem and a solution that can be applied in different contexts. Patterns are ''proven solutions to common problems''.&lt;br /&gt;
&lt;br /&gt;
A pattern addresses a recurring design problem that arises in specific design situations and presents a solution to it. This is done by defining a set of rules which describes how to solve the problem at hand.&lt;br /&gt;
&lt;br /&gt;
==GRASP Patterns==&lt;br /&gt;
[http://en.wikipedia.org/wiki/GRASP_(Object_Oriented_Design) GRASP] refers to '''G'''eneral '''R'''esponsibility '''A'''ssignment '''S'''oftware '''P'''atterns. It includes a systematic approach to [http://en.wikipedia.org/wiki/Object_oriented_design Object Oriented Design], while assigning responsibilities to classes.&lt;br /&gt;
&lt;br /&gt;
GRASP Patterns are more of responsibility driven design&lt;br /&gt;
Responsibilities of an Object include two types : Knowing and Doing&lt;br /&gt;
Doing responsibilities of an object include:&lt;br /&gt;
1.Doing something itself, such as creating an object or doing a calculation&lt;br /&gt;
2.Initiating action in other objects&lt;br /&gt;
3.Controlling and coordinating activities in other objects&lt;br /&gt;
&lt;br /&gt;
Knowing responsibilities of an object include:&lt;br /&gt;
1.Knowing about private encapsulated data (know thyself, presume not God to scan)&lt;br /&gt;
2.Knowing about related objects&lt;br /&gt;
3.Knowing about things it can derive or calculate&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The GRASP Patterns include:&lt;br /&gt;
* Information Expert&lt;br /&gt;
* Creator&lt;br /&gt;
* Controller&lt;br /&gt;
* Low Coupling&lt;br /&gt;
* High Cohesion&lt;br /&gt;
* Polymorphism&lt;br /&gt;
* Pure Fabrication&lt;br /&gt;
* Indirection&lt;br /&gt;
* Protected Variations&lt;br /&gt;
&lt;br /&gt;
Some of these, such as &amp;quot;Low Coupling&amp;quot; and &amp;quot;High Cohesion&amp;quot; are merely good design principles, and not design patterns.&lt;br /&gt;
&lt;br /&gt;
=The Controller Pattern=&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
The '''Controller pattern''' addresses the question: ''Who handles a system event?'' It assigns responsibilities for handling system events to different objects.&lt;br /&gt;
&lt;br /&gt;
Sometimes, an event is initiated from an external source. A class receives the event, but it may not handle the event. These events should be handled by classes representing one of the following choices:&lt;br /&gt;
* A class that represents the ''overall system'', device, or subsystem (facade controller).&lt;br /&gt;
* A class that represents a ''use case scenario'' within which the system event occurs. These are often named &amp;lt;usecasename&amp;gt;Handler, &amp;lt;usecasename&amp;gt;Controller, &amp;lt;usecasename&amp;gt;Manager,and so forth.&lt;br /&gt;
&lt;br /&gt;
To choose between facade and use-case controllers:&lt;br /&gt;
&lt;br /&gt;
1. The ''Facade controller'' is suitable when there are few system events.&lt;br /&gt;
&lt;br /&gt;
2. The ''Use-case controller'' is applicable when there are many system events and the facade controller would have become too large  &lt;br /&gt;
and incohesive.&lt;br /&gt;
&lt;br /&gt;
Wikipedia succinctly states: ''&amp;quot;The [http://en.wikipedia.org/wiki/GRASP_(Object_Oriented_Design) Controller] pattern assigns the responsibility of dealing with system events to a non-UI class that represent the overall system or a use case scenario. A use case controller should be used to deal with all system events of a use case, and may be used for more than one use case (for instance, for use cases Create User and Delete User, one can have one UserController, instead of two separate use case controllers)&amp;quot;''&lt;br /&gt;
&lt;br /&gt;
==Benefits==&lt;br /&gt;
&lt;br /&gt;
*''Reuse'' of domain layer software by plugging in various interfaces&lt;br /&gt;
*It is possible to ''control'' out-of-sequence system events&lt;br /&gt;
&lt;br /&gt;
=Examples=&lt;br /&gt;
&lt;br /&gt;
==Example 1==&lt;br /&gt;
&lt;br /&gt;
[http://www.augustana.ab.ca/~mohrj/courses/2003.fall/csc220/lecture_notes/responsibilities.html Reference 1] contains an excellent description of the controller pattern. &lt;br /&gt;
&lt;br /&gt;
  The controller is &amp;quot;A non-user interface object responsible for receiving or handling a system event, and that defines the method &lt;br /&gt;
  for the system operation&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
*A system event is said to be an event generated by an &amp;quot;external actor&amp;quot;&lt;br /&gt;
&lt;br /&gt;
*A system operation refers to the response of the system to a system event. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The website also contains a diagram showing the general context of the Controller, depicted below. (INCLUDE DIAGRAM HERE)&lt;br /&gt;
&lt;br /&gt;
******Should we format it as Desc/Example or separate them ?&lt;br /&gt;
&lt;br /&gt;
== Example 2 ==&lt;br /&gt;
A game of [http://www.academic.marist.edu/~jzbv/SoftwareDevelopment/GRASP.ppt Monopoly] is an excellent example of a controller pattern.Actors, such as the human player in Monopoly, generate UI events (such as clicking a button with a mouse to play a game or make a move).  The UI software objects (such as a JFrame window and a JButton) must process the event and cause the game to play.   When objects in the UI layer pick up an event, they must delegate the request to an object in the domain layer.&lt;br /&gt;
&lt;br /&gt;
The problem in this case can be formulated as follows:&lt;br /&gt;
What first object beyond the UI layer should receive the message from the UI layer?&lt;br /&gt;
&lt;br /&gt;
As per the controller pattern the solution is as follows:&lt;br /&gt;
Assign the responsibility to an object representing either of following:&lt;br /&gt;
- Represents the overall “system” – a root object&lt;br /&gt;
- Represents a use case scenario within which the system operation occurs.&lt;br /&gt;
&lt;br /&gt;
[[Image:monopoly.jpg]]&lt;br /&gt;
&lt;br /&gt;
==Example 3==&lt;br /&gt;
This article contains an [http://www.davidhayden.com/blog/dave/archive/2004/12/10/680.aspx E-Commerce example] of the Controller Pattern. The author classifies controllers as '''Use case Controllers''' and '''Facade Controllers'''. &lt;br /&gt;
&lt;br /&gt;
Use case controllers are useful to handle messages from the User Interface Layer  when there is little coupling between messages. A facade controller to handle all messages will not suffice in this case. &lt;br /&gt;
&lt;br /&gt;
The E-Commerce application in the example considers the following messages:&lt;br /&gt;
&lt;br /&gt;
    Get Categories&lt;br /&gt;
    Get Product in Category X&lt;br /&gt;
    Get Items in Shopping Cart&lt;br /&gt;
    Add Item to Shopping Cart&lt;br /&gt;
&lt;br /&gt;
The first 2 messages are related to a ProductCatalog to ProductCatalogHandler and the last 2 messages are related to the shopper's cart to ShoppingCartHandler:&lt;br /&gt;
&lt;br /&gt;
    ProductCatalogHandler&lt;br /&gt;
          -Get Categories&lt;br /&gt;
          -Get Product in Category X&lt;br /&gt;
    ShoppingCartHandler&lt;br /&gt;
          -Get Items in Shopping Cart&lt;br /&gt;
          -Add Item to Shopping Cart&lt;br /&gt;
&lt;br /&gt;
ProductCatalogHandler and ShoppingCartHandler are highly cohesive, embodied by the Controller Pattern.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Example 4==&lt;br /&gt;
&lt;br /&gt;
[http://209.85.165.104/search?q=cache:Mgu-Um9Lx1sJ:www.soc.napier.ac.uk/module.php3%3Fop%3Dgetresource%26cloaking%3Dno%26resourceid%3D5938601+controller+pattern+GRASP&amp;amp;hl=en&amp;amp;ct=clnk&amp;amp;cd=15&amp;amp;gl=us  Reference 6] contains the following solution to the problem of who handles the system event: &amp;quot;If a program receives events from external sources other than its graphical interface, add an event class to decouple the event source(s) from the objects that actually handle the events.&amp;quot; &lt;br /&gt;
&lt;br /&gt;
The author also mentions the benefits of using the Controller Pattern as an increased potential for reuse. It leads to decoupling &lt;br /&gt;
between the external sources of events and the internal event handlers.&lt;br /&gt;
&lt;br /&gt;
Consider the example of buying items at a supermarket. The cashier enters the items to be purchased and generates a bill for the customer to make the payment at the end of the sale. The system events include:&lt;br /&gt;
&lt;br /&gt;
  ''enterItem()''&lt;br /&gt;
  ''endSale()''&lt;br /&gt;
  ''makePayment()''&lt;br /&gt;
&lt;br /&gt;
The problem can be phrased as: Who is responsible for ''enterItem()''?&lt;br /&gt;
&lt;br /&gt;
Using the Controller Pattern to solve our problem, we can choose among the following: &lt;br /&gt;
&lt;br /&gt;
*The overall system [POST]&lt;br /&gt;
*The overall business(sub-system) [STORE]&lt;br /&gt;
*Someone in the real world who is active in the task [CASHIER]&lt;br /&gt;
*The artificial handler of all system events in the use case [BuyItemsHandler]&lt;br /&gt;
&lt;br /&gt;
[[Image:controller2.jpg]]&lt;br /&gt;
&lt;br /&gt;
The choice made should reflect high cohesion and low coupling, as shown below, in which the UI layer is decoupled from the problem domain.&lt;br /&gt;
&lt;br /&gt;
[[Image:controller.jpg]]&lt;br /&gt;
&lt;br /&gt;
==Example 5==&lt;br /&gt;
&lt;br /&gt;
This [http://codebetter.com/blogs/david.hayden/archive/2005/04/08/61648.aspx Blog] mentions some examples of the Controller Pattern in the context of blogs. It demonstrates how the controller class beyond the UI layer &amp;quot;hands off&amp;quot; the message to another domain layer object to act upon the message. &lt;br /&gt;
&lt;br /&gt;
Another related [http://davidhayden.com/blog/dave/archive/2004/11/28/648.aspx article] disambiguates between the Controller Pattern and the [http://en.wikipedia.org/wiki/Model-view-controller Model-View-Controller] Architecture. The author defines the controller as &amp;quot;the first object beyond the UI layer that is responsible for receiving or handling a system operation message&amp;quot;. As entailed above, the controller is the coordinator responsible for delegating work to other objects that actually accomplish the task at hand. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=See Also=&lt;br /&gt;
&lt;br /&gt;
Applying UML and Patterns: Craig Larman&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=References=&lt;br /&gt;
&lt;br /&gt;
1. [http://www.augustana.ab.ca/~mohrj/courses/2003.fall/csc220/lecture_notes/responsibilities.html GRASP Patterns]&lt;br /&gt;
&lt;br /&gt;
2. [http://en.wikipedia.org/wiki/GRASP_(Object_Oriented_Design) Wikipedia link to GRASP]&lt;br /&gt;
&lt;br /&gt;
3. [http://codebetter.com/blogs/david.hayden/archive/2005/04/08/61648.aspx Blog on GRASP Controller Pattern]&lt;br /&gt;
&lt;br /&gt;
4. [http://www.davidhayden.com/blog/dave/archive/2004/12/10/680.aspx E-Commerce example]&lt;br /&gt;
&lt;br /&gt;
5. [http://class.ee.iastate.edu/berleant/home/Courses/SoftwareEngineering/CprE486fall2004/GRASP.pdf Controller responsibility]&lt;br /&gt;
&lt;br /&gt;
6. [http://209.85.165.104/search?q=cache:Mgu-Um9Lx1sJ:www.soc.napier.ac.uk/module.php3%3Fop%3Dgetresource%26cloaking%3Dno%26resourceid%3D5938601+controller+pattern+GRASP&amp;amp;hl=en&amp;amp;ct=clnk&amp;amp;cd=15&amp;amp;gl=us Presentation on GRASP]&lt;br /&gt;
&lt;br /&gt;
7. [http://www.informit.com/content/images/0130925691/samplechapter/0130925691.pdf DESIGN MODEL: USE-CASE REALIZATIONS WITH GRASP PATTERNS]&lt;br /&gt;
&lt;br /&gt;
8. [http://www.dcs.bbk.ac.uk/~niki/lecture5.ppt Presentation on Design Patterns]&lt;/div&gt;</summary>
		<author><name>Nnmodak</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2007/wiki3_6_pm&amp;diff=9382</id>
		<title>CSC/ECE 517 Fall 2007/wiki3 6 pm</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2007/wiki3_6_pm&amp;diff=9382"/>
		<updated>2007-11-19T18:01:18Z</updated>

		<summary type="html">&lt;p&gt;Nnmodak: /* Design Patterns */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''Take the Controller pattern (which we did not cover in class) and catalog the information on it available on the Web. Find good descriptions and good, concise, understandable examples. Tell which you consider the best to present to a class.''&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
=Design Patterns=&lt;br /&gt;
A [http://en.wikipedia.org/wiki/Design_pattern_%28computer_science%29 Design Pattern] refers to a named description of a problem and a solution that can be applied in different contexts. Patterns are ''proven solutions to common problems''.&lt;br /&gt;
&lt;br /&gt;
A pattern addresses a recurring design problem that arises in specific design situations and presents a solution to it. This is done by defining a set of rules which describes how to solve the problem at hand.&lt;br /&gt;
&lt;br /&gt;
==GRASP Patterns==&lt;br /&gt;
[http://en.wikipedia.org/wiki/GRASP_(Object_Oriented_Design) GRASP] refers to '''G'''eneral '''R'''esponsibility '''A'''ssignment '''S'''oftware '''P'''atterns. It includes a systematic approach to [http://en.wikipedia.org/wiki/Object_oriented_design Object Oriented Design], while assigning responsibilities to classes.&lt;br /&gt;
&lt;br /&gt;
GRASP Patterns are more of responsibility driven design&lt;br /&gt;
Responsibilities of an Object include two types : Knowing and Doing&lt;br /&gt;
Doing responsibilities of an object include:&lt;br /&gt;
1.Doing something itself, such as creating an object or doing a calculation&lt;br /&gt;
2.Initiating action in other objects&lt;br /&gt;
3.Controlling and coordinating activities in other objects&lt;br /&gt;
&lt;br /&gt;
Knowing responsibilities of an object include:&lt;br /&gt;
1.Knowing about private encapsulated data (know thyself, presume not God to scan)&lt;br /&gt;
2.Knowing about related objects&lt;br /&gt;
3.Knowing about things it can derive or calculate&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The GRASP Patterns include:&lt;br /&gt;
* Information Expert&lt;br /&gt;
* Creator&lt;br /&gt;
* Controller&lt;br /&gt;
* Low Coupling&lt;br /&gt;
* High Cohesion&lt;br /&gt;
* Polymorphism&lt;br /&gt;
* Pure Fabrication&lt;br /&gt;
* Indirection&lt;br /&gt;
* Protected Variations&lt;br /&gt;
&lt;br /&gt;
Some of these, such as &amp;quot;Low Coupling&amp;quot; and &amp;quot;High Cohesion&amp;quot; are merely good design principles, and not design patterns.&lt;br /&gt;
&lt;br /&gt;
=The Controller Pattern=&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
The '''Controller pattern''' addresses the question: ''Who handles a system event?'' It assigns responsibilities for handling system events to different objects.&lt;br /&gt;
&lt;br /&gt;
Sometimes, an event is initiated from an external source. A class receives the event, but it may not handle the event. These events should be handled by classes representing one of the following choices:&lt;br /&gt;
* A class that represents the ''overall system'', device, or subsystem (facade controller).&lt;br /&gt;
* A class that represents a ''use case scenario'' within which the system event occurs. These are often named &amp;lt;usecasename&amp;gt;Handler, &amp;lt;usecasename&amp;gt;Controller, &amp;lt;usecasename&amp;gt;Manager,and so forth.&lt;br /&gt;
&lt;br /&gt;
To choose between facade and use-case controllers:&lt;br /&gt;
&lt;br /&gt;
1. The ''Facade controller'' is suitable when there are few system events.&lt;br /&gt;
&lt;br /&gt;
2. The ''Use-case controller'' is applicable when there are many system events and the facade controller would have become too large  &lt;br /&gt;
and incohesive.&lt;br /&gt;
&lt;br /&gt;
Wikipedia succinctly states: ''&amp;quot;The [http://en.wikipedia.org/wiki/GRASP_(Object_Oriented_Design) Controller] pattern assigns the responsibility of dealing with system events to a non-UI class that represent the overall system or a use case scenario. A use case controller should be used to deal with all system events of a use case, and may be used for more than one use case (for instance, for use cases Create User and Delete User, one can have one UserController, instead of two separate use case controllers)&amp;quot;''&lt;br /&gt;
&lt;br /&gt;
==Benefits==&lt;br /&gt;
&lt;br /&gt;
*''Reuse'' of domain layer software by plugging in various interfaces&lt;br /&gt;
*It is possible to ''control'' out-of-sequence system events&lt;br /&gt;
&lt;br /&gt;
=Examples=&lt;br /&gt;
&lt;br /&gt;
==Description1==&lt;br /&gt;
&lt;br /&gt;
[http://www.augustana.ab.ca/~mohrj/courses/2003.fall/csc220/lecture_notes/responsibilities.html Reference 1] contains an excellent description of the controller pattern. &lt;br /&gt;
&lt;br /&gt;
  The controller is &amp;quot;A non-user interface object responsible for receiving or handling a system event, and that defines the method &lt;br /&gt;
  for the system operation&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
*A system event is said to be an event generated by an &amp;quot;external actor&amp;quot;&lt;br /&gt;
&lt;br /&gt;
*A system operation refers to the response of the system to a system event. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The website also contains a diagram showing the general context of the Controller, depicted below. (INCLUDE DIAGRAM HERE)&lt;br /&gt;
&lt;br /&gt;
******Should we format it as Desc/Example or separate them ?&lt;br /&gt;
&lt;br /&gt;
== Example 2 ==&lt;br /&gt;
A game of [http://www.academic.marist.edu/~jzbv/SoftwareDevelopment/GRASP.ppt Monopoly] is an excellent example of a controller pattern.Actors, such as the human player in Monopoly, generate UI events (such as clicking a button with a mouse to play a game or make a move).  The UI software objects (such as a JFrame window and a JButton) must process the event and cause the game to play.   When objects in the UI layer pick up an event, they must delegate the request to an object in the domain layer.&lt;br /&gt;
&lt;br /&gt;
The problem in this case can be formulated as follows:&lt;br /&gt;
What first object beyond the UI layer should receive the message from the UI layer?&lt;br /&gt;
&lt;br /&gt;
As per the controller pattern the solution is as follows:&lt;br /&gt;
Assign the responsibility to an object representing either of following:&lt;br /&gt;
- Represents the overall “system” – a root object&lt;br /&gt;
- Represents a use case scenario within which the system operation occurs.&lt;br /&gt;
&lt;br /&gt;
[[Image:monopoly.jpg]]&lt;br /&gt;
&lt;br /&gt;
==Description3==&lt;br /&gt;
This article contains an [http://www.davidhayden.com/blog/dave/archive/2004/12/10/680.aspx E-Commerce example] of the Controller Pattern. The author classifies controllers as '''Use case Controllers''' and '''Facade Controllers'''. &lt;br /&gt;
&lt;br /&gt;
Use case controllers are useful to handle messages from the User Interface Layer  when there is little coupling between messages. A facade controller to handle all messages will not suffice in this case. &lt;br /&gt;
&lt;br /&gt;
The E-Commerce application in the example considers the following messages:&lt;br /&gt;
&lt;br /&gt;
    Get Categories&lt;br /&gt;
    Get Product in Category X&lt;br /&gt;
    Get Items in Shopping Cart&lt;br /&gt;
    Add Item to Shopping Cart&lt;br /&gt;
&lt;br /&gt;
The first 2 messages are related to a ProductCatalog to ProductCatalogHandler and the last 2 messages are related to the shopper's cart to ShoppingCartHandler:&lt;br /&gt;
&lt;br /&gt;
    ProductCatalogHandler&lt;br /&gt;
          -Get Categories&lt;br /&gt;
          -Get Product in Category X&lt;br /&gt;
    ShoppingCartHandler&lt;br /&gt;
          -Get Items in Shopping Cart&lt;br /&gt;
          -Add Item to Shopping Cart&lt;br /&gt;
&lt;br /&gt;
ProductCatalogHandler and ShoppingCartHandler are highly cohesive, embodied by the Controller Pattern.&lt;br /&gt;
&lt;br /&gt;
==Description3==&lt;br /&gt;
&lt;br /&gt;
This [http://codebetter.com/blogs/david.hayden/archive/2005/04/08/61648.aspx Blog] mentions some examples of the Controller Pattern in the context of blogs. It demonstrates how the controller class beyond the UI layer &amp;quot;hands off&amp;quot; the message to another domain layer object to act upon the message. &lt;br /&gt;
&lt;br /&gt;
Another related [http://davidhayden.com/blog/dave/archive/2004/11/28/648.aspx article] disambiguates between the Controller Pattern and the [http://en.wikipedia.org/wiki/Model-view-controller Model-View-Controller] Architecture. The author defines the controller as &amp;quot;the first object beyond the UI layer that is responsible for receiving or handling a system operation message&amp;quot;. As entailed above, the controller is the coordinator responsible for delegating work to other objects that actually accomplish the task at hand. &lt;br /&gt;
&lt;br /&gt;
==Description4==&lt;br /&gt;
&lt;br /&gt;
[http://209.85.165.104/search?q=cache:Mgu-Um9Lx1sJ:www.soc.napier.ac.uk/module.php3%3Fop%3Dgetresource%26cloaking%3Dno%26resourceid%3D5938601+controller+pattern+GRASP&amp;amp;hl=en&amp;amp;ct=clnk&amp;amp;cd=15&amp;amp;gl=us  Reference 6] contains the following solution to the problem of who handles the system event: &amp;quot;If a program receives events from external sources other than its graphical interface, add an event class to decouple the event source(s) from the objects that actually handle the events.&amp;quot; &lt;br /&gt;
&lt;br /&gt;
The author also mentions the benefits of using the Controller Pattern as an increased potential for reuse. It leads to decoupling &lt;br /&gt;
between the external sources of events and the internal event handlers.&lt;br /&gt;
&lt;br /&gt;
Consider the example of buying items at a supermarket. The cashier enters the items to be purchased and generates a bill for the customer to make the payment at the end of the sale. The system events include:&lt;br /&gt;
&lt;br /&gt;
  ''enterItem()''&lt;br /&gt;
  ''endSale()''&lt;br /&gt;
  ''makePayment()''&lt;br /&gt;
&lt;br /&gt;
The problem can be phrased as: Who is responsible for ''enterItem()''?&lt;br /&gt;
&lt;br /&gt;
Using the Controller Pattern to solve our problem, we can choose among the following: &lt;br /&gt;
&lt;br /&gt;
*The overall system [POST]&lt;br /&gt;
*The overall business(sub-system) [STORE]&lt;br /&gt;
*Someone in the real world who is active in the task [CASHIER]&lt;br /&gt;
*The artificial handler of all system events in the use case [BuyItemsHandler]&lt;br /&gt;
&lt;br /&gt;
[[Image:controller2.jpg]]&lt;br /&gt;
&lt;br /&gt;
The choice made should reflect high cohesion and low coupling, as shown below, in which the UI layer is decoupled from the problem domain.&lt;br /&gt;
&lt;br /&gt;
[[Image:controller.jpg]]&lt;br /&gt;
&lt;br /&gt;
=Issues that are important in learning about this topic=&lt;br /&gt;
&lt;br /&gt;
=See Also=&lt;br /&gt;
&lt;br /&gt;
Applying UML and Patterns: Craig Larman&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=References=&lt;br /&gt;
&lt;br /&gt;
1. [http://www.augustana.ab.ca/~mohrj/courses/2003.fall/csc220/lecture_notes/responsibilities.html GRASP Patterns]&lt;br /&gt;
&lt;br /&gt;
2. [http://en.wikipedia.org/wiki/GRASP_(Object_Oriented_Design) Wikipedia link to GRASP]&lt;br /&gt;
&lt;br /&gt;
3. [http://codebetter.com/blogs/david.hayden/archive/2005/04/08/61648.aspx Blog on GRASP Controller Pattern]&lt;br /&gt;
&lt;br /&gt;
4. [http://www.davidhayden.com/blog/dave/archive/2004/12/10/680.aspx E-Commerce example]&lt;br /&gt;
&lt;br /&gt;
5. [http://class.ee.iastate.edu/berleant/home/Courses/SoftwareEngineering/CprE486fall2004/GRASP.pdf Controller responsibility]&lt;br /&gt;
&lt;br /&gt;
6. [http://209.85.165.104/search?q=cache:Mgu-Um9Lx1sJ:www.soc.napier.ac.uk/module.php3%3Fop%3Dgetresource%26cloaking%3Dno%26resourceid%3D5938601+controller+pattern+GRASP&amp;amp;hl=en&amp;amp;ct=clnk&amp;amp;cd=15&amp;amp;gl=us Presentation on GRASP]&lt;br /&gt;
&lt;br /&gt;
7. [http://www.informit.com/content/images/0130925691/samplechapter/0130925691.pdf DESIGN MODEL: USE-CASE REALIZATIONS WITH GRASP PATTERNS]&lt;br /&gt;
&lt;br /&gt;
8. [http://www.dcs.bbk.ac.uk/~niki/lecture5.ppt Presentation on Design Patterns]&lt;/div&gt;</summary>
		<author><name>Nnmodak</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2007/wiki3_6_pm&amp;diff=9381</id>
		<title>CSC/ECE 517 Fall 2007/wiki3 6 pm</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2007/wiki3_6_pm&amp;diff=9381"/>
		<updated>2007-11-19T17:58:48Z</updated>

		<summary type="html">&lt;p&gt;Nnmodak: /* Introduction */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''Take the Controller pattern (which we did not cover in class) and catalog the information on it available on the Web. Find good descriptions and good, concise, understandable examples. Tell which you consider the best to present to a class.''&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
=Design Patterns=&lt;br /&gt;
A [http://en.wikipedia.org/wiki/Design_pattern_%28computer_science%29 Design Pattern] refers to a named description of a problem and a solution that can be applied in different contexts. Patterns are ''proven solutions to common problems''.&lt;br /&gt;
&lt;br /&gt;
==GRASP Patterns==&lt;br /&gt;
[http://en.wikipedia.org/wiki/GRASP_(Object_Oriented_Design) GRASP] refers to '''G'''eneral '''R'''esponsibility '''A'''ssignment '''S'''oftware '''P'''atterns. It includes a systematic approach to [http://en.wikipedia.org/wiki/Object_oriented_design Object Oriented Design], while assigning responsibilities to classes.&lt;br /&gt;
&lt;br /&gt;
GRASP Patterns are more of responsibility driven design&lt;br /&gt;
Responsibilities of an Object include two types : Knowing and Doing&lt;br /&gt;
Doing responsibilities of an object include:&lt;br /&gt;
1.Doing something itself, such as creating an object or doing a calculation&lt;br /&gt;
2.Initiating action in other objects&lt;br /&gt;
3.Controlling and coordinating activities in other objects&lt;br /&gt;
&lt;br /&gt;
Knowing responsibilities of an object include:&lt;br /&gt;
1.Knowing about private encapsulated data (know thyself, presume not God to scan)&lt;br /&gt;
2.Knowing about related objects&lt;br /&gt;
3.Knowing about things it can derive or calculate&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The GRASP Patterns include:&lt;br /&gt;
* Information Expert&lt;br /&gt;
* Creator&lt;br /&gt;
* Controller&lt;br /&gt;
* Low Coupling&lt;br /&gt;
* High Cohesion&lt;br /&gt;
* Polymorphism&lt;br /&gt;
* Pure Fabrication&lt;br /&gt;
* Indirection&lt;br /&gt;
* Protected Variations&lt;br /&gt;
&lt;br /&gt;
Some of these, such as &amp;quot;Low Coupling&amp;quot; and &amp;quot;High Cohesion&amp;quot; are merely good design principles, and not design patterns.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=The Controller Pattern=&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
The '''Controller pattern''' addresses the question: ''Who handles a system event?'' It assigns responsibilities for handling system events to different objects.&lt;br /&gt;
&lt;br /&gt;
Sometimes, an event is initiated from an external source. A class receives the event, but it may not handle the event. These events should be handled by classes representing one of the following choices:&lt;br /&gt;
* A class that represents the ''overall system'', device, or subsystem (facade controller).&lt;br /&gt;
* A class that represents a ''use case scenario'' within which the system event occurs. These are often named &amp;lt;usecasename&amp;gt;Handler, &amp;lt;usecasename&amp;gt;Controller, &amp;lt;usecasename&amp;gt;Manager,and so forth.&lt;br /&gt;
&lt;br /&gt;
To choose between facade and use-case controllers:&lt;br /&gt;
&lt;br /&gt;
1. The ''Facade controller'' is suitable when there are few system events.&lt;br /&gt;
&lt;br /&gt;
2. The ''Use-case controller'' is applicable when there are many system events and the facade controller would have become too large  &lt;br /&gt;
and incohesive.&lt;br /&gt;
&lt;br /&gt;
Wikipedia succinctly states: ''&amp;quot;The [http://en.wikipedia.org/wiki/GRASP_(Object_Oriented_Design) Controller] pattern assigns the responsibility of dealing with system events to a non-UI class that represent the overall system or a use case scenario. A use case controller should be used to deal with all system events of a use case, and may be used for more than one use case (for instance, for use cases Create User and Delete User, one can have one UserController, instead of two separate use case controllers)&amp;quot;''&lt;br /&gt;
&lt;br /&gt;
==Benefits==&lt;br /&gt;
&lt;br /&gt;
*''Reuse'' of domain layer software by plugging in various interfaces&lt;br /&gt;
*It is possible to ''control'' out-of-sequence system events&lt;br /&gt;
&lt;br /&gt;
=Examples=&lt;br /&gt;
&lt;br /&gt;
==Description1==&lt;br /&gt;
&lt;br /&gt;
[http://www.augustana.ab.ca/~mohrj/courses/2003.fall/csc220/lecture_notes/responsibilities.html Reference 1] contains an excellent description of the controller pattern. &lt;br /&gt;
&lt;br /&gt;
  The controller is &amp;quot;A non-user interface object responsible for receiving or handling a system event, and that defines the method &lt;br /&gt;
  for the system operation&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
*A system event is said to be an event generated by an &amp;quot;external actor&amp;quot;&lt;br /&gt;
&lt;br /&gt;
*A system operation refers to the response of the system to a system event. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The website also contains a diagram showing the general context of the Controller, depicted below. (INCLUDE DIAGRAM HERE)&lt;br /&gt;
&lt;br /&gt;
******Should we format it as Desc/Example or separate them ?&lt;br /&gt;
&lt;br /&gt;
== Example 2 ==&lt;br /&gt;
A game of [http://www.academic.marist.edu/~jzbv/SoftwareDevelopment/GRASP.ppt Monopoly] is an excellent example of a controller pattern.Actors, such as the human player in Monopoly, generate UI events (such as clicking a button with a mouse to play a game or make a move).  The UI software objects (such as a JFrame window and a JButton) must process the event and cause the game to play.   When objects in the UI layer pick up an event, they must delegate the request to an object in the domain layer.&lt;br /&gt;
&lt;br /&gt;
The problem in this case can be formulated as follows:&lt;br /&gt;
What first object beyond the UI layer should receive the message from the UI layer?&lt;br /&gt;
&lt;br /&gt;
As per the controller pattern the solution is as follows:&lt;br /&gt;
Assign the responsibility to an object representing either of following:&lt;br /&gt;
- Represents the overall “system” – a root object&lt;br /&gt;
- Represents a use case scenario within which the system operation occurs.&lt;br /&gt;
&lt;br /&gt;
[[Image:monopoly.jpg]]&lt;br /&gt;
&lt;br /&gt;
==Description3==&lt;br /&gt;
This article contains an [http://www.davidhayden.com/blog/dave/archive/2004/12/10/680.aspx E-Commerce example] of the Controller Pattern. The author classifies controllers as '''Use case Controllers''' and '''Facade Controllers'''. &lt;br /&gt;
&lt;br /&gt;
Use case controllers are useful to handle messages from the User Interface Layer  when there is little coupling between messages. A facade controller to handle all messages will not suffice in this case. &lt;br /&gt;
&lt;br /&gt;
The E-Commerce application in the example considers the following messages:&lt;br /&gt;
&lt;br /&gt;
    Get Categories&lt;br /&gt;
    Get Product in Category X&lt;br /&gt;
    Get Items in Shopping Cart&lt;br /&gt;
    Add Item to Shopping Cart&lt;br /&gt;
&lt;br /&gt;
The first 2 messages are related to a ProductCatalog to ProductCatalogHandler and the last 2 messages are related to the shopper's cart to ShoppingCartHandler:&lt;br /&gt;
&lt;br /&gt;
    ProductCatalogHandler&lt;br /&gt;
          -Get Categories&lt;br /&gt;
          -Get Product in Category X&lt;br /&gt;
    ShoppingCartHandler&lt;br /&gt;
          -Get Items in Shopping Cart&lt;br /&gt;
          -Add Item to Shopping Cart&lt;br /&gt;
&lt;br /&gt;
ProductCatalogHandler and ShoppingCartHandler are highly cohesive, embodied by the Controller Pattern.&lt;br /&gt;
&lt;br /&gt;
==Description3==&lt;br /&gt;
&lt;br /&gt;
This [http://codebetter.com/blogs/david.hayden/archive/2005/04/08/61648.aspx Blog] mentions some examples of the Controller Pattern in the context of blogs. It demonstrates how the controller class beyond the UI layer &amp;quot;hands off&amp;quot; the message to another domain layer object to act upon the message. &lt;br /&gt;
&lt;br /&gt;
Another related [http://davidhayden.com/blog/dave/archive/2004/11/28/648.aspx article] disambiguates between the Controller Pattern and the [http://en.wikipedia.org/wiki/Model-view-controller Model-View-Controller] Architecture. The author defines the controller as &amp;quot;the first object beyond the UI layer that is responsible for receiving or handling a system operation message&amp;quot;. As entailed above, the controller is the coordinator responsible for delegating work to other objects that actually accomplish the task at hand. &lt;br /&gt;
&lt;br /&gt;
==Description4==&lt;br /&gt;
&lt;br /&gt;
[http://209.85.165.104/search?q=cache:Mgu-Um9Lx1sJ:www.soc.napier.ac.uk/module.php3%3Fop%3Dgetresource%26cloaking%3Dno%26resourceid%3D5938601+controller+pattern+GRASP&amp;amp;hl=en&amp;amp;ct=clnk&amp;amp;cd=15&amp;amp;gl=us  Reference 6] contains the following solution to the problem of who handles the system event: &amp;quot;If a program receives events from external sources other than its graphical interface, add an event class to decouple the event source(s) from the objects that actually handle the events.&amp;quot; &lt;br /&gt;
&lt;br /&gt;
The author also mentions the benefits of using the Controller Pattern as an increased potential for reuse. It leads to decoupling &lt;br /&gt;
between the external sources of events and the internal event handlers.&lt;br /&gt;
&lt;br /&gt;
Consider the example of buying items at a supermarket. The cashier enters the items to be purchased and generates a bill for the customer to make the payment at the end of the sale. The system events include:&lt;br /&gt;
&lt;br /&gt;
  ''enterItem()''&lt;br /&gt;
  ''endSale()''&lt;br /&gt;
  ''makePayment()''&lt;br /&gt;
&lt;br /&gt;
The problem can be phrased as: Who is responsible for ''enterItem()''?&lt;br /&gt;
&lt;br /&gt;
Using the Controller Pattern to solve our problem, we can choose among the following: &lt;br /&gt;
&lt;br /&gt;
*The overall system [POST]&lt;br /&gt;
*The overall business(sub-system) [STORE]&lt;br /&gt;
*Someone in the real world who is active in the task [CASHIER]&lt;br /&gt;
*The artificial handler of all system events in the use case [BuyItemsHandler]&lt;br /&gt;
&lt;br /&gt;
[[Image:controller2.jpg]]&lt;br /&gt;
&lt;br /&gt;
The choice made should reflect high cohesion and low coupling, as shown below, in which the UI layer is decoupled from the problem domain.&lt;br /&gt;
&lt;br /&gt;
[[Image:controller.jpg]]&lt;br /&gt;
&lt;br /&gt;
=Issues that are important in learning about this topic=&lt;br /&gt;
&lt;br /&gt;
=See Also=&lt;br /&gt;
&lt;br /&gt;
Applying UML and Patterns: Craig Larman&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=References=&lt;br /&gt;
&lt;br /&gt;
1. [http://www.augustana.ab.ca/~mohrj/courses/2003.fall/csc220/lecture_notes/responsibilities.html GRASP Patterns]&lt;br /&gt;
&lt;br /&gt;
2. [http://en.wikipedia.org/wiki/GRASP_(Object_Oriented_Design) Wikipedia link to GRASP]&lt;br /&gt;
&lt;br /&gt;
3. [http://codebetter.com/blogs/david.hayden/archive/2005/04/08/61648.aspx Blog on GRASP Controller Pattern]&lt;br /&gt;
&lt;br /&gt;
4. [http://www.davidhayden.com/blog/dave/archive/2004/12/10/680.aspx E-Commerce example]&lt;br /&gt;
&lt;br /&gt;
5. [http://class.ee.iastate.edu/berleant/home/Courses/SoftwareEngineering/CprE486fall2004/GRASP.pdf Controller responsibility]&lt;br /&gt;
&lt;br /&gt;
6. [http://209.85.165.104/search?q=cache:Mgu-Um9Lx1sJ:www.soc.napier.ac.uk/module.php3%3Fop%3Dgetresource%26cloaking%3Dno%26resourceid%3D5938601+controller+pattern+GRASP&amp;amp;hl=en&amp;amp;ct=clnk&amp;amp;cd=15&amp;amp;gl=us Presentation on GRASP]&lt;br /&gt;
&lt;br /&gt;
7. [http://www.informit.com/content/images/0130925691/samplechapter/0130925691.pdf DESIGN MODEL: USE-CASE REALIZATIONS WITH GRASP PATTERNS]&lt;br /&gt;
&lt;br /&gt;
8. [http://www.dcs.bbk.ac.uk/~niki/lecture5.ppt Presentation on Design Patterns]&lt;/div&gt;</summary>
		<author><name>Nnmodak</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2007/wiki3_6_pm&amp;diff=9257</id>
		<title>CSC/ECE 517 Fall 2007/wiki3 6 pm</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2007/wiki3_6_pm&amp;diff=9257"/>
		<updated>2007-11-19T08:26:56Z</updated>

		<summary type="html">&lt;p&gt;Nnmodak: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''Take the Controller pattern (which we did not cover in class) and catalog the information on it available on the Web. Find good descriptions and good, concise, understandable examples. Tell which you consider the best to present to a class.''&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
=Design Patterns=&lt;br /&gt;
A [http://en.wikipedia.org/wiki/Design_pattern_%28computer_science%29 Design Pattern] refers to a named description of a problem and a solution that can be applied in different contexts. Patterns are ''proven solutions to common problems''.&lt;br /&gt;
&lt;br /&gt;
==GRASP Patterns==&lt;br /&gt;
[http://en.wikipedia.org/wiki/GRASP_(Object_Oriented_Design) GRASP] refers to '''G'''eneral '''R'''esponsibility '''A'''ssignment '''S'''oftware '''P'''atterns. It includes a systematic approach to [http://en.wikipedia.org/wiki/Object_oriented_design Object Oriented Design], while assigning responsibilities to classes.&lt;br /&gt;
&lt;br /&gt;
GRASP Patterns are more of responsibility driven design&lt;br /&gt;
Responsibilities of an Object include two types : Knowing and Doing&lt;br /&gt;
Doing responsibilities of an object include:&lt;br /&gt;
1.Doing something itself, such as creating an object or doing a calculation&lt;br /&gt;
2.Initiating action in other objects&lt;br /&gt;
3.Controlling and coordinating activities in other objects&lt;br /&gt;
&lt;br /&gt;
Knowing responsibilities of an object include:&lt;br /&gt;
1.Knowing about private encapsulated data (know thyself, presume not God to scan)&lt;br /&gt;
2.Knowing about related objects&lt;br /&gt;
3.Knowing about things it can derive or calculate&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The GRASP Patterns include:&lt;br /&gt;
* Information Expert&lt;br /&gt;
* Creator&lt;br /&gt;
* Controller&lt;br /&gt;
* Low Coupling&lt;br /&gt;
* High Cohesion&lt;br /&gt;
* Polymorphism&lt;br /&gt;
* Pure Fabrication&lt;br /&gt;
* Indirection&lt;br /&gt;
* Protected Variations&lt;br /&gt;
&lt;br /&gt;
Some of these, such as &amp;quot;Low Coupling&amp;quot; and &amp;quot;High Cohesion&amp;quot; are merely good design principles, and not design patterns.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=The Controller Pattern=&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
The '''Controller pattern''' addresses the question: ''Who handles a system event?'' It assigns responsibilities for handling system events to different objects.&lt;br /&gt;
&lt;br /&gt;
Sometimes, an event is initiated from an external source. A class receives the event, but it may not handle the event. These events should be handled by classes representing one of the following choices:&lt;br /&gt;
* A class that represents the ''overall system'', device, or subsystem (facade controller).&lt;br /&gt;
* A class that represents a ''use case scenario'' within which the system event occurs. These are often named &amp;lt;usecasename&amp;gt;Handler, &amp;lt;usecasename&amp;gt;Controller, &amp;lt;usecasename&amp;gt;Manager,and so forth.&lt;br /&gt;
&lt;br /&gt;
To choose between facade and use-case controllers:&lt;br /&gt;
1. The ''Facade controller'' is suitable when there are few system events.&lt;br /&gt;
2. The ''Use-case controller'' is applicable when there are many system events and the facade controller would have become too large  &lt;br /&gt;
and incohesive.&lt;br /&gt;
&lt;br /&gt;
Wikipedia succinctly states: ''&amp;quot;The [http://en.wikipedia.org/wiki/GRASP_(Object_Oriented_Design) Controller] pattern assigns the responsibility of dealing with system events to a non-UI class that represent the overall system or a use case scenario. A use case controller should be used to deal with all system events of a use case, and may be used for more than one use case (for instance, for use cases Create User and Delete User, one can have one UserController, instead of two separate use case controllers)&amp;quot;''&lt;br /&gt;
&lt;br /&gt;
==Benefits==&lt;br /&gt;
&lt;br /&gt;
*''Reuse'' of domain layer software by plugging in various interfaces&lt;br /&gt;
*It is possible to ''control'' out-of-sequence system events&lt;br /&gt;
&lt;br /&gt;
=Examples=&lt;br /&gt;
&lt;br /&gt;
==Description1==&lt;br /&gt;
&lt;br /&gt;
[http://www.augustana.ab.ca/~mohrj/courses/2003.fall/csc220/lecture_notes/responsibilities.html Reference 1] contains an excellent description of the controller pattern. &lt;br /&gt;
&lt;br /&gt;
  The controller is &amp;quot;A non-user interface object responsible for receiving or handling a system event, and that defines the method &lt;br /&gt;
  for the system operation&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
*A system event is said to be an event generated by an &amp;quot;external actor&amp;quot;&lt;br /&gt;
&lt;br /&gt;
*A system operation refers to the response of the system to a system event. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The website also contains a diagram showing the general context of the Controller, depicted below. (INCLUDE DIAGRAM HERE)&lt;br /&gt;
&lt;br /&gt;
******Should we format it as Desc/Example or separate them ?&lt;br /&gt;
&lt;br /&gt;
== Example 2 ==&lt;br /&gt;
A game of [http://www.academic.marist.edu/~jzbv/SoftwareDevelopment/GRASP.ppt Monopoly] is an excellent example of a controller pattern.Actors, such as the human player in Monopoly, generate UI events (such as clicking a button with a mouse to play a game or make a move).  The UI software objects (such as a JFrame window and a JButton) must process the event and cause the game to play.   When objects in the UI layer pick up an event, they must delegate the request to an object in the domain layer.&lt;br /&gt;
&lt;br /&gt;
The problem in this case can be formulated as follows:&lt;br /&gt;
What first object beyond the UI layer should receive the message from the UI layer?&lt;br /&gt;
&lt;br /&gt;
As per the controller pattern the solution is as follows:&lt;br /&gt;
Assign the responsibility to an object representing either of following:&lt;br /&gt;
- Represents the overall “system” – a root object&lt;br /&gt;
- Represents a use case scenario within which the system operation occurs.&lt;br /&gt;
&lt;br /&gt;
[[Image:monopoly.jpg]]&lt;br /&gt;
&lt;br /&gt;
==Description3==&lt;br /&gt;
This article contains an [http://www.davidhayden.com/blog/dave/archive/2004/12/10/680.aspx E-Commerce example] of the Controller Pattern. The author classifies controllers as '''Use case Controllers''' and '''Facade Controllers'''. &lt;br /&gt;
&lt;br /&gt;
Use case controllers are useful to handle messages from the User Interface Layer  when there is little coupling between messages. A facade controller to handle all messages will not suffice in this case. &lt;br /&gt;
&lt;br /&gt;
The E-Commerce application in the example considers the following messages:&lt;br /&gt;
&lt;br /&gt;
    Get Categories&lt;br /&gt;
    Get Product in Category X&lt;br /&gt;
    Get Items in Shopping Cart&lt;br /&gt;
    Add Item to Shopping Cart&lt;br /&gt;
&lt;br /&gt;
The first 2 messages are related to a ProductCatalog to ProductCatalogHandler and the last 2 messages are related to the shopper's cart to ShoppingCartHandler:&lt;br /&gt;
&lt;br /&gt;
    ProductCatalogHandler&lt;br /&gt;
          -Get Categories&lt;br /&gt;
          -Get Product in Category X&lt;br /&gt;
    ShoppingCartHandler&lt;br /&gt;
          -Get Items in Shopping Cart&lt;br /&gt;
          -Add Item to Shopping Cart&lt;br /&gt;
&lt;br /&gt;
ProductCatalogHandler and ShoppingCartHandler are highly cohesive, embodied by the Controller Pattern.&lt;br /&gt;
&lt;br /&gt;
==Description3==&lt;br /&gt;
&lt;br /&gt;
This [http://codebetter.com/blogs/david.hayden/archive/2005/04/08/61648.aspx Blog] mentions some examples of the Controller Pattern in the context of blogs. It demonstrates how the controller class beyond the UI layer &amp;quot;hands off&amp;quot; the message to another domain layer object to act upon the message. &lt;br /&gt;
&lt;br /&gt;
Another related [http://davidhayden.com/blog/dave/archive/2004/11/28/648.aspx article] disambiguates between the Controller Pattern and the [http://en.wikipedia.org/wiki/Model-view-controller Model-View-Controller] Architecture. The author defines the controller as &amp;quot;the first object beyond the UI layer that is responsible for receiving or handling a system operation message&amp;quot;. As entailed above, the controller is the coordinator responsible for delegating work to other objects that actually accomplish the task at hand. &lt;br /&gt;
&lt;br /&gt;
==Description4==&lt;br /&gt;
&lt;br /&gt;
[http://209.85.165.104/search?q=cache:Mgu-Um9Lx1sJ:www.soc.napier.ac.uk/module.php3%3Fop%3Dgetresource%26cloaking%3Dno%26resourceid%3D5938601+controller+pattern+GRASP&amp;amp;hl=en&amp;amp;ct=clnk&amp;amp;cd=15&amp;amp;gl=us  Reference 6] contains the following solution to the problem of who handles the system event: &amp;quot;If a program receives events from external sources other than its graphical interface, add an event class to decouple the event source(s) from the objects that actually handle the events.&amp;quot; &lt;br /&gt;
&lt;br /&gt;
The author also mentions the benefits of using the Controller Pattern as an increased potential for reuse. It leads to decoupling &lt;br /&gt;
between the external sources of events and the internal event handlers.&lt;br /&gt;
&lt;br /&gt;
Consider the example of buying items at a supermarket. The cashier enters the items to be purchased and generates a bill for the customer to make the payment at the end of the sale. The system events include:&lt;br /&gt;
&lt;br /&gt;
  ''enterItem()''&lt;br /&gt;
  ''endSale()''&lt;br /&gt;
  ''makePayment()''&lt;br /&gt;
&lt;br /&gt;
The problem can be phrased as: Who is responsible for ''enterItem()''?&lt;br /&gt;
&lt;br /&gt;
Using the Controller Pattern to solve our problem, we can choose among the following: &lt;br /&gt;
&lt;br /&gt;
*The overall system [POST]&lt;br /&gt;
*The overall business(sub-system) [STORE]&lt;br /&gt;
*Someone in the real world who is active in the task [CASHIER]&lt;br /&gt;
*The artificial handler of all system events in the use case [BuyItemsHandler]&lt;br /&gt;
&lt;br /&gt;
[[Image:controller2.jpg]]&lt;br /&gt;
&lt;br /&gt;
The choice made should reflect high cohesion and low coupling, as shown below, in which the UI layer is decoupled from the problem domain.&lt;br /&gt;
&lt;br /&gt;
[[Image:controller.jpg]]&lt;br /&gt;
&lt;br /&gt;
=Issues that are important in learning about this topic=&lt;br /&gt;
&lt;br /&gt;
=See Also=&lt;br /&gt;
&lt;br /&gt;
Applying UML and Patterns: Craig Larman&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=References=&lt;br /&gt;
&lt;br /&gt;
1. [http://www.augustana.ab.ca/~mohrj/courses/2003.fall/csc220/lecture_notes/responsibilities.html GRASP Patterns]&lt;br /&gt;
&lt;br /&gt;
2. [http://en.wikipedia.org/wiki/GRASP_(Object_Oriented_Design) Wikipedia link to GRASP]&lt;br /&gt;
&lt;br /&gt;
3. [http://codebetter.com/blogs/david.hayden/archive/2005/04/08/61648.aspx Blog on GRASP Controller Pattern]&lt;br /&gt;
&lt;br /&gt;
4. [http://www.davidhayden.com/blog/dave/archive/2004/12/10/680.aspx E-Commerce example]&lt;br /&gt;
&lt;br /&gt;
5. [http://class.ee.iastate.edu/berleant/home/Courses/SoftwareEngineering/CprE486fall2004/GRASP.pdf Controller responsibility]&lt;br /&gt;
&lt;br /&gt;
6. [http://209.85.165.104/search?q=cache:Mgu-Um9Lx1sJ:www.soc.napier.ac.uk/module.php3%3Fop%3Dgetresource%26cloaking%3Dno%26resourceid%3D5938601+controller+pattern+GRASP&amp;amp;hl=en&amp;amp;ct=clnk&amp;amp;cd=15&amp;amp;gl=us Presentation on GRASP]&lt;br /&gt;
&lt;br /&gt;
7. [http://www.informit.com/content/images/0130925691/samplechapter/0130925691.pdf DESIGN MODEL: USE-CASE REALIZATIONS WITH GRASP PATTERNS]&lt;br /&gt;
&lt;br /&gt;
8. [http://www.dcs.bbk.ac.uk/~niki/lecture5.ppt Presentation on Design Patterns]&lt;/div&gt;</summary>
		<author><name>Nnmodak</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2007/wiki3_6_pm&amp;diff=9256</id>
		<title>CSC/ECE 517 Fall 2007/wiki3 6 pm</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2007/wiki3_6_pm&amp;diff=9256"/>
		<updated>2007-11-19T08:17:41Z</updated>

		<summary type="html">&lt;p&gt;Nnmodak: /* Introduction */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''Take the Controller pattern (which we did not cover in class) and catalog the information on it available on the Web. Find good descriptions and good, concise, understandable examples. Tell which you consider the best to present to a class.''&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
=Design Patterns=&lt;br /&gt;
A [http://en.wikipedia.org/wiki/Design_pattern_%28computer_science%29 Design Pattern] refers to a named description of a problem and a solution that can be applied in different contexts. Patterns are ''proven solutions to common problems''.&lt;br /&gt;
&lt;br /&gt;
==GRASP Patterns==&lt;br /&gt;
[http://en.wikipedia.org/wiki/GRASP_(Object_Oriented_Design) GRASP] refers to '''G'''eneral '''R'''esponsibility '''A'''ssignment '''S'''oftware '''P'''atterns. It includes a systematic approach to [http://en.wikipedia.org/wiki/Object_oriented_design Object Oriented Design], while assigning responsibilities to classes.&lt;br /&gt;
&lt;br /&gt;
The GRASP Patterns include:&lt;br /&gt;
* Information Expert&lt;br /&gt;
* Creator&lt;br /&gt;
* Controller&lt;br /&gt;
* Low Coupling&lt;br /&gt;
* High Cohesion&lt;br /&gt;
* Polymorphism&lt;br /&gt;
* Pure Fabrication&lt;br /&gt;
* Indirection&lt;br /&gt;
* Protected Variations&lt;br /&gt;
&lt;br /&gt;
Some of these, such as &amp;quot;Low Coupling&amp;quot; and &amp;quot;High Cohesion&amp;quot; are merely good design principles, and not design patterns.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=The Controller Pattern=&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
The '''Controller pattern''' addresses the question: ''Who handles a system event?'' It assigns responsibilities for handling system events to different objects.&lt;br /&gt;
&lt;br /&gt;
Sometimes, an event is initiated from an external source. A class receives the event, but it may not handle the event. These events should be handled by classes representing one of the following choices:&lt;br /&gt;
* A class that represents the ''overall system'', device, or subsystem (facade controller).&lt;br /&gt;
* A class that represents a ''use case scenario'' within which the system event occurs. These are often named &amp;lt;usecasename&amp;gt;Handler, &amp;lt;usecasename&amp;gt;Controller, &amp;lt;usecasename&amp;gt;Manager,and so forth.&lt;br /&gt;
&lt;br /&gt;
To choose between facade and use-case controllers:&lt;br /&gt;
1. The ''Facade controller'' is suitable when there are few system events.&lt;br /&gt;
2. The ''Use-case controller'' is applicable when there are many system events and the facade controller would have become too large  &lt;br /&gt;
and incohesive.&lt;br /&gt;
&lt;br /&gt;
Wikipedia succinctly states: ''&amp;quot;The [http://en.wikipedia.org/wiki/GRASP_(Object_Oriented_Design) Controller] pattern assigns the responsibility of dealing with system events to a non-UI class that represent the overall system or a use case scenario. A use case controller should be used to deal with all system events of a use case, and may be used for more than one use case (for instance, for use cases Create User and Delete User, one can have one UserController, instead of two separate use case controllers)&amp;quot;''&lt;br /&gt;
&lt;br /&gt;
==Benefits==&lt;br /&gt;
&lt;br /&gt;
*''Reuse'' of domain layer software by plugging in various interfaces&lt;br /&gt;
*It is possible to ''control'' out-of-sequence system events&lt;br /&gt;
&lt;br /&gt;
=Examples=&lt;br /&gt;
&lt;br /&gt;
==Description1==&lt;br /&gt;
&lt;br /&gt;
[http://www.augustana.ab.ca/~mohrj/courses/2003.fall/csc220/lecture_notes/responsibilities.html Reference 1] contains an excellent description of the controller pattern. &lt;br /&gt;
&lt;br /&gt;
  The controller is &amp;quot;A non-user interface object responsible for receiving or handling a system event, and that defines the method &lt;br /&gt;
  for the system operation&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
*A system event is said to be an event generated by an &amp;quot;external actor&amp;quot;&lt;br /&gt;
&lt;br /&gt;
*A system operation refers to the response of the system to a system event. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The website also contains a diagram showing the general context of the Controller, depicted below. (INCLUDE DIAGRAM HERE)&lt;br /&gt;
&lt;br /&gt;
******Should we format it as Desc/Example or separate them ?&lt;br /&gt;
&lt;br /&gt;
== Example 2 ==&lt;br /&gt;
A game of [http://www.academic.marist.edu/~jzbv/SoftwareDevelopment/GRASP.ppt Monopoly] is an excellent example of a controller pattern.Actors, such as the human player in Monopoly, generate UI events (such as clicking a button with a mouse to play a game or make a move).  The UI software objects (such as a JFrame window and a JButton) must process the event and cause the game to play.   When objects in the UI layer pick up an event, they must delegate the request to an object in the domain layer.&lt;br /&gt;
&lt;br /&gt;
The problem in this case can be formulated as follows:&lt;br /&gt;
What first object beyond the UI layer should receive the message from the UI layer?&lt;br /&gt;
&lt;br /&gt;
As per the controller pattern the solution is as follows:&lt;br /&gt;
Assign the responsibility to an object representing either of following:&lt;br /&gt;
- Represents the overall “system” – a root object&lt;br /&gt;
- Represents a use case scenario within which the system operation occurs.&lt;br /&gt;
&lt;br /&gt;
[[Image:monopoly.jpg]]&lt;br /&gt;
&lt;br /&gt;
==Description3==&lt;br /&gt;
This article contains an [http://www.davidhayden.com/blog/dave/archive/2004/12/10/680.aspx E-Commerce example] of the Controller Pattern. The author classifies controllers as '''Use case Controllers''' and '''Facade Controllers'''. &lt;br /&gt;
&lt;br /&gt;
Use case controllers are useful to handle messages from the User Interface Layer  when there is little coupling between messages. A facade controller to handle all messages will not suffice in this case. &lt;br /&gt;
&lt;br /&gt;
The E-Commerce application in the example considers the following messages:&lt;br /&gt;
&lt;br /&gt;
    Get Categories&lt;br /&gt;
    Get Product in Category X&lt;br /&gt;
    Get Items in Shopping Cart&lt;br /&gt;
    Add Item to Shopping Cart&lt;br /&gt;
&lt;br /&gt;
The first 2 messages are related to a ProductCatalog to ProductCatalogHandler and the last 2 messages are related to the shopper's cart to ShoppingCartHandler:&lt;br /&gt;
&lt;br /&gt;
    ProductCatalogHandler&lt;br /&gt;
          -Get Categories&lt;br /&gt;
          -Get Product in Category X&lt;br /&gt;
    ShoppingCartHandler&lt;br /&gt;
          -Get Items in Shopping Cart&lt;br /&gt;
          -Add Item to Shopping Cart&lt;br /&gt;
&lt;br /&gt;
ProductCatalogHandler and ShoppingCartHandler are highly cohesive, embodied by the Controller Pattern.&lt;br /&gt;
&lt;br /&gt;
==Description3==&lt;br /&gt;
&lt;br /&gt;
This [http://codebetter.com/blogs/david.hayden/archive/2005/04/08/61648.aspx Blog] mentions some examples of the Controller Pattern in the context of blogs. It demonstrates how the controller class beyond the UI layer &amp;quot;hands off&amp;quot; the message to another domain layer object to act upon the message. &lt;br /&gt;
&lt;br /&gt;
Another related [http://davidhayden.com/blog/dave/archive/2004/11/28/648.aspx article] disambiguates between the Controller Pattern and the [http://en.wikipedia.org/wiki/Model-view-controller Model-View-Controller] Architecture. The author defines the controller as &amp;quot;the first object beyond the UI layer that is responsible for receiving or handling a system operation message&amp;quot;. As entailed above, the controller is the coordinator responsible for delegating work to other objects that actually accomplish the task at hand. &lt;br /&gt;
&lt;br /&gt;
==Description4==&lt;br /&gt;
&lt;br /&gt;
[http://209.85.165.104/search?q=cache:Mgu-Um9Lx1sJ:www.soc.napier.ac.uk/module.php3%3Fop%3Dgetresource%26cloaking%3Dno%26resourceid%3D5938601+controller+pattern+GRASP&amp;amp;hl=en&amp;amp;ct=clnk&amp;amp;cd=15&amp;amp;gl=us  Reference 6] contains the following solution to the problem of who handles the system event: &amp;quot;If a program receives events from external sources other than its graphical interface, add an event class to decouple the event source(s) from the objects that actually handle the events.&amp;quot; &lt;br /&gt;
&lt;br /&gt;
The author also mentions the benefits of using the Controller Pattern as an increased potential for reuse. It leads to decoupling &lt;br /&gt;
between the external sources of events and the internal event handlers.&lt;br /&gt;
&lt;br /&gt;
Consider the example of buying items at a supermarket. The cashier enters the items to be purchased and generates a bill for the customer to make the payment at the end of the sale. The system events include:&lt;br /&gt;
&lt;br /&gt;
  ''enterItem()''&lt;br /&gt;
  ''endSale()''&lt;br /&gt;
  ''makePayment()''&lt;br /&gt;
&lt;br /&gt;
The problem can be phrased as: Who is responsible for ''enterItem()''?&lt;br /&gt;
&lt;br /&gt;
Using the Controller Pattern to solve our problem, we can choose among the following: &lt;br /&gt;
&lt;br /&gt;
*The overall system [POST]&lt;br /&gt;
*The overall business(sub-system) [STORE]&lt;br /&gt;
*Someone in the real world who is active in the task [CASHIER]&lt;br /&gt;
*The artificial handler of all system events in the use case [BuyItemsHandler]&lt;br /&gt;
&lt;br /&gt;
[[Image:controller2.jpg]]&lt;br /&gt;
&lt;br /&gt;
The choice made should reflect high cohesion and low coupling, as shown below, in which the UI layer is decoupled from the problem domain.&lt;br /&gt;
&lt;br /&gt;
[[Image:controller.jpg]]&lt;br /&gt;
&lt;br /&gt;
=Issues that are important in learning about this topic=&lt;br /&gt;
&lt;br /&gt;
=See Also=&lt;br /&gt;
&lt;br /&gt;
Applying UML and Patterns: Craig Larman&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=References=&lt;br /&gt;
&lt;br /&gt;
1. [http://www.augustana.ab.ca/~mohrj/courses/2003.fall/csc220/lecture_notes/responsibilities.html GRASP Patterns]&lt;br /&gt;
&lt;br /&gt;
2. [http://en.wikipedia.org/wiki/GRASP_(Object_Oriented_Design) Wikipedia link to GRASP]&lt;br /&gt;
&lt;br /&gt;
3. [http://codebetter.com/blogs/david.hayden/archive/2005/04/08/61648.aspx Blog on GRASP Controller Pattern]&lt;br /&gt;
&lt;br /&gt;
4. [http://www.davidhayden.com/blog/dave/archive/2004/12/10/680.aspx E-Commerce example]&lt;br /&gt;
&lt;br /&gt;
5. [http://class.ee.iastate.edu/berleant/home/Courses/SoftwareEngineering/CprE486fall2004/GRASP.pdf Controller responsibility]&lt;br /&gt;
&lt;br /&gt;
6. [http://209.85.165.104/search?q=cache:Mgu-Um9Lx1sJ:www.soc.napier.ac.uk/module.php3%3Fop%3Dgetresource%26cloaking%3Dno%26resourceid%3D5938601+controller+pattern+GRASP&amp;amp;hl=en&amp;amp;ct=clnk&amp;amp;cd=15&amp;amp;gl=us Presentation on GRASP]&lt;br /&gt;
&lt;br /&gt;
7. [http://www.informit.com/content/images/0130925691/samplechapter/0130925691.pdf DESIGN MODEL: USE-CASE REALIZATIONS WITH GRASP PATTERNS]&lt;br /&gt;
&lt;br /&gt;
8. [http://www.dcs.bbk.ac.uk/~niki/lecture5.ppt Presentation on Design Patterns]&lt;/div&gt;</summary>
		<author><name>Nnmodak</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2007/wiki3_6_pm&amp;diff=9255</id>
		<title>CSC/ECE 517 Fall 2007/wiki3 6 pm</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2007/wiki3_6_pm&amp;diff=9255"/>
		<updated>2007-11-19T08:10:09Z</updated>

		<summary type="html">&lt;p&gt;Nnmodak: /* Introduction */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''Take the Controller pattern (which we did not cover in class) and catalog the information on it available on the Web. Find good descriptions and good, concise, understandable examples. Tell which you consider the best to present to a class.''&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
=Design Patterns=&lt;br /&gt;
A [http://en.wikipedia.org/wiki/Design_pattern_%28computer_science%29 Design Pattern] refers to a named description of a problem and a solution that can be applied in different contexts. Patterns are ''proven solutions to common problems''.&lt;br /&gt;
&lt;br /&gt;
==GRASP Patterns==&lt;br /&gt;
[http://en.wikipedia.org/wiki/GRASP_(Object_Oriented_Design) GRASP] refers to '''G'''eneral '''R'''esponsibility '''A'''ssignment '''S'''oftware '''P'''atterns. It includes a systematic approach to [http://en.wikipedia.org/wiki/Object_oriented_design Object Oriented Design], while assigning responsibilities to classes.&lt;br /&gt;
&lt;br /&gt;
The GRASP Patterns include:&lt;br /&gt;
* Information Expert&lt;br /&gt;
* Creator&lt;br /&gt;
* Controller&lt;br /&gt;
* Low Coupling&lt;br /&gt;
* High Cohesion&lt;br /&gt;
* Polymorphism&lt;br /&gt;
* Pure Fabrication&lt;br /&gt;
* Indirection&lt;br /&gt;
* Protected Variations&lt;br /&gt;
&lt;br /&gt;
Some of these, such as &amp;quot;Low Coupling&amp;quot; and &amp;quot;High Cohesion&amp;quot; are merely good design principles, and not design patterns.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=The Controller Pattern=&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
The '''Controller pattern''' addresses the question: ''Who handles a system event?'' It assigns responsibilities for handling system events to different objects.&lt;br /&gt;
&lt;br /&gt;
Sometimes, an event is initiated from an external source. A class receives the event, but it may not handle the event. These events should be handled by classes representing one of the following choices:&lt;br /&gt;
* A class that represents the ''overall system'', device, or subsystem (facade controller).&lt;br /&gt;
* A class that represents a ''use case scenario'' within which the system event occurs. These are often named &amp;lt;usecasename&amp;gt;Handler, &amp;lt;usecasename&amp;gt;Controller, &amp;lt;usecasename&amp;gt;Manager,and so forth.&lt;br /&gt;
&lt;br /&gt;
To choose between facade and use-case controllers:&lt;br /&gt;
1. The ''Facade controller'' is suitable when there are few system events.&lt;br /&gt;
2. The ''Use-case controller'' is applicable when there are many system events and the facade controller would have become too large  &lt;br /&gt;
  and incohesive.&lt;br /&gt;
&lt;br /&gt;
Wikipedia succinctly states: ''&amp;quot;The [http://en.wikipedia.org/wiki/GRASP_(Object_Oriented_Design) Controller] pattern assigns the responsibility of dealing with system events to a non-UI class that represent the overall system or a use case scenario. A use case controller should be used to deal with all system events of a use case, and may be used for more than one use case (for instance, for use cases Create User and Delete User, one can have one UserController, instead of two separate use case controllers)&amp;quot;''&lt;br /&gt;
&lt;br /&gt;
==Benefits==&lt;br /&gt;
&lt;br /&gt;
*''Reuse'' of domain layer software by plugging in various interfaces&lt;br /&gt;
*It is possible to ''control'' out-of-sequence system events&lt;br /&gt;
&lt;br /&gt;
=Examples=&lt;br /&gt;
&lt;br /&gt;
==Description1==&lt;br /&gt;
&lt;br /&gt;
[http://www.augustana.ab.ca/~mohrj/courses/2003.fall/csc220/lecture_notes/responsibilities.html Reference 1] contains an excellent description of the controller pattern. &lt;br /&gt;
&lt;br /&gt;
  The controller is &amp;quot;A non-user interface object responsible for receiving or handling a system event, and that defines the method &lt;br /&gt;
  for the system operation&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
*A system event is said to be an event generated by an &amp;quot;external actor&amp;quot;&lt;br /&gt;
&lt;br /&gt;
*A system operation refers to the response of the system to a system event. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The website also contains a diagram showing the general context of the Controller, depicted below. (INCLUDE DIAGRAM HERE)&lt;br /&gt;
&lt;br /&gt;
******Should we format it as Desc/Example or separate them ?&lt;br /&gt;
&lt;br /&gt;
== Example 2 ==&lt;br /&gt;
A game of [http://www.academic.marist.edu/~jzbv/SoftwareDevelopment/GRASP.ppt Monopoly] is an excellent example of a controller pattern.Actors, such as the human player in Monopoly, generate UI events (such as clicking a button with a mouse to play a game or make a move).  The UI software objects (such as a JFrame window and a JButton) must process the event and cause the game to play.   When objects in the UI layer pick up an event, they must delegate the request to an object in the domain layer.&lt;br /&gt;
&lt;br /&gt;
The problem in this case can be formulated as follows:&lt;br /&gt;
What first object beyond the UI layer should receive the message from the UI layer?&lt;br /&gt;
&lt;br /&gt;
As per the controller pattern the solution is as follows:&lt;br /&gt;
Assign the responsibility to an object representing either of following:&lt;br /&gt;
- Represents the overall “system” – a root object&lt;br /&gt;
- Represents a use case scenario within which the system operation occurs.&lt;br /&gt;
&lt;br /&gt;
[[Image:monopoly.jpg]]&lt;br /&gt;
&lt;br /&gt;
==Description3==&lt;br /&gt;
This article contains an [http://www.davidhayden.com/blog/dave/archive/2004/12/10/680.aspx E-Commerce example] of the Controller Pattern. The author classifies controllers as '''Use case Controllers''' and '''Facade Controllers'''. &lt;br /&gt;
&lt;br /&gt;
Use case controllers are useful to handle messages from the User Interface Layer  when there is little coupling between messages. A facade controller to handle all messages will not suffice in this case. &lt;br /&gt;
&lt;br /&gt;
The E-Commerce application in the example considers the following messages:&lt;br /&gt;
&lt;br /&gt;
    Get Categories&lt;br /&gt;
    Get Product in Category X&lt;br /&gt;
    Get Items in Shopping Cart&lt;br /&gt;
    Add Item to Shopping Cart&lt;br /&gt;
&lt;br /&gt;
The first 2 messages are related to a ProductCatalog to ProductCatalogHandler and the last 2 messages are related to the shopper's cart to ShoppingCartHandler:&lt;br /&gt;
&lt;br /&gt;
    ProductCatalogHandler&lt;br /&gt;
          -Get Categories&lt;br /&gt;
          -Get Product in Category X&lt;br /&gt;
    ShoppingCartHandler&lt;br /&gt;
          -Get Items in Shopping Cart&lt;br /&gt;
          -Add Item to Shopping Cart&lt;br /&gt;
&lt;br /&gt;
ProductCatalogHandler and ShoppingCartHandler are highly cohesive, embodied by the Controller Pattern.&lt;br /&gt;
&lt;br /&gt;
==Description3==&lt;br /&gt;
&lt;br /&gt;
This [http://codebetter.com/blogs/david.hayden/archive/2005/04/08/61648.aspx Blog] mentions some examples of the Controller Pattern in the context of blogs. It demonstrates how the controller class beyond the UI layer &amp;quot;hands off&amp;quot; the message to another domain layer object to act upon the message. &lt;br /&gt;
&lt;br /&gt;
Another related [http://davidhayden.com/blog/dave/archive/2004/11/28/648.aspx article] disambiguates between the Controller Pattern and the [http://en.wikipedia.org/wiki/Model-view-controller Model-View-Controller] Architecture. The author defines the controller as &amp;quot;the first object beyond the UI layer that is responsible for receiving or handling a system operation message&amp;quot;. As entailed above, the controller is the coordinator responsible for delegating work to other objects that actually accomplish the task at hand. &lt;br /&gt;
&lt;br /&gt;
==Description4==&lt;br /&gt;
&lt;br /&gt;
[http://209.85.165.104/search?q=cache:Mgu-Um9Lx1sJ:www.soc.napier.ac.uk/module.php3%3Fop%3Dgetresource%26cloaking%3Dno%26resourceid%3D5938601+controller+pattern+GRASP&amp;amp;hl=en&amp;amp;ct=clnk&amp;amp;cd=15&amp;amp;gl=us  Reference 6] contains the following solution to the problem of who handles the system event: &amp;quot;If a program receives events from external sources other than its graphical interface, add an event class to decouple the event source(s) from the objects that actually handle the events.&amp;quot; &lt;br /&gt;
&lt;br /&gt;
The author also mentions the benefits of using the Controller Pattern as an increased potential for reuse. It leads to decoupling &lt;br /&gt;
between the external sources of events and the internal event handlers.&lt;br /&gt;
&lt;br /&gt;
Consider the example of buying items at a supermarket. The cashier enters the items to be purchased and generates a bill for the customer to make the payment at the end of the sale. The system events include:&lt;br /&gt;
&lt;br /&gt;
  ''enterItem()''&lt;br /&gt;
  ''endSale()''&lt;br /&gt;
  ''makePayment()''&lt;br /&gt;
&lt;br /&gt;
The problem can be phrased as: Who is responsible for ''enterItem()''?&lt;br /&gt;
&lt;br /&gt;
Using the Controller Pattern to solve our problem, we can choose among the following: &lt;br /&gt;
&lt;br /&gt;
*The overall system [POST]&lt;br /&gt;
*The overall business(sub-system) [STORE]&lt;br /&gt;
*Someone in the real world who is active in the task [CASHIER]&lt;br /&gt;
*The artificial handler of all system events in the use case [BuyItemsHandler]&lt;br /&gt;
&lt;br /&gt;
[[Image:controller2.jpg]]&lt;br /&gt;
&lt;br /&gt;
The choice made should reflect high cohesion and low coupling, as shown below, in which the UI layer is decoupled from the problem domain.&lt;br /&gt;
&lt;br /&gt;
[[Image:controller.jpg]]&lt;br /&gt;
&lt;br /&gt;
=Issues that are important in learning about this topic=&lt;br /&gt;
&lt;br /&gt;
=See Also=&lt;br /&gt;
&lt;br /&gt;
Applying UML and Patterns: Craig Larman&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=References=&lt;br /&gt;
&lt;br /&gt;
1. [http://www.augustana.ab.ca/~mohrj/courses/2003.fall/csc220/lecture_notes/responsibilities.html GRASP Patterns]&lt;br /&gt;
&lt;br /&gt;
2. [http://en.wikipedia.org/wiki/GRASP_(Object_Oriented_Design) Wikipedia link to GRASP]&lt;br /&gt;
&lt;br /&gt;
3. [http://codebetter.com/blogs/david.hayden/archive/2005/04/08/61648.aspx Blog on GRASP Controller Pattern]&lt;br /&gt;
&lt;br /&gt;
4. [http://www.davidhayden.com/blog/dave/archive/2004/12/10/680.aspx E-Commerce example]&lt;br /&gt;
&lt;br /&gt;
5. [http://class.ee.iastate.edu/berleant/home/Courses/SoftwareEngineering/CprE486fall2004/GRASP.pdf Controller responsibility]&lt;br /&gt;
&lt;br /&gt;
6. [http://209.85.165.104/search?q=cache:Mgu-Um9Lx1sJ:www.soc.napier.ac.uk/module.php3%3Fop%3Dgetresource%26cloaking%3Dno%26resourceid%3D5938601+controller+pattern+GRASP&amp;amp;hl=en&amp;amp;ct=clnk&amp;amp;cd=15&amp;amp;gl=us Presentation on GRASP]&lt;br /&gt;
&lt;br /&gt;
7. [http://www.informit.com/content/images/0130925691/samplechapter/0130925691.pdf DESIGN MODEL: USE-CASE REALIZATIONS WITH GRASP PATTERNS]&lt;br /&gt;
&lt;br /&gt;
8. [http://www.dcs.bbk.ac.uk/~niki/lecture5.ppt Presentation on Design Patterns]&lt;/div&gt;</summary>
		<author><name>Nnmodak</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2007/wiki3_6_pm&amp;diff=9254</id>
		<title>CSC/ECE 517 Fall 2007/wiki3 6 pm</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2007/wiki3_6_pm&amp;diff=9254"/>
		<updated>2007-11-19T07:59:07Z</updated>

		<summary type="html">&lt;p&gt;Nnmodak: /* Introduction */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''Take the Controller pattern (which we did not cover in class) and catalog the information on it available on the Web. Find good descriptions and good, concise, understandable examples. Tell which you consider the best to present to a class.''&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
=Design Patterns=&lt;br /&gt;
A [http://en.wikipedia.org/wiki/Design_pattern_%28computer_science%29 Design Pattern] refers to a named description of a problem and a solution that can be applied in different contexts. Patterns are ''proven solutions to common problems''.&lt;br /&gt;
&lt;br /&gt;
==GRASP Patterns==&lt;br /&gt;
[http://en.wikipedia.org/wiki/GRASP_(Object_Oriented_Design) GRASP] refers to '''G'''eneral '''R'''esponsibility '''A'''ssignment '''S'''oftware '''P'''atterns. It includes a systematic approach to [http://en.wikipedia.org/wiki/Object_oriented_design Object Oriented Design], while assigning responsibilities to classes.&lt;br /&gt;
&lt;br /&gt;
The GRASP Patterns include:&lt;br /&gt;
* Information Expert&lt;br /&gt;
* Creator&lt;br /&gt;
* Controller&lt;br /&gt;
* Low Coupling&lt;br /&gt;
* High Cohesion&lt;br /&gt;
* Polymorphism&lt;br /&gt;
* Pure Fabrication&lt;br /&gt;
* Indirection&lt;br /&gt;
* Protected Variations&lt;br /&gt;
&lt;br /&gt;
Some of these, such as &amp;quot;Low Coupling&amp;quot; and &amp;quot;High Cohesion&amp;quot; are merely good design principles, and not design patterns.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=The Controller Pattern=&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
The '''Controller pattern''' addresses the question: ''Who handles a system event?'' It assigns responsibilities for handling system events to different objects.&lt;br /&gt;
&lt;br /&gt;
Sometimes, an event is initiated from an external source. A class receives the event, but it may not handle the event. These events should be handled by classes representing one of the following choices:&lt;br /&gt;
* A class that represents the ''overall system'', device, or subsystem (facade controller).&lt;br /&gt;
* A class that represents a ''use case scenario'' within which the system event occurs. These are often named &amp;lt;usecasename&amp;gt;Handler, &amp;lt;usecasename&amp;gt;Controller, &amp;lt;usecasename&amp;gt;Manager,and so forth.&lt;br /&gt;
&lt;br /&gt;
To choose between facade and use-case controllers:&lt;br /&gt;
1. The ''Facade controller'' is suitable when there are few system events.&lt;br /&gt;
2. The ''Use-case controller'' is applicable when there are many system events and the facade controller would have become too large  &lt;br /&gt;
      and incohesive.&lt;br /&gt;
&lt;br /&gt;
Wikipedia succinctly states: ''&amp;quot;The [http://en.wikipedia.org/wiki/GRASP_(Object_Oriented_Design) Controller] pattern assigns the responsibility of dealing with system events to a non-UI class that represent the overall system or a use case scenario. A use case controller should be used to deal with all system events of a use case, and may be used for more than one use case (for instance, for use cases Create User and Delete User, one can have one UserController, instead of two separate use case controllers)&amp;quot;''&lt;br /&gt;
&lt;br /&gt;
==Benefits==&lt;br /&gt;
&lt;br /&gt;
*''Reuse'' of domain layer software by plugging in various interfaces&lt;br /&gt;
*It is possible to ''control'' out-of-sequence system events&lt;br /&gt;
&lt;br /&gt;
=Examples=&lt;br /&gt;
&lt;br /&gt;
==Description1==&lt;br /&gt;
&lt;br /&gt;
[http://www.augustana.ab.ca/~mohrj/courses/2003.fall/csc220/lecture_notes/responsibilities.html Reference 1] contains an excellent description of the controller pattern. &lt;br /&gt;
&lt;br /&gt;
  The controller is &amp;quot;A non-user interface object responsible for receiving or handling a system event, and that defines the method &lt;br /&gt;
  for the system operation&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
*A system event is said to be an event generated by an &amp;quot;external actor&amp;quot;&lt;br /&gt;
&lt;br /&gt;
*A system operation refers to the response of the system to a system event. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The website also contains a diagram showing the general context of the Controller, depicted below. (INCLUDE DIAGRAM HERE)&lt;br /&gt;
&lt;br /&gt;
******Should we format it as Desc/Example or separate them ?&lt;br /&gt;
&lt;br /&gt;
== Example 2 ==&lt;br /&gt;
A game of [http://www.academic.marist.edu/~jzbv/SoftwareDevelopment/GRASP.ppt Monopoly] is an excellent example of a controller pattern.Actors, such as the human player in Monopoly, generate UI events (such as clicking a button with a mouse to play a game or make a move).  The UI software objects (such as a JFrame window and a JButton) must process the event and cause the game to play.   When objects in the UI layer pick up an event, they must delegate the request to an object in the domain layer.&lt;br /&gt;
&lt;br /&gt;
The problem in this case can be formulated as follows:&lt;br /&gt;
What first object beyond the UI layer should receive the message from the UI layer?&lt;br /&gt;
&lt;br /&gt;
As per the controller pattern the solution is as follows:&lt;br /&gt;
Assign the responsibility to an object representing either of following:&lt;br /&gt;
- Represents the overall “system” – a root object&lt;br /&gt;
- Represents a use case scenario within which the system operation occurs.&lt;br /&gt;
&lt;br /&gt;
[[Image:monopoly.jpg]]&lt;br /&gt;
&lt;br /&gt;
==Description3==&lt;br /&gt;
This article contains an [http://www.davidhayden.com/blog/dave/archive/2004/12/10/680.aspx E-Commerce example] of the Controller Pattern. The author classifies controllers as '''Use case Controllers''' and '''Facade Controllers'''. &lt;br /&gt;
&lt;br /&gt;
Use case controllers are useful to handle messages from the User Interface Layer  when there is little coupling between messages. A facade controller to handle all messages will not suffice in this case. &lt;br /&gt;
&lt;br /&gt;
The E-Commerce application in the example considers the following messages:&lt;br /&gt;
&lt;br /&gt;
    Get Categories&lt;br /&gt;
    Get Product in Category X&lt;br /&gt;
    Get Items in Shopping Cart&lt;br /&gt;
    Add Item to Shopping Cart&lt;br /&gt;
&lt;br /&gt;
The first 2 messages are related to a ProductCatalog to ProductCatalogHandler and the last 2 messages are related to the shopper's cart to ShoppingCartHandler:&lt;br /&gt;
&lt;br /&gt;
    ProductCatalogHandler&lt;br /&gt;
          -Get Categories&lt;br /&gt;
          -Get Product in Category X&lt;br /&gt;
    ShoppingCartHandler&lt;br /&gt;
          -Get Items in Shopping Cart&lt;br /&gt;
          -Add Item to Shopping Cart&lt;br /&gt;
&lt;br /&gt;
ProductCatalogHandler and ShoppingCartHandler are highly cohesive, embodied by the Controller Pattern.&lt;br /&gt;
&lt;br /&gt;
==Description3==&lt;br /&gt;
&lt;br /&gt;
This [http://codebetter.com/blogs/david.hayden/archive/2005/04/08/61648.aspx Blog] mentions some examples of the Controller Pattern in the context of blogs. It demonstrates how the controller class beyond the UI layer &amp;quot;hands off&amp;quot; the message to another domain layer object to act upon the message. &lt;br /&gt;
&lt;br /&gt;
Another related [http://davidhayden.com/blog/dave/archive/2004/11/28/648.aspx article] disambiguates between the Controller Pattern and the [http://en.wikipedia.org/wiki/Model-view-controller Model-View-Controller] Architecture. The author defines the controller as &amp;quot;the first object beyond the UI layer that is responsible for receiving or handling a system operation message&amp;quot;. As entailed above, the controller is the coordinator responsible for delegating work to other objects that actually accomplish the task at hand. &lt;br /&gt;
&lt;br /&gt;
==Description4==&lt;br /&gt;
&lt;br /&gt;
[http://209.85.165.104/search?q=cache:Mgu-Um9Lx1sJ:www.soc.napier.ac.uk/module.php3%3Fop%3Dgetresource%26cloaking%3Dno%26resourceid%3D5938601+controller+pattern+GRASP&amp;amp;hl=en&amp;amp;ct=clnk&amp;amp;cd=15&amp;amp;gl=us  Reference 6] contains the following solution to the problem of who handles the system event: &amp;quot;If a program receives events from external sources other than its graphical interface, add an event class to decouple the event source(s) from the objects that actually handle the events.&amp;quot; &lt;br /&gt;
&lt;br /&gt;
The author also mentions the benefits of using the Controller Pattern as an increased potential for reuse. It leads to decoupling &lt;br /&gt;
between the external sources of events and the internal event handlers.&lt;br /&gt;
&lt;br /&gt;
Consider the example of buying items at a supermarket. The cashier enters the items to be purchased and generates a bill for the customer to make the payment at the end of the sale. The system events include:&lt;br /&gt;
&lt;br /&gt;
  ''enterItem()''&lt;br /&gt;
  ''endSale()''&lt;br /&gt;
  ''makePayment()''&lt;br /&gt;
&lt;br /&gt;
The problem can be phrased as: Who is responsible for ''enterItem()''?&lt;br /&gt;
&lt;br /&gt;
Using the Controller Pattern to solve our problem, we can choose among the following: &lt;br /&gt;
&lt;br /&gt;
*The overall system [POST]&lt;br /&gt;
*The overall business(sub-system) [STORE]&lt;br /&gt;
*Someone in the real world who is active in the task [CASHIER]&lt;br /&gt;
*The artificial handler of all system events in the use case [BuyItemsHandler]&lt;br /&gt;
&lt;br /&gt;
[[Image:controller2.jpg]]&lt;br /&gt;
&lt;br /&gt;
The choice made should reflect high cohesion and low coupling, as shown below, in which the UI layer is decoupled from the problem domain.&lt;br /&gt;
&lt;br /&gt;
[[Image:controller.jpg]]&lt;br /&gt;
&lt;br /&gt;
=Issues that are important in learning about this topic=&lt;br /&gt;
&lt;br /&gt;
=See Also=&lt;br /&gt;
&lt;br /&gt;
Applying UML and Patterns: Craig Larman&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=References=&lt;br /&gt;
&lt;br /&gt;
1. [http://www.augustana.ab.ca/~mohrj/courses/2003.fall/csc220/lecture_notes/responsibilities.html GRASP Patterns]&lt;br /&gt;
&lt;br /&gt;
2. [http://en.wikipedia.org/wiki/GRASP_(Object_Oriented_Design) Wikipedia link to GRASP]&lt;br /&gt;
&lt;br /&gt;
3. [http://codebetter.com/blogs/david.hayden/archive/2005/04/08/61648.aspx Blog on GRASP Controller Pattern]&lt;br /&gt;
&lt;br /&gt;
4. [http://www.davidhayden.com/blog/dave/archive/2004/12/10/680.aspx E-Commerce example]&lt;br /&gt;
&lt;br /&gt;
5. [http://class.ee.iastate.edu/berleant/home/Courses/SoftwareEngineering/CprE486fall2004/GRASP.pdf Controller responsibility]&lt;br /&gt;
&lt;br /&gt;
6. [http://209.85.165.104/search?q=cache:Mgu-Um9Lx1sJ:www.soc.napier.ac.uk/module.php3%3Fop%3Dgetresource%26cloaking%3Dno%26resourceid%3D5938601+controller+pattern+GRASP&amp;amp;hl=en&amp;amp;ct=clnk&amp;amp;cd=15&amp;amp;gl=us Presentation on GRASP]&lt;br /&gt;
&lt;br /&gt;
7. [http://www.informit.com/content/images/0130925691/samplechapter/0130925691.pdf DESIGN MODEL: USE-CASE REALIZATIONS WITH GRASP PATTERNS]&lt;br /&gt;
&lt;br /&gt;
8. [http://www.dcs.bbk.ac.uk/~niki/lecture5.ppt Presentation on Design Patterns]&lt;/div&gt;</summary>
		<author><name>Nnmodak</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2007/wiki3_6_pm&amp;diff=9250</id>
		<title>CSC/ECE 517 Fall 2007/wiki3 6 pm</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2007/wiki3_6_pm&amp;diff=9250"/>
		<updated>2007-11-19T07:44:38Z</updated>

		<summary type="html">&lt;p&gt;Nnmodak: /* Introduction */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''Take the Controller pattern (which we did not cover in class) and catalog the information on it available on the Web. Find good descriptions and good, concise, understandable examples. Tell which you consider the best to present to a class.''&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
=Design Patterns=&lt;br /&gt;
A [http://en.wikipedia.org/wiki/Design_pattern_%28computer_science%29 Design Pattern] refers to a named description of a problem and a solution that can be applied in different contexts. Patterns are ''proven solutions to common problems''.&lt;br /&gt;
&lt;br /&gt;
==GRASP Patterns==&lt;br /&gt;
[http://en.wikipedia.org/wiki/GRASP_(Object_Oriented_Design) GRASP] refers to '''G'''eneral '''R'''esponsibility '''A'''ssignment '''S'''oftware '''P'''atterns. It includes a systematic approach to [http://en.wikipedia.org/wiki/Object_oriented_design Object Oriented Design], while assigning responsibilities to classes.&lt;br /&gt;
&lt;br /&gt;
The GRASP Patterns include:&lt;br /&gt;
* Information Expert&lt;br /&gt;
* Creator&lt;br /&gt;
* Controller&lt;br /&gt;
* Low Coupling&lt;br /&gt;
* High Cohesion&lt;br /&gt;
* Polymorphism&lt;br /&gt;
* Pure Fabrication&lt;br /&gt;
* Indirection&lt;br /&gt;
* Protected Variations&lt;br /&gt;
&lt;br /&gt;
Some of these, such as &amp;quot;Low Coupling&amp;quot; and &amp;quot;High Cohesion&amp;quot; are merely good design principles, and not design patterns.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=The Controller Pattern=&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
The '''Controller pattern''' addresses the question: ''Who handles a system event?'' It assigns responsibilities for handling system events to different objects.&lt;br /&gt;
&lt;br /&gt;
Sometimes, an event is initiated from an external source. A class receives the event, but it may not handle the event. These events should be handled by classes representing one of the following choices:&lt;br /&gt;
* A class that represents the ''overall system'', device, or subsystem (facade controller).&lt;br /&gt;
* A class that represents a ''use case scenario'' within which the system event occurs. These are often named &amp;lt;usecasename&amp;gt;Handler, &amp;lt;usecasename&amp;gt;Controller, &amp;lt;usecasename&amp;gt;Manager,and so forth.&lt;br /&gt;
&lt;br /&gt;
 - To choose between facade and use-case controllers:&lt;br /&gt;
    + The ''Facade controller'' is suitable when there are few system events.&lt;br /&gt;
    + The ''Use-case controller'' is applicable when there are many system events and the facade controller would have become too large  &lt;br /&gt;
      and incohesive.&lt;br /&gt;
&lt;br /&gt;
Wikipedia succinctly states: ''&amp;quot;The [http://en.wikipedia.org/wiki/GRASP_(Object_Oriented_Design) Controller] pattern assigns the responsibility of dealing with system events to a non-UI class that represent the overall system or a use case scenario. A use case controller should be used to deal with all system events of a use case, and may be used for more than one use case (for instance, for use cases Create User and Delete User, one can have one UserController, instead of two separate use case controllers)&amp;quot;''&lt;br /&gt;
&lt;br /&gt;
==Benefits==&lt;br /&gt;
&lt;br /&gt;
*''Reuse'' of domain layer software by plugging in various interfaces&lt;br /&gt;
*It is possible to ''control'' out-of-sequence system events&lt;br /&gt;
&lt;br /&gt;
=Examples=&lt;br /&gt;
&lt;br /&gt;
==Description1==&lt;br /&gt;
&lt;br /&gt;
[http://www.augustana.ab.ca/~mohrj/courses/2003.fall/csc220/lecture_notes/responsibilities.html Reference 1] contains an excellent description of the controller pattern. &lt;br /&gt;
&lt;br /&gt;
  The controller is &amp;quot;A non-user interface object responsible for receiving or handling a system event, and that defines the method &lt;br /&gt;
  for the system operation&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
*A system event is said to be an event generated by an &amp;quot;external actor&amp;quot;&lt;br /&gt;
&lt;br /&gt;
*A system operation refers to the response of the system to a system event. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The website also contains a diagram showing the general context of the Controller, depicted below. (INCLUDE DIAGRAM HERE)&lt;br /&gt;
&lt;br /&gt;
******Should we format it as Desc/Example or separate them ?&lt;br /&gt;
&lt;br /&gt;
== Example 2 ==&lt;br /&gt;
A game of [http://www.academic.marist.edu/~jzbv/SoftwareDevelopment/GRASP.ppt Monopoly] is an excellent example of a controller pattern.Actors, such as the human player in Monopoly, generate UI events (such as clicking a button with a mouse to play a game or make a move).  The UI software objects (such as a JFrame window and a JButton) must process the event and cause the game to play.   When objects in the UI layer pick up an event, they must delegate the request to an object in the domain layer.&lt;br /&gt;
&lt;br /&gt;
The problem in this case can be formulated as follows:&lt;br /&gt;
What first object beyond the UI layer should receive the message from the UI layer?&lt;br /&gt;
&lt;br /&gt;
As per the controller pattern the solution is as follows:&lt;br /&gt;
Assign the responsibility to an object representing either of following:&lt;br /&gt;
- Represents the overall “system” – a root object&lt;br /&gt;
- Represents a use case scenario within which the system operation occurs.&lt;br /&gt;
&lt;br /&gt;
[[Image:monopoly.jpg]]&lt;br /&gt;
&lt;br /&gt;
==Description3==&lt;br /&gt;
This article contains an [http://www.davidhayden.com/blog/dave/archive/2004/12/10/680.aspx E-Commerce example] of the Controller Pattern. The author classifies controllers as '''Use case Controllers''' and '''Facade Controllers'''. &lt;br /&gt;
&lt;br /&gt;
Use case controllers are useful to handle messages from the User Interface Layer  when there is little coupling between messages. A facade controller to handle all messages will not suffice in this case. &lt;br /&gt;
&lt;br /&gt;
The E-Commerce application in the example considers the following messages:&lt;br /&gt;
&lt;br /&gt;
    Get Categories&lt;br /&gt;
    Get Product in Category X&lt;br /&gt;
    Get Items in Shopping Cart&lt;br /&gt;
    Add Item to Shopping Cart&lt;br /&gt;
&lt;br /&gt;
The first 2 messages are related to a ProductCatalog to ProductCatalogHandler and the last 2 messages are related to the shopper's cart to ShoppingCartHandler:&lt;br /&gt;
&lt;br /&gt;
    ProductCatalogHandler&lt;br /&gt;
          -Get Categories&lt;br /&gt;
          -Get Product in Category X&lt;br /&gt;
    ShoppingCartHandler&lt;br /&gt;
          -Get Items in Shopping Cart&lt;br /&gt;
          -Add Item to Shopping Cart&lt;br /&gt;
&lt;br /&gt;
ProductCatalogHandler and ShoppingCartHandler are highly cohesive, embodied by the Controller Pattern.&lt;br /&gt;
&lt;br /&gt;
==Description3==&lt;br /&gt;
&lt;br /&gt;
This [http://codebetter.com/blogs/david.hayden/archive/2005/04/08/61648.aspx Blog] mentions some examples of the Controller Pattern in the context of blogs. It demonstrates how the controller class beyond the UI layer &amp;quot;hands off&amp;quot; the message to another domain layer object to act upon the message. &lt;br /&gt;
&lt;br /&gt;
Another related [http://davidhayden.com/blog/dave/archive/2004/11/28/648.aspx article] disambiguates between the Controller Pattern and the [http://en.wikipedia.org/wiki/Model-view-controller Model-View-Controller] Architecture. The author defines the controller as &amp;quot;the first object beyond the UI layer that is responsible for receiving or handling a system operation message&amp;quot;. As entailed above, the controller is the coordinator responsible for delegating work to other objects that actually accomplish the task at hand. &lt;br /&gt;
&lt;br /&gt;
==Description4==&lt;br /&gt;
&lt;br /&gt;
[http://209.85.165.104/search?q=cache:Mgu-Um9Lx1sJ:www.soc.napier.ac.uk/module.php3%3Fop%3Dgetresource%26cloaking%3Dno%26resourceid%3D5938601+controller+pattern+GRASP&amp;amp;hl=en&amp;amp;ct=clnk&amp;amp;cd=15&amp;amp;gl=us  Reference 6] contains the following solution to the problem of who handles the system event: &amp;quot;If a program receives events from external sources other than its graphical interface, add an event class to decouple the event source(s) from the objects that actually handle the events.&amp;quot; &lt;br /&gt;
&lt;br /&gt;
The author also mentions the benefits of using the Controller Pattern as an increased potential for reuse. It leads to decoupling &lt;br /&gt;
between the external sources of events and the internal event handlers.&lt;br /&gt;
&lt;br /&gt;
Consider the example of buying items at a supermarket. The cashier enters the items to be purchased and generates a bill for the customer to make the payment at the end of the sale. The system events include:&lt;br /&gt;
&lt;br /&gt;
  ''enterItem()''&lt;br /&gt;
  ''endSale()''&lt;br /&gt;
  ''makePayment()''&lt;br /&gt;
&lt;br /&gt;
The problem can be phrased as: Who is responsible for ''enterItem()''?&lt;br /&gt;
&lt;br /&gt;
Using the Controller Pattern to solve our problem, we can choose among the following: &lt;br /&gt;
&lt;br /&gt;
*The overall system [POST]&lt;br /&gt;
*The overall business(sub-system) [STORE]&lt;br /&gt;
*Someone in the real world who is active in the task [CASHIER]&lt;br /&gt;
*The artificial handler of all system events in the use case [BuyItemsHandler]&lt;br /&gt;
&lt;br /&gt;
[[Image:controller2.jpg]]&lt;br /&gt;
&lt;br /&gt;
The choice made should reflect high cohesion and low coupling, as shown below, in which the UI layer is decoupled from the problem domain.&lt;br /&gt;
&lt;br /&gt;
[[Image:controller.jpg]]&lt;br /&gt;
&lt;br /&gt;
=Issues that are important in learning about this topic=&lt;br /&gt;
&lt;br /&gt;
=See Also=&lt;br /&gt;
&lt;br /&gt;
Applying UML and Patterns: Craig Larman&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=References=&lt;br /&gt;
&lt;br /&gt;
1. [http://www.augustana.ab.ca/~mohrj/courses/2003.fall/csc220/lecture_notes/responsibilities.html GRASP Patterns]&lt;br /&gt;
&lt;br /&gt;
2. [http://en.wikipedia.org/wiki/GRASP_(Object_Oriented_Design) Wikipedia link to GRASP]&lt;br /&gt;
&lt;br /&gt;
3. [http://codebetter.com/blogs/david.hayden/archive/2005/04/08/61648.aspx Blog on GRASP Controller Pattern]&lt;br /&gt;
&lt;br /&gt;
4. [http://www.davidhayden.com/blog/dave/archive/2004/12/10/680.aspx E-Commerce example]&lt;br /&gt;
&lt;br /&gt;
5. [http://class.ee.iastate.edu/berleant/home/Courses/SoftwareEngineering/CprE486fall2004/GRASP.pdf Controller responsibility]&lt;br /&gt;
&lt;br /&gt;
6. [http://209.85.165.104/search?q=cache:Mgu-Um9Lx1sJ:www.soc.napier.ac.uk/module.php3%3Fop%3Dgetresource%26cloaking%3Dno%26resourceid%3D5938601+controller+pattern+GRASP&amp;amp;hl=en&amp;amp;ct=clnk&amp;amp;cd=15&amp;amp;gl=us Presentation on GRASP]&lt;br /&gt;
&lt;br /&gt;
7. [http://www.informit.com/content/images/0130925691/samplechapter/0130925691.pdf DESIGN MODEL: USE-CASE REALIZATIONS WITH GRASP PATTERNS]&lt;br /&gt;
&lt;br /&gt;
8. [http://www.dcs.bbk.ac.uk/~niki/lecture5.ppt Presentation on Design Patterns]&lt;/div&gt;</summary>
		<author><name>Nnmodak</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2007/wiki3_6_pm&amp;diff=9249</id>
		<title>CSC/ECE 517 Fall 2007/wiki3 6 pm</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2007/wiki3_6_pm&amp;diff=9249"/>
		<updated>2007-11-19T07:43:37Z</updated>

		<summary type="html">&lt;p&gt;Nnmodak: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''Take the Controller pattern (which we did not cover in class) and catalog the information on it available on the Web. Find good descriptions and good, concise, understandable examples. Tell which you consider the best to present to a class.''&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
=Design Patterns=&lt;br /&gt;
A [http://en.wikipedia.org/wiki/Design_pattern_%28computer_science%29 Design Pattern] refers to a named description of a problem and a solution that can be applied in different contexts. Patterns are ''proven solutions to common problems''.&lt;br /&gt;
&lt;br /&gt;
==GRASP Patterns==&lt;br /&gt;
[http://en.wikipedia.org/wiki/GRASP_(Object_Oriented_Design) GRASP] refers to '''G'''eneral '''R'''esponsibility '''A'''ssignment '''S'''oftware '''P'''atterns. It includes a systematic approach to [http://en.wikipedia.org/wiki/Object_oriented_design Object Oriented Design], while assigning responsibilities to classes.&lt;br /&gt;
&lt;br /&gt;
The GRASP Patterns include:&lt;br /&gt;
* Information Expert&lt;br /&gt;
* Creator&lt;br /&gt;
* Controller&lt;br /&gt;
* Low Coupling&lt;br /&gt;
* High Cohesion&lt;br /&gt;
* Polymorphism&lt;br /&gt;
* Pure Fabrication&lt;br /&gt;
* Indirection&lt;br /&gt;
* Protected Variations&lt;br /&gt;
&lt;br /&gt;
Some of these, such as &amp;quot;Low Coupling&amp;quot; and &amp;quot;High Cohesion&amp;quot; are merely good design principles, and not design patterns.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=The Controller Pattern=&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
The '''Controller pattern''' addresses the question: ''Who handles a system event?'' It assigns responsibilities for handling system events to different objects.&lt;br /&gt;
&lt;br /&gt;
Sometimes, an event is initiated from an external source. A class receives the event, but it may not handle the event. These events should be handled by classes representing one of the following choices:&lt;br /&gt;
* A class that represents the ''overall system'', device, or subsystem (facade controller).&lt;br /&gt;
* A class that represents a ''use case scenario'' within which the system event occurs. These are often named &amp;lt;usecasename&amp;gt;Handler, &amp;lt;usecasename&amp;gt;Controller, &amp;lt;usecasename&amp;gt;Manager,and so forth.&lt;br /&gt;
&lt;br /&gt;
          o  To choose between facade and use-case controllers:&lt;br /&gt;
                + The ''Facade controller'' is suitable when there are few system events.&lt;br /&gt;
                + The ''Use-case controller'' is applicable when there are many system events and the facade controller would have become too large and incohesive.&lt;br /&gt;
&lt;br /&gt;
Wikipedia succinctly states: ''&amp;quot;The [http://en.wikipedia.org/wiki/GRASP_(Object_Oriented_Design) Controller] pattern assigns the responsibility of dealing with system events to a non-UI class that represent the overall system or a use case scenario. A use case controller should be used to deal with all system events of a use case, and may be used for more than one use case (for instance, for use cases Create User and Delete User, one can have one UserController, instead of two separate use case controllers)&amp;quot;''&lt;br /&gt;
&lt;br /&gt;
==Benefits==&lt;br /&gt;
&lt;br /&gt;
*''Reuse'' of domain layer software by plugging in various interfaces&lt;br /&gt;
*It is possible to ''control'' out-of-sequence system events&lt;br /&gt;
&lt;br /&gt;
=Examples=&lt;br /&gt;
&lt;br /&gt;
==Description1==&lt;br /&gt;
&lt;br /&gt;
[http://www.augustana.ab.ca/~mohrj/courses/2003.fall/csc220/lecture_notes/responsibilities.html Reference 1] contains an excellent description of the controller pattern. &lt;br /&gt;
&lt;br /&gt;
  The controller is &amp;quot;A non-user interface object responsible for receiving or handling a system event, and that defines the method &lt;br /&gt;
  for the system operation&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
*A system event is said to be an event generated by an &amp;quot;external actor&amp;quot;&lt;br /&gt;
&lt;br /&gt;
*A system operation refers to the response of the system to a system event. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The website also contains a diagram showing the general context of the Controller, depicted below. (INCLUDE DIAGRAM HERE)&lt;br /&gt;
&lt;br /&gt;
******Should we format it as Desc/Example or separate them ?&lt;br /&gt;
&lt;br /&gt;
== Example 2 ==&lt;br /&gt;
A game of [http://www.academic.marist.edu/~jzbv/SoftwareDevelopment/GRASP.ppt Monopoly] is an excellent example of a controller pattern.Actors, such as the human player in Monopoly, generate UI events (such as clicking a button with a mouse to play a game or make a move).  The UI software objects (such as a JFrame window and a JButton) must process the event and cause the game to play.   When objects in the UI layer pick up an event, they must delegate the request to an object in the domain layer.&lt;br /&gt;
&lt;br /&gt;
The problem in this case can be formulated as follows:&lt;br /&gt;
What first object beyond the UI layer should receive the message from the UI layer?&lt;br /&gt;
&lt;br /&gt;
As per the controller pattern the solution is as follows:&lt;br /&gt;
Assign the responsibility to an object representing either of following:&lt;br /&gt;
- Represents the overall “system” – a root object&lt;br /&gt;
- Represents a use case scenario within which the system operation occurs.&lt;br /&gt;
&lt;br /&gt;
[[Image:monopoly.jpg]]&lt;br /&gt;
&lt;br /&gt;
==Description3==&lt;br /&gt;
This article contains an [http://www.davidhayden.com/blog/dave/archive/2004/12/10/680.aspx E-Commerce example] of the Controller Pattern. The author classifies controllers as '''Use case Controllers''' and '''Facade Controllers'''. &lt;br /&gt;
&lt;br /&gt;
Use case controllers are useful to handle messages from the User Interface Layer  when there is little coupling between messages. A facade controller to handle all messages will not suffice in this case. &lt;br /&gt;
&lt;br /&gt;
The E-Commerce application in the example considers the following messages:&lt;br /&gt;
&lt;br /&gt;
    Get Categories&lt;br /&gt;
    Get Product in Category X&lt;br /&gt;
    Get Items in Shopping Cart&lt;br /&gt;
    Add Item to Shopping Cart&lt;br /&gt;
&lt;br /&gt;
The first 2 messages are related to a ProductCatalog to ProductCatalogHandler and the last 2 messages are related to the shopper's cart to ShoppingCartHandler:&lt;br /&gt;
&lt;br /&gt;
    ProductCatalogHandler&lt;br /&gt;
          -Get Categories&lt;br /&gt;
          -Get Product in Category X&lt;br /&gt;
    ShoppingCartHandler&lt;br /&gt;
          -Get Items in Shopping Cart&lt;br /&gt;
          -Add Item to Shopping Cart&lt;br /&gt;
&lt;br /&gt;
ProductCatalogHandler and ShoppingCartHandler are highly cohesive, embodied by the Controller Pattern.&lt;br /&gt;
&lt;br /&gt;
==Description3==&lt;br /&gt;
&lt;br /&gt;
This [http://codebetter.com/blogs/david.hayden/archive/2005/04/08/61648.aspx Blog] mentions some examples of the Controller Pattern in the context of blogs. It demonstrates how the controller class beyond the UI layer &amp;quot;hands off&amp;quot; the message to another domain layer object to act upon the message. &lt;br /&gt;
&lt;br /&gt;
Another related [http://davidhayden.com/blog/dave/archive/2004/11/28/648.aspx article] disambiguates between the Controller Pattern and the [http://en.wikipedia.org/wiki/Model-view-controller Model-View-Controller] Architecture. The author defines the controller as &amp;quot;the first object beyond the UI layer that is responsible for receiving or handling a system operation message&amp;quot;. As entailed above, the controller is the coordinator responsible for delegating work to other objects that actually accomplish the task at hand. &lt;br /&gt;
&lt;br /&gt;
==Description4==&lt;br /&gt;
&lt;br /&gt;
[http://209.85.165.104/search?q=cache:Mgu-Um9Lx1sJ:www.soc.napier.ac.uk/module.php3%3Fop%3Dgetresource%26cloaking%3Dno%26resourceid%3D5938601+controller+pattern+GRASP&amp;amp;hl=en&amp;amp;ct=clnk&amp;amp;cd=15&amp;amp;gl=us  Reference 6] contains the following solution to the problem of who handles the system event: &amp;quot;If a program receives events from external sources other than its graphical interface, add an event class to decouple the event source(s) from the objects that actually handle the events.&amp;quot; &lt;br /&gt;
&lt;br /&gt;
The author also mentions the benefits of using the Controller Pattern as an increased potential for reuse. It leads to decoupling &lt;br /&gt;
between the external sources of events and the internal event handlers.&lt;br /&gt;
&lt;br /&gt;
Consider the example of buying items at a supermarket. The cashier enters the items to be purchased and generates a bill for the customer to make the payment at the end of the sale. The system events include:&lt;br /&gt;
&lt;br /&gt;
  ''enterItem()''&lt;br /&gt;
  ''endSale()''&lt;br /&gt;
  ''makePayment()''&lt;br /&gt;
&lt;br /&gt;
The problem can be phrased as: Who is responsible for ''enterItem()''?&lt;br /&gt;
&lt;br /&gt;
Using the Controller Pattern to solve our problem, we can choose among the following: &lt;br /&gt;
&lt;br /&gt;
*The overall system [POST]&lt;br /&gt;
*The overall business(sub-system) [STORE]&lt;br /&gt;
*Someone in the real world who is active in the task [CASHIER]&lt;br /&gt;
*The artificial handler of all system events in the use case [BuyItemsHandler]&lt;br /&gt;
&lt;br /&gt;
[[Image:controller2.jpg]]&lt;br /&gt;
&lt;br /&gt;
The choice made should reflect high cohesion and low coupling, as shown below, in which the UI layer is decoupled from the problem domain.&lt;br /&gt;
&lt;br /&gt;
[[Image:controller.jpg]]&lt;br /&gt;
&lt;br /&gt;
=Issues that are important in learning about this topic=&lt;br /&gt;
&lt;br /&gt;
=See Also=&lt;br /&gt;
&lt;br /&gt;
Applying UML and Patterns: Craig Larman&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=References=&lt;br /&gt;
&lt;br /&gt;
1. [http://www.augustana.ab.ca/~mohrj/courses/2003.fall/csc220/lecture_notes/responsibilities.html GRASP Patterns]&lt;br /&gt;
&lt;br /&gt;
2. [http://en.wikipedia.org/wiki/GRASP_(Object_Oriented_Design) Wikipedia link to GRASP]&lt;br /&gt;
&lt;br /&gt;
3. [http://codebetter.com/blogs/david.hayden/archive/2005/04/08/61648.aspx Blog on GRASP Controller Pattern]&lt;br /&gt;
&lt;br /&gt;
4. [http://www.davidhayden.com/blog/dave/archive/2004/12/10/680.aspx E-Commerce example]&lt;br /&gt;
&lt;br /&gt;
5. [http://class.ee.iastate.edu/berleant/home/Courses/SoftwareEngineering/CprE486fall2004/GRASP.pdf Controller responsibility]&lt;br /&gt;
&lt;br /&gt;
6. [http://209.85.165.104/search?q=cache:Mgu-Um9Lx1sJ:www.soc.napier.ac.uk/module.php3%3Fop%3Dgetresource%26cloaking%3Dno%26resourceid%3D5938601+controller+pattern+GRASP&amp;amp;hl=en&amp;amp;ct=clnk&amp;amp;cd=15&amp;amp;gl=us Presentation on GRASP]&lt;br /&gt;
&lt;br /&gt;
7. [http://www.informit.com/content/images/0130925691/samplechapter/0130925691.pdf DESIGN MODEL: USE-CASE REALIZATIONS WITH GRASP PATTERNS]&lt;br /&gt;
&lt;br /&gt;
8. [http://www.dcs.bbk.ac.uk/~niki/lecture5.ppt Presentation on Design Patterns]&lt;/div&gt;</summary>
		<author><name>Nnmodak</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Controller2.jpg&amp;diff=9247</id>
		<title>File:Controller2.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Controller2.jpg&amp;diff=9247"/>
		<updated>2007-11-19T07:37:50Z</updated>

		<summary type="html">&lt;p&gt;Nnmodak: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Nnmodak</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2007/wiki3_6_pm&amp;diff=9246</id>
		<title>CSC/ECE 517 Fall 2007/wiki3 6 pm</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2007/wiki3_6_pm&amp;diff=9246"/>
		<updated>2007-11-19T07:37:27Z</updated>

		<summary type="html">&lt;p&gt;Nnmodak: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''Take the Controller pattern (which we did not cover in class) and catalog the information on it available on the Web. Find good descriptions and good, concise, understandable examples. Tell which you consider the best to present to a class.''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Design Patterns=&lt;br /&gt;
A [http://en.wikipedia.org/wiki/Design_pattern_%28computer_science%29 Design Pattern] refers to a named description of a problem and a solution that can be applied in different contexts. Patterns are ''proven solutions to common problems''.&lt;br /&gt;
&lt;br /&gt;
==GRASP Patterns==&lt;br /&gt;
[http://en.wikipedia.org/wiki/GRASP_(Object_Oriented_Design) GRASP] refers to '''G'''eneral '''R'''esponsibility '''A'''ssignment '''S'''oftware '''P'''atterns. It includes a systematic approach to [http://en.wikipedia.org/wiki/Object_oriented_design Object Oriented Design], while assigning responsibilities to classes.&lt;br /&gt;
&lt;br /&gt;
The GRASP Patterns include:&lt;br /&gt;
* Information Expert&lt;br /&gt;
* Creator&lt;br /&gt;
* Controller&lt;br /&gt;
* Low Coupling&lt;br /&gt;
* High Cohesion&lt;br /&gt;
* Polymorphism&lt;br /&gt;
* Pure Fabrication&lt;br /&gt;
* Indirection&lt;br /&gt;
* Protected Variations&lt;br /&gt;
&lt;br /&gt;
Some of these, such as &amp;quot;Low Coupling&amp;quot; and &amp;quot;High Cohesion&amp;quot; are merely good design principles, and not design patterns.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=The Controller Pattern=&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
The '''Controller pattern''' addresses the question: ''Who handles a system event?'' It assigns responsibilities for handling system events to different objects.&lt;br /&gt;
&lt;br /&gt;
Sometimes, an event is initiated from an external source. A class receives the event, but it may not handle the event. These events should be handled by classes representing one of the following choices:&lt;br /&gt;
* A class that represents the ''overall system'', device, or subsystem (facade controller).&lt;br /&gt;
* A class that represents a ''use case scenario'' within which the system event occurs. These are often named &amp;lt;usecasename&amp;gt;Handler, &amp;lt;usecasename&amp;gt;Controller, &amp;lt;usecasename&amp;gt;Manager,and so forth.&lt;br /&gt;
&lt;br /&gt;
          o  To choose between facade and use-case controllers:&lt;br /&gt;
                + The ''Facade controller'' is suitable when there are few system events.&lt;br /&gt;
                + The ''Use-case controller'' is applicable when there are many system events and the facade controller would have become too large and incohesive.&lt;br /&gt;
&lt;br /&gt;
Wikipedia succinctly states: ''&amp;quot;The [http://en.wikipedia.org/wiki/GRASP_(Object_Oriented_Design) Controller] pattern assigns the responsibility of dealing with system events to a non-UI class that represent the overall system or a use case scenario. A use case controller should be used to deal with all system events of a use case, and may be used for more than one use case (for instance, for use cases Create User and Delete User, one can have one UserController, instead of two separate use case controllers)&amp;quot;''&lt;br /&gt;
&lt;br /&gt;
==Benefits==&lt;br /&gt;
&lt;br /&gt;
*''Reuse'' of domain layer software by plugging in various interfaces&lt;br /&gt;
*It is possible to ''control'' out-of-sequence system events&lt;br /&gt;
&lt;br /&gt;
=Examples=&lt;br /&gt;
&lt;br /&gt;
==Description1==&lt;br /&gt;
&lt;br /&gt;
[http://www.augustana.ab.ca/~mohrj/courses/2003.fall/csc220/lecture_notes/responsibilities.html Reference 1] contains an excellent description of the controller pattern. &lt;br /&gt;
&lt;br /&gt;
  The controller is &amp;quot;A non-user interface object responsible for receiving or handling a system event, and that defines the method &lt;br /&gt;
  for the system operation&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
*A system event is said to be an event generated by an &amp;quot;external actor&amp;quot;&lt;br /&gt;
&lt;br /&gt;
*A system operation refers to the response of the system to a system event. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The website also contains a diagram showing the general context of the Controller, depicted below. (INCLUDE DIAGRAM HERE)&lt;br /&gt;
&lt;br /&gt;
******Should we format it as Desc/Example or separate them ?&lt;br /&gt;
&lt;br /&gt;
== Example 2 ==&lt;br /&gt;
A game of [http://www.academic.marist.edu/~jzbv/SoftwareDevelopment/GRASP.ppt Monopoly] is an excellent example of a controller pattern.Actors, such as the human player in Monopoly, generate UI events (such as clicking a button with a mouse to play a game or make a move).  The UI software objects (such as a JFrame window and a JButton) must process the event and cause the game to play.   When objects in the UI layer pick up an event, they must delegate the request to an object in the domain layer.&lt;br /&gt;
&lt;br /&gt;
The problem in this case can be formulated as follows:&lt;br /&gt;
What first object beyond the UI layer should receive the message from the UI layer?&lt;br /&gt;
&lt;br /&gt;
As per the controller pattern the solution is as follows:&lt;br /&gt;
Assign the responsibility to an object representing either of following:&lt;br /&gt;
- Represents the overall “system” – a root object&lt;br /&gt;
- Represents a use case scenario within which the system operation occurs.&lt;br /&gt;
&lt;br /&gt;
[[Image:monopoly.jpg]]&lt;br /&gt;
&lt;br /&gt;
==Description3==&lt;br /&gt;
This article contains an [http://www.davidhayden.com/blog/dave/archive/2004/12/10/680.aspx E-Commerce example] of the Controller Pattern. The author classifies controllers as '''Use case Controllers''' and '''Facade Controllers'''. &lt;br /&gt;
&lt;br /&gt;
Use case controllers are useful to handle messages from the User Interface Layer  when there is little coupling between messages. A facade controller to handle all messages will not suffice in this case. &lt;br /&gt;
&lt;br /&gt;
The E-Commerce application in the example considers the following messages:&lt;br /&gt;
&lt;br /&gt;
    Get Categories&lt;br /&gt;
    Get Product in Category X&lt;br /&gt;
    Get Items in Shopping Cart&lt;br /&gt;
    Add Item to Shopping Cart&lt;br /&gt;
&lt;br /&gt;
The first 2 messages are related to a ProductCatalog to ProductCatalogHandler and the last 2 messages are related to the shopper's cart to ShoppingCartHandler:&lt;br /&gt;
&lt;br /&gt;
    ProductCatalogHandler&lt;br /&gt;
          -Get Categories&lt;br /&gt;
          -Get Product in Category X&lt;br /&gt;
    ShoppingCartHandler&lt;br /&gt;
          -Get Items in Shopping Cart&lt;br /&gt;
          -Add Item to Shopping Cart&lt;br /&gt;
&lt;br /&gt;
ProductCatalogHandler and ShoppingCartHandler are highly cohesive, embodied by the Controller Pattern.&lt;br /&gt;
&lt;br /&gt;
==Description3==&lt;br /&gt;
&lt;br /&gt;
This [http://codebetter.com/blogs/david.hayden/archive/2005/04/08/61648.aspx Blog] mentions some examples of the Controller Pattern in the context of blogs. It demonstrates how the controller class beyond the UI layer &amp;quot;hands off&amp;quot; the message to another domain layer object to act upon the message. &lt;br /&gt;
&lt;br /&gt;
Another related [http://davidhayden.com/blog/dave/archive/2004/11/28/648.aspx article] disambiguates between the Controller Pattern and the [http://en.wikipedia.org/wiki/Model-view-controller Model-View-Controller] Architecture. The author defines the controller as &amp;quot;the first object beyond the UI layer that is responsible for receiving or handling a system operation message&amp;quot;. As entailed above, the controller is the coordinator responsible for delegating work to other objects that actually accomplish the task at hand. &lt;br /&gt;
&lt;br /&gt;
==Description4==&lt;br /&gt;
&lt;br /&gt;
[http://209.85.165.104/search?q=cache:Mgu-Um9Lx1sJ:www.soc.napier.ac.uk/module.php3%3Fop%3Dgetresource%26cloaking%3Dno%26resourceid%3D5938601+controller+pattern+GRASP&amp;amp;hl=en&amp;amp;ct=clnk&amp;amp;cd=15&amp;amp;gl=us  Reference 6] contains the following solution to the problem of who handles the system event: &amp;quot;If a program receives events from external sources other than its graphical interface, add an event class to decouple the event source(s) from the objects that actually handle the events.&amp;quot; &lt;br /&gt;
&lt;br /&gt;
The author also mentions the benefits of using the Controller Pattern as an increased potential for reuse. It leads to decoupling &lt;br /&gt;
between the external sources of events and the internal event handlers.&lt;br /&gt;
&lt;br /&gt;
Consider the example of buying items at a supermarket. The cashier enters the items to be purchased and generates a bill for the customer to make the payment at the end of the sale. The system events include:&lt;br /&gt;
&lt;br /&gt;
  ''enterItem()''&lt;br /&gt;
  ''endSale()''&lt;br /&gt;
  ''makePayment()''&lt;br /&gt;
&lt;br /&gt;
The problem can be phrased as: Who is responsible for ''enterItem()''?&lt;br /&gt;
&lt;br /&gt;
Using the Controller Pattern to solve our problem, we can choose among the following: &lt;br /&gt;
&lt;br /&gt;
*The overall system [POST]&lt;br /&gt;
*The overall business(sub-system) [STORE]&lt;br /&gt;
*Someone in the real world who is active in the task [CASHIER]&lt;br /&gt;
*The artificial handler of all system events in the use case [BuyItemsHandler]&lt;br /&gt;
&lt;br /&gt;
[[Image:controller2.jpg]]&lt;br /&gt;
&lt;br /&gt;
The choice made should reflect high cohesion and low coupling, as shown below, in which the UI layer is decoupled from the problem domain.&lt;br /&gt;
&lt;br /&gt;
[[Image:controller.jpg]]&lt;br /&gt;
&lt;br /&gt;
=Issues that are important in learning about this topic=&lt;br /&gt;
&lt;br /&gt;
=See Also=&lt;br /&gt;
&lt;br /&gt;
Applying UML and Patterns: Craig Larman&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=References=&lt;br /&gt;
&lt;br /&gt;
1. [http://www.augustana.ab.ca/~mohrj/courses/2003.fall/csc220/lecture_notes/responsibilities.html GRASP Patterns]&lt;br /&gt;
&lt;br /&gt;
2. [http://en.wikipedia.org/wiki/GRASP_(Object_Oriented_Design) Wikipedia link to GRASP]&lt;br /&gt;
&lt;br /&gt;
3. [http://codebetter.com/blogs/david.hayden/archive/2005/04/08/61648.aspx Blog on GRASP Controller Pattern]&lt;br /&gt;
&lt;br /&gt;
4. [http://www.davidhayden.com/blog/dave/archive/2004/12/10/680.aspx E-Commerce example]&lt;br /&gt;
&lt;br /&gt;
5. [http://class.ee.iastate.edu/berleant/home/Courses/SoftwareEngineering/CprE486fall2004/GRASP.pdf Controller responsibility]&lt;br /&gt;
&lt;br /&gt;
6. [http://209.85.165.104/search?q=cache:Mgu-Um9Lx1sJ:www.soc.napier.ac.uk/module.php3%3Fop%3Dgetresource%26cloaking%3Dno%26resourceid%3D5938601+controller+pattern+GRASP&amp;amp;hl=en&amp;amp;ct=clnk&amp;amp;cd=15&amp;amp;gl=us Presentation on GRASP]&lt;br /&gt;
&lt;br /&gt;
7. [http://www.informit.com/content/images/0130925691/samplechapter/0130925691.pdf DESIGN MODEL: USE-CASE REALIZATIONS WITH GRASP PATTERNS]&lt;br /&gt;
&lt;br /&gt;
8. [http://www.dcs.bbk.ac.uk/~niki/lecture5.ppt Presentation on Design Patterns]&lt;/div&gt;</summary>
		<author><name>Nnmodak</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2007/wiki3_6_pm&amp;diff=9245</id>
		<title>CSC/ECE 517 Fall 2007/wiki3 6 pm</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2007/wiki3_6_pm&amp;diff=9245"/>
		<updated>2007-11-19T07:37:00Z</updated>

		<summary type="html">&lt;p&gt;Nnmodak: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''Take the Controller pattern (which we did not cover in class) and catalog the information on it available on the Web. Find good descriptions and good, concise, understandable examples. Tell which you consider the best to present to a class.''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Design Patterns=&lt;br /&gt;
A [http://en.wikipedia.org/wiki/Design_pattern_%28computer_science%29 Design Pattern] refers to a named description of a problem and a solution that can be applied in different contexts. Patterns are ''proven solutions to common problems''.&lt;br /&gt;
&lt;br /&gt;
==GRASP Patterns==&lt;br /&gt;
[http://en.wikipedia.org/wiki/GRASP_(Object_Oriented_Design) GRASP] refers to '''G'''eneral '''R'''esponsibility '''A'''ssignment '''S'''oftware '''P'''atterns. It includes a systematic approach to [http://en.wikipedia.org/wiki/Object_oriented_design Object Oriented Design], while assigning responsibilities to classes.&lt;br /&gt;
&lt;br /&gt;
The GRASP Patterns include:&lt;br /&gt;
* Information Expert&lt;br /&gt;
* Creator&lt;br /&gt;
* Controller&lt;br /&gt;
* Low Coupling&lt;br /&gt;
* High Cohesion&lt;br /&gt;
* Polymorphism&lt;br /&gt;
* Pure Fabrication&lt;br /&gt;
* Indirection&lt;br /&gt;
* Protected Variations&lt;br /&gt;
&lt;br /&gt;
Some of these, such as &amp;quot;Low Coupling&amp;quot; and &amp;quot;High Cohesion&amp;quot; are merely good design principles, and not design patterns.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=The Controller Pattern=&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
The '''Controller pattern''' addresses the question: ''Who handles a system event?'' It assigns responsibilities for handling system events to different objects.&lt;br /&gt;
&lt;br /&gt;
Sometimes, an event is initiated from an external source. A class receives the event, but it may not handle the event. These events should be handled by classes representing one of the following choices:&lt;br /&gt;
* A class that represents the ''overall system'', device, or subsystem (facade controller).&lt;br /&gt;
* A class that represents a ''use case scenario'' within which the system event occurs. These are often named &amp;lt;usecasename&amp;gt;Handler, &amp;lt;usecasename&amp;gt;Controller, &amp;lt;usecasename&amp;gt;Manager,and so forth.&lt;br /&gt;
&lt;br /&gt;
          o  To choose between facade and use-case controllers:&lt;br /&gt;
                + The ''Facade controller'' is suitable when there are few system events.&lt;br /&gt;
                + The ''Use-case controller'' is applicable when there are many system events and the facade controller would have become too large and incohesive.&lt;br /&gt;
&lt;br /&gt;
Wikipedia succinctly states: ''&amp;quot;The [http://en.wikipedia.org/wiki/GRASP_(Object_Oriented_Design) Controller] pattern assigns the responsibility of dealing with system events to a non-UI class that represent the overall system or a use case scenario. A use case controller should be used to deal with all system events of a use case, and may be used for more than one use case (for instance, for use cases Create User and Delete User, one can have one UserController, instead of two separate use case controllers)&amp;quot;''&lt;br /&gt;
&lt;br /&gt;
==Benefits==&lt;br /&gt;
&lt;br /&gt;
*''Reuse'' of domain layer software by plugging in various interfaces&lt;br /&gt;
*It is possible to ''control'' out-of-sequence system events&lt;br /&gt;
&lt;br /&gt;
=Examples=&lt;br /&gt;
&lt;br /&gt;
==Description1==&lt;br /&gt;
&lt;br /&gt;
[http://www.augustana.ab.ca/~mohrj/courses/2003.fall/csc220/lecture_notes/responsibilities.html Reference 1] contains an excellent description of the controller pattern. &lt;br /&gt;
&lt;br /&gt;
  The controller is &amp;quot;A non-user interface object responsible for receiving or handling a system event, and that defines the method &lt;br /&gt;
  for the system operation&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
*A system event is said to be an event generated by an &amp;quot;external actor&amp;quot;&lt;br /&gt;
&lt;br /&gt;
*A system operation refers to the response of the system to a system event. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The website also contains a diagram showing the general context of the Controller, depicted below. (INCLUDE DIAGRAM HERE)&lt;br /&gt;
&lt;br /&gt;
******Should we format it as Desc/Example or separate them ?&lt;br /&gt;
&lt;br /&gt;
== Example 2 ==&lt;br /&gt;
A game of [http://www.academic.marist.edu/~jzbv/SoftwareDevelopment/GRASP.ppt Monopoly] is an excellent example of a controller pattern.Actors, such as the human player in Monopoly, generate UI events (such as clicking a button with a mouse to play a game or make a move).  The UI software objects (such as a JFrame window and a JButton) must process the event and cause the game to play.   When objects in the UI layer pick up an event, they must delegate the request to an object in the domain layer.&lt;br /&gt;
&lt;br /&gt;
The problem in this case can be formulated as follows:&lt;br /&gt;
What first object beyond the UI layer should receive the message from the UI layer?&lt;br /&gt;
&lt;br /&gt;
As per the controller pattern the solution is as follows:&lt;br /&gt;
Assign the responsibility to an object representing either of following:&lt;br /&gt;
- Represents the overall “system” – a root object&lt;br /&gt;
- Represents a use case scenario within which the system operation occurs.&lt;br /&gt;
&lt;br /&gt;
[[Image:monopoly.jpg]]&lt;br /&gt;
&lt;br /&gt;
==Description3==&lt;br /&gt;
This article contains an [http://www.davidhayden.com/blog/dave/archive/2004/12/10/680.aspx E-Commerce example] of the Controller Pattern. The author classifies controllers as '''Use case Controllers''' and '''Facade Controllers'''. &lt;br /&gt;
&lt;br /&gt;
Use case controllers are useful to handle messages from the User Interface Layer  when there is little coupling between messages. A facade controller to handle all messages will not suffice in this case. &lt;br /&gt;
&lt;br /&gt;
The E-Commerce application in the example considers the following messages:&lt;br /&gt;
&lt;br /&gt;
    Get Categories&lt;br /&gt;
    Get Product in Category X&lt;br /&gt;
    Get Items in Shopping Cart&lt;br /&gt;
    Add Item to Shopping Cart&lt;br /&gt;
&lt;br /&gt;
The first 2 messages are related to a ProductCatalog to ProductCatalogHandler and the last 2 messages are related to the shopper's cart to ShoppingCartHandler:&lt;br /&gt;
&lt;br /&gt;
    ProductCatalogHandler&lt;br /&gt;
          -Get Categories&lt;br /&gt;
          -Get Product in Category X&lt;br /&gt;
    ShoppingCartHandler&lt;br /&gt;
          -Get Items in Shopping Cart&lt;br /&gt;
          -Add Item to Shopping Cart&lt;br /&gt;
&lt;br /&gt;
ProductCatalogHandler and ShoppingCartHandler are highly cohesive, embodied by the Controller Pattern.&lt;br /&gt;
&lt;br /&gt;
==Description3==&lt;br /&gt;
&lt;br /&gt;
This [http://codebetter.com/blogs/david.hayden/archive/2005/04/08/61648.aspx Blog] mentions some examples of the Controller Pattern in the context of blogs. It demonstrates how the controller class beyond the UI layer &amp;quot;hands off&amp;quot; the message to another domain layer object to act upon the message. &lt;br /&gt;
&lt;br /&gt;
Another related [http://davidhayden.com/blog/dave/archive/2004/11/28/648.aspx article] disambiguates between the Controller Pattern and the [http://en.wikipedia.org/wiki/Model-view-controller Model-View-Controller] Architecture. The author defines the controller as &amp;quot;the first object beyond the UI layer that is responsible for receiving or handling a system operation message&amp;quot;. As entailed above, the controller is the coordinator responsible for delegating work to other objects that actually accomplish the task at hand. &lt;br /&gt;
&lt;br /&gt;
==Description4==&lt;br /&gt;
&lt;br /&gt;
[http://209.85.165.104/search?q=cache:Mgu-Um9Lx1sJ:www.soc.napier.ac.uk/module.php3%3Fop%3Dgetresource%26cloaking%3Dno%26resourceid%3D5938601+controller+pattern+GRASP&amp;amp;hl=en&amp;amp;ct=clnk&amp;amp;cd=15&amp;amp;gl=us  Reference 6] contains the following solution to the problem of who handles the system event: &amp;quot;If a program receives events from external sources other than its graphical interface, add an event class to decouple the event source(s) from the objects that actually handle the events.&amp;quot; &lt;br /&gt;
&lt;br /&gt;
The author also mentions the benefits of using the Controller Pattern as an increased potential for reuse. It leads to decoupling &lt;br /&gt;
between the external sources of events and the internal event handlers.&lt;br /&gt;
&lt;br /&gt;
Consider the example of buying items at a supermarket. The cashier enters the items to be purchased and generates a bill for the customer to make the payment at the end of the sale. The system events include:&lt;br /&gt;
&lt;br /&gt;
  ''enterItem()''&lt;br /&gt;
  ''endSale()''&lt;br /&gt;
  ''makePayment()''&lt;br /&gt;
&lt;br /&gt;
The problem can be phrased as: Who is responsible for ''enterItem()''?&lt;br /&gt;
&lt;br /&gt;
Using the Controller Pattern to solve our problem, we can choose among the following: &lt;br /&gt;
&lt;br /&gt;
*The overall system [POST]&lt;br /&gt;
*The overall business(sub-system) [STORE]&lt;br /&gt;
*Someone in the real world who is active in the task [CASHIER]&lt;br /&gt;
*The artificial handler of all system events in the use case [BuyItemsHandler]&lt;br /&gt;
&lt;br /&gt;
[[Image:controller1.jpg]]&lt;br /&gt;
&lt;br /&gt;
The choice made should reflect high cohesion and low coupling, as shown below, in which the UI layer is decoupled from the problem domain.&lt;br /&gt;
&lt;br /&gt;
[[Image:controller.jpg]]&lt;br /&gt;
&lt;br /&gt;
=Issues that are important in learning about this topic=&lt;br /&gt;
&lt;br /&gt;
=See Also=&lt;br /&gt;
&lt;br /&gt;
Applying UML and Patterns: Craig Larman&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=References=&lt;br /&gt;
&lt;br /&gt;
1. [http://www.augustana.ab.ca/~mohrj/courses/2003.fall/csc220/lecture_notes/responsibilities.html GRASP Patterns]&lt;br /&gt;
&lt;br /&gt;
2. [http://en.wikipedia.org/wiki/GRASP_(Object_Oriented_Design) Wikipedia link to GRASP]&lt;br /&gt;
&lt;br /&gt;
3. [http://codebetter.com/blogs/david.hayden/archive/2005/04/08/61648.aspx Blog on GRASP Controller Pattern]&lt;br /&gt;
&lt;br /&gt;
4. [http://www.davidhayden.com/blog/dave/archive/2004/12/10/680.aspx E-Commerce example]&lt;br /&gt;
&lt;br /&gt;
5. [http://class.ee.iastate.edu/berleant/home/Courses/SoftwareEngineering/CprE486fall2004/GRASP.pdf Controller responsibility]&lt;br /&gt;
&lt;br /&gt;
6. [http://209.85.165.104/search?q=cache:Mgu-Um9Lx1sJ:www.soc.napier.ac.uk/module.php3%3Fop%3Dgetresource%26cloaking%3Dno%26resourceid%3D5938601+controller+pattern+GRASP&amp;amp;hl=en&amp;amp;ct=clnk&amp;amp;cd=15&amp;amp;gl=us Presentation on GRASP]&lt;br /&gt;
&lt;br /&gt;
7. [http://www.informit.com/content/images/0130925691/samplechapter/0130925691.pdf DESIGN MODEL: USE-CASE REALIZATIONS WITH GRASP PATTERNS]&lt;br /&gt;
&lt;br /&gt;
8. [http://www.dcs.bbk.ac.uk/~niki/lecture5.ppt Presentation on Design Patterns]&lt;/div&gt;</summary>
		<author><name>Nnmodak</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Controller1.jpg&amp;diff=9243</id>
		<title>File:Controller1.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Controller1.jpg&amp;diff=9243"/>
		<updated>2007-11-19T07:35:08Z</updated>

		<summary type="html">&lt;p&gt;Nnmodak: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Nnmodak</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2007/wiki3_6_pm&amp;diff=9242</id>
		<title>CSC/ECE 517 Fall 2007/wiki3 6 pm</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2007/wiki3_6_pm&amp;diff=9242"/>
		<updated>2007-11-19T07:34:58Z</updated>

		<summary type="html">&lt;p&gt;Nnmodak: /* Description4 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''Take the Controller pattern (which we did not cover in class) and catalog the information on it available on the Web. Find good descriptions and good, concise, understandable examples. Tell which you consider the best to present to a class.''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Design Patterns=&lt;br /&gt;
A [http://en.wikipedia.org/wiki/Design_pattern_%28computer_science%29 Design Pattern] refers to a named description of a problem and a solution that can be applied in different contexts. Patterns are ''proven solutions to common problems''.&lt;br /&gt;
&lt;br /&gt;
==GRASP Patterns==&lt;br /&gt;
[http://en.wikipedia.org/wiki/GRASP_(Object_Oriented_Design) GRASP] refers to '''G'''eneral '''R'''esponsibility '''A'''ssignment '''S'''oftware '''P'''atterns. It includes a systematic approach to [http://en.wikipedia.org/wiki/Object_oriented_design Object Oriented Design], while assigning responsibilities to classes.&lt;br /&gt;
&lt;br /&gt;
The GRASP Patterns include:&lt;br /&gt;
* Information Expert&lt;br /&gt;
* Creator&lt;br /&gt;
* Controller&lt;br /&gt;
* Low Coupling&lt;br /&gt;
* High Cohesion&lt;br /&gt;
* Polymorphism&lt;br /&gt;
* Pure Fabrication&lt;br /&gt;
* Indirection&lt;br /&gt;
* Protected Variations&lt;br /&gt;
&lt;br /&gt;
Some of these, such as &amp;quot;Low Coupling&amp;quot; and &amp;quot;High Cohesion&amp;quot; are merely good design principles, and not design patterns.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=The Controller Pattern=&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
The '''Controller pattern''' addresses the question: ''Who handles a system event?'' It assigns responsibilities for handling system events to different objects.&lt;br /&gt;
&lt;br /&gt;
Sometimes, an event is initiated from an external source. A class receives the event, but it may not handle the event. These events should be handled by classes representing one of the following choices:&lt;br /&gt;
* A class that represents the ''overall system'', device, or subsystem (facade controller).&lt;br /&gt;
* A class that represents a ''use case scenario'' within which the system event occurs. These are often named &amp;lt;usecasename&amp;gt;Handler, &amp;lt;usecasename&amp;gt;Controller, &amp;lt;usecasename&amp;gt;Manager,and so forth.&lt;br /&gt;
&lt;br /&gt;
          o  To choose between facade and use-case controllers:&lt;br /&gt;
                + The ''Facade controller'' is suitable when there are few system events.&lt;br /&gt;
                + The ''Use-case controller'' is applicable when there are many system events and the facade controller would have become too large and incohesive.&lt;br /&gt;
&lt;br /&gt;
Wikipedia succinctly states: ''&amp;quot;The [http://en.wikipedia.org/wiki/GRASP_(Object_Oriented_Design) Controller] pattern assigns the responsibility of dealing with system events to a non-UI class that represent the overall system or a use case scenario. A use case controller should be used to deal with all system events of a use case, and may be used for more than one use case (for instance, for use cases Create User and Delete User, one can have one UserController, instead of two separate use case controllers)&amp;quot;''&lt;br /&gt;
&lt;br /&gt;
==Benefits==&lt;br /&gt;
&lt;br /&gt;
*''Reuse'' of domain layer software by plugging in various interfaces&lt;br /&gt;
*It is possible to ''control'' out-of-sequence system events&lt;br /&gt;
&lt;br /&gt;
=Examples=&lt;br /&gt;
&lt;br /&gt;
==Description1==&lt;br /&gt;
&lt;br /&gt;
[http://www.augustana.ab.ca/~mohrj/courses/2003.fall/csc220/lecture_notes/responsibilities.html Reference 1] contains an excellent description of the controller pattern. &lt;br /&gt;
&lt;br /&gt;
  The controller is &amp;quot;A non-user interface object responsible for receiving or handling a system event, and that defines the method &lt;br /&gt;
  for the system operation&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
*A system event is said to be an event generated by an &amp;quot;external actor&amp;quot;&lt;br /&gt;
&lt;br /&gt;
*A system operation refers to the response of the system to a system event. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The website also contains a diagram showing the general context of the Controller, depicted below. (INCLUDE DIAGRAM HERE)&lt;br /&gt;
&lt;br /&gt;
******Should we format it as Desc/Example or separate them ?&lt;br /&gt;
&lt;br /&gt;
== Example 2 ==&lt;br /&gt;
A game of [http://www.academic.marist.edu/~jzbv/SoftwareDevelopment/GRASP.ppt Monopoly] is an excellent example of a controller pattern.Actors, such as the human player in Monopoly, generate UI events (such as clicking a button with a mouse to play a game or make a move).  The UI software objects (such as a JFrame window and a JButton) must process the event and cause the game to play.   When objects in the UI layer pick up an event, they must delegate the request to an object in the domain layer.&lt;br /&gt;
&lt;br /&gt;
The problem in this case can be formulated as follows:&lt;br /&gt;
What first object beyond the UI layer should receive the message from the UI layer?&lt;br /&gt;
&lt;br /&gt;
As per the controller pattern the solution is as follows:&lt;br /&gt;
Assign the responsibility to an object representing either of following:&lt;br /&gt;
- Represents the overall “system” – a root object&lt;br /&gt;
- Represents a use case scenario within which the system operation occurs.&lt;br /&gt;
&lt;br /&gt;
[[Image:monopoly.jpg]]&lt;br /&gt;
&lt;br /&gt;
==Description3==&lt;br /&gt;
This article contains an [http://www.davidhayden.com/blog/dave/archive/2004/12/10/680.aspx E-Commerce example] of the Controller Pattern. The author classifies controllers as '''Use case Controllers''' and '''Facade Controllers'''. &lt;br /&gt;
&lt;br /&gt;
Use case controllers are useful to handle messages from the User Interface Layer  when there is little coupling between messages. A facade controller to handle all messages will not suffice in this case. &lt;br /&gt;
&lt;br /&gt;
The E-Commerce application in the example considers the following messages:&lt;br /&gt;
&lt;br /&gt;
    Get Categories&lt;br /&gt;
    Get Product in Category X&lt;br /&gt;
    Get Items in Shopping Cart&lt;br /&gt;
    Add Item to Shopping Cart&lt;br /&gt;
&lt;br /&gt;
The first 2 messages are related to a ProductCatalog to ProductCatalogHandler and the last 2 messages are related to the shopper's cart to ShoppingCartHandler:&lt;br /&gt;
&lt;br /&gt;
    ProductCatalogHandler&lt;br /&gt;
          -Get Categories&lt;br /&gt;
          -Get Product in Category X&lt;br /&gt;
    ShoppingCartHandler&lt;br /&gt;
          -Get Items in Shopping Cart&lt;br /&gt;
          -Add Item to Shopping Cart&lt;br /&gt;
&lt;br /&gt;
ProductCatalogHandler and ShoppingCartHandler are highly cohesive, embodied by the Controller Pattern.&lt;br /&gt;
&lt;br /&gt;
==Description3==&lt;br /&gt;
&lt;br /&gt;
This [http://codebetter.com/blogs/david.hayden/archive/2005/04/08/61648.aspx Blog] mentions some examples of the Controller Pattern in the context of blogs. It demonstrates how the controller class beyond the UI layer &amp;quot;hands off&amp;quot; the message to another domain layer object to act upon the message. &lt;br /&gt;
&lt;br /&gt;
Another related [http://davidhayden.com/blog/dave/archive/2004/11/28/648.aspx article] disambiguates between the Controller Pattern and the [http://en.wikipedia.org/wiki/Model-view-controller Model-View-Controller] Architecture. The author defines the controller as &amp;quot;the first object beyond the UI layer that is responsible for receiving or handling a system operation message&amp;quot;. As entailed above, the controller is the coordinator responsible for delegating work to other objects that actually accomplish the task at hand. &lt;br /&gt;
&lt;br /&gt;
==Description4==&lt;br /&gt;
&lt;br /&gt;
[http://209.85.165.104/search?q=cache:Mgu-Um9Lx1sJ:www.soc.napier.ac.uk/module.php3%3Fop%3Dgetresource%26cloaking%3Dno%26resourceid%3D5938601+controller+pattern+GRASP&amp;amp;hl=en&amp;amp;ct=clnk&amp;amp;cd=15&amp;amp;gl=us  Reference 6] contains the following solution to the problem of who handles the system event: &amp;quot;If a program receives events from external sources other than its graphical interface, add an event class to decouple the event source(s) from the objects that actually handle the events.&amp;quot; &lt;br /&gt;
&lt;br /&gt;
The author also mentions the benefits of using the Controller Pattern as an increased potential for reuse. It leads to decoupling &lt;br /&gt;
between the external sources of events and the internal event handlers.&lt;br /&gt;
&lt;br /&gt;
Consider the example of buying items at a supermarket. The cashier enters the items to be purchased and generates a bill for the customer to make the payment at the end of the sale. The system events include:&lt;br /&gt;
&lt;br /&gt;
  ''enterItem()''&lt;br /&gt;
  ''endSale()''&lt;br /&gt;
  ''makePayment()''&lt;br /&gt;
&lt;br /&gt;
The problem can be phrased as: Who is responsible for ''enterItem()''?&lt;br /&gt;
&lt;br /&gt;
Using the Controller Pattern to solve our problem, we can choose among the following: &lt;br /&gt;
&lt;br /&gt;
*The overall system [POST]&lt;br /&gt;
*The overall business(sub-system) [STORE]&lt;br /&gt;
*Someone in the real world who is active in the task [CASHIER]&lt;br /&gt;
*The artificial handler of all system events in the use case [BuyItemsHandler]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:controller1.jpg]]&lt;br /&gt;
&lt;br /&gt;
The choice made should reflect high cohesion and low coupling, as shown below, in which the UI layer is decoupled from the problem domain.&lt;br /&gt;
&lt;br /&gt;
[[Image:controller.jpg]]&lt;br /&gt;
&lt;br /&gt;
=Issues that are important in learning about this topic=&lt;br /&gt;
&lt;br /&gt;
=See Also=&lt;br /&gt;
&lt;br /&gt;
Applying UML and Patterns: Craig Larman&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=References=&lt;br /&gt;
&lt;br /&gt;
1. [http://www.augustana.ab.ca/~mohrj/courses/2003.fall/csc220/lecture_notes/responsibilities.html GRASP Patterns]&lt;br /&gt;
&lt;br /&gt;
2. [http://en.wikipedia.org/wiki/GRASP_(Object_Oriented_Design) Wikipedia link to GRASP]&lt;br /&gt;
&lt;br /&gt;
3. [http://codebetter.com/blogs/david.hayden/archive/2005/04/08/61648.aspx Blog on GRASP Controller Pattern]&lt;br /&gt;
&lt;br /&gt;
4. [http://www.davidhayden.com/blog/dave/archive/2004/12/10/680.aspx E-Commerce example]&lt;br /&gt;
&lt;br /&gt;
5. [http://class.ee.iastate.edu/berleant/home/Courses/SoftwareEngineering/CprE486fall2004/GRASP.pdf Controller responsibility]&lt;br /&gt;
&lt;br /&gt;
6. [http://209.85.165.104/search?q=cache:Mgu-Um9Lx1sJ:www.soc.napier.ac.uk/module.php3%3Fop%3Dgetresource%26cloaking%3Dno%26resourceid%3D5938601+controller+pattern+GRASP&amp;amp;hl=en&amp;amp;ct=clnk&amp;amp;cd=15&amp;amp;gl=us Presentation on GRASP]&lt;br /&gt;
&lt;br /&gt;
7. [http://www.informit.com/content/images/0130925691/samplechapter/0130925691.pdf DESIGN MODEL: USE-CASE REALIZATIONS WITH GRASP PATTERNS]&lt;br /&gt;
&lt;br /&gt;
8. [http://www.dcs.bbk.ac.uk/~niki/lecture5.ppt Presentation on Design Patterns]&lt;/div&gt;</summary>
		<author><name>Nnmodak</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Controller.jpg&amp;diff=9239</id>
		<title>File:Controller.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Controller.jpg&amp;diff=9239"/>
		<updated>2007-11-19T07:31:34Z</updated>

		<summary type="html">&lt;p&gt;Nnmodak: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Nnmodak</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2007/wiki3_6_pm&amp;diff=9238</id>
		<title>CSC/ECE 517 Fall 2007/wiki3 6 pm</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2007/wiki3_6_pm&amp;diff=9238"/>
		<updated>2007-11-19T07:31:24Z</updated>

		<summary type="html">&lt;p&gt;Nnmodak: /* Description4 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''Take the Controller pattern (which we did not cover in class) and catalog the information on it available on the Web. Find good descriptions and good, concise, understandable examples. Tell which you consider the best to present to a class.''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Design Patterns=&lt;br /&gt;
A [http://en.wikipedia.org/wiki/Design_pattern_%28computer_science%29 Design Pattern] refers to a named description of a problem and a solution that can be applied in different contexts. Patterns are ''proven solutions to common problems''.&lt;br /&gt;
&lt;br /&gt;
==GRASP Patterns==&lt;br /&gt;
[http://en.wikipedia.org/wiki/GRASP_(Object_Oriented_Design) GRASP] refers to '''G'''eneral '''R'''esponsibility '''A'''ssignment '''S'''oftware '''P'''atterns. It includes a systematic approach to [http://en.wikipedia.org/wiki/Object_oriented_design Object Oriented Design], while assigning responsibilities to classes.&lt;br /&gt;
&lt;br /&gt;
The GRASP Patterns include:&lt;br /&gt;
* Information Expert&lt;br /&gt;
* Creator&lt;br /&gt;
* Controller&lt;br /&gt;
* Low Coupling&lt;br /&gt;
* High Cohesion&lt;br /&gt;
* Polymorphism&lt;br /&gt;
* Pure Fabrication&lt;br /&gt;
* Indirection&lt;br /&gt;
* Protected Variations&lt;br /&gt;
&lt;br /&gt;
Some of these, such as &amp;quot;Low Coupling&amp;quot; and &amp;quot;High Cohesion&amp;quot; are merely good design principles, and not design patterns.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=The Controller Pattern=&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
The '''Controller pattern''' addresses the question: ''Who handles a system event?'' It assigns responsibilities for handling system events to different objects.&lt;br /&gt;
&lt;br /&gt;
Sometimes, an event is initiated from an external source. A class receives the event, but it may not handle the event. These events should be handled by classes representing one of the following choices:&lt;br /&gt;
* A class that represents the ''overall system'', device, or subsystem (facade controller).&lt;br /&gt;
* A class that represents a ''use case scenario'' within which the system event occurs. These are often named &amp;lt;usecasename&amp;gt;Handler, &amp;lt;usecasename&amp;gt;Controller, &amp;lt;usecasename&amp;gt;Manager,and so forth.&lt;br /&gt;
&lt;br /&gt;
          o  To choose between facade and use-case controllers:&lt;br /&gt;
                + The ''Facade controller'' is suitable when there are few system events.&lt;br /&gt;
                + The ''Use-case controller'' is applicable when there are many system events and the facade controller would have become too large and incohesive.&lt;br /&gt;
&lt;br /&gt;
Wikipedia succinctly states: ''&amp;quot;The [http://en.wikipedia.org/wiki/GRASP_(Object_Oriented_Design) Controller] pattern assigns the responsibility of dealing with system events to a non-UI class that represent the overall system or a use case scenario. A use case controller should be used to deal with all system events of a use case, and may be used for more than one use case (for instance, for use cases Create User and Delete User, one can have one UserController, instead of two separate use case controllers)&amp;quot;''&lt;br /&gt;
&lt;br /&gt;
==Benefits==&lt;br /&gt;
&lt;br /&gt;
*''Reuse'' of domain layer software by plugging in various interfaces&lt;br /&gt;
*It is possible to ''control'' out-of-sequence system events&lt;br /&gt;
&lt;br /&gt;
=Examples=&lt;br /&gt;
&lt;br /&gt;
==Description1==&lt;br /&gt;
&lt;br /&gt;
[http://www.augustana.ab.ca/~mohrj/courses/2003.fall/csc220/lecture_notes/responsibilities.html Reference 1] contains an excellent description of the controller pattern. &lt;br /&gt;
&lt;br /&gt;
  The controller is &amp;quot;A non-user interface object responsible for receiving or handling a system event, and that defines the method &lt;br /&gt;
  for the system operation&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
*A system event is said to be an event generated by an &amp;quot;external actor&amp;quot;&lt;br /&gt;
&lt;br /&gt;
*A system operation refers to the response of the system to a system event. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The website also contains a diagram showing the general context of the Controller, depicted below. (INCLUDE DIAGRAM HERE)&lt;br /&gt;
&lt;br /&gt;
******Should we format it as Desc/Example or separate them ?&lt;br /&gt;
&lt;br /&gt;
== Example 2 ==&lt;br /&gt;
A game of [http://www.academic.marist.edu/~jzbv/SoftwareDevelopment/GRASP.ppt Monopoly] is an excellent example of a controller pattern.Actors, such as the human player in Monopoly, generate UI events (such as clicking a button with a mouse to play a game or make a move).  The UI software objects (such as a JFrame window and a JButton) must process the event and cause the game to play.   When objects in the UI layer pick up an event, they must delegate the request to an object in the domain layer.&lt;br /&gt;
&lt;br /&gt;
The problem in this case can be formulated as follows:&lt;br /&gt;
What first object beyond the UI layer should receive the message from the UI layer?&lt;br /&gt;
&lt;br /&gt;
As per the controller pattern the solution is as follows:&lt;br /&gt;
Assign the responsibility to an object representing either of following:&lt;br /&gt;
- Represents the overall “system” – a root object&lt;br /&gt;
- Represents a use case scenario within which the system operation occurs.&lt;br /&gt;
&lt;br /&gt;
[[Image:monopoly.jpg]]&lt;br /&gt;
&lt;br /&gt;
==Description3==&lt;br /&gt;
This article contains an [http://www.davidhayden.com/blog/dave/archive/2004/12/10/680.aspx E-Commerce example] of the Controller Pattern. The author classifies controllers as '''Use case Controllers''' and '''Facade Controllers'''. &lt;br /&gt;
&lt;br /&gt;
Use case controllers are useful to handle messages from the User Interface Layer  when there is little coupling between messages. A facade controller to handle all messages will not suffice in this case. &lt;br /&gt;
&lt;br /&gt;
The E-Commerce application in the example considers the following messages:&lt;br /&gt;
&lt;br /&gt;
    Get Categories&lt;br /&gt;
    Get Product in Category X&lt;br /&gt;
    Get Items in Shopping Cart&lt;br /&gt;
    Add Item to Shopping Cart&lt;br /&gt;
&lt;br /&gt;
The first 2 messages are related to a ProductCatalog to ProductCatalogHandler and the last 2 messages are related to the shopper's cart to ShoppingCartHandler:&lt;br /&gt;
&lt;br /&gt;
    ProductCatalogHandler&lt;br /&gt;
          -Get Categories&lt;br /&gt;
          -Get Product in Category X&lt;br /&gt;
    ShoppingCartHandler&lt;br /&gt;
          -Get Items in Shopping Cart&lt;br /&gt;
          -Add Item to Shopping Cart&lt;br /&gt;
&lt;br /&gt;
ProductCatalogHandler and ShoppingCartHandler are highly cohesive, embodied by the Controller Pattern.&lt;br /&gt;
&lt;br /&gt;
==Description3==&lt;br /&gt;
&lt;br /&gt;
This [http://codebetter.com/blogs/david.hayden/archive/2005/04/08/61648.aspx Blog] mentions some examples of the Controller Pattern in the context of blogs. It demonstrates how the controller class beyond the UI layer &amp;quot;hands off&amp;quot; the message to another domain layer object to act upon the message. &lt;br /&gt;
&lt;br /&gt;
Another related [http://davidhayden.com/blog/dave/archive/2004/11/28/648.aspx article] disambiguates between the Controller Pattern and the [http://en.wikipedia.org/wiki/Model-view-controller Model-View-Controller] Architecture. The author defines the controller as &amp;quot;the first object beyond the UI layer that is responsible for receiving or handling a system operation message&amp;quot;. As entailed above, the controller is the coordinator responsible for delegating work to other objects that actually accomplish the task at hand. &lt;br /&gt;
&lt;br /&gt;
==Description4==&lt;br /&gt;
&lt;br /&gt;
[http://209.85.165.104/search?q=cache:Mgu-Um9Lx1sJ:www.soc.napier.ac.uk/module.php3%3Fop%3Dgetresource%26cloaking%3Dno%26resourceid%3D5938601+controller+pattern+GRASP&amp;amp;hl=en&amp;amp;ct=clnk&amp;amp;cd=15&amp;amp;gl=us  Reference 6] contains the following solution to the problem of who handles the system event: &amp;quot;If a program receives events from external sources other than its graphical interface, add an event class to decouple the event source(s) from the objects that actually handle the events.&amp;quot; &lt;br /&gt;
&lt;br /&gt;
The author also mentions the benefits of using the Controller Pattern as an increased potential for reuse. It leads to decoupling &lt;br /&gt;
between the external sources of events and the internal event handlers.&lt;br /&gt;
&lt;br /&gt;
Consider the example of buying items at a supermarket. The cashier enters the items to be purchased and generates a bill for the customer to make the payment at the end of the sale. The system events include:&lt;br /&gt;
&lt;br /&gt;
  ''enterItem()''&lt;br /&gt;
  ''endSale()''&lt;br /&gt;
  ''makePayment()''&lt;br /&gt;
&lt;br /&gt;
The problem can be phrased as: Who is responsible for ''enterItem()''?&lt;br /&gt;
&lt;br /&gt;
Using the Controller Pattern to solve our problem, we can choose among the following: &lt;br /&gt;
&lt;br /&gt;
*The overall system [POST]&lt;br /&gt;
*The overall business(sub-system) [STORE]&lt;br /&gt;
*Someone in the real world who is active in the task [CASHIER]&lt;br /&gt;
*The artificial handler of all system events in the use case [BuyItemsHandler]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The choice made should reflect high cohesion and low coupling, as shown below, in which the UI layer is decoupled from the problem domain.&lt;br /&gt;
&lt;br /&gt;
[[Image:controller.jpg]]&lt;br /&gt;
&lt;br /&gt;
=Issues that are important in learning about this topic=&lt;br /&gt;
&lt;br /&gt;
=See Also=&lt;br /&gt;
&lt;br /&gt;
Applying UML and Patterns: Craig Larman&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=References=&lt;br /&gt;
&lt;br /&gt;
1. [http://www.augustana.ab.ca/~mohrj/courses/2003.fall/csc220/lecture_notes/responsibilities.html GRASP Patterns]&lt;br /&gt;
&lt;br /&gt;
2. [http://en.wikipedia.org/wiki/GRASP_(Object_Oriented_Design) Wikipedia link to GRASP]&lt;br /&gt;
&lt;br /&gt;
3. [http://codebetter.com/blogs/david.hayden/archive/2005/04/08/61648.aspx Blog on GRASP Controller Pattern]&lt;br /&gt;
&lt;br /&gt;
4. [http://www.davidhayden.com/blog/dave/archive/2004/12/10/680.aspx E-Commerce example]&lt;br /&gt;
&lt;br /&gt;
5. [http://class.ee.iastate.edu/berleant/home/Courses/SoftwareEngineering/CprE486fall2004/GRASP.pdf Controller responsibility]&lt;br /&gt;
&lt;br /&gt;
6. [http://209.85.165.104/search?q=cache:Mgu-Um9Lx1sJ:www.soc.napier.ac.uk/module.php3%3Fop%3Dgetresource%26cloaking%3Dno%26resourceid%3D5938601+controller+pattern+GRASP&amp;amp;hl=en&amp;amp;ct=clnk&amp;amp;cd=15&amp;amp;gl=us Presentation on GRASP]&lt;br /&gt;
&lt;br /&gt;
7. [http://www.informit.com/content/images/0130925691/samplechapter/0130925691.pdf DESIGN MODEL: USE-CASE REALIZATIONS WITH GRASP PATTERNS]&lt;br /&gt;
&lt;br /&gt;
8. [http://www.dcs.bbk.ac.uk/~niki/lecture5.ppt Presentation on Design Patterns]&lt;/div&gt;</summary>
		<author><name>Nnmodak</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Monopoly.jpg&amp;diff=9234</id>
		<title>File:Monopoly.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Monopoly.jpg&amp;diff=9234"/>
		<updated>2007-11-19T07:29:25Z</updated>

		<summary type="html">&lt;p&gt;Nnmodak: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Nnmodak</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2007/wiki3_6_pm&amp;diff=9233</id>
		<title>CSC/ECE 517 Fall 2007/wiki3 6 pm</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2007/wiki3_6_pm&amp;diff=9233"/>
		<updated>2007-11-19T07:29:04Z</updated>

		<summary type="html">&lt;p&gt;Nnmodak: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''Take the Controller pattern (which we did not cover in class) and catalog the information on it available on the Web. Find good descriptions and good, concise, understandable examples. Tell which you consider the best to present to a class.''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Design Patterns=&lt;br /&gt;
A [http://en.wikipedia.org/wiki/Design_pattern_%28computer_science%29 Design Pattern] refers to a named description of a problem and a solution that can be applied in different contexts. Patterns are ''proven solutions to common problems''.&lt;br /&gt;
&lt;br /&gt;
==GRASP Patterns==&lt;br /&gt;
[http://en.wikipedia.org/wiki/GRASP_(Object_Oriented_Design) GRASP] refers to '''G'''eneral '''R'''esponsibility '''A'''ssignment '''S'''oftware '''P'''atterns. It includes a systematic approach to [http://en.wikipedia.org/wiki/Object_oriented_design Object Oriented Design], while assigning responsibilities to classes.&lt;br /&gt;
&lt;br /&gt;
The GRASP Patterns include:&lt;br /&gt;
* Information Expert&lt;br /&gt;
* Creator&lt;br /&gt;
* Controller&lt;br /&gt;
* Low Coupling&lt;br /&gt;
* High Cohesion&lt;br /&gt;
* Polymorphism&lt;br /&gt;
* Pure Fabrication&lt;br /&gt;
* Indirection&lt;br /&gt;
* Protected Variations&lt;br /&gt;
&lt;br /&gt;
Some of these, such as &amp;quot;Low Coupling&amp;quot; and &amp;quot;High Cohesion&amp;quot; are merely good design principles, and not design patterns.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=The Controller Pattern=&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
The '''Controller pattern''' addresses the question: ''Who handles a system event?'' It assigns responsibilities for handling system events to different objects.&lt;br /&gt;
&lt;br /&gt;
Sometimes, an event is initiated from an external source. A class receives the event, but it may not handle the event. These events should be handled by classes representing one of the following choices:&lt;br /&gt;
* A class that represents the ''overall system'', device, or subsystem (facade controller).&lt;br /&gt;
* A class that represents a ''use case scenario'' within which the system event occurs. These are often named &amp;lt;usecasename&amp;gt;Handler, &amp;lt;usecasename&amp;gt;Controller, &amp;lt;usecasename&amp;gt;Manager,and so forth.&lt;br /&gt;
&lt;br /&gt;
          o  To choose between facade and use-case controllers:&lt;br /&gt;
                + The ''Facade controller'' is suitable when there are few system events.&lt;br /&gt;
                + The ''Use-case controller'' is applicable when there are many system events and the facade controller would have become too large and incohesive.&lt;br /&gt;
&lt;br /&gt;
Wikipedia succinctly states: ''&amp;quot;The [http://en.wikipedia.org/wiki/GRASP_(Object_Oriented_Design) Controller] pattern assigns the responsibility of dealing with system events to a non-UI class that represent the overall system or a use case scenario. A use case controller should be used to deal with all system events of a use case, and may be used for more than one use case (for instance, for use cases Create User and Delete User, one can have one UserController, instead of two separate use case controllers)&amp;quot;''&lt;br /&gt;
&lt;br /&gt;
==Benefits==&lt;br /&gt;
&lt;br /&gt;
*''Reuse'' of domain layer software by plugging in various interfaces&lt;br /&gt;
*It is possible to ''control'' out-of-sequence system events&lt;br /&gt;
&lt;br /&gt;
=Examples=&lt;br /&gt;
&lt;br /&gt;
==Description1==&lt;br /&gt;
&lt;br /&gt;
[http://www.augustana.ab.ca/~mohrj/courses/2003.fall/csc220/lecture_notes/responsibilities.html Reference 1] contains an excellent description of the controller pattern. &lt;br /&gt;
&lt;br /&gt;
  The controller is &amp;quot;A non-user interface object responsible for receiving or handling a system event, and that defines the method &lt;br /&gt;
  for the system operation&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
*A system event is said to be an event generated by an &amp;quot;external actor&amp;quot;&lt;br /&gt;
&lt;br /&gt;
*A system operation refers to the response of the system to a system event. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The website also contains a diagram showing the general context of the Controller, depicted below. (INCLUDE DIAGRAM HERE)&lt;br /&gt;
&lt;br /&gt;
******Should we format it as Desc/Example or separate them ?&lt;br /&gt;
&lt;br /&gt;
== Example 2 ==&lt;br /&gt;
A game of [http://www.academic.marist.edu/~jzbv/SoftwareDevelopment/GRASP.ppt Monopoly] is an excellent example of a controller pattern.Actors, such as the human player in Monopoly, generate UI events (such as clicking a button with a mouse to play a game or make a move).  The UI software objects (such as a JFrame window and a JButton) must process the event and cause the game to play.   When objects in the UI layer pick up an event, they must delegate the request to an object in the domain layer.&lt;br /&gt;
&lt;br /&gt;
The problem in this case can be formulated as follows:&lt;br /&gt;
What first object beyond the UI layer should receive the message from the UI layer?&lt;br /&gt;
&lt;br /&gt;
As per the controller pattern the solution is as follows:&lt;br /&gt;
Assign the responsibility to an object representing either of following:&lt;br /&gt;
- Represents the overall “system” – a root object&lt;br /&gt;
- Represents a use case scenario within which the system operation occurs.&lt;br /&gt;
&lt;br /&gt;
[[Image:monopoly.jpg]]&lt;br /&gt;
&lt;br /&gt;
==Description3==&lt;br /&gt;
This article contains an [http://www.davidhayden.com/blog/dave/archive/2004/12/10/680.aspx E-Commerce example] of the Controller Pattern. The author classifies controllers as '''Use case Controllers''' and '''Facade Controllers'''. &lt;br /&gt;
&lt;br /&gt;
Use case controllers are useful to handle messages from the User Interface Layer  when there is little coupling between messages. A facade controller to handle all messages will not suffice in this case. &lt;br /&gt;
&lt;br /&gt;
The E-Commerce application in the example considers the following messages:&lt;br /&gt;
&lt;br /&gt;
    Get Categories&lt;br /&gt;
    Get Product in Category X&lt;br /&gt;
    Get Items in Shopping Cart&lt;br /&gt;
    Add Item to Shopping Cart&lt;br /&gt;
&lt;br /&gt;
The first 2 messages are related to a ProductCatalog to ProductCatalogHandler and the last 2 messages are related to the shopper's cart to ShoppingCartHandler:&lt;br /&gt;
&lt;br /&gt;
    ProductCatalogHandler&lt;br /&gt;
          -Get Categories&lt;br /&gt;
          -Get Product in Category X&lt;br /&gt;
    ShoppingCartHandler&lt;br /&gt;
          -Get Items in Shopping Cart&lt;br /&gt;
          -Add Item to Shopping Cart&lt;br /&gt;
&lt;br /&gt;
ProductCatalogHandler and ShoppingCartHandler are highly cohesive, embodied by the Controller Pattern.&lt;br /&gt;
&lt;br /&gt;
==Description3==&lt;br /&gt;
&lt;br /&gt;
This [http://codebetter.com/blogs/david.hayden/archive/2005/04/08/61648.aspx Blog] mentions some examples of the Controller Pattern in the context of blogs. It demonstrates how the controller class beyond the UI layer &amp;quot;hands off&amp;quot; the message to another domain layer object to act upon the message. &lt;br /&gt;
&lt;br /&gt;
Another related [http://davidhayden.com/blog/dave/archive/2004/11/28/648.aspx article] disambiguates between the Controller Pattern and the [http://en.wikipedia.org/wiki/Model-view-controller Model-View-Controller] Architecture. The author defines the controller as &amp;quot;the first object beyond the UI layer that is responsible for receiving or handling a system operation message&amp;quot;. As entailed above, the controller is the coordinator responsible for delegating work to other objects that actually accomplish the task at hand. &lt;br /&gt;
&lt;br /&gt;
==Description4==&lt;br /&gt;
&lt;br /&gt;
[http://209.85.165.104/search?q=cache:Mgu-Um9Lx1sJ:www.soc.napier.ac.uk/module.php3%3Fop%3Dgetresource%26cloaking%3Dno%26resourceid%3D5938601+controller+pattern+GRASP&amp;amp;hl=en&amp;amp;ct=clnk&amp;amp;cd=15&amp;amp;gl=us  Reference 6] contains the following solution to the problem of who handles the system event: &amp;quot;If a program receives events from external sources other than its graphical interface, add an event class to decouple the event source(s) from the objects that actually handle the events.&amp;quot; &lt;br /&gt;
&lt;br /&gt;
The author also mentions the benefits of using the Controller Pattern as an increased potential for reuse. It leads to decoupling &lt;br /&gt;
between the external sources of events and the internal event handlers.&lt;br /&gt;
&lt;br /&gt;
Consider the example of buying items at a supermarket. The cashier enters the items to be purchased and generates a bill for the customer to make the payment at the end of the sale. The system events include:&lt;br /&gt;
&lt;br /&gt;
  ''enterItem()''&lt;br /&gt;
  ''endSale()''&lt;br /&gt;
  ''makePayment()''&lt;br /&gt;
&lt;br /&gt;
The problem can be phrased as: Who is responsible for ''enterItem()''?&lt;br /&gt;
&lt;br /&gt;
Using the Controller Pattern to solve our problem, we can choose among the following: &lt;br /&gt;
&lt;br /&gt;
*The overall system [POST]&lt;br /&gt;
*The overall business(sub-system) [STORE]&lt;br /&gt;
*Someone in the real world who is active in the task [CASHIER]&lt;br /&gt;
*The artificial handler of all system events in the use case [BuyItemsHandler]&lt;br /&gt;
&lt;br /&gt;
[[Image:http://pg.ece.ncsu.edu/mediawiki/index.php/Image:Controller_Choice.jpeg]]&lt;br /&gt;
&lt;br /&gt;
The choice made should reflect high cohesion and low coupling, as shown below, in which the UI layer is decoupled from the problem domain.&lt;br /&gt;
&lt;br /&gt;
[[Image:controller.jpg]]&lt;br /&gt;
&lt;br /&gt;
=Issues that are important in learning about this topic=&lt;br /&gt;
&lt;br /&gt;
=See Also=&lt;br /&gt;
&lt;br /&gt;
Applying UML and Patterns: Craig Larman&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=References=&lt;br /&gt;
&lt;br /&gt;
1. [http://www.augustana.ab.ca/~mohrj/courses/2003.fall/csc220/lecture_notes/responsibilities.html GRASP Patterns]&lt;br /&gt;
&lt;br /&gt;
2. [http://en.wikipedia.org/wiki/GRASP_(Object_Oriented_Design) Wikipedia link to GRASP]&lt;br /&gt;
&lt;br /&gt;
3. [http://codebetter.com/blogs/david.hayden/archive/2005/04/08/61648.aspx Blog on GRASP Controller Pattern]&lt;br /&gt;
&lt;br /&gt;
4. [http://www.davidhayden.com/blog/dave/archive/2004/12/10/680.aspx E-Commerce example]&lt;br /&gt;
&lt;br /&gt;
5. [http://class.ee.iastate.edu/berleant/home/Courses/SoftwareEngineering/CprE486fall2004/GRASP.pdf Controller responsibility]&lt;br /&gt;
&lt;br /&gt;
6. [http://209.85.165.104/search?q=cache:Mgu-Um9Lx1sJ:www.soc.napier.ac.uk/module.php3%3Fop%3Dgetresource%26cloaking%3Dno%26resourceid%3D5938601+controller+pattern+GRASP&amp;amp;hl=en&amp;amp;ct=clnk&amp;amp;cd=15&amp;amp;gl=us Presentation on GRASP]&lt;br /&gt;
&lt;br /&gt;
7. [http://www.informit.com/content/images/0130925691/samplechapter/0130925691.pdf DESIGN MODEL: USE-CASE REALIZATIONS WITH GRASP PATTERNS]&lt;br /&gt;
&lt;br /&gt;
8. [http://www.dcs.bbk.ac.uk/~niki/lecture5.ppt Presentation on Design Patterns]&lt;/div&gt;</summary>
		<author><name>Nnmodak</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2007/wiki3_6_pm&amp;diff=8672</id>
		<title>CSC/ECE 517 Fall 2007/wiki3 6 pm</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2007/wiki3_6_pm&amp;diff=8672"/>
		<updated>2007-11-17T14:13:35Z</updated>

		<summary type="html">&lt;p&gt;Nnmodak: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''Take the Controller pattern (which we did not cover in class) and catalog the information on it available on the Web. Find good descriptions and good, concise, understandable examples. Tell which you consider the best to present to a class.''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Design Patterns=&lt;br /&gt;
A [http://en.wikipedia.org/wiki/Design_pattern_%28computer_science%29 Design Pattern] refers to a named description of a problem and a solution that can be applied in different contexts. Patterns are ''proven solutions to common problems''.&lt;br /&gt;
&lt;br /&gt;
==GRASP Patterns==&lt;br /&gt;
[http://en.wikipedia.org/wiki/GRASP_(Object_Oriented_Design) GRASP] refers to '''G'''eneral '''R'''esponsibility '''A'''ssignment '''S'''oftware '''P'''atterns. It includes a systematic approach to [http://en.wikipedia.org/wiki/Object_oriented_design Object Oriented Design], while assigning responsibilities to classes.&lt;br /&gt;
&lt;br /&gt;
The GRASP Patterns include:&lt;br /&gt;
* Information Expert&lt;br /&gt;
* Creator&lt;br /&gt;
* Controller&lt;br /&gt;
* Low Coupling&lt;br /&gt;
* High Cohesion&lt;br /&gt;
* Polymorphism&lt;br /&gt;
* Pure Fabrication&lt;br /&gt;
* Indirection&lt;br /&gt;
* Protected Variations&lt;br /&gt;
&lt;br /&gt;
Some of these, such as &amp;quot;Low Coupling&amp;quot; and &amp;quot;High Cohesion&amp;quot; are merely good design principles, and not design patterns.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=The Controller Pattern=&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
The '''Controller pattern''' addresses the question: ''Who handles a system event?'' It assigns responsibilities for handling system events to different objects.&lt;br /&gt;
&lt;br /&gt;
Sometimes, an event is initiated from an external source. A class receives the event, but it may not handle the event. These events should be handled by classes representing one of the following choices:&lt;br /&gt;
* A class that represents the ''overall system'', device, or subsystem (facade controller).&lt;br /&gt;
* A class that represents a ''use case scenario'' within which the system event occurs. These are often named &amp;lt;usecasename&amp;gt;Handler, &amp;lt;usecasename&amp;gt;Controller, &amp;lt;usecasename&amp;gt;Manager,and so forth.&lt;br /&gt;
&lt;br /&gt;
          o  To choose between facade and use-case controllers:&lt;br /&gt;
                + The ''Facade controller'' is suitable when there are few system events.&lt;br /&gt;
                + The ''Use-case controller'' is applicable when there are many system events and the facade controller would have become too large and incohesive.&lt;br /&gt;
&lt;br /&gt;
Wikipedia succinctly states: ''&amp;quot;The [http://en.wikipedia.org/wiki/GRASP_(Object_Oriented_Design) Controller] pattern assigns the responsibility of dealing with system events to a non-UI class that represent the overall system or a use case scenario. A use case controller should be used to deal with all system events of a use case, and may be used for more than one use case (for instance, for use cases Create User and Delete User, one can have one UserController, instead of two separate use case controllers)&amp;quot;''&lt;br /&gt;
&lt;br /&gt;
==Benefits==&lt;br /&gt;
&lt;br /&gt;
*''Reuse'' of domain layer software by plugging in various interfaces&lt;br /&gt;
*It is possible to ''control'' out-of-sequence system events&lt;br /&gt;
&lt;br /&gt;
=Examples=&lt;br /&gt;
&lt;br /&gt;
==Description1==&lt;br /&gt;
&lt;br /&gt;
[http://www.augustana.ab.ca/~mohrj/courses/2003.fall/csc220/lecture_notes/responsibilities.html Reference 1] contains an excellent description of the controller pattern. &lt;br /&gt;
&lt;br /&gt;
  The controller is &amp;quot;A non-user interface object responsible for receiving or handling a system event, and that defines the method &lt;br /&gt;
  for the system operation&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
*A system event is said to be an event generated by an &amp;quot;external actor&amp;quot;&lt;br /&gt;
&lt;br /&gt;
*A system operation refers to the response of the system to a system event. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The website also contains a diagram showing the general context of the Controller, depicted below. (INCLUDE DIAGRAM HERE)&lt;br /&gt;
&lt;br /&gt;
******Should we format it as Desc/Example or separate them ?&lt;br /&gt;
&lt;br /&gt;
==Description2==&lt;br /&gt;
This article contains an [http://www.davidhayden.com/blog/dave/archive/2004/12/10/680.aspx E-Commerce example] of the Controller Pattern. The author classifies controllers as '''Use case Controllers''' and '''Facade Controllers'''. &lt;br /&gt;
&lt;br /&gt;
Use case controllers are useful to handle messages from the User Interface Layer  when there is little coupling between messages. A facade controller to handle all messages will not suffice in this case. &lt;br /&gt;
&lt;br /&gt;
The E-Commerce application in the example considers the following messages:&lt;br /&gt;
&lt;br /&gt;
    Get Categories&lt;br /&gt;
    Get Product in Category X&lt;br /&gt;
    Get Items in Shopping Cart&lt;br /&gt;
    Add Item to Shopping Cart&lt;br /&gt;
&lt;br /&gt;
The first 2 messages are related to a ProductCatalog to ProductCatalogHandler and the last 2 messages are related to the shopper's cart to ShoppingCartHandler:&lt;br /&gt;
&lt;br /&gt;
    ProductCatalogHandler&lt;br /&gt;
          -Get Categories&lt;br /&gt;
          -Get Product in Category X&lt;br /&gt;
    ShoppingCartHandler&lt;br /&gt;
          -Get Items in Shopping Cart&lt;br /&gt;
          -Add Item to Shopping Cart&lt;br /&gt;
&lt;br /&gt;
ProductCatalogHandler and ShoppingCartHandler are highly cohesive, embodied by the Controller Pattern.&lt;br /&gt;
&lt;br /&gt;
==Description3==&lt;br /&gt;
&lt;br /&gt;
This [http://codebetter.com/blogs/david.hayden/archive/2005/04/08/61648.aspx Blog] mentions some examples of the Controller Pattern in the context of blogs. It demonstrates how the controller class beyond the UI layer &amp;quot;hands off&amp;quot; the message to another domain layer object to act upon the message. &lt;br /&gt;
&lt;br /&gt;
Another related [http://davidhayden.com/blog/dave/archive/2004/11/28/648.aspx article] disambiguates between the Controller Pattern and the [http://en.wikipedia.org/wiki/Model-view-controller Model-View-Controller] Architecture. The author defines the controller as &amp;quot;the first object beyond the UI layer that is responsible for receiving or handling a system operation message&amp;quot;. As entailed above, the controller is the coordinator responsible for delegating work to other objects that actually accomplish the task at hand. &lt;br /&gt;
&lt;br /&gt;
==Description4==&lt;br /&gt;
&lt;br /&gt;
[http://209.85.165.104/search?q=cache:Mgu-Um9Lx1sJ:www.soc.napier.ac.uk/module.php3%3Fop%3Dgetresource%26cloaking%3Dno%26resourceid%3D5938601+controller+pattern+GRASP&amp;amp;hl=en&amp;amp;ct=clnk&amp;amp;cd=15&amp;amp;gl=us  Reference 6] contains the following solution to the problem of who handles the system event: &amp;quot;If a program receives events from external sources other than its graphical interface, add an event class to decouple the event source(s) from the objects that actually handle the events.&amp;quot; &lt;br /&gt;
&lt;br /&gt;
The author also mentions the benefits of using the Controller Pattern as an increased potential for reuse. It leads to decoupling &lt;br /&gt;
between the external sources of events and the internal event handlers.&lt;br /&gt;
&lt;br /&gt;
Consider the example of buying items at a supermarket. The cashier enters the items to be purchased and generates a bill for the customer to make the payment at the end of the sale. The system events include:&lt;br /&gt;
&lt;br /&gt;
  ''enterItem()''&lt;br /&gt;
  ''endSale()''&lt;br /&gt;
  ''makePayment()''&lt;br /&gt;
&lt;br /&gt;
The problem can be phrased as: Who is responsible for ''enterItem()''?&lt;br /&gt;
&lt;br /&gt;
Using the Controller Pattern to solve our problem, we can choose among the following: &lt;br /&gt;
&lt;br /&gt;
*The overall system [POST]&lt;br /&gt;
*The overall business(sub-system) [STORE]&lt;br /&gt;
*Someone in the real world who is active in the task [CASHIER]&lt;br /&gt;
*The artificial handler of all system events in the use case [BuyItemsHandler]&lt;br /&gt;
&lt;br /&gt;
[[Image:http://pg.ece.ncsu.edu/mediawiki/index.php/Image:Controller_Choice.jpeg]]&lt;br /&gt;
&lt;br /&gt;
The choice made should reflect high cohesion and low coupling, as shown below, in which the UI layer is decoupled from the problem domain.&lt;br /&gt;
&lt;br /&gt;
[[Image:controller.jpg]]&lt;br /&gt;
&lt;br /&gt;
=Issues that are important in learning about this topic=&lt;br /&gt;
&lt;br /&gt;
=See Also=&lt;br /&gt;
&lt;br /&gt;
Applying UML and Patterns: Craig Larman&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=References=&lt;br /&gt;
&lt;br /&gt;
1. [http://www.augustana.ab.ca/~mohrj/courses/2003.fall/csc220/lecture_notes/responsibilities.html GRASP Patterns]&lt;br /&gt;
&lt;br /&gt;
2. [http://en.wikipedia.org/wiki/GRASP_(Object_Oriented_Design) Wikipedia link to GRASP]&lt;br /&gt;
&lt;br /&gt;
3. [http://codebetter.com/blogs/david.hayden/archive/2005/04/08/61648.aspx Blog on GRASP Controller Pattern]&lt;br /&gt;
&lt;br /&gt;
4. [http://www.davidhayden.com/blog/dave/archive/2004/12/10/680.aspx E-Commerce example]&lt;br /&gt;
&lt;br /&gt;
5. [http://class.ee.iastate.edu/berleant/home/Courses/SoftwareEngineering/CprE486fall2004/GRASP.pdf Controller responsibility]&lt;br /&gt;
&lt;br /&gt;
6. [http://209.85.165.104/search?q=cache:Mgu-Um9Lx1sJ:www.soc.napier.ac.uk/module.php3%3Fop%3Dgetresource%26cloaking%3Dno%26resourceid%3D5938601+controller+pattern+GRASP&amp;amp;hl=en&amp;amp;ct=clnk&amp;amp;cd=15&amp;amp;gl=us Presentation on GRASP]&lt;br /&gt;
&lt;br /&gt;
7. [http://www.informit.com/content/images/0130925691/samplechapter/0130925691.pdf DESIGN MODEL: USE-CASE REALIZATIONS WITH GRASP PATTERNS]&lt;br /&gt;
&lt;br /&gt;
8. [http://www.dcs.bbk.ac.uk/~niki/lecture5.ppt Presentation on Design Patterns]&lt;/div&gt;</summary>
		<author><name>Nnmodak</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2007/wiki3_6_pm&amp;diff=8671</id>
		<title>CSC/ECE 517 Fall 2007/wiki3 6 pm</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2007/wiki3_6_pm&amp;diff=8671"/>
		<updated>2007-11-17T14:12:44Z</updated>

		<summary type="html">&lt;p&gt;Nnmodak: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''Take the Controller pattern (which we did not cover in class) and catalog the information on it available on the Web. Find good descriptions and good, concise, understandable examples. Tell which you consider the best to present to a class.''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Design Patterns=&lt;br /&gt;
A [http://en.wikipedia.org/wiki/Design_pattern_%28computer_science%29 Design Pattern] refers to a named description of a problem and a solution that can be applied in different contexts. Patterns are ''proven solutions to common problems''.&lt;br /&gt;
&lt;br /&gt;
==GRASP Patterns==&lt;br /&gt;
[http://en.wikipedia.org/wiki/GRASP_(Object_Oriented_Design) GRASP] refers to '''G'''eneral '''R'''esponsibility '''A'''ssignment '''S'''oftware '''P'''atterns. It includes a systematic approach to [http://en.wikipedia.org/wiki/Object_oriented_design Object Oriented Design], while assigning responsibilities to classes.&lt;br /&gt;
&lt;br /&gt;
The GRASP Patterns include:&lt;br /&gt;
* Information Expert&lt;br /&gt;
* Creator&lt;br /&gt;
* Controller&lt;br /&gt;
* Low Coupling&lt;br /&gt;
* High Cohesion&lt;br /&gt;
* Polymorphism&lt;br /&gt;
* Pure Fabrication&lt;br /&gt;
* Indirection&lt;br /&gt;
* Protected Variations&lt;br /&gt;
&lt;br /&gt;
Some of these, such as &amp;quot;Low Coupling&amp;quot; and &amp;quot;High Cohesion&amp;quot; are merely good design principles, and not design patterns.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=The Controller Pattern=&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
The '''Controller pattern''' addresses the question: ''Who handles a system event?'' It assigns responsibilities for handling system events to different objects.&lt;br /&gt;
&lt;br /&gt;
Sometimes, an event is initiated from an external source. A class receives the event, but it may not handle the event. These events should be handled by classes representing one of the following choices:&lt;br /&gt;
* A class that represents the ''overall system'', device, or subsystem (facade controller).&lt;br /&gt;
* A class that represents a ''use case scenario'' within which the system event occurs. These are often named &amp;lt;usecasename&amp;gt;Handler, &amp;lt;usecasename&amp;gt;Controller, &amp;lt;usecasename&amp;gt;Manager,and so forth.&lt;br /&gt;
&lt;br /&gt;
          o  To choose between facade and use-case controllers:&lt;br /&gt;
                + The ''Facade controller'' is suitable when there are few system events.&lt;br /&gt;
                + The ''Use-case controller'' is applicable when there are many system events and the facade controller would have become too large and incohesive.&lt;br /&gt;
&lt;br /&gt;
Wikipedia succinctly states: ''&amp;quot;The [http://en.wikipedia.org/wiki/GRASP_(Object_Oriented_Design) Controller] pattern assigns the responsibility of dealing with system events to a non-UI class that represent the overall system or a use case scenario. A use case controller should be used to deal with all system events of a use case, and may be used for more than one use case (for instance, for use cases Create User and Delete User, one can have one UserController, instead of two separate use case controllers)&amp;quot;''&lt;br /&gt;
&lt;br /&gt;
==Benefits==&lt;br /&gt;
&lt;br /&gt;
*''Reuse'' of domain layer software by plugging in various interfaces&lt;br /&gt;
*It is possible to ''control'' out-of-sequence system events&lt;br /&gt;
&lt;br /&gt;
=Examples=&lt;br /&gt;
&lt;br /&gt;
==Description1==&lt;br /&gt;
&lt;br /&gt;
[http://www.augustana.ab.ca/~mohrj/courses/2003.fall/csc220/lecture_notes/responsibilities.html Reference 1] contains an excellent description of the controller pattern. &lt;br /&gt;
&lt;br /&gt;
  The controller is &amp;quot;A non-user interface object responsible for receiving or handling a system event, and that defines the method &lt;br /&gt;
  for the system operation&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
*A system event is said to be an event generated by an &amp;quot;external actor&amp;quot;&lt;br /&gt;
&lt;br /&gt;
*A system operation refers to the response of the system to a system event. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The website also contains a diagram showing the general context of the Controller, depicted below. (INCLUDE DIAGRAM HERE)&lt;br /&gt;
&lt;br /&gt;
******Should we format it as Desc/Example or separate them ?&lt;br /&gt;
&lt;br /&gt;
==Description2==&lt;br /&gt;
This article contains an [http://www.davidhayden.com/blog/dave/archive/2004/12/10/680.aspx E-Commerce example] of the Controller Pattern. The author classifies controllers as '''Use case Controllers''' and '''Facade Controllers'''. &lt;br /&gt;
&lt;br /&gt;
Use case controllers are useful to handle messages from the User Interface Layer  when there is little coupling between messages. A facade controller to handle all messages will not suffice in this case. &lt;br /&gt;
&lt;br /&gt;
The E-Commerce application in the example considers the following messages:&lt;br /&gt;
&lt;br /&gt;
    Get Categories&lt;br /&gt;
    Get Product in Category X&lt;br /&gt;
    Get Items in Shopping Cart&lt;br /&gt;
    Add Item to Shopping Cart&lt;br /&gt;
&lt;br /&gt;
The first 2 messages are related to a ProductCatalog to ProductCatalogHandler and the last 2 messages are related to the shopper's cart to ShoppingCartHandler:&lt;br /&gt;
&lt;br /&gt;
    ProductCatalogHandler&lt;br /&gt;
          -Get Categories&lt;br /&gt;
          -Get Product in Category X&lt;br /&gt;
    ShoppingCartHandler&lt;br /&gt;
          -Get Items in Shopping Cart&lt;br /&gt;
          -Add Item to Shopping Cart&lt;br /&gt;
&lt;br /&gt;
ProductCatalogHandler and ShoppingCartHandler are highly cohesive, embodied by the Controller Pattern.&lt;br /&gt;
&lt;br /&gt;
==Description3==&lt;br /&gt;
&lt;br /&gt;
This [http://codebetter.com/blogs/david.hayden/archive/2005/04/08/61648.aspx Blog] mentions some examples of the Controller Pattern in the context of blogs. It demonstrates how the controller class beyond the UI layer &amp;quot;hands off&amp;quot; the message to another domain layer object to act upon the message. &lt;br /&gt;
&lt;br /&gt;
Another related [http://davidhayden.com/blog/dave/archive/2004/11/28/648.aspx article] disambiguates between the Controller Pattern and the [http://en.wikipedia.org/wiki/Model-view-controller Model-View-Controller] Architecture. The author defines the controller as &amp;quot;the first object beyond the UI layer that is responsible for receiving or handling a system operation message&amp;quot;. As entailed above, the controller is the coordinator responsible for delegating work to other objects that actually accomplish the task at hand. &lt;br /&gt;
&lt;br /&gt;
==Description4==&lt;br /&gt;
&lt;br /&gt;
[http://209.85.165.104/search?q=cache:Mgu-Um9Lx1sJ:www.soc.napier.ac.uk/module.php3%3Fop%3Dgetresource%26cloaking%3Dno%26resourceid%3D5938601+controller+pattern+GRASP&amp;amp;hl=en&amp;amp;ct=clnk&amp;amp;cd=15&amp;amp;gl=us  Reference 6] contains the following solution to the problem of who handles the system event: &amp;quot;If a program receives events from external sources other than its graphical interface, add an event class to decouple the event source(s) from the objects that actually handle the events.&amp;quot; &lt;br /&gt;
&lt;br /&gt;
The author also mentions the benefits of using the Controller Pattern as an increased potential for reuse. It leads to decoupling &lt;br /&gt;
between the external sources of events and the internal event handlers.&lt;br /&gt;
&lt;br /&gt;
Consider the example of buying items at a supermarket. The cashier enters the items to be purchased and generates a bill for the customer to make the payment at the end of the sale. The system events include:&lt;br /&gt;
&lt;br /&gt;
  ''enterItem()''&lt;br /&gt;
  ''endSale()''&lt;br /&gt;
  ''makePayment()''&lt;br /&gt;
&lt;br /&gt;
The problem can be phrased as: Who is responsible for ''enterItem()''?&lt;br /&gt;
&lt;br /&gt;
Using the Controller Pattern to solve our problem, we can choose among the following: &lt;br /&gt;
&lt;br /&gt;
*The overall system [POST]&lt;br /&gt;
*The overall business(sub-system) [STORE]&lt;br /&gt;
*Someone in the real world who is active in the task [CASHIER]&lt;br /&gt;
*The artificial handler of all system events in the use case [BuyItemsHandler]&lt;br /&gt;
&lt;br /&gt;
[[Image:http://pg.ece.ncsu.edu/mediawiki/index.php/Image:Controller_Choice.jpeg]]&lt;br /&gt;
&lt;br /&gt;
The choice made should reflect high cohesion and low coupling, as shown below, in which the UI layer is decoupled from the problem domain.&lt;br /&gt;
&lt;br /&gt;
[[Image:Example.jpg]]&lt;br /&gt;
&lt;br /&gt;
=Issues that are important in learning about this topic=&lt;br /&gt;
&lt;br /&gt;
=See Also=&lt;br /&gt;
&lt;br /&gt;
Applying UML and Patterns: Craig Larman&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=References=&lt;br /&gt;
&lt;br /&gt;
1. [http://www.augustana.ab.ca/~mohrj/courses/2003.fall/csc220/lecture_notes/responsibilities.html GRASP Patterns]&lt;br /&gt;
&lt;br /&gt;
2. [http://en.wikipedia.org/wiki/GRASP_(Object_Oriented_Design) Wikipedia link to GRASP]&lt;br /&gt;
&lt;br /&gt;
3. [http://codebetter.com/blogs/david.hayden/archive/2005/04/08/61648.aspx Blog on GRASP Controller Pattern]&lt;br /&gt;
&lt;br /&gt;
4. [http://www.davidhayden.com/blog/dave/archive/2004/12/10/680.aspx E-Commerce example]&lt;br /&gt;
&lt;br /&gt;
5. [http://class.ee.iastate.edu/berleant/home/Courses/SoftwareEngineering/CprE486fall2004/GRASP.pdf Controller responsibility]&lt;br /&gt;
&lt;br /&gt;
6. [http://209.85.165.104/search?q=cache:Mgu-Um9Lx1sJ:www.soc.napier.ac.uk/module.php3%3Fop%3Dgetresource%26cloaking%3Dno%26resourceid%3D5938601+controller+pattern+GRASP&amp;amp;hl=en&amp;amp;ct=clnk&amp;amp;cd=15&amp;amp;gl=us Presentation on GRASP]&lt;br /&gt;
&lt;br /&gt;
7. [http://www.informit.com/content/images/0130925691/samplechapter/0130925691.pdf DESIGN MODEL: USE-CASE REALIZATIONS WITH GRASP PATTERNS]&lt;br /&gt;
&lt;br /&gt;
8. [http://www.dcs.bbk.ac.uk/~niki/lecture5.ppt Presentation on Design Patterns]&lt;/div&gt;</summary>
		<author><name>Nnmodak</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Controller.JPG&amp;diff=8669</id>
		<title>File:Controller.JPG</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Controller.JPG&amp;diff=8669"/>
		<updated>2007-11-17T14:10:10Z</updated>

		<summary type="html">&lt;p&gt;Nnmodak: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Nnmodak</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2007/wiki2_4_np&amp;diff=8081</id>
		<title>CSC/ECE 517 Fall 2007/wiki2 4 np</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2007/wiki2_4_np&amp;diff=8081"/>
		<updated>2007-10-29T21:46:15Z</updated>

		<summary type="html">&lt;p&gt;Nnmodak: /* References on the Web */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''Use cases. There are even more pages on the Web on use cases than on MVC. If someone wants to learn about them, what should (s)he do? Look at the first few hits in Google? I expect we can do better than that. Write a review of the use-case sites on the Web. Which are best for learning about the concept? Which have the most instructive examples? Which teach advanced concepts that are not apparent in perusing most use-case sites? Read at least several dozen pages before deciding how to organize your overview''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== '''What are use cases''' ==&lt;br /&gt;
&lt;br /&gt;
A use case is a technique used in software and systems engineering to capture the functional requirements of a system.&lt;br /&gt;
&lt;br /&gt;
They describe in a sequence of steps,the interaction between the initiator of the interaction—and the system itself.&lt;br /&gt;
The initiator of the interaction is called as Actor. Actors can be end users,hardware devices or other systems,basically someone who takes part in the series of activities in a system.&lt;br /&gt;
&lt;br /&gt;
Each use case is a complete series of events, from the point of view of the actor.One or more scenarios may be generated from each use case, corresponding to the detail of each possible way of achieving that goal.&lt;br /&gt;
&lt;br /&gt;
There are numerous websites and resources on the topic of “Use cases”. We attempt to provide a guide to most useful ones among them. The rest of this page provides links to websites which provide more in depth information describing the use of use cases,use cases templates, examples, and advanced concepts , along with reviews of those sites.&lt;br /&gt;
&lt;br /&gt;
The links are grouped as per the topics which will make it easy to find a related site.Within the group We have compared these on the basis of following criteria:&lt;br /&gt;
&lt;br /&gt;
Level: beginner / intermediate / advanced&lt;br /&gt;
&lt;br /&gt;
Content: short / medium / long&lt;br /&gt;
&lt;br /&gt;
== '''Introduction''' ==&lt;br /&gt;
&lt;br /&gt;
These are introductory tutorials explaining the basics of use cases. Most of them are short and priliminary. &lt;br /&gt;
&lt;br /&gt;
===Beginner===&lt;br /&gt;
&lt;br /&gt;
•	http://www.cragsystems.com/SFRWUC/index.htm&lt;br /&gt;
&lt;br /&gt;
*Level: beginner           &lt;br /&gt;
*Content: long&lt;br /&gt;
&lt;br /&gt;
This is a web-based tutorial that introduces beginners to use cases. It clearly illustrates with appropriate examples the concepts related to use cases. It further describes application of use cases in documenting functional requirements. It also has a short &lt;br /&gt;
quiz, a test and an exercise at the end. Excellent navigation is a plus.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
•	http://www.csc.calpoly.edu/~dbutler/tutorials/winter96/use/&lt;br /&gt;
&lt;br /&gt;
*Level: beginner           &lt;br /&gt;
*Content: short&lt;br /&gt;
&lt;br /&gt;
This short tutorial discusses how use-cases fit into the framework of user-centered analysis. It gives a sample use case of ATM cash withdrawal. It also describes the role of use cases in design and testing phase.&lt;br /&gt;
&lt;br /&gt;
===Beginner /intermediate===&lt;br /&gt;
&lt;br /&gt;
•	http://en.wikipedia.org/wiki/Use_case&lt;br /&gt;
&lt;br /&gt;
*Level: beginner / intermediate         &lt;br /&gt;
*Content: medium&lt;br /&gt;
&lt;br /&gt;
This wiki provides an introduction to use case concepts in very simple terms, so seems to be a good starting point for early beginners. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
•	http://www.parlezuml.com/tutorials/usecases/usecases_intro.pdf&lt;br /&gt;
&lt;br /&gt;
•	http://parlezuml.com/tutorials/usecases/usecases.pdf&lt;br /&gt;
&lt;br /&gt;
*Level: beginner / intermediate         &lt;br /&gt;
*Content: short&lt;br /&gt;
&lt;br /&gt;
These are very short and simple tutorials by Jason Gorman that explain the basics of use cases. Apart from use cases, the author covers the related concepts such as actors, system, scenarios. He also explains special use cases: &amp;lt;&amp;lt;extend&amp;gt;&amp;gt; and &amp;lt;&amp;lt;include&amp;gt;&amp;gt; and provides a brief explanation of how use cases can be part of agile development process.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
•	http://www.bredemeyer.com/use_cases.htm&lt;br /&gt;
&lt;br /&gt;
*Level: beginner / intermediate         &lt;br /&gt;
*Content: short&lt;br /&gt;
&lt;br /&gt;
This is a one-page document illustrating how use cases can be effective means to gather functional requirements. It provides valuable pointers to other use-case resources. Though short, it is quite informative for new learners.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
•	http://alistair.cockburn.us/index.php/Use_case_fundamentals&lt;br /&gt;
&lt;br /&gt;
*Level: beginner / intermediate         &lt;br /&gt;
*Content: short&lt;br /&gt;
&lt;br /&gt;
This is a good website which deals with the scope of use cases..It provides a&lt;br /&gt;
brief description of use cases and actors along with analysis of use case reports.It &lt;br /&gt;
also describes steps involved in validation of use cases.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
•	http://courses.softlab.ntua.gr/softeng/Tutorials/UML-Use-Cases.pdf&lt;br /&gt;
&lt;br /&gt;
*Level: beginner / intermediate         &lt;br /&gt;
*Content: medium&lt;br /&gt;
&lt;br /&gt;
This presentation offers succinct definitions for various terms related to use cases, also provides notational guide for documenting use case diagrams. It explains how to build scenarios ( flow of events in a use case).&lt;br /&gt;
&lt;br /&gt;
===Advanced===&lt;br /&gt;
&lt;br /&gt;
•	http://alistair.cockburn.us/index.php/Structuring_use_cases_with_goals&lt;br /&gt;
&lt;br /&gt;
*Level: intermediate / advanced         &lt;br /&gt;
*Content: long&lt;br /&gt;
&lt;br /&gt;
Here is a great guide to use cases by Alistair Cockburn, a renowned strategist and one of the leaders of agile movement. Though the article quite reader-friendly, it expects the reader to be familiar with at least the basic concepts. It offers brief descriptions of terms involved and analysis of use case reports.&lt;br /&gt;
&lt;br /&gt;
== '''How to write use cases''' ==&lt;br /&gt;
&lt;br /&gt;
Writing use cases are not confined to drawing use case diagram. Rather, a written use case is a brief but complete text description of every identified use case (functionality) of the system identified. Some of the instructive articles on this topic are as follows&lt;br /&gt;
&lt;br /&gt;
===Beginner===&lt;br /&gt;
&lt;br /&gt;
•	http://infogenium.typepad.com/inside_infogenium/2007/07/getting-started.html&lt;br /&gt;
&lt;br /&gt;
*Level: beginner&lt;br /&gt;
*Content: short&lt;br /&gt;
&lt;br /&gt;
Here is a short tutorial for developers that are intimidated by the requirement documentation phase using the use cases. It explains the steps involved in capturing the requirements, introduces the concept of use-case brief. It illustrates the concepts with a file attachment example.&lt;br /&gt;
&lt;br /&gt;
===Intermediate===&lt;br /&gt;
&lt;br /&gt;
•	http://www.informit.com/articles/article.aspx?p=30084&amp;amp;seqNum=8&amp;amp;rl=1&lt;br /&gt;
&lt;br /&gt;
*Level: intermediate&lt;br /&gt;
*Content: medium&lt;br /&gt;
&lt;br /&gt;
Here is an article that clearly distinguishes between a good use case and a bad use case. It gives an example of course registration for students and then explains writing the use case descriptions. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
•	http://www.answers.com/topic/use-case?cat=technology&lt;br /&gt;
&lt;br /&gt;
*Level: intermediate&lt;br /&gt;
*Content: long&lt;br /&gt;
 &lt;br /&gt;
This is a comprehensive article that starts off with an overview of use cases and provides an excellent reference for how to write use cases. It also comments on various types of use-cases based on the functionality (business/system) or degree of detail (brief / casual / fully dressed).  It elaborates on various sections of use case description.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Writing effective use cases ===&lt;br /&gt;
&lt;br /&gt;
•	http://www.gatherspace.com/static/use_case_example.html&lt;br /&gt;
&lt;br /&gt;
*Level: intermediate / advanced &lt;br /&gt;
*Content: long&lt;br /&gt;
 &lt;br /&gt;
Explains the art of writing effective use cases by considering an example of writing use cases for a mock Ebay site. The practical nature of the example makes it an interesting exercise. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
•	http://alistair.cockburn.us/index.php/Sampler_of_good_%26_bad_use_cases&lt;br /&gt;
&lt;br /&gt;
*Level: intermediate / advanced &lt;br /&gt;
*Content: short&lt;br /&gt;
&lt;br /&gt;
The above link provides some sample good and bad use cases. These can act as Dos and Don'ts for developers.&lt;br /&gt;
&lt;br /&gt;
== '''Format/Template of use cases''' ==&lt;br /&gt;
It's useful to have a template for use case so that there are less chances of missing out on anything.&lt;br /&gt;
&lt;br /&gt;
•	http://alistair.cockburn.us/index.php/Basic_use_case_template&lt;br /&gt;
&lt;br /&gt;
An excellent link which shows how to structure use cases. Provides different use case templates.&lt;br /&gt;
&lt;br /&gt;
== '''Use case diagrams''' ==&lt;br /&gt;
&lt;br /&gt;
Pictorial representation of the use case is depicted using use case diagrams. Here are the links to use case diagram tutorials.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
•	http://en.wikipedia.org/wiki/Use_case_diagram&lt;br /&gt;
&lt;br /&gt;
*Level: basic /intermediate&lt;br /&gt;
*Content: medium&lt;br /&gt;
&lt;br /&gt;
This wiki link contains representation of use case generalization along with the notations for use case relationships like extend include.&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
•	http://www.agilemodeling.com/artifacts/useCaseDiagram.htm&lt;br /&gt;
&lt;br /&gt;
•       http://www.andrew.cmu.edu/course/90-754/umlucdfaq.html#uses&lt;br /&gt;
&lt;br /&gt;
*Level: intermediate&lt;br /&gt;
*Content: medium&lt;br /&gt;
&lt;br /&gt;
The above links cover creation and understanding of Use Case Diagrams&lt;br /&gt;
&lt;br /&gt;
== '''Examples'''== &lt;br /&gt;
&lt;br /&gt;
===Beginner===&lt;br /&gt;
&lt;br /&gt;
• http://www.objectmentor.com/resources/articles/usecases.pdf &lt;br /&gt;
&lt;br /&gt;
*	Level : Beginner&lt;br /&gt;
*	Content :Short&lt;br /&gt;
&lt;br /&gt;
This provides a simple example and explains use cases with use case diagrams for some of the functionalities. &lt;br /&gt;
&lt;br /&gt;
• http://www.w3.org/2002/06/ws-example &lt;br /&gt;
&lt;br /&gt;
*	Level : Beginner&lt;br /&gt;
*	Content : Short &lt;br /&gt;
&lt;br /&gt;
This is a comprehensive example.It takes up a travel reservation system and attempts to explain different scenarios like checking availability of tickets,booking flights and hotels.It explains with great detail each scenario.&lt;br /&gt;
&lt;br /&gt;
• http://www.agilemodeling.com/essays/useCaseReuse.htm &lt;br /&gt;
&lt;br /&gt;
*	Level : Beginner&lt;br /&gt;
*	Content : Short &lt;br /&gt;
&lt;br /&gt;
This is example taking up only one scenario ”Enroll in University” uses narrative style of writing a use case.&lt;br /&gt;
&lt;br /&gt;
===Beginner/ Intermediate===&lt;br /&gt;
• http://www.soi.wide.ad.jp/class/20040034/slides/07/9.html &lt;br /&gt;
&lt;br /&gt;
*	Level :Beginner/Intermediate&lt;br /&gt;
*	Content : Long&lt;br /&gt;
&lt;br /&gt;
This is an excellent presentation which takes up a real-life ‘elevator’ example and provides multiple use-case descriptions for use cases.Since it relates to the real world it is easy for beginners to understand. &lt;br /&gt;
&lt;br /&gt;
• http://www.cs.colorado.edu/~kena/classes/6448/s05/reference/usecases/examples.html &lt;br /&gt;
&lt;br /&gt;
*	Level :Beginner/Intermediate&lt;br /&gt;
*	Content : Short&lt;br /&gt;
&lt;br /&gt;
This is a one-page guide that illustrates the use case briefs, user-level and summary level use case given the actor-goal list and narrative of the system from the user. &lt;br /&gt;
&lt;br /&gt;
• http://courses.softlab.ntua.gr/softeng/Tutorials/UML-Use-Cases.pdf &lt;br /&gt;
&lt;br /&gt;
*	Level : Beginner/Intermediate&lt;br /&gt;
*	Content : Medium&lt;br /&gt;
&lt;br /&gt;
This is an excellent example describing how to write use cases for different scenarios in a system. It takes up a courseware example breaking down different scenarios and explaining use cases.&lt;br /&gt;
&lt;br /&gt;
===Advanced===&lt;br /&gt;
• http://www.se.cuhk.edu.hk/~seg3430/2007/tutorial/tutorial04.pdf &lt;br /&gt;
&lt;br /&gt;
*	Level : Intermediate/Advanced&lt;br /&gt;
*	Content : Long&lt;br /&gt;
&lt;br /&gt;
Though quite long, this link describes use cases for a credit card payment service.&lt;br /&gt;
&lt;br /&gt;
== '''Advanced Concepts''' ==&lt;br /&gt;
&lt;br /&gt;
'''Pluggable use cases''':&lt;br /&gt;
&lt;br /&gt;
http://alistair.cockburn.us/index.php/Pluggable_use_cases&lt;br /&gt;
&lt;br /&gt;
This introduces readers to concept of Pluggable use cases. &lt;br /&gt;
&lt;br /&gt;
'''Essential use-cases''':&lt;br /&gt;
&lt;br /&gt;
http://www.agilemodeling.com/artifacts/essentialUseCase.htm&lt;br /&gt;
&lt;br /&gt;
Essential use-case can be thought of as a less verbose and more succint version of the use case description. This document compares the traditional use case to essential use case.&lt;br /&gt;
&lt;br /&gt;
'''Future direction:'''&lt;br /&gt;
&lt;br /&gt;
http://alistair.cockburn.us/index.php/Use_cases%2C_ten_years_later&lt;br /&gt;
&lt;br /&gt;
This article predicts the direction of future research in the field of use cases.&lt;br /&gt;
&lt;br /&gt;
== '''Tools''' ==&lt;br /&gt;
&lt;br /&gt;
'''Rational Rose:''' &lt;br /&gt;
&lt;br /&gt;
One of the most popular tool for use-case driven development.&lt;br /&gt;
&lt;br /&gt;
http://www-306.ibm.com/software/awdtools/developer/rose/index.html&lt;br /&gt;
&lt;br /&gt;
'''Sun Java Studio Enterprise:''' &lt;br /&gt;
&lt;br /&gt;
Sun Java Studio Enterprise offers a UML tool. &lt;br /&gt;
&lt;br /&gt;
http://developers.sun.com/jsenterprise/&lt;br /&gt;
&lt;br /&gt;
'''Visual case:''' &lt;br /&gt;
&lt;br /&gt;
UML &amp;amp; E/R Database Design Tool&lt;br /&gt;
&lt;br /&gt;
http://www.visualcase.com/&lt;br /&gt;
&lt;br /&gt;
== '''Quick references''' ==&lt;br /&gt;
&lt;br /&gt;
Some quick references for studying use cases&lt;br /&gt;
&lt;br /&gt;
•	http://www.oreilly.com.cn/samplechap/uml20inanutshell/UML20-ch07.pdf&lt;br /&gt;
&lt;br /&gt;
•	http://www.cs.rit.edu/~jaa/CS4/Lectures/UseCase.PDF&lt;br /&gt;
&lt;br /&gt;
•	http://www.alagad.com/go/blog-entry/uml-use-case-diagrams&lt;br /&gt;
&lt;br /&gt;
•	http://www.cs.nmsu.edu/~jeffery/courses/371/lecture.html&lt;br /&gt;
&lt;br /&gt;
== '''Good Tutorials''' ==&lt;br /&gt;
&lt;br /&gt;
•	http://www.parlezuml.com/tutorials/usecases/usecases.pdf&lt;br /&gt;
&lt;br /&gt;
•	http://www.readysetpro.com/whitepapers/usecasetut.html &lt;br /&gt;
&lt;br /&gt;
Two very easy and informative tutorials for beginners who are not familiar with use cases. Both the tutorials contain some very good and simple examples coupled with easily understandable pictures. The first tutorial focuses on use case driven development and UML diagrams while the second deals with writing effective use cases.&lt;br /&gt;
&lt;br /&gt;
== '''Presentations Online''' ==&lt;br /&gt;
&lt;br /&gt;
•	https://users.cs.jmu.edu/bernstdh/web/common/lectures/slides_use-cases.php&lt;br /&gt;
&lt;br /&gt;
This presentation describes writing use cases along with constructing use case diagrams&lt;br /&gt;
&lt;br /&gt;
•	http://www-rohan.sdsu.edu/faculty/rnorman/course/ids306/Lect_c4.ppt&lt;br /&gt;
&lt;br /&gt;
This is a very good presentation that explains the concepts with familiar real life examples.&lt;br /&gt;
&lt;br /&gt;
•	http://www.cragsystems.com/SFRWUC/index.htm&lt;br /&gt;
&lt;br /&gt;
This web-based tutorial describes creating a Use Case Model of the functional requirements for a computer system.&lt;br /&gt;
&lt;br /&gt;
== '''Books''' ==&lt;br /&gt;
&lt;br /&gt;
Following are good books for learning use cases&lt;br /&gt;
&lt;br /&gt;
[[http://www.amazon.com/Writing-Effective-Cases-Alistair-Cockburn/dp/0201702258 Writing Effective Use Cases by Alistair Cockburn ]]&lt;br /&gt;
&lt;br /&gt;
[[http://www.amazon.com/Object-Oriented-Software-Engineering-Driven-Approach/dp/0201544350 Object-Oriented Software Engineering: A Use Case Driven Approach by Ivar Jacobson ]]&lt;br /&gt;
&lt;br /&gt;
== '''References on the Web''' ==&lt;br /&gt;
&lt;br /&gt;
===Books:===&lt;br /&gt;
&lt;br /&gt;
1.	Jocabson, Ivar. Basic Use-Case modeling, Report on Object Analysis and Design, 1(2): 15-19, 1994 &lt;br /&gt;
&lt;br /&gt;
2.	Jocabson, Ivar. Baisc Use-Case Modeling (Continued), Report on Object Analysis and Design, 1(3): 7-9, 1994 &lt;br /&gt;
&lt;br /&gt;
3.	Rumbaugh, James. Journal of Object-Oriented Programming: 8-12, 23, Sept. 1994&lt;br /&gt;
&lt;br /&gt;
===Online Resources:===&lt;br /&gt;
&lt;br /&gt;
Alistair Cockburn Home Page: http://alistair.cockburn.us/index.php/Main_Page&lt;br /&gt;
&lt;br /&gt;
Tutorial links: http://www.answers.com/topic/use-case?cat=technology&lt;br /&gt;
&lt;br /&gt;
All the links mentioned in the review.&lt;/div&gt;</summary>
		<author><name>Nnmodak</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2007/wiki2_4_np&amp;diff=8080</id>
		<title>CSC/ECE 517 Fall 2007/wiki2 4 np</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2007/wiki2_4_np&amp;diff=8080"/>
		<updated>2007-10-29T21:45:28Z</updated>

		<summary type="html">&lt;p&gt;Nnmodak: /* Books */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''Use cases. There are even more pages on the Web on use cases than on MVC. If someone wants to learn about them, what should (s)he do? Look at the first few hits in Google? I expect we can do better than that. Write a review of the use-case sites on the Web. Which are best for learning about the concept? Which have the most instructive examples? Which teach advanced concepts that are not apparent in perusing most use-case sites? Read at least several dozen pages before deciding how to organize your overview''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== '''What are use cases''' ==&lt;br /&gt;
&lt;br /&gt;
A use case is a technique used in software and systems engineering to capture the functional requirements of a system.&lt;br /&gt;
&lt;br /&gt;
They describe in a sequence of steps,the interaction between the initiator of the interaction—and the system itself.&lt;br /&gt;
The initiator of the interaction is called as Actor. Actors can be end users,hardware devices or other systems,basically someone who takes part in the series of activities in a system.&lt;br /&gt;
&lt;br /&gt;
Each use case is a complete series of events, from the point of view of the actor.One or more scenarios may be generated from each use case, corresponding to the detail of each possible way of achieving that goal.&lt;br /&gt;
&lt;br /&gt;
There are numerous websites and resources on the topic of “Use cases”. We attempt to provide a guide to most useful ones among them. The rest of this page provides links to websites which provide more in depth information describing the use of use cases,use cases templates, examples, and advanced concepts , along with reviews of those sites.&lt;br /&gt;
&lt;br /&gt;
The links are grouped as per the topics which will make it easy to find a related site.Within the group We have compared these on the basis of following criteria:&lt;br /&gt;
&lt;br /&gt;
Level: beginner / intermediate / advanced&lt;br /&gt;
&lt;br /&gt;
Content: short / medium / long&lt;br /&gt;
&lt;br /&gt;
== '''Introduction''' ==&lt;br /&gt;
&lt;br /&gt;
These are introductory tutorials explaining the basics of use cases. Most of them are short and priliminary. &lt;br /&gt;
&lt;br /&gt;
===Beginner===&lt;br /&gt;
&lt;br /&gt;
•	http://www.cragsystems.com/SFRWUC/index.htm&lt;br /&gt;
&lt;br /&gt;
*Level: beginner           &lt;br /&gt;
*Content: long&lt;br /&gt;
&lt;br /&gt;
This is a web-based tutorial that introduces beginners to use cases. It clearly illustrates with appropriate examples the concepts related to use cases. It further describes application of use cases in documenting functional requirements. It also has a short &lt;br /&gt;
quiz, a test and an exercise at the end. Excellent navigation is a plus.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
•	http://www.csc.calpoly.edu/~dbutler/tutorials/winter96/use/&lt;br /&gt;
&lt;br /&gt;
*Level: beginner           &lt;br /&gt;
*Content: short&lt;br /&gt;
&lt;br /&gt;
This short tutorial discusses how use-cases fit into the framework of user-centered analysis. It gives a sample use case of ATM cash withdrawal. It also describes the role of use cases in design and testing phase.&lt;br /&gt;
&lt;br /&gt;
===Beginner /intermediate===&lt;br /&gt;
&lt;br /&gt;
•	http://en.wikipedia.org/wiki/Use_case&lt;br /&gt;
&lt;br /&gt;
*Level: beginner / intermediate         &lt;br /&gt;
*Content: medium&lt;br /&gt;
&lt;br /&gt;
This wiki provides an introduction to use case concepts in very simple terms, so seems to be a good starting point for early beginners. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
•	http://www.parlezuml.com/tutorials/usecases/usecases_intro.pdf&lt;br /&gt;
&lt;br /&gt;
•	http://parlezuml.com/tutorials/usecases/usecases.pdf&lt;br /&gt;
&lt;br /&gt;
*Level: beginner / intermediate         &lt;br /&gt;
*Content: short&lt;br /&gt;
&lt;br /&gt;
These are very short and simple tutorials by Jason Gorman that explain the basics of use cases. Apart from use cases, the author covers the related concepts such as actors, system, scenarios. He also explains special use cases: &amp;lt;&amp;lt;extend&amp;gt;&amp;gt; and &amp;lt;&amp;lt;include&amp;gt;&amp;gt; and provides a brief explanation of how use cases can be part of agile development process.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
•	http://www.bredemeyer.com/use_cases.htm&lt;br /&gt;
&lt;br /&gt;
*Level: beginner / intermediate         &lt;br /&gt;
*Content: short&lt;br /&gt;
&lt;br /&gt;
This is a one-page document illustrating how use cases can be effective means to gather functional requirements. It provides valuable pointers to other use-case resources. Though short, it is quite informative for new learners.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
•	http://alistair.cockburn.us/index.php/Use_case_fundamentals&lt;br /&gt;
&lt;br /&gt;
*Level: beginner / intermediate         &lt;br /&gt;
*Content: short&lt;br /&gt;
&lt;br /&gt;
This is a good website which deals with the scope of use cases..It provides a&lt;br /&gt;
brief description of use cases and actors along with analysis of use case reports.It &lt;br /&gt;
also describes steps involved in validation of use cases.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
•	http://courses.softlab.ntua.gr/softeng/Tutorials/UML-Use-Cases.pdf&lt;br /&gt;
&lt;br /&gt;
*Level: beginner / intermediate         &lt;br /&gt;
*Content: medium&lt;br /&gt;
&lt;br /&gt;
This presentation offers succinct definitions for various terms related to use cases, also provides notational guide for documenting use case diagrams. It explains how to build scenarios ( flow of events in a use case).&lt;br /&gt;
&lt;br /&gt;
===Advanced===&lt;br /&gt;
&lt;br /&gt;
•	http://alistair.cockburn.us/index.php/Structuring_use_cases_with_goals&lt;br /&gt;
&lt;br /&gt;
*Level: intermediate / advanced         &lt;br /&gt;
*Content: long&lt;br /&gt;
&lt;br /&gt;
Here is a great guide to use cases by Alistair Cockburn, a renowned strategist and one of the leaders of agile movement. Though the article quite reader-friendly, it expects the reader to be familiar with at least the basic concepts. It offers brief descriptions of terms involved and analysis of use case reports.&lt;br /&gt;
&lt;br /&gt;
== '''How to write use cases''' ==&lt;br /&gt;
&lt;br /&gt;
Writing use cases are not confined to drawing use case diagram. Rather, a written use case is a brief but complete text description of every identified use case (functionality) of the system identified. Some of the instructive articles on this topic are as follows&lt;br /&gt;
&lt;br /&gt;
===Beginner===&lt;br /&gt;
&lt;br /&gt;
•	http://infogenium.typepad.com/inside_infogenium/2007/07/getting-started.html&lt;br /&gt;
&lt;br /&gt;
*Level: beginner&lt;br /&gt;
*Content: short&lt;br /&gt;
&lt;br /&gt;
Here is a short tutorial for developers that are intimidated by the requirement documentation phase using the use cases. It explains the steps involved in capturing the requirements, introduces the concept of use-case brief. It illustrates the concepts with a file attachment example.&lt;br /&gt;
&lt;br /&gt;
===Intermediate===&lt;br /&gt;
&lt;br /&gt;
•	http://www.informit.com/articles/article.aspx?p=30084&amp;amp;seqNum=8&amp;amp;rl=1&lt;br /&gt;
&lt;br /&gt;
*Level: intermediate&lt;br /&gt;
*Content: medium&lt;br /&gt;
&lt;br /&gt;
Here is an article that clearly distinguishes between a good use case and a bad use case. It gives an example of course registration for students and then explains writing the use case descriptions. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
•	http://www.answers.com/topic/use-case?cat=technology&lt;br /&gt;
&lt;br /&gt;
*Level: intermediate&lt;br /&gt;
*Content: long&lt;br /&gt;
 &lt;br /&gt;
This is a comprehensive article that starts off with an overview of use cases and provides an excellent reference for how to write use cases. It also comments on various types of use-cases based on the functionality (business/system) or degree of detail (brief / casual / fully dressed).  It elaborates on various sections of use case description.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Writing effective use cases ===&lt;br /&gt;
&lt;br /&gt;
•	http://www.gatherspace.com/static/use_case_example.html&lt;br /&gt;
&lt;br /&gt;
*Level: intermediate / advanced &lt;br /&gt;
*Content: long&lt;br /&gt;
 &lt;br /&gt;
Explains the art of writing effective use cases by considering an example of writing use cases for a mock Ebay site. The practical nature of the example makes it an interesting exercise. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
•	http://alistair.cockburn.us/index.php/Sampler_of_good_%26_bad_use_cases&lt;br /&gt;
&lt;br /&gt;
*Level: intermediate / advanced &lt;br /&gt;
*Content: short&lt;br /&gt;
&lt;br /&gt;
The above link provides some sample good and bad use cases. These can act as Dos and Don'ts for developers.&lt;br /&gt;
&lt;br /&gt;
== '''Format/Template of use cases''' ==&lt;br /&gt;
It's useful to have a template for use case so that there are less chances of missing out on anything.&lt;br /&gt;
&lt;br /&gt;
•	http://alistair.cockburn.us/index.php/Basic_use_case_template&lt;br /&gt;
&lt;br /&gt;
An excellent link which shows how to structure use cases. Provides different use case templates.&lt;br /&gt;
&lt;br /&gt;
== '''Use case diagrams''' ==&lt;br /&gt;
&lt;br /&gt;
Pictorial representation of the use case is depicted using use case diagrams. Here are the links to use case diagram tutorials.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
•	http://en.wikipedia.org/wiki/Use_case_diagram&lt;br /&gt;
&lt;br /&gt;
*Level: basic /intermediate&lt;br /&gt;
*Content: medium&lt;br /&gt;
&lt;br /&gt;
This wiki link contains representation of use case generalization along with the notations for use case relationships like extend include.&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
•	http://www.agilemodeling.com/artifacts/useCaseDiagram.htm&lt;br /&gt;
&lt;br /&gt;
•       http://www.andrew.cmu.edu/course/90-754/umlucdfaq.html#uses&lt;br /&gt;
&lt;br /&gt;
*Level: intermediate&lt;br /&gt;
*Content: medium&lt;br /&gt;
&lt;br /&gt;
The above links cover creation and understanding of Use Case Diagrams&lt;br /&gt;
&lt;br /&gt;
== '''Examples'''== &lt;br /&gt;
&lt;br /&gt;
===Beginner===&lt;br /&gt;
&lt;br /&gt;
• http://www.objectmentor.com/resources/articles/usecases.pdf &lt;br /&gt;
&lt;br /&gt;
*	Level : Beginner&lt;br /&gt;
*	Content :Short&lt;br /&gt;
&lt;br /&gt;
This provides a simple example and explains use cases with use case diagrams for some of the functionalities. &lt;br /&gt;
&lt;br /&gt;
• http://www.w3.org/2002/06/ws-example &lt;br /&gt;
&lt;br /&gt;
*	Level : Beginner&lt;br /&gt;
*	Content : Short &lt;br /&gt;
&lt;br /&gt;
This is a comprehensive example.It takes up a travel reservation system and attempts to explain different scenarios like checking availability of tickets,booking flights and hotels.It explains with great detail each scenario.&lt;br /&gt;
&lt;br /&gt;
• http://www.agilemodeling.com/essays/useCaseReuse.htm &lt;br /&gt;
&lt;br /&gt;
*	Level : Beginner&lt;br /&gt;
*	Content : Short &lt;br /&gt;
&lt;br /&gt;
This is example taking up only one scenario ”Enroll in University” uses narrative style of writing a use case.&lt;br /&gt;
&lt;br /&gt;
===Beginner/ Intermediate===&lt;br /&gt;
• http://www.soi.wide.ad.jp/class/20040034/slides/07/9.html &lt;br /&gt;
&lt;br /&gt;
*	Level :Beginner/Intermediate&lt;br /&gt;
*	Content : Long&lt;br /&gt;
&lt;br /&gt;
This is an excellent presentation which takes up a real-life ‘elevator’ example and provides multiple use-case descriptions for use cases.Since it relates to the real world it is easy for beginners to understand. &lt;br /&gt;
&lt;br /&gt;
• http://www.cs.colorado.edu/~kena/classes/6448/s05/reference/usecases/examples.html &lt;br /&gt;
&lt;br /&gt;
*	Level :Beginner/Intermediate&lt;br /&gt;
*	Content : Short&lt;br /&gt;
&lt;br /&gt;
This is a one-page guide that illustrates the use case briefs, user-level and summary level use case given the actor-goal list and narrative of the system from the user. &lt;br /&gt;
&lt;br /&gt;
• http://courses.softlab.ntua.gr/softeng/Tutorials/UML-Use-Cases.pdf &lt;br /&gt;
&lt;br /&gt;
*	Level : Beginner/Intermediate&lt;br /&gt;
*	Content : Medium&lt;br /&gt;
&lt;br /&gt;
This is an excellent example describing how to write use cases for different scenarios in a system. It takes up a courseware example breaking down different scenarios and explaining use cases.&lt;br /&gt;
&lt;br /&gt;
===Advanced===&lt;br /&gt;
• http://www.se.cuhk.edu.hk/~seg3430/2007/tutorial/tutorial04.pdf &lt;br /&gt;
&lt;br /&gt;
*	Level : Intermediate/Advanced&lt;br /&gt;
*	Content : Long&lt;br /&gt;
&lt;br /&gt;
Though quite long, this link describes use cases for a credit card payment service.&lt;br /&gt;
&lt;br /&gt;
== '''Advanced Concepts''' ==&lt;br /&gt;
&lt;br /&gt;
'''Pluggable use cases''':&lt;br /&gt;
&lt;br /&gt;
http://alistair.cockburn.us/index.php/Pluggable_use_cases&lt;br /&gt;
&lt;br /&gt;
This introduces readers to concept of Pluggable use cases. &lt;br /&gt;
&lt;br /&gt;
'''Essential use-cases''':&lt;br /&gt;
&lt;br /&gt;
http://www.agilemodeling.com/artifacts/essentialUseCase.htm&lt;br /&gt;
&lt;br /&gt;
Essential use-case can be thought of as a less verbose and more succint version of the use case description. This document compares the traditional use case to essential use case.&lt;br /&gt;
&lt;br /&gt;
'''Future direction:'''&lt;br /&gt;
&lt;br /&gt;
http://alistair.cockburn.us/index.php/Use_cases%2C_ten_years_later&lt;br /&gt;
&lt;br /&gt;
This article predicts the direction of future research in the field of use cases.&lt;br /&gt;
&lt;br /&gt;
== '''Tools''' ==&lt;br /&gt;
&lt;br /&gt;
'''Rational Rose:''' &lt;br /&gt;
&lt;br /&gt;
One of the most popular tool for use-case driven development.&lt;br /&gt;
&lt;br /&gt;
http://www-306.ibm.com/software/awdtools/developer/rose/index.html&lt;br /&gt;
&lt;br /&gt;
'''Sun Java Studio Enterprise:''' &lt;br /&gt;
&lt;br /&gt;
Sun Java Studio Enterprise offers a UML tool. &lt;br /&gt;
&lt;br /&gt;
http://developers.sun.com/jsenterprise/&lt;br /&gt;
&lt;br /&gt;
'''Visual case:''' &lt;br /&gt;
&lt;br /&gt;
UML &amp;amp; E/R Database Design Tool&lt;br /&gt;
&lt;br /&gt;
http://www.visualcase.com/&lt;br /&gt;
&lt;br /&gt;
== '''Quick references''' ==&lt;br /&gt;
&lt;br /&gt;
Some quick references for studying use cases&lt;br /&gt;
&lt;br /&gt;
•	http://www.oreilly.com.cn/samplechap/uml20inanutshell/UML20-ch07.pdf&lt;br /&gt;
&lt;br /&gt;
•	http://www.cs.rit.edu/~jaa/CS4/Lectures/UseCase.PDF&lt;br /&gt;
&lt;br /&gt;
•	http://www.alagad.com/go/blog-entry/uml-use-case-diagrams&lt;br /&gt;
&lt;br /&gt;
•	http://www.cs.nmsu.edu/~jeffery/courses/371/lecture.html&lt;br /&gt;
&lt;br /&gt;
== '''Good Tutorials''' ==&lt;br /&gt;
&lt;br /&gt;
•	http://www.parlezuml.com/tutorials/usecases/usecases.pdf&lt;br /&gt;
&lt;br /&gt;
•	http://www.readysetpro.com/whitepapers/usecasetut.html &lt;br /&gt;
&lt;br /&gt;
Two very easy and informative tutorials for beginners who are not familiar with use cases. Both the tutorials contain some very good and simple examples coupled with easily understandable pictures. The first tutorial focuses on use case driven development and UML diagrams while the second deals with writing effective use cases.&lt;br /&gt;
&lt;br /&gt;
== '''Presentations Online''' ==&lt;br /&gt;
&lt;br /&gt;
•	https://users.cs.jmu.edu/bernstdh/web/common/lectures/slides_use-cases.php&lt;br /&gt;
&lt;br /&gt;
This presentation describes writing use cases along with constructing use case diagrams&lt;br /&gt;
&lt;br /&gt;
•	http://www-rohan.sdsu.edu/faculty/rnorman/course/ids306/Lect_c4.ppt&lt;br /&gt;
&lt;br /&gt;
This is a very good presentation that explains the concepts with familiar real life examples.&lt;br /&gt;
&lt;br /&gt;
•	http://www.cragsystems.com/SFRWUC/index.htm&lt;br /&gt;
&lt;br /&gt;
This web-based tutorial describes creating a Use Case Model of the functional requirements for a computer system.&lt;br /&gt;
&lt;br /&gt;
== '''Books''' ==&lt;br /&gt;
&lt;br /&gt;
Following are good books for learning use cases&lt;br /&gt;
&lt;br /&gt;
[[http://www.amazon.com/Writing-Effective-Cases-Alistair-Cockburn/dp/0201702258 Writing Effective Use Cases by Alistair Cockburn ]]&lt;br /&gt;
&lt;br /&gt;
[[http://www.amazon.com/Object-Oriented-Software-Engineering-Driven-Approach/dp/0201544350 Object-Oriented Software Engineering: A Use Case Driven Approach by Ivar Jacobson ]]&lt;br /&gt;
&lt;br /&gt;
== References on the Web ==&lt;br /&gt;
&lt;br /&gt;
'''Books:'''&lt;br /&gt;
&lt;br /&gt;
1.	Jocabson, Ivar. Basic Use-Case modeling, Report on Object Analysis and Design, 1(2): 15-19, 1994 &lt;br /&gt;
&lt;br /&gt;
2.	Jocabson, Ivar. Baisc Use-Case Modeling (Continued), Report on Object Analysis and Design, 1(3): 7-9, 1994 &lt;br /&gt;
&lt;br /&gt;
3.	Rumbaugh, James. Journal of Object-Oriented Programming: 8-12, 23, Sept. 1994&lt;br /&gt;
&lt;br /&gt;
'''Online Resources:'''&lt;br /&gt;
&lt;br /&gt;
Alistair Cockburn Home Page: http://alistair.cockburn.us/index.php/Main_Page&lt;br /&gt;
&lt;br /&gt;
Tutorial links: http://www.answers.com/topic/use-case?cat=technology&lt;br /&gt;
&lt;br /&gt;
All the links mentioned in the review.&lt;/div&gt;</summary>
		<author><name>Nnmodak</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2007/wiki2_4_np&amp;diff=8079</id>
		<title>CSC/ECE 517 Fall 2007/wiki2 4 np</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2007/wiki2_4_np&amp;diff=8079"/>
		<updated>2007-10-29T21:45:13Z</updated>

		<summary type="html">&lt;p&gt;Nnmodak: /* Presentations Online */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''Use cases. There are even more pages on the Web on use cases than on MVC. If someone wants to learn about them, what should (s)he do? Look at the first few hits in Google? I expect we can do better than that. Write a review of the use-case sites on the Web. Which are best for learning about the concept? Which have the most instructive examples? Which teach advanced concepts that are not apparent in perusing most use-case sites? Read at least several dozen pages before deciding how to organize your overview''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== '''What are use cases''' ==&lt;br /&gt;
&lt;br /&gt;
A use case is a technique used in software and systems engineering to capture the functional requirements of a system.&lt;br /&gt;
&lt;br /&gt;
They describe in a sequence of steps,the interaction between the initiator of the interaction—and the system itself.&lt;br /&gt;
The initiator of the interaction is called as Actor. Actors can be end users,hardware devices or other systems,basically someone who takes part in the series of activities in a system.&lt;br /&gt;
&lt;br /&gt;
Each use case is a complete series of events, from the point of view of the actor.One or more scenarios may be generated from each use case, corresponding to the detail of each possible way of achieving that goal.&lt;br /&gt;
&lt;br /&gt;
There are numerous websites and resources on the topic of “Use cases”. We attempt to provide a guide to most useful ones among them. The rest of this page provides links to websites which provide more in depth information describing the use of use cases,use cases templates, examples, and advanced concepts , along with reviews of those sites.&lt;br /&gt;
&lt;br /&gt;
The links are grouped as per the topics which will make it easy to find a related site.Within the group We have compared these on the basis of following criteria:&lt;br /&gt;
&lt;br /&gt;
Level: beginner / intermediate / advanced&lt;br /&gt;
&lt;br /&gt;
Content: short / medium / long&lt;br /&gt;
&lt;br /&gt;
== '''Introduction''' ==&lt;br /&gt;
&lt;br /&gt;
These are introductory tutorials explaining the basics of use cases. Most of them are short and priliminary. &lt;br /&gt;
&lt;br /&gt;
===Beginner===&lt;br /&gt;
&lt;br /&gt;
•	http://www.cragsystems.com/SFRWUC/index.htm&lt;br /&gt;
&lt;br /&gt;
*Level: beginner           &lt;br /&gt;
*Content: long&lt;br /&gt;
&lt;br /&gt;
This is a web-based tutorial that introduces beginners to use cases. It clearly illustrates with appropriate examples the concepts related to use cases. It further describes application of use cases in documenting functional requirements. It also has a short &lt;br /&gt;
quiz, a test and an exercise at the end. Excellent navigation is a plus.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
•	http://www.csc.calpoly.edu/~dbutler/tutorials/winter96/use/&lt;br /&gt;
&lt;br /&gt;
*Level: beginner           &lt;br /&gt;
*Content: short&lt;br /&gt;
&lt;br /&gt;
This short tutorial discusses how use-cases fit into the framework of user-centered analysis. It gives a sample use case of ATM cash withdrawal. It also describes the role of use cases in design and testing phase.&lt;br /&gt;
&lt;br /&gt;
===Beginner /intermediate===&lt;br /&gt;
&lt;br /&gt;
•	http://en.wikipedia.org/wiki/Use_case&lt;br /&gt;
&lt;br /&gt;
*Level: beginner / intermediate         &lt;br /&gt;
*Content: medium&lt;br /&gt;
&lt;br /&gt;
This wiki provides an introduction to use case concepts in very simple terms, so seems to be a good starting point for early beginners. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
•	http://www.parlezuml.com/tutorials/usecases/usecases_intro.pdf&lt;br /&gt;
&lt;br /&gt;
•	http://parlezuml.com/tutorials/usecases/usecases.pdf&lt;br /&gt;
&lt;br /&gt;
*Level: beginner / intermediate         &lt;br /&gt;
*Content: short&lt;br /&gt;
&lt;br /&gt;
These are very short and simple tutorials by Jason Gorman that explain the basics of use cases. Apart from use cases, the author covers the related concepts such as actors, system, scenarios. He also explains special use cases: &amp;lt;&amp;lt;extend&amp;gt;&amp;gt; and &amp;lt;&amp;lt;include&amp;gt;&amp;gt; and provides a brief explanation of how use cases can be part of agile development process.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
•	http://www.bredemeyer.com/use_cases.htm&lt;br /&gt;
&lt;br /&gt;
*Level: beginner / intermediate         &lt;br /&gt;
*Content: short&lt;br /&gt;
&lt;br /&gt;
This is a one-page document illustrating how use cases can be effective means to gather functional requirements. It provides valuable pointers to other use-case resources. Though short, it is quite informative for new learners.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
•	http://alistair.cockburn.us/index.php/Use_case_fundamentals&lt;br /&gt;
&lt;br /&gt;
*Level: beginner / intermediate         &lt;br /&gt;
*Content: short&lt;br /&gt;
&lt;br /&gt;
This is a good website which deals with the scope of use cases..It provides a&lt;br /&gt;
brief description of use cases and actors along with analysis of use case reports.It &lt;br /&gt;
also describes steps involved in validation of use cases.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
•	http://courses.softlab.ntua.gr/softeng/Tutorials/UML-Use-Cases.pdf&lt;br /&gt;
&lt;br /&gt;
*Level: beginner / intermediate         &lt;br /&gt;
*Content: medium&lt;br /&gt;
&lt;br /&gt;
This presentation offers succinct definitions for various terms related to use cases, also provides notational guide for documenting use case diagrams. It explains how to build scenarios ( flow of events in a use case).&lt;br /&gt;
&lt;br /&gt;
===Advanced===&lt;br /&gt;
&lt;br /&gt;
•	http://alistair.cockburn.us/index.php/Structuring_use_cases_with_goals&lt;br /&gt;
&lt;br /&gt;
*Level: intermediate / advanced         &lt;br /&gt;
*Content: long&lt;br /&gt;
&lt;br /&gt;
Here is a great guide to use cases by Alistair Cockburn, a renowned strategist and one of the leaders of agile movement. Though the article quite reader-friendly, it expects the reader to be familiar with at least the basic concepts. It offers brief descriptions of terms involved and analysis of use case reports.&lt;br /&gt;
&lt;br /&gt;
== '''How to write use cases''' ==&lt;br /&gt;
&lt;br /&gt;
Writing use cases are not confined to drawing use case diagram. Rather, a written use case is a brief but complete text description of every identified use case (functionality) of the system identified. Some of the instructive articles on this topic are as follows&lt;br /&gt;
&lt;br /&gt;
===Beginner===&lt;br /&gt;
&lt;br /&gt;
•	http://infogenium.typepad.com/inside_infogenium/2007/07/getting-started.html&lt;br /&gt;
&lt;br /&gt;
*Level: beginner&lt;br /&gt;
*Content: short&lt;br /&gt;
&lt;br /&gt;
Here is a short tutorial for developers that are intimidated by the requirement documentation phase using the use cases. It explains the steps involved in capturing the requirements, introduces the concept of use-case brief. It illustrates the concepts with a file attachment example.&lt;br /&gt;
&lt;br /&gt;
===Intermediate===&lt;br /&gt;
&lt;br /&gt;
•	http://www.informit.com/articles/article.aspx?p=30084&amp;amp;seqNum=8&amp;amp;rl=1&lt;br /&gt;
&lt;br /&gt;
*Level: intermediate&lt;br /&gt;
*Content: medium&lt;br /&gt;
&lt;br /&gt;
Here is an article that clearly distinguishes between a good use case and a bad use case. It gives an example of course registration for students and then explains writing the use case descriptions. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
•	http://www.answers.com/topic/use-case?cat=technology&lt;br /&gt;
&lt;br /&gt;
*Level: intermediate&lt;br /&gt;
*Content: long&lt;br /&gt;
 &lt;br /&gt;
This is a comprehensive article that starts off with an overview of use cases and provides an excellent reference for how to write use cases. It also comments on various types of use-cases based on the functionality (business/system) or degree of detail (brief / casual / fully dressed).  It elaborates on various sections of use case description.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Writing effective use cases ===&lt;br /&gt;
&lt;br /&gt;
•	http://www.gatherspace.com/static/use_case_example.html&lt;br /&gt;
&lt;br /&gt;
*Level: intermediate / advanced &lt;br /&gt;
*Content: long&lt;br /&gt;
 &lt;br /&gt;
Explains the art of writing effective use cases by considering an example of writing use cases for a mock Ebay site. The practical nature of the example makes it an interesting exercise. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
•	http://alistair.cockburn.us/index.php/Sampler_of_good_%26_bad_use_cases&lt;br /&gt;
&lt;br /&gt;
*Level: intermediate / advanced &lt;br /&gt;
*Content: short&lt;br /&gt;
&lt;br /&gt;
The above link provides some sample good and bad use cases. These can act as Dos and Don'ts for developers.&lt;br /&gt;
&lt;br /&gt;
== '''Format/Template of use cases''' ==&lt;br /&gt;
It's useful to have a template for use case so that there are less chances of missing out on anything.&lt;br /&gt;
&lt;br /&gt;
•	http://alistair.cockburn.us/index.php/Basic_use_case_template&lt;br /&gt;
&lt;br /&gt;
An excellent link which shows how to structure use cases. Provides different use case templates.&lt;br /&gt;
&lt;br /&gt;
== '''Use case diagrams''' ==&lt;br /&gt;
&lt;br /&gt;
Pictorial representation of the use case is depicted using use case diagrams. Here are the links to use case diagram tutorials.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
•	http://en.wikipedia.org/wiki/Use_case_diagram&lt;br /&gt;
&lt;br /&gt;
*Level: basic /intermediate&lt;br /&gt;
*Content: medium&lt;br /&gt;
&lt;br /&gt;
This wiki link contains representation of use case generalization along with the notations for use case relationships like extend include.&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
•	http://www.agilemodeling.com/artifacts/useCaseDiagram.htm&lt;br /&gt;
&lt;br /&gt;
•       http://www.andrew.cmu.edu/course/90-754/umlucdfaq.html#uses&lt;br /&gt;
&lt;br /&gt;
*Level: intermediate&lt;br /&gt;
*Content: medium&lt;br /&gt;
&lt;br /&gt;
The above links cover creation and understanding of Use Case Diagrams&lt;br /&gt;
&lt;br /&gt;
== '''Examples'''== &lt;br /&gt;
&lt;br /&gt;
===Beginner===&lt;br /&gt;
&lt;br /&gt;
• http://www.objectmentor.com/resources/articles/usecases.pdf &lt;br /&gt;
&lt;br /&gt;
*	Level : Beginner&lt;br /&gt;
*	Content :Short&lt;br /&gt;
&lt;br /&gt;
This provides a simple example and explains use cases with use case diagrams for some of the functionalities. &lt;br /&gt;
&lt;br /&gt;
• http://www.w3.org/2002/06/ws-example &lt;br /&gt;
&lt;br /&gt;
*	Level : Beginner&lt;br /&gt;
*	Content : Short &lt;br /&gt;
&lt;br /&gt;
This is a comprehensive example.It takes up a travel reservation system and attempts to explain different scenarios like checking availability of tickets,booking flights and hotels.It explains with great detail each scenario.&lt;br /&gt;
&lt;br /&gt;
• http://www.agilemodeling.com/essays/useCaseReuse.htm &lt;br /&gt;
&lt;br /&gt;
*	Level : Beginner&lt;br /&gt;
*	Content : Short &lt;br /&gt;
&lt;br /&gt;
This is example taking up only one scenario ”Enroll in University” uses narrative style of writing a use case.&lt;br /&gt;
&lt;br /&gt;
===Beginner/ Intermediate===&lt;br /&gt;
• http://www.soi.wide.ad.jp/class/20040034/slides/07/9.html &lt;br /&gt;
&lt;br /&gt;
*	Level :Beginner/Intermediate&lt;br /&gt;
*	Content : Long&lt;br /&gt;
&lt;br /&gt;
This is an excellent presentation which takes up a real-life ‘elevator’ example and provides multiple use-case descriptions for use cases.Since it relates to the real world it is easy for beginners to understand. &lt;br /&gt;
&lt;br /&gt;
• http://www.cs.colorado.edu/~kena/classes/6448/s05/reference/usecases/examples.html &lt;br /&gt;
&lt;br /&gt;
*	Level :Beginner/Intermediate&lt;br /&gt;
*	Content : Short&lt;br /&gt;
&lt;br /&gt;
This is a one-page guide that illustrates the use case briefs, user-level and summary level use case given the actor-goal list and narrative of the system from the user. &lt;br /&gt;
&lt;br /&gt;
• http://courses.softlab.ntua.gr/softeng/Tutorials/UML-Use-Cases.pdf &lt;br /&gt;
&lt;br /&gt;
*	Level : Beginner/Intermediate&lt;br /&gt;
*	Content : Medium&lt;br /&gt;
&lt;br /&gt;
This is an excellent example describing how to write use cases for different scenarios in a system. It takes up a courseware example breaking down different scenarios and explaining use cases.&lt;br /&gt;
&lt;br /&gt;
===Advanced===&lt;br /&gt;
• http://www.se.cuhk.edu.hk/~seg3430/2007/tutorial/tutorial04.pdf &lt;br /&gt;
&lt;br /&gt;
*	Level : Intermediate/Advanced&lt;br /&gt;
*	Content : Long&lt;br /&gt;
&lt;br /&gt;
Though quite long, this link describes use cases for a credit card payment service.&lt;br /&gt;
&lt;br /&gt;
== '''Advanced Concepts''' ==&lt;br /&gt;
&lt;br /&gt;
'''Pluggable use cases''':&lt;br /&gt;
&lt;br /&gt;
http://alistair.cockburn.us/index.php/Pluggable_use_cases&lt;br /&gt;
&lt;br /&gt;
This introduces readers to concept of Pluggable use cases. &lt;br /&gt;
&lt;br /&gt;
'''Essential use-cases''':&lt;br /&gt;
&lt;br /&gt;
http://www.agilemodeling.com/artifacts/essentialUseCase.htm&lt;br /&gt;
&lt;br /&gt;
Essential use-case can be thought of as a less verbose and more succint version of the use case description. This document compares the traditional use case to essential use case.&lt;br /&gt;
&lt;br /&gt;
'''Future direction:'''&lt;br /&gt;
&lt;br /&gt;
http://alistair.cockburn.us/index.php/Use_cases%2C_ten_years_later&lt;br /&gt;
&lt;br /&gt;
This article predicts the direction of future research in the field of use cases.&lt;br /&gt;
&lt;br /&gt;
== '''Tools''' ==&lt;br /&gt;
&lt;br /&gt;
'''Rational Rose:''' &lt;br /&gt;
&lt;br /&gt;
One of the most popular tool for use-case driven development.&lt;br /&gt;
&lt;br /&gt;
http://www-306.ibm.com/software/awdtools/developer/rose/index.html&lt;br /&gt;
&lt;br /&gt;
'''Sun Java Studio Enterprise:''' &lt;br /&gt;
&lt;br /&gt;
Sun Java Studio Enterprise offers a UML tool. &lt;br /&gt;
&lt;br /&gt;
http://developers.sun.com/jsenterprise/&lt;br /&gt;
&lt;br /&gt;
'''Visual case:''' &lt;br /&gt;
&lt;br /&gt;
UML &amp;amp; E/R Database Design Tool&lt;br /&gt;
&lt;br /&gt;
http://www.visualcase.com/&lt;br /&gt;
&lt;br /&gt;
== '''Quick references''' ==&lt;br /&gt;
&lt;br /&gt;
Some quick references for studying use cases&lt;br /&gt;
&lt;br /&gt;
•	http://www.oreilly.com.cn/samplechap/uml20inanutshell/UML20-ch07.pdf&lt;br /&gt;
&lt;br /&gt;
•	http://www.cs.rit.edu/~jaa/CS4/Lectures/UseCase.PDF&lt;br /&gt;
&lt;br /&gt;
•	http://www.alagad.com/go/blog-entry/uml-use-case-diagrams&lt;br /&gt;
&lt;br /&gt;
•	http://www.cs.nmsu.edu/~jeffery/courses/371/lecture.html&lt;br /&gt;
&lt;br /&gt;
== '''Good Tutorials''' ==&lt;br /&gt;
&lt;br /&gt;
•	http://www.parlezuml.com/tutorials/usecases/usecases.pdf&lt;br /&gt;
&lt;br /&gt;
•	http://www.readysetpro.com/whitepapers/usecasetut.html &lt;br /&gt;
&lt;br /&gt;
Two very easy and informative tutorials for beginners who are not familiar with use cases. Both the tutorials contain some very good and simple examples coupled with easily understandable pictures. The first tutorial focuses on use case driven development and UML diagrams while the second deals with writing effective use cases.&lt;br /&gt;
&lt;br /&gt;
== '''Presentations Online''' ==&lt;br /&gt;
&lt;br /&gt;
•	https://users.cs.jmu.edu/bernstdh/web/common/lectures/slides_use-cases.php&lt;br /&gt;
&lt;br /&gt;
This presentation describes writing use cases along with constructing use case diagrams&lt;br /&gt;
&lt;br /&gt;
•	http://www-rohan.sdsu.edu/faculty/rnorman/course/ids306/Lect_c4.ppt&lt;br /&gt;
&lt;br /&gt;
This is a very good presentation that explains the concepts with familiar real life examples.&lt;br /&gt;
&lt;br /&gt;
•	http://www.cragsystems.com/SFRWUC/index.htm&lt;br /&gt;
&lt;br /&gt;
This web-based tutorial describes creating a Use Case Model of the functional requirements for a computer system.&lt;br /&gt;
&lt;br /&gt;
== Books ==&lt;br /&gt;
&lt;br /&gt;
Following are good books for learning use cases&lt;br /&gt;
&lt;br /&gt;
[[http://www.amazon.com/Writing-Effective-Cases-Alistair-Cockburn/dp/0201702258 Writing Effective Use Cases by Alistair Cockburn ]]&lt;br /&gt;
&lt;br /&gt;
[[http://www.amazon.com/Object-Oriented-Software-Engineering-Driven-Approach/dp/0201544350 Object-Oriented Software Engineering: A Use Case Driven Approach by Ivar Jacobson ]]&lt;br /&gt;
&lt;br /&gt;
== References on the Web ==&lt;br /&gt;
&lt;br /&gt;
'''Books:'''&lt;br /&gt;
&lt;br /&gt;
1.	Jocabson, Ivar. Basic Use-Case modeling, Report on Object Analysis and Design, 1(2): 15-19, 1994 &lt;br /&gt;
&lt;br /&gt;
2.	Jocabson, Ivar. Baisc Use-Case Modeling (Continued), Report on Object Analysis and Design, 1(3): 7-9, 1994 &lt;br /&gt;
&lt;br /&gt;
3.	Rumbaugh, James. Journal of Object-Oriented Programming: 8-12, 23, Sept. 1994&lt;br /&gt;
&lt;br /&gt;
'''Online Resources:'''&lt;br /&gt;
&lt;br /&gt;
Alistair Cockburn Home Page: http://alistair.cockburn.us/index.php/Main_Page&lt;br /&gt;
&lt;br /&gt;
Tutorial links: http://www.answers.com/topic/use-case?cat=technology&lt;br /&gt;
&lt;br /&gt;
All the links mentioned in the review.&lt;/div&gt;</summary>
		<author><name>Nnmodak</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2007/wiki2_4_np&amp;diff=8078</id>
		<title>CSC/ECE 517 Fall 2007/wiki2 4 np</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2007/wiki2_4_np&amp;diff=8078"/>
		<updated>2007-10-29T21:44:53Z</updated>

		<summary type="html">&lt;p&gt;Nnmodak: /* Good Tutorials */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''Use cases. There are even more pages on the Web on use cases than on MVC. If someone wants to learn about them, what should (s)he do? Look at the first few hits in Google? I expect we can do better than that. Write a review of the use-case sites on the Web. Which are best for learning about the concept? Which have the most instructive examples? Which teach advanced concepts that are not apparent in perusing most use-case sites? Read at least several dozen pages before deciding how to organize your overview''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== '''What are use cases''' ==&lt;br /&gt;
&lt;br /&gt;
A use case is a technique used in software and systems engineering to capture the functional requirements of a system.&lt;br /&gt;
&lt;br /&gt;
They describe in a sequence of steps,the interaction between the initiator of the interaction—and the system itself.&lt;br /&gt;
The initiator of the interaction is called as Actor. Actors can be end users,hardware devices or other systems,basically someone who takes part in the series of activities in a system.&lt;br /&gt;
&lt;br /&gt;
Each use case is a complete series of events, from the point of view of the actor.One or more scenarios may be generated from each use case, corresponding to the detail of each possible way of achieving that goal.&lt;br /&gt;
&lt;br /&gt;
There are numerous websites and resources on the topic of “Use cases”. We attempt to provide a guide to most useful ones among them. The rest of this page provides links to websites which provide more in depth information describing the use of use cases,use cases templates, examples, and advanced concepts , along with reviews of those sites.&lt;br /&gt;
&lt;br /&gt;
The links are grouped as per the topics which will make it easy to find a related site.Within the group We have compared these on the basis of following criteria:&lt;br /&gt;
&lt;br /&gt;
Level: beginner / intermediate / advanced&lt;br /&gt;
&lt;br /&gt;
Content: short / medium / long&lt;br /&gt;
&lt;br /&gt;
== '''Introduction''' ==&lt;br /&gt;
&lt;br /&gt;
These are introductory tutorials explaining the basics of use cases. Most of them are short and priliminary. &lt;br /&gt;
&lt;br /&gt;
===Beginner===&lt;br /&gt;
&lt;br /&gt;
•	http://www.cragsystems.com/SFRWUC/index.htm&lt;br /&gt;
&lt;br /&gt;
*Level: beginner           &lt;br /&gt;
*Content: long&lt;br /&gt;
&lt;br /&gt;
This is a web-based tutorial that introduces beginners to use cases. It clearly illustrates with appropriate examples the concepts related to use cases. It further describes application of use cases in documenting functional requirements. It also has a short &lt;br /&gt;
quiz, a test and an exercise at the end. Excellent navigation is a plus.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
•	http://www.csc.calpoly.edu/~dbutler/tutorials/winter96/use/&lt;br /&gt;
&lt;br /&gt;
*Level: beginner           &lt;br /&gt;
*Content: short&lt;br /&gt;
&lt;br /&gt;
This short tutorial discusses how use-cases fit into the framework of user-centered analysis. It gives a sample use case of ATM cash withdrawal. It also describes the role of use cases in design and testing phase.&lt;br /&gt;
&lt;br /&gt;
===Beginner /intermediate===&lt;br /&gt;
&lt;br /&gt;
•	http://en.wikipedia.org/wiki/Use_case&lt;br /&gt;
&lt;br /&gt;
*Level: beginner / intermediate         &lt;br /&gt;
*Content: medium&lt;br /&gt;
&lt;br /&gt;
This wiki provides an introduction to use case concepts in very simple terms, so seems to be a good starting point for early beginners. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
•	http://www.parlezuml.com/tutorials/usecases/usecases_intro.pdf&lt;br /&gt;
&lt;br /&gt;
•	http://parlezuml.com/tutorials/usecases/usecases.pdf&lt;br /&gt;
&lt;br /&gt;
*Level: beginner / intermediate         &lt;br /&gt;
*Content: short&lt;br /&gt;
&lt;br /&gt;
These are very short and simple tutorials by Jason Gorman that explain the basics of use cases. Apart from use cases, the author covers the related concepts such as actors, system, scenarios. He also explains special use cases: &amp;lt;&amp;lt;extend&amp;gt;&amp;gt; and &amp;lt;&amp;lt;include&amp;gt;&amp;gt; and provides a brief explanation of how use cases can be part of agile development process.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
•	http://www.bredemeyer.com/use_cases.htm&lt;br /&gt;
&lt;br /&gt;
*Level: beginner / intermediate         &lt;br /&gt;
*Content: short&lt;br /&gt;
&lt;br /&gt;
This is a one-page document illustrating how use cases can be effective means to gather functional requirements. It provides valuable pointers to other use-case resources. Though short, it is quite informative for new learners.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
•	http://alistair.cockburn.us/index.php/Use_case_fundamentals&lt;br /&gt;
&lt;br /&gt;
*Level: beginner / intermediate         &lt;br /&gt;
*Content: short&lt;br /&gt;
&lt;br /&gt;
This is a good website which deals with the scope of use cases..It provides a&lt;br /&gt;
brief description of use cases and actors along with analysis of use case reports.It &lt;br /&gt;
also describes steps involved in validation of use cases.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
•	http://courses.softlab.ntua.gr/softeng/Tutorials/UML-Use-Cases.pdf&lt;br /&gt;
&lt;br /&gt;
*Level: beginner / intermediate         &lt;br /&gt;
*Content: medium&lt;br /&gt;
&lt;br /&gt;
This presentation offers succinct definitions for various terms related to use cases, also provides notational guide for documenting use case diagrams. It explains how to build scenarios ( flow of events in a use case).&lt;br /&gt;
&lt;br /&gt;
===Advanced===&lt;br /&gt;
&lt;br /&gt;
•	http://alistair.cockburn.us/index.php/Structuring_use_cases_with_goals&lt;br /&gt;
&lt;br /&gt;
*Level: intermediate / advanced         &lt;br /&gt;
*Content: long&lt;br /&gt;
&lt;br /&gt;
Here is a great guide to use cases by Alistair Cockburn, a renowned strategist and one of the leaders of agile movement. Though the article quite reader-friendly, it expects the reader to be familiar with at least the basic concepts. It offers brief descriptions of terms involved and analysis of use case reports.&lt;br /&gt;
&lt;br /&gt;
== '''How to write use cases''' ==&lt;br /&gt;
&lt;br /&gt;
Writing use cases are not confined to drawing use case diagram. Rather, a written use case is a brief but complete text description of every identified use case (functionality) of the system identified. Some of the instructive articles on this topic are as follows&lt;br /&gt;
&lt;br /&gt;
===Beginner===&lt;br /&gt;
&lt;br /&gt;
•	http://infogenium.typepad.com/inside_infogenium/2007/07/getting-started.html&lt;br /&gt;
&lt;br /&gt;
*Level: beginner&lt;br /&gt;
*Content: short&lt;br /&gt;
&lt;br /&gt;
Here is a short tutorial for developers that are intimidated by the requirement documentation phase using the use cases. It explains the steps involved in capturing the requirements, introduces the concept of use-case brief. It illustrates the concepts with a file attachment example.&lt;br /&gt;
&lt;br /&gt;
===Intermediate===&lt;br /&gt;
&lt;br /&gt;
•	http://www.informit.com/articles/article.aspx?p=30084&amp;amp;seqNum=8&amp;amp;rl=1&lt;br /&gt;
&lt;br /&gt;
*Level: intermediate&lt;br /&gt;
*Content: medium&lt;br /&gt;
&lt;br /&gt;
Here is an article that clearly distinguishes between a good use case and a bad use case. It gives an example of course registration for students and then explains writing the use case descriptions. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
•	http://www.answers.com/topic/use-case?cat=technology&lt;br /&gt;
&lt;br /&gt;
*Level: intermediate&lt;br /&gt;
*Content: long&lt;br /&gt;
 &lt;br /&gt;
This is a comprehensive article that starts off with an overview of use cases and provides an excellent reference for how to write use cases. It also comments on various types of use-cases based on the functionality (business/system) or degree of detail (brief / casual / fully dressed).  It elaborates on various sections of use case description.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Writing effective use cases ===&lt;br /&gt;
&lt;br /&gt;
•	http://www.gatherspace.com/static/use_case_example.html&lt;br /&gt;
&lt;br /&gt;
*Level: intermediate / advanced &lt;br /&gt;
*Content: long&lt;br /&gt;
 &lt;br /&gt;
Explains the art of writing effective use cases by considering an example of writing use cases for a mock Ebay site. The practical nature of the example makes it an interesting exercise. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
•	http://alistair.cockburn.us/index.php/Sampler_of_good_%26_bad_use_cases&lt;br /&gt;
&lt;br /&gt;
*Level: intermediate / advanced &lt;br /&gt;
*Content: short&lt;br /&gt;
&lt;br /&gt;
The above link provides some sample good and bad use cases. These can act as Dos and Don'ts for developers.&lt;br /&gt;
&lt;br /&gt;
== '''Format/Template of use cases''' ==&lt;br /&gt;
It's useful to have a template for use case so that there are less chances of missing out on anything.&lt;br /&gt;
&lt;br /&gt;
•	http://alistair.cockburn.us/index.php/Basic_use_case_template&lt;br /&gt;
&lt;br /&gt;
An excellent link which shows how to structure use cases. Provides different use case templates.&lt;br /&gt;
&lt;br /&gt;
== '''Use case diagrams''' ==&lt;br /&gt;
&lt;br /&gt;
Pictorial representation of the use case is depicted using use case diagrams. Here are the links to use case diagram tutorials.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
•	http://en.wikipedia.org/wiki/Use_case_diagram&lt;br /&gt;
&lt;br /&gt;
*Level: basic /intermediate&lt;br /&gt;
*Content: medium&lt;br /&gt;
&lt;br /&gt;
This wiki link contains representation of use case generalization along with the notations for use case relationships like extend include.&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
•	http://www.agilemodeling.com/artifacts/useCaseDiagram.htm&lt;br /&gt;
&lt;br /&gt;
•       http://www.andrew.cmu.edu/course/90-754/umlucdfaq.html#uses&lt;br /&gt;
&lt;br /&gt;
*Level: intermediate&lt;br /&gt;
*Content: medium&lt;br /&gt;
&lt;br /&gt;
The above links cover creation and understanding of Use Case Diagrams&lt;br /&gt;
&lt;br /&gt;
== '''Examples'''== &lt;br /&gt;
&lt;br /&gt;
===Beginner===&lt;br /&gt;
&lt;br /&gt;
• http://www.objectmentor.com/resources/articles/usecases.pdf &lt;br /&gt;
&lt;br /&gt;
*	Level : Beginner&lt;br /&gt;
*	Content :Short&lt;br /&gt;
&lt;br /&gt;
This provides a simple example and explains use cases with use case diagrams for some of the functionalities. &lt;br /&gt;
&lt;br /&gt;
• http://www.w3.org/2002/06/ws-example &lt;br /&gt;
&lt;br /&gt;
*	Level : Beginner&lt;br /&gt;
*	Content : Short &lt;br /&gt;
&lt;br /&gt;
This is a comprehensive example.It takes up a travel reservation system and attempts to explain different scenarios like checking availability of tickets,booking flights and hotels.It explains with great detail each scenario.&lt;br /&gt;
&lt;br /&gt;
• http://www.agilemodeling.com/essays/useCaseReuse.htm &lt;br /&gt;
&lt;br /&gt;
*	Level : Beginner&lt;br /&gt;
*	Content : Short &lt;br /&gt;
&lt;br /&gt;
This is example taking up only one scenario ”Enroll in University” uses narrative style of writing a use case.&lt;br /&gt;
&lt;br /&gt;
===Beginner/ Intermediate===&lt;br /&gt;
• http://www.soi.wide.ad.jp/class/20040034/slides/07/9.html &lt;br /&gt;
&lt;br /&gt;
*	Level :Beginner/Intermediate&lt;br /&gt;
*	Content : Long&lt;br /&gt;
&lt;br /&gt;
This is an excellent presentation which takes up a real-life ‘elevator’ example and provides multiple use-case descriptions for use cases.Since it relates to the real world it is easy for beginners to understand. &lt;br /&gt;
&lt;br /&gt;
• http://www.cs.colorado.edu/~kena/classes/6448/s05/reference/usecases/examples.html &lt;br /&gt;
&lt;br /&gt;
*	Level :Beginner/Intermediate&lt;br /&gt;
*	Content : Short&lt;br /&gt;
&lt;br /&gt;
This is a one-page guide that illustrates the use case briefs, user-level and summary level use case given the actor-goal list and narrative of the system from the user. &lt;br /&gt;
&lt;br /&gt;
• http://courses.softlab.ntua.gr/softeng/Tutorials/UML-Use-Cases.pdf &lt;br /&gt;
&lt;br /&gt;
*	Level : Beginner/Intermediate&lt;br /&gt;
*	Content : Medium&lt;br /&gt;
&lt;br /&gt;
This is an excellent example describing how to write use cases for different scenarios in a system. It takes up a courseware example breaking down different scenarios and explaining use cases.&lt;br /&gt;
&lt;br /&gt;
===Advanced===&lt;br /&gt;
• http://www.se.cuhk.edu.hk/~seg3430/2007/tutorial/tutorial04.pdf &lt;br /&gt;
&lt;br /&gt;
*	Level : Intermediate/Advanced&lt;br /&gt;
*	Content : Long&lt;br /&gt;
&lt;br /&gt;
Though quite long, this link describes use cases for a credit card payment service.&lt;br /&gt;
&lt;br /&gt;
== '''Advanced Concepts''' ==&lt;br /&gt;
&lt;br /&gt;
'''Pluggable use cases''':&lt;br /&gt;
&lt;br /&gt;
http://alistair.cockburn.us/index.php/Pluggable_use_cases&lt;br /&gt;
&lt;br /&gt;
This introduces readers to concept of Pluggable use cases. &lt;br /&gt;
&lt;br /&gt;
'''Essential use-cases''':&lt;br /&gt;
&lt;br /&gt;
http://www.agilemodeling.com/artifacts/essentialUseCase.htm&lt;br /&gt;
&lt;br /&gt;
Essential use-case can be thought of as a less verbose and more succint version of the use case description. This document compares the traditional use case to essential use case.&lt;br /&gt;
&lt;br /&gt;
'''Future direction:'''&lt;br /&gt;
&lt;br /&gt;
http://alistair.cockburn.us/index.php/Use_cases%2C_ten_years_later&lt;br /&gt;
&lt;br /&gt;
This article predicts the direction of future research in the field of use cases.&lt;br /&gt;
&lt;br /&gt;
== '''Tools''' ==&lt;br /&gt;
&lt;br /&gt;
'''Rational Rose:''' &lt;br /&gt;
&lt;br /&gt;
One of the most popular tool for use-case driven development.&lt;br /&gt;
&lt;br /&gt;
http://www-306.ibm.com/software/awdtools/developer/rose/index.html&lt;br /&gt;
&lt;br /&gt;
'''Sun Java Studio Enterprise:''' &lt;br /&gt;
&lt;br /&gt;
Sun Java Studio Enterprise offers a UML tool. &lt;br /&gt;
&lt;br /&gt;
http://developers.sun.com/jsenterprise/&lt;br /&gt;
&lt;br /&gt;
'''Visual case:''' &lt;br /&gt;
&lt;br /&gt;
UML &amp;amp; E/R Database Design Tool&lt;br /&gt;
&lt;br /&gt;
http://www.visualcase.com/&lt;br /&gt;
&lt;br /&gt;
== '''Quick references''' ==&lt;br /&gt;
&lt;br /&gt;
Some quick references for studying use cases&lt;br /&gt;
&lt;br /&gt;
•	http://www.oreilly.com.cn/samplechap/uml20inanutshell/UML20-ch07.pdf&lt;br /&gt;
&lt;br /&gt;
•	http://www.cs.rit.edu/~jaa/CS4/Lectures/UseCase.PDF&lt;br /&gt;
&lt;br /&gt;
•	http://www.alagad.com/go/blog-entry/uml-use-case-diagrams&lt;br /&gt;
&lt;br /&gt;
•	http://www.cs.nmsu.edu/~jeffery/courses/371/lecture.html&lt;br /&gt;
&lt;br /&gt;
== '''Good Tutorials''' ==&lt;br /&gt;
&lt;br /&gt;
•	http://www.parlezuml.com/tutorials/usecases/usecases.pdf&lt;br /&gt;
&lt;br /&gt;
•	http://www.readysetpro.com/whitepapers/usecasetut.html &lt;br /&gt;
&lt;br /&gt;
Two very easy and informative tutorials for beginners who are not familiar with use cases. Both the tutorials contain some very good and simple examples coupled with easily understandable pictures. The first tutorial focuses on use case driven development and UML diagrams while the second deals with writing effective use cases.&lt;br /&gt;
&lt;br /&gt;
== Presentations Online ==&lt;br /&gt;
&lt;br /&gt;
•	https://users.cs.jmu.edu/bernstdh/web/common/lectures/slides_use-cases.php&lt;br /&gt;
&lt;br /&gt;
This presentation describes writing use cases along with constructing use case diagrams&lt;br /&gt;
&lt;br /&gt;
•	http://www-rohan.sdsu.edu/faculty/rnorman/course/ids306/Lect_c4.ppt&lt;br /&gt;
&lt;br /&gt;
This is a very good presentation that explains the concepts with familiar real life examples.&lt;br /&gt;
&lt;br /&gt;
•	http://www.cragsystems.com/SFRWUC/index.htm&lt;br /&gt;
&lt;br /&gt;
This web-based tutorial describes creating a Use Case Model of the functional requirements for a computer system.&lt;br /&gt;
&lt;br /&gt;
== Books ==&lt;br /&gt;
&lt;br /&gt;
Following are good books for learning use cases&lt;br /&gt;
&lt;br /&gt;
[[http://www.amazon.com/Writing-Effective-Cases-Alistair-Cockburn/dp/0201702258 Writing Effective Use Cases by Alistair Cockburn ]]&lt;br /&gt;
&lt;br /&gt;
[[http://www.amazon.com/Object-Oriented-Software-Engineering-Driven-Approach/dp/0201544350 Object-Oriented Software Engineering: A Use Case Driven Approach by Ivar Jacobson ]]&lt;br /&gt;
&lt;br /&gt;
== References on the Web ==&lt;br /&gt;
&lt;br /&gt;
'''Books:'''&lt;br /&gt;
&lt;br /&gt;
1.	Jocabson, Ivar. Basic Use-Case modeling, Report on Object Analysis and Design, 1(2): 15-19, 1994 &lt;br /&gt;
&lt;br /&gt;
2.	Jocabson, Ivar. Baisc Use-Case Modeling (Continued), Report on Object Analysis and Design, 1(3): 7-9, 1994 &lt;br /&gt;
&lt;br /&gt;
3.	Rumbaugh, James. Journal of Object-Oriented Programming: 8-12, 23, Sept. 1994&lt;br /&gt;
&lt;br /&gt;
'''Online Resources:'''&lt;br /&gt;
&lt;br /&gt;
Alistair Cockburn Home Page: http://alistair.cockburn.us/index.php/Main_Page&lt;br /&gt;
&lt;br /&gt;
Tutorial links: http://www.answers.com/topic/use-case?cat=technology&lt;br /&gt;
&lt;br /&gt;
All the links mentioned in the review.&lt;/div&gt;</summary>
		<author><name>Nnmodak</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2007/wiki2_4_np&amp;diff=8077</id>
		<title>CSC/ECE 517 Fall 2007/wiki2 4 np</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2007/wiki2_4_np&amp;diff=8077"/>
		<updated>2007-10-29T21:44:34Z</updated>

		<summary type="html">&lt;p&gt;Nnmodak: /* Quick references */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''Use cases. There are even more pages on the Web on use cases than on MVC. If someone wants to learn about them, what should (s)he do? Look at the first few hits in Google? I expect we can do better than that. Write a review of the use-case sites on the Web. Which are best for learning about the concept? Which have the most instructive examples? Which teach advanced concepts that are not apparent in perusing most use-case sites? Read at least several dozen pages before deciding how to organize your overview''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== '''What are use cases''' ==&lt;br /&gt;
&lt;br /&gt;
A use case is a technique used in software and systems engineering to capture the functional requirements of a system.&lt;br /&gt;
&lt;br /&gt;
They describe in a sequence of steps,the interaction between the initiator of the interaction—and the system itself.&lt;br /&gt;
The initiator of the interaction is called as Actor. Actors can be end users,hardware devices or other systems,basically someone who takes part in the series of activities in a system.&lt;br /&gt;
&lt;br /&gt;
Each use case is a complete series of events, from the point of view of the actor.One or more scenarios may be generated from each use case, corresponding to the detail of each possible way of achieving that goal.&lt;br /&gt;
&lt;br /&gt;
There are numerous websites and resources on the topic of “Use cases”. We attempt to provide a guide to most useful ones among them. The rest of this page provides links to websites which provide more in depth information describing the use of use cases,use cases templates, examples, and advanced concepts , along with reviews of those sites.&lt;br /&gt;
&lt;br /&gt;
The links are grouped as per the topics which will make it easy to find a related site.Within the group We have compared these on the basis of following criteria:&lt;br /&gt;
&lt;br /&gt;
Level: beginner / intermediate / advanced&lt;br /&gt;
&lt;br /&gt;
Content: short / medium / long&lt;br /&gt;
&lt;br /&gt;
== '''Introduction''' ==&lt;br /&gt;
&lt;br /&gt;
These are introductory tutorials explaining the basics of use cases. Most of them are short and priliminary. &lt;br /&gt;
&lt;br /&gt;
===Beginner===&lt;br /&gt;
&lt;br /&gt;
•	http://www.cragsystems.com/SFRWUC/index.htm&lt;br /&gt;
&lt;br /&gt;
*Level: beginner           &lt;br /&gt;
*Content: long&lt;br /&gt;
&lt;br /&gt;
This is a web-based tutorial that introduces beginners to use cases. It clearly illustrates with appropriate examples the concepts related to use cases. It further describes application of use cases in documenting functional requirements. It also has a short &lt;br /&gt;
quiz, a test and an exercise at the end. Excellent navigation is a plus.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
•	http://www.csc.calpoly.edu/~dbutler/tutorials/winter96/use/&lt;br /&gt;
&lt;br /&gt;
*Level: beginner           &lt;br /&gt;
*Content: short&lt;br /&gt;
&lt;br /&gt;
This short tutorial discusses how use-cases fit into the framework of user-centered analysis. It gives a sample use case of ATM cash withdrawal. It also describes the role of use cases in design and testing phase.&lt;br /&gt;
&lt;br /&gt;
===Beginner /intermediate===&lt;br /&gt;
&lt;br /&gt;
•	http://en.wikipedia.org/wiki/Use_case&lt;br /&gt;
&lt;br /&gt;
*Level: beginner / intermediate         &lt;br /&gt;
*Content: medium&lt;br /&gt;
&lt;br /&gt;
This wiki provides an introduction to use case concepts in very simple terms, so seems to be a good starting point for early beginners. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
•	http://www.parlezuml.com/tutorials/usecases/usecases_intro.pdf&lt;br /&gt;
&lt;br /&gt;
•	http://parlezuml.com/tutorials/usecases/usecases.pdf&lt;br /&gt;
&lt;br /&gt;
*Level: beginner / intermediate         &lt;br /&gt;
*Content: short&lt;br /&gt;
&lt;br /&gt;
These are very short and simple tutorials by Jason Gorman that explain the basics of use cases. Apart from use cases, the author covers the related concepts such as actors, system, scenarios. He also explains special use cases: &amp;lt;&amp;lt;extend&amp;gt;&amp;gt; and &amp;lt;&amp;lt;include&amp;gt;&amp;gt; and provides a brief explanation of how use cases can be part of agile development process.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
•	http://www.bredemeyer.com/use_cases.htm&lt;br /&gt;
&lt;br /&gt;
*Level: beginner / intermediate         &lt;br /&gt;
*Content: short&lt;br /&gt;
&lt;br /&gt;
This is a one-page document illustrating how use cases can be effective means to gather functional requirements. It provides valuable pointers to other use-case resources. Though short, it is quite informative for new learners.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
•	http://alistair.cockburn.us/index.php/Use_case_fundamentals&lt;br /&gt;
&lt;br /&gt;
*Level: beginner / intermediate         &lt;br /&gt;
*Content: short&lt;br /&gt;
&lt;br /&gt;
This is a good website which deals with the scope of use cases..It provides a&lt;br /&gt;
brief description of use cases and actors along with analysis of use case reports.It &lt;br /&gt;
also describes steps involved in validation of use cases.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
•	http://courses.softlab.ntua.gr/softeng/Tutorials/UML-Use-Cases.pdf&lt;br /&gt;
&lt;br /&gt;
*Level: beginner / intermediate         &lt;br /&gt;
*Content: medium&lt;br /&gt;
&lt;br /&gt;
This presentation offers succinct definitions for various terms related to use cases, also provides notational guide for documenting use case diagrams. It explains how to build scenarios ( flow of events in a use case).&lt;br /&gt;
&lt;br /&gt;
===Advanced===&lt;br /&gt;
&lt;br /&gt;
•	http://alistair.cockburn.us/index.php/Structuring_use_cases_with_goals&lt;br /&gt;
&lt;br /&gt;
*Level: intermediate / advanced         &lt;br /&gt;
*Content: long&lt;br /&gt;
&lt;br /&gt;
Here is a great guide to use cases by Alistair Cockburn, a renowned strategist and one of the leaders of agile movement. Though the article quite reader-friendly, it expects the reader to be familiar with at least the basic concepts. It offers brief descriptions of terms involved and analysis of use case reports.&lt;br /&gt;
&lt;br /&gt;
== '''How to write use cases''' ==&lt;br /&gt;
&lt;br /&gt;
Writing use cases are not confined to drawing use case diagram. Rather, a written use case is a brief but complete text description of every identified use case (functionality) of the system identified. Some of the instructive articles on this topic are as follows&lt;br /&gt;
&lt;br /&gt;
===Beginner===&lt;br /&gt;
&lt;br /&gt;
•	http://infogenium.typepad.com/inside_infogenium/2007/07/getting-started.html&lt;br /&gt;
&lt;br /&gt;
*Level: beginner&lt;br /&gt;
*Content: short&lt;br /&gt;
&lt;br /&gt;
Here is a short tutorial for developers that are intimidated by the requirement documentation phase using the use cases. It explains the steps involved in capturing the requirements, introduces the concept of use-case brief. It illustrates the concepts with a file attachment example.&lt;br /&gt;
&lt;br /&gt;
===Intermediate===&lt;br /&gt;
&lt;br /&gt;
•	http://www.informit.com/articles/article.aspx?p=30084&amp;amp;seqNum=8&amp;amp;rl=1&lt;br /&gt;
&lt;br /&gt;
*Level: intermediate&lt;br /&gt;
*Content: medium&lt;br /&gt;
&lt;br /&gt;
Here is an article that clearly distinguishes between a good use case and a bad use case. It gives an example of course registration for students and then explains writing the use case descriptions. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
•	http://www.answers.com/topic/use-case?cat=technology&lt;br /&gt;
&lt;br /&gt;
*Level: intermediate&lt;br /&gt;
*Content: long&lt;br /&gt;
 &lt;br /&gt;
This is a comprehensive article that starts off with an overview of use cases and provides an excellent reference for how to write use cases. It also comments on various types of use-cases based on the functionality (business/system) or degree of detail (brief / casual / fully dressed).  It elaborates on various sections of use case description.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Writing effective use cases ===&lt;br /&gt;
&lt;br /&gt;
•	http://www.gatherspace.com/static/use_case_example.html&lt;br /&gt;
&lt;br /&gt;
*Level: intermediate / advanced &lt;br /&gt;
*Content: long&lt;br /&gt;
 &lt;br /&gt;
Explains the art of writing effective use cases by considering an example of writing use cases for a mock Ebay site. The practical nature of the example makes it an interesting exercise. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
•	http://alistair.cockburn.us/index.php/Sampler_of_good_%26_bad_use_cases&lt;br /&gt;
&lt;br /&gt;
*Level: intermediate / advanced &lt;br /&gt;
*Content: short&lt;br /&gt;
&lt;br /&gt;
The above link provides some sample good and bad use cases. These can act as Dos and Don'ts for developers.&lt;br /&gt;
&lt;br /&gt;
== '''Format/Template of use cases''' ==&lt;br /&gt;
It's useful to have a template for use case so that there are less chances of missing out on anything.&lt;br /&gt;
&lt;br /&gt;
•	http://alistair.cockburn.us/index.php/Basic_use_case_template&lt;br /&gt;
&lt;br /&gt;
An excellent link which shows how to structure use cases. Provides different use case templates.&lt;br /&gt;
&lt;br /&gt;
== '''Use case diagrams''' ==&lt;br /&gt;
&lt;br /&gt;
Pictorial representation of the use case is depicted using use case diagrams. Here are the links to use case diagram tutorials.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
•	http://en.wikipedia.org/wiki/Use_case_diagram&lt;br /&gt;
&lt;br /&gt;
*Level: basic /intermediate&lt;br /&gt;
*Content: medium&lt;br /&gt;
&lt;br /&gt;
This wiki link contains representation of use case generalization along with the notations for use case relationships like extend include.&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
•	http://www.agilemodeling.com/artifacts/useCaseDiagram.htm&lt;br /&gt;
&lt;br /&gt;
•       http://www.andrew.cmu.edu/course/90-754/umlucdfaq.html#uses&lt;br /&gt;
&lt;br /&gt;
*Level: intermediate&lt;br /&gt;
*Content: medium&lt;br /&gt;
&lt;br /&gt;
The above links cover creation and understanding of Use Case Diagrams&lt;br /&gt;
&lt;br /&gt;
== '''Examples'''== &lt;br /&gt;
&lt;br /&gt;
===Beginner===&lt;br /&gt;
&lt;br /&gt;
• http://www.objectmentor.com/resources/articles/usecases.pdf &lt;br /&gt;
&lt;br /&gt;
*	Level : Beginner&lt;br /&gt;
*	Content :Short&lt;br /&gt;
&lt;br /&gt;
This provides a simple example and explains use cases with use case diagrams for some of the functionalities. &lt;br /&gt;
&lt;br /&gt;
• http://www.w3.org/2002/06/ws-example &lt;br /&gt;
&lt;br /&gt;
*	Level : Beginner&lt;br /&gt;
*	Content : Short &lt;br /&gt;
&lt;br /&gt;
This is a comprehensive example.It takes up a travel reservation system and attempts to explain different scenarios like checking availability of tickets,booking flights and hotels.It explains with great detail each scenario.&lt;br /&gt;
&lt;br /&gt;
• http://www.agilemodeling.com/essays/useCaseReuse.htm &lt;br /&gt;
&lt;br /&gt;
*	Level : Beginner&lt;br /&gt;
*	Content : Short &lt;br /&gt;
&lt;br /&gt;
This is example taking up only one scenario ”Enroll in University” uses narrative style of writing a use case.&lt;br /&gt;
&lt;br /&gt;
===Beginner/ Intermediate===&lt;br /&gt;
• http://www.soi.wide.ad.jp/class/20040034/slides/07/9.html &lt;br /&gt;
&lt;br /&gt;
*	Level :Beginner/Intermediate&lt;br /&gt;
*	Content : Long&lt;br /&gt;
&lt;br /&gt;
This is an excellent presentation which takes up a real-life ‘elevator’ example and provides multiple use-case descriptions for use cases.Since it relates to the real world it is easy for beginners to understand. &lt;br /&gt;
&lt;br /&gt;
• http://www.cs.colorado.edu/~kena/classes/6448/s05/reference/usecases/examples.html &lt;br /&gt;
&lt;br /&gt;
*	Level :Beginner/Intermediate&lt;br /&gt;
*	Content : Short&lt;br /&gt;
&lt;br /&gt;
This is a one-page guide that illustrates the use case briefs, user-level and summary level use case given the actor-goal list and narrative of the system from the user. &lt;br /&gt;
&lt;br /&gt;
• http://courses.softlab.ntua.gr/softeng/Tutorials/UML-Use-Cases.pdf &lt;br /&gt;
&lt;br /&gt;
*	Level : Beginner/Intermediate&lt;br /&gt;
*	Content : Medium&lt;br /&gt;
&lt;br /&gt;
This is an excellent example describing how to write use cases for different scenarios in a system. It takes up a courseware example breaking down different scenarios and explaining use cases.&lt;br /&gt;
&lt;br /&gt;
===Advanced===&lt;br /&gt;
• http://www.se.cuhk.edu.hk/~seg3430/2007/tutorial/tutorial04.pdf &lt;br /&gt;
&lt;br /&gt;
*	Level : Intermediate/Advanced&lt;br /&gt;
*	Content : Long&lt;br /&gt;
&lt;br /&gt;
Though quite long, this link describes use cases for a credit card payment service.&lt;br /&gt;
&lt;br /&gt;
== '''Advanced Concepts''' ==&lt;br /&gt;
&lt;br /&gt;
'''Pluggable use cases''':&lt;br /&gt;
&lt;br /&gt;
http://alistair.cockburn.us/index.php/Pluggable_use_cases&lt;br /&gt;
&lt;br /&gt;
This introduces readers to concept of Pluggable use cases. &lt;br /&gt;
&lt;br /&gt;
'''Essential use-cases''':&lt;br /&gt;
&lt;br /&gt;
http://www.agilemodeling.com/artifacts/essentialUseCase.htm&lt;br /&gt;
&lt;br /&gt;
Essential use-case can be thought of as a less verbose and more succint version of the use case description. This document compares the traditional use case to essential use case.&lt;br /&gt;
&lt;br /&gt;
'''Future direction:'''&lt;br /&gt;
&lt;br /&gt;
http://alistair.cockburn.us/index.php/Use_cases%2C_ten_years_later&lt;br /&gt;
&lt;br /&gt;
This article predicts the direction of future research in the field of use cases.&lt;br /&gt;
&lt;br /&gt;
== '''Tools''' ==&lt;br /&gt;
&lt;br /&gt;
'''Rational Rose:''' &lt;br /&gt;
&lt;br /&gt;
One of the most popular tool for use-case driven development.&lt;br /&gt;
&lt;br /&gt;
http://www-306.ibm.com/software/awdtools/developer/rose/index.html&lt;br /&gt;
&lt;br /&gt;
'''Sun Java Studio Enterprise:''' &lt;br /&gt;
&lt;br /&gt;
Sun Java Studio Enterprise offers a UML tool. &lt;br /&gt;
&lt;br /&gt;
http://developers.sun.com/jsenterprise/&lt;br /&gt;
&lt;br /&gt;
'''Visual case:''' &lt;br /&gt;
&lt;br /&gt;
UML &amp;amp; E/R Database Design Tool&lt;br /&gt;
&lt;br /&gt;
http://www.visualcase.com/&lt;br /&gt;
&lt;br /&gt;
== '''Quick references''' ==&lt;br /&gt;
&lt;br /&gt;
Some quick references for studying use cases&lt;br /&gt;
&lt;br /&gt;
•	http://www.oreilly.com.cn/samplechap/uml20inanutshell/UML20-ch07.pdf&lt;br /&gt;
&lt;br /&gt;
•	http://www.cs.rit.edu/~jaa/CS4/Lectures/UseCase.PDF&lt;br /&gt;
&lt;br /&gt;
•	http://www.alagad.com/go/blog-entry/uml-use-case-diagrams&lt;br /&gt;
&lt;br /&gt;
•	http://www.cs.nmsu.edu/~jeffery/courses/371/lecture.html&lt;br /&gt;
&lt;br /&gt;
== Good Tutorials ==&lt;br /&gt;
&lt;br /&gt;
•	http://www.parlezuml.com/tutorials/usecases/usecases.pdf&lt;br /&gt;
&lt;br /&gt;
•	http://www.readysetpro.com/whitepapers/usecasetut.html &lt;br /&gt;
&lt;br /&gt;
Two very easy and informative tutorials for beginners who are not familiar with use cases. Both the tutorials contain some very good and simple examples coupled with easily understandable pictures. The first tutorial focuses on use case driven development and UML diagrams while the second deals with writing effective use cases.&lt;br /&gt;
&lt;br /&gt;
== Presentations Online ==&lt;br /&gt;
&lt;br /&gt;
•	https://users.cs.jmu.edu/bernstdh/web/common/lectures/slides_use-cases.php&lt;br /&gt;
&lt;br /&gt;
This presentation describes writing use cases along with constructing use case diagrams&lt;br /&gt;
&lt;br /&gt;
•	http://www-rohan.sdsu.edu/faculty/rnorman/course/ids306/Lect_c4.ppt&lt;br /&gt;
&lt;br /&gt;
This is a very good presentation that explains the concepts with familiar real life examples.&lt;br /&gt;
&lt;br /&gt;
•	http://www.cragsystems.com/SFRWUC/index.htm&lt;br /&gt;
&lt;br /&gt;
This web-based tutorial describes creating a Use Case Model of the functional requirements for a computer system.&lt;br /&gt;
&lt;br /&gt;
== Books ==&lt;br /&gt;
&lt;br /&gt;
Following are good books for learning use cases&lt;br /&gt;
&lt;br /&gt;
[[http://www.amazon.com/Writing-Effective-Cases-Alistair-Cockburn/dp/0201702258 Writing Effective Use Cases by Alistair Cockburn ]]&lt;br /&gt;
&lt;br /&gt;
[[http://www.amazon.com/Object-Oriented-Software-Engineering-Driven-Approach/dp/0201544350 Object-Oriented Software Engineering: A Use Case Driven Approach by Ivar Jacobson ]]&lt;br /&gt;
&lt;br /&gt;
== References on the Web ==&lt;br /&gt;
&lt;br /&gt;
'''Books:'''&lt;br /&gt;
&lt;br /&gt;
1.	Jocabson, Ivar. Basic Use-Case modeling, Report on Object Analysis and Design, 1(2): 15-19, 1994 &lt;br /&gt;
&lt;br /&gt;
2.	Jocabson, Ivar. Baisc Use-Case Modeling (Continued), Report on Object Analysis and Design, 1(3): 7-9, 1994 &lt;br /&gt;
&lt;br /&gt;
3.	Rumbaugh, James. Journal of Object-Oriented Programming: 8-12, 23, Sept. 1994&lt;br /&gt;
&lt;br /&gt;
'''Online Resources:'''&lt;br /&gt;
&lt;br /&gt;
Alistair Cockburn Home Page: http://alistair.cockburn.us/index.php/Main_Page&lt;br /&gt;
&lt;br /&gt;
Tutorial links: http://www.answers.com/topic/use-case?cat=technology&lt;br /&gt;
&lt;br /&gt;
All the links mentioned in the review.&lt;/div&gt;</summary>
		<author><name>Nnmodak</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2007/wiki2_4_np&amp;diff=8076</id>
		<title>CSC/ECE 517 Fall 2007/wiki2 4 np</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2007/wiki2_4_np&amp;diff=8076"/>
		<updated>2007-10-29T21:44:14Z</updated>

		<summary type="html">&lt;p&gt;Nnmodak: /* Tools */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''Use cases. There are even more pages on the Web on use cases than on MVC. If someone wants to learn about them, what should (s)he do? Look at the first few hits in Google? I expect we can do better than that. Write a review of the use-case sites on the Web. Which are best for learning about the concept? Which have the most instructive examples? Which teach advanced concepts that are not apparent in perusing most use-case sites? Read at least several dozen pages before deciding how to organize your overview''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== '''What are use cases''' ==&lt;br /&gt;
&lt;br /&gt;
A use case is a technique used in software and systems engineering to capture the functional requirements of a system.&lt;br /&gt;
&lt;br /&gt;
They describe in a sequence of steps,the interaction between the initiator of the interaction—and the system itself.&lt;br /&gt;
The initiator of the interaction is called as Actor. Actors can be end users,hardware devices or other systems,basically someone who takes part in the series of activities in a system.&lt;br /&gt;
&lt;br /&gt;
Each use case is a complete series of events, from the point of view of the actor.One or more scenarios may be generated from each use case, corresponding to the detail of each possible way of achieving that goal.&lt;br /&gt;
&lt;br /&gt;
There are numerous websites and resources on the topic of “Use cases”. We attempt to provide a guide to most useful ones among them. The rest of this page provides links to websites which provide more in depth information describing the use of use cases,use cases templates, examples, and advanced concepts , along with reviews of those sites.&lt;br /&gt;
&lt;br /&gt;
The links are grouped as per the topics which will make it easy to find a related site.Within the group We have compared these on the basis of following criteria:&lt;br /&gt;
&lt;br /&gt;
Level: beginner / intermediate / advanced&lt;br /&gt;
&lt;br /&gt;
Content: short / medium / long&lt;br /&gt;
&lt;br /&gt;
== '''Introduction''' ==&lt;br /&gt;
&lt;br /&gt;
These are introductory tutorials explaining the basics of use cases. Most of them are short and priliminary. &lt;br /&gt;
&lt;br /&gt;
===Beginner===&lt;br /&gt;
&lt;br /&gt;
•	http://www.cragsystems.com/SFRWUC/index.htm&lt;br /&gt;
&lt;br /&gt;
*Level: beginner           &lt;br /&gt;
*Content: long&lt;br /&gt;
&lt;br /&gt;
This is a web-based tutorial that introduces beginners to use cases. It clearly illustrates with appropriate examples the concepts related to use cases. It further describes application of use cases in documenting functional requirements. It also has a short &lt;br /&gt;
quiz, a test and an exercise at the end. Excellent navigation is a plus.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
•	http://www.csc.calpoly.edu/~dbutler/tutorials/winter96/use/&lt;br /&gt;
&lt;br /&gt;
*Level: beginner           &lt;br /&gt;
*Content: short&lt;br /&gt;
&lt;br /&gt;
This short tutorial discusses how use-cases fit into the framework of user-centered analysis. It gives a sample use case of ATM cash withdrawal. It also describes the role of use cases in design and testing phase.&lt;br /&gt;
&lt;br /&gt;
===Beginner /intermediate===&lt;br /&gt;
&lt;br /&gt;
•	http://en.wikipedia.org/wiki/Use_case&lt;br /&gt;
&lt;br /&gt;
*Level: beginner / intermediate         &lt;br /&gt;
*Content: medium&lt;br /&gt;
&lt;br /&gt;
This wiki provides an introduction to use case concepts in very simple terms, so seems to be a good starting point for early beginners. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
•	http://www.parlezuml.com/tutorials/usecases/usecases_intro.pdf&lt;br /&gt;
&lt;br /&gt;
•	http://parlezuml.com/tutorials/usecases/usecases.pdf&lt;br /&gt;
&lt;br /&gt;
*Level: beginner / intermediate         &lt;br /&gt;
*Content: short&lt;br /&gt;
&lt;br /&gt;
These are very short and simple tutorials by Jason Gorman that explain the basics of use cases. Apart from use cases, the author covers the related concepts such as actors, system, scenarios. He also explains special use cases: &amp;lt;&amp;lt;extend&amp;gt;&amp;gt; and &amp;lt;&amp;lt;include&amp;gt;&amp;gt; and provides a brief explanation of how use cases can be part of agile development process.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
•	http://www.bredemeyer.com/use_cases.htm&lt;br /&gt;
&lt;br /&gt;
*Level: beginner / intermediate         &lt;br /&gt;
*Content: short&lt;br /&gt;
&lt;br /&gt;
This is a one-page document illustrating how use cases can be effective means to gather functional requirements. It provides valuable pointers to other use-case resources. Though short, it is quite informative for new learners.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
•	http://alistair.cockburn.us/index.php/Use_case_fundamentals&lt;br /&gt;
&lt;br /&gt;
*Level: beginner / intermediate         &lt;br /&gt;
*Content: short&lt;br /&gt;
&lt;br /&gt;
This is a good website which deals with the scope of use cases..It provides a&lt;br /&gt;
brief description of use cases and actors along with analysis of use case reports.It &lt;br /&gt;
also describes steps involved in validation of use cases.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
•	http://courses.softlab.ntua.gr/softeng/Tutorials/UML-Use-Cases.pdf&lt;br /&gt;
&lt;br /&gt;
*Level: beginner / intermediate         &lt;br /&gt;
*Content: medium&lt;br /&gt;
&lt;br /&gt;
This presentation offers succinct definitions for various terms related to use cases, also provides notational guide for documenting use case diagrams. It explains how to build scenarios ( flow of events in a use case).&lt;br /&gt;
&lt;br /&gt;
===Advanced===&lt;br /&gt;
&lt;br /&gt;
•	http://alistair.cockburn.us/index.php/Structuring_use_cases_with_goals&lt;br /&gt;
&lt;br /&gt;
*Level: intermediate / advanced         &lt;br /&gt;
*Content: long&lt;br /&gt;
&lt;br /&gt;
Here is a great guide to use cases by Alistair Cockburn, a renowned strategist and one of the leaders of agile movement. Though the article quite reader-friendly, it expects the reader to be familiar with at least the basic concepts. It offers brief descriptions of terms involved and analysis of use case reports.&lt;br /&gt;
&lt;br /&gt;
== '''How to write use cases''' ==&lt;br /&gt;
&lt;br /&gt;
Writing use cases are not confined to drawing use case diagram. Rather, a written use case is a brief but complete text description of every identified use case (functionality) of the system identified. Some of the instructive articles on this topic are as follows&lt;br /&gt;
&lt;br /&gt;
===Beginner===&lt;br /&gt;
&lt;br /&gt;
•	http://infogenium.typepad.com/inside_infogenium/2007/07/getting-started.html&lt;br /&gt;
&lt;br /&gt;
*Level: beginner&lt;br /&gt;
*Content: short&lt;br /&gt;
&lt;br /&gt;
Here is a short tutorial for developers that are intimidated by the requirement documentation phase using the use cases. It explains the steps involved in capturing the requirements, introduces the concept of use-case brief. It illustrates the concepts with a file attachment example.&lt;br /&gt;
&lt;br /&gt;
===Intermediate===&lt;br /&gt;
&lt;br /&gt;
•	http://www.informit.com/articles/article.aspx?p=30084&amp;amp;seqNum=8&amp;amp;rl=1&lt;br /&gt;
&lt;br /&gt;
*Level: intermediate&lt;br /&gt;
*Content: medium&lt;br /&gt;
&lt;br /&gt;
Here is an article that clearly distinguishes between a good use case and a bad use case. It gives an example of course registration for students and then explains writing the use case descriptions. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
•	http://www.answers.com/topic/use-case?cat=technology&lt;br /&gt;
&lt;br /&gt;
*Level: intermediate&lt;br /&gt;
*Content: long&lt;br /&gt;
 &lt;br /&gt;
This is a comprehensive article that starts off with an overview of use cases and provides an excellent reference for how to write use cases. It also comments on various types of use-cases based on the functionality (business/system) or degree of detail (brief / casual / fully dressed).  It elaborates on various sections of use case description.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Writing effective use cases ===&lt;br /&gt;
&lt;br /&gt;
•	http://www.gatherspace.com/static/use_case_example.html&lt;br /&gt;
&lt;br /&gt;
*Level: intermediate / advanced &lt;br /&gt;
*Content: long&lt;br /&gt;
 &lt;br /&gt;
Explains the art of writing effective use cases by considering an example of writing use cases for a mock Ebay site. The practical nature of the example makes it an interesting exercise. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
•	http://alistair.cockburn.us/index.php/Sampler_of_good_%26_bad_use_cases&lt;br /&gt;
&lt;br /&gt;
*Level: intermediate / advanced &lt;br /&gt;
*Content: short&lt;br /&gt;
&lt;br /&gt;
The above link provides some sample good and bad use cases. These can act as Dos and Don'ts for developers.&lt;br /&gt;
&lt;br /&gt;
== '''Format/Template of use cases''' ==&lt;br /&gt;
It's useful to have a template for use case so that there are less chances of missing out on anything.&lt;br /&gt;
&lt;br /&gt;
•	http://alistair.cockburn.us/index.php/Basic_use_case_template&lt;br /&gt;
&lt;br /&gt;
An excellent link which shows how to structure use cases. Provides different use case templates.&lt;br /&gt;
&lt;br /&gt;
== '''Use case diagrams''' ==&lt;br /&gt;
&lt;br /&gt;
Pictorial representation of the use case is depicted using use case diagrams. Here are the links to use case diagram tutorials.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
•	http://en.wikipedia.org/wiki/Use_case_diagram&lt;br /&gt;
&lt;br /&gt;
*Level: basic /intermediate&lt;br /&gt;
*Content: medium&lt;br /&gt;
&lt;br /&gt;
This wiki link contains representation of use case generalization along with the notations for use case relationships like extend include.&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
•	http://www.agilemodeling.com/artifacts/useCaseDiagram.htm&lt;br /&gt;
&lt;br /&gt;
•       http://www.andrew.cmu.edu/course/90-754/umlucdfaq.html#uses&lt;br /&gt;
&lt;br /&gt;
*Level: intermediate&lt;br /&gt;
*Content: medium&lt;br /&gt;
&lt;br /&gt;
The above links cover creation and understanding of Use Case Diagrams&lt;br /&gt;
&lt;br /&gt;
== '''Examples'''== &lt;br /&gt;
&lt;br /&gt;
===Beginner===&lt;br /&gt;
&lt;br /&gt;
• http://www.objectmentor.com/resources/articles/usecases.pdf &lt;br /&gt;
&lt;br /&gt;
*	Level : Beginner&lt;br /&gt;
*	Content :Short&lt;br /&gt;
&lt;br /&gt;
This provides a simple example and explains use cases with use case diagrams for some of the functionalities. &lt;br /&gt;
&lt;br /&gt;
• http://www.w3.org/2002/06/ws-example &lt;br /&gt;
&lt;br /&gt;
*	Level : Beginner&lt;br /&gt;
*	Content : Short &lt;br /&gt;
&lt;br /&gt;
This is a comprehensive example.It takes up a travel reservation system and attempts to explain different scenarios like checking availability of tickets,booking flights and hotels.It explains with great detail each scenario.&lt;br /&gt;
&lt;br /&gt;
• http://www.agilemodeling.com/essays/useCaseReuse.htm &lt;br /&gt;
&lt;br /&gt;
*	Level : Beginner&lt;br /&gt;
*	Content : Short &lt;br /&gt;
&lt;br /&gt;
This is example taking up only one scenario ”Enroll in University” uses narrative style of writing a use case.&lt;br /&gt;
&lt;br /&gt;
===Beginner/ Intermediate===&lt;br /&gt;
• http://www.soi.wide.ad.jp/class/20040034/slides/07/9.html &lt;br /&gt;
&lt;br /&gt;
*	Level :Beginner/Intermediate&lt;br /&gt;
*	Content : Long&lt;br /&gt;
&lt;br /&gt;
This is an excellent presentation which takes up a real-life ‘elevator’ example and provides multiple use-case descriptions for use cases.Since it relates to the real world it is easy for beginners to understand. &lt;br /&gt;
&lt;br /&gt;
• http://www.cs.colorado.edu/~kena/classes/6448/s05/reference/usecases/examples.html &lt;br /&gt;
&lt;br /&gt;
*	Level :Beginner/Intermediate&lt;br /&gt;
*	Content : Short&lt;br /&gt;
&lt;br /&gt;
This is a one-page guide that illustrates the use case briefs, user-level and summary level use case given the actor-goal list and narrative of the system from the user. &lt;br /&gt;
&lt;br /&gt;
• http://courses.softlab.ntua.gr/softeng/Tutorials/UML-Use-Cases.pdf &lt;br /&gt;
&lt;br /&gt;
*	Level : Beginner/Intermediate&lt;br /&gt;
*	Content : Medium&lt;br /&gt;
&lt;br /&gt;
This is an excellent example describing how to write use cases for different scenarios in a system. It takes up a courseware example breaking down different scenarios and explaining use cases.&lt;br /&gt;
&lt;br /&gt;
===Advanced===&lt;br /&gt;
• http://www.se.cuhk.edu.hk/~seg3430/2007/tutorial/tutorial04.pdf &lt;br /&gt;
&lt;br /&gt;
*	Level : Intermediate/Advanced&lt;br /&gt;
*	Content : Long&lt;br /&gt;
&lt;br /&gt;
Though quite long, this link describes use cases for a credit card payment service.&lt;br /&gt;
&lt;br /&gt;
== '''Advanced Concepts''' ==&lt;br /&gt;
&lt;br /&gt;
'''Pluggable use cases''':&lt;br /&gt;
&lt;br /&gt;
http://alistair.cockburn.us/index.php/Pluggable_use_cases&lt;br /&gt;
&lt;br /&gt;
This introduces readers to concept of Pluggable use cases. &lt;br /&gt;
&lt;br /&gt;
'''Essential use-cases''':&lt;br /&gt;
&lt;br /&gt;
http://www.agilemodeling.com/artifacts/essentialUseCase.htm&lt;br /&gt;
&lt;br /&gt;
Essential use-case can be thought of as a less verbose and more succint version of the use case description. This document compares the traditional use case to essential use case.&lt;br /&gt;
&lt;br /&gt;
'''Future direction:'''&lt;br /&gt;
&lt;br /&gt;
http://alistair.cockburn.us/index.php/Use_cases%2C_ten_years_later&lt;br /&gt;
&lt;br /&gt;
This article predicts the direction of future research in the field of use cases.&lt;br /&gt;
&lt;br /&gt;
== '''Tools''' ==&lt;br /&gt;
&lt;br /&gt;
'''Rational Rose:''' &lt;br /&gt;
&lt;br /&gt;
One of the most popular tool for use-case driven development.&lt;br /&gt;
&lt;br /&gt;
http://www-306.ibm.com/software/awdtools/developer/rose/index.html&lt;br /&gt;
&lt;br /&gt;
'''Sun Java Studio Enterprise:''' &lt;br /&gt;
&lt;br /&gt;
Sun Java Studio Enterprise offers a UML tool. &lt;br /&gt;
&lt;br /&gt;
http://developers.sun.com/jsenterprise/&lt;br /&gt;
&lt;br /&gt;
'''Visual case:''' &lt;br /&gt;
&lt;br /&gt;
UML &amp;amp; E/R Database Design Tool&lt;br /&gt;
&lt;br /&gt;
http://www.visualcase.com/&lt;br /&gt;
&lt;br /&gt;
== Quick references ==&lt;br /&gt;
&lt;br /&gt;
Some quick references for studying use cases&lt;br /&gt;
&lt;br /&gt;
•	http://www.oreilly.com.cn/samplechap/uml20inanutshell/UML20-ch07.pdf&lt;br /&gt;
&lt;br /&gt;
•	http://www.cs.rit.edu/~jaa/CS4/Lectures/UseCase.PDF&lt;br /&gt;
&lt;br /&gt;
•	http://www.alagad.com/go/blog-entry/uml-use-case-diagrams&lt;br /&gt;
&lt;br /&gt;
•	http://www.cs.nmsu.edu/~jeffery/courses/371/lecture.html&lt;br /&gt;
&lt;br /&gt;
== Good Tutorials ==&lt;br /&gt;
&lt;br /&gt;
•	http://www.parlezuml.com/tutorials/usecases/usecases.pdf&lt;br /&gt;
&lt;br /&gt;
•	http://www.readysetpro.com/whitepapers/usecasetut.html &lt;br /&gt;
&lt;br /&gt;
Two very easy and informative tutorials for beginners who are not familiar with use cases. Both the tutorials contain some very good and simple examples coupled with easily understandable pictures. The first tutorial focuses on use case driven development and UML diagrams while the second deals with writing effective use cases.&lt;br /&gt;
&lt;br /&gt;
== Presentations Online ==&lt;br /&gt;
&lt;br /&gt;
•	https://users.cs.jmu.edu/bernstdh/web/common/lectures/slides_use-cases.php&lt;br /&gt;
&lt;br /&gt;
This presentation describes writing use cases along with constructing use case diagrams&lt;br /&gt;
&lt;br /&gt;
•	http://www-rohan.sdsu.edu/faculty/rnorman/course/ids306/Lect_c4.ppt&lt;br /&gt;
&lt;br /&gt;
This is a very good presentation that explains the concepts with familiar real life examples.&lt;br /&gt;
&lt;br /&gt;
•	http://www.cragsystems.com/SFRWUC/index.htm&lt;br /&gt;
&lt;br /&gt;
This web-based tutorial describes creating a Use Case Model of the functional requirements for a computer system.&lt;br /&gt;
&lt;br /&gt;
== Books ==&lt;br /&gt;
&lt;br /&gt;
Following are good books for learning use cases&lt;br /&gt;
&lt;br /&gt;
[[http://www.amazon.com/Writing-Effective-Cases-Alistair-Cockburn/dp/0201702258 Writing Effective Use Cases by Alistair Cockburn ]]&lt;br /&gt;
&lt;br /&gt;
[[http://www.amazon.com/Object-Oriented-Software-Engineering-Driven-Approach/dp/0201544350 Object-Oriented Software Engineering: A Use Case Driven Approach by Ivar Jacobson ]]&lt;br /&gt;
&lt;br /&gt;
== References on the Web ==&lt;br /&gt;
&lt;br /&gt;
'''Books:'''&lt;br /&gt;
&lt;br /&gt;
1.	Jocabson, Ivar. Basic Use-Case modeling, Report on Object Analysis and Design, 1(2): 15-19, 1994 &lt;br /&gt;
&lt;br /&gt;
2.	Jocabson, Ivar. Baisc Use-Case Modeling (Continued), Report on Object Analysis and Design, 1(3): 7-9, 1994 &lt;br /&gt;
&lt;br /&gt;
3.	Rumbaugh, James. Journal of Object-Oriented Programming: 8-12, 23, Sept. 1994&lt;br /&gt;
&lt;br /&gt;
'''Online Resources:'''&lt;br /&gt;
&lt;br /&gt;
Alistair Cockburn Home Page: http://alistair.cockburn.us/index.php/Main_Page&lt;br /&gt;
&lt;br /&gt;
Tutorial links: http://www.answers.com/topic/use-case?cat=technology&lt;br /&gt;
&lt;br /&gt;
All the links mentioned in the review.&lt;/div&gt;</summary>
		<author><name>Nnmodak</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2007/wiki2_4_np&amp;diff=8075</id>
		<title>CSC/ECE 517 Fall 2007/wiki2 4 np</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2007/wiki2_4_np&amp;diff=8075"/>
		<updated>2007-10-29T21:43:53Z</updated>

		<summary type="html">&lt;p&gt;Nnmodak: /* Advanced Concepts */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''Use cases. There are even more pages on the Web on use cases than on MVC. If someone wants to learn about them, what should (s)he do? Look at the first few hits in Google? I expect we can do better than that. Write a review of the use-case sites on the Web. Which are best for learning about the concept? Which have the most instructive examples? Which teach advanced concepts that are not apparent in perusing most use-case sites? Read at least several dozen pages before deciding how to organize your overview''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== '''What are use cases''' ==&lt;br /&gt;
&lt;br /&gt;
A use case is a technique used in software and systems engineering to capture the functional requirements of a system.&lt;br /&gt;
&lt;br /&gt;
They describe in a sequence of steps,the interaction between the initiator of the interaction—and the system itself.&lt;br /&gt;
The initiator of the interaction is called as Actor. Actors can be end users,hardware devices or other systems,basically someone who takes part in the series of activities in a system.&lt;br /&gt;
&lt;br /&gt;
Each use case is a complete series of events, from the point of view of the actor.One or more scenarios may be generated from each use case, corresponding to the detail of each possible way of achieving that goal.&lt;br /&gt;
&lt;br /&gt;
There are numerous websites and resources on the topic of “Use cases”. We attempt to provide a guide to most useful ones among them. The rest of this page provides links to websites which provide more in depth information describing the use of use cases,use cases templates, examples, and advanced concepts , along with reviews of those sites.&lt;br /&gt;
&lt;br /&gt;
The links are grouped as per the topics which will make it easy to find a related site.Within the group We have compared these on the basis of following criteria:&lt;br /&gt;
&lt;br /&gt;
Level: beginner / intermediate / advanced&lt;br /&gt;
&lt;br /&gt;
Content: short / medium / long&lt;br /&gt;
&lt;br /&gt;
== '''Introduction''' ==&lt;br /&gt;
&lt;br /&gt;
These are introductory tutorials explaining the basics of use cases. Most of them are short and priliminary. &lt;br /&gt;
&lt;br /&gt;
===Beginner===&lt;br /&gt;
&lt;br /&gt;
•	http://www.cragsystems.com/SFRWUC/index.htm&lt;br /&gt;
&lt;br /&gt;
*Level: beginner           &lt;br /&gt;
*Content: long&lt;br /&gt;
&lt;br /&gt;
This is a web-based tutorial that introduces beginners to use cases. It clearly illustrates with appropriate examples the concepts related to use cases. It further describes application of use cases in documenting functional requirements. It also has a short &lt;br /&gt;
quiz, a test and an exercise at the end. Excellent navigation is a plus.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
•	http://www.csc.calpoly.edu/~dbutler/tutorials/winter96/use/&lt;br /&gt;
&lt;br /&gt;
*Level: beginner           &lt;br /&gt;
*Content: short&lt;br /&gt;
&lt;br /&gt;
This short tutorial discusses how use-cases fit into the framework of user-centered analysis. It gives a sample use case of ATM cash withdrawal. It also describes the role of use cases in design and testing phase.&lt;br /&gt;
&lt;br /&gt;
===Beginner /intermediate===&lt;br /&gt;
&lt;br /&gt;
•	http://en.wikipedia.org/wiki/Use_case&lt;br /&gt;
&lt;br /&gt;
*Level: beginner / intermediate         &lt;br /&gt;
*Content: medium&lt;br /&gt;
&lt;br /&gt;
This wiki provides an introduction to use case concepts in very simple terms, so seems to be a good starting point for early beginners. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
•	http://www.parlezuml.com/tutorials/usecases/usecases_intro.pdf&lt;br /&gt;
&lt;br /&gt;
•	http://parlezuml.com/tutorials/usecases/usecases.pdf&lt;br /&gt;
&lt;br /&gt;
*Level: beginner / intermediate         &lt;br /&gt;
*Content: short&lt;br /&gt;
&lt;br /&gt;
These are very short and simple tutorials by Jason Gorman that explain the basics of use cases. Apart from use cases, the author covers the related concepts such as actors, system, scenarios. He also explains special use cases: &amp;lt;&amp;lt;extend&amp;gt;&amp;gt; and &amp;lt;&amp;lt;include&amp;gt;&amp;gt; and provides a brief explanation of how use cases can be part of agile development process.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
•	http://www.bredemeyer.com/use_cases.htm&lt;br /&gt;
&lt;br /&gt;
*Level: beginner / intermediate         &lt;br /&gt;
*Content: short&lt;br /&gt;
&lt;br /&gt;
This is a one-page document illustrating how use cases can be effective means to gather functional requirements. It provides valuable pointers to other use-case resources. Though short, it is quite informative for new learners.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
•	http://alistair.cockburn.us/index.php/Use_case_fundamentals&lt;br /&gt;
&lt;br /&gt;
*Level: beginner / intermediate         &lt;br /&gt;
*Content: short&lt;br /&gt;
&lt;br /&gt;
This is a good website which deals with the scope of use cases..It provides a&lt;br /&gt;
brief description of use cases and actors along with analysis of use case reports.It &lt;br /&gt;
also describes steps involved in validation of use cases.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
•	http://courses.softlab.ntua.gr/softeng/Tutorials/UML-Use-Cases.pdf&lt;br /&gt;
&lt;br /&gt;
*Level: beginner / intermediate         &lt;br /&gt;
*Content: medium&lt;br /&gt;
&lt;br /&gt;
This presentation offers succinct definitions for various terms related to use cases, also provides notational guide for documenting use case diagrams. It explains how to build scenarios ( flow of events in a use case).&lt;br /&gt;
&lt;br /&gt;
===Advanced===&lt;br /&gt;
&lt;br /&gt;
•	http://alistair.cockburn.us/index.php/Structuring_use_cases_with_goals&lt;br /&gt;
&lt;br /&gt;
*Level: intermediate / advanced         &lt;br /&gt;
*Content: long&lt;br /&gt;
&lt;br /&gt;
Here is a great guide to use cases by Alistair Cockburn, a renowned strategist and one of the leaders of agile movement. Though the article quite reader-friendly, it expects the reader to be familiar with at least the basic concepts. It offers brief descriptions of terms involved and analysis of use case reports.&lt;br /&gt;
&lt;br /&gt;
== '''How to write use cases''' ==&lt;br /&gt;
&lt;br /&gt;
Writing use cases are not confined to drawing use case diagram. Rather, a written use case is a brief but complete text description of every identified use case (functionality) of the system identified. Some of the instructive articles on this topic are as follows&lt;br /&gt;
&lt;br /&gt;
===Beginner===&lt;br /&gt;
&lt;br /&gt;
•	http://infogenium.typepad.com/inside_infogenium/2007/07/getting-started.html&lt;br /&gt;
&lt;br /&gt;
*Level: beginner&lt;br /&gt;
*Content: short&lt;br /&gt;
&lt;br /&gt;
Here is a short tutorial for developers that are intimidated by the requirement documentation phase using the use cases. It explains the steps involved in capturing the requirements, introduces the concept of use-case brief. It illustrates the concepts with a file attachment example.&lt;br /&gt;
&lt;br /&gt;
===Intermediate===&lt;br /&gt;
&lt;br /&gt;
•	http://www.informit.com/articles/article.aspx?p=30084&amp;amp;seqNum=8&amp;amp;rl=1&lt;br /&gt;
&lt;br /&gt;
*Level: intermediate&lt;br /&gt;
*Content: medium&lt;br /&gt;
&lt;br /&gt;
Here is an article that clearly distinguishes between a good use case and a bad use case. It gives an example of course registration for students and then explains writing the use case descriptions. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
•	http://www.answers.com/topic/use-case?cat=technology&lt;br /&gt;
&lt;br /&gt;
*Level: intermediate&lt;br /&gt;
*Content: long&lt;br /&gt;
 &lt;br /&gt;
This is a comprehensive article that starts off with an overview of use cases and provides an excellent reference for how to write use cases. It also comments on various types of use-cases based on the functionality (business/system) or degree of detail (brief / casual / fully dressed).  It elaborates on various sections of use case description.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Writing effective use cases ===&lt;br /&gt;
&lt;br /&gt;
•	http://www.gatherspace.com/static/use_case_example.html&lt;br /&gt;
&lt;br /&gt;
*Level: intermediate / advanced &lt;br /&gt;
*Content: long&lt;br /&gt;
 &lt;br /&gt;
Explains the art of writing effective use cases by considering an example of writing use cases for a mock Ebay site. The practical nature of the example makes it an interesting exercise. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
•	http://alistair.cockburn.us/index.php/Sampler_of_good_%26_bad_use_cases&lt;br /&gt;
&lt;br /&gt;
*Level: intermediate / advanced &lt;br /&gt;
*Content: short&lt;br /&gt;
&lt;br /&gt;
The above link provides some sample good and bad use cases. These can act as Dos and Don'ts for developers.&lt;br /&gt;
&lt;br /&gt;
== '''Format/Template of use cases''' ==&lt;br /&gt;
It's useful to have a template for use case so that there are less chances of missing out on anything.&lt;br /&gt;
&lt;br /&gt;
•	http://alistair.cockburn.us/index.php/Basic_use_case_template&lt;br /&gt;
&lt;br /&gt;
An excellent link which shows how to structure use cases. Provides different use case templates.&lt;br /&gt;
&lt;br /&gt;
== '''Use case diagrams''' ==&lt;br /&gt;
&lt;br /&gt;
Pictorial representation of the use case is depicted using use case diagrams. Here are the links to use case diagram tutorials.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
•	http://en.wikipedia.org/wiki/Use_case_diagram&lt;br /&gt;
&lt;br /&gt;
*Level: basic /intermediate&lt;br /&gt;
*Content: medium&lt;br /&gt;
&lt;br /&gt;
This wiki link contains representation of use case generalization along with the notations for use case relationships like extend include.&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
•	http://www.agilemodeling.com/artifacts/useCaseDiagram.htm&lt;br /&gt;
&lt;br /&gt;
•       http://www.andrew.cmu.edu/course/90-754/umlucdfaq.html#uses&lt;br /&gt;
&lt;br /&gt;
*Level: intermediate&lt;br /&gt;
*Content: medium&lt;br /&gt;
&lt;br /&gt;
The above links cover creation and understanding of Use Case Diagrams&lt;br /&gt;
&lt;br /&gt;
== '''Examples'''== &lt;br /&gt;
&lt;br /&gt;
===Beginner===&lt;br /&gt;
&lt;br /&gt;
• http://www.objectmentor.com/resources/articles/usecases.pdf &lt;br /&gt;
&lt;br /&gt;
*	Level : Beginner&lt;br /&gt;
*	Content :Short&lt;br /&gt;
&lt;br /&gt;
This provides a simple example and explains use cases with use case diagrams for some of the functionalities. &lt;br /&gt;
&lt;br /&gt;
• http://www.w3.org/2002/06/ws-example &lt;br /&gt;
&lt;br /&gt;
*	Level : Beginner&lt;br /&gt;
*	Content : Short &lt;br /&gt;
&lt;br /&gt;
This is a comprehensive example.It takes up a travel reservation system and attempts to explain different scenarios like checking availability of tickets,booking flights and hotels.It explains with great detail each scenario.&lt;br /&gt;
&lt;br /&gt;
• http://www.agilemodeling.com/essays/useCaseReuse.htm &lt;br /&gt;
&lt;br /&gt;
*	Level : Beginner&lt;br /&gt;
*	Content : Short &lt;br /&gt;
&lt;br /&gt;
This is example taking up only one scenario ”Enroll in University” uses narrative style of writing a use case.&lt;br /&gt;
&lt;br /&gt;
===Beginner/ Intermediate===&lt;br /&gt;
• http://www.soi.wide.ad.jp/class/20040034/slides/07/9.html &lt;br /&gt;
&lt;br /&gt;
*	Level :Beginner/Intermediate&lt;br /&gt;
*	Content : Long&lt;br /&gt;
&lt;br /&gt;
This is an excellent presentation which takes up a real-life ‘elevator’ example and provides multiple use-case descriptions for use cases.Since it relates to the real world it is easy for beginners to understand. &lt;br /&gt;
&lt;br /&gt;
• http://www.cs.colorado.edu/~kena/classes/6448/s05/reference/usecases/examples.html &lt;br /&gt;
&lt;br /&gt;
*	Level :Beginner/Intermediate&lt;br /&gt;
*	Content : Short&lt;br /&gt;
&lt;br /&gt;
This is a one-page guide that illustrates the use case briefs, user-level and summary level use case given the actor-goal list and narrative of the system from the user. &lt;br /&gt;
&lt;br /&gt;
• http://courses.softlab.ntua.gr/softeng/Tutorials/UML-Use-Cases.pdf &lt;br /&gt;
&lt;br /&gt;
*	Level : Beginner/Intermediate&lt;br /&gt;
*	Content : Medium&lt;br /&gt;
&lt;br /&gt;
This is an excellent example describing how to write use cases for different scenarios in a system. It takes up a courseware example breaking down different scenarios and explaining use cases.&lt;br /&gt;
&lt;br /&gt;
===Advanced===&lt;br /&gt;
• http://www.se.cuhk.edu.hk/~seg3430/2007/tutorial/tutorial04.pdf &lt;br /&gt;
&lt;br /&gt;
*	Level : Intermediate/Advanced&lt;br /&gt;
*	Content : Long&lt;br /&gt;
&lt;br /&gt;
Though quite long, this link describes use cases for a credit card payment service.&lt;br /&gt;
&lt;br /&gt;
== '''Advanced Concepts''' ==&lt;br /&gt;
&lt;br /&gt;
'''Pluggable use cases''':&lt;br /&gt;
&lt;br /&gt;
http://alistair.cockburn.us/index.php/Pluggable_use_cases&lt;br /&gt;
&lt;br /&gt;
This introduces readers to concept of Pluggable use cases. &lt;br /&gt;
&lt;br /&gt;
'''Essential use-cases''':&lt;br /&gt;
&lt;br /&gt;
http://www.agilemodeling.com/artifacts/essentialUseCase.htm&lt;br /&gt;
&lt;br /&gt;
Essential use-case can be thought of as a less verbose and more succint version of the use case description. This document compares the traditional use case to essential use case.&lt;br /&gt;
&lt;br /&gt;
'''Future direction:'''&lt;br /&gt;
&lt;br /&gt;
http://alistair.cockburn.us/index.php/Use_cases%2C_ten_years_later&lt;br /&gt;
&lt;br /&gt;
This article predicts the direction of future research in the field of use cases.&lt;br /&gt;
&lt;br /&gt;
== Tools ==&lt;br /&gt;
&lt;br /&gt;
'''Rational Rose:''' &lt;br /&gt;
&lt;br /&gt;
One of the most popular tool for use-case driven development.&lt;br /&gt;
&lt;br /&gt;
http://www-306.ibm.com/software/awdtools/developer/rose/index.html&lt;br /&gt;
&lt;br /&gt;
'''Sun Java Studio Enterprise:''' &lt;br /&gt;
&lt;br /&gt;
Sun Java Studio Enterprise offers a UML tool. &lt;br /&gt;
&lt;br /&gt;
http://developers.sun.com/jsenterprise/&lt;br /&gt;
&lt;br /&gt;
'''Visual case:''' &lt;br /&gt;
&lt;br /&gt;
UML &amp;amp; E/R Database Design Tool&lt;br /&gt;
&lt;br /&gt;
http://www.visualcase.com/&lt;br /&gt;
&lt;br /&gt;
== Quick references ==&lt;br /&gt;
&lt;br /&gt;
Some quick references for studying use cases&lt;br /&gt;
&lt;br /&gt;
•	http://www.oreilly.com.cn/samplechap/uml20inanutshell/UML20-ch07.pdf&lt;br /&gt;
&lt;br /&gt;
•	http://www.cs.rit.edu/~jaa/CS4/Lectures/UseCase.PDF&lt;br /&gt;
&lt;br /&gt;
•	http://www.alagad.com/go/blog-entry/uml-use-case-diagrams&lt;br /&gt;
&lt;br /&gt;
•	http://www.cs.nmsu.edu/~jeffery/courses/371/lecture.html&lt;br /&gt;
&lt;br /&gt;
== Good Tutorials ==&lt;br /&gt;
&lt;br /&gt;
•	http://www.parlezuml.com/tutorials/usecases/usecases.pdf&lt;br /&gt;
&lt;br /&gt;
•	http://www.readysetpro.com/whitepapers/usecasetut.html &lt;br /&gt;
&lt;br /&gt;
Two very easy and informative tutorials for beginners who are not familiar with use cases. Both the tutorials contain some very good and simple examples coupled with easily understandable pictures. The first tutorial focuses on use case driven development and UML diagrams while the second deals with writing effective use cases.&lt;br /&gt;
&lt;br /&gt;
== Presentations Online ==&lt;br /&gt;
&lt;br /&gt;
•	https://users.cs.jmu.edu/bernstdh/web/common/lectures/slides_use-cases.php&lt;br /&gt;
&lt;br /&gt;
This presentation describes writing use cases along with constructing use case diagrams&lt;br /&gt;
&lt;br /&gt;
•	http://www-rohan.sdsu.edu/faculty/rnorman/course/ids306/Lect_c4.ppt&lt;br /&gt;
&lt;br /&gt;
This is a very good presentation that explains the concepts with familiar real life examples.&lt;br /&gt;
&lt;br /&gt;
•	http://www.cragsystems.com/SFRWUC/index.htm&lt;br /&gt;
&lt;br /&gt;
This web-based tutorial describes creating a Use Case Model of the functional requirements for a computer system.&lt;br /&gt;
&lt;br /&gt;
== Books ==&lt;br /&gt;
&lt;br /&gt;
Following are good books for learning use cases&lt;br /&gt;
&lt;br /&gt;
[[http://www.amazon.com/Writing-Effective-Cases-Alistair-Cockburn/dp/0201702258 Writing Effective Use Cases by Alistair Cockburn ]]&lt;br /&gt;
&lt;br /&gt;
[[http://www.amazon.com/Object-Oriented-Software-Engineering-Driven-Approach/dp/0201544350 Object-Oriented Software Engineering: A Use Case Driven Approach by Ivar Jacobson ]]&lt;br /&gt;
&lt;br /&gt;
== References on the Web ==&lt;br /&gt;
&lt;br /&gt;
'''Books:'''&lt;br /&gt;
&lt;br /&gt;
1.	Jocabson, Ivar. Basic Use-Case modeling, Report on Object Analysis and Design, 1(2): 15-19, 1994 &lt;br /&gt;
&lt;br /&gt;
2.	Jocabson, Ivar. Baisc Use-Case Modeling (Continued), Report on Object Analysis and Design, 1(3): 7-9, 1994 &lt;br /&gt;
&lt;br /&gt;
3.	Rumbaugh, James. Journal of Object-Oriented Programming: 8-12, 23, Sept. 1994&lt;br /&gt;
&lt;br /&gt;
'''Online Resources:'''&lt;br /&gt;
&lt;br /&gt;
Alistair Cockburn Home Page: http://alistair.cockburn.us/index.php/Main_Page&lt;br /&gt;
&lt;br /&gt;
Tutorial links: http://www.answers.com/topic/use-case?cat=technology&lt;br /&gt;
&lt;br /&gt;
All the links mentioned in the review.&lt;/div&gt;</summary>
		<author><name>Nnmodak</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2007/wiki2_4_np&amp;diff=8074</id>
		<title>CSC/ECE 517 Fall 2007/wiki2 4 np</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2007/wiki2_4_np&amp;diff=8074"/>
		<updated>2007-10-29T21:43:26Z</updated>

		<summary type="html">&lt;p&gt;Nnmodak: /* '''Examples''' */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''Use cases. There are even more pages on the Web on use cases than on MVC. If someone wants to learn about them, what should (s)he do? Look at the first few hits in Google? I expect we can do better than that. Write a review of the use-case sites on the Web. Which are best for learning about the concept? Which have the most instructive examples? Which teach advanced concepts that are not apparent in perusing most use-case sites? Read at least several dozen pages before deciding how to organize your overview''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== '''What are use cases''' ==&lt;br /&gt;
&lt;br /&gt;
A use case is a technique used in software and systems engineering to capture the functional requirements of a system.&lt;br /&gt;
&lt;br /&gt;
They describe in a sequence of steps,the interaction between the initiator of the interaction—and the system itself.&lt;br /&gt;
The initiator of the interaction is called as Actor. Actors can be end users,hardware devices or other systems,basically someone who takes part in the series of activities in a system.&lt;br /&gt;
&lt;br /&gt;
Each use case is a complete series of events, from the point of view of the actor.One or more scenarios may be generated from each use case, corresponding to the detail of each possible way of achieving that goal.&lt;br /&gt;
&lt;br /&gt;
There are numerous websites and resources on the topic of “Use cases”. We attempt to provide a guide to most useful ones among them. The rest of this page provides links to websites which provide more in depth information describing the use of use cases,use cases templates, examples, and advanced concepts , along with reviews of those sites.&lt;br /&gt;
&lt;br /&gt;
The links are grouped as per the topics which will make it easy to find a related site.Within the group We have compared these on the basis of following criteria:&lt;br /&gt;
&lt;br /&gt;
Level: beginner / intermediate / advanced&lt;br /&gt;
&lt;br /&gt;
Content: short / medium / long&lt;br /&gt;
&lt;br /&gt;
== '''Introduction''' ==&lt;br /&gt;
&lt;br /&gt;
These are introductory tutorials explaining the basics of use cases. Most of them are short and priliminary. &lt;br /&gt;
&lt;br /&gt;
===Beginner===&lt;br /&gt;
&lt;br /&gt;
•	http://www.cragsystems.com/SFRWUC/index.htm&lt;br /&gt;
&lt;br /&gt;
*Level: beginner           &lt;br /&gt;
*Content: long&lt;br /&gt;
&lt;br /&gt;
This is a web-based tutorial that introduces beginners to use cases. It clearly illustrates with appropriate examples the concepts related to use cases. It further describes application of use cases in documenting functional requirements. It also has a short &lt;br /&gt;
quiz, a test and an exercise at the end. Excellent navigation is a plus.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
•	http://www.csc.calpoly.edu/~dbutler/tutorials/winter96/use/&lt;br /&gt;
&lt;br /&gt;
*Level: beginner           &lt;br /&gt;
*Content: short&lt;br /&gt;
&lt;br /&gt;
This short tutorial discusses how use-cases fit into the framework of user-centered analysis. It gives a sample use case of ATM cash withdrawal. It also describes the role of use cases in design and testing phase.&lt;br /&gt;
&lt;br /&gt;
===Beginner /intermediate===&lt;br /&gt;
&lt;br /&gt;
•	http://en.wikipedia.org/wiki/Use_case&lt;br /&gt;
&lt;br /&gt;
*Level: beginner / intermediate         &lt;br /&gt;
*Content: medium&lt;br /&gt;
&lt;br /&gt;
This wiki provides an introduction to use case concepts in very simple terms, so seems to be a good starting point for early beginners. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
•	http://www.parlezuml.com/tutorials/usecases/usecases_intro.pdf&lt;br /&gt;
&lt;br /&gt;
•	http://parlezuml.com/tutorials/usecases/usecases.pdf&lt;br /&gt;
&lt;br /&gt;
*Level: beginner / intermediate         &lt;br /&gt;
*Content: short&lt;br /&gt;
&lt;br /&gt;
These are very short and simple tutorials by Jason Gorman that explain the basics of use cases. Apart from use cases, the author covers the related concepts such as actors, system, scenarios. He also explains special use cases: &amp;lt;&amp;lt;extend&amp;gt;&amp;gt; and &amp;lt;&amp;lt;include&amp;gt;&amp;gt; and provides a brief explanation of how use cases can be part of agile development process.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
•	http://www.bredemeyer.com/use_cases.htm&lt;br /&gt;
&lt;br /&gt;
*Level: beginner / intermediate         &lt;br /&gt;
*Content: short&lt;br /&gt;
&lt;br /&gt;
This is a one-page document illustrating how use cases can be effective means to gather functional requirements. It provides valuable pointers to other use-case resources. Though short, it is quite informative for new learners.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
•	http://alistair.cockburn.us/index.php/Use_case_fundamentals&lt;br /&gt;
&lt;br /&gt;
*Level: beginner / intermediate         &lt;br /&gt;
*Content: short&lt;br /&gt;
&lt;br /&gt;
This is a good website which deals with the scope of use cases..It provides a&lt;br /&gt;
brief description of use cases and actors along with analysis of use case reports.It &lt;br /&gt;
also describes steps involved in validation of use cases.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
•	http://courses.softlab.ntua.gr/softeng/Tutorials/UML-Use-Cases.pdf&lt;br /&gt;
&lt;br /&gt;
*Level: beginner / intermediate         &lt;br /&gt;
*Content: medium&lt;br /&gt;
&lt;br /&gt;
This presentation offers succinct definitions for various terms related to use cases, also provides notational guide for documenting use case diagrams. It explains how to build scenarios ( flow of events in a use case).&lt;br /&gt;
&lt;br /&gt;
===Advanced===&lt;br /&gt;
&lt;br /&gt;
•	http://alistair.cockburn.us/index.php/Structuring_use_cases_with_goals&lt;br /&gt;
&lt;br /&gt;
*Level: intermediate / advanced         &lt;br /&gt;
*Content: long&lt;br /&gt;
&lt;br /&gt;
Here is a great guide to use cases by Alistair Cockburn, a renowned strategist and one of the leaders of agile movement. Though the article quite reader-friendly, it expects the reader to be familiar with at least the basic concepts. It offers brief descriptions of terms involved and analysis of use case reports.&lt;br /&gt;
&lt;br /&gt;
== '''How to write use cases''' ==&lt;br /&gt;
&lt;br /&gt;
Writing use cases are not confined to drawing use case diagram. Rather, a written use case is a brief but complete text description of every identified use case (functionality) of the system identified. Some of the instructive articles on this topic are as follows&lt;br /&gt;
&lt;br /&gt;
===Beginner===&lt;br /&gt;
&lt;br /&gt;
•	http://infogenium.typepad.com/inside_infogenium/2007/07/getting-started.html&lt;br /&gt;
&lt;br /&gt;
*Level: beginner&lt;br /&gt;
*Content: short&lt;br /&gt;
&lt;br /&gt;
Here is a short tutorial for developers that are intimidated by the requirement documentation phase using the use cases. It explains the steps involved in capturing the requirements, introduces the concept of use-case brief. It illustrates the concepts with a file attachment example.&lt;br /&gt;
&lt;br /&gt;
===Intermediate===&lt;br /&gt;
&lt;br /&gt;
•	http://www.informit.com/articles/article.aspx?p=30084&amp;amp;seqNum=8&amp;amp;rl=1&lt;br /&gt;
&lt;br /&gt;
*Level: intermediate&lt;br /&gt;
*Content: medium&lt;br /&gt;
&lt;br /&gt;
Here is an article that clearly distinguishes between a good use case and a bad use case. It gives an example of course registration for students and then explains writing the use case descriptions. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
•	http://www.answers.com/topic/use-case?cat=technology&lt;br /&gt;
&lt;br /&gt;
*Level: intermediate&lt;br /&gt;
*Content: long&lt;br /&gt;
 &lt;br /&gt;
This is a comprehensive article that starts off with an overview of use cases and provides an excellent reference for how to write use cases. It also comments on various types of use-cases based on the functionality (business/system) or degree of detail (brief / casual / fully dressed).  It elaborates on various sections of use case description.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Writing effective use cases ===&lt;br /&gt;
&lt;br /&gt;
•	http://www.gatherspace.com/static/use_case_example.html&lt;br /&gt;
&lt;br /&gt;
*Level: intermediate / advanced &lt;br /&gt;
*Content: long&lt;br /&gt;
 &lt;br /&gt;
Explains the art of writing effective use cases by considering an example of writing use cases for a mock Ebay site. The practical nature of the example makes it an interesting exercise. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
•	http://alistair.cockburn.us/index.php/Sampler_of_good_%26_bad_use_cases&lt;br /&gt;
&lt;br /&gt;
*Level: intermediate / advanced &lt;br /&gt;
*Content: short&lt;br /&gt;
&lt;br /&gt;
The above link provides some sample good and bad use cases. These can act as Dos and Don'ts for developers.&lt;br /&gt;
&lt;br /&gt;
== '''Format/Template of use cases''' ==&lt;br /&gt;
It's useful to have a template for use case so that there are less chances of missing out on anything.&lt;br /&gt;
&lt;br /&gt;
•	http://alistair.cockburn.us/index.php/Basic_use_case_template&lt;br /&gt;
&lt;br /&gt;
An excellent link which shows how to structure use cases. Provides different use case templates.&lt;br /&gt;
&lt;br /&gt;
== '''Use case diagrams''' ==&lt;br /&gt;
&lt;br /&gt;
Pictorial representation of the use case is depicted using use case diagrams. Here are the links to use case diagram tutorials.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
•	http://en.wikipedia.org/wiki/Use_case_diagram&lt;br /&gt;
&lt;br /&gt;
*Level: basic /intermediate&lt;br /&gt;
*Content: medium&lt;br /&gt;
&lt;br /&gt;
This wiki link contains representation of use case generalization along with the notations for use case relationships like extend include.&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
•	http://www.agilemodeling.com/artifacts/useCaseDiagram.htm&lt;br /&gt;
&lt;br /&gt;
•       http://www.andrew.cmu.edu/course/90-754/umlucdfaq.html#uses&lt;br /&gt;
&lt;br /&gt;
*Level: intermediate&lt;br /&gt;
*Content: medium&lt;br /&gt;
&lt;br /&gt;
The above links cover creation and understanding of Use Case Diagrams&lt;br /&gt;
&lt;br /&gt;
== '''Examples'''== &lt;br /&gt;
&lt;br /&gt;
===Beginner===&lt;br /&gt;
&lt;br /&gt;
• http://www.objectmentor.com/resources/articles/usecases.pdf &lt;br /&gt;
&lt;br /&gt;
*	Level : Beginner&lt;br /&gt;
*	Content :Short&lt;br /&gt;
&lt;br /&gt;
This provides a simple example and explains use cases with use case diagrams for some of the functionalities. &lt;br /&gt;
&lt;br /&gt;
• http://www.w3.org/2002/06/ws-example &lt;br /&gt;
&lt;br /&gt;
*	Level : Beginner&lt;br /&gt;
*	Content : Short &lt;br /&gt;
&lt;br /&gt;
This is a comprehensive example.It takes up a travel reservation system and attempts to explain different scenarios like checking availability of tickets,booking flights and hotels.It explains with great detail each scenario.&lt;br /&gt;
&lt;br /&gt;
• http://www.agilemodeling.com/essays/useCaseReuse.htm &lt;br /&gt;
&lt;br /&gt;
*	Level : Beginner&lt;br /&gt;
*	Content : Short &lt;br /&gt;
&lt;br /&gt;
This is example taking up only one scenario ”Enroll in University” uses narrative style of writing a use case.&lt;br /&gt;
&lt;br /&gt;
===Beginner/ Intermediate===&lt;br /&gt;
• http://www.soi.wide.ad.jp/class/20040034/slides/07/9.html &lt;br /&gt;
&lt;br /&gt;
*	Level :Beginner/Intermediate&lt;br /&gt;
*	Content : Long&lt;br /&gt;
&lt;br /&gt;
This is an excellent presentation which takes up a real-life ‘elevator’ example and provides multiple use-case descriptions for use cases.Since it relates to the real world it is easy for beginners to understand. &lt;br /&gt;
&lt;br /&gt;
• http://www.cs.colorado.edu/~kena/classes/6448/s05/reference/usecases/examples.html &lt;br /&gt;
&lt;br /&gt;
*	Level :Beginner/Intermediate&lt;br /&gt;
*	Content : Short&lt;br /&gt;
&lt;br /&gt;
This is a one-page guide that illustrates the use case briefs, user-level and summary level use case given the actor-goal list and narrative of the system from the user. &lt;br /&gt;
&lt;br /&gt;
• http://courses.softlab.ntua.gr/softeng/Tutorials/UML-Use-Cases.pdf &lt;br /&gt;
&lt;br /&gt;
*	Level : Beginner/Intermediate&lt;br /&gt;
*	Content : Medium&lt;br /&gt;
&lt;br /&gt;
This is an excellent example describing how to write use cases for different scenarios in a system. It takes up a courseware example breaking down different scenarios and explaining use cases.&lt;br /&gt;
&lt;br /&gt;
===Advanced===&lt;br /&gt;
• http://www.se.cuhk.edu.hk/~seg3430/2007/tutorial/tutorial04.pdf &lt;br /&gt;
&lt;br /&gt;
*	Level : Intermediate/Advanced&lt;br /&gt;
*	Content : Long&lt;br /&gt;
&lt;br /&gt;
Though quite long, this link describes use cases for a credit card payment service.&lt;br /&gt;
&lt;br /&gt;
== Advanced Concepts ==&lt;br /&gt;
&lt;br /&gt;
'''Pluggable use cases''':&lt;br /&gt;
&lt;br /&gt;
http://alistair.cockburn.us/index.php/Pluggable_use_cases&lt;br /&gt;
&lt;br /&gt;
This introduces readers to concept of Pluggable use cases. &lt;br /&gt;
&lt;br /&gt;
'''Essential use-cases''':&lt;br /&gt;
&lt;br /&gt;
http://www.agilemodeling.com/artifacts/essentialUseCase.htm&lt;br /&gt;
&lt;br /&gt;
Essential use-case can be thought of as a less verbose and more succint version of the use case description. This document compares the traditional use case to essential use case.&lt;br /&gt;
&lt;br /&gt;
'''Future direction:'''&lt;br /&gt;
&lt;br /&gt;
http://alistair.cockburn.us/index.php/Use_cases%2C_ten_years_later&lt;br /&gt;
&lt;br /&gt;
This article predicts the direction of future research in the field of use cases.&lt;br /&gt;
&lt;br /&gt;
== Tools ==&lt;br /&gt;
&lt;br /&gt;
'''Rational Rose:''' &lt;br /&gt;
&lt;br /&gt;
One of the most popular tool for use-case driven development.&lt;br /&gt;
&lt;br /&gt;
http://www-306.ibm.com/software/awdtools/developer/rose/index.html&lt;br /&gt;
&lt;br /&gt;
'''Sun Java Studio Enterprise:''' &lt;br /&gt;
&lt;br /&gt;
Sun Java Studio Enterprise offers a UML tool. &lt;br /&gt;
&lt;br /&gt;
http://developers.sun.com/jsenterprise/&lt;br /&gt;
&lt;br /&gt;
'''Visual case:''' &lt;br /&gt;
&lt;br /&gt;
UML &amp;amp; E/R Database Design Tool&lt;br /&gt;
&lt;br /&gt;
http://www.visualcase.com/&lt;br /&gt;
&lt;br /&gt;
== Quick references ==&lt;br /&gt;
&lt;br /&gt;
Some quick references for studying use cases&lt;br /&gt;
&lt;br /&gt;
•	http://www.oreilly.com.cn/samplechap/uml20inanutshell/UML20-ch07.pdf&lt;br /&gt;
&lt;br /&gt;
•	http://www.cs.rit.edu/~jaa/CS4/Lectures/UseCase.PDF&lt;br /&gt;
&lt;br /&gt;
•	http://www.alagad.com/go/blog-entry/uml-use-case-diagrams&lt;br /&gt;
&lt;br /&gt;
•	http://www.cs.nmsu.edu/~jeffery/courses/371/lecture.html&lt;br /&gt;
&lt;br /&gt;
== Good Tutorials ==&lt;br /&gt;
&lt;br /&gt;
•	http://www.parlezuml.com/tutorials/usecases/usecases.pdf&lt;br /&gt;
&lt;br /&gt;
•	http://www.readysetpro.com/whitepapers/usecasetut.html &lt;br /&gt;
&lt;br /&gt;
Two very easy and informative tutorials for beginners who are not familiar with use cases. Both the tutorials contain some very good and simple examples coupled with easily understandable pictures. The first tutorial focuses on use case driven development and UML diagrams while the second deals with writing effective use cases.&lt;br /&gt;
&lt;br /&gt;
== Presentations Online ==&lt;br /&gt;
&lt;br /&gt;
•	https://users.cs.jmu.edu/bernstdh/web/common/lectures/slides_use-cases.php&lt;br /&gt;
&lt;br /&gt;
This presentation describes writing use cases along with constructing use case diagrams&lt;br /&gt;
&lt;br /&gt;
•	http://www-rohan.sdsu.edu/faculty/rnorman/course/ids306/Lect_c4.ppt&lt;br /&gt;
&lt;br /&gt;
This is a very good presentation that explains the concepts with familiar real life examples.&lt;br /&gt;
&lt;br /&gt;
•	http://www.cragsystems.com/SFRWUC/index.htm&lt;br /&gt;
&lt;br /&gt;
This web-based tutorial describes creating a Use Case Model of the functional requirements for a computer system.&lt;br /&gt;
&lt;br /&gt;
== Books ==&lt;br /&gt;
&lt;br /&gt;
Following are good books for learning use cases&lt;br /&gt;
&lt;br /&gt;
[[http://www.amazon.com/Writing-Effective-Cases-Alistair-Cockburn/dp/0201702258 Writing Effective Use Cases by Alistair Cockburn ]]&lt;br /&gt;
&lt;br /&gt;
[[http://www.amazon.com/Object-Oriented-Software-Engineering-Driven-Approach/dp/0201544350 Object-Oriented Software Engineering: A Use Case Driven Approach by Ivar Jacobson ]]&lt;br /&gt;
&lt;br /&gt;
== References on the Web ==&lt;br /&gt;
&lt;br /&gt;
'''Books:'''&lt;br /&gt;
&lt;br /&gt;
1.	Jocabson, Ivar. Basic Use-Case modeling, Report on Object Analysis and Design, 1(2): 15-19, 1994 &lt;br /&gt;
&lt;br /&gt;
2.	Jocabson, Ivar. Baisc Use-Case Modeling (Continued), Report on Object Analysis and Design, 1(3): 7-9, 1994 &lt;br /&gt;
&lt;br /&gt;
3.	Rumbaugh, James. Journal of Object-Oriented Programming: 8-12, 23, Sept. 1994&lt;br /&gt;
&lt;br /&gt;
'''Online Resources:'''&lt;br /&gt;
&lt;br /&gt;
Alistair Cockburn Home Page: http://alistair.cockburn.us/index.php/Main_Page&lt;br /&gt;
&lt;br /&gt;
Tutorial links: http://www.answers.com/topic/use-case?cat=technology&lt;br /&gt;
&lt;br /&gt;
All the links mentioned in the review.&lt;/div&gt;</summary>
		<author><name>Nnmodak</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2007/wiki2_4_np&amp;diff=8073</id>
		<title>CSC/ECE 517 Fall 2007/wiki2 4 np</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2007/wiki2_4_np&amp;diff=8073"/>
		<updated>2007-10-29T21:42:11Z</updated>

		<summary type="html">&lt;p&gt;Nnmodak: /* Examples */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''Use cases. There are even more pages on the Web on use cases than on MVC. If someone wants to learn about them, what should (s)he do? Look at the first few hits in Google? I expect we can do better than that. Write a review of the use-case sites on the Web. Which are best for learning about the concept? Which have the most instructive examples? Which teach advanced concepts that are not apparent in perusing most use-case sites? Read at least several dozen pages before deciding how to organize your overview''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== '''What are use cases''' ==&lt;br /&gt;
&lt;br /&gt;
A use case is a technique used in software and systems engineering to capture the functional requirements of a system.&lt;br /&gt;
&lt;br /&gt;
They describe in a sequence of steps,the interaction between the initiator of the interaction—and the system itself.&lt;br /&gt;
The initiator of the interaction is called as Actor. Actors can be end users,hardware devices or other systems,basically someone who takes part in the series of activities in a system.&lt;br /&gt;
&lt;br /&gt;
Each use case is a complete series of events, from the point of view of the actor.One or more scenarios may be generated from each use case, corresponding to the detail of each possible way of achieving that goal.&lt;br /&gt;
&lt;br /&gt;
There are numerous websites and resources on the topic of “Use cases”. We attempt to provide a guide to most useful ones among them. The rest of this page provides links to websites which provide more in depth information describing the use of use cases,use cases templates, examples, and advanced concepts , along with reviews of those sites.&lt;br /&gt;
&lt;br /&gt;
The links are grouped as per the topics which will make it easy to find a related site.Within the group We have compared these on the basis of following criteria:&lt;br /&gt;
&lt;br /&gt;
Level: beginner / intermediate / advanced&lt;br /&gt;
&lt;br /&gt;
Content: short / medium / long&lt;br /&gt;
&lt;br /&gt;
== '''Introduction''' ==&lt;br /&gt;
&lt;br /&gt;
These are introductory tutorials explaining the basics of use cases. Most of them are short and priliminary. &lt;br /&gt;
&lt;br /&gt;
===Beginner===&lt;br /&gt;
&lt;br /&gt;
•	http://www.cragsystems.com/SFRWUC/index.htm&lt;br /&gt;
&lt;br /&gt;
*Level: beginner           &lt;br /&gt;
*Content: long&lt;br /&gt;
&lt;br /&gt;
This is a web-based tutorial that introduces beginners to use cases. It clearly illustrates with appropriate examples the concepts related to use cases. It further describes application of use cases in documenting functional requirements. It also has a short &lt;br /&gt;
quiz, a test and an exercise at the end. Excellent navigation is a plus.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
•	http://www.csc.calpoly.edu/~dbutler/tutorials/winter96/use/&lt;br /&gt;
&lt;br /&gt;
*Level: beginner           &lt;br /&gt;
*Content: short&lt;br /&gt;
&lt;br /&gt;
This short tutorial discusses how use-cases fit into the framework of user-centered analysis. It gives a sample use case of ATM cash withdrawal. It also describes the role of use cases in design and testing phase.&lt;br /&gt;
&lt;br /&gt;
===Beginner /intermediate===&lt;br /&gt;
&lt;br /&gt;
•	http://en.wikipedia.org/wiki/Use_case&lt;br /&gt;
&lt;br /&gt;
*Level: beginner / intermediate         &lt;br /&gt;
*Content: medium&lt;br /&gt;
&lt;br /&gt;
This wiki provides an introduction to use case concepts in very simple terms, so seems to be a good starting point for early beginners. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
•	http://www.parlezuml.com/tutorials/usecases/usecases_intro.pdf&lt;br /&gt;
&lt;br /&gt;
•	http://parlezuml.com/tutorials/usecases/usecases.pdf&lt;br /&gt;
&lt;br /&gt;
*Level: beginner / intermediate         &lt;br /&gt;
*Content: short&lt;br /&gt;
&lt;br /&gt;
These are very short and simple tutorials by Jason Gorman that explain the basics of use cases. Apart from use cases, the author covers the related concepts such as actors, system, scenarios. He also explains special use cases: &amp;lt;&amp;lt;extend&amp;gt;&amp;gt; and &amp;lt;&amp;lt;include&amp;gt;&amp;gt; and provides a brief explanation of how use cases can be part of agile development process.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
•	http://www.bredemeyer.com/use_cases.htm&lt;br /&gt;
&lt;br /&gt;
*Level: beginner / intermediate         &lt;br /&gt;
*Content: short&lt;br /&gt;
&lt;br /&gt;
This is a one-page document illustrating how use cases can be effective means to gather functional requirements. It provides valuable pointers to other use-case resources. Though short, it is quite informative for new learners.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
•	http://alistair.cockburn.us/index.php/Use_case_fundamentals&lt;br /&gt;
&lt;br /&gt;
*Level: beginner / intermediate         &lt;br /&gt;
*Content: short&lt;br /&gt;
&lt;br /&gt;
This is a good website which deals with the scope of use cases..It provides a&lt;br /&gt;
brief description of use cases and actors along with analysis of use case reports.It &lt;br /&gt;
also describes steps involved in validation of use cases.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
•	http://courses.softlab.ntua.gr/softeng/Tutorials/UML-Use-Cases.pdf&lt;br /&gt;
&lt;br /&gt;
*Level: beginner / intermediate         &lt;br /&gt;
*Content: medium&lt;br /&gt;
&lt;br /&gt;
This presentation offers succinct definitions for various terms related to use cases, also provides notational guide for documenting use case diagrams. It explains how to build scenarios ( flow of events in a use case).&lt;br /&gt;
&lt;br /&gt;
===Advanced===&lt;br /&gt;
&lt;br /&gt;
•	http://alistair.cockburn.us/index.php/Structuring_use_cases_with_goals&lt;br /&gt;
&lt;br /&gt;
*Level: intermediate / advanced         &lt;br /&gt;
*Content: long&lt;br /&gt;
&lt;br /&gt;
Here is a great guide to use cases by Alistair Cockburn, a renowned strategist and one of the leaders of agile movement. Though the article quite reader-friendly, it expects the reader to be familiar with at least the basic concepts. It offers brief descriptions of terms involved and analysis of use case reports.&lt;br /&gt;
&lt;br /&gt;
== '''How to write use cases''' ==&lt;br /&gt;
&lt;br /&gt;
Writing use cases are not confined to drawing use case diagram. Rather, a written use case is a brief but complete text description of every identified use case (functionality) of the system identified. Some of the instructive articles on this topic are as follows&lt;br /&gt;
&lt;br /&gt;
===Beginner===&lt;br /&gt;
&lt;br /&gt;
•	http://infogenium.typepad.com/inside_infogenium/2007/07/getting-started.html&lt;br /&gt;
&lt;br /&gt;
*Level: beginner&lt;br /&gt;
*Content: short&lt;br /&gt;
&lt;br /&gt;
Here is a short tutorial for developers that are intimidated by the requirement documentation phase using the use cases. It explains the steps involved in capturing the requirements, introduces the concept of use-case brief. It illustrates the concepts with a file attachment example.&lt;br /&gt;
&lt;br /&gt;
===Intermediate===&lt;br /&gt;
&lt;br /&gt;
•	http://www.informit.com/articles/article.aspx?p=30084&amp;amp;seqNum=8&amp;amp;rl=1&lt;br /&gt;
&lt;br /&gt;
*Level: intermediate&lt;br /&gt;
*Content: medium&lt;br /&gt;
&lt;br /&gt;
Here is an article that clearly distinguishes between a good use case and a bad use case. It gives an example of course registration for students and then explains writing the use case descriptions. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
•	http://www.answers.com/topic/use-case?cat=technology&lt;br /&gt;
&lt;br /&gt;
*Level: intermediate&lt;br /&gt;
*Content: long&lt;br /&gt;
 &lt;br /&gt;
This is a comprehensive article that starts off with an overview of use cases and provides an excellent reference for how to write use cases. It also comments on various types of use-cases based on the functionality (business/system) or degree of detail (brief / casual / fully dressed).  It elaborates on various sections of use case description.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Writing effective use cases ===&lt;br /&gt;
&lt;br /&gt;
•	http://www.gatherspace.com/static/use_case_example.html&lt;br /&gt;
&lt;br /&gt;
*Level: intermediate / advanced &lt;br /&gt;
*Content: long&lt;br /&gt;
 &lt;br /&gt;
Explains the art of writing effective use cases by considering an example of writing use cases for a mock Ebay site. The practical nature of the example makes it an interesting exercise. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
•	http://alistair.cockburn.us/index.php/Sampler_of_good_%26_bad_use_cases&lt;br /&gt;
&lt;br /&gt;
*Level: intermediate / advanced &lt;br /&gt;
*Content: short&lt;br /&gt;
&lt;br /&gt;
The above link provides some sample good and bad use cases. These can act as Dos and Don'ts for developers.&lt;br /&gt;
&lt;br /&gt;
== '''Format/Template of use cases''' ==&lt;br /&gt;
It's useful to have a template for use case so that there are less chances of missing out on anything.&lt;br /&gt;
&lt;br /&gt;
•	http://alistair.cockburn.us/index.php/Basic_use_case_template&lt;br /&gt;
&lt;br /&gt;
An excellent link which shows how to structure use cases. Provides different use case templates.&lt;br /&gt;
&lt;br /&gt;
== '''Use case diagrams''' ==&lt;br /&gt;
&lt;br /&gt;
Pictorial representation of the use case is depicted using use case diagrams. Here are the links to use case diagram tutorials.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
•	http://en.wikipedia.org/wiki/Use_case_diagram&lt;br /&gt;
&lt;br /&gt;
*Level: basic /intermediate&lt;br /&gt;
*Content: medium&lt;br /&gt;
&lt;br /&gt;
This wiki link contains representation of use case generalization along with the notations for use case relationships like extend include.&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
•	http://www.agilemodeling.com/artifacts/useCaseDiagram.htm&lt;br /&gt;
&lt;br /&gt;
•       http://www.andrew.cmu.edu/course/90-754/umlucdfaq.html#uses&lt;br /&gt;
&lt;br /&gt;
*Level: intermediate&lt;br /&gt;
*Content: medium&lt;br /&gt;
&lt;br /&gt;
The above links cover creation and understanding of Use Case Diagrams&lt;br /&gt;
&lt;br /&gt;
== '''Examples'''== &lt;br /&gt;
&lt;br /&gt;
===Beginner/ Intermediate===&lt;br /&gt;
• http://www.soi.wide.ad.jp/class/20040034/slides/07/9.html &lt;br /&gt;
&lt;br /&gt;
*	Level :Beginner/Intermediate&lt;br /&gt;
*	Content : Long&lt;br /&gt;
&lt;br /&gt;
This is an excellent presentation which takes up a real-life ‘elevator’ example and provides multiple use-case descriptions for use cases.Since it relates to the real world it is easy for beginners to understand. &lt;br /&gt;
&lt;br /&gt;
• http://www.cs.colorado.edu/~kena/classes/6448/s05/reference/usecases/examples.html &lt;br /&gt;
&lt;br /&gt;
*	Level :Beginner/Intermediate&lt;br /&gt;
*	Content : Short&lt;br /&gt;
&lt;br /&gt;
This is a one-page guide that illustrates the use case briefs, user-level and summary level use case given the actor-goal list and narrative of the system from the user. &lt;br /&gt;
&lt;br /&gt;
• http://courses.softlab.ntua.gr/softeng/Tutorials/UML-Use-Cases.pdf &lt;br /&gt;
&lt;br /&gt;
*	Level : Beginner/Intermediate&lt;br /&gt;
*	Content : Medium&lt;br /&gt;
&lt;br /&gt;
This is an excellent example describing how to write use cases for different scenarios in a system. It takes up a courseware example breaking down different scenarios and explaining use cases.&lt;br /&gt;
&lt;br /&gt;
• http://www.objectmentor.com/resources/articles/usecases.pdf &lt;br /&gt;
&lt;br /&gt;
*	Level : Beginner&lt;br /&gt;
*	Content :Short&lt;br /&gt;
&lt;br /&gt;
This provides a simple example and explains use cases with use case diagrams for some of the functionalities. &lt;br /&gt;
&lt;br /&gt;
• http://www.w3.org/2002/06/ws-example &lt;br /&gt;
&lt;br /&gt;
*	Level : Beginner&lt;br /&gt;
*	Content : Short &lt;br /&gt;
&lt;br /&gt;
This is a comprehensive example.It takes up a travel reservation system and attempts to explain different scenarios like checking availability of tickets,booking flights and hotels.It explains with great detail each scenario.&lt;br /&gt;
&lt;br /&gt;
• http://www.agilemodeling.com/essays/useCaseReuse.htm &lt;br /&gt;
&lt;br /&gt;
*	Level : Beginner&lt;br /&gt;
*	Content : Short &lt;br /&gt;
&lt;br /&gt;
This is example taking up only one scenario ”Enroll in University” uses narrative style of writing a use case.&lt;br /&gt;
&lt;br /&gt;
===Advanced===&lt;br /&gt;
• http://www.se.cuhk.edu.hk/~seg3430/2007/tutorial/tutorial04.pdf &lt;br /&gt;
&lt;br /&gt;
*	Level : Intermediate/Advanced&lt;br /&gt;
*	Content : Long&lt;br /&gt;
&lt;br /&gt;
Though quite long, this link describes use cases for a credit card payment service.&lt;br /&gt;
&lt;br /&gt;
== Advanced Concepts ==&lt;br /&gt;
&lt;br /&gt;
'''Pluggable use cases''':&lt;br /&gt;
&lt;br /&gt;
http://alistair.cockburn.us/index.php/Pluggable_use_cases&lt;br /&gt;
&lt;br /&gt;
This introduces readers to concept of Pluggable use cases. &lt;br /&gt;
&lt;br /&gt;
'''Essential use-cases''':&lt;br /&gt;
&lt;br /&gt;
http://www.agilemodeling.com/artifacts/essentialUseCase.htm&lt;br /&gt;
&lt;br /&gt;
Essential use-case can be thought of as a less verbose and more succint version of the use case description. This document compares the traditional use case to essential use case.&lt;br /&gt;
&lt;br /&gt;
'''Future direction:'''&lt;br /&gt;
&lt;br /&gt;
http://alistair.cockburn.us/index.php/Use_cases%2C_ten_years_later&lt;br /&gt;
&lt;br /&gt;
This article predicts the direction of future research in the field of use cases.&lt;br /&gt;
&lt;br /&gt;
== Tools ==&lt;br /&gt;
&lt;br /&gt;
'''Rational Rose:''' &lt;br /&gt;
&lt;br /&gt;
One of the most popular tool for use-case driven development.&lt;br /&gt;
&lt;br /&gt;
http://www-306.ibm.com/software/awdtools/developer/rose/index.html&lt;br /&gt;
&lt;br /&gt;
'''Sun Java Studio Enterprise:''' &lt;br /&gt;
&lt;br /&gt;
Sun Java Studio Enterprise offers a UML tool. &lt;br /&gt;
&lt;br /&gt;
http://developers.sun.com/jsenterprise/&lt;br /&gt;
&lt;br /&gt;
'''Visual case:''' &lt;br /&gt;
&lt;br /&gt;
UML &amp;amp; E/R Database Design Tool&lt;br /&gt;
&lt;br /&gt;
http://www.visualcase.com/&lt;br /&gt;
&lt;br /&gt;
== Quick references ==&lt;br /&gt;
&lt;br /&gt;
Some quick references for studying use cases&lt;br /&gt;
&lt;br /&gt;
•	http://www.oreilly.com.cn/samplechap/uml20inanutshell/UML20-ch07.pdf&lt;br /&gt;
&lt;br /&gt;
•	http://www.cs.rit.edu/~jaa/CS4/Lectures/UseCase.PDF&lt;br /&gt;
&lt;br /&gt;
•	http://www.alagad.com/go/blog-entry/uml-use-case-diagrams&lt;br /&gt;
&lt;br /&gt;
•	http://www.cs.nmsu.edu/~jeffery/courses/371/lecture.html&lt;br /&gt;
&lt;br /&gt;
== Good Tutorials ==&lt;br /&gt;
&lt;br /&gt;
•	http://www.parlezuml.com/tutorials/usecases/usecases.pdf&lt;br /&gt;
&lt;br /&gt;
•	http://www.readysetpro.com/whitepapers/usecasetut.html &lt;br /&gt;
&lt;br /&gt;
Two very easy and informative tutorials for beginners who are not familiar with use cases. Both the tutorials contain some very good and simple examples coupled with easily understandable pictures. The first tutorial focuses on use case driven development and UML diagrams while the second deals with writing effective use cases.&lt;br /&gt;
&lt;br /&gt;
== Presentations Online ==&lt;br /&gt;
&lt;br /&gt;
•	https://users.cs.jmu.edu/bernstdh/web/common/lectures/slides_use-cases.php&lt;br /&gt;
&lt;br /&gt;
This presentation describes writing use cases along with constructing use case diagrams&lt;br /&gt;
&lt;br /&gt;
•	http://www-rohan.sdsu.edu/faculty/rnorman/course/ids306/Lect_c4.ppt&lt;br /&gt;
&lt;br /&gt;
This is a very good presentation that explains the concepts with familiar real life examples.&lt;br /&gt;
&lt;br /&gt;
•	http://www.cragsystems.com/SFRWUC/index.htm&lt;br /&gt;
&lt;br /&gt;
This web-based tutorial describes creating a Use Case Model of the functional requirements for a computer system.&lt;br /&gt;
&lt;br /&gt;
== Books ==&lt;br /&gt;
&lt;br /&gt;
Following are good books for learning use cases&lt;br /&gt;
&lt;br /&gt;
[[http://www.amazon.com/Writing-Effective-Cases-Alistair-Cockburn/dp/0201702258 Writing Effective Use Cases by Alistair Cockburn ]]&lt;br /&gt;
&lt;br /&gt;
[[http://www.amazon.com/Object-Oriented-Software-Engineering-Driven-Approach/dp/0201544350 Object-Oriented Software Engineering: A Use Case Driven Approach by Ivar Jacobson ]]&lt;br /&gt;
&lt;br /&gt;
== References on the Web ==&lt;br /&gt;
&lt;br /&gt;
'''Books:'''&lt;br /&gt;
&lt;br /&gt;
1.	Jocabson, Ivar. Basic Use-Case modeling, Report on Object Analysis and Design, 1(2): 15-19, 1994 &lt;br /&gt;
&lt;br /&gt;
2.	Jocabson, Ivar. Baisc Use-Case Modeling (Continued), Report on Object Analysis and Design, 1(3): 7-9, 1994 &lt;br /&gt;
&lt;br /&gt;
3.	Rumbaugh, James. Journal of Object-Oriented Programming: 8-12, 23, Sept. 1994&lt;br /&gt;
&lt;br /&gt;
'''Online Resources:'''&lt;br /&gt;
&lt;br /&gt;
Alistair Cockburn Home Page: http://alistair.cockburn.us/index.php/Main_Page&lt;br /&gt;
&lt;br /&gt;
Tutorial links: http://www.answers.com/topic/use-case?cat=technology&lt;br /&gt;
&lt;br /&gt;
All the links mentioned in the review.&lt;/div&gt;</summary>
		<author><name>Nnmodak</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2007/wiki2_4_np&amp;diff=8072</id>
		<title>CSC/ECE 517 Fall 2007/wiki2 4 np</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2007/wiki2_4_np&amp;diff=8072"/>
		<updated>2007-10-29T21:41:55Z</updated>

		<summary type="html">&lt;p&gt;Nnmodak: /* Use case diagrams */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''Use cases. There are even more pages on the Web on use cases than on MVC. If someone wants to learn about them, what should (s)he do? Look at the first few hits in Google? I expect we can do better than that. Write a review of the use-case sites on the Web. Which are best for learning about the concept? Which have the most instructive examples? Which teach advanced concepts that are not apparent in perusing most use-case sites? Read at least several dozen pages before deciding how to organize your overview''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== '''What are use cases''' ==&lt;br /&gt;
&lt;br /&gt;
A use case is a technique used in software and systems engineering to capture the functional requirements of a system.&lt;br /&gt;
&lt;br /&gt;
They describe in a sequence of steps,the interaction between the initiator of the interaction—and the system itself.&lt;br /&gt;
The initiator of the interaction is called as Actor. Actors can be end users,hardware devices or other systems,basically someone who takes part in the series of activities in a system.&lt;br /&gt;
&lt;br /&gt;
Each use case is a complete series of events, from the point of view of the actor.One or more scenarios may be generated from each use case, corresponding to the detail of each possible way of achieving that goal.&lt;br /&gt;
&lt;br /&gt;
There are numerous websites and resources on the topic of “Use cases”. We attempt to provide a guide to most useful ones among them. The rest of this page provides links to websites which provide more in depth information describing the use of use cases,use cases templates, examples, and advanced concepts , along with reviews of those sites.&lt;br /&gt;
&lt;br /&gt;
The links are grouped as per the topics which will make it easy to find a related site.Within the group We have compared these on the basis of following criteria:&lt;br /&gt;
&lt;br /&gt;
Level: beginner / intermediate / advanced&lt;br /&gt;
&lt;br /&gt;
Content: short / medium / long&lt;br /&gt;
&lt;br /&gt;
== '''Introduction''' ==&lt;br /&gt;
&lt;br /&gt;
These are introductory tutorials explaining the basics of use cases. Most of them are short and priliminary. &lt;br /&gt;
&lt;br /&gt;
===Beginner===&lt;br /&gt;
&lt;br /&gt;
•	http://www.cragsystems.com/SFRWUC/index.htm&lt;br /&gt;
&lt;br /&gt;
*Level: beginner           &lt;br /&gt;
*Content: long&lt;br /&gt;
&lt;br /&gt;
This is a web-based tutorial that introduces beginners to use cases. It clearly illustrates with appropriate examples the concepts related to use cases. It further describes application of use cases in documenting functional requirements. It also has a short &lt;br /&gt;
quiz, a test and an exercise at the end. Excellent navigation is a plus.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
•	http://www.csc.calpoly.edu/~dbutler/tutorials/winter96/use/&lt;br /&gt;
&lt;br /&gt;
*Level: beginner           &lt;br /&gt;
*Content: short&lt;br /&gt;
&lt;br /&gt;
This short tutorial discusses how use-cases fit into the framework of user-centered analysis. It gives a sample use case of ATM cash withdrawal. It also describes the role of use cases in design and testing phase.&lt;br /&gt;
&lt;br /&gt;
===Beginner /intermediate===&lt;br /&gt;
&lt;br /&gt;
•	http://en.wikipedia.org/wiki/Use_case&lt;br /&gt;
&lt;br /&gt;
*Level: beginner / intermediate         &lt;br /&gt;
*Content: medium&lt;br /&gt;
&lt;br /&gt;
This wiki provides an introduction to use case concepts in very simple terms, so seems to be a good starting point for early beginners. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
•	http://www.parlezuml.com/tutorials/usecases/usecases_intro.pdf&lt;br /&gt;
&lt;br /&gt;
•	http://parlezuml.com/tutorials/usecases/usecases.pdf&lt;br /&gt;
&lt;br /&gt;
*Level: beginner / intermediate         &lt;br /&gt;
*Content: short&lt;br /&gt;
&lt;br /&gt;
These are very short and simple tutorials by Jason Gorman that explain the basics of use cases. Apart from use cases, the author covers the related concepts such as actors, system, scenarios. He also explains special use cases: &amp;lt;&amp;lt;extend&amp;gt;&amp;gt; and &amp;lt;&amp;lt;include&amp;gt;&amp;gt; and provides a brief explanation of how use cases can be part of agile development process.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
•	http://www.bredemeyer.com/use_cases.htm&lt;br /&gt;
&lt;br /&gt;
*Level: beginner / intermediate         &lt;br /&gt;
*Content: short&lt;br /&gt;
&lt;br /&gt;
This is a one-page document illustrating how use cases can be effective means to gather functional requirements. It provides valuable pointers to other use-case resources. Though short, it is quite informative for new learners.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
•	http://alistair.cockburn.us/index.php/Use_case_fundamentals&lt;br /&gt;
&lt;br /&gt;
*Level: beginner / intermediate         &lt;br /&gt;
*Content: short&lt;br /&gt;
&lt;br /&gt;
This is a good website which deals with the scope of use cases..It provides a&lt;br /&gt;
brief description of use cases and actors along with analysis of use case reports.It &lt;br /&gt;
also describes steps involved in validation of use cases.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
•	http://courses.softlab.ntua.gr/softeng/Tutorials/UML-Use-Cases.pdf&lt;br /&gt;
&lt;br /&gt;
*Level: beginner / intermediate         &lt;br /&gt;
*Content: medium&lt;br /&gt;
&lt;br /&gt;
This presentation offers succinct definitions for various terms related to use cases, also provides notational guide for documenting use case diagrams. It explains how to build scenarios ( flow of events in a use case).&lt;br /&gt;
&lt;br /&gt;
===Advanced===&lt;br /&gt;
&lt;br /&gt;
•	http://alistair.cockburn.us/index.php/Structuring_use_cases_with_goals&lt;br /&gt;
&lt;br /&gt;
*Level: intermediate / advanced         &lt;br /&gt;
*Content: long&lt;br /&gt;
&lt;br /&gt;
Here is a great guide to use cases by Alistair Cockburn, a renowned strategist and one of the leaders of agile movement. Though the article quite reader-friendly, it expects the reader to be familiar with at least the basic concepts. It offers brief descriptions of terms involved and analysis of use case reports.&lt;br /&gt;
&lt;br /&gt;
== '''How to write use cases''' ==&lt;br /&gt;
&lt;br /&gt;
Writing use cases are not confined to drawing use case diagram. Rather, a written use case is a brief but complete text description of every identified use case (functionality) of the system identified. Some of the instructive articles on this topic are as follows&lt;br /&gt;
&lt;br /&gt;
===Beginner===&lt;br /&gt;
&lt;br /&gt;
•	http://infogenium.typepad.com/inside_infogenium/2007/07/getting-started.html&lt;br /&gt;
&lt;br /&gt;
*Level: beginner&lt;br /&gt;
*Content: short&lt;br /&gt;
&lt;br /&gt;
Here is a short tutorial for developers that are intimidated by the requirement documentation phase using the use cases. It explains the steps involved in capturing the requirements, introduces the concept of use-case brief. It illustrates the concepts with a file attachment example.&lt;br /&gt;
&lt;br /&gt;
===Intermediate===&lt;br /&gt;
&lt;br /&gt;
•	http://www.informit.com/articles/article.aspx?p=30084&amp;amp;seqNum=8&amp;amp;rl=1&lt;br /&gt;
&lt;br /&gt;
*Level: intermediate&lt;br /&gt;
*Content: medium&lt;br /&gt;
&lt;br /&gt;
Here is an article that clearly distinguishes between a good use case and a bad use case. It gives an example of course registration for students and then explains writing the use case descriptions. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
•	http://www.answers.com/topic/use-case?cat=technology&lt;br /&gt;
&lt;br /&gt;
*Level: intermediate&lt;br /&gt;
*Content: long&lt;br /&gt;
 &lt;br /&gt;
This is a comprehensive article that starts off with an overview of use cases and provides an excellent reference for how to write use cases. It also comments on various types of use-cases based on the functionality (business/system) or degree of detail (brief / casual / fully dressed).  It elaborates on various sections of use case description.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Writing effective use cases ===&lt;br /&gt;
&lt;br /&gt;
•	http://www.gatherspace.com/static/use_case_example.html&lt;br /&gt;
&lt;br /&gt;
*Level: intermediate / advanced &lt;br /&gt;
*Content: long&lt;br /&gt;
 &lt;br /&gt;
Explains the art of writing effective use cases by considering an example of writing use cases for a mock Ebay site. The practical nature of the example makes it an interesting exercise. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
•	http://alistair.cockburn.us/index.php/Sampler_of_good_%26_bad_use_cases&lt;br /&gt;
&lt;br /&gt;
*Level: intermediate / advanced &lt;br /&gt;
*Content: short&lt;br /&gt;
&lt;br /&gt;
The above link provides some sample good and bad use cases. These can act as Dos and Don'ts for developers.&lt;br /&gt;
&lt;br /&gt;
== '''Format/Template of use cases''' ==&lt;br /&gt;
It's useful to have a template for use case so that there are less chances of missing out on anything.&lt;br /&gt;
&lt;br /&gt;
•	http://alistair.cockburn.us/index.php/Basic_use_case_template&lt;br /&gt;
&lt;br /&gt;
An excellent link which shows how to structure use cases. Provides different use case templates.&lt;br /&gt;
&lt;br /&gt;
== '''Use case diagrams''' ==&lt;br /&gt;
&lt;br /&gt;
Pictorial representation of the use case is depicted using use case diagrams. Here are the links to use case diagram tutorials.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
•	http://en.wikipedia.org/wiki/Use_case_diagram&lt;br /&gt;
&lt;br /&gt;
*Level: basic /intermediate&lt;br /&gt;
*Content: medium&lt;br /&gt;
&lt;br /&gt;
This wiki link contains representation of use case generalization along with the notations for use case relationships like extend include.&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
•	http://www.agilemodeling.com/artifacts/useCaseDiagram.htm&lt;br /&gt;
&lt;br /&gt;
•       http://www.andrew.cmu.edu/course/90-754/umlucdfaq.html#uses&lt;br /&gt;
&lt;br /&gt;
*Level: intermediate&lt;br /&gt;
*Content: medium&lt;br /&gt;
&lt;br /&gt;
The above links cover creation and understanding of Use Case Diagrams&lt;br /&gt;
&lt;br /&gt;
== Examples== &lt;br /&gt;
&lt;br /&gt;
===Beginner/ Intermediate===&lt;br /&gt;
• http://www.soi.wide.ad.jp/class/20040034/slides/07/9.html &lt;br /&gt;
&lt;br /&gt;
*	Level :Beginner/Intermediate&lt;br /&gt;
*	Content : Long&lt;br /&gt;
&lt;br /&gt;
This is an excellent presentation which takes up a real-life ‘elevator’ example and provides multiple use-case descriptions for use cases.Since it relates to the real world it is easy for beginners to understand. &lt;br /&gt;
&lt;br /&gt;
• http://www.cs.colorado.edu/~kena/classes/6448/s05/reference/usecases/examples.html &lt;br /&gt;
&lt;br /&gt;
*	Level :Beginner/Intermediate&lt;br /&gt;
*	Content : Short&lt;br /&gt;
&lt;br /&gt;
This is a one-page guide that illustrates the use case briefs, user-level and summary level use case given the actor-goal list and narrative of the system from the user. &lt;br /&gt;
&lt;br /&gt;
• http://courses.softlab.ntua.gr/softeng/Tutorials/UML-Use-Cases.pdf &lt;br /&gt;
&lt;br /&gt;
*	Level : Beginner/Intermediate&lt;br /&gt;
*	Content : Medium&lt;br /&gt;
&lt;br /&gt;
This is an excellent example describing how to write use cases for different scenarios in a system. It takes up a courseware example breaking down different scenarios and explaining use cases.&lt;br /&gt;
&lt;br /&gt;
• http://www.objectmentor.com/resources/articles/usecases.pdf &lt;br /&gt;
&lt;br /&gt;
*	Level : Beginner&lt;br /&gt;
*	Content :Short&lt;br /&gt;
&lt;br /&gt;
This provides a simple example and explains use cases with use case diagrams for some of the functionalities. &lt;br /&gt;
&lt;br /&gt;
• http://www.w3.org/2002/06/ws-example &lt;br /&gt;
&lt;br /&gt;
*	Level : Beginner&lt;br /&gt;
*	Content : Short &lt;br /&gt;
&lt;br /&gt;
This is a comprehensive example.It takes up a travel reservation system and attempts to explain different scenarios like checking availability of tickets,booking flights and hotels.It explains with great detail each scenario.&lt;br /&gt;
&lt;br /&gt;
• http://www.agilemodeling.com/essays/useCaseReuse.htm &lt;br /&gt;
&lt;br /&gt;
*	Level : Beginner&lt;br /&gt;
*	Content : Short &lt;br /&gt;
&lt;br /&gt;
This is example taking up only one scenario ”Enroll in University” uses narrative style of writing a use case.&lt;br /&gt;
&lt;br /&gt;
===Advanced===&lt;br /&gt;
• http://www.se.cuhk.edu.hk/~seg3430/2007/tutorial/tutorial04.pdf &lt;br /&gt;
&lt;br /&gt;
*	Level : Intermediate/Advanced&lt;br /&gt;
*	Content : Long&lt;br /&gt;
&lt;br /&gt;
Though quite long, this link describes use cases for a credit card payment service.&lt;br /&gt;
&lt;br /&gt;
== Advanced Concepts ==&lt;br /&gt;
&lt;br /&gt;
'''Pluggable use cases''':&lt;br /&gt;
&lt;br /&gt;
http://alistair.cockburn.us/index.php/Pluggable_use_cases&lt;br /&gt;
&lt;br /&gt;
This introduces readers to concept of Pluggable use cases. &lt;br /&gt;
&lt;br /&gt;
'''Essential use-cases''':&lt;br /&gt;
&lt;br /&gt;
http://www.agilemodeling.com/artifacts/essentialUseCase.htm&lt;br /&gt;
&lt;br /&gt;
Essential use-case can be thought of as a less verbose and more succint version of the use case description. This document compares the traditional use case to essential use case.&lt;br /&gt;
&lt;br /&gt;
'''Future direction:'''&lt;br /&gt;
&lt;br /&gt;
http://alistair.cockburn.us/index.php/Use_cases%2C_ten_years_later&lt;br /&gt;
&lt;br /&gt;
This article predicts the direction of future research in the field of use cases.&lt;br /&gt;
&lt;br /&gt;
== Tools ==&lt;br /&gt;
&lt;br /&gt;
'''Rational Rose:''' &lt;br /&gt;
&lt;br /&gt;
One of the most popular tool for use-case driven development.&lt;br /&gt;
&lt;br /&gt;
http://www-306.ibm.com/software/awdtools/developer/rose/index.html&lt;br /&gt;
&lt;br /&gt;
'''Sun Java Studio Enterprise:''' &lt;br /&gt;
&lt;br /&gt;
Sun Java Studio Enterprise offers a UML tool. &lt;br /&gt;
&lt;br /&gt;
http://developers.sun.com/jsenterprise/&lt;br /&gt;
&lt;br /&gt;
'''Visual case:''' &lt;br /&gt;
&lt;br /&gt;
UML &amp;amp; E/R Database Design Tool&lt;br /&gt;
&lt;br /&gt;
http://www.visualcase.com/&lt;br /&gt;
&lt;br /&gt;
== Quick references ==&lt;br /&gt;
&lt;br /&gt;
Some quick references for studying use cases&lt;br /&gt;
&lt;br /&gt;
•	http://www.oreilly.com.cn/samplechap/uml20inanutshell/UML20-ch07.pdf&lt;br /&gt;
&lt;br /&gt;
•	http://www.cs.rit.edu/~jaa/CS4/Lectures/UseCase.PDF&lt;br /&gt;
&lt;br /&gt;
•	http://www.alagad.com/go/blog-entry/uml-use-case-diagrams&lt;br /&gt;
&lt;br /&gt;
•	http://www.cs.nmsu.edu/~jeffery/courses/371/lecture.html&lt;br /&gt;
&lt;br /&gt;
== Good Tutorials ==&lt;br /&gt;
&lt;br /&gt;
•	http://www.parlezuml.com/tutorials/usecases/usecases.pdf&lt;br /&gt;
&lt;br /&gt;
•	http://www.readysetpro.com/whitepapers/usecasetut.html &lt;br /&gt;
&lt;br /&gt;
Two very easy and informative tutorials for beginners who are not familiar with use cases. Both the tutorials contain some very good and simple examples coupled with easily understandable pictures. The first tutorial focuses on use case driven development and UML diagrams while the second deals with writing effective use cases.&lt;br /&gt;
&lt;br /&gt;
== Presentations Online ==&lt;br /&gt;
&lt;br /&gt;
•	https://users.cs.jmu.edu/bernstdh/web/common/lectures/slides_use-cases.php&lt;br /&gt;
&lt;br /&gt;
This presentation describes writing use cases along with constructing use case diagrams&lt;br /&gt;
&lt;br /&gt;
•	http://www-rohan.sdsu.edu/faculty/rnorman/course/ids306/Lect_c4.ppt&lt;br /&gt;
&lt;br /&gt;
This is a very good presentation that explains the concepts with familiar real life examples.&lt;br /&gt;
&lt;br /&gt;
•	http://www.cragsystems.com/SFRWUC/index.htm&lt;br /&gt;
&lt;br /&gt;
This web-based tutorial describes creating a Use Case Model of the functional requirements for a computer system.&lt;br /&gt;
&lt;br /&gt;
== Books ==&lt;br /&gt;
&lt;br /&gt;
Following are good books for learning use cases&lt;br /&gt;
&lt;br /&gt;
[[http://www.amazon.com/Writing-Effective-Cases-Alistair-Cockburn/dp/0201702258 Writing Effective Use Cases by Alistair Cockburn ]]&lt;br /&gt;
&lt;br /&gt;
[[http://www.amazon.com/Object-Oriented-Software-Engineering-Driven-Approach/dp/0201544350 Object-Oriented Software Engineering: A Use Case Driven Approach by Ivar Jacobson ]]&lt;br /&gt;
&lt;br /&gt;
== References on the Web ==&lt;br /&gt;
&lt;br /&gt;
'''Books:'''&lt;br /&gt;
&lt;br /&gt;
1.	Jocabson, Ivar. Basic Use-Case modeling, Report on Object Analysis and Design, 1(2): 15-19, 1994 &lt;br /&gt;
&lt;br /&gt;
2.	Jocabson, Ivar. Baisc Use-Case Modeling (Continued), Report on Object Analysis and Design, 1(3): 7-9, 1994 &lt;br /&gt;
&lt;br /&gt;
3.	Rumbaugh, James. Journal of Object-Oriented Programming: 8-12, 23, Sept. 1994&lt;br /&gt;
&lt;br /&gt;
'''Online Resources:'''&lt;br /&gt;
&lt;br /&gt;
Alistair Cockburn Home Page: http://alistair.cockburn.us/index.php/Main_Page&lt;br /&gt;
&lt;br /&gt;
Tutorial links: http://www.answers.com/topic/use-case?cat=technology&lt;br /&gt;
&lt;br /&gt;
All the links mentioned in the review.&lt;/div&gt;</summary>
		<author><name>Nnmodak</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2007/wiki2_4_np&amp;diff=8071</id>
		<title>CSC/ECE 517 Fall 2007/wiki2 4 np</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2007/wiki2_4_np&amp;diff=8071"/>
		<updated>2007-10-29T21:41:32Z</updated>

		<summary type="html">&lt;p&gt;Nnmodak: /* How to write use cases */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''Use cases. There are even more pages on the Web on use cases than on MVC. If someone wants to learn about them, what should (s)he do? Look at the first few hits in Google? I expect we can do better than that. Write a review of the use-case sites on the Web. Which are best for learning about the concept? Which have the most instructive examples? Which teach advanced concepts that are not apparent in perusing most use-case sites? Read at least several dozen pages before deciding how to organize your overview''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== '''What are use cases''' ==&lt;br /&gt;
&lt;br /&gt;
A use case is a technique used in software and systems engineering to capture the functional requirements of a system.&lt;br /&gt;
&lt;br /&gt;
They describe in a sequence of steps,the interaction between the initiator of the interaction—and the system itself.&lt;br /&gt;
The initiator of the interaction is called as Actor. Actors can be end users,hardware devices or other systems,basically someone who takes part in the series of activities in a system.&lt;br /&gt;
&lt;br /&gt;
Each use case is a complete series of events, from the point of view of the actor.One or more scenarios may be generated from each use case, corresponding to the detail of each possible way of achieving that goal.&lt;br /&gt;
&lt;br /&gt;
There are numerous websites and resources on the topic of “Use cases”. We attempt to provide a guide to most useful ones among them. The rest of this page provides links to websites which provide more in depth information describing the use of use cases,use cases templates, examples, and advanced concepts , along with reviews of those sites.&lt;br /&gt;
&lt;br /&gt;
The links are grouped as per the topics which will make it easy to find a related site.Within the group We have compared these on the basis of following criteria:&lt;br /&gt;
&lt;br /&gt;
Level: beginner / intermediate / advanced&lt;br /&gt;
&lt;br /&gt;
Content: short / medium / long&lt;br /&gt;
&lt;br /&gt;
== '''Introduction''' ==&lt;br /&gt;
&lt;br /&gt;
These are introductory tutorials explaining the basics of use cases. Most of them are short and priliminary. &lt;br /&gt;
&lt;br /&gt;
===Beginner===&lt;br /&gt;
&lt;br /&gt;
•	http://www.cragsystems.com/SFRWUC/index.htm&lt;br /&gt;
&lt;br /&gt;
*Level: beginner           &lt;br /&gt;
*Content: long&lt;br /&gt;
&lt;br /&gt;
This is a web-based tutorial that introduces beginners to use cases. It clearly illustrates with appropriate examples the concepts related to use cases. It further describes application of use cases in documenting functional requirements. It also has a short &lt;br /&gt;
quiz, a test and an exercise at the end. Excellent navigation is a plus.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
•	http://www.csc.calpoly.edu/~dbutler/tutorials/winter96/use/&lt;br /&gt;
&lt;br /&gt;
*Level: beginner           &lt;br /&gt;
*Content: short&lt;br /&gt;
&lt;br /&gt;
This short tutorial discusses how use-cases fit into the framework of user-centered analysis. It gives a sample use case of ATM cash withdrawal. It also describes the role of use cases in design and testing phase.&lt;br /&gt;
&lt;br /&gt;
===Beginner /intermediate===&lt;br /&gt;
&lt;br /&gt;
•	http://en.wikipedia.org/wiki/Use_case&lt;br /&gt;
&lt;br /&gt;
*Level: beginner / intermediate         &lt;br /&gt;
*Content: medium&lt;br /&gt;
&lt;br /&gt;
This wiki provides an introduction to use case concepts in very simple terms, so seems to be a good starting point for early beginners. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
•	http://www.parlezuml.com/tutorials/usecases/usecases_intro.pdf&lt;br /&gt;
&lt;br /&gt;
•	http://parlezuml.com/tutorials/usecases/usecases.pdf&lt;br /&gt;
&lt;br /&gt;
*Level: beginner / intermediate         &lt;br /&gt;
*Content: short&lt;br /&gt;
&lt;br /&gt;
These are very short and simple tutorials by Jason Gorman that explain the basics of use cases. Apart from use cases, the author covers the related concepts such as actors, system, scenarios. He also explains special use cases: &amp;lt;&amp;lt;extend&amp;gt;&amp;gt; and &amp;lt;&amp;lt;include&amp;gt;&amp;gt; and provides a brief explanation of how use cases can be part of agile development process.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
•	http://www.bredemeyer.com/use_cases.htm&lt;br /&gt;
&lt;br /&gt;
*Level: beginner / intermediate         &lt;br /&gt;
*Content: short&lt;br /&gt;
&lt;br /&gt;
This is a one-page document illustrating how use cases can be effective means to gather functional requirements. It provides valuable pointers to other use-case resources. Though short, it is quite informative for new learners.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
•	http://alistair.cockburn.us/index.php/Use_case_fundamentals&lt;br /&gt;
&lt;br /&gt;
*Level: beginner / intermediate         &lt;br /&gt;
*Content: short&lt;br /&gt;
&lt;br /&gt;
This is a good website which deals with the scope of use cases..It provides a&lt;br /&gt;
brief description of use cases and actors along with analysis of use case reports.It &lt;br /&gt;
also describes steps involved in validation of use cases.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
•	http://courses.softlab.ntua.gr/softeng/Tutorials/UML-Use-Cases.pdf&lt;br /&gt;
&lt;br /&gt;
*Level: beginner / intermediate         &lt;br /&gt;
*Content: medium&lt;br /&gt;
&lt;br /&gt;
This presentation offers succinct definitions for various terms related to use cases, also provides notational guide for documenting use case diagrams. It explains how to build scenarios ( flow of events in a use case).&lt;br /&gt;
&lt;br /&gt;
===Advanced===&lt;br /&gt;
&lt;br /&gt;
•	http://alistair.cockburn.us/index.php/Structuring_use_cases_with_goals&lt;br /&gt;
&lt;br /&gt;
*Level: intermediate / advanced         &lt;br /&gt;
*Content: long&lt;br /&gt;
&lt;br /&gt;
Here is a great guide to use cases by Alistair Cockburn, a renowned strategist and one of the leaders of agile movement. Though the article quite reader-friendly, it expects the reader to be familiar with at least the basic concepts. It offers brief descriptions of terms involved and analysis of use case reports.&lt;br /&gt;
&lt;br /&gt;
== '''How to write use cases''' ==&lt;br /&gt;
&lt;br /&gt;
Writing use cases are not confined to drawing use case diagram. Rather, a written use case is a brief but complete text description of every identified use case (functionality) of the system identified. Some of the instructive articles on this topic are as follows&lt;br /&gt;
&lt;br /&gt;
===Beginner===&lt;br /&gt;
&lt;br /&gt;
•	http://infogenium.typepad.com/inside_infogenium/2007/07/getting-started.html&lt;br /&gt;
&lt;br /&gt;
*Level: beginner&lt;br /&gt;
*Content: short&lt;br /&gt;
&lt;br /&gt;
Here is a short tutorial for developers that are intimidated by the requirement documentation phase using the use cases. It explains the steps involved in capturing the requirements, introduces the concept of use-case brief. It illustrates the concepts with a file attachment example.&lt;br /&gt;
&lt;br /&gt;
===Intermediate===&lt;br /&gt;
&lt;br /&gt;
•	http://www.informit.com/articles/article.aspx?p=30084&amp;amp;seqNum=8&amp;amp;rl=1&lt;br /&gt;
&lt;br /&gt;
*Level: intermediate&lt;br /&gt;
*Content: medium&lt;br /&gt;
&lt;br /&gt;
Here is an article that clearly distinguishes between a good use case and a bad use case. It gives an example of course registration for students and then explains writing the use case descriptions. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
•	http://www.answers.com/topic/use-case?cat=technology&lt;br /&gt;
&lt;br /&gt;
*Level: intermediate&lt;br /&gt;
*Content: long&lt;br /&gt;
 &lt;br /&gt;
This is a comprehensive article that starts off with an overview of use cases and provides an excellent reference for how to write use cases. It also comments on various types of use-cases based on the functionality (business/system) or degree of detail (brief / casual / fully dressed).  It elaborates on various sections of use case description.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Writing effective use cases ===&lt;br /&gt;
&lt;br /&gt;
•	http://www.gatherspace.com/static/use_case_example.html&lt;br /&gt;
&lt;br /&gt;
*Level: intermediate / advanced &lt;br /&gt;
*Content: long&lt;br /&gt;
 &lt;br /&gt;
Explains the art of writing effective use cases by considering an example of writing use cases for a mock Ebay site. The practical nature of the example makes it an interesting exercise. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
•	http://alistair.cockburn.us/index.php/Sampler_of_good_%26_bad_use_cases&lt;br /&gt;
&lt;br /&gt;
*Level: intermediate / advanced &lt;br /&gt;
*Content: short&lt;br /&gt;
&lt;br /&gt;
The above link provides some sample good and bad use cases. These can act as Dos and Don'ts for developers.&lt;br /&gt;
&lt;br /&gt;
== '''Format/Template of use cases''' ==&lt;br /&gt;
It's useful to have a template for use case so that there are less chances of missing out on anything.&lt;br /&gt;
&lt;br /&gt;
•	http://alistair.cockburn.us/index.php/Basic_use_case_template&lt;br /&gt;
&lt;br /&gt;
An excellent link which shows how to structure use cases. Provides different use case templates.&lt;br /&gt;
&lt;br /&gt;
== Use case diagrams ==&lt;br /&gt;
&lt;br /&gt;
Pictorial representation of the use case is depicted using use case diagrams. Here are the links to use case diagram tutorials.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
•	http://en.wikipedia.org/wiki/Use_case_diagram&lt;br /&gt;
&lt;br /&gt;
*Level: basic /intermediate&lt;br /&gt;
*Content: medium&lt;br /&gt;
&lt;br /&gt;
This wiki link contains representation of use case generalization along with the notations for use case relationships like extend include.&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
•	http://www.agilemodeling.com/artifacts/useCaseDiagram.htm&lt;br /&gt;
&lt;br /&gt;
•       http://www.andrew.cmu.edu/course/90-754/umlucdfaq.html#uses&lt;br /&gt;
&lt;br /&gt;
*Level: intermediate&lt;br /&gt;
*Content: medium&lt;br /&gt;
&lt;br /&gt;
The above links cover creation and understanding of Use Case Diagrams&lt;br /&gt;
&lt;br /&gt;
== Examples== &lt;br /&gt;
&lt;br /&gt;
===Beginner/ Intermediate===&lt;br /&gt;
• http://www.soi.wide.ad.jp/class/20040034/slides/07/9.html &lt;br /&gt;
&lt;br /&gt;
*	Level :Beginner/Intermediate&lt;br /&gt;
*	Content : Long&lt;br /&gt;
&lt;br /&gt;
This is an excellent presentation which takes up a real-life ‘elevator’ example and provides multiple use-case descriptions for use cases.Since it relates to the real world it is easy for beginners to understand. &lt;br /&gt;
&lt;br /&gt;
• http://www.cs.colorado.edu/~kena/classes/6448/s05/reference/usecases/examples.html &lt;br /&gt;
&lt;br /&gt;
*	Level :Beginner/Intermediate&lt;br /&gt;
*	Content : Short&lt;br /&gt;
&lt;br /&gt;
This is a one-page guide that illustrates the use case briefs, user-level and summary level use case given the actor-goal list and narrative of the system from the user. &lt;br /&gt;
&lt;br /&gt;
• http://courses.softlab.ntua.gr/softeng/Tutorials/UML-Use-Cases.pdf &lt;br /&gt;
&lt;br /&gt;
*	Level : Beginner/Intermediate&lt;br /&gt;
*	Content : Medium&lt;br /&gt;
&lt;br /&gt;
This is an excellent example describing how to write use cases for different scenarios in a system. It takes up a courseware example breaking down different scenarios and explaining use cases.&lt;br /&gt;
&lt;br /&gt;
• http://www.objectmentor.com/resources/articles/usecases.pdf &lt;br /&gt;
&lt;br /&gt;
*	Level : Beginner&lt;br /&gt;
*	Content :Short&lt;br /&gt;
&lt;br /&gt;
This provides a simple example and explains use cases with use case diagrams for some of the functionalities. &lt;br /&gt;
&lt;br /&gt;
• http://www.w3.org/2002/06/ws-example &lt;br /&gt;
&lt;br /&gt;
*	Level : Beginner&lt;br /&gt;
*	Content : Short &lt;br /&gt;
&lt;br /&gt;
This is a comprehensive example.It takes up a travel reservation system and attempts to explain different scenarios like checking availability of tickets,booking flights and hotels.It explains with great detail each scenario.&lt;br /&gt;
&lt;br /&gt;
• http://www.agilemodeling.com/essays/useCaseReuse.htm &lt;br /&gt;
&lt;br /&gt;
*	Level : Beginner&lt;br /&gt;
*	Content : Short &lt;br /&gt;
&lt;br /&gt;
This is example taking up only one scenario ”Enroll in University” uses narrative style of writing a use case.&lt;br /&gt;
&lt;br /&gt;
===Advanced===&lt;br /&gt;
• http://www.se.cuhk.edu.hk/~seg3430/2007/tutorial/tutorial04.pdf &lt;br /&gt;
&lt;br /&gt;
*	Level : Intermediate/Advanced&lt;br /&gt;
*	Content : Long&lt;br /&gt;
&lt;br /&gt;
Though quite long, this link describes use cases for a credit card payment service.&lt;br /&gt;
&lt;br /&gt;
== Advanced Concepts ==&lt;br /&gt;
&lt;br /&gt;
'''Pluggable use cases''':&lt;br /&gt;
&lt;br /&gt;
http://alistair.cockburn.us/index.php/Pluggable_use_cases&lt;br /&gt;
&lt;br /&gt;
This introduces readers to concept of Pluggable use cases. &lt;br /&gt;
&lt;br /&gt;
'''Essential use-cases''':&lt;br /&gt;
&lt;br /&gt;
http://www.agilemodeling.com/artifacts/essentialUseCase.htm&lt;br /&gt;
&lt;br /&gt;
Essential use-case can be thought of as a less verbose and more succint version of the use case description. This document compares the traditional use case to essential use case.&lt;br /&gt;
&lt;br /&gt;
'''Future direction:'''&lt;br /&gt;
&lt;br /&gt;
http://alistair.cockburn.us/index.php/Use_cases%2C_ten_years_later&lt;br /&gt;
&lt;br /&gt;
This article predicts the direction of future research in the field of use cases.&lt;br /&gt;
&lt;br /&gt;
== Tools ==&lt;br /&gt;
&lt;br /&gt;
'''Rational Rose:''' &lt;br /&gt;
&lt;br /&gt;
One of the most popular tool for use-case driven development.&lt;br /&gt;
&lt;br /&gt;
http://www-306.ibm.com/software/awdtools/developer/rose/index.html&lt;br /&gt;
&lt;br /&gt;
'''Sun Java Studio Enterprise:''' &lt;br /&gt;
&lt;br /&gt;
Sun Java Studio Enterprise offers a UML tool. &lt;br /&gt;
&lt;br /&gt;
http://developers.sun.com/jsenterprise/&lt;br /&gt;
&lt;br /&gt;
'''Visual case:''' &lt;br /&gt;
&lt;br /&gt;
UML &amp;amp; E/R Database Design Tool&lt;br /&gt;
&lt;br /&gt;
http://www.visualcase.com/&lt;br /&gt;
&lt;br /&gt;
== Quick references ==&lt;br /&gt;
&lt;br /&gt;
Some quick references for studying use cases&lt;br /&gt;
&lt;br /&gt;
•	http://www.oreilly.com.cn/samplechap/uml20inanutshell/UML20-ch07.pdf&lt;br /&gt;
&lt;br /&gt;
•	http://www.cs.rit.edu/~jaa/CS4/Lectures/UseCase.PDF&lt;br /&gt;
&lt;br /&gt;
•	http://www.alagad.com/go/blog-entry/uml-use-case-diagrams&lt;br /&gt;
&lt;br /&gt;
•	http://www.cs.nmsu.edu/~jeffery/courses/371/lecture.html&lt;br /&gt;
&lt;br /&gt;
== Good Tutorials ==&lt;br /&gt;
&lt;br /&gt;
•	http://www.parlezuml.com/tutorials/usecases/usecases.pdf&lt;br /&gt;
&lt;br /&gt;
•	http://www.readysetpro.com/whitepapers/usecasetut.html &lt;br /&gt;
&lt;br /&gt;
Two very easy and informative tutorials for beginners who are not familiar with use cases. Both the tutorials contain some very good and simple examples coupled with easily understandable pictures. The first tutorial focuses on use case driven development and UML diagrams while the second deals with writing effective use cases.&lt;br /&gt;
&lt;br /&gt;
== Presentations Online ==&lt;br /&gt;
&lt;br /&gt;
•	https://users.cs.jmu.edu/bernstdh/web/common/lectures/slides_use-cases.php&lt;br /&gt;
&lt;br /&gt;
This presentation describes writing use cases along with constructing use case diagrams&lt;br /&gt;
&lt;br /&gt;
•	http://www-rohan.sdsu.edu/faculty/rnorman/course/ids306/Lect_c4.ppt&lt;br /&gt;
&lt;br /&gt;
This is a very good presentation that explains the concepts with familiar real life examples.&lt;br /&gt;
&lt;br /&gt;
•	http://www.cragsystems.com/SFRWUC/index.htm&lt;br /&gt;
&lt;br /&gt;
This web-based tutorial describes creating a Use Case Model of the functional requirements for a computer system.&lt;br /&gt;
&lt;br /&gt;
== Books ==&lt;br /&gt;
&lt;br /&gt;
Following are good books for learning use cases&lt;br /&gt;
&lt;br /&gt;
[[http://www.amazon.com/Writing-Effective-Cases-Alistair-Cockburn/dp/0201702258 Writing Effective Use Cases by Alistair Cockburn ]]&lt;br /&gt;
&lt;br /&gt;
[[http://www.amazon.com/Object-Oriented-Software-Engineering-Driven-Approach/dp/0201544350 Object-Oriented Software Engineering: A Use Case Driven Approach by Ivar Jacobson ]]&lt;br /&gt;
&lt;br /&gt;
== References on the Web ==&lt;br /&gt;
&lt;br /&gt;
'''Books:'''&lt;br /&gt;
&lt;br /&gt;
1.	Jocabson, Ivar. Basic Use-Case modeling, Report on Object Analysis and Design, 1(2): 15-19, 1994 &lt;br /&gt;
&lt;br /&gt;
2.	Jocabson, Ivar. Baisc Use-Case Modeling (Continued), Report on Object Analysis and Design, 1(3): 7-9, 1994 &lt;br /&gt;
&lt;br /&gt;
3.	Rumbaugh, James. Journal of Object-Oriented Programming: 8-12, 23, Sept. 1994&lt;br /&gt;
&lt;br /&gt;
'''Online Resources:'''&lt;br /&gt;
&lt;br /&gt;
Alistair Cockburn Home Page: http://alistair.cockburn.us/index.php/Main_Page&lt;br /&gt;
&lt;br /&gt;
Tutorial links: http://www.answers.com/topic/use-case?cat=technology&lt;br /&gt;
&lt;br /&gt;
All the links mentioned in the review.&lt;/div&gt;</summary>
		<author><name>Nnmodak</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2007/wiki2_4_np&amp;diff=8070</id>
		<title>CSC/ECE 517 Fall 2007/wiki2 4 np</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2007/wiki2_4_np&amp;diff=8070"/>
		<updated>2007-10-29T21:40:59Z</updated>

		<summary type="html">&lt;p&gt;Nnmodak: /* Format/Template of use cases */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''Use cases. There are even more pages on the Web on use cases than on MVC. If someone wants to learn about them, what should (s)he do? Look at the first few hits in Google? I expect we can do better than that. Write a review of the use-case sites on the Web. Which are best for learning about the concept? Which have the most instructive examples? Which teach advanced concepts that are not apparent in perusing most use-case sites? Read at least several dozen pages before deciding how to organize your overview''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== '''What are use cases''' ==&lt;br /&gt;
&lt;br /&gt;
A use case is a technique used in software and systems engineering to capture the functional requirements of a system.&lt;br /&gt;
&lt;br /&gt;
They describe in a sequence of steps,the interaction between the initiator of the interaction—and the system itself.&lt;br /&gt;
The initiator of the interaction is called as Actor. Actors can be end users,hardware devices or other systems,basically someone who takes part in the series of activities in a system.&lt;br /&gt;
&lt;br /&gt;
Each use case is a complete series of events, from the point of view of the actor.One or more scenarios may be generated from each use case, corresponding to the detail of each possible way of achieving that goal.&lt;br /&gt;
&lt;br /&gt;
There are numerous websites and resources on the topic of “Use cases”. We attempt to provide a guide to most useful ones among them. The rest of this page provides links to websites which provide more in depth information describing the use of use cases,use cases templates, examples, and advanced concepts , along with reviews of those sites.&lt;br /&gt;
&lt;br /&gt;
The links are grouped as per the topics which will make it easy to find a related site.Within the group We have compared these on the basis of following criteria:&lt;br /&gt;
&lt;br /&gt;
Level: beginner / intermediate / advanced&lt;br /&gt;
&lt;br /&gt;
Content: short / medium / long&lt;br /&gt;
&lt;br /&gt;
== '''Introduction''' ==&lt;br /&gt;
&lt;br /&gt;
These are introductory tutorials explaining the basics of use cases. Most of them are short and priliminary. &lt;br /&gt;
&lt;br /&gt;
===Beginner===&lt;br /&gt;
&lt;br /&gt;
•	http://www.cragsystems.com/SFRWUC/index.htm&lt;br /&gt;
&lt;br /&gt;
*Level: beginner           &lt;br /&gt;
*Content: long&lt;br /&gt;
&lt;br /&gt;
This is a web-based tutorial that introduces beginners to use cases. It clearly illustrates with appropriate examples the concepts related to use cases. It further describes application of use cases in documenting functional requirements. It also has a short &lt;br /&gt;
quiz, a test and an exercise at the end. Excellent navigation is a plus.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
•	http://www.csc.calpoly.edu/~dbutler/tutorials/winter96/use/&lt;br /&gt;
&lt;br /&gt;
*Level: beginner           &lt;br /&gt;
*Content: short&lt;br /&gt;
&lt;br /&gt;
This short tutorial discusses how use-cases fit into the framework of user-centered analysis. It gives a sample use case of ATM cash withdrawal. It also describes the role of use cases in design and testing phase.&lt;br /&gt;
&lt;br /&gt;
===Beginner /intermediate===&lt;br /&gt;
&lt;br /&gt;
•	http://en.wikipedia.org/wiki/Use_case&lt;br /&gt;
&lt;br /&gt;
*Level: beginner / intermediate         &lt;br /&gt;
*Content: medium&lt;br /&gt;
&lt;br /&gt;
This wiki provides an introduction to use case concepts in very simple terms, so seems to be a good starting point for early beginners. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
•	http://www.parlezuml.com/tutorials/usecases/usecases_intro.pdf&lt;br /&gt;
&lt;br /&gt;
•	http://parlezuml.com/tutorials/usecases/usecases.pdf&lt;br /&gt;
&lt;br /&gt;
*Level: beginner / intermediate         &lt;br /&gt;
*Content: short&lt;br /&gt;
&lt;br /&gt;
These are very short and simple tutorials by Jason Gorman that explain the basics of use cases. Apart from use cases, the author covers the related concepts such as actors, system, scenarios. He also explains special use cases: &amp;lt;&amp;lt;extend&amp;gt;&amp;gt; and &amp;lt;&amp;lt;include&amp;gt;&amp;gt; and provides a brief explanation of how use cases can be part of agile development process.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
•	http://www.bredemeyer.com/use_cases.htm&lt;br /&gt;
&lt;br /&gt;
*Level: beginner / intermediate         &lt;br /&gt;
*Content: short&lt;br /&gt;
&lt;br /&gt;
This is a one-page document illustrating how use cases can be effective means to gather functional requirements. It provides valuable pointers to other use-case resources. Though short, it is quite informative for new learners.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
•	http://alistair.cockburn.us/index.php/Use_case_fundamentals&lt;br /&gt;
&lt;br /&gt;
*Level: beginner / intermediate         &lt;br /&gt;
*Content: short&lt;br /&gt;
&lt;br /&gt;
This is a good website which deals with the scope of use cases..It provides a&lt;br /&gt;
brief description of use cases and actors along with analysis of use case reports.It &lt;br /&gt;
also describes steps involved in validation of use cases.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
•	http://courses.softlab.ntua.gr/softeng/Tutorials/UML-Use-Cases.pdf&lt;br /&gt;
&lt;br /&gt;
*Level: beginner / intermediate         &lt;br /&gt;
*Content: medium&lt;br /&gt;
&lt;br /&gt;
This presentation offers succinct definitions for various terms related to use cases, also provides notational guide for documenting use case diagrams. It explains how to build scenarios ( flow of events in a use case).&lt;br /&gt;
&lt;br /&gt;
===Advanced===&lt;br /&gt;
&lt;br /&gt;
•	http://alistair.cockburn.us/index.php/Structuring_use_cases_with_goals&lt;br /&gt;
&lt;br /&gt;
*Level: intermediate / advanced         &lt;br /&gt;
*Content: long&lt;br /&gt;
&lt;br /&gt;
Here is a great guide to use cases by Alistair Cockburn, a renowned strategist and one of the leaders of agile movement. Though the article quite reader-friendly, it expects the reader to be familiar with at least the basic concepts. It offers brief descriptions of terms involved and analysis of use case reports.&lt;br /&gt;
&lt;br /&gt;
== How to write use cases ==&lt;br /&gt;
&lt;br /&gt;
Writing use cases are not confined to drawing use case diagram. Rather, a written use case is a brief but complete text description of every identified use case (functionality) of the system identified. Some of the instructive articles on this topic are as follows&lt;br /&gt;
&lt;br /&gt;
===Beginner===&lt;br /&gt;
•	http://infogenium.typepad.com/inside_infogenium/2007/07/getting-started.html&lt;br /&gt;
&lt;br /&gt;
*Level: beginner&lt;br /&gt;
*Content: short&lt;br /&gt;
&lt;br /&gt;
Here is a short tutorial for developers that are intimidated by the requirement documentation phase using the use cases. It explains the steps involved in capturing the requirements, introduces the concept of use-case brief. It illustrates the concepts with a file attachment example.&lt;br /&gt;
&lt;br /&gt;
===Intermediate===&lt;br /&gt;
•	http://www.informit.com/articles/article.aspx?p=30084&amp;amp;seqNum=8&amp;amp;rl=1&lt;br /&gt;
&lt;br /&gt;
*Level: intermediate&lt;br /&gt;
*Content: medium&lt;br /&gt;
&lt;br /&gt;
Here is an article that clearly distinguishes between a good use case and a bad use case. It gives an example of course registration for students and then explains writing the use case descriptions. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
•	http://www.answers.com/topic/use-case?cat=technology&lt;br /&gt;
&lt;br /&gt;
*Level: intermediate&lt;br /&gt;
*Content: long&lt;br /&gt;
 &lt;br /&gt;
This is a comprehensive article that starts off with an overview of use cases and provides an excellent reference for how to write use cases. It also comments on various types of use-cases based on the functionality (business/system) or degree of detail (brief / casual / fully dressed).  It elaborates on various sections of use case description.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Writing effective use cases ===&lt;br /&gt;
&lt;br /&gt;
•	http://www.gatherspace.com/static/use_case_example.html&lt;br /&gt;
&lt;br /&gt;
*Level: intermediate / advanced &lt;br /&gt;
*Content: long&lt;br /&gt;
 &lt;br /&gt;
Explains the art of writing effective use cases by considering an example of writing use cases for a mock Ebay site. The practical nature of the example makes it an interesting exercise. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
•	http://alistair.cockburn.us/index.php/Sampler_of_good_%26_bad_use_cases&lt;br /&gt;
&lt;br /&gt;
*Level: intermediate / advanced &lt;br /&gt;
*Content: short&lt;br /&gt;
&lt;br /&gt;
The above link provides some sample good and bad use cases. These can act as Dos and Don'ts for developers.&lt;br /&gt;
&lt;br /&gt;
== '''Format/Template of use cases''' ==&lt;br /&gt;
It's useful to have a template for use case so that there are less chances of missing out on anything.&lt;br /&gt;
&lt;br /&gt;
•	http://alistair.cockburn.us/index.php/Basic_use_case_template&lt;br /&gt;
&lt;br /&gt;
An excellent link which shows how to structure use cases. Provides different use case templates.&lt;br /&gt;
&lt;br /&gt;
== Use case diagrams ==&lt;br /&gt;
&lt;br /&gt;
Pictorial representation of the use case is depicted using use case diagrams. Here are the links to use case diagram tutorials.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
•	http://en.wikipedia.org/wiki/Use_case_diagram&lt;br /&gt;
&lt;br /&gt;
*Level: basic /intermediate&lt;br /&gt;
*Content: medium&lt;br /&gt;
&lt;br /&gt;
This wiki link contains representation of use case generalization along with the notations for use case relationships like extend include.&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
•	http://www.agilemodeling.com/artifacts/useCaseDiagram.htm&lt;br /&gt;
&lt;br /&gt;
•       http://www.andrew.cmu.edu/course/90-754/umlucdfaq.html#uses&lt;br /&gt;
&lt;br /&gt;
*Level: intermediate&lt;br /&gt;
*Content: medium&lt;br /&gt;
&lt;br /&gt;
The above links cover creation and understanding of Use Case Diagrams&lt;br /&gt;
&lt;br /&gt;
== Examples== &lt;br /&gt;
&lt;br /&gt;
===Beginner/ Intermediate===&lt;br /&gt;
• http://www.soi.wide.ad.jp/class/20040034/slides/07/9.html &lt;br /&gt;
&lt;br /&gt;
*	Level :Beginner/Intermediate&lt;br /&gt;
*	Content : Long&lt;br /&gt;
&lt;br /&gt;
This is an excellent presentation which takes up a real-life ‘elevator’ example and provides multiple use-case descriptions for use cases.Since it relates to the real world it is easy for beginners to understand. &lt;br /&gt;
&lt;br /&gt;
• http://www.cs.colorado.edu/~kena/classes/6448/s05/reference/usecases/examples.html &lt;br /&gt;
&lt;br /&gt;
*	Level :Beginner/Intermediate&lt;br /&gt;
*	Content : Short&lt;br /&gt;
&lt;br /&gt;
This is a one-page guide that illustrates the use case briefs, user-level and summary level use case given the actor-goal list and narrative of the system from the user. &lt;br /&gt;
&lt;br /&gt;
• http://courses.softlab.ntua.gr/softeng/Tutorials/UML-Use-Cases.pdf &lt;br /&gt;
&lt;br /&gt;
*	Level : Beginner/Intermediate&lt;br /&gt;
*	Content : Medium&lt;br /&gt;
&lt;br /&gt;
This is an excellent example describing how to write use cases for different scenarios in a system. It takes up a courseware example breaking down different scenarios and explaining use cases.&lt;br /&gt;
&lt;br /&gt;
• http://www.objectmentor.com/resources/articles/usecases.pdf &lt;br /&gt;
&lt;br /&gt;
*	Level : Beginner&lt;br /&gt;
*	Content :Short&lt;br /&gt;
&lt;br /&gt;
This provides a simple example and explains use cases with use case diagrams for some of the functionalities. &lt;br /&gt;
&lt;br /&gt;
• http://www.w3.org/2002/06/ws-example &lt;br /&gt;
&lt;br /&gt;
*	Level : Beginner&lt;br /&gt;
*	Content : Short &lt;br /&gt;
&lt;br /&gt;
This is a comprehensive example.It takes up a travel reservation system and attempts to explain different scenarios like checking availability of tickets,booking flights and hotels.It explains with great detail each scenario.&lt;br /&gt;
&lt;br /&gt;
• http://www.agilemodeling.com/essays/useCaseReuse.htm &lt;br /&gt;
&lt;br /&gt;
*	Level : Beginner&lt;br /&gt;
*	Content : Short &lt;br /&gt;
&lt;br /&gt;
This is example taking up only one scenario ”Enroll in University” uses narrative style of writing a use case.&lt;br /&gt;
&lt;br /&gt;
===Advanced===&lt;br /&gt;
• http://www.se.cuhk.edu.hk/~seg3430/2007/tutorial/tutorial04.pdf &lt;br /&gt;
&lt;br /&gt;
*	Level : Intermediate/Advanced&lt;br /&gt;
*	Content : Long&lt;br /&gt;
&lt;br /&gt;
Though quite long, this link describes use cases for a credit card payment service.&lt;br /&gt;
&lt;br /&gt;
== Advanced Concepts ==&lt;br /&gt;
&lt;br /&gt;
'''Pluggable use cases''':&lt;br /&gt;
&lt;br /&gt;
http://alistair.cockburn.us/index.php/Pluggable_use_cases&lt;br /&gt;
&lt;br /&gt;
This introduces readers to concept of Pluggable use cases. &lt;br /&gt;
&lt;br /&gt;
'''Essential use-cases''':&lt;br /&gt;
&lt;br /&gt;
http://www.agilemodeling.com/artifacts/essentialUseCase.htm&lt;br /&gt;
&lt;br /&gt;
Essential use-case can be thought of as a less verbose and more succint version of the use case description. This document compares the traditional use case to essential use case.&lt;br /&gt;
&lt;br /&gt;
'''Future direction:'''&lt;br /&gt;
&lt;br /&gt;
http://alistair.cockburn.us/index.php/Use_cases%2C_ten_years_later&lt;br /&gt;
&lt;br /&gt;
This article predicts the direction of future research in the field of use cases.&lt;br /&gt;
&lt;br /&gt;
== Tools ==&lt;br /&gt;
&lt;br /&gt;
'''Rational Rose:''' &lt;br /&gt;
&lt;br /&gt;
One of the most popular tool for use-case driven development.&lt;br /&gt;
&lt;br /&gt;
http://www-306.ibm.com/software/awdtools/developer/rose/index.html&lt;br /&gt;
&lt;br /&gt;
'''Sun Java Studio Enterprise:''' &lt;br /&gt;
&lt;br /&gt;
Sun Java Studio Enterprise offers a UML tool. &lt;br /&gt;
&lt;br /&gt;
http://developers.sun.com/jsenterprise/&lt;br /&gt;
&lt;br /&gt;
'''Visual case:''' &lt;br /&gt;
&lt;br /&gt;
UML &amp;amp; E/R Database Design Tool&lt;br /&gt;
&lt;br /&gt;
http://www.visualcase.com/&lt;br /&gt;
&lt;br /&gt;
== Quick references ==&lt;br /&gt;
&lt;br /&gt;
Some quick references for studying use cases&lt;br /&gt;
&lt;br /&gt;
•	http://www.oreilly.com.cn/samplechap/uml20inanutshell/UML20-ch07.pdf&lt;br /&gt;
&lt;br /&gt;
•	http://www.cs.rit.edu/~jaa/CS4/Lectures/UseCase.PDF&lt;br /&gt;
&lt;br /&gt;
•	http://www.alagad.com/go/blog-entry/uml-use-case-diagrams&lt;br /&gt;
&lt;br /&gt;
•	http://www.cs.nmsu.edu/~jeffery/courses/371/lecture.html&lt;br /&gt;
&lt;br /&gt;
== Good Tutorials ==&lt;br /&gt;
&lt;br /&gt;
•	http://www.parlezuml.com/tutorials/usecases/usecases.pdf&lt;br /&gt;
&lt;br /&gt;
•	http://www.readysetpro.com/whitepapers/usecasetut.html &lt;br /&gt;
&lt;br /&gt;
Two very easy and informative tutorials for beginners who are not familiar with use cases. Both the tutorials contain some very good and simple examples coupled with easily understandable pictures. The first tutorial focuses on use case driven development and UML diagrams while the second deals with writing effective use cases.&lt;br /&gt;
&lt;br /&gt;
== Presentations Online ==&lt;br /&gt;
&lt;br /&gt;
•	https://users.cs.jmu.edu/bernstdh/web/common/lectures/slides_use-cases.php&lt;br /&gt;
&lt;br /&gt;
This presentation describes writing use cases along with constructing use case diagrams&lt;br /&gt;
&lt;br /&gt;
•	http://www-rohan.sdsu.edu/faculty/rnorman/course/ids306/Lect_c4.ppt&lt;br /&gt;
&lt;br /&gt;
This is a very good presentation that explains the concepts with familiar real life examples.&lt;br /&gt;
&lt;br /&gt;
•	http://www.cragsystems.com/SFRWUC/index.htm&lt;br /&gt;
&lt;br /&gt;
This web-based tutorial describes creating a Use Case Model of the functional requirements for a computer system.&lt;br /&gt;
&lt;br /&gt;
== Books ==&lt;br /&gt;
&lt;br /&gt;
Following are good books for learning use cases&lt;br /&gt;
&lt;br /&gt;
[[http://www.amazon.com/Writing-Effective-Cases-Alistair-Cockburn/dp/0201702258 Writing Effective Use Cases by Alistair Cockburn ]]&lt;br /&gt;
&lt;br /&gt;
[[http://www.amazon.com/Object-Oriented-Software-Engineering-Driven-Approach/dp/0201544350 Object-Oriented Software Engineering: A Use Case Driven Approach by Ivar Jacobson ]]&lt;br /&gt;
&lt;br /&gt;
== References on the Web ==&lt;br /&gt;
&lt;br /&gt;
'''Books:'''&lt;br /&gt;
&lt;br /&gt;
1.	Jocabson, Ivar. Basic Use-Case modeling, Report on Object Analysis and Design, 1(2): 15-19, 1994 &lt;br /&gt;
&lt;br /&gt;
2.	Jocabson, Ivar. Baisc Use-Case Modeling (Continued), Report on Object Analysis and Design, 1(3): 7-9, 1994 &lt;br /&gt;
&lt;br /&gt;
3.	Rumbaugh, James. Journal of Object-Oriented Programming: 8-12, 23, Sept. 1994&lt;br /&gt;
&lt;br /&gt;
'''Online Resources:'''&lt;br /&gt;
&lt;br /&gt;
Alistair Cockburn Home Page: http://alistair.cockburn.us/index.php/Main_Page&lt;br /&gt;
&lt;br /&gt;
Tutorial links: http://www.answers.com/topic/use-case?cat=technology&lt;br /&gt;
&lt;br /&gt;
All the links mentioned in the review.&lt;/div&gt;</summary>
		<author><name>Nnmodak</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2007/wiki2_4_np&amp;diff=8069</id>
		<title>CSC/ECE 517 Fall 2007/wiki2 4 np</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2007/wiki2_4_np&amp;diff=8069"/>
		<updated>2007-10-29T21:40:29Z</updated>

		<summary type="html">&lt;p&gt;Nnmodak: /* beginner /intermediate */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''Use cases. There are even more pages on the Web on use cases than on MVC. If someone wants to learn about them, what should (s)he do? Look at the first few hits in Google? I expect we can do better than that. Write a review of the use-case sites on the Web. Which are best for learning about the concept? Which have the most instructive examples? Which teach advanced concepts that are not apparent in perusing most use-case sites? Read at least several dozen pages before deciding how to organize your overview''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== '''What are use cases''' ==&lt;br /&gt;
&lt;br /&gt;
A use case is a technique used in software and systems engineering to capture the functional requirements of a system.&lt;br /&gt;
&lt;br /&gt;
They describe in a sequence of steps,the interaction between the initiator of the interaction—and the system itself.&lt;br /&gt;
The initiator of the interaction is called as Actor. Actors can be end users,hardware devices or other systems,basically someone who takes part in the series of activities in a system.&lt;br /&gt;
&lt;br /&gt;
Each use case is a complete series of events, from the point of view of the actor.One or more scenarios may be generated from each use case, corresponding to the detail of each possible way of achieving that goal.&lt;br /&gt;
&lt;br /&gt;
There are numerous websites and resources on the topic of “Use cases”. We attempt to provide a guide to most useful ones among them. The rest of this page provides links to websites which provide more in depth information describing the use of use cases,use cases templates, examples, and advanced concepts , along with reviews of those sites.&lt;br /&gt;
&lt;br /&gt;
The links are grouped as per the topics which will make it easy to find a related site.Within the group We have compared these on the basis of following criteria:&lt;br /&gt;
&lt;br /&gt;
Level: beginner / intermediate / advanced&lt;br /&gt;
&lt;br /&gt;
Content: short / medium / long&lt;br /&gt;
&lt;br /&gt;
== '''Introduction''' ==&lt;br /&gt;
&lt;br /&gt;
These are introductory tutorials explaining the basics of use cases. Most of them are short and priliminary. &lt;br /&gt;
&lt;br /&gt;
===Beginner===&lt;br /&gt;
&lt;br /&gt;
•	http://www.cragsystems.com/SFRWUC/index.htm&lt;br /&gt;
&lt;br /&gt;
*Level: beginner           &lt;br /&gt;
*Content: long&lt;br /&gt;
&lt;br /&gt;
This is a web-based tutorial that introduces beginners to use cases. It clearly illustrates with appropriate examples the concepts related to use cases. It further describes application of use cases in documenting functional requirements. It also has a short &lt;br /&gt;
quiz, a test and an exercise at the end. Excellent navigation is a plus.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
•	http://www.csc.calpoly.edu/~dbutler/tutorials/winter96/use/&lt;br /&gt;
&lt;br /&gt;
*Level: beginner           &lt;br /&gt;
*Content: short&lt;br /&gt;
&lt;br /&gt;
This short tutorial discusses how use-cases fit into the framework of user-centered analysis. It gives a sample use case of ATM cash withdrawal. It also describes the role of use cases in design and testing phase.&lt;br /&gt;
&lt;br /&gt;
===Beginner /intermediate===&lt;br /&gt;
&lt;br /&gt;
•	http://en.wikipedia.org/wiki/Use_case&lt;br /&gt;
&lt;br /&gt;
*Level: beginner / intermediate         &lt;br /&gt;
*Content: medium&lt;br /&gt;
&lt;br /&gt;
This wiki provides an introduction to use case concepts in very simple terms, so seems to be a good starting point for early beginners. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
•	http://www.parlezuml.com/tutorials/usecases/usecases_intro.pdf&lt;br /&gt;
&lt;br /&gt;
•	http://parlezuml.com/tutorials/usecases/usecases.pdf&lt;br /&gt;
&lt;br /&gt;
*Level: beginner / intermediate         &lt;br /&gt;
*Content: short&lt;br /&gt;
&lt;br /&gt;
These are very short and simple tutorials by Jason Gorman that explain the basics of use cases. Apart from use cases, the author covers the related concepts such as actors, system, scenarios. He also explains special use cases: &amp;lt;&amp;lt;extend&amp;gt;&amp;gt; and &amp;lt;&amp;lt;include&amp;gt;&amp;gt; and provides a brief explanation of how use cases can be part of agile development process.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
•	http://www.bredemeyer.com/use_cases.htm&lt;br /&gt;
&lt;br /&gt;
*Level: beginner / intermediate         &lt;br /&gt;
*Content: short&lt;br /&gt;
&lt;br /&gt;
This is a one-page document illustrating how use cases can be effective means to gather functional requirements. It provides valuable pointers to other use-case resources. Though short, it is quite informative for new learners.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
•	http://alistair.cockburn.us/index.php/Use_case_fundamentals&lt;br /&gt;
&lt;br /&gt;
*Level: beginner / intermediate         &lt;br /&gt;
*Content: short&lt;br /&gt;
&lt;br /&gt;
This is a good website which deals with the scope of use cases..It provides a&lt;br /&gt;
brief description of use cases and actors along with analysis of use case reports.It &lt;br /&gt;
also describes steps involved in validation of use cases.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
•	http://courses.softlab.ntua.gr/softeng/Tutorials/UML-Use-Cases.pdf&lt;br /&gt;
&lt;br /&gt;
*Level: beginner / intermediate         &lt;br /&gt;
*Content: medium&lt;br /&gt;
&lt;br /&gt;
This presentation offers succinct definitions for various terms related to use cases, also provides notational guide for documenting use case diagrams. It explains how to build scenarios ( flow of events in a use case).&lt;br /&gt;
&lt;br /&gt;
===Advanced===&lt;br /&gt;
&lt;br /&gt;
•	http://alistair.cockburn.us/index.php/Structuring_use_cases_with_goals&lt;br /&gt;
&lt;br /&gt;
*Level: intermediate / advanced         &lt;br /&gt;
*Content: long&lt;br /&gt;
&lt;br /&gt;
Here is a great guide to use cases by Alistair Cockburn, a renowned strategist and one of the leaders of agile movement. Though the article quite reader-friendly, it expects the reader to be familiar with at least the basic concepts. It offers brief descriptions of terms involved and analysis of use case reports.&lt;br /&gt;
&lt;br /&gt;
== How to write use cases ==&lt;br /&gt;
&lt;br /&gt;
Writing use cases are not confined to drawing use case diagram. Rather, a written use case is a brief but complete text description of every identified use case (functionality) of the system identified. Some of the instructive articles on this topic are as follows&lt;br /&gt;
&lt;br /&gt;
===Beginner===&lt;br /&gt;
•	http://infogenium.typepad.com/inside_infogenium/2007/07/getting-started.html&lt;br /&gt;
&lt;br /&gt;
*Level: beginner&lt;br /&gt;
*Content: short&lt;br /&gt;
&lt;br /&gt;
Here is a short tutorial for developers that are intimidated by the requirement documentation phase using the use cases. It explains the steps involved in capturing the requirements, introduces the concept of use-case brief. It illustrates the concepts with a file attachment example.&lt;br /&gt;
&lt;br /&gt;
===Intermediate===&lt;br /&gt;
•	http://www.informit.com/articles/article.aspx?p=30084&amp;amp;seqNum=8&amp;amp;rl=1&lt;br /&gt;
&lt;br /&gt;
*Level: intermediate&lt;br /&gt;
*Content: medium&lt;br /&gt;
&lt;br /&gt;
Here is an article that clearly distinguishes between a good use case and a bad use case. It gives an example of course registration for students and then explains writing the use case descriptions. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
•	http://www.answers.com/topic/use-case?cat=technology&lt;br /&gt;
&lt;br /&gt;
*Level: intermediate&lt;br /&gt;
*Content: long&lt;br /&gt;
 &lt;br /&gt;
This is a comprehensive article that starts off with an overview of use cases and provides an excellent reference for how to write use cases. It also comments on various types of use-cases based on the functionality (business/system) or degree of detail (brief / casual / fully dressed).  It elaborates on various sections of use case description.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Writing effective use cases ===&lt;br /&gt;
&lt;br /&gt;
•	http://www.gatherspace.com/static/use_case_example.html&lt;br /&gt;
&lt;br /&gt;
*Level: intermediate / advanced &lt;br /&gt;
*Content: long&lt;br /&gt;
 &lt;br /&gt;
Explains the art of writing effective use cases by considering an example of writing use cases for a mock Ebay site. The practical nature of the example makes it an interesting exercise. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
•	http://alistair.cockburn.us/index.php/Sampler_of_good_%26_bad_use_cases&lt;br /&gt;
&lt;br /&gt;
*Level: intermediate / advanced &lt;br /&gt;
*Content: short&lt;br /&gt;
&lt;br /&gt;
The above link provides some sample good and bad use cases. These can act as Dos and Don'ts for developers.&lt;br /&gt;
&lt;br /&gt;
== Format/Template of use cases ==&lt;br /&gt;
It's useful to have a template for use case so that there are less chances of missing out on anything.&lt;br /&gt;
&lt;br /&gt;
•	http://alistair.cockburn.us/index.php/Basic_use_case_template&lt;br /&gt;
&lt;br /&gt;
An excellent link which shows how to structure use cases. Provides different use case templates.&lt;br /&gt;
&lt;br /&gt;
== Use case diagrams ==&lt;br /&gt;
&lt;br /&gt;
Pictorial representation of the use case is depicted using use case diagrams. Here are the links to use case diagram tutorials.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
•	http://en.wikipedia.org/wiki/Use_case_diagram&lt;br /&gt;
&lt;br /&gt;
*Level: basic /intermediate&lt;br /&gt;
*Content: medium&lt;br /&gt;
&lt;br /&gt;
This wiki link contains representation of use case generalization along with the notations for use case relationships like extend include.&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
•	http://www.agilemodeling.com/artifacts/useCaseDiagram.htm&lt;br /&gt;
&lt;br /&gt;
•       http://www.andrew.cmu.edu/course/90-754/umlucdfaq.html#uses&lt;br /&gt;
&lt;br /&gt;
*Level: intermediate&lt;br /&gt;
*Content: medium&lt;br /&gt;
&lt;br /&gt;
The above links cover creation and understanding of Use Case Diagrams&lt;br /&gt;
&lt;br /&gt;
== Examples== &lt;br /&gt;
&lt;br /&gt;
===Beginner/ Intermediate===&lt;br /&gt;
• http://www.soi.wide.ad.jp/class/20040034/slides/07/9.html &lt;br /&gt;
&lt;br /&gt;
*	Level :Beginner/Intermediate&lt;br /&gt;
*	Content : Long&lt;br /&gt;
&lt;br /&gt;
This is an excellent presentation which takes up a real-life ‘elevator’ example and provides multiple use-case descriptions for use cases.Since it relates to the real world it is easy for beginners to understand. &lt;br /&gt;
&lt;br /&gt;
• http://www.cs.colorado.edu/~kena/classes/6448/s05/reference/usecases/examples.html &lt;br /&gt;
&lt;br /&gt;
*	Level :Beginner/Intermediate&lt;br /&gt;
*	Content : Short&lt;br /&gt;
&lt;br /&gt;
This is a one-page guide that illustrates the use case briefs, user-level and summary level use case given the actor-goal list and narrative of the system from the user. &lt;br /&gt;
&lt;br /&gt;
• http://courses.softlab.ntua.gr/softeng/Tutorials/UML-Use-Cases.pdf &lt;br /&gt;
&lt;br /&gt;
*	Level : Beginner/Intermediate&lt;br /&gt;
*	Content : Medium&lt;br /&gt;
&lt;br /&gt;
This is an excellent example describing how to write use cases for different scenarios in a system. It takes up a courseware example breaking down different scenarios and explaining use cases.&lt;br /&gt;
&lt;br /&gt;
• http://www.objectmentor.com/resources/articles/usecases.pdf &lt;br /&gt;
&lt;br /&gt;
*	Level : Beginner&lt;br /&gt;
*	Content :Short&lt;br /&gt;
&lt;br /&gt;
This provides a simple example and explains use cases with use case diagrams for some of the functionalities. &lt;br /&gt;
&lt;br /&gt;
• http://www.w3.org/2002/06/ws-example &lt;br /&gt;
&lt;br /&gt;
*	Level : Beginner&lt;br /&gt;
*	Content : Short &lt;br /&gt;
&lt;br /&gt;
This is a comprehensive example.It takes up a travel reservation system and attempts to explain different scenarios like checking availability of tickets,booking flights and hotels.It explains with great detail each scenario.&lt;br /&gt;
&lt;br /&gt;
• http://www.agilemodeling.com/essays/useCaseReuse.htm &lt;br /&gt;
&lt;br /&gt;
*	Level : Beginner&lt;br /&gt;
*	Content : Short &lt;br /&gt;
&lt;br /&gt;
This is example taking up only one scenario ”Enroll in University” uses narrative style of writing a use case.&lt;br /&gt;
&lt;br /&gt;
===Advanced===&lt;br /&gt;
• http://www.se.cuhk.edu.hk/~seg3430/2007/tutorial/tutorial04.pdf &lt;br /&gt;
&lt;br /&gt;
*	Level : Intermediate/Advanced&lt;br /&gt;
*	Content : Long&lt;br /&gt;
&lt;br /&gt;
Though quite long, this link describes use cases for a credit card payment service.&lt;br /&gt;
&lt;br /&gt;
== Advanced Concepts ==&lt;br /&gt;
&lt;br /&gt;
'''Pluggable use cases''':&lt;br /&gt;
&lt;br /&gt;
http://alistair.cockburn.us/index.php/Pluggable_use_cases&lt;br /&gt;
&lt;br /&gt;
This introduces readers to concept of Pluggable use cases. &lt;br /&gt;
&lt;br /&gt;
'''Essential use-cases''':&lt;br /&gt;
&lt;br /&gt;
http://www.agilemodeling.com/artifacts/essentialUseCase.htm&lt;br /&gt;
&lt;br /&gt;
Essential use-case can be thought of as a less verbose and more succint version of the use case description. This document compares the traditional use case to essential use case.&lt;br /&gt;
&lt;br /&gt;
'''Future direction:'''&lt;br /&gt;
&lt;br /&gt;
http://alistair.cockburn.us/index.php/Use_cases%2C_ten_years_later&lt;br /&gt;
&lt;br /&gt;
This article predicts the direction of future research in the field of use cases.&lt;br /&gt;
&lt;br /&gt;
== Tools ==&lt;br /&gt;
&lt;br /&gt;
'''Rational Rose:''' &lt;br /&gt;
&lt;br /&gt;
One of the most popular tool for use-case driven development.&lt;br /&gt;
&lt;br /&gt;
http://www-306.ibm.com/software/awdtools/developer/rose/index.html&lt;br /&gt;
&lt;br /&gt;
'''Sun Java Studio Enterprise:''' &lt;br /&gt;
&lt;br /&gt;
Sun Java Studio Enterprise offers a UML tool. &lt;br /&gt;
&lt;br /&gt;
http://developers.sun.com/jsenterprise/&lt;br /&gt;
&lt;br /&gt;
'''Visual case:''' &lt;br /&gt;
&lt;br /&gt;
UML &amp;amp; E/R Database Design Tool&lt;br /&gt;
&lt;br /&gt;
http://www.visualcase.com/&lt;br /&gt;
&lt;br /&gt;
== Quick references ==&lt;br /&gt;
&lt;br /&gt;
Some quick references for studying use cases&lt;br /&gt;
&lt;br /&gt;
•	http://www.oreilly.com.cn/samplechap/uml20inanutshell/UML20-ch07.pdf&lt;br /&gt;
&lt;br /&gt;
•	http://www.cs.rit.edu/~jaa/CS4/Lectures/UseCase.PDF&lt;br /&gt;
&lt;br /&gt;
•	http://www.alagad.com/go/blog-entry/uml-use-case-diagrams&lt;br /&gt;
&lt;br /&gt;
•	http://www.cs.nmsu.edu/~jeffery/courses/371/lecture.html&lt;br /&gt;
&lt;br /&gt;
== Good Tutorials ==&lt;br /&gt;
&lt;br /&gt;
•	http://www.parlezuml.com/tutorials/usecases/usecases.pdf&lt;br /&gt;
&lt;br /&gt;
•	http://www.readysetpro.com/whitepapers/usecasetut.html &lt;br /&gt;
&lt;br /&gt;
Two very easy and informative tutorials for beginners who are not familiar with use cases. Both the tutorials contain some very good and simple examples coupled with easily understandable pictures. The first tutorial focuses on use case driven development and UML diagrams while the second deals with writing effective use cases.&lt;br /&gt;
&lt;br /&gt;
== Presentations Online ==&lt;br /&gt;
&lt;br /&gt;
•	https://users.cs.jmu.edu/bernstdh/web/common/lectures/slides_use-cases.php&lt;br /&gt;
&lt;br /&gt;
This presentation describes writing use cases along with constructing use case diagrams&lt;br /&gt;
&lt;br /&gt;
•	http://www-rohan.sdsu.edu/faculty/rnorman/course/ids306/Lect_c4.ppt&lt;br /&gt;
&lt;br /&gt;
This is a very good presentation that explains the concepts with familiar real life examples.&lt;br /&gt;
&lt;br /&gt;
•	http://www.cragsystems.com/SFRWUC/index.htm&lt;br /&gt;
&lt;br /&gt;
This web-based tutorial describes creating a Use Case Model of the functional requirements for a computer system.&lt;br /&gt;
&lt;br /&gt;
== Books ==&lt;br /&gt;
&lt;br /&gt;
Following are good books for learning use cases&lt;br /&gt;
&lt;br /&gt;
[[http://www.amazon.com/Writing-Effective-Cases-Alistair-Cockburn/dp/0201702258 Writing Effective Use Cases by Alistair Cockburn ]]&lt;br /&gt;
&lt;br /&gt;
[[http://www.amazon.com/Object-Oriented-Software-Engineering-Driven-Approach/dp/0201544350 Object-Oriented Software Engineering: A Use Case Driven Approach by Ivar Jacobson ]]&lt;br /&gt;
&lt;br /&gt;
== References on the Web ==&lt;br /&gt;
&lt;br /&gt;
'''Books:'''&lt;br /&gt;
&lt;br /&gt;
1.	Jocabson, Ivar. Basic Use-Case modeling, Report on Object Analysis and Design, 1(2): 15-19, 1994 &lt;br /&gt;
&lt;br /&gt;
2.	Jocabson, Ivar. Baisc Use-Case Modeling (Continued), Report on Object Analysis and Design, 1(3): 7-9, 1994 &lt;br /&gt;
&lt;br /&gt;
3.	Rumbaugh, James. Journal of Object-Oriented Programming: 8-12, 23, Sept. 1994&lt;br /&gt;
&lt;br /&gt;
'''Online Resources:'''&lt;br /&gt;
&lt;br /&gt;
Alistair Cockburn Home Page: http://alistair.cockburn.us/index.php/Main_Page&lt;br /&gt;
&lt;br /&gt;
Tutorial links: http://www.answers.com/topic/use-case?cat=technology&lt;br /&gt;
&lt;br /&gt;
All the links mentioned in the review.&lt;/div&gt;</summary>
		<author><name>Nnmodak</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2007/wiki2_4_np&amp;diff=8068</id>
		<title>CSC/ECE 517 Fall 2007/wiki2 4 np</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2007/wiki2_4_np&amp;diff=8068"/>
		<updated>2007-10-29T21:40:13Z</updated>

		<summary type="html">&lt;p&gt;Nnmodak: /* Advaced */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''Use cases. There are even more pages on the Web on use cases than on MVC. If someone wants to learn about them, what should (s)he do? Look at the first few hits in Google? I expect we can do better than that. Write a review of the use-case sites on the Web. Which are best for learning about the concept? Which have the most instructive examples? Which teach advanced concepts that are not apparent in perusing most use-case sites? Read at least several dozen pages before deciding how to organize your overview''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== '''What are use cases''' ==&lt;br /&gt;
&lt;br /&gt;
A use case is a technique used in software and systems engineering to capture the functional requirements of a system.&lt;br /&gt;
&lt;br /&gt;
They describe in a sequence of steps,the interaction between the initiator of the interaction—and the system itself.&lt;br /&gt;
The initiator of the interaction is called as Actor. Actors can be end users,hardware devices or other systems,basically someone who takes part in the series of activities in a system.&lt;br /&gt;
&lt;br /&gt;
Each use case is a complete series of events, from the point of view of the actor.One or more scenarios may be generated from each use case, corresponding to the detail of each possible way of achieving that goal.&lt;br /&gt;
&lt;br /&gt;
There are numerous websites and resources on the topic of “Use cases”. We attempt to provide a guide to most useful ones among them. The rest of this page provides links to websites which provide more in depth information describing the use of use cases,use cases templates, examples, and advanced concepts , along with reviews of those sites.&lt;br /&gt;
&lt;br /&gt;
The links are grouped as per the topics which will make it easy to find a related site.Within the group We have compared these on the basis of following criteria:&lt;br /&gt;
&lt;br /&gt;
Level: beginner / intermediate / advanced&lt;br /&gt;
&lt;br /&gt;
Content: short / medium / long&lt;br /&gt;
&lt;br /&gt;
== '''Introduction''' ==&lt;br /&gt;
&lt;br /&gt;
These are introductory tutorials explaining the basics of use cases. Most of them are short and priliminary. &lt;br /&gt;
&lt;br /&gt;
===Beginner===&lt;br /&gt;
&lt;br /&gt;
•	http://www.cragsystems.com/SFRWUC/index.htm&lt;br /&gt;
&lt;br /&gt;
*Level: beginner           &lt;br /&gt;
*Content: long&lt;br /&gt;
&lt;br /&gt;
This is a web-based tutorial that introduces beginners to use cases. It clearly illustrates with appropriate examples the concepts related to use cases. It further describes application of use cases in documenting functional requirements. It also has a short &lt;br /&gt;
quiz, a test and an exercise at the end. Excellent navigation is a plus.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
•	http://www.csc.calpoly.edu/~dbutler/tutorials/winter96/use/&lt;br /&gt;
&lt;br /&gt;
*Level: beginner           &lt;br /&gt;
*Content: short&lt;br /&gt;
&lt;br /&gt;
This short tutorial discusses how use-cases fit into the framework of user-centered analysis. It gives a sample use case of ATM cash withdrawal. It also describes the role of use cases in design and testing phase.&lt;br /&gt;
&lt;br /&gt;
===beginner /intermediate===&lt;br /&gt;
&lt;br /&gt;
•	http://en.wikipedia.org/wiki/Use_case&lt;br /&gt;
&lt;br /&gt;
*Level: beginner / intermediate         &lt;br /&gt;
*Content: medium&lt;br /&gt;
&lt;br /&gt;
This wiki provides an introduction to use case concepts in very simple terms, so seems to be a good starting point for early beginners. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
•	http://www.parlezuml.com/tutorials/usecases/usecases_intro.pdf&lt;br /&gt;
&lt;br /&gt;
•	http://parlezuml.com/tutorials/usecases/usecases.pdf&lt;br /&gt;
&lt;br /&gt;
*Level: beginner / intermediate         &lt;br /&gt;
*Content: short&lt;br /&gt;
&lt;br /&gt;
These are very short and simple tutorials by Jason Gorman that explain the basics of use cases. Apart from use cases, the author covers the related concepts such as actors, system, scenarios. He also explains special use cases: &amp;lt;&amp;lt;extend&amp;gt;&amp;gt; and &amp;lt;&amp;lt;include&amp;gt;&amp;gt; and provides a brief explanation of how use cases can be part of agile development process.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
•	http://www.bredemeyer.com/use_cases.htm&lt;br /&gt;
&lt;br /&gt;
*Level: beginner / intermediate         &lt;br /&gt;
*Content: short&lt;br /&gt;
&lt;br /&gt;
This is a one-page document illustrating how use cases can be effective means to gather functional requirements. It provides valuable pointers to other use-case resources. Though short, it is quite informative for new learners.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
•	http://alistair.cockburn.us/index.php/Use_case_fundamentals&lt;br /&gt;
&lt;br /&gt;
*Level: beginner / intermediate         &lt;br /&gt;
*Content: short&lt;br /&gt;
&lt;br /&gt;
This is a good website which deals with the scope of use cases..It provides a&lt;br /&gt;
brief description of use cases and actors along with analysis of use case reports.It &lt;br /&gt;
also describes steps involved in validation of use cases.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
•	http://courses.softlab.ntua.gr/softeng/Tutorials/UML-Use-Cases.pdf&lt;br /&gt;
&lt;br /&gt;
*Level: beginner / intermediate         &lt;br /&gt;
*Content: medium&lt;br /&gt;
&lt;br /&gt;
This presentation offers succinct definitions for various terms related to use cases, also provides notational guide for documenting use case diagrams. It explains how to build scenarios ( flow of events in a use case).&lt;br /&gt;
&lt;br /&gt;
===Advanced===&lt;br /&gt;
&lt;br /&gt;
•	http://alistair.cockburn.us/index.php/Structuring_use_cases_with_goals&lt;br /&gt;
&lt;br /&gt;
*Level: intermediate / advanced         &lt;br /&gt;
*Content: long&lt;br /&gt;
&lt;br /&gt;
Here is a great guide to use cases by Alistair Cockburn, a renowned strategist and one of the leaders of agile movement. Though the article quite reader-friendly, it expects the reader to be familiar with at least the basic concepts. It offers brief descriptions of terms involved and analysis of use case reports.&lt;br /&gt;
&lt;br /&gt;
== How to write use cases ==&lt;br /&gt;
&lt;br /&gt;
Writing use cases are not confined to drawing use case diagram. Rather, a written use case is a brief but complete text description of every identified use case (functionality) of the system identified. Some of the instructive articles on this topic are as follows&lt;br /&gt;
&lt;br /&gt;
===Beginner===&lt;br /&gt;
•	http://infogenium.typepad.com/inside_infogenium/2007/07/getting-started.html&lt;br /&gt;
&lt;br /&gt;
*Level: beginner&lt;br /&gt;
*Content: short&lt;br /&gt;
&lt;br /&gt;
Here is a short tutorial for developers that are intimidated by the requirement documentation phase using the use cases. It explains the steps involved in capturing the requirements, introduces the concept of use-case brief. It illustrates the concepts with a file attachment example.&lt;br /&gt;
&lt;br /&gt;
===Intermediate===&lt;br /&gt;
•	http://www.informit.com/articles/article.aspx?p=30084&amp;amp;seqNum=8&amp;amp;rl=1&lt;br /&gt;
&lt;br /&gt;
*Level: intermediate&lt;br /&gt;
*Content: medium&lt;br /&gt;
&lt;br /&gt;
Here is an article that clearly distinguishes between a good use case and a bad use case. It gives an example of course registration for students and then explains writing the use case descriptions. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
•	http://www.answers.com/topic/use-case?cat=technology&lt;br /&gt;
&lt;br /&gt;
*Level: intermediate&lt;br /&gt;
*Content: long&lt;br /&gt;
 &lt;br /&gt;
This is a comprehensive article that starts off with an overview of use cases and provides an excellent reference for how to write use cases. It also comments on various types of use-cases based on the functionality (business/system) or degree of detail (brief / casual / fully dressed).  It elaborates on various sections of use case description.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Writing effective use cases ===&lt;br /&gt;
&lt;br /&gt;
•	http://www.gatherspace.com/static/use_case_example.html&lt;br /&gt;
&lt;br /&gt;
*Level: intermediate / advanced &lt;br /&gt;
*Content: long&lt;br /&gt;
 &lt;br /&gt;
Explains the art of writing effective use cases by considering an example of writing use cases for a mock Ebay site. The practical nature of the example makes it an interesting exercise. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
•	http://alistair.cockburn.us/index.php/Sampler_of_good_%26_bad_use_cases&lt;br /&gt;
&lt;br /&gt;
*Level: intermediate / advanced &lt;br /&gt;
*Content: short&lt;br /&gt;
&lt;br /&gt;
The above link provides some sample good and bad use cases. These can act as Dos and Don'ts for developers.&lt;br /&gt;
&lt;br /&gt;
== Format/Template of use cases ==&lt;br /&gt;
It's useful to have a template for use case so that there are less chances of missing out on anything.&lt;br /&gt;
&lt;br /&gt;
•	http://alistair.cockburn.us/index.php/Basic_use_case_template&lt;br /&gt;
&lt;br /&gt;
An excellent link which shows how to structure use cases. Provides different use case templates.&lt;br /&gt;
&lt;br /&gt;
== Use case diagrams ==&lt;br /&gt;
&lt;br /&gt;
Pictorial representation of the use case is depicted using use case diagrams. Here are the links to use case diagram tutorials.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
•	http://en.wikipedia.org/wiki/Use_case_diagram&lt;br /&gt;
&lt;br /&gt;
*Level: basic /intermediate&lt;br /&gt;
*Content: medium&lt;br /&gt;
&lt;br /&gt;
This wiki link contains representation of use case generalization along with the notations for use case relationships like extend include.&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
•	http://www.agilemodeling.com/artifacts/useCaseDiagram.htm&lt;br /&gt;
&lt;br /&gt;
•       http://www.andrew.cmu.edu/course/90-754/umlucdfaq.html#uses&lt;br /&gt;
&lt;br /&gt;
*Level: intermediate&lt;br /&gt;
*Content: medium&lt;br /&gt;
&lt;br /&gt;
The above links cover creation and understanding of Use Case Diagrams&lt;br /&gt;
&lt;br /&gt;
== Examples== &lt;br /&gt;
&lt;br /&gt;
===Beginner/ Intermediate===&lt;br /&gt;
• http://www.soi.wide.ad.jp/class/20040034/slides/07/9.html &lt;br /&gt;
&lt;br /&gt;
*	Level :Beginner/Intermediate&lt;br /&gt;
*	Content : Long&lt;br /&gt;
&lt;br /&gt;
This is an excellent presentation which takes up a real-life ‘elevator’ example and provides multiple use-case descriptions for use cases.Since it relates to the real world it is easy for beginners to understand. &lt;br /&gt;
&lt;br /&gt;
• http://www.cs.colorado.edu/~kena/classes/6448/s05/reference/usecases/examples.html &lt;br /&gt;
&lt;br /&gt;
*	Level :Beginner/Intermediate&lt;br /&gt;
*	Content : Short&lt;br /&gt;
&lt;br /&gt;
This is a one-page guide that illustrates the use case briefs, user-level and summary level use case given the actor-goal list and narrative of the system from the user. &lt;br /&gt;
&lt;br /&gt;
• http://courses.softlab.ntua.gr/softeng/Tutorials/UML-Use-Cases.pdf &lt;br /&gt;
&lt;br /&gt;
*	Level : Beginner/Intermediate&lt;br /&gt;
*	Content : Medium&lt;br /&gt;
&lt;br /&gt;
This is an excellent example describing how to write use cases for different scenarios in a system. It takes up a courseware example breaking down different scenarios and explaining use cases.&lt;br /&gt;
&lt;br /&gt;
• http://www.objectmentor.com/resources/articles/usecases.pdf &lt;br /&gt;
&lt;br /&gt;
*	Level : Beginner&lt;br /&gt;
*	Content :Short&lt;br /&gt;
&lt;br /&gt;
This provides a simple example and explains use cases with use case diagrams for some of the functionalities. &lt;br /&gt;
&lt;br /&gt;
• http://www.w3.org/2002/06/ws-example &lt;br /&gt;
&lt;br /&gt;
*	Level : Beginner&lt;br /&gt;
*	Content : Short &lt;br /&gt;
&lt;br /&gt;
This is a comprehensive example.It takes up a travel reservation system and attempts to explain different scenarios like checking availability of tickets,booking flights and hotels.It explains with great detail each scenario.&lt;br /&gt;
&lt;br /&gt;
• http://www.agilemodeling.com/essays/useCaseReuse.htm &lt;br /&gt;
&lt;br /&gt;
*	Level : Beginner&lt;br /&gt;
*	Content : Short &lt;br /&gt;
&lt;br /&gt;
This is example taking up only one scenario ”Enroll in University” uses narrative style of writing a use case.&lt;br /&gt;
&lt;br /&gt;
===Advanced===&lt;br /&gt;
• http://www.se.cuhk.edu.hk/~seg3430/2007/tutorial/tutorial04.pdf &lt;br /&gt;
&lt;br /&gt;
*	Level : Intermediate/Advanced&lt;br /&gt;
*	Content : Long&lt;br /&gt;
&lt;br /&gt;
Though quite long, this link describes use cases for a credit card payment service.&lt;br /&gt;
&lt;br /&gt;
== Advanced Concepts ==&lt;br /&gt;
&lt;br /&gt;
'''Pluggable use cases''':&lt;br /&gt;
&lt;br /&gt;
http://alistair.cockburn.us/index.php/Pluggable_use_cases&lt;br /&gt;
&lt;br /&gt;
This introduces readers to concept of Pluggable use cases. &lt;br /&gt;
&lt;br /&gt;
'''Essential use-cases''':&lt;br /&gt;
&lt;br /&gt;
http://www.agilemodeling.com/artifacts/essentialUseCase.htm&lt;br /&gt;
&lt;br /&gt;
Essential use-case can be thought of as a less verbose and more succint version of the use case description. This document compares the traditional use case to essential use case.&lt;br /&gt;
&lt;br /&gt;
'''Future direction:'''&lt;br /&gt;
&lt;br /&gt;
http://alistair.cockburn.us/index.php/Use_cases%2C_ten_years_later&lt;br /&gt;
&lt;br /&gt;
This article predicts the direction of future research in the field of use cases.&lt;br /&gt;
&lt;br /&gt;
== Tools ==&lt;br /&gt;
&lt;br /&gt;
'''Rational Rose:''' &lt;br /&gt;
&lt;br /&gt;
One of the most popular tool for use-case driven development.&lt;br /&gt;
&lt;br /&gt;
http://www-306.ibm.com/software/awdtools/developer/rose/index.html&lt;br /&gt;
&lt;br /&gt;
'''Sun Java Studio Enterprise:''' &lt;br /&gt;
&lt;br /&gt;
Sun Java Studio Enterprise offers a UML tool. &lt;br /&gt;
&lt;br /&gt;
http://developers.sun.com/jsenterprise/&lt;br /&gt;
&lt;br /&gt;
'''Visual case:''' &lt;br /&gt;
&lt;br /&gt;
UML &amp;amp; E/R Database Design Tool&lt;br /&gt;
&lt;br /&gt;
http://www.visualcase.com/&lt;br /&gt;
&lt;br /&gt;
== Quick references ==&lt;br /&gt;
&lt;br /&gt;
Some quick references for studying use cases&lt;br /&gt;
&lt;br /&gt;
•	http://www.oreilly.com.cn/samplechap/uml20inanutshell/UML20-ch07.pdf&lt;br /&gt;
&lt;br /&gt;
•	http://www.cs.rit.edu/~jaa/CS4/Lectures/UseCase.PDF&lt;br /&gt;
&lt;br /&gt;
•	http://www.alagad.com/go/blog-entry/uml-use-case-diagrams&lt;br /&gt;
&lt;br /&gt;
•	http://www.cs.nmsu.edu/~jeffery/courses/371/lecture.html&lt;br /&gt;
&lt;br /&gt;
== Good Tutorials ==&lt;br /&gt;
&lt;br /&gt;
•	http://www.parlezuml.com/tutorials/usecases/usecases.pdf&lt;br /&gt;
&lt;br /&gt;
•	http://www.readysetpro.com/whitepapers/usecasetut.html &lt;br /&gt;
&lt;br /&gt;
Two very easy and informative tutorials for beginners who are not familiar with use cases. Both the tutorials contain some very good and simple examples coupled with easily understandable pictures. The first tutorial focuses on use case driven development and UML diagrams while the second deals with writing effective use cases.&lt;br /&gt;
&lt;br /&gt;
== Presentations Online ==&lt;br /&gt;
&lt;br /&gt;
•	https://users.cs.jmu.edu/bernstdh/web/common/lectures/slides_use-cases.php&lt;br /&gt;
&lt;br /&gt;
This presentation describes writing use cases along with constructing use case diagrams&lt;br /&gt;
&lt;br /&gt;
•	http://www-rohan.sdsu.edu/faculty/rnorman/course/ids306/Lect_c4.ppt&lt;br /&gt;
&lt;br /&gt;
This is a very good presentation that explains the concepts with familiar real life examples.&lt;br /&gt;
&lt;br /&gt;
•	http://www.cragsystems.com/SFRWUC/index.htm&lt;br /&gt;
&lt;br /&gt;
This web-based tutorial describes creating a Use Case Model of the functional requirements for a computer system.&lt;br /&gt;
&lt;br /&gt;
== Books ==&lt;br /&gt;
&lt;br /&gt;
Following are good books for learning use cases&lt;br /&gt;
&lt;br /&gt;
[[http://www.amazon.com/Writing-Effective-Cases-Alistair-Cockburn/dp/0201702258 Writing Effective Use Cases by Alistair Cockburn ]]&lt;br /&gt;
&lt;br /&gt;
[[http://www.amazon.com/Object-Oriented-Software-Engineering-Driven-Approach/dp/0201544350 Object-Oriented Software Engineering: A Use Case Driven Approach by Ivar Jacobson ]]&lt;br /&gt;
&lt;br /&gt;
== References on the Web ==&lt;br /&gt;
&lt;br /&gt;
'''Books:'''&lt;br /&gt;
&lt;br /&gt;
1.	Jocabson, Ivar. Basic Use-Case modeling, Report on Object Analysis and Design, 1(2): 15-19, 1994 &lt;br /&gt;
&lt;br /&gt;
2.	Jocabson, Ivar. Baisc Use-Case Modeling (Continued), Report on Object Analysis and Design, 1(3): 7-9, 1994 &lt;br /&gt;
&lt;br /&gt;
3.	Rumbaugh, James. Journal of Object-Oriented Programming: 8-12, 23, Sept. 1994&lt;br /&gt;
&lt;br /&gt;
'''Online Resources:'''&lt;br /&gt;
&lt;br /&gt;
Alistair Cockburn Home Page: http://alistair.cockburn.us/index.php/Main_Page&lt;br /&gt;
&lt;br /&gt;
Tutorial links: http://www.answers.com/topic/use-case?cat=technology&lt;br /&gt;
&lt;br /&gt;
All the links mentioned in the review.&lt;/div&gt;</summary>
		<author><name>Nnmodak</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2007/wiki2_4_np&amp;diff=8067</id>
		<title>CSC/ECE 517 Fall 2007/wiki2 4 np</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2007/wiki2_4_np&amp;diff=8067"/>
		<updated>2007-10-29T21:39:53Z</updated>

		<summary type="html">&lt;p&gt;Nnmodak: /* What are use cases */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''Use cases. There are even more pages on the Web on use cases than on MVC. If someone wants to learn about them, what should (s)he do? Look at the first few hits in Google? I expect we can do better than that. Write a review of the use-case sites on the Web. Which are best for learning about the concept? Which have the most instructive examples? Which teach advanced concepts that are not apparent in perusing most use-case sites? Read at least several dozen pages before deciding how to organize your overview''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== '''What are use cases''' ==&lt;br /&gt;
&lt;br /&gt;
A use case is a technique used in software and systems engineering to capture the functional requirements of a system.&lt;br /&gt;
&lt;br /&gt;
They describe in a sequence of steps,the interaction between the initiator of the interaction—and the system itself.&lt;br /&gt;
The initiator of the interaction is called as Actor. Actors can be end users,hardware devices or other systems,basically someone who takes part in the series of activities in a system.&lt;br /&gt;
&lt;br /&gt;
Each use case is a complete series of events, from the point of view of the actor.One or more scenarios may be generated from each use case, corresponding to the detail of each possible way of achieving that goal.&lt;br /&gt;
&lt;br /&gt;
There are numerous websites and resources on the topic of “Use cases”. We attempt to provide a guide to most useful ones among them. The rest of this page provides links to websites which provide more in depth information describing the use of use cases,use cases templates, examples, and advanced concepts , along with reviews of those sites.&lt;br /&gt;
&lt;br /&gt;
The links are grouped as per the topics which will make it easy to find a related site.Within the group We have compared these on the basis of following criteria:&lt;br /&gt;
&lt;br /&gt;
Level: beginner / intermediate / advanced&lt;br /&gt;
&lt;br /&gt;
Content: short / medium / long&lt;br /&gt;
&lt;br /&gt;
== '''Introduction''' ==&lt;br /&gt;
&lt;br /&gt;
These are introductory tutorials explaining the basics of use cases. Most of them are short and priliminary. &lt;br /&gt;
&lt;br /&gt;
===Beginner===&lt;br /&gt;
&lt;br /&gt;
•	http://www.cragsystems.com/SFRWUC/index.htm&lt;br /&gt;
&lt;br /&gt;
*Level: beginner           &lt;br /&gt;
*Content: long&lt;br /&gt;
&lt;br /&gt;
This is a web-based tutorial that introduces beginners to use cases. It clearly illustrates with appropriate examples the concepts related to use cases. It further describes application of use cases in documenting functional requirements. It also has a short &lt;br /&gt;
quiz, a test and an exercise at the end. Excellent navigation is a plus.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
•	http://www.csc.calpoly.edu/~dbutler/tutorials/winter96/use/&lt;br /&gt;
&lt;br /&gt;
*Level: beginner           &lt;br /&gt;
*Content: short&lt;br /&gt;
&lt;br /&gt;
This short tutorial discusses how use-cases fit into the framework of user-centered analysis. It gives a sample use case of ATM cash withdrawal. It also describes the role of use cases in design and testing phase.&lt;br /&gt;
&lt;br /&gt;
===beginner /intermediate===&lt;br /&gt;
&lt;br /&gt;
•	http://en.wikipedia.org/wiki/Use_case&lt;br /&gt;
&lt;br /&gt;
*Level: beginner / intermediate         &lt;br /&gt;
*Content: medium&lt;br /&gt;
&lt;br /&gt;
This wiki provides an introduction to use case concepts in very simple terms, so seems to be a good starting point for early beginners. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
•	http://www.parlezuml.com/tutorials/usecases/usecases_intro.pdf&lt;br /&gt;
&lt;br /&gt;
•	http://parlezuml.com/tutorials/usecases/usecases.pdf&lt;br /&gt;
&lt;br /&gt;
*Level: beginner / intermediate         &lt;br /&gt;
*Content: short&lt;br /&gt;
&lt;br /&gt;
These are very short and simple tutorials by Jason Gorman that explain the basics of use cases. Apart from use cases, the author covers the related concepts such as actors, system, scenarios. He also explains special use cases: &amp;lt;&amp;lt;extend&amp;gt;&amp;gt; and &amp;lt;&amp;lt;include&amp;gt;&amp;gt; and provides a brief explanation of how use cases can be part of agile development process.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
•	http://www.bredemeyer.com/use_cases.htm&lt;br /&gt;
&lt;br /&gt;
*Level: beginner / intermediate         &lt;br /&gt;
*Content: short&lt;br /&gt;
&lt;br /&gt;
This is a one-page document illustrating how use cases can be effective means to gather functional requirements. It provides valuable pointers to other use-case resources. Though short, it is quite informative for new learners.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
•	http://alistair.cockburn.us/index.php/Use_case_fundamentals&lt;br /&gt;
&lt;br /&gt;
*Level: beginner / intermediate         &lt;br /&gt;
*Content: short&lt;br /&gt;
&lt;br /&gt;
This is a good website which deals with the scope of use cases..It provides a&lt;br /&gt;
brief description of use cases and actors along with analysis of use case reports.It &lt;br /&gt;
also describes steps involved in validation of use cases.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
•	http://courses.softlab.ntua.gr/softeng/Tutorials/UML-Use-Cases.pdf&lt;br /&gt;
&lt;br /&gt;
*Level: beginner / intermediate         &lt;br /&gt;
*Content: medium&lt;br /&gt;
&lt;br /&gt;
This presentation offers succinct definitions for various terms related to use cases, also provides notational guide for documenting use case diagrams. It explains how to build scenarios ( flow of events in a use case).&lt;br /&gt;
&lt;br /&gt;
===Advaced===&lt;br /&gt;
&lt;br /&gt;
•	http://alistair.cockburn.us/index.php/Structuring_use_cases_with_goals&lt;br /&gt;
&lt;br /&gt;
*Level: intermediate / advanced         &lt;br /&gt;
*Content: long&lt;br /&gt;
&lt;br /&gt;
Here is a great guide to use cases by Alistair Cockburn, a renowned strategist and one of the leaders of agile movement. Though the article quite reader-friendly, it expects the reader to be familiar with at least the basic concepts. It offers brief descriptions of terms involved and analysis of use case reports.&lt;br /&gt;
&lt;br /&gt;
== How to write use cases ==&lt;br /&gt;
&lt;br /&gt;
Writing use cases are not confined to drawing use case diagram. Rather, a written use case is a brief but complete text description of every identified use case (functionality) of the system identified. Some of the instructive articles on this topic are as follows&lt;br /&gt;
&lt;br /&gt;
===Beginner===&lt;br /&gt;
•	http://infogenium.typepad.com/inside_infogenium/2007/07/getting-started.html&lt;br /&gt;
&lt;br /&gt;
*Level: beginner&lt;br /&gt;
*Content: short&lt;br /&gt;
&lt;br /&gt;
Here is a short tutorial for developers that are intimidated by the requirement documentation phase using the use cases. It explains the steps involved in capturing the requirements, introduces the concept of use-case brief. It illustrates the concepts with a file attachment example.&lt;br /&gt;
&lt;br /&gt;
===Intermediate===&lt;br /&gt;
•	http://www.informit.com/articles/article.aspx?p=30084&amp;amp;seqNum=8&amp;amp;rl=1&lt;br /&gt;
&lt;br /&gt;
*Level: intermediate&lt;br /&gt;
*Content: medium&lt;br /&gt;
&lt;br /&gt;
Here is an article that clearly distinguishes between a good use case and a bad use case. It gives an example of course registration for students and then explains writing the use case descriptions. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
•	http://www.answers.com/topic/use-case?cat=technology&lt;br /&gt;
&lt;br /&gt;
*Level: intermediate&lt;br /&gt;
*Content: long&lt;br /&gt;
 &lt;br /&gt;
This is a comprehensive article that starts off with an overview of use cases and provides an excellent reference for how to write use cases. It also comments on various types of use-cases based on the functionality (business/system) or degree of detail (brief / casual / fully dressed).  It elaborates on various sections of use case description.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Writing effective use cases ===&lt;br /&gt;
&lt;br /&gt;
•	http://www.gatherspace.com/static/use_case_example.html&lt;br /&gt;
&lt;br /&gt;
*Level: intermediate / advanced &lt;br /&gt;
*Content: long&lt;br /&gt;
 &lt;br /&gt;
Explains the art of writing effective use cases by considering an example of writing use cases for a mock Ebay site. The practical nature of the example makes it an interesting exercise. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
•	http://alistair.cockburn.us/index.php/Sampler_of_good_%26_bad_use_cases&lt;br /&gt;
&lt;br /&gt;
*Level: intermediate / advanced &lt;br /&gt;
*Content: short&lt;br /&gt;
&lt;br /&gt;
The above link provides some sample good and bad use cases. These can act as Dos and Don'ts for developers.&lt;br /&gt;
&lt;br /&gt;
== Format/Template of use cases ==&lt;br /&gt;
It's useful to have a template for use case so that there are less chances of missing out on anything.&lt;br /&gt;
&lt;br /&gt;
•	http://alistair.cockburn.us/index.php/Basic_use_case_template&lt;br /&gt;
&lt;br /&gt;
An excellent link which shows how to structure use cases. Provides different use case templates.&lt;br /&gt;
&lt;br /&gt;
== Use case diagrams ==&lt;br /&gt;
&lt;br /&gt;
Pictorial representation of the use case is depicted using use case diagrams. Here are the links to use case diagram tutorials.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
•	http://en.wikipedia.org/wiki/Use_case_diagram&lt;br /&gt;
&lt;br /&gt;
*Level: basic /intermediate&lt;br /&gt;
*Content: medium&lt;br /&gt;
&lt;br /&gt;
This wiki link contains representation of use case generalization along with the notations for use case relationships like extend include.&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
•	http://www.agilemodeling.com/artifacts/useCaseDiagram.htm&lt;br /&gt;
&lt;br /&gt;
•       http://www.andrew.cmu.edu/course/90-754/umlucdfaq.html#uses&lt;br /&gt;
&lt;br /&gt;
*Level: intermediate&lt;br /&gt;
*Content: medium&lt;br /&gt;
&lt;br /&gt;
The above links cover creation and understanding of Use Case Diagrams&lt;br /&gt;
&lt;br /&gt;
== Examples== &lt;br /&gt;
&lt;br /&gt;
===Beginner/ Intermediate===&lt;br /&gt;
• http://www.soi.wide.ad.jp/class/20040034/slides/07/9.html &lt;br /&gt;
&lt;br /&gt;
*	Level :Beginner/Intermediate&lt;br /&gt;
*	Content : Long&lt;br /&gt;
&lt;br /&gt;
This is an excellent presentation which takes up a real-life ‘elevator’ example and provides multiple use-case descriptions for use cases.Since it relates to the real world it is easy for beginners to understand. &lt;br /&gt;
&lt;br /&gt;
• http://www.cs.colorado.edu/~kena/classes/6448/s05/reference/usecases/examples.html &lt;br /&gt;
&lt;br /&gt;
*	Level :Beginner/Intermediate&lt;br /&gt;
*	Content : Short&lt;br /&gt;
&lt;br /&gt;
This is a one-page guide that illustrates the use case briefs, user-level and summary level use case given the actor-goal list and narrative of the system from the user. &lt;br /&gt;
&lt;br /&gt;
• http://courses.softlab.ntua.gr/softeng/Tutorials/UML-Use-Cases.pdf &lt;br /&gt;
&lt;br /&gt;
*	Level : Beginner/Intermediate&lt;br /&gt;
*	Content : Medium&lt;br /&gt;
&lt;br /&gt;
This is an excellent example describing how to write use cases for different scenarios in a system. It takes up a courseware example breaking down different scenarios and explaining use cases.&lt;br /&gt;
&lt;br /&gt;
• http://www.objectmentor.com/resources/articles/usecases.pdf &lt;br /&gt;
&lt;br /&gt;
*	Level : Beginner&lt;br /&gt;
*	Content :Short&lt;br /&gt;
&lt;br /&gt;
This provides a simple example and explains use cases with use case diagrams for some of the functionalities. &lt;br /&gt;
&lt;br /&gt;
• http://www.w3.org/2002/06/ws-example &lt;br /&gt;
&lt;br /&gt;
*	Level : Beginner&lt;br /&gt;
*	Content : Short &lt;br /&gt;
&lt;br /&gt;
This is a comprehensive example.It takes up a travel reservation system and attempts to explain different scenarios like checking availability of tickets,booking flights and hotels.It explains with great detail each scenario.&lt;br /&gt;
&lt;br /&gt;
• http://www.agilemodeling.com/essays/useCaseReuse.htm &lt;br /&gt;
&lt;br /&gt;
*	Level : Beginner&lt;br /&gt;
*	Content : Short &lt;br /&gt;
&lt;br /&gt;
This is example taking up only one scenario ”Enroll in University” uses narrative style of writing a use case.&lt;br /&gt;
&lt;br /&gt;
===Advanced===&lt;br /&gt;
• http://www.se.cuhk.edu.hk/~seg3430/2007/tutorial/tutorial04.pdf &lt;br /&gt;
&lt;br /&gt;
*	Level : Intermediate/Advanced&lt;br /&gt;
*	Content : Long&lt;br /&gt;
&lt;br /&gt;
Though quite long, this link describes use cases for a credit card payment service.&lt;br /&gt;
&lt;br /&gt;
== Advanced Concepts ==&lt;br /&gt;
&lt;br /&gt;
'''Pluggable use cases''':&lt;br /&gt;
&lt;br /&gt;
http://alistair.cockburn.us/index.php/Pluggable_use_cases&lt;br /&gt;
&lt;br /&gt;
This introduces readers to concept of Pluggable use cases. &lt;br /&gt;
&lt;br /&gt;
'''Essential use-cases''':&lt;br /&gt;
&lt;br /&gt;
http://www.agilemodeling.com/artifacts/essentialUseCase.htm&lt;br /&gt;
&lt;br /&gt;
Essential use-case can be thought of as a less verbose and more succint version of the use case description. This document compares the traditional use case to essential use case.&lt;br /&gt;
&lt;br /&gt;
'''Future direction:'''&lt;br /&gt;
&lt;br /&gt;
http://alistair.cockburn.us/index.php/Use_cases%2C_ten_years_later&lt;br /&gt;
&lt;br /&gt;
This article predicts the direction of future research in the field of use cases.&lt;br /&gt;
&lt;br /&gt;
== Tools ==&lt;br /&gt;
&lt;br /&gt;
'''Rational Rose:''' &lt;br /&gt;
&lt;br /&gt;
One of the most popular tool for use-case driven development.&lt;br /&gt;
&lt;br /&gt;
http://www-306.ibm.com/software/awdtools/developer/rose/index.html&lt;br /&gt;
&lt;br /&gt;
'''Sun Java Studio Enterprise:''' &lt;br /&gt;
&lt;br /&gt;
Sun Java Studio Enterprise offers a UML tool. &lt;br /&gt;
&lt;br /&gt;
http://developers.sun.com/jsenterprise/&lt;br /&gt;
&lt;br /&gt;
'''Visual case:''' &lt;br /&gt;
&lt;br /&gt;
UML &amp;amp; E/R Database Design Tool&lt;br /&gt;
&lt;br /&gt;
http://www.visualcase.com/&lt;br /&gt;
&lt;br /&gt;
== Quick references ==&lt;br /&gt;
&lt;br /&gt;
Some quick references for studying use cases&lt;br /&gt;
&lt;br /&gt;
•	http://www.oreilly.com.cn/samplechap/uml20inanutshell/UML20-ch07.pdf&lt;br /&gt;
&lt;br /&gt;
•	http://www.cs.rit.edu/~jaa/CS4/Lectures/UseCase.PDF&lt;br /&gt;
&lt;br /&gt;
•	http://www.alagad.com/go/blog-entry/uml-use-case-diagrams&lt;br /&gt;
&lt;br /&gt;
•	http://www.cs.nmsu.edu/~jeffery/courses/371/lecture.html&lt;br /&gt;
&lt;br /&gt;
== Good Tutorials ==&lt;br /&gt;
&lt;br /&gt;
•	http://www.parlezuml.com/tutorials/usecases/usecases.pdf&lt;br /&gt;
&lt;br /&gt;
•	http://www.readysetpro.com/whitepapers/usecasetut.html &lt;br /&gt;
&lt;br /&gt;
Two very easy and informative tutorials for beginners who are not familiar with use cases. Both the tutorials contain some very good and simple examples coupled with easily understandable pictures. The first tutorial focuses on use case driven development and UML diagrams while the second deals with writing effective use cases.&lt;br /&gt;
&lt;br /&gt;
== Presentations Online ==&lt;br /&gt;
&lt;br /&gt;
•	https://users.cs.jmu.edu/bernstdh/web/common/lectures/slides_use-cases.php&lt;br /&gt;
&lt;br /&gt;
This presentation describes writing use cases along with constructing use case diagrams&lt;br /&gt;
&lt;br /&gt;
•	http://www-rohan.sdsu.edu/faculty/rnorman/course/ids306/Lect_c4.ppt&lt;br /&gt;
&lt;br /&gt;
This is a very good presentation that explains the concepts with familiar real life examples.&lt;br /&gt;
&lt;br /&gt;
•	http://www.cragsystems.com/SFRWUC/index.htm&lt;br /&gt;
&lt;br /&gt;
This web-based tutorial describes creating a Use Case Model of the functional requirements for a computer system.&lt;br /&gt;
&lt;br /&gt;
== Books ==&lt;br /&gt;
&lt;br /&gt;
Following are good books for learning use cases&lt;br /&gt;
&lt;br /&gt;
[[http://www.amazon.com/Writing-Effective-Cases-Alistair-Cockburn/dp/0201702258 Writing Effective Use Cases by Alistair Cockburn ]]&lt;br /&gt;
&lt;br /&gt;
[[http://www.amazon.com/Object-Oriented-Software-Engineering-Driven-Approach/dp/0201544350 Object-Oriented Software Engineering: A Use Case Driven Approach by Ivar Jacobson ]]&lt;br /&gt;
&lt;br /&gt;
== References on the Web ==&lt;br /&gt;
&lt;br /&gt;
'''Books:'''&lt;br /&gt;
&lt;br /&gt;
1.	Jocabson, Ivar. Basic Use-Case modeling, Report on Object Analysis and Design, 1(2): 15-19, 1994 &lt;br /&gt;
&lt;br /&gt;
2.	Jocabson, Ivar. Baisc Use-Case Modeling (Continued), Report on Object Analysis and Design, 1(3): 7-9, 1994 &lt;br /&gt;
&lt;br /&gt;
3.	Rumbaugh, James. Journal of Object-Oriented Programming: 8-12, 23, Sept. 1994&lt;br /&gt;
&lt;br /&gt;
'''Online Resources:'''&lt;br /&gt;
&lt;br /&gt;
Alistair Cockburn Home Page: http://alistair.cockburn.us/index.php/Main_Page&lt;br /&gt;
&lt;br /&gt;
Tutorial links: http://www.answers.com/topic/use-case?cat=technology&lt;br /&gt;
&lt;br /&gt;
All the links mentioned in the review.&lt;/div&gt;</summary>
		<author><name>Nnmodak</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2007/wiki2_4_np&amp;diff=8066</id>
		<title>CSC/ECE 517 Fall 2007/wiki2 4 np</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2007/wiki2_4_np&amp;diff=8066"/>
		<updated>2007-10-29T21:39:39Z</updated>

		<summary type="html">&lt;p&gt;Nnmodak: /* Introduction */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''Use cases. There are even more pages on the Web on use cases than on MVC. If someone wants to learn about them, what should (s)he do? Look at the first few hits in Google? I expect we can do better than that. Write a review of the use-case sites on the Web. Which are best for learning about the concept? Which have the most instructive examples? Which teach advanced concepts that are not apparent in perusing most use-case sites? Read at least several dozen pages before deciding how to organize your overview''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== What are use cases ==&lt;br /&gt;
&lt;br /&gt;
A use case is a technique used in software and systems engineering to capture the functional requirements of a system.&lt;br /&gt;
&lt;br /&gt;
They describe in a sequence of steps,the interaction between the initiator of the interaction—and the system itself.&lt;br /&gt;
The initiator of the interaction is called as Actor. Actors can be end users,hardware devices or other systems,basically someone who takes part in the series of activities in a system.&lt;br /&gt;
&lt;br /&gt;
Each use case is a complete series of events, from the point of view of the actor.One or more scenarios may be generated from each use case, corresponding to the detail of each possible way of achieving that goal.&lt;br /&gt;
&lt;br /&gt;
There are numerous websites and resources on the topic of “Use cases”. We attempt to provide a guide to most useful ones among them. The rest of this page provides links to websites which provide more in depth information describing the use of use cases,use cases templates, examples, and advanced concepts , along with reviews of those sites.&lt;br /&gt;
&lt;br /&gt;
The links are grouped as per the topics which will make it easy to find a related site.Within the group We have compared these on the basis of following criteria:&lt;br /&gt;
&lt;br /&gt;
Level: beginner / intermediate / advanced&lt;br /&gt;
&lt;br /&gt;
Content: short / medium / long&lt;br /&gt;
&lt;br /&gt;
== '''Introduction''' ==&lt;br /&gt;
&lt;br /&gt;
These are introductory tutorials explaining the basics of use cases. Most of them are short and priliminary. &lt;br /&gt;
&lt;br /&gt;
===Beginner===&lt;br /&gt;
&lt;br /&gt;
•	http://www.cragsystems.com/SFRWUC/index.htm&lt;br /&gt;
&lt;br /&gt;
*Level: beginner           &lt;br /&gt;
*Content: long&lt;br /&gt;
&lt;br /&gt;
This is a web-based tutorial that introduces beginners to use cases. It clearly illustrates with appropriate examples the concepts related to use cases. It further describes application of use cases in documenting functional requirements. It also has a short &lt;br /&gt;
quiz, a test and an exercise at the end. Excellent navigation is a plus.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
•	http://www.csc.calpoly.edu/~dbutler/tutorials/winter96/use/&lt;br /&gt;
&lt;br /&gt;
*Level: beginner           &lt;br /&gt;
*Content: short&lt;br /&gt;
&lt;br /&gt;
This short tutorial discusses how use-cases fit into the framework of user-centered analysis. It gives a sample use case of ATM cash withdrawal. It also describes the role of use cases in design and testing phase.&lt;br /&gt;
&lt;br /&gt;
===beginner /intermediate===&lt;br /&gt;
&lt;br /&gt;
•	http://en.wikipedia.org/wiki/Use_case&lt;br /&gt;
&lt;br /&gt;
*Level: beginner / intermediate         &lt;br /&gt;
*Content: medium&lt;br /&gt;
&lt;br /&gt;
This wiki provides an introduction to use case concepts in very simple terms, so seems to be a good starting point for early beginners. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
•	http://www.parlezuml.com/tutorials/usecases/usecases_intro.pdf&lt;br /&gt;
&lt;br /&gt;
•	http://parlezuml.com/tutorials/usecases/usecases.pdf&lt;br /&gt;
&lt;br /&gt;
*Level: beginner / intermediate         &lt;br /&gt;
*Content: short&lt;br /&gt;
&lt;br /&gt;
These are very short and simple tutorials by Jason Gorman that explain the basics of use cases. Apart from use cases, the author covers the related concepts such as actors, system, scenarios. He also explains special use cases: &amp;lt;&amp;lt;extend&amp;gt;&amp;gt; and &amp;lt;&amp;lt;include&amp;gt;&amp;gt; and provides a brief explanation of how use cases can be part of agile development process.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
•	http://www.bredemeyer.com/use_cases.htm&lt;br /&gt;
&lt;br /&gt;
*Level: beginner / intermediate         &lt;br /&gt;
*Content: short&lt;br /&gt;
&lt;br /&gt;
This is a one-page document illustrating how use cases can be effective means to gather functional requirements. It provides valuable pointers to other use-case resources. Though short, it is quite informative for new learners.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
•	http://alistair.cockburn.us/index.php/Use_case_fundamentals&lt;br /&gt;
&lt;br /&gt;
*Level: beginner / intermediate         &lt;br /&gt;
*Content: short&lt;br /&gt;
&lt;br /&gt;
This is a good website which deals with the scope of use cases..It provides a&lt;br /&gt;
brief description of use cases and actors along with analysis of use case reports.It &lt;br /&gt;
also describes steps involved in validation of use cases.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
•	http://courses.softlab.ntua.gr/softeng/Tutorials/UML-Use-Cases.pdf&lt;br /&gt;
&lt;br /&gt;
*Level: beginner / intermediate         &lt;br /&gt;
*Content: medium&lt;br /&gt;
&lt;br /&gt;
This presentation offers succinct definitions for various terms related to use cases, also provides notational guide for documenting use case diagrams. It explains how to build scenarios ( flow of events in a use case).&lt;br /&gt;
&lt;br /&gt;
===Advaced===&lt;br /&gt;
&lt;br /&gt;
•	http://alistair.cockburn.us/index.php/Structuring_use_cases_with_goals&lt;br /&gt;
&lt;br /&gt;
*Level: intermediate / advanced         &lt;br /&gt;
*Content: long&lt;br /&gt;
&lt;br /&gt;
Here is a great guide to use cases by Alistair Cockburn, a renowned strategist and one of the leaders of agile movement. Though the article quite reader-friendly, it expects the reader to be familiar with at least the basic concepts. It offers brief descriptions of terms involved and analysis of use case reports.&lt;br /&gt;
&lt;br /&gt;
== How to write use cases ==&lt;br /&gt;
&lt;br /&gt;
Writing use cases are not confined to drawing use case diagram. Rather, a written use case is a brief but complete text description of every identified use case (functionality) of the system identified. Some of the instructive articles on this topic are as follows&lt;br /&gt;
&lt;br /&gt;
===Beginner===&lt;br /&gt;
•	http://infogenium.typepad.com/inside_infogenium/2007/07/getting-started.html&lt;br /&gt;
&lt;br /&gt;
*Level: beginner&lt;br /&gt;
*Content: short&lt;br /&gt;
&lt;br /&gt;
Here is a short tutorial for developers that are intimidated by the requirement documentation phase using the use cases. It explains the steps involved in capturing the requirements, introduces the concept of use-case brief. It illustrates the concepts with a file attachment example.&lt;br /&gt;
&lt;br /&gt;
===Intermediate===&lt;br /&gt;
•	http://www.informit.com/articles/article.aspx?p=30084&amp;amp;seqNum=8&amp;amp;rl=1&lt;br /&gt;
&lt;br /&gt;
*Level: intermediate&lt;br /&gt;
*Content: medium&lt;br /&gt;
&lt;br /&gt;
Here is an article that clearly distinguishes between a good use case and a bad use case. It gives an example of course registration for students and then explains writing the use case descriptions. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
•	http://www.answers.com/topic/use-case?cat=technology&lt;br /&gt;
&lt;br /&gt;
*Level: intermediate&lt;br /&gt;
*Content: long&lt;br /&gt;
 &lt;br /&gt;
This is a comprehensive article that starts off with an overview of use cases and provides an excellent reference for how to write use cases. It also comments on various types of use-cases based on the functionality (business/system) or degree of detail (brief / casual / fully dressed).  It elaborates on various sections of use case description.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Writing effective use cases ===&lt;br /&gt;
&lt;br /&gt;
•	http://www.gatherspace.com/static/use_case_example.html&lt;br /&gt;
&lt;br /&gt;
*Level: intermediate / advanced &lt;br /&gt;
*Content: long&lt;br /&gt;
 &lt;br /&gt;
Explains the art of writing effective use cases by considering an example of writing use cases for a mock Ebay site. The practical nature of the example makes it an interesting exercise. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
•	http://alistair.cockburn.us/index.php/Sampler_of_good_%26_bad_use_cases&lt;br /&gt;
&lt;br /&gt;
*Level: intermediate / advanced &lt;br /&gt;
*Content: short&lt;br /&gt;
&lt;br /&gt;
The above link provides some sample good and bad use cases. These can act as Dos and Don'ts for developers.&lt;br /&gt;
&lt;br /&gt;
== Format/Template of use cases ==&lt;br /&gt;
It's useful to have a template for use case so that there are less chances of missing out on anything.&lt;br /&gt;
&lt;br /&gt;
•	http://alistair.cockburn.us/index.php/Basic_use_case_template&lt;br /&gt;
&lt;br /&gt;
An excellent link which shows how to structure use cases. Provides different use case templates.&lt;br /&gt;
&lt;br /&gt;
== Use case diagrams ==&lt;br /&gt;
&lt;br /&gt;
Pictorial representation of the use case is depicted using use case diagrams. Here are the links to use case diagram tutorials.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
•	http://en.wikipedia.org/wiki/Use_case_diagram&lt;br /&gt;
&lt;br /&gt;
*Level: basic /intermediate&lt;br /&gt;
*Content: medium&lt;br /&gt;
&lt;br /&gt;
This wiki link contains representation of use case generalization along with the notations for use case relationships like extend include.&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
•	http://www.agilemodeling.com/artifacts/useCaseDiagram.htm&lt;br /&gt;
&lt;br /&gt;
•       http://www.andrew.cmu.edu/course/90-754/umlucdfaq.html#uses&lt;br /&gt;
&lt;br /&gt;
*Level: intermediate&lt;br /&gt;
*Content: medium&lt;br /&gt;
&lt;br /&gt;
The above links cover creation and understanding of Use Case Diagrams&lt;br /&gt;
&lt;br /&gt;
== Examples== &lt;br /&gt;
&lt;br /&gt;
===Beginner/ Intermediate===&lt;br /&gt;
• http://www.soi.wide.ad.jp/class/20040034/slides/07/9.html &lt;br /&gt;
&lt;br /&gt;
*	Level :Beginner/Intermediate&lt;br /&gt;
*	Content : Long&lt;br /&gt;
&lt;br /&gt;
This is an excellent presentation which takes up a real-life ‘elevator’ example and provides multiple use-case descriptions for use cases.Since it relates to the real world it is easy for beginners to understand. &lt;br /&gt;
&lt;br /&gt;
• http://www.cs.colorado.edu/~kena/classes/6448/s05/reference/usecases/examples.html &lt;br /&gt;
&lt;br /&gt;
*	Level :Beginner/Intermediate&lt;br /&gt;
*	Content : Short&lt;br /&gt;
&lt;br /&gt;
This is a one-page guide that illustrates the use case briefs, user-level and summary level use case given the actor-goal list and narrative of the system from the user. &lt;br /&gt;
&lt;br /&gt;
• http://courses.softlab.ntua.gr/softeng/Tutorials/UML-Use-Cases.pdf &lt;br /&gt;
&lt;br /&gt;
*	Level : Beginner/Intermediate&lt;br /&gt;
*	Content : Medium&lt;br /&gt;
&lt;br /&gt;
This is an excellent example describing how to write use cases for different scenarios in a system. It takes up a courseware example breaking down different scenarios and explaining use cases.&lt;br /&gt;
&lt;br /&gt;
• http://www.objectmentor.com/resources/articles/usecases.pdf &lt;br /&gt;
&lt;br /&gt;
*	Level : Beginner&lt;br /&gt;
*	Content :Short&lt;br /&gt;
&lt;br /&gt;
This provides a simple example and explains use cases with use case diagrams for some of the functionalities. &lt;br /&gt;
&lt;br /&gt;
• http://www.w3.org/2002/06/ws-example &lt;br /&gt;
&lt;br /&gt;
*	Level : Beginner&lt;br /&gt;
*	Content : Short &lt;br /&gt;
&lt;br /&gt;
This is a comprehensive example.It takes up a travel reservation system and attempts to explain different scenarios like checking availability of tickets,booking flights and hotels.It explains with great detail each scenario.&lt;br /&gt;
&lt;br /&gt;
• http://www.agilemodeling.com/essays/useCaseReuse.htm &lt;br /&gt;
&lt;br /&gt;
*	Level : Beginner&lt;br /&gt;
*	Content : Short &lt;br /&gt;
&lt;br /&gt;
This is example taking up only one scenario ”Enroll in University” uses narrative style of writing a use case.&lt;br /&gt;
&lt;br /&gt;
===Advanced===&lt;br /&gt;
• http://www.se.cuhk.edu.hk/~seg3430/2007/tutorial/tutorial04.pdf &lt;br /&gt;
&lt;br /&gt;
*	Level : Intermediate/Advanced&lt;br /&gt;
*	Content : Long&lt;br /&gt;
&lt;br /&gt;
Though quite long, this link describes use cases for a credit card payment service.&lt;br /&gt;
&lt;br /&gt;
== Advanced Concepts ==&lt;br /&gt;
&lt;br /&gt;
'''Pluggable use cases''':&lt;br /&gt;
&lt;br /&gt;
http://alistair.cockburn.us/index.php/Pluggable_use_cases&lt;br /&gt;
&lt;br /&gt;
This introduces readers to concept of Pluggable use cases. &lt;br /&gt;
&lt;br /&gt;
'''Essential use-cases''':&lt;br /&gt;
&lt;br /&gt;
http://www.agilemodeling.com/artifacts/essentialUseCase.htm&lt;br /&gt;
&lt;br /&gt;
Essential use-case can be thought of as a less verbose and more succint version of the use case description. This document compares the traditional use case to essential use case.&lt;br /&gt;
&lt;br /&gt;
'''Future direction:'''&lt;br /&gt;
&lt;br /&gt;
http://alistair.cockburn.us/index.php/Use_cases%2C_ten_years_later&lt;br /&gt;
&lt;br /&gt;
This article predicts the direction of future research in the field of use cases.&lt;br /&gt;
&lt;br /&gt;
== Tools ==&lt;br /&gt;
&lt;br /&gt;
'''Rational Rose:''' &lt;br /&gt;
&lt;br /&gt;
One of the most popular tool for use-case driven development.&lt;br /&gt;
&lt;br /&gt;
http://www-306.ibm.com/software/awdtools/developer/rose/index.html&lt;br /&gt;
&lt;br /&gt;
'''Sun Java Studio Enterprise:''' &lt;br /&gt;
&lt;br /&gt;
Sun Java Studio Enterprise offers a UML tool. &lt;br /&gt;
&lt;br /&gt;
http://developers.sun.com/jsenterprise/&lt;br /&gt;
&lt;br /&gt;
'''Visual case:''' &lt;br /&gt;
&lt;br /&gt;
UML &amp;amp; E/R Database Design Tool&lt;br /&gt;
&lt;br /&gt;
http://www.visualcase.com/&lt;br /&gt;
&lt;br /&gt;
== Quick references ==&lt;br /&gt;
&lt;br /&gt;
Some quick references for studying use cases&lt;br /&gt;
&lt;br /&gt;
•	http://www.oreilly.com.cn/samplechap/uml20inanutshell/UML20-ch07.pdf&lt;br /&gt;
&lt;br /&gt;
•	http://www.cs.rit.edu/~jaa/CS4/Lectures/UseCase.PDF&lt;br /&gt;
&lt;br /&gt;
•	http://www.alagad.com/go/blog-entry/uml-use-case-diagrams&lt;br /&gt;
&lt;br /&gt;
•	http://www.cs.nmsu.edu/~jeffery/courses/371/lecture.html&lt;br /&gt;
&lt;br /&gt;
== Good Tutorials ==&lt;br /&gt;
&lt;br /&gt;
•	http://www.parlezuml.com/tutorials/usecases/usecases.pdf&lt;br /&gt;
&lt;br /&gt;
•	http://www.readysetpro.com/whitepapers/usecasetut.html &lt;br /&gt;
&lt;br /&gt;
Two very easy and informative tutorials for beginners who are not familiar with use cases. Both the tutorials contain some very good and simple examples coupled with easily understandable pictures. The first tutorial focuses on use case driven development and UML diagrams while the second deals with writing effective use cases.&lt;br /&gt;
&lt;br /&gt;
== Presentations Online ==&lt;br /&gt;
&lt;br /&gt;
•	https://users.cs.jmu.edu/bernstdh/web/common/lectures/slides_use-cases.php&lt;br /&gt;
&lt;br /&gt;
This presentation describes writing use cases along with constructing use case diagrams&lt;br /&gt;
&lt;br /&gt;
•	http://www-rohan.sdsu.edu/faculty/rnorman/course/ids306/Lect_c4.ppt&lt;br /&gt;
&lt;br /&gt;
This is a very good presentation that explains the concepts with familiar real life examples.&lt;br /&gt;
&lt;br /&gt;
•	http://www.cragsystems.com/SFRWUC/index.htm&lt;br /&gt;
&lt;br /&gt;
This web-based tutorial describes creating a Use Case Model of the functional requirements for a computer system.&lt;br /&gt;
&lt;br /&gt;
== Books ==&lt;br /&gt;
&lt;br /&gt;
Following are good books for learning use cases&lt;br /&gt;
&lt;br /&gt;
[[http://www.amazon.com/Writing-Effective-Cases-Alistair-Cockburn/dp/0201702258 Writing Effective Use Cases by Alistair Cockburn ]]&lt;br /&gt;
&lt;br /&gt;
[[http://www.amazon.com/Object-Oriented-Software-Engineering-Driven-Approach/dp/0201544350 Object-Oriented Software Engineering: A Use Case Driven Approach by Ivar Jacobson ]]&lt;br /&gt;
&lt;br /&gt;
== References on the Web ==&lt;br /&gt;
&lt;br /&gt;
'''Books:'''&lt;br /&gt;
&lt;br /&gt;
1.	Jocabson, Ivar. Basic Use-Case modeling, Report on Object Analysis and Design, 1(2): 15-19, 1994 &lt;br /&gt;
&lt;br /&gt;
2.	Jocabson, Ivar. Baisc Use-Case Modeling (Continued), Report on Object Analysis and Design, 1(3): 7-9, 1994 &lt;br /&gt;
&lt;br /&gt;
3.	Rumbaugh, James. Journal of Object-Oriented Programming: 8-12, 23, Sept. 1994&lt;br /&gt;
&lt;br /&gt;
'''Online Resources:'''&lt;br /&gt;
&lt;br /&gt;
Alistair Cockburn Home Page: http://alistair.cockburn.us/index.php/Main_Page&lt;br /&gt;
&lt;br /&gt;
Tutorial links: http://www.answers.com/topic/use-case?cat=technology&lt;br /&gt;
&lt;br /&gt;
All the links mentioned in the review.&lt;/div&gt;</summary>
		<author><name>Nnmodak</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2007/wiki2_4_np&amp;diff=8065</id>
		<title>CSC/ECE 517 Fall 2007/wiki2 4 np</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2007/wiki2_4_np&amp;diff=8065"/>
		<updated>2007-10-29T21:38:50Z</updated>

		<summary type="html">&lt;p&gt;Nnmodak: /* Introduction */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''Use cases. There are even more pages on the Web on use cases than on MVC. If someone wants to learn about them, what should (s)he do? Look at the first few hits in Google? I expect we can do better than that. Write a review of the use-case sites on the Web. Which are best for learning about the concept? Which have the most instructive examples? Which teach advanced concepts that are not apparent in perusing most use-case sites? Read at least several dozen pages before deciding how to organize your overview''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== What are use cases ==&lt;br /&gt;
&lt;br /&gt;
A use case is a technique used in software and systems engineering to capture the functional requirements of a system.&lt;br /&gt;
&lt;br /&gt;
They describe in a sequence of steps,the interaction between the initiator of the interaction—and the system itself.&lt;br /&gt;
The initiator of the interaction is called as Actor. Actors can be end users,hardware devices or other systems,basically someone who takes part in the series of activities in a system.&lt;br /&gt;
&lt;br /&gt;
Each use case is a complete series of events, from the point of view of the actor.One or more scenarios may be generated from each use case, corresponding to the detail of each possible way of achieving that goal.&lt;br /&gt;
&lt;br /&gt;
There are numerous websites and resources on the topic of “Use cases”. We attempt to provide a guide to most useful ones among them. The rest of this page provides links to websites which provide more in depth information describing the use of use cases,use cases templates, examples, and advanced concepts , along with reviews of those sites.&lt;br /&gt;
&lt;br /&gt;
The links are grouped as per the topics which will make it easy to find a related site.Within the group We have compared these on the basis of following criteria:&lt;br /&gt;
&lt;br /&gt;
Level: beginner / intermediate / advanced&lt;br /&gt;
&lt;br /&gt;
Content: short / medium / long&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
These are introductory tutorials explaining the basics of use cases. Most of them are short and priliminary. &lt;br /&gt;
&lt;br /&gt;
===Beginner===&lt;br /&gt;
&lt;br /&gt;
•	http://www.cragsystems.com/SFRWUC/index.htm&lt;br /&gt;
&lt;br /&gt;
*Level: beginner           &lt;br /&gt;
*Content: long&lt;br /&gt;
&lt;br /&gt;
This is a web-based tutorial that introduces beginners to use cases. It clearly illustrates with appropriate examples the concepts related to use cases. It further describes application of use cases in documenting functional requirements. It also has a short &lt;br /&gt;
quiz, a test and an exercise at the end. Excellent navigation is a plus.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
•	http://www.csc.calpoly.edu/~dbutler/tutorials/winter96/use/&lt;br /&gt;
&lt;br /&gt;
*Level: beginner           &lt;br /&gt;
*Content: short&lt;br /&gt;
&lt;br /&gt;
This short tutorial discusses how use-cases fit into the framework of user-centered analysis. It gives a sample use case of ATM cash withdrawal. It also describes the role of use cases in design and testing phase.&lt;br /&gt;
&lt;br /&gt;
===beginner /intermediate===&lt;br /&gt;
•	http://en.wikipedia.org/wiki/Use_case&lt;br /&gt;
&lt;br /&gt;
*Level: beginner / intermediate         &lt;br /&gt;
*Content: medium&lt;br /&gt;
&lt;br /&gt;
This wiki provides an introduction to use case concepts in very simple terms, so seems to be a good starting point for early beginners. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
•	http://www.parlezuml.com/tutorials/usecases/usecases_intro.pdf&lt;br /&gt;
&lt;br /&gt;
•	http://parlezuml.com/tutorials/usecases/usecases.pdf&lt;br /&gt;
&lt;br /&gt;
*Level: beginner / intermediate         &lt;br /&gt;
*Content: short&lt;br /&gt;
&lt;br /&gt;
These are very short and simple tutorials by Jason Gorman that explain the basics of use cases. Apart from use cases, the author covers the related concepts such as actors, system, scenarios. He also explains special use cases: &amp;lt;&amp;lt;extend&amp;gt;&amp;gt; and &amp;lt;&amp;lt;include&amp;gt;&amp;gt; and provides a brief explanation of how use cases can be part of agile development process.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
•	http://www.bredemeyer.com/use_cases.htm&lt;br /&gt;
&lt;br /&gt;
*Level: beginner / intermediate         &lt;br /&gt;
*Content: short&lt;br /&gt;
&lt;br /&gt;
This is a one-page document illustrating how use cases can be effective means to gather functional requirements. It provides valuable pointers to other use-case resources. Though short, it is quite informative for new learners.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
•	http://alistair.cockburn.us/index.php/Use_case_fundamentals&lt;br /&gt;
&lt;br /&gt;
*Level: beginner / intermediate         &lt;br /&gt;
*Content: short&lt;br /&gt;
&lt;br /&gt;
This is a good website which deals with the scope of use cases..It provides a&lt;br /&gt;
brief description of use cases and actors along with analysis of use case reports.It &lt;br /&gt;
also describes steps involved in validation of use cases.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
•	http://courses.softlab.ntua.gr/softeng/Tutorials/UML-Use-Cases.pdf&lt;br /&gt;
&lt;br /&gt;
*Level: beginner / intermediate         &lt;br /&gt;
*Content: medium&lt;br /&gt;
&lt;br /&gt;
This presentation offers succinct definitions for various terms related to use cases, also provides notational guide for documenting use case diagrams. It explains how to build scenarios ( flow of events in a use case).&lt;br /&gt;
&lt;br /&gt;
===Advaced===&lt;br /&gt;
&lt;br /&gt;
•	http://alistair.cockburn.us/index.php/Structuring_use_cases_with_goals&lt;br /&gt;
&lt;br /&gt;
*Level: intermediate / advanced         &lt;br /&gt;
*Content: long&lt;br /&gt;
&lt;br /&gt;
Here is a great guide to use cases by Alistair Cockburn, a renowned strategist and one of the leaders of agile movement. Though the article quite reader-friendly, it expects the reader to be familiar with at least the basic concepts. It offers brief descriptions of terms involved and analysis of use case reports.&lt;br /&gt;
&lt;br /&gt;
== How to write use cases ==&lt;br /&gt;
&lt;br /&gt;
Writing use cases are not confined to drawing use case diagram. Rather, a written use case is a brief but complete text description of every identified use case (functionality) of the system identified. Some of the instructive articles on this topic are as follows&lt;br /&gt;
&lt;br /&gt;
===Beginner===&lt;br /&gt;
•	http://infogenium.typepad.com/inside_infogenium/2007/07/getting-started.html&lt;br /&gt;
&lt;br /&gt;
*Level: beginner&lt;br /&gt;
*Content: short&lt;br /&gt;
&lt;br /&gt;
Here is a short tutorial for developers that are intimidated by the requirement documentation phase using the use cases. It explains the steps involved in capturing the requirements, introduces the concept of use-case brief. It illustrates the concepts with a file attachment example.&lt;br /&gt;
&lt;br /&gt;
===Intermediate===&lt;br /&gt;
•	http://www.informit.com/articles/article.aspx?p=30084&amp;amp;seqNum=8&amp;amp;rl=1&lt;br /&gt;
&lt;br /&gt;
*Level: intermediate&lt;br /&gt;
*Content: medium&lt;br /&gt;
&lt;br /&gt;
Here is an article that clearly distinguishes between a good use case and a bad use case. It gives an example of course registration for students and then explains writing the use case descriptions. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
•	http://www.answers.com/topic/use-case?cat=technology&lt;br /&gt;
&lt;br /&gt;
*Level: intermediate&lt;br /&gt;
*Content: long&lt;br /&gt;
 &lt;br /&gt;
This is a comprehensive article that starts off with an overview of use cases and provides an excellent reference for how to write use cases. It also comments on various types of use-cases based on the functionality (business/system) or degree of detail (brief / casual / fully dressed).  It elaborates on various sections of use case description.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Writing effective use cases ===&lt;br /&gt;
&lt;br /&gt;
•	http://www.gatherspace.com/static/use_case_example.html&lt;br /&gt;
&lt;br /&gt;
*Level: intermediate / advanced &lt;br /&gt;
*Content: long&lt;br /&gt;
 &lt;br /&gt;
Explains the art of writing effective use cases by considering an example of writing use cases for a mock Ebay site. The practical nature of the example makes it an interesting exercise. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
•	http://alistair.cockburn.us/index.php/Sampler_of_good_%26_bad_use_cases&lt;br /&gt;
&lt;br /&gt;
*Level: intermediate / advanced &lt;br /&gt;
*Content: short&lt;br /&gt;
&lt;br /&gt;
The above link provides some sample good and bad use cases. These can act as Dos and Don'ts for developers.&lt;br /&gt;
&lt;br /&gt;
== Format/Template of use cases ==&lt;br /&gt;
It's useful to have a template for use case so that there are less chances of missing out on anything.&lt;br /&gt;
&lt;br /&gt;
•	http://alistair.cockburn.us/index.php/Basic_use_case_template&lt;br /&gt;
&lt;br /&gt;
An excellent link which shows how to structure use cases. Provides different use case templates.&lt;br /&gt;
&lt;br /&gt;
== Use case diagrams ==&lt;br /&gt;
&lt;br /&gt;
Pictorial representation of the use case is depicted using use case diagrams. Here are the links to use case diagram tutorials.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
•	http://en.wikipedia.org/wiki/Use_case_diagram&lt;br /&gt;
&lt;br /&gt;
*Level: basic /intermediate&lt;br /&gt;
*Content: medium&lt;br /&gt;
&lt;br /&gt;
This wiki link contains representation of use case generalization along with the notations for use case relationships like extend include.&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
•	http://www.agilemodeling.com/artifacts/useCaseDiagram.htm&lt;br /&gt;
&lt;br /&gt;
•       http://www.andrew.cmu.edu/course/90-754/umlucdfaq.html#uses&lt;br /&gt;
&lt;br /&gt;
*Level: intermediate&lt;br /&gt;
*Content: medium&lt;br /&gt;
&lt;br /&gt;
The above links cover creation and understanding of Use Case Diagrams&lt;br /&gt;
&lt;br /&gt;
== Examples== &lt;br /&gt;
&lt;br /&gt;
===Beginner/ Intermediate===&lt;br /&gt;
• http://www.soi.wide.ad.jp/class/20040034/slides/07/9.html &lt;br /&gt;
&lt;br /&gt;
*	Level :Beginner/Intermediate&lt;br /&gt;
*	Content : Long&lt;br /&gt;
&lt;br /&gt;
This is an excellent presentation which takes up a real-life ‘elevator’ example and provides multiple use-case descriptions for use cases.Since it relates to the real world it is easy for beginners to understand. &lt;br /&gt;
&lt;br /&gt;
• http://www.cs.colorado.edu/~kena/classes/6448/s05/reference/usecases/examples.html &lt;br /&gt;
&lt;br /&gt;
*	Level :Beginner/Intermediate&lt;br /&gt;
*	Content : Short&lt;br /&gt;
&lt;br /&gt;
This is a one-page guide that illustrates the use case briefs, user-level and summary level use case given the actor-goal list and narrative of the system from the user. &lt;br /&gt;
&lt;br /&gt;
• http://courses.softlab.ntua.gr/softeng/Tutorials/UML-Use-Cases.pdf &lt;br /&gt;
&lt;br /&gt;
*	Level : Beginner/Intermediate&lt;br /&gt;
*	Content : Medium&lt;br /&gt;
&lt;br /&gt;
This is an excellent example describing how to write use cases for different scenarios in a system. It takes up a courseware example breaking down different scenarios and explaining use cases.&lt;br /&gt;
&lt;br /&gt;
• http://www.objectmentor.com/resources/articles/usecases.pdf &lt;br /&gt;
&lt;br /&gt;
*	Level : Beginner&lt;br /&gt;
*	Content :Short&lt;br /&gt;
&lt;br /&gt;
This provides a simple example and explains use cases with use case diagrams for some of the functionalities. &lt;br /&gt;
&lt;br /&gt;
• http://www.w3.org/2002/06/ws-example &lt;br /&gt;
&lt;br /&gt;
*	Level : Beginner&lt;br /&gt;
*	Content : Short &lt;br /&gt;
&lt;br /&gt;
This is a comprehensive example.It takes up a travel reservation system and attempts to explain different scenarios like checking availability of tickets,booking flights and hotels.It explains with great detail each scenario.&lt;br /&gt;
&lt;br /&gt;
• http://www.agilemodeling.com/essays/useCaseReuse.htm &lt;br /&gt;
&lt;br /&gt;
*	Level : Beginner&lt;br /&gt;
*	Content : Short &lt;br /&gt;
&lt;br /&gt;
This is example taking up only one scenario ”Enroll in University” uses narrative style of writing a use case.&lt;br /&gt;
&lt;br /&gt;
===Advanced===&lt;br /&gt;
• http://www.se.cuhk.edu.hk/~seg3430/2007/tutorial/tutorial04.pdf &lt;br /&gt;
&lt;br /&gt;
*	Level : Intermediate/Advanced&lt;br /&gt;
*	Content : Long&lt;br /&gt;
&lt;br /&gt;
Though quite long, this link describes use cases for a credit card payment service.&lt;br /&gt;
&lt;br /&gt;
== Advanced Concepts ==&lt;br /&gt;
&lt;br /&gt;
'''Pluggable use cases''':&lt;br /&gt;
&lt;br /&gt;
http://alistair.cockburn.us/index.php/Pluggable_use_cases&lt;br /&gt;
&lt;br /&gt;
This introduces readers to concept of Pluggable use cases. &lt;br /&gt;
&lt;br /&gt;
'''Essential use-cases''':&lt;br /&gt;
&lt;br /&gt;
http://www.agilemodeling.com/artifacts/essentialUseCase.htm&lt;br /&gt;
&lt;br /&gt;
Essential use-case can be thought of as a less verbose and more succint version of the use case description. This document compares the traditional use case to essential use case.&lt;br /&gt;
&lt;br /&gt;
'''Future direction:'''&lt;br /&gt;
&lt;br /&gt;
http://alistair.cockburn.us/index.php/Use_cases%2C_ten_years_later&lt;br /&gt;
&lt;br /&gt;
This article predicts the direction of future research in the field of use cases.&lt;br /&gt;
&lt;br /&gt;
== Tools ==&lt;br /&gt;
&lt;br /&gt;
'''Rational Rose:''' &lt;br /&gt;
&lt;br /&gt;
One of the most popular tool for use-case driven development.&lt;br /&gt;
&lt;br /&gt;
http://www-306.ibm.com/software/awdtools/developer/rose/index.html&lt;br /&gt;
&lt;br /&gt;
'''Sun Java Studio Enterprise:''' &lt;br /&gt;
&lt;br /&gt;
Sun Java Studio Enterprise offers a UML tool. &lt;br /&gt;
&lt;br /&gt;
http://developers.sun.com/jsenterprise/&lt;br /&gt;
&lt;br /&gt;
'''Visual case:''' &lt;br /&gt;
&lt;br /&gt;
UML &amp;amp; E/R Database Design Tool&lt;br /&gt;
&lt;br /&gt;
http://www.visualcase.com/&lt;br /&gt;
&lt;br /&gt;
== Quick references ==&lt;br /&gt;
&lt;br /&gt;
Some quick references for studying use cases&lt;br /&gt;
&lt;br /&gt;
•	http://www.oreilly.com.cn/samplechap/uml20inanutshell/UML20-ch07.pdf&lt;br /&gt;
&lt;br /&gt;
•	http://www.cs.rit.edu/~jaa/CS4/Lectures/UseCase.PDF&lt;br /&gt;
&lt;br /&gt;
•	http://www.alagad.com/go/blog-entry/uml-use-case-diagrams&lt;br /&gt;
&lt;br /&gt;
•	http://www.cs.nmsu.edu/~jeffery/courses/371/lecture.html&lt;br /&gt;
&lt;br /&gt;
== Good Tutorials ==&lt;br /&gt;
&lt;br /&gt;
•	http://www.parlezuml.com/tutorials/usecases/usecases.pdf&lt;br /&gt;
&lt;br /&gt;
•	http://www.readysetpro.com/whitepapers/usecasetut.html &lt;br /&gt;
&lt;br /&gt;
Two very easy and informative tutorials for beginners who are not familiar with use cases. Both the tutorials contain some very good and simple examples coupled with easily understandable pictures. The first tutorial focuses on use case driven development and UML diagrams while the second deals with writing effective use cases.&lt;br /&gt;
&lt;br /&gt;
== Presentations Online ==&lt;br /&gt;
&lt;br /&gt;
•	https://users.cs.jmu.edu/bernstdh/web/common/lectures/slides_use-cases.php&lt;br /&gt;
&lt;br /&gt;
This presentation describes writing use cases along with constructing use case diagrams&lt;br /&gt;
&lt;br /&gt;
•	http://www-rohan.sdsu.edu/faculty/rnorman/course/ids306/Lect_c4.ppt&lt;br /&gt;
&lt;br /&gt;
This is a very good presentation that explains the concepts with familiar real life examples.&lt;br /&gt;
&lt;br /&gt;
•	http://www.cragsystems.com/SFRWUC/index.htm&lt;br /&gt;
&lt;br /&gt;
This web-based tutorial describes creating a Use Case Model of the functional requirements for a computer system.&lt;br /&gt;
&lt;br /&gt;
== Books ==&lt;br /&gt;
&lt;br /&gt;
Following are good books for learning use cases&lt;br /&gt;
&lt;br /&gt;
[[http://www.amazon.com/Writing-Effective-Cases-Alistair-Cockburn/dp/0201702258 Writing Effective Use Cases by Alistair Cockburn ]]&lt;br /&gt;
&lt;br /&gt;
[[http://www.amazon.com/Object-Oriented-Software-Engineering-Driven-Approach/dp/0201544350 Object-Oriented Software Engineering: A Use Case Driven Approach by Ivar Jacobson ]]&lt;br /&gt;
&lt;br /&gt;
== References on the Web ==&lt;br /&gt;
&lt;br /&gt;
'''Books:'''&lt;br /&gt;
&lt;br /&gt;
1.	Jocabson, Ivar. Basic Use-Case modeling, Report on Object Analysis and Design, 1(2): 15-19, 1994 &lt;br /&gt;
&lt;br /&gt;
2.	Jocabson, Ivar. Baisc Use-Case Modeling (Continued), Report on Object Analysis and Design, 1(3): 7-9, 1994 &lt;br /&gt;
&lt;br /&gt;
3.	Rumbaugh, James. Journal of Object-Oriented Programming: 8-12, 23, Sept. 1994&lt;br /&gt;
&lt;br /&gt;
'''Online Resources:'''&lt;br /&gt;
&lt;br /&gt;
Alistair Cockburn Home Page: http://alistair.cockburn.us/index.php/Main_Page&lt;br /&gt;
&lt;br /&gt;
Tutorial links: http://www.answers.com/topic/use-case?cat=technology&lt;br /&gt;
&lt;br /&gt;
All the links mentioned in the review.&lt;/div&gt;</summary>
		<author><name>Nnmodak</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2007/wiki2_4_np&amp;diff=8064</id>
		<title>CSC/ECE 517 Fall 2007/wiki2 4 np</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2007/wiki2_4_np&amp;diff=8064"/>
		<updated>2007-10-29T21:37:07Z</updated>

		<summary type="html">&lt;p&gt;Nnmodak: /* How to write use cases */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''Use cases. There are even more pages on the Web on use cases than on MVC. If someone wants to learn about them, what should (s)he do? Look at the first few hits in Google? I expect we can do better than that. Write a review of the use-case sites on the Web. Which are best for learning about the concept? Which have the most instructive examples? Which teach advanced concepts that are not apparent in perusing most use-case sites? Read at least several dozen pages before deciding how to organize your overview''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== What are use cases ==&lt;br /&gt;
&lt;br /&gt;
A use case is a technique used in software and systems engineering to capture the functional requirements of a system.&lt;br /&gt;
&lt;br /&gt;
They describe in a sequence of steps,the interaction between the initiator of the interaction—and the system itself.&lt;br /&gt;
The initiator of the interaction is called as Actor. Actors can be end users,hardware devices or other systems,basically someone who takes part in the series of activities in a system.&lt;br /&gt;
&lt;br /&gt;
Each use case is a complete series of events, from the point of view of the actor.One or more scenarios may be generated from each use case, corresponding to the detail of each possible way of achieving that goal.&lt;br /&gt;
&lt;br /&gt;
There are numerous websites and resources on the topic of “Use cases”. We attempt to provide a guide to most useful ones among them. The rest of this page provides links to websites which provide more in depth information describing the use of use cases,use cases templates, examples, and advanced concepts , along with reviews of those sites.&lt;br /&gt;
&lt;br /&gt;
The links are grouped as per the topics which will make it easy to find a related site.Within the group We have compared these on the basis of following criteria:&lt;br /&gt;
&lt;br /&gt;
Level: beginner / intermediate / advanced&lt;br /&gt;
&lt;br /&gt;
Content: short / medium / long&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
These are introductory tutorials explaining the basics of use cases. Most of them are short and priliminary. &lt;br /&gt;
&lt;br /&gt;
•	http://www.cragsystems.com/SFRWUC/index.htm&lt;br /&gt;
&lt;br /&gt;
*Level: beginner           &lt;br /&gt;
*Content: long&lt;br /&gt;
&lt;br /&gt;
This is a web-based tutorial that introduces beginners to use cases. It clearly illustrates with appropriate examples the concepts related to use cases. It further describes application of use cases in documenting functional requirements. It also has a short &lt;br /&gt;
quiz, a test and an exercise at the end. Excellent navigation is a plus.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
•	http://www.csc.calpoly.edu/~dbutler/tutorials/winter96/use/&lt;br /&gt;
&lt;br /&gt;
*Level: beginner           &lt;br /&gt;
*Content: short&lt;br /&gt;
&lt;br /&gt;
This short tutorial discusses how use-cases fit into the framework of user-centered analysis. It gives a sample use case of ATM cash withdrawal. It also describes the role of use cases in design and testing phase.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
•	http://en.wikipedia.org/wiki/Use_case&lt;br /&gt;
&lt;br /&gt;
*Level: beginner / intermediate         &lt;br /&gt;
*Content: medium&lt;br /&gt;
&lt;br /&gt;
This wiki provides an introduction to use case concepts in very simple terms, so seems to be a good starting point for early beginners. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
•	http://www.parlezuml.com/tutorials/usecases/usecases_intro.pdf&lt;br /&gt;
&lt;br /&gt;
•	http://parlezuml.com/tutorials/usecases/usecases.pdf&lt;br /&gt;
&lt;br /&gt;
*Level: beginner / intermediate         &lt;br /&gt;
*Content: short&lt;br /&gt;
&lt;br /&gt;
These are very short and simple tutorials by Jason Gorman that explain the basics of use cases. Apart from use cases, the author covers the related concepts such as actors, system, scenarios. He also explains special use cases: &amp;lt;&amp;lt;extend&amp;gt;&amp;gt; and &amp;lt;&amp;lt;include&amp;gt;&amp;gt; and provides a brief explanation of how use cases can be part of agile development process.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
•	http://www.bredemeyer.com/use_cases.htm&lt;br /&gt;
&lt;br /&gt;
*Level: beginner / intermediate         &lt;br /&gt;
*Content: short&lt;br /&gt;
&lt;br /&gt;
This is a one-page document illustrating how use cases can be effective means to gather functional requirements. It provides valuable pointers to other use-case resources. Though short, it is quite informative for new learners.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
•	http://alistair.cockburn.us/index.php/Use_case_fundamentals&lt;br /&gt;
&lt;br /&gt;
*Level: beginner / intermediate         &lt;br /&gt;
*Content: short&lt;br /&gt;
&lt;br /&gt;
This is a good website which deals with the scope of use cases..It provides a&lt;br /&gt;
brief description of use cases and actors along with analysis of use case reports.It &lt;br /&gt;
also describes steps involved in validation of use cases.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
•	http://courses.softlab.ntua.gr/softeng/Tutorials/UML-Use-Cases.pdf&lt;br /&gt;
&lt;br /&gt;
*Level: beginner / intermediate         &lt;br /&gt;
*Content: medium&lt;br /&gt;
&lt;br /&gt;
This presentation offers succinct definitions for various terms related to use cases, also provides notational guide for documenting use case diagrams. It explains how to build scenarios ( flow of events in a use case) .&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
•	http://alistair.cockburn.us/index.php/Structuring_use_cases_with_goals&lt;br /&gt;
&lt;br /&gt;
*Level: intermediate / advanced         &lt;br /&gt;
*Content: long&lt;br /&gt;
&lt;br /&gt;
Here is a great guide to use cases by Alistair Cockburn, a renowned strategist and one of the leaders of agile movement. Though the article quite reader-friendly, it expects the reader to be familiar with at least the basic concepts. It offers brief descriptions of terms involved and analysis of use case reports.&lt;br /&gt;
&lt;br /&gt;
== How to write use cases ==&lt;br /&gt;
&lt;br /&gt;
Writing use cases are not confined to drawing use case diagram. Rather, a written use case is a brief but complete text description of every identified use case (functionality) of the system identified. Some of the instructive articles on this topic are as follows&lt;br /&gt;
&lt;br /&gt;
===Beginner===&lt;br /&gt;
•	http://infogenium.typepad.com/inside_infogenium/2007/07/getting-started.html&lt;br /&gt;
&lt;br /&gt;
*Level: beginner&lt;br /&gt;
*Content: short&lt;br /&gt;
&lt;br /&gt;
Here is a short tutorial for developers that are intimidated by the requirement documentation phase using the use cases. It explains the steps involved in capturing the requirements, introduces the concept of use-case brief. It illustrates the concepts with a file attachment example.&lt;br /&gt;
&lt;br /&gt;
===Intermediate===&lt;br /&gt;
•	http://www.informit.com/articles/article.aspx?p=30084&amp;amp;seqNum=8&amp;amp;rl=1&lt;br /&gt;
&lt;br /&gt;
*Level: intermediate&lt;br /&gt;
*Content: medium&lt;br /&gt;
&lt;br /&gt;
Here is an article that clearly distinguishes between a good use case and a bad use case. It gives an example of course registration for students and then explains writing the use case descriptions. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
•	http://www.answers.com/topic/use-case?cat=technology&lt;br /&gt;
&lt;br /&gt;
*Level: intermediate&lt;br /&gt;
*Content: long&lt;br /&gt;
 &lt;br /&gt;
This is a comprehensive article that starts off with an overview of use cases and provides an excellent reference for how to write use cases. It also comments on various types of use-cases based on the functionality (business/system) or degree of detail (brief / casual / fully dressed).  It elaborates on various sections of use case description.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Writing effective use cases ===&lt;br /&gt;
&lt;br /&gt;
•	http://www.gatherspace.com/static/use_case_example.html&lt;br /&gt;
&lt;br /&gt;
*Level: intermediate / advanced &lt;br /&gt;
*Content: long&lt;br /&gt;
 &lt;br /&gt;
Explains the art of writing effective use cases by considering an example of writing use cases for a mock Ebay site. The practical nature of the example makes it an interesting exercise. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
•	http://alistair.cockburn.us/index.php/Sampler_of_good_%26_bad_use_cases&lt;br /&gt;
&lt;br /&gt;
*Level: intermediate / advanced &lt;br /&gt;
*Content: short&lt;br /&gt;
&lt;br /&gt;
The above link provides some sample good and bad use cases. These can act as Dos and Don'ts for developers.&lt;br /&gt;
&lt;br /&gt;
== Format/Template of use cases ==&lt;br /&gt;
It's useful to have a template for use case so that there are less chances of missing out on anything.&lt;br /&gt;
&lt;br /&gt;
•	http://alistair.cockburn.us/index.php/Basic_use_case_template&lt;br /&gt;
&lt;br /&gt;
An excellent link which shows how to structure use cases. Provides different use case templates.&lt;br /&gt;
&lt;br /&gt;
== Use case diagrams ==&lt;br /&gt;
&lt;br /&gt;
Pictorial representation of the use case is depicted using use case diagrams. Here are the links to use case diagram tutorials.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
•	http://en.wikipedia.org/wiki/Use_case_diagram&lt;br /&gt;
&lt;br /&gt;
*Level: basic /intermediate&lt;br /&gt;
*Content: medium&lt;br /&gt;
&lt;br /&gt;
This wiki link contains representation of use case generalization along with the notations for use case relationships like extend include.&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
•	http://www.agilemodeling.com/artifacts/useCaseDiagram.htm&lt;br /&gt;
&lt;br /&gt;
•       http://www.andrew.cmu.edu/course/90-754/umlucdfaq.html#uses&lt;br /&gt;
&lt;br /&gt;
*Level: intermediate&lt;br /&gt;
*Content: medium&lt;br /&gt;
&lt;br /&gt;
The above links cover creation and understanding of Use Case Diagrams&lt;br /&gt;
&lt;br /&gt;
== Examples== &lt;br /&gt;
&lt;br /&gt;
===Beginner/ Intermediate===&lt;br /&gt;
• http://www.soi.wide.ad.jp/class/20040034/slides/07/9.html &lt;br /&gt;
&lt;br /&gt;
*	Level :Beginner/Intermediate&lt;br /&gt;
*	Content : Long&lt;br /&gt;
&lt;br /&gt;
This is an excellent presentation which takes up a real-life ‘elevator’ example and provides multiple use-case descriptions for use cases.Since it relates to the real world it is easy for beginners to understand. &lt;br /&gt;
&lt;br /&gt;
• http://www.cs.colorado.edu/~kena/classes/6448/s05/reference/usecases/examples.html &lt;br /&gt;
&lt;br /&gt;
*	Level :Beginner/Intermediate&lt;br /&gt;
*	Content : Short&lt;br /&gt;
&lt;br /&gt;
This is a one-page guide that illustrates the use case briefs, user-level and summary level use case given the actor-goal list and narrative of the system from the user. &lt;br /&gt;
&lt;br /&gt;
• http://courses.softlab.ntua.gr/softeng/Tutorials/UML-Use-Cases.pdf &lt;br /&gt;
&lt;br /&gt;
*	Level : Beginner/Intermediate&lt;br /&gt;
*	Content : Medium&lt;br /&gt;
&lt;br /&gt;
This is an excellent example describing how to write use cases for different scenarios in a system. It takes up a courseware example breaking down different scenarios and explaining use cases.&lt;br /&gt;
&lt;br /&gt;
• http://www.objectmentor.com/resources/articles/usecases.pdf &lt;br /&gt;
&lt;br /&gt;
*	Level : Beginner&lt;br /&gt;
*	Content :Short&lt;br /&gt;
&lt;br /&gt;
This provides a simple example and explains use cases with use case diagrams for some of the functionalities. &lt;br /&gt;
&lt;br /&gt;
• http://www.w3.org/2002/06/ws-example &lt;br /&gt;
&lt;br /&gt;
*	Level : Beginner&lt;br /&gt;
*	Content : Short &lt;br /&gt;
&lt;br /&gt;
This is a comprehensive example.It takes up a travel reservation system and attempts to explain different scenarios like checking availability of tickets,booking flights and hotels.It explains with great detail each scenario.&lt;br /&gt;
&lt;br /&gt;
• http://www.agilemodeling.com/essays/useCaseReuse.htm &lt;br /&gt;
&lt;br /&gt;
*	Level : Beginner&lt;br /&gt;
*	Content : Short &lt;br /&gt;
&lt;br /&gt;
This is example taking up only one scenario ”Enroll in University” uses narrative style of writing a use case.&lt;br /&gt;
&lt;br /&gt;
===Advanced===&lt;br /&gt;
• http://www.se.cuhk.edu.hk/~seg3430/2007/tutorial/tutorial04.pdf &lt;br /&gt;
&lt;br /&gt;
*	Level : Intermediate/Advanced&lt;br /&gt;
*	Content : Long&lt;br /&gt;
&lt;br /&gt;
Though quite long, this link describes use cases for a credit card payment service.&lt;br /&gt;
&lt;br /&gt;
== Advanced Concepts ==&lt;br /&gt;
&lt;br /&gt;
'''Pluggable use cases''':&lt;br /&gt;
&lt;br /&gt;
http://alistair.cockburn.us/index.php/Pluggable_use_cases&lt;br /&gt;
&lt;br /&gt;
This introduces readers to concept of Pluggable use cases. &lt;br /&gt;
&lt;br /&gt;
'''Essential use-cases''':&lt;br /&gt;
&lt;br /&gt;
http://www.agilemodeling.com/artifacts/essentialUseCase.htm&lt;br /&gt;
&lt;br /&gt;
Essential use-case can be thought of as a less verbose and more succint version of the use case description. This document compares the traditional use case to essential use case.&lt;br /&gt;
&lt;br /&gt;
'''Future direction:'''&lt;br /&gt;
&lt;br /&gt;
http://alistair.cockburn.us/index.php/Use_cases%2C_ten_years_later&lt;br /&gt;
&lt;br /&gt;
This article predicts the direction of future research in the field of use cases.&lt;br /&gt;
&lt;br /&gt;
== Tools ==&lt;br /&gt;
&lt;br /&gt;
'''Rational Rose:''' &lt;br /&gt;
&lt;br /&gt;
One of the most popular tool for use-case driven development.&lt;br /&gt;
&lt;br /&gt;
http://www-306.ibm.com/software/awdtools/developer/rose/index.html&lt;br /&gt;
&lt;br /&gt;
'''Sun Java Studio Enterprise:''' &lt;br /&gt;
&lt;br /&gt;
Sun Java Studio Enterprise offers a UML tool. &lt;br /&gt;
&lt;br /&gt;
http://developers.sun.com/jsenterprise/&lt;br /&gt;
&lt;br /&gt;
'''Visual case:''' &lt;br /&gt;
&lt;br /&gt;
UML &amp;amp; E/R Database Design Tool&lt;br /&gt;
&lt;br /&gt;
http://www.visualcase.com/&lt;br /&gt;
&lt;br /&gt;
== Quick references ==&lt;br /&gt;
&lt;br /&gt;
Some quick references for studying use cases&lt;br /&gt;
&lt;br /&gt;
•	http://www.oreilly.com.cn/samplechap/uml20inanutshell/UML20-ch07.pdf&lt;br /&gt;
&lt;br /&gt;
•	http://www.cs.rit.edu/~jaa/CS4/Lectures/UseCase.PDF&lt;br /&gt;
&lt;br /&gt;
•	http://www.alagad.com/go/blog-entry/uml-use-case-diagrams&lt;br /&gt;
&lt;br /&gt;
•	http://www.cs.nmsu.edu/~jeffery/courses/371/lecture.html&lt;br /&gt;
&lt;br /&gt;
== Good Tutorials ==&lt;br /&gt;
&lt;br /&gt;
•	http://www.parlezuml.com/tutorials/usecases/usecases.pdf&lt;br /&gt;
&lt;br /&gt;
•	http://www.readysetpro.com/whitepapers/usecasetut.html &lt;br /&gt;
&lt;br /&gt;
Two very easy and informative tutorials for beginners who are not familiar with use cases. Both the tutorials contain some very good and simple examples coupled with easily understandable pictures. The first tutorial focuses on use case driven development and UML diagrams while the second deals with writing effective use cases.&lt;br /&gt;
&lt;br /&gt;
== Presentations Online ==&lt;br /&gt;
&lt;br /&gt;
•	https://users.cs.jmu.edu/bernstdh/web/common/lectures/slides_use-cases.php&lt;br /&gt;
&lt;br /&gt;
This presentation describes writing use cases along with constructing use case diagrams&lt;br /&gt;
&lt;br /&gt;
•	http://www-rohan.sdsu.edu/faculty/rnorman/course/ids306/Lect_c4.ppt&lt;br /&gt;
&lt;br /&gt;
This is a very good presentation that explains the concepts with familiar real life examples.&lt;br /&gt;
&lt;br /&gt;
•	http://www.cragsystems.com/SFRWUC/index.htm&lt;br /&gt;
&lt;br /&gt;
This web-based tutorial describes creating a Use Case Model of the functional requirements for a computer system.&lt;br /&gt;
&lt;br /&gt;
== Books ==&lt;br /&gt;
&lt;br /&gt;
Following are good books for learning use cases&lt;br /&gt;
&lt;br /&gt;
[[http://www.amazon.com/Writing-Effective-Cases-Alistair-Cockburn/dp/0201702258 Writing Effective Use Cases by Alistair Cockburn ]]&lt;br /&gt;
&lt;br /&gt;
[[http://www.amazon.com/Object-Oriented-Software-Engineering-Driven-Approach/dp/0201544350 Object-Oriented Software Engineering: A Use Case Driven Approach by Ivar Jacobson ]]&lt;br /&gt;
&lt;br /&gt;
== References on the Web ==&lt;br /&gt;
&lt;br /&gt;
'''Books:'''&lt;br /&gt;
&lt;br /&gt;
1.	Jocabson, Ivar. Basic Use-Case modeling, Report on Object Analysis and Design, 1(2): 15-19, 1994 &lt;br /&gt;
&lt;br /&gt;
2.	Jocabson, Ivar. Baisc Use-Case Modeling (Continued), Report on Object Analysis and Design, 1(3): 7-9, 1994 &lt;br /&gt;
&lt;br /&gt;
3.	Rumbaugh, James. Journal of Object-Oriented Programming: 8-12, 23, Sept. 1994&lt;br /&gt;
&lt;br /&gt;
'''Online Resources:'''&lt;br /&gt;
&lt;br /&gt;
Alistair Cockburn Home Page: http://alistair.cockburn.us/index.php/Main_Page&lt;br /&gt;
&lt;br /&gt;
Tutorial links: http://www.answers.com/topic/use-case?cat=technology&lt;br /&gt;
&lt;br /&gt;
All the links mentioned in the review.&lt;/div&gt;</summary>
		<author><name>Nnmodak</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2007/wiki2_4_np&amp;diff=8063</id>
		<title>CSC/ECE 517 Fall 2007/wiki2 4 np</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2007/wiki2_4_np&amp;diff=8063"/>
		<updated>2007-10-29T21:36:51Z</updated>

		<summary type="html">&lt;p&gt;Nnmodak: /* How to write use cases */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''Use cases. There are even more pages on the Web on use cases than on MVC. If someone wants to learn about them, what should (s)he do? Look at the first few hits in Google? I expect we can do better than that. Write a review of the use-case sites on the Web. Which are best for learning about the concept? Which have the most instructive examples? Which teach advanced concepts that are not apparent in perusing most use-case sites? Read at least several dozen pages before deciding how to organize your overview''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== What are use cases ==&lt;br /&gt;
&lt;br /&gt;
A use case is a technique used in software and systems engineering to capture the functional requirements of a system.&lt;br /&gt;
&lt;br /&gt;
They describe in a sequence of steps,the interaction between the initiator of the interaction—and the system itself.&lt;br /&gt;
The initiator of the interaction is called as Actor. Actors can be end users,hardware devices or other systems,basically someone who takes part in the series of activities in a system.&lt;br /&gt;
&lt;br /&gt;
Each use case is a complete series of events, from the point of view of the actor.One or more scenarios may be generated from each use case, corresponding to the detail of each possible way of achieving that goal.&lt;br /&gt;
&lt;br /&gt;
There are numerous websites and resources on the topic of “Use cases”. We attempt to provide a guide to most useful ones among them. The rest of this page provides links to websites which provide more in depth information describing the use of use cases,use cases templates, examples, and advanced concepts , along with reviews of those sites.&lt;br /&gt;
&lt;br /&gt;
The links are grouped as per the topics which will make it easy to find a related site.Within the group We have compared these on the basis of following criteria:&lt;br /&gt;
&lt;br /&gt;
Level: beginner / intermediate / advanced&lt;br /&gt;
&lt;br /&gt;
Content: short / medium / long&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
These are introductory tutorials explaining the basics of use cases. Most of them are short and priliminary. &lt;br /&gt;
&lt;br /&gt;
•	http://www.cragsystems.com/SFRWUC/index.htm&lt;br /&gt;
&lt;br /&gt;
*Level: beginner           &lt;br /&gt;
*Content: long&lt;br /&gt;
&lt;br /&gt;
This is a web-based tutorial that introduces beginners to use cases. It clearly illustrates with appropriate examples the concepts related to use cases. It further describes application of use cases in documenting functional requirements. It also has a short &lt;br /&gt;
quiz, a test and an exercise at the end. Excellent navigation is a plus.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
•	http://www.csc.calpoly.edu/~dbutler/tutorials/winter96/use/&lt;br /&gt;
&lt;br /&gt;
*Level: beginner           &lt;br /&gt;
*Content: short&lt;br /&gt;
&lt;br /&gt;
This short tutorial discusses how use-cases fit into the framework of user-centered analysis. It gives a sample use case of ATM cash withdrawal. It also describes the role of use cases in design and testing phase.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
•	http://en.wikipedia.org/wiki/Use_case&lt;br /&gt;
&lt;br /&gt;
*Level: beginner / intermediate         &lt;br /&gt;
*Content: medium&lt;br /&gt;
&lt;br /&gt;
This wiki provides an introduction to use case concepts in very simple terms, so seems to be a good starting point for early beginners. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
•	http://www.parlezuml.com/tutorials/usecases/usecases_intro.pdf&lt;br /&gt;
&lt;br /&gt;
•	http://parlezuml.com/tutorials/usecases/usecases.pdf&lt;br /&gt;
&lt;br /&gt;
*Level: beginner / intermediate         &lt;br /&gt;
*Content: short&lt;br /&gt;
&lt;br /&gt;
These are very short and simple tutorials by Jason Gorman that explain the basics of use cases. Apart from use cases, the author covers the related concepts such as actors, system, scenarios. He also explains special use cases: &amp;lt;&amp;lt;extend&amp;gt;&amp;gt; and &amp;lt;&amp;lt;include&amp;gt;&amp;gt; and provides a brief explanation of how use cases can be part of agile development process.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
•	http://www.bredemeyer.com/use_cases.htm&lt;br /&gt;
&lt;br /&gt;
*Level: beginner / intermediate         &lt;br /&gt;
*Content: short&lt;br /&gt;
&lt;br /&gt;
This is a one-page document illustrating how use cases can be effective means to gather functional requirements. It provides valuable pointers to other use-case resources. Though short, it is quite informative for new learners.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
•	http://alistair.cockburn.us/index.php/Use_case_fundamentals&lt;br /&gt;
&lt;br /&gt;
*Level: beginner / intermediate         &lt;br /&gt;
*Content: short&lt;br /&gt;
&lt;br /&gt;
This is a good website which deals with the scope of use cases..It provides a&lt;br /&gt;
brief description of use cases and actors along with analysis of use case reports.It &lt;br /&gt;
also describes steps involved in validation of use cases.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
•	http://courses.softlab.ntua.gr/softeng/Tutorials/UML-Use-Cases.pdf&lt;br /&gt;
&lt;br /&gt;
*Level: beginner / intermediate         &lt;br /&gt;
*Content: medium&lt;br /&gt;
&lt;br /&gt;
This presentation offers succinct definitions for various terms related to use cases, also provides notational guide for documenting use case diagrams. It explains how to build scenarios ( flow of events in a use case) .&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
•	http://alistair.cockburn.us/index.php/Structuring_use_cases_with_goals&lt;br /&gt;
&lt;br /&gt;
*Level: intermediate / advanced         &lt;br /&gt;
*Content: long&lt;br /&gt;
&lt;br /&gt;
Here is a great guide to use cases by Alistair Cockburn, a renowned strategist and one of the leaders of agile movement. Though the article quite reader-friendly, it expects the reader to be familiar with at least the basic concepts. It offers brief descriptions of terms involved and analysis of use case reports.&lt;br /&gt;
&lt;br /&gt;
== How to write use cases ==&lt;br /&gt;
&lt;br /&gt;
Writing use cases are not confined to drawing use case diagram. Rather, a written use case is a brief but complete text description of every identified use case (functionality) of the system identified. Some of the instructive articles on this topic are as follows&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Beginner===&lt;br /&gt;
•	http://infogenium.typepad.com/inside_infogenium/2007/07/getting-started.html&lt;br /&gt;
&lt;br /&gt;
*Level: beginner&lt;br /&gt;
*Content: short&lt;br /&gt;
&lt;br /&gt;
Here is a short tutorial for developers that are intimidated by the requirement documentation phase using the use cases. It explains the steps involved in capturing the requirements, introduces the concept of use-case brief. It illustrates the concepts with a file attachment example.&lt;br /&gt;
&lt;br /&gt;
===Intermediate===&lt;br /&gt;
•	http://www.informit.com/articles/article.aspx?p=30084&amp;amp;seqNum=8&amp;amp;rl=1&lt;br /&gt;
&lt;br /&gt;
*Level: intermediate&lt;br /&gt;
*Content: medium&lt;br /&gt;
&lt;br /&gt;
Here is an article that clearly distinguishes between a good use case and a bad use case. It gives an example of course registration for students and then explains writing the use case descriptions. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
•	http://www.answers.com/topic/use-case?cat=technology&lt;br /&gt;
&lt;br /&gt;
*Level: intermediate&lt;br /&gt;
*Content: long&lt;br /&gt;
 &lt;br /&gt;
This is a comprehensive article that starts off with an overview of use cases and provides an excellent reference for how to write use cases. It also comments on various types of use-cases based on the functionality (business/system) or degree of detail (brief / casual / fully dressed).  It elaborates on various sections of use case description.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Writing effective use cases ===&lt;br /&gt;
&lt;br /&gt;
•	http://www.gatherspace.com/static/use_case_example.html&lt;br /&gt;
&lt;br /&gt;
*Level: intermediate / advanced &lt;br /&gt;
*Content: long&lt;br /&gt;
 &lt;br /&gt;
Explains the art of writing effective use cases by considering an example of writing use cases for a mock Ebay site. The practical nature of the example makes it an interesting exercise. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
•	http://alistair.cockburn.us/index.php/Sampler_of_good_%26_bad_use_cases&lt;br /&gt;
&lt;br /&gt;
*Level: intermediate / advanced &lt;br /&gt;
*Content: short&lt;br /&gt;
&lt;br /&gt;
The above link provides some sample good and bad use cases. These can act as Dos and Don'ts for developers.&lt;br /&gt;
&lt;br /&gt;
== Format/Template of use cases ==&lt;br /&gt;
It's useful to have a template for use case so that there are less chances of missing out on anything.&lt;br /&gt;
&lt;br /&gt;
•	http://alistair.cockburn.us/index.php/Basic_use_case_template&lt;br /&gt;
&lt;br /&gt;
An excellent link which shows how to structure use cases. Provides different use case templates.&lt;br /&gt;
&lt;br /&gt;
== Use case diagrams ==&lt;br /&gt;
&lt;br /&gt;
Pictorial representation of the use case is depicted using use case diagrams. Here are the links to use case diagram tutorials.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
•	http://en.wikipedia.org/wiki/Use_case_diagram&lt;br /&gt;
&lt;br /&gt;
*Level: basic /intermediate&lt;br /&gt;
*Content: medium&lt;br /&gt;
&lt;br /&gt;
This wiki link contains representation of use case generalization along with the notations for use case relationships like extend include.&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
•	http://www.agilemodeling.com/artifacts/useCaseDiagram.htm&lt;br /&gt;
&lt;br /&gt;
•       http://www.andrew.cmu.edu/course/90-754/umlucdfaq.html#uses&lt;br /&gt;
&lt;br /&gt;
*Level: intermediate&lt;br /&gt;
*Content: medium&lt;br /&gt;
&lt;br /&gt;
The above links cover creation and understanding of Use Case Diagrams&lt;br /&gt;
&lt;br /&gt;
== Examples== &lt;br /&gt;
&lt;br /&gt;
===Beginner/ Intermediate===&lt;br /&gt;
• http://www.soi.wide.ad.jp/class/20040034/slides/07/9.html &lt;br /&gt;
&lt;br /&gt;
*	Level :Beginner/Intermediate&lt;br /&gt;
*	Content : Long&lt;br /&gt;
&lt;br /&gt;
This is an excellent presentation which takes up a real-life ‘elevator’ example and provides multiple use-case descriptions for use cases.Since it relates to the real world it is easy for beginners to understand. &lt;br /&gt;
&lt;br /&gt;
• http://www.cs.colorado.edu/~kena/classes/6448/s05/reference/usecases/examples.html &lt;br /&gt;
&lt;br /&gt;
*	Level :Beginner/Intermediate&lt;br /&gt;
*	Content : Short&lt;br /&gt;
&lt;br /&gt;
This is a one-page guide that illustrates the use case briefs, user-level and summary level use case given the actor-goal list and narrative of the system from the user. &lt;br /&gt;
&lt;br /&gt;
• http://courses.softlab.ntua.gr/softeng/Tutorials/UML-Use-Cases.pdf &lt;br /&gt;
&lt;br /&gt;
*	Level : Beginner/Intermediate&lt;br /&gt;
*	Content : Medium&lt;br /&gt;
&lt;br /&gt;
This is an excellent example describing how to write use cases for different scenarios in a system. It takes up a courseware example breaking down different scenarios and explaining use cases.&lt;br /&gt;
&lt;br /&gt;
• http://www.objectmentor.com/resources/articles/usecases.pdf &lt;br /&gt;
&lt;br /&gt;
*	Level : Beginner&lt;br /&gt;
*	Content :Short&lt;br /&gt;
&lt;br /&gt;
This provides a simple example and explains use cases with use case diagrams for some of the functionalities. &lt;br /&gt;
&lt;br /&gt;
• http://www.w3.org/2002/06/ws-example &lt;br /&gt;
&lt;br /&gt;
*	Level : Beginner&lt;br /&gt;
*	Content : Short &lt;br /&gt;
&lt;br /&gt;
This is a comprehensive example.It takes up a travel reservation system and attempts to explain different scenarios like checking availability of tickets,booking flights and hotels.It explains with great detail each scenario.&lt;br /&gt;
&lt;br /&gt;
• http://www.agilemodeling.com/essays/useCaseReuse.htm &lt;br /&gt;
&lt;br /&gt;
*	Level : Beginner&lt;br /&gt;
*	Content : Short &lt;br /&gt;
&lt;br /&gt;
This is example taking up only one scenario ”Enroll in University” uses narrative style of writing a use case.&lt;br /&gt;
&lt;br /&gt;
===Advanced===&lt;br /&gt;
• http://www.se.cuhk.edu.hk/~seg3430/2007/tutorial/tutorial04.pdf &lt;br /&gt;
&lt;br /&gt;
*	Level : Intermediate/Advanced&lt;br /&gt;
*	Content : Long&lt;br /&gt;
&lt;br /&gt;
Though quite long, this link describes use cases for a credit card payment service.&lt;br /&gt;
&lt;br /&gt;
== Advanced Concepts ==&lt;br /&gt;
&lt;br /&gt;
'''Pluggable use cases''':&lt;br /&gt;
&lt;br /&gt;
http://alistair.cockburn.us/index.php/Pluggable_use_cases&lt;br /&gt;
&lt;br /&gt;
This introduces readers to concept of Pluggable use cases. &lt;br /&gt;
&lt;br /&gt;
'''Essential use-cases''':&lt;br /&gt;
&lt;br /&gt;
http://www.agilemodeling.com/artifacts/essentialUseCase.htm&lt;br /&gt;
&lt;br /&gt;
Essential use-case can be thought of as a less verbose and more succint version of the use case description. This document compares the traditional use case to essential use case.&lt;br /&gt;
&lt;br /&gt;
'''Future direction:'''&lt;br /&gt;
&lt;br /&gt;
http://alistair.cockburn.us/index.php/Use_cases%2C_ten_years_later&lt;br /&gt;
&lt;br /&gt;
This article predicts the direction of future research in the field of use cases.&lt;br /&gt;
&lt;br /&gt;
== Tools ==&lt;br /&gt;
&lt;br /&gt;
'''Rational Rose:''' &lt;br /&gt;
&lt;br /&gt;
One of the most popular tool for use-case driven development.&lt;br /&gt;
&lt;br /&gt;
http://www-306.ibm.com/software/awdtools/developer/rose/index.html&lt;br /&gt;
&lt;br /&gt;
'''Sun Java Studio Enterprise:''' &lt;br /&gt;
&lt;br /&gt;
Sun Java Studio Enterprise offers a UML tool. &lt;br /&gt;
&lt;br /&gt;
http://developers.sun.com/jsenterprise/&lt;br /&gt;
&lt;br /&gt;
'''Visual case:''' &lt;br /&gt;
&lt;br /&gt;
UML &amp;amp; E/R Database Design Tool&lt;br /&gt;
&lt;br /&gt;
http://www.visualcase.com/&lt;br /&gt;
&lt;br /&gt;
== Quick references ==&lt;br /&gt;
&lt;br /&gt;
Some quick references for studying use cases&lt;br /&gt;
&lt;br /&gt;
•	http://www.oreilly.com.cn/samplechap/uml20inanutshell/UML20-ch07.pdf&lt;br /&gt;
&lt;br /&gt;
•	http://www.cs.rit.edu/~jaa/CS4/Lectures/UseCase.PDF&lt;br /&gt;
&lt;br /&gt;
•	http://www.alagad.com/go/blog-entry/uml-use-case-diagrams&lt;br /&gt;
&lt;br /&gt;
•	http://www.cs.nmsu.edu/~jeffery/courses/371/lecture.html&lt;br /&gt;
&lt;br /&gt;
== Good Tutorials ==&lt;br /&gt;
&lt;br /&gt;
•	http://www.parlezuml.com/tutorials/usecases/usecases.pdf&lt;br /&gt;
&lt;br /&gt;
•	http://www.readysetpro.com/whitepapers/usecasetut.html &lt;br /&gt;
&lt;br /&gt;
Two very easy and informative tutorials for beginners who are not familiar with use cases. Both the tutorials contain some very good and simple examples coupled with easily understandable pictures. The first tutorial focuses on use case driven development and UML diagrams while the second deals with writing effective use cases.&lt;br /&gt;
&lt;br /&gt;
== Presentations Online ==&lt;br /&gt;
&lt;br /&gt;
•	https://users.cs.jmu.edu/bernstdh/web/common/lectures/slides_use-cases.php&lt;br /&gt;
&lt;br /&gt;
This presentation describes writing use cases along with constructing use case diagrams&lt;br /&gt;
&lt;br /&gt;
•	http://www-rohan.sdsu.edu/faculty/rnorman/course/ids306/Lect_c4.ppt&lt;br /&gt;
&lt;br /&gt;
This is a very good presentation that explains the concepts with familiar real life examples.&lt;br /&gt;
&lt;br /&gt;
•	http://www.cragsystems.com/SFRWUC/index.htm&lt;br /&gt;
&lt;br /&gt;
This web-based tutorial describes creating a Use Case Model of the functional requirements for a computer system.&lt;br /&gt;
&lt;br /&gt;
== Books ==&lt;br /&gt;
&lt;br /&gt;
Following are good books for learning use cases&lt;br /&gt;
&lt;br /&gt;
[[http://www.amazon.com/Writing-Effective-Cases-Alistair-Cockburn/dp/0201702258 Writing Effective Use Cases by Alistair Cockburn ]]&lt;br /&gt;
&lt;br /&gt;
[[http://www.amazon.com/Object-Oriented-Software-Engineering-Driven-Approach/dp/0201544350 Object-Oriented Software Engineering: A Use Case Driven Approach by Ivar Jacobson ]]&lt;br /&gt;
&lt;br /&gt;
== References on the Web ==&lt;br /&gt;
&lt;br /&gt;
'''Books:'''&lt;br /&gt;
&lt;br /&gt;
1.	Jocabson, Ivar. Basic Use-Case modeling, Report on Object Analysis and Design, 1(2): 15-19, 1994 &lt;br /&gt;
&lt;br /&gt;
2.	Jocabson, Ivar. Baisc Use-Case Modeling (Continued), Report on Object Analysis and Design, 1(3): 7-9, 1994 &lt;br /&gt;
&lt;br /&gt;
3.	Rumbaugh, James. Journal of Object-Oriented Programming: 8-12, 23, Sept. 1994&lt;br /&gt;
&lt;br /&gt;
'''Online Resources:'''&lt;br /&gt;
&lt;br /&gt;
Alistair Cockburn Home Page: http://alistair.cockburn.us/index.php/Main_Page&lt;br /&gt;
&lt;br /&gt;
Tutorial links: http://www.answers.com/topic/use-case?cat=technology&lt;br /&gt;
&lt;br /&gt;
All the links mentioned in the review.&lt;/div&gt;</summary>
		<author><name>Nnmodak</name></author>
	</entry>
</feed>