<?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=Rchakar</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=Rchakar"/>
	<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=Special:Contributions/Rchakar"/>
	<updated>2026-08-24T00:46:46Z</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_2012/ch2a_2w15_rr&amp;diff=68016</id>
		<title>CSC/ECE 517 Fall 2012/ch2a 2w15 rr</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w15_rr&amp;diff=68016"/>
		<updated>2012-10-23T17:05:35Z</updated>

		<summary type="html">&lt;p&gt;Rchakar: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
Object-oriented design is a programming model that began in the late 60's as software programs became more complex. The idea behind the approach was to build software systems by modeling them based on the real-world objects that they were trying to represent. For example, banking systems would contain customer objects, account objects and so on. Today, object-oriented design has been widely adopted &amp;lt;ref&amp;gt; [http://www.objectmentor.com/omSolutions/oops_what.html Introduction to Object Oriented Design]&amp;lt;/ref&amp;gt;. When done properly, this approach leads to simple, robust, flexible and modular software. When something goes wrong, the results could be bad. Object oriented design can be seen from different perspectives. In the language-centric perspective, objects are containers of data and methods. The model-centric perspective views the objects as model elements reflecting the real world objects and Responsibility-centric perspective views objects as interacting elements each playing a role in object community. Each of these perspectives are outlined in the following sections.&lt;br /&gt;
&lt;br /&gt;
==Background==&lt;br /&gt;
The history of object oriented design has many branches, and many people have contributed to this domain. The 1960s and 1970s saw the emergence of object oriented programming languages, such as Simula and Smalltalk, with key contributors such as Kristen Nygaard and Alan Kay, the visionary computer scientist who founded Smalltalk.&amp;lt;ref&amp;gt;[http://www.informit.com/articles/article.aspx?p=360440&amp;amp;seqNum=8 History of Object Oriented Design]&amp;lt;/ref&amp;gt;&lt;br /&gt;
But object oriented design was informal through that period, and it was only form 1982 that it became popular.  Contributors in this domain include Grady Booch, Kent Beck, Peter Coad, Don Firesmith, Ivar Jacobson (a UML founder), Steve Mellor, Bertrand Meyer, Jim Rumbaugh (a UML founder) and Rebecca Wirfs-Brock among others. Each of these perspectives are outlined in the following sections.&lt;br /&gt;
&lt;br /&gt;
==Object Oriented Design Perspectives==&lt;br /&gt;
===Language-centric perspective===&lt;br /&gt;
The focus of the language-centric perspective is classes and objects as building blocks for developing software. The emphasis is on the internal structure which are the fields and methods. Thus it is inherently a compile-time or static view which means that the definition speaks in terms of what it looks like in the following code:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
public class foo&lt;br /&gt;
{&lt;br /&gt;
 private int x;&lt;br /&gt;
 public static double y;&lt;br /&gt;
&lt;br /&gt;
 public int double (int x)&lt;br /&gt;
 {&lt;br /&gt;
   return (3*x);&lt;br /&gt;
 }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The implicit aspect of this view is that, an object is an entity in its own right and the definition is closed. Any object can be understood in isolation where the fields and methods are just enumerated. The advantage of this perspective is of that it is very concrete, closely related to the programming language level and therefore it is easy to understand. The disadvantage is that it does not help to structure the collaboration between objects, the dynamics, and this is typically where the hard challenges of design lie. Thus the perspective offers little guidance in the process of designing any realistic system.&amp;lt;ref&amp;gt;[https://docs.google.com/viewer?a=v&amp;amp;q=cache:Kl7VOfRFnNEJ:citeseerx.ist.psu.edu/viewdoc/download%3Fdoi%3D10.1.1.86.7500%26rep%3Drep1%26type%3Dpdf+%22language+centric%22+object+oriented+design&amp;amp;hl=en&amp;amp;gl=us&amp;amp;pid=bl&amp;amp;srcid=ADGEESj-HffIDcwsyYlGssvRYS3OAEloLCID6dCIHQeZ_WQ5W-fy9B3rC4uxbUKVBGzyPVn4uBra4ot0hCS71JC3NNy7nBVXRxzR4z06p3fVQKSIjn5t_fFr3dzrMICa5qNUVRnYHEAv&amp;amp;sig=AHIEtbRX7G0XgBl1mKxnPINiorZvNhW32Q Henrik Baerbak Christensen, &amp;lt;i&amp;gt;&amp;quot;Implications of Perspective in Teaching Objects First and Object Design&amp;quot;&amp;lt;/i&amp;gt;, Proceedings of the 10th annual &amp;lt;i&amp;gt;SIGCSE&amp;lt;/i&amp;gt; conference on Innovation and technology in computer science education, Department of Computer Science, University of Aarhus, 2005.]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Model-centric perspective===&lt;br /&gt;
In this perspective, the objects(classes, fields) and their relationships like inheritance, association, aggregation are designed by using some model. Here the program execution is a simulation of some part of the&lt;br /&gt;
world, and objects are perceived as the parts of the model. The perspective is often explained through analogies to other models like toy railways, traffic simulations, computer games, etc. This perspective stresses objects as entities in a larger context (they are parts of a model) as opposed to the self-contained language-centric definition. This approach works fine for real life systems such as an order-entry system, a library system, boat-rental and various other real world entity oriented systems. This naturally leads to a strong focus on what the relations are between the parts: association, generalization, composition. Dynamics is an inherent part of the concept simulation and the explicit guideline for designing object interaction is to imitate real world or model interactions.&lt;br /&gt;
Let us consider a real world example of designing a partial implementation of the board game-Backgammon to understand the objected oriented using a model-centric perspective. The physical parts of Backgammon identifiable are the checkers, points, board, dice, player, etc. The diagram below is a design of model parts (classes) and their relationships (relations).&lt;br /&gt;
&lt;br /&gt;
===Responsibility-centric perspective===&lt;br /&gt;
This perspective stresses on the behavior of software systems and the concepts used to do design include behavior, roles, responsibilities and protocol. Here, the primary focus is the dynamics of the program. Roles and responsibilities are the core concepts in this perspective and hence it has more coupling to behavior when compared to static elements like objects or model parts. There is a difference between behavior and responsibility, where behavior is the concrete actions taken by objects where as responsibility is to fulfill requests through any number of concrete behaviors. So, responsibility is more abstract than behavior.&lt;br /&gt;
One can look at responsibility-centric perspective as an extension of the model-centric perspective with a shift of focus (from a focus on model parts to a focus on the simulation or dynamical aspects). The Backgammon example can again be&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Object Oriented Design Concepts &amp;lt;ref&amp;gt;http://books.google.com/books/about/Object_Design.html?id=vUF72vN5MY8C&amp;lt;/ref&amp;gt;==&lt;br /&gt;
[[File:AnObject.jpg|350px|right|thumb|An object encapsulates scripts and information&amp;lt;ref&amp;gt;http://books.google.com/books?id=vUF72vN5MY8C&amp;amp;pg=PA2&amp;amp;source=gbs_toc_r&amp;amp;cad=4#v=onepage&amp;amp;q&amp;amp;f=false Object Design: Roles, Responsibilities, and Collaborations by Rebecca Wirfs-Brock, Alan McKean&amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
A software application is constructed from parts. These parts -software objects- interact by sending messages to request information or action from others. Throughout its lifetime, each object remains responsible for responding to a fixed set of requests. To fulfill these requests, objects encapsulate scripted responses and the information that they base them on (see Figure 4a). If an object is designed to remember certain facts, it can use them to respond differently to future requests.&lt;br /&gt;
&lt;br /&gt;
Building an object-oriented application means inventing appropriate machinery. We represent real-world information, processes, interactions, relationships, even errors, by inventing objects that don't exist in the real world. We give life and intelligence to inanimate things. We take difficult-to-comprehend real-world objects and split them into simpler, more manageable software ones. We invent new objects. Each has a specific role to play in the application. Our measure of success lies in how clearly we invent a software reality that satisfies our application's requirements—and not in how closely it resembles the real world.&amp;lt;ref&amp;gt;http://books.google.com/books?id=vUF72vN5MY8C&amp;amp;pg=PA3&amp;amp;source=gbs_toc_r&amp;amp;cad=4#v=onepage&amp;amp;q&amp;amp;f=false Object Design: Roles, Responsibilities, and Collaborations by Rebecca Wirfs-Brock, Alan McKean&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''For example''', filling out and filing a form seems simple. But to perform that task in software, behind the simple forms, the application is validating the data against business rules, reading and refreshing the persistent data, guaranteeing the consistency of the information, and managing simultaneous access by dozens of users. Software objects display information, coordinate activities, compute, or connect to services.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Concept&lt;br /&gt;
! Short description&lt;br /&gt;
|-&lt;br /&gt;
|An object || an implementation of one or more roles.&lt;br /&gt;
|-&lt;br /&gt;
|A role || a set of related responsibilities.&lt;br /&gt;
|-&lt;br /&gt;
|A responsibility || an obligation to perform a task or know information&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Roles ''(relation with objects)'' ===&lt;br /&gt;
An object has a specific purpose - a role it plays within a given context. Objects that play the same role can be interchanged. For example, there are several providers that can deliver letters and packages: DHL, FedEx, UPS, Post, Airborne. They all have the same purpose, if not the same way of carrying out their business. We choose from among them according to the requirements that you have for delivery. We pick among the mail carriers that meet your requirements.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre-wrap; &lt;br /&gt;
white-space: -moz-pre-wrap;&lt;br /&gt;
white-space: -pre-wrap;&lt;br /&gt;
white-space: -o-pre-wrap; &lt;br /&gt;
word-wrap: break-word&amp;quot;&amp;gt;&lt;br /&gt;
A role is a set of responsibilities that can be used interchangeably.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A well-defined object supports a clearly defined role. We use purposeful oversimplifications, or role stereotypes, to help focus an object's responsibilities. Stereotypes are characterizations of the roles needed by an application. Because our goal is to build consistent and easy-to-use objects, it is advantageous to stereotype objects, ignoring specifics of their behaviors and thinking about them at a higher level. By oversimplifying and characterizing it, we can ponder the nature of an object's role more easily. We find these stereotypes to be useful:&lt;br /&gt;
*Information holder - knows and provides information&lt;br /&gt;
*Structurer - maintains relationships between objects and information about those relationships&lt;br /&gt;
*Service provider - performs work and, in general, offers computing services&lt;br /&gt;
*Coordinator - reacts to events by delegating tasks to others&lt;br /&gt;
*Controller - makes decisions and closely directs others' actions&lt;br /&gt;
*Interfacer - transforms information and requests between distinct parts of our system&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre-wrap; &lt;br /&gt;
white-space: -moz-pre-wrap;&lt;br /&gt;
white-space: -pre-wrap;&lt;br /&gt;
white-space: -o-pre-wrap; &lt;br /&gt;
word-wrap: break-word&amp;quot;&amp;gt;&lt;br /&gt;
Just as an actor tries to play a believable part in a play, an object takes on a character in an application by assuming responsibilities that define a meaningful role.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Responsibilities &amp;lt;ref&amp;gt;http://books.google.com/books?id=vUF72vN5MY8C&amp;amp;pg=PA5&amp;amp;source=gbs_toc_r&amp;amp;cad=4#v=onepage&amp;amp;q&amp;amp;f=false&amp;lt;/ref&amp;gt;===&lt;br /&gt;
An application implements a system of responsibilities. Responsibilities are assigned to roles. Roles collaborate to carry out their responsibilities. A good application is structured to effectively fulfill these responsibilities. We start design by inventing objects, assigning responsibilities to them for knowing information and doing the application's work. Collectively, these objects work together to fulfill the larger responsibilities of the application.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre-wrap; &lt;br /&gt;
white-space: -moz-pre-wrap;&lt;br /&gt;
white-space: -pre-wrap;&lt;br /&gt;
white-space: -o-pre-wrap; &lt;br /&gt;
word-wrap: break-word&amp;quot;&amp;gt;&lt;br /&gt;
An object embodies a set of roles with a designated set of responsibilities.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Responsibilities are general statements about software objects. They include three major items:&lt;br /&gt;
*The actions an object performs&lt;br /&gt;
*The knowledge an object maintains&lt;br /&gt;
*Major decisions an object makes that affect others&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre-wrap; &lt;br /&gt;
white-space: -moz-pre-wrap;&lt;br /&gt;
white-space: -pre-wrap;&lt;br /&gt;
white-space: -o-pre-wrap; &lt;br /&gt;
word-wrap: break-word&amp;quot;&amp;gt;&lt;br /&gt;
Physical objects, unlike our intelligent software objects, typically do work or hold on to things or information. A phone book is a physical object but it takes no action. A thermostat exists, and it makes decisions and sends control signals. A teakettle exists, but it does little more than act as a reservoir (and occasionally whistles to send a signal). Physical objects usually don't make informed decisions. However, a dog is man's best friend and companion and does many different things on its own behalf. Our software objects lie somewhere between these extremes: They aren't sentient beings, but they can be more or less lively, depending on what responsibilities we give them.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Responsibilities come from statements or implications of system behavior found in use cases. There is a gap between use case descriptions and object responsibilities. Responsibilities are general statements about what an object knows, does, or decides. Use case descriptions are statements about our system's behavior and how actors interact with it. Use cases describe our software from the perspective of an outside observer. They don't tell how something is accomplished. Use cases provide a rough idea of how our system will work and the tasks involved. As&lt;br /&gt;
designers we bridge this gap by transforming descriptions found in use cases into explicit statements about actions, information, or decision-making responsibilities. This is a three-step process:&lt;br /&gt;
*Identify things the system does and information it manages.&lt;br /&gt;
*Restate these as responsibilities.&lt;br /&gt;
*Break them down into smaller parts if necessary, and assign them to appropriate objects.&lt;br /&gt;
&lt;br /&gt;
=== Behavior &amp;lt;ref&amp;gt;http://csis.pace.edu/~bergin/patterns/design.html&amp;lt;/ref&amp;gt;===&lt;br /&gt;
Behavior means activity. It also means having information that other objects may need. In this case the behavior is providing that information. &lt;br /&gt;
In Mancala, the players play the game, for example. A pit might &amp;quot;know&amp;quot; how many pebbles it contains and it might be asked by another object like a player how many it holds.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;quot;Taking turn&amp;quot; is the behavior a player in 2 player games.&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Protocols &amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Protocol_(object-oriented_programming)&amp;lt;/ref&amp;gt;===&lt;br /&gt;
In [http://en.wikipedia.org/wiki/Object-oriented_programming object-oriented programming], a '''protocol''' or '''interface''' is a common means for unrelated objects to communicate with each other. When objects do collaborate, they are designed to follow certain protocols and observe specific conventions: Make requests only for advertised services. Provide appropriate information. Use services under certain conditions. Finally, accept the consequences of using them. Object contracts should describe all these terms.&lt;br /&gt;
&lt;br /&gt;
The protocol is a description of:&lt;br /&gt;
* The messages that are understood by the object.&lt;br /&gt;
* The arguments that these messages may be supplied with.&lt;br /&gt;
* The types of results that these messages return.&lt;br /&gt;
* The [http://en.wikipedia.org/wiki/Invariant_(computer_science) invariants] that are preserved despite modifications to the state of an object.&lt;br /&gt;
* The exceptional situations that will be required to be handled by clients to the object.&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
In this article we have discussed different object-oriented design perspectives, such as, language-centric, model-centric and responsibility-centric. We have also described the concepts of behavior, responsibilities, roles and protocols. The highlight of the second part is the relation between role and object.&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Additional Reading==&lt;br /&gt;
*[http://books.google.com/books?id=VQaf_vOTDzMC&amp;amp;pg=PA244&amp;amp;lpg=PA244&amp;amp;dq=%22language+centric%22+%22model-centric%22+%22responsibility+centric%22+object+oriented+design&amp;amp;source=bl&amp;amp;ots=tY3C6nStiA&amp;amp;sig=bEO2VyjGTobxQ362Yaubi542ZTc&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ei=f3KFUJ2-D4Ho8QTC_IHQBA&amp;amp;ved=0CEMQ6AEwAg#v=onepage&amp;amp;q=%22language%20centric%22%20%22model-centric%22%20%22responsibility%20centric%22%20object%20oriented%20design&amp;amp;f=false Flexible,Reliable Software using Patterns and Agile Development]&lt;br /&gt;
*[http://books.google.com/books?id=YnGz2ghKF-gC&amp;amp;pg=PA60&amp;amp;lpg=PA60&amp;amp;dq=%22language-centric%22+object+oriented+design&amp;amp;source=bl&amp;amp;ots=ko8xV4SZJs&amp;amp;sig=yemCujDGu_BEySZ_k32Kc0KVbgM&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ei=K8WFUOykNYW89gTcx4GQAg&amp;amp;ved=0CFEQ6AEwBA#v=onepage&amp;amp;q=%22language-centric%22%20object%20oriented%20design&amp;amp;f=false Jibitesh Mishra, Ashok Mohanty, &amp;lt;i&amp;gt;&amp;quot;Software Engineering&amp;quot;&amp;lt;/i&amp;gt;]&lt;br /&gt;
*[http://web.engr.oregonstate.edu/~budd/Books/oopintro3e/info/ReadMe.html An Introduction to Object Oriented Programming]&lt;/div&gt;</summary>
		<author><name>Rchakar</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w15_rr&amp;diff=68015</id>
		<title>CSC/ECE 517 Fall 2012/ch2a 2w15 rr</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w15_rr&amp;diff=68015"/>
		<updated>2012-10-23T16:57:03Z</updated>

		<summary type="html">&lt;p&gt;Rchakar: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
Object-oriented design is a programming model that began in the late 60's as software programs became more complex. The idea behind the approach was to build software systems by modeling them based on the real-world objects that they were trying to represent. For example, banking systems would contain customer objects, account objects and so on. Today, object-oriented design has been widely adopted &amp;lt;ref&amp;gt; [http://www.objectmentor.com/omSolutions/oops_what.html Introduction to Object Oriented Design]&amp;lt;/ref&amp;gt;. When done properly, this approach leads to simple, robust, flexible and modular software. When something goes wrong, the results could be bad. Object oriented design can be seen from different perspectives. In the language-centric perspective, objects are containers of data and methods. The model-centric perspective views the objects as model elements reflecting the real world objects and Responsibility-centric perspective views objects as interacting elements each playing a role in object community. Each of these perspectives are outlined in the following sections.&lt;br /&gt;
&lt;br /&gt;
==Background==&lt;br /&gt;
The history of object oriented design has many branches, and many people have contributed to this domain. The 1960s and 1970s saw the emergence of object oriented programming languages, such as Simula and Smalltalk, with key contributors such as Kristen Nygaard and Alan Kay, the visionary computer scientist who founded Smalltalk.&amp;lt;ref&amp;gt;[http://www.informit.com/articles/article.aspx?p=360440&amp;amp;seqNum=8 History of Object Oriented Design]&amp;lt;/ref&amp;gt;&lt;br /&gt;
But object oriented design was informal through that period, and it was only form 1982 that it became popular.  Contributors in this domain include Grady Booch, Kent Beck, Peter Coad, Don Firesmith, Ivar Jacobson (a UML founder), Steve Mellor, Bertrand Meyer, Jim Rumbaugh (a UML founder) and Rebecca Wirfs-Brock among others. Each of these perspectives are outlined in the following sections.&lt;br /&gt;
&lt;br /&gt;
==Object Oriented Design Perspectives==&lt;br /&gt;
===Language-centric perspective===&lt;br /&gt;
The focus of the language-centric perspective is classes and objects as building blocks for developing software. The emphasis is on the internal structure which are the fields and methods. Thus it is inherently a compile-time or static view which means that the definition speaks in terms of what it looks like in the following code:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
public class foo&lt;br /&gt;
{&lt;br /&gt;
 private int x;&lt;br /&gt;
 public static double y;&lt;br /&gt;
&lt;br /&gt;
 public int double (int x)&lt;br /&gt;
 {&lt;br /&gt;
   return (3*x);&lt;br /&gt;
 }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The implicit aspect of this view is that, an object is an entity in its own right and the definition is closed. Any object can be understood in isolation where the fields and methods are just enumerated. The advantage of this perspective is of that it is very concrete, closely related to the programming language level and therefore it is easy to understand. The disadvantage is that it does not help to structure the collaboration between objects, the dynamics, and this is typically where the hard challenges of design lie. Thus the perspective offers little guidance in the process of designing any realistic system.&amp;lt;ref&amp;gt;[https://docs.google.com/viewer?a=v&amp;amp;q=cache:Kl7VOfRFnNEJ:citeseerx.ist.psu.edu/viewdoc/download%3Fdoi%3D10.1.1.86.7500%26rep%3Drep1%26type%3Dpdf+%22language+centric%22+object+oriented+design&amp;amp;hl=en&amp;amp;gl=us&amp;amp;pid=bl&amp;amp;srcid=ADGEESj-HffIDcwsyYlGssvRYS3OAEloLCID6dCIHQeZ_WQ5W-fy9B3rC4uxbUKVBGzyPVn4uBra4ot0hCS71JC3NNy7nBVXRxzR4z06p3fVQKSIjn5t_fFr3dzrMICa5qNUVRnYHEAv&amp;amp;sig=AHIEtbRX7G0XgBl1mKxnPINiorZvNhW32Q Henrik Baerbak Christensen, &amp;lt;i&amp;gt;&amp;quot;Implications of Perspective in Teaching Objects First and Object Design&amp;quot;&amp;lt;/i&amp;gt;, Proceedings of the 10th annual &amp;lt;i&amp;gt;SIGCSE&amp;lt;/i&amp;gt; conference on Innovation and technology in computer science education, Department of Computer Science, University of Aarhus, 2005.]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Model-centric perspective===&lt;br /&gt;
In this perspective, the objects(classes, fields) and their relationships like inheritance, association, aggregation are designed by using some model. Here the program execution is a simulation of some part of the&lt;br /&gt;
world, and objects are perceived as the parts of the model. The perspective is often explained through analogies to other models like toy railways, traffic simulations, computer games, etc. This perspective stresses objects as entities in a larger context (they are parts of a model) as opposed to the self-contained language-centric definition. This approach works fine for real life systems such as an order-entry system, a library system, boat-rental and various other real world entity oriented systems. This naturally leads to a strong focus on what the relations are between the parts: association, generalization, composition. Dynamics is an inherent part of the concept simulation and the explicit guideline for designing object interaction is to imitate real world or model interactions.&lt;br /&gt;
Let us consider a real world example of designing a partial implementation of the board game-Backgammon to understand the objected oriented using a model-centric perspective. The physical parts of Backgammon identifiable are the checkers, points, board, dice, player, etc. The diagram below is a design of model parts (classes) and their relationships (relations).&lt;br /&gt;
&lt;br /&gt;
===Responsibility-centric perspective===&lt;br /&gt;
This perspective stresses on the behavior of software systems and the concepts used to do design include behavior, roles, responsibilities and protocol. Here, the primary focus is the dynamics of the program. Roles and responsibilities are the core concepts in this perspective and hence it has more coupling to behavior when compared to static elements like objects or model parts. There is a difference between behavior and responsibility, where behavior is the concrete actions taken by objects where as responsibility is to fulfill requests through any number of concrete behaviors. So, responsibility is more abstract than behavior.&lt;br /&gt;
One can look at responsibility-centric perspective as an extension of the model-centric perspective with a shift of focus (from a focus on model parts to a focus on the simulation or dynamical aspects). The Backgammon example can again be&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Object Oriented Design Concepts &amp;lt;ref&amp;gt;http://books.google.com/books/about/Object_Design.html?id=vUF72vN5MY8C&amp;lt;/ref&amp;gt;==&lt;br /&gt;
[[File:AnObject.jpg|350px|right|thumb|An object encapsulates scripts and information&amp;lt;ref&amp;gt;http://books.google.com/books?id=vUF72vN5MY8C&amp;amp;pg=PA2&amp;amp;source=gbs_toc_r&amp;amp;cad=4#v=onepage&amp;amp;q&amp;amp;f=false Object Design: Roles, Responsibilities, and Collaborations by Rebecca Wirfs-Brock, Alan McKean&amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
A software application is constructed from parts. These parts -software objects- interact by sending messages to request information or action from others. Throughout its lifetime, each object remains responsible for responding to a fixed set of requests. To fulfill these requests, objects encapsulate scripted responses and the information that they base them on (see Figure 4a). If an object is designed to remember certain facts, it can use them to respond differently to future requests.&lt;br /&gt;
&lt;br /&gt;
Building an object-oriented application means inventing appropriate machinery. We represent real-world information, processes, interactions, relationships, even errors, by inventing objects that don't exist in the real world. We give life and intelligence to inanimate things. We take difficult-to-comprehend real-world objects and split them into simpler, more manageable software ones. We invent new objects. Each has a specific role to play in the application. Our measure of success lies in how clearly we invent a software reality that satisfies our application's requirements—and not in how closely it resembles the real world.&amp;lt;ref&amp;gt;http://books.google.com/books?id=vUF72vN5MY8C&amp;amp;pg=PA3&amp;amp;source=gbs_toc_r&amp;amp;cad=4#v=onepage&amp;amp;q&amp;amp;f=false Object Design: Roles, Responsibilities, and Collaborations by Rebecca Wirfs-Brock, Alan McKean&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''For example''', filling out and filing a form seems simple. But to perform that task in software, behind the simple forms, the application is validating the data against business rules, reading and refreshing the persistent data, guaranteeing the consistency of the information, and managing simultaneous access by dozens of users. Software objects display information, coordinate activities, compute, or connect to services.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Concept&lt;br /&gt;
! Short description&lt;br /&gt;
|-&lt;br /&gt;
|An object || an implementation of one or more roles.&lt;br /&gt;
|-&lt;br /&gt;
|A role || a set of related responsibilities.&lt;br /&gt;
|-&lt;br /&gt;
|A responsibility || an obligation to perform a task or know information&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Roles ''(relation with objects)'' ===&lt;br /&gt;
An object has a specific purpose - a role it plays within a given context. Objects that play the same role can be interchanged. For example, there are several providers that can deliver letters and packages: DHL, FedEx, UPS, Post, Airborne. They all have the same purpose, if not the same way of carrying out their business. We choose from among them according to the requirements that you have for delivery. We pick among the mail carriers that meet your requirements.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre-wrap; &lt;br /&gt;
white-space: -moz-pre-wrap;&lt;br /&gt;
white-space: -pre-wrap;&lt;br /&gt;
white-space: -o-pre-wrap; &lt;br /&gt;
word-wrap: break-word&amp;quot;&amp;gt;&lt;br /&gt;
A role is a set of responsibilities that can be used interchangeably.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A well-defined object supports a clearly defined role. We use purposeful oversimplifications, or role stereotypes, to help focus an object's responsibilities. Stereotypes are characterizations of the roles needed by an application. Because our goal is to build consistent and easy-to-use objects, it is advantageous to stereotype objects, ignoring specifics of their behaviors and thinking about them at a higher level. By oversimplifying and characterizing it, we can ponder the nature of an object's role more easily. We find these stereotypes to be useful:&lt;br /&gt;
*Information holder - knows and provides information&lt;br /&gt;
*Structurer - maintains relationships between objects and information about those relationships&lt;br /&gt;
*Service provider - performs work and, in general, offers computing services&lt;br /&gt;
*Coordinator - reacts to events by delegating tasks to others&lt;br /&gt;
*Controller - makes decisions and closely directs others' actions&lt;br /&gt;
*Interfacer - transforms information and requests between distinct parts of our system&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre-wrap; &lt;br /&gt;
white-space: -moz-pre-wrap;&lt;br /&gt;
white-space: -pre-wrap;&lt;br /&gt;
white-space: -o-pre-wrap; &lt;br /&gt;
word-wrap: break-word&amp;quot;&amp;gt;&lt;br /&gt;
Just as an actor tries to play a believable part in a play, an object takes on a character in an application by assuming responsibilities that define a meaningful role.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Responsibilities &amp;lt;ref&amp;gt;http://books.google.com/books?id=vUF72vN5MY8C&amp;amp;pg=PA5&amp;amp;source=gbs_toc_r&amp;amp;cad=4#v=onepage&amp;amp;q&amp;amp;f=false&amp;lt;/ref&amp;gt;===&lt;br /&gt;
An application implements a system of responsibilities. Responsibilities are assigned to roles. Roles collaborate to carry out their responsibilities. A good application is structured to effectively fulfill these responsibilities. We start design by inventing objects, assigning responsibilities to them for knowing information and doing the application's work. Collectively, these objects work together to fulfill the larger responsibilities of the application.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre-wrap; &lt;br /&gt;
white-space: -moz-pre-wrap;&lt;br /&gt;
white-space: -pre-wrap;&lt;br /&gt;
white-space: -o-pre-wrap; &lt;br /&gt;
word-wrap: break-word&amp;quot;&amp;gt;&lt;br /&gt;
An object embodies a set of roles with a designated set of responsibilities.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Responsibilities are general statements about software objects. They include three major items:&lt;br /&gt;
*The actions an object performs&lt;br /&gt;
*The knowledge an object maintains&lt;br /&gt;
*Major decisions an object makes that affect others&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre-wrap; &lt;br /&gt;
white-space: -moz-pre-wrap;&lt;br /&gt;
white-space: -pre-wrap;&lt;br /&gt;
white-space: -o-pre-wrap; &lt;br /&gt;
word-wrap: break-word&amp;quot;&amp;gt;&lt;br /&gt;
Physical objects, unlike our intelligent software objects, typically do work or hold on to things or information. A phone book is a physical object but it takes no action. A thermostat exists, and it makes decisions and sends control signals. A teakettle exists, but it does little more than act as a reservoir (and occasionally whistles to send a signal). Physical objects usually don't make informed decisions. However, a dog is man's best friend and companion and does many different things on its own behalf. Our software objects lie somewhere between these extremes: They aren't sentient beings, but they can be more or less lively, depending on what responsibilities we give them.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Responsibilities come from statements or implications of system behavior found in use cases. There is a gap between use case descriptions and object responsibilities. Responsibilities are general statements about what an object knows, does, or decides. Use case descriptions are statements about our system's behavior and how actors interact with it. Use cases describe our software from the perspective of an outside observer. They don't tell how something is accomplished. Use cases provide a rough idea of how our system will work and the tasks involved. As&lt;br /&gt;
designers we bridge this gap by transforming descriptions found in use cases into explicit statements about actions, information, or decision-making responsibilities. This is a three-step process:&lt;br /&gt;
*Identify things the system does and information it manages.&lt;br /&gt;
*Restate these as responsibilities.&lt;br /&gt;
*Break them down into smaller parts if necessary, and assign them to appropriate objects.&lt;br /&gt;
&lt;br /&gt;
=== Behavior &amp;lt;ref&amp;gt;http://csis.pace.edu/~bergin/patterns/design.html&amp;lt;/ref&amp;gt;===&lt;br /&gt;
Behavior means activity. It also means having information that other objects may need. In this case the behavior is providing that information. &lt;br /&gt;
In Mancala, the players play the game, for example. A pit might &amp;quot;know&amp;quot; how many pebbles it contains and it might be asked by another object like a player how many it holds.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;quot;Taking turn&amp;quot; is the behavior a player in 2 player games.&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Protocols &amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Protocol_(object-oriented_programming)&amp;lt;/ref&amp;gt;===&lt;br /&gt;
In [http://en.wikipedia.org/wiki/Object-oriented_programming object-oriented programming], a '''protocol''' or '''interface''' is a common means for unrelated objects to communicate with each other. When objects do collaborate, they are designed to follow certain protocols and observe specific conventions: Make requests only for advertised services. Provide appropriate information. Use services under certain conditions. Finally, accept the consequences of using them. Object contracts should describe all these terms.&lt;br /&gt;
&lt;br /&gt;
The protocol is a description of:&lt;br /&gt;
* The messages that are understood by the object.&lt;br /&gt;
* The arguments that these messages may be supplied with.&lt;br /&gt;
* The types of results that these messages return.&lt;br /&gt;
* The [http://en.wikipedia.org/wiki/Invariant_(computer_science) invariants] that are preserved despite modifications to the state of an object.&lt;br /&gt;
* The exceptional situations that will be required to be handled by clients to the object.&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
In this article we have discussed different object-oriented design perspectives, such as, language-centric, model-centric and responsibility-centric. We have also described the concepts of behavior, responsibilities, roles and protocols.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Additional Reading==&lt;br /&gt;
*[http://books.google.com/books?id=VQaf_vOTDzMC&amp;amp;pg=PA244&amp;amp;lpg=PA244&amp;amp;dq=%22language+centric%22+%22model-centric%22+%22responsibility+centric%22+object+oriented+design&amp;amp;source=bl&amp;amp;ots=tY3C6nStiA&amp;amp;sig=bEO2VyjGTobxQ362Yaubi542ZTc&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ei=f3KFUJ2-D4Ho8QTC_IHQBA&amp;amp;ved=0CEMQ6AEwAg#v=onepage&amp;amp;q=%22language%20centric%22%20%22model-centric%22%20%22responsibility%20centric%22%20object%20oriented%20design&amp;amp;f=false Flexible,Reliable Software using Patterns and Agile Development]&lt;br /&gt;
*[http://books.google.com/books?id=YnGz2ghKF-gC&amp;amp;pg=PA60&amp;amp;lpg=PA60&amp;amp;dq=%22language-centric%22+object+oriented+design&amp;amp;source=bl&amp;amp;ots=ko8xV4SZJs&amp;amp;sig=yemCujDGu_BEySZ_k32Kc0KVbgM&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ei=K8WFUOykNYW89gTcx4GQAg&amp;amp;ved=0CFEQ6AEwBA#v=onepage&amp;amp;q=%22language-centric%22%20object%20oriented%20design&amp;amp;f=false Jibitesh Mishra, Ashok Mohanty, &amp;lt;i&amp;gt;&amp;quot;Software Engineering&amp;quot;&amp;lt;/i&amp;gt;]&lt;br /&gt;
*[http://web.engr.oregonstate.edu/~budd/Books/oopintro3e/info/ReadMe.html An Introduction to Object Oriented Programming]&lt;/div&gt;</summary>
		<author><name>Rchakar</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w15_rr&amp;diff=68014</id>
		<title>CSC/ECE 517 Fall 2012/ch2a 2w15 rr</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w15_rr&amp;diff=68014"/>
		<updated>2012-10-23T16:37:21Z</updated>

		<summary type="html">&lt;p&gt;Rchakar: /* Behavior http://csis.pace.edu/~bergin/patterns/design.html */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
Object-oriented design is a programming model that began in the late 60's as software programs became more complex. The idea behind the approach was to build software systems by modeling them based on the real-world objects that they were trying to represent. For example, banking systems would contain customer objects, account objects and so on. Today, object-oriented design has been widely adopted &amp;lt;ref&amp;gt; [http://www.objectmentor.com/omSolutions/oops_what.html Introduction to Object Oriented Design]&amp;lt;/ref&amp;gt;. When done properly, this approach leads to simple, robust, flexible and modular software. When something goes wrong, the results could be bad. Object oriented design can be seen from different perspectives. In the language-centric perspective, objects are containers of data and methods. The model-centric perspective views the objects as model elements reflecting the real world objects and Responsibility-centric perspective views objects as interacting elements each playing a role in object community. Each of these perspectives are outlined in the following sections.&lt;br /&gt;
&lt;br /&gt;
==Background==&lt;br /&gt;
The history of object oriented design has many branches, and many people have contributed to this domain. The 1960s and 1970s saw the emergence of object oriented programming languages, such as Simula and Smalltalk, with key contributors such as Kristen Nygaard and Alan Kay, the visionary computer scientist who founded Smalltalk.&amp;lt;ref&amp;gt;[http://www.informit.com/articles/article.aspx?p=360440&amp;amp;seqNum=8 History of Object Oriented Design]&amp;lt;/ref&amp;gt;&lt;br /&gt;
But object oriented design was informal through that period, and it was only form 1982 that it became popular.  Contributors in this domain include Grady Booch, Kent Beck, Peter Coad, Don Firesmith, Ivar Jacobson (a UML founder), Steve Mellor, Bertrand Meyer, Jim Rumbaugh (a UML founder) and Rebecca Wirfs-Brock among others. Each of these perspectives are outlined in the following sections.&lt;br /&gt;
&lt;br /&gt;
==Object Oriented Design Perspectives==&lt;br /&gt;
===Language-centric perspective===&lt;br /&gt;
The focus of the language-centric perspective is classes and objects as building blocks for developing software. The emphasis is on the internal structure which are the fields and methods. Thus it is inherently a compile-time or static view which means that the definition speaks in terms of what it looks like in the following code:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
public class foo&lt;br /&gt;
{&lt;br /&gt;
 private int x;&lt;br /&gt;
 public static double y;&lt;br /&gt;
&lt;br /&gt;
 public int double (int x)&lt;br /&gt;
 {&lt;br /&gt;
   return (3*x);&lt;br /&gt;
 }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The implicit aspect of this view is that, an object is an entity in its own right and the definition is closed. Any object can be understood in isolation where the fields and methods are just enumerated. The advantage of this perspective is of that it is very concrete, closely related to the programming language level and therefore it is easy to understand. The disadvantage is that it does not help to structure the collaboration between objects, the dynamics, and this is typically where the hard challenges of design lie. Thus the perspective offers little guidance in the process of designing any realistic system.&amp;lt;ref&amp;gt;[https://docs.google.com/viewer?a=v&amp;amp;q=cache:Kl7VOfRFnNEJ:citeseerx.ist.psu.edu/viewdoc/download%3Fdoi%3D10.1.1.86.7500%26rep%3Drep1%26type%3Dpdf+%22language+centric%22+object+oriented+design&amp;amp;hl=en&amp;amp;gl=us&amp;amp;pid=bl&amp;amp;srcid=ADGEESj-HffIDcwsyYlGssvRYS3OAEloLCID6dCIHQeZ_WQ5W-fy9B3rC4uxbUKVBGzyPVn4uBra4ot0hCS71JC3NNy7nBVXRxzR4z06p3fVQKSIjn5t_fFr3dzrMICa5qNUVRnYHEAv&amp;amp;sig=AHIEtbRX7G0XgBl1mKxnPINiorZvNhW32Q Henrik Baerbak Christensen, &amp;lt;i&amp;gt;&amp;quot;Implications of Perspective in Teaching Objects First and Object Design&amp;quot;&amp;lt;/i&amp;gt;, Proceedings of the 10th annual &amp;lt;i&amp;gt;SIGCSE&amp;lt;/i&amp;gt; conference on Innovation and technology in computer science education, Department of Computer Science, University of Aarhus, 2005.]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Model-centric perspective===&lt;br /&gt;
In this perspective, the objects(classes, fields) and their relationships like inheritance, association, aggregation are designed by using some model. Here the program execution is a simulation of some part of the&lt;br /&gt;
world, and objects are perceived as the parts of the model. The perspective is often explained through analogies to other models like toy railways, traffic simulations, computer games, etc. This perspective stresses objects as entities in a larger context (they are parts of a model) as opposed to the self-contained language-centric definition. This approach works fine for real life systems such as an order-entry system, a library system, boat-rental and various other real world entity oriented systems. This naturally leads to a strong focus on what the relations are between the parts: association, generalization, composition. Dynamics is an inherent part of the concept simulation and the explicit guideline for designing object interaction is to imitate real world or model interactions.&lt;br /&gt;
Let us consider a real world example of designing a partial implementation of the board game-Backgammon to understand the objected oriented using a model-centric perspective. The physical parts of Backgammon identifiable are the checkers, points, board, dice, player, etc. The diagram below is a design of model parts (classes) and their relationships (relations).&lt;br /&gt;
&lt;br /&gt;
===Responsibility-centric perspective===&lt;br /&gt;
This perspective stresses on the behavior of software systems and the concepts used to do design include behavior, roles, responsibilities and protocol. Here, the primary focus is the dynamics of the program. Roles and responsibilities are the core concepts in this perspective and hence it has more coupling to behavior when compared to static elements like objects or model parts. There is a difference between behavior and responsibility, where behavior is the concrete actions taken by objects where as responsibility is to fulfill requests through any number of concrete behaviors. So, responsibility is more abstract than behavior.&lt;br /&gt;
One can look at responsibility-centric perspective as an extension of the model-centric perspective with a shift of focus (from a focus on model parts to a focus on the simulation or dynamical aspects). The Backgammon example can again be&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Object Oriented Design Concepts &amp;lt;ref&amp;gt;http://books.google.com/books/about/Object_Design.html?id=vUF72vN5MY8C&amp;lt;/ref&amp;gt;==&lt;br /&gt;
[[File:AnObject.jpg|350px|right|thumb|An object encapsulates scripts and information&amp;lt;ref&amp;gt;http://books.google.com/books?id=vUF72vN5MY8C&amp;amp;pg=PA2&amp;amp;source=gbs_toc_r&amp;amp;cad=4#v=onepage&amp;amp;q&amp;amp;f=false Object Design: Roles, Responsibilities, and Collaborations by Rebecca Wirfs-Brock, Alan McKean&amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
A software application is constructed from parts. These parts -software objects- interact by sending messages to request information or action from others. Throughout its lifetime, each object remains responsible for responding to a fixed set of requests. To fulfill these requests, objects encapsulate scripted responses and the information that they base them on (see Figure 4a). If an object is designed to remember certain facts, it can use them to respond differently to future requests.&lt;br /&gt;
&lt;br /&gt;
Building an object-oriented application means inventing appropriate machinery. We represent real-world information, processes, interactions, relationships, even errors, by inventing objects that don't exist in the real world. We give life and intelligence to inanimate things. We take difficult-to-comprehend real-world objects and split them into simpler, more manageable software ones. We invent new objects. Each has a specific role to play in the application. Our measure of success lies in how clearly we invent a software reality that satisfies our application's requirements—and not in how closely it resembles the real world.&amp;lt;ref&amp;gt;http://books.google.com/books?id=vUF72vN5MY8C&amp;amp;pg=PA3&amp;amp;source=gbs_toc_r&amp;amp;cad=4#v=onepage&amp;amp;q&amp;amp;f=false Object Design: Roles, Responsibilities, and Collaborations by Rebecca Wirfs-Brock, Alan McKean&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''For example''', filling out and filing a form seems simple. But to perform that task in software, behind the simple forms, the application is validating the data against business rules, reading and refreshing the persistent data, guaranteeing the consistency of the information, and managing simultaneous access by dozens of users. Software objects display information, coordinate activities, compute, or connect to services.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Concept&lt;br /&gt;
! Short description&lt;br /&gt;
|-&lt;br /&gt;
|An object || an implementation of one or more roles.&lt;br /&gt;
|-&lt;br /&gt;
|A role || a set of related responsibilities.&lt;br /&gt;
|-&lt;br /&gt;
|A responsibility || an obligation to perform a task or know information&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Roles ''(relation with objects)'' ===&lt;br /&gt;
An object has a specific purpose - a role it plays within a given context. Objects that play the same role can be interchanged. For example, there are several providers that can deliver letters and packages: DHL, FedEx, UPS, Post, Airborne. They all have the same purpose, if not the same way of carrying out their business. We choose from among them according to the requirements that you have for delivery. We pick among the mail carriers that meet your requirements.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre-wrap; &lt;br /&gt;
white-space: -moz-pre-wrap;&lt;br /&gt;
white-space: -pre-wrap;&lt;br /&gt;
white-space: -o-pre-wrap; &lt;br /&gt;
word-wrap: break-word&amp;quot;&amp;gt;&lt;br /&gt;
A role is a set of responsibilities that can be used interchangeably.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A well-defined object supports a clearly defined role. We use purposeful oversimplifications, or role stereotypes, to help focus an object's responsibilities. Stereotypes are characterizations of the roles needed by an application. Because our goal is to build consistent and easy-to-use objects, it is advantageous to stereotype objects, ignoring specifics of their behaviors and thinking about them at a higher level. By oversimplifying and characterizing it, we can ponder the nature of an object's role more easily. We find these stereotypes to be useful:&lt;br /&gt;
*Information holder - knows and provides information&lt;br /&gt;
*Structurer - maintains relationships between objects and information about those relationships&lt;br /&gt;
*Service provider - performs work and, in general, offers computing services&lt;br /&gt;
*Coordinator - reacts to events by delegating tasks to others&lt;br /&gt;
*Controller - makes decisions and closely directs others' actions&lt;br /&gt;
*Interfacer - transforms information and requests between distinct parts of our system&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre-wrap; &lt;br /&gt;
white-space: -moz-pre-wrap;&lt;br /&gt;
white-space: -pre-wrap;&lt;br /&gt;
white-space: -o-pre-wrap; &lt;br /&gt;
word-wrap: break-word&amp;quot;&amp;gt;&lt;br /&gt;
Just as an actor tries to play a believable part in a play, an object takes on a character in an application by assuming responsibilities that define a meaningful role.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Responsibilities &amp;lt;ref&amp;gt;http://books.google.com/books?id=vUF72vN5MY8C&amp;amp;pg=PA5&amp;amp;source=gbs_toc_r&amp;amp;cad=4#v=onepage&amp;amp;q&amp;amp;f=false&amp;lt;/ref&amp;gt;===&lt;br /&gt;
An application implements a system of responsibilities. Responsibilities are assigned to roles. Roles collaborate to carry out their responsibilities. A good application is structured to effectively fulfill these responsibilities. We start design by inventing objects, assigning responsibilities to them for knowing information and doing the application's work. Collectively, these objects work together to fulfill the larger responsibilities of the application.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre-wrap; &lt;br /&gt;
white-space: -moz-pre-wrap;&lt;br /&gt;
white-space: -pre-wrap;&lt;br /&gt;
white-space: -o-pre-wrap; &lt;br /&gt;
word-wrap: break-word&amp;quot;&amp;gt;&lt;br /&gt;
An object embodies a set of roles with a designated set of responsibilities.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Responsibilities are general statements about software objects. They include three major items:&lt;br /&gt;
*The actions an object performs&lt;br /&gt;
*The knowledge an object maintains&lt;br /&gt;
*Major decisions an object makes that affect others&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre-wrap; &lt;br /&gt;
white-space: -moz-pre-wrap;&lt;br /&gt;
white-space: -pre-wrap;&lt;br /&gt;
white-space: -o-pre-wrap; &lt;br /&gt;
word-wrap: break-word&amp;quot;&amp;gt;&lt;br /&gt;
Physical objects, unlike our intelligent software objects, typically do work or hold on to things or information. A phone book is a physical object but it takes no action. A thermostat exists, and it makes decisions and sends control signals. A teakettle exists, but it does little more than act as a reservoir (and occasionally whistles to send a signal). Physical objects usually don't make informed decisions. However, a dog is man's best friend and companion and does many different things on its own behalf. Our software objects lie somewhere between these extremes: They aren't sentient beings, but they can be more or less lively, depending on what responsibilities we give them.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Responsibilities come from statements or implications of system behavior found in use cases. There is a gap between use case descriptions and object responsibilities. Responsibilities are general statements about what an object knows, does, or decides. Use case descriptions are statements about our system's behavior and how actors interact with it. Use cases describe our software from the perspective of an outside observer. They don't tell how something is accomplished. Use cases provide a rough idea of how our system will work and the tasks involved. As&lt;br /&gt;
designers we bridge this gap by transforming descriptions found in use cases into explicit statements about actions, information, or decision-making responsibilities. This is a three-step process:&lt;br /&gt;
*Identify things the system does and information it manages.&lt;br /&gt;
*Restate these as responsibilities.&lt;br /&gt;
*Break them down into smaller parts if necessary, and assign them to appropriate objects.&lt;br /&gt;
&lt;br /&gt;
=== Behavior &amp;lt;ref&amp;gt;http://csis.pace.edu/~bergin/patterns/design.html&amp;lt;/ref&amp;gt;===&lt;br /&gt;
Behavior means activity. It also means having information that other objects may need. In this case the behavior is providing that information. &lt;br /&gt;
In Mancala, the players play the game, for example. A pit might &amp;quot;know&amp;quot; how many pebbles it contains and it might be asked by another object like a player how many it holds.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;quot;Taking turn&amp;quot; is the behavior a player in 2 player games.&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Protocols &amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Protocol_(object-oriented_programming)&amp;lt;/ref&amp;gt;===&lt;br /&gt;
In [http://en.wikipedia.org/wiki/Object-oriented_programming object-oriented programming], a '''protocol''' or '''interface''' is a common means for unrelated objects to communicate with each other. When objects do collaborate, they are designed to follow certain protocols and observe specific conventions: Make requests only for advertised services. Provide appropriate information. Use services under certain conditions. Finally, accept the consequences of using them. Object contracts should describe all these terms.&lt;br /&gt;
&lt;br /&gt;
The protocol is a description of:&lt;br /&gt;
* The messages that are understood by the object.&lt;br /&gt;
* The arguments that these messages may be supplied with.&lt;br /&gt;
* The types of results that these messages return.&lt;br /&gt;
* The [http://en.wikipedia.org/wiki/Invariant_(computer_science) invariants] that are preserved despite modifications to the state of an object.&lt;br /&gt;
* The exceptional situations that will be required to be handled by clients to the object.&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Additional Reading==&lt;br /&gt;
*[http://books.google.com/books?id=VQaf_vOTDzMC&amp;amp;pg=PA244&amp;amp;lpg=PA244&amp;amp;dq=%22language+centric%22+%22model-centric%22+%22responsibility+centric%22+object+oriented+design&amp;amp;source=bl&amp;amp;ots=tY3C6nStiA&amp;amp;sig=bEO2VyjGTobxQ362Yaubi542ZTc&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ei=f3KFUJ2-D4Ho8QTC_IHQBA&amp;amp;ved=0CEMQ6AEwAg#v=onepage&amp;amp;q=%22language%20centric%22%20%22model-centric%22%20%22responsibility%20centric%22%20object%20oriented%20design&amp;amp;f=false Flexible,Reliable Software using Patterns and Agile Development]&lt;br /&gt;
*[http://books.google.com/books?id=YnGz2ghKF-gC&amp;amp;pg=PA60&amp;amp;lpg=PA60&amp;amp;dq=%22language-centric%22+object+oriented+design&amp;amp;source=bl&amp;amp;ots=ko8xV4SZJs&amp;amp;sig=yemCujDGu_BEySZ_k32Kc0KVbgM&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ei=K8WFUOykNYW89gTcx4GQAg&amp;amp;ved=0CFEQ6AEwBA#v=onepage&amp;amp;q=%22language-centric%22%20object%20oriented%20design&amp;amp;f=false Jibitesh Mishra, Ashok Mohanty, &amp;lt;i&amp;gt;&amp;quot;Software Engineering&amp;quot;&amp;lt;/i&amp;gt;]&lt;br /&gt;
*[http://web.engr.oregonstate.edu/~budd/Books/oopintro3e/info/ReadMe.html An Introduction to Object Oriented Programming]&lt;/div&gt;</summary>
		<author><name>Rchakar</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w15_rr&amp;diff=68011</id>
		<title>CSC/ECE 517 Fall 2012/ch2a 2w15 rr</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w15_rr&amp;diff=68011"/>
		<updated>2012-10-23T08:15:35Z</updated>

		<summary type="html">&lt;p&gt;Rchakar: /* Behavior */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
Object-oriented design is a programming model that began in the late 60's as software programs became more complex. The idea behind the approach was to build software systems by modeling them based on the real-world objects that they were trying to represent. For example, banking systems would contain customer objects, account objects and so on. Today, object-oriented design has been widely adopted &amp;lt;ref&amp;gt; [http://www.objectmentor.com/omSolutions/oops_what.html Introduction to Object Oriented Design]&amp;lt;/ref&amp;gt;. When done properly, this approach leads to simple, robust, flexible and modular software. When something goes wrong, the results could be bad. Object oriented design can be seen from different perspectives. In the language-centric perspective, objects are containers of data and methods. The model-centric perspective views the objects as model elements reflecting the real world objects and Responsibility-centric perspective views objects as interacting elements each playing a role in object community. Each of these perspectives are outlined in the following sections.&lt;br /&gt;
&lt;br /&gt;
==Background==&lt;br /&gt;
The history of object oriented design has many branches, and many people have contributed to this domain. The 1960s and 1970s saw the emergence of object oriented programming languages, such as Simula and Smalltalk, with key contributors such as Kristen Nygaard and Alan Kay, the visionary computer scientist who founded Smalltalk.&amp;lt;ref&amp;gt;[http://www.informit.com/articles/article.aspx?p=360440&amp;amp;seqNum=8 History of Object Oriented Design]&amp;lt;/ref&amp;gt;&lt;br /&gt;
But object oriented design was informal through that period, and it was only form 1982 that it became popular.  Contributors in this domain include Grady Booch, Kent Beck, Peter Coad, Don Firesmith, Ivar Jacobson (a UML founder), Steve Mellor, Bertrand Meyer, Jim Rumbaugh (a UML founder) and Rebecca Wirfs-Brock among others. Each of these perspectives are outlined in the following sections.&lt;br /&gt;
&lt;br /&gt;
==Object Oriented Design Perspectives==&lt;br /&gt;
===Language-centric perspective===&lt;br /&gt;
The focus of the language-centric perspective is classes and objects as building blocks for developing software. The emphasis is on the internal structure which are the fields and methods. Thus it is inherently a compile-time or static view which means that the definition speaks in terms of what it looks like in the following code:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
public class foo&lt;br /&gt;
{&lt;br /&gt;
 private int x;&lt;br /&gt;
 public static double y;&lt;br /&gt;
&lt;br /&gt;
 public int double (int x)&lt;br /&gt;
 {&lt;br /&gt;
   return (3*x);&lt;br /&gt;
 }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The implicit aspect of this view is that, an object is an entity in its own right and the definition is closed. Any object can be understood in isolation where the fields and methods are just enumerated. The advantage of this perspective is of that it is very concrete, closely related to the programming language level and therefore it is easy to understand. The disadvantage is that it does not help to structure the collaboration between objects, the dynamics, and this is typically where the hard challenges of design lie. Thus the perspective offers little guidance in the process of designing any realistic system.&amp;lt;ref&amp;gt;[https://docs.google.com/viewer?a=v&amp;amp;q=cache:Kl7VOfRFnNEJ:citeseerx.ist.psu.edu/viewdoc/download%3Fdoi%3D10.1.1.86.7500%26rep%3Drep1%26type%3Dpdf+%22language+centric%22+object+oriented+design&amp;amp;hl=en&amp;amp;gl=us&amp;amp;pid=bl&amp;amp;srcid=ADGEESj-HffIDcwsyYlGssvRYS3OAEloLCID6dCIHQeZ_WQ5W-fy9B3rC4uxbUKVBGzyPVn4uBra4ot0hCS71JC3NNy7nBVXRxzR4z06p3fVQKSIjn5t_fFr3dzrMICa5qNUVRnYHEAv&amp;amp;sig=AHIEtbRX7G0XgBl1mKxnPINiorZvNhW32Q Henrik Baerbak Christensen, &amp;lt;i&amp;gt;&amp;quot;Implications of Perspective in Teaching Objects First and Object Design&amp;quot;&amp;lt;/i&amp;gt;, Proceedings of the 10th annual &amp;lt;i&amp;gt;SIGCSE&amp;lt;/i&amp;gt; conference on Innovation and technology in computer science education, Department of Computer Science, University of Aarhus, 2005.]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Model-centric perspective===&lt;br /&gt;
In this perspective, the objects(classes, fields) and their relationships like inheritance, association, aggregation are designed by using some model. Here the program execution is a simulation of some part of the&lt;br /&gt;
world, and objects are perceived as the parts of the model. The perspective is often explained through analogies to other models like toy railways, traffic simulations, computer games, etc. This perspective stresses objects as entities in a larger context (they are parts of a model) as opposed to the self-contained language-centric definition. This approach works fine for real life systems such as an order-entry system, a library system, boat-rental and various other real world entity oriented systems. This naturally leads to a strong focus on what the relations are between the parts: association, generalization, composition. Dynamics is an inherent part of the concept simulation and the explicit guideline for designing object interaction is to imitate real world or model interactions.&lt;br /&gt;
Let us consider a real world example of designing a partial implementation of the board game-Backgammon to understand the objected oriented using a model-centric perspective. The physical parts of Backgammon identifiable are the checkers, points, board, dice, player, etc. The diagram below is a design of model parts (classes) and their relationships (relations).&lt;br /&gt;
&lt;br /&gt;
===Responsibility-centric perspective===&lt;br /&gt;
This perspective stresses on the behavior of software systems and the concepts used to do design include behavior, roles, responsibilities and protocol. Here, the primary focus is the dynamics of the program. Roles and responsibilities are the core concepts in this perspective and hence it has more coupling to behavior when compared to static elements like objects or model parts. There is a difference between behavior and responsibility, where behavior is the concrete actions taken by objects where as responsibility is to fulfill requests through any number of concrete behaviors. So, responsibility is more abstract than behavior.&lt;br /&gt;
One can look at responsibility-centric perspective as an extension of the model-centric perspective with a shift of focus (from a focus on model parts to a focus on the simulation or dynamical aspects). The Backgammon example can again be&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Object Oriented Design Concepts &amp;lt;ref&amp;gt;http://books.google.com/books/about/Object_Design.html?id=vUF72vN5MY8C&amp;lt;/ref&amp;gt;==&lt;br /&gt;
[[File:AnObject.jpg|350px|right|thumb|An object encapsulates scripts and information&amp;lt;ref&amp;gt;http://books.google.com/books?id=vUF72vN5MY8C&amp;amp;pg=PA2&amp;amp;source=gbs_toc_r&amp;amp;cad=4#v=onepage&amp;amp;q&amp;amp;f=false Object Design: Roles, Responsibilities, and Collaborations by Rebecca Wirfs-Brock, Alan McKean&amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
A software application is constructed from parts. These parts -software objects- interact by sending messages to request information or action from others. Throughout its lifetime, each object remains responsible for responding to a fixed set of requests. To fulfill these requests, objects encapsulate scripted responses and the information that they base them on (see Figure 4a). If an object is designed to remember certain facts, it can use them to respond differently to future requests.&lt;br /&gt;
&lt;br /&gt;
Building an object-oriented application means inventing appropriate machinery. We represent real-world information, processes, interactions, relationships, even errors, by inventing objects that don't exist in the real world. We give life and intelligence to inanimate things. We take difficult-to-comprehend real-world objects and split them into simpler, more manageable software ones. We invent new objects. Each has a specific role to play in the application. Our measure of success lies in how clearly we invent a software reality that satisfies our application's requirements—and not in how closely it resembles the real world.&amp;lt;ref&amp;gt;http://books.google.com/books?id=vUF72vN5MY8C&amp;amp;pg=PA3&amp;amp;source=gbs_toc_r&amp;amp;cad=4#v=onepage&amp;amp;q&amp;amp;f=false Object Design: Roles, Responsibilities, and Collaborations by Rebecca Wirfs-Brock, Alan McKean&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''For example''', filling out and filing a form seems simple. But to perform that task in software, behind the simple forms, the application is validating the data against business rules, reading and refreshing the persistent data, guaranteeing the consistency of the information, and managing simultaneous access by dozens of users. Software objects display information, coordinate activities, compute, or connect to services.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Concept&lt;br /&gt;
! Short description&lt;br /&gt;
|-&lt;br /&gt;
|An object || an implementation of one or more roles.&lt;br /&gt;
|-&lt;br /&gt;
|A role || a set of related responsibilities.&lt;br /&gt;
|-&lt;br /&gt;
|A responsibility || an obligation to perform a task or know information&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Roles ''(relation with objects)'' ===&lt;br /&gt;
An object has a specific purpose - a role it plays within a given context. Objects that play the same role can be interchanged. For example, there are several providers that can deliver letters and packages: DHL, FedEx, UPS, Post, Airborne. They all have the same purpose, if not the same way of carrying out their business. We choose from among them according to the requirements that you have for delivery. We pick among the mail carriers that meet your requirements.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre-wrap; &lt;br /&gt;
white-space: -moz-pre-wrap;&lt;br /&gt;
white-space: -pre-wrap;&lt;br /&gt;
white-space: -o-pre-wrap; &lt;br /&gt;
word-wrap: break-word&amp;quot;&amp;gt;&lt;br /&gt;
A role is a set of responsibilities that can be used interchangeably.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A well-defined object supports a clearly defined role. We use purposeful oversimplifications, or role stereotypes, to help focus an object's responsibilities. Stereotypes are characterizations of the roles needed by an application. Because our goal is to build consistent and easy-to-use objects, it is advantageous to stereotype objects, ignoring specifics of their behaviors and thinking about them at a higher level. By oversimplifying and characterizing it, we can ponder the nature of an object's role more easily. We find these stereotypes to be useful:&lt;br /&gt;
*Information holder - knows and provides information&lt;br /&gt;
*Structurer - maintains relationships between objects and information about those relationships&lt;br /&gt;
*Service provider - performs work and, in general, offers computing services&lt;br /&gt;
*Coordinator - reacts to events by delegating tasks to others&lt;br /&gt;
*Controller - makes decisions and closely directs others' actions&lt;br /&gt;
*Interfacer - transforms information and requests between distinct parts of our system&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre-wrap; &lt;br /&gt;
white-space: -moz-pre-wrap;&lt;br /&gt;
white-space: -pre-wrap;&lt;br /&gt;
white-space: -o-pre-wrap; &lt;br /&gt;
word-wrap: break-word&amp;quot;&amp;gt;&lt;br /&gt;
Just as an actor tries to play a believable part in a play, an object takes on a character in an application by assuming responsibilities that define a meaningful role.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Responsibilities &amp;lt;ref&amp;gt;http://books.google.com/books?id=vUF72vN5MY8C&amp;amp;pg=PA5&amp;amp;source=gbs_toc_r&amp;amp;cad=4#v=onepage&amp;amp;q&amp;amp;f=false&amp;lt;/ref&amp;gt;===&lt;br /&gt;
An application implements a system of responsibilities. Responsibilities are assigned to roles. Roles collaborate to carry out their responsibilities. A good application is structured to effectively fulfill these responsibilities. We start design by inventing objects, assigning responsibilities to them for knowing information and doing the application's work. Collectively, these objects work together to fulfill the larger responsibilities of the application.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre-wrap; &lt;br /&gt;
white-space: -moz-pre-wrap;&lt;br /&gt;
white-space: -pre-wrap;&lt;br /&gt;
white-space: -o-pre-wrap; &lt;br /&gt;
word-wrap: break-word&amp;quot;&amp;gt;&lt;br /&gt;
An object embodies a set of roles with a designated set of responsibilities.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Responsibilities are general statements about software objects. They include three major items:&lt;br /&gt;
*The actions an object performs&lt;br /&gt;
*The knowledge an object maintains&lt;br /&gt;
*Major decisions an object makes that affect others&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre-wrap; &lt;br /&gt;
white-space: -moz-pre-wrap;&lt;br /&gt;
white-space: -pre-wrap;&lt;br /&gt;
white-space: -o-pre-wrap; &lt;br /&gt;
word-wrap: break-word&amp;quot;&amp;gt;&lt;br /&gt;
Physical objects, unlike our intelligent software objects, typically do work or hold on to things or information. A phone book is a physical object but it takes no action. A thermostat exists, and it makes decisions and sends control signals. A teakettle exists, but it does little more than act as a reservoir (and occasionally whistles to send a signal). Physical objects usually don't make informed decisions. However, a dog is man's best friend and companion and does many different things on its own behalf. Our software objects lie somewhere between these extremes: They aren't sentient beings, but they can be more or less lively, depending on what responsibilities we give them.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Responsibilities come from statements or implications of system behavior found in use cases. There is a gap between use case descriptions and object responsibilities. Responsibilities are general statements about what an object knows, does, or decides. Use case descriptions are statements about our system's behavior and how actors interact with it. Use cases describe our software from the perspective of an outside observer. They don't tell how something is accomplished. Use cases provide a rough idea of how our system will work and the tasks involved. As&lt;br /&gt;
designers we bridge this gap by transforming descriptions found in use cases into explicit statements about actions, information, or decision-making responsibilities. This is a three-step process:&lt;br /&gt;
*Identify things the system does and information it manages.&lt;br /&gt;
*Restate these as responsibilities.&lt;br /&gt;
*Break them down into smaller parts if necessary, and assign them to appropriate objects.&lt;br /&gt;
&lt;br /&gt;
=== Behavior &amp;lt;ref&amp;gt;http://csis.pace.edu/~bergin/patterns/design.html&amp;lt;/ref&amp;gt;===&lt;br /&gt;
Behavior means activity. It also means having information that other objects may need. In this case the behavior is providing that information. &lt;br /&gt;
In Mancala, the players play the game, for example. A pit might &amp;quot;know&amp;quot; how many pebbles it contains and it might be asked by another object like a player how many it holds.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;For example, in Mancala the player has behavior &amp;quot;take turn.&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Protocols &amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Protocol_(object-oriented_programming)&amp;lt;/ref&amp;gt;===&lt;br /&gt;
In [http://en.wikipedia.org/wiki/Object-oriented_programming object-oriented programming], a '''protocol''' or '''interface''' is a common means for unrelated objects to communicate with each other. When objects do collaborate, they are designed to follow certain protocols and observe specific conventions: Make requests only for advertised services. Provide appropriate information. Use services under certain conditions. Finally, accept the consequences of using them. Object contracts should describe all these terms.&lt;br /&gt;
&lt;br /&gt;
The protocol is a description of:&lt;br /&gt;
* The messages that are understood by the object.&lt;br /&gt;
* The arguments that these messages may be supplied with.&lt;br /&gt;
* The types of results that these messages return.&lt;br /&gt;
* The [http://en.wikipedia.org/wiki/Invariant_(computer_science) invariants] that are preserved despite modifications to the state of an object.&lt;br /&gt;
* The exceptional situations that will be required to be handled by clients to the object.&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Additional Reading==&lt;br /&gt;
*[http://books.google.com/books?id=VQaf_vOTDzMC&amp;amp;pg=PA244&amp;amp;lpg=PA244&amp;amp;dq=%22language+centric%22+%22model-centric%22+%22responsibility+centric%22+object+oriented+design&amp;amp;source=bl&amp;amp;ots=tY3C6nStiA&amp;amp;sig=bEO2VyjGTobxQ362Yaubi542ZTc&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ei=f3KFUJ2-D4Ho8QTC_IHQBA&amp;amp;ved=0CEMQ6AEwAg#v=onepage&amp;amp;q=%22language%20centric%22%20%22model-centric%22%20%22responsibility%20centric%22%20object%20oriented%20design&amp;amp;f=false Flexible,Reliable Software using Patterns and Agile Development]&lt;br /&gt;
*[http://books.google.com/books?id=YnGz2ghKF-gC&amp;amp;pg=PA60&amp;amp;lpg=PA60&amp;amp;dq=%22language-centric%22+object+oriented+design&amp;amp;source=bl&amp;amp;ots=ko8xV4SZJs&amp;amp;sig=yemCujDGu_BEySZ_k32Kc0KVbgM&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ei=K8WFUOykNYW89gTcx4GQAg&amp;amp;ved=0CFEQ6AEwBA#v=onepage&amp;amp;q=%22language-centric%22%20object%20oriented%20design&amp;amp;f=false Jibitesh Mishra, Ashok Mohanty, &amp;lt;i&amp;gt;&amp;quot;Software Engineering&amp;quot;&amp;lt;/i&amp;gt;]&lt;br /&gt;
*[http://web.engr.oregonstate.edu/~budd/Books/oopintro3e/info/ReadMe.html An Introduction to Object Oriented Programming]&lt;/div&gt;</summary>
		<author><name>Rchakar</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w15_rr&amp;diff=68010</id>
		<title>CSC/ECE 517 Fall 2012/ch2a 2w15 rr</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w15_rr&amp;diff=68010"/>
		<updated>2012-10-23T08:06:51Z</updated>

		<summary type="html">&lt;p&gt;Rchakar: /* Object Oriented Design Concepts http://books.google.com/books/about/Object_Design.html?id=vUF72vN5MY8C */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
Object-oriented design is a programming model that began in the late 60's as software programs became more complex. The idea behind the approach was to build software systems by modeling them based on the real-world objects that they were trying to represent. For example, banking systems would contain customer objects, account objects and so on. Today, object-oriented design has been widely adopted &amp;lt;ref&amp;gt; [http://www.objectmentor.com/omSolutions/oops_what.html Introduction to Object Oriented Design]&amp;lt;/ref&amp;gt;. When done properly, this approach leads to simple, robust, flexible and modular software. When something goes wrong, the results could be bad. Object oriented design can be seen from different perspectives. In the language-centric perspective, objects are containers of data and methods. The model-centric perspective views the objects as model elements reflecting the real world objects and Responsibility-centric perspective views objects as interacting elements each playing a role in object community. Each of these perspectives are outlined in the following sections.&lt;br /&gt;
&lt;br /&gt;
==Background==&lt;br /&gt;
The history of object oriented design has many branches, and many people have contributed to this domain. The 1960s and 1970s saw the emergence of object oriented programming languages, such as Simula and Smalltalk, with key contributors such as Kristen Nygaard and Alan Kay, the visionary computer scientist who founded Smalltalk.&amp;lt;ref&amp;gt;[http://www.informit.com/articles/article.aspx?p=360440&amp;amp;seqNum=8 History of Object Oriented Design]&amp;lt;/ref&amp;gt;&lt;br /&gt;
But object oriented design was informal through that period, and it was only form 1982 that it became popular.  Contributors in this domain include Grady Booch, Kent Beck, Peter Coad, Don Firesmith, Ivar Jacobson (a UML founder), Steve Mellor, Bertrand Meyer, Jim Rumbaugh (a UML founder) and Rebecca Wirfs-Brock among others. Each of these perspectives are outlined in the following sections.&lt;br /&gt;
&lt;br /&gt;
==Object Oriented Design Perspectives==&lt;br /&gt;
===Language-centric perspective===&lt;br /&gt;
The focus of the language-centric perspective is classes and objects as building blocks for developing software. The emphasis is on the internal structure which are the fields and methods. Thus it is inherently a compile-time or static view which means that the definition speaks in terms of what it looks like in the following code:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
public class foo&lt;br /&gt;
{&lt;br /&gt;
 private int x;&lt;br /&gt;
 public static double y;&lt;br /&gt;
&lt;br /&gt;
 public int double (int x)&lt;br /&gt;
 {&lt;br /&gt;
   return (3*x);&lt;br /&gt;
 }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The implicit aspect of this view is that, an object is an entity in its own right and the definition is closed. Any object can be understood in isolation where the fields and methods are just enumerated. The advantage of this perspective is of that it is very concrete, closely related to the programming language level and therefore it is easy to understand. The disadvantage is that it does not help to structure the collaboration between objects, the dynamics, and this is typically where the hard challenges of design lie. Thus the perspective offers little guidance in the process of designing any realistic system.&amp;lt;ref&amp;gt;[https://docs.google.com/viewer?a=v&amp;amp;q=cache:Kl7VOfRFnNEJ:citeseerx.ist.psu.edu/viewdoc/download%3Fdoi%3D10.1.1.86.7500%26rep%3Drep1%26type%3Dpdf+%22language+centric%22+object+oriented+design&amp;amp;hl=en&amp;amp;gl=us&amp;amp;pid=bl&amp;amp;srcid=ADGEESj-HffIDcwsyYlGssvRYS3OAEloLCID6dCIHQeZ_WQ5W-fy9B3rC4uxbUKVBGzyPVn4uBra4ot0hCS71JC3NNy7nBVXRxzR4z06p3fVQKSIjn5t_fFr3dzrMICa5qNUVRnYHEAv&amp;amp;sig=AHIEtbRX7G0XgBl1mKxnPINiorZvNhW32Q Henrik Baerbak Christensen, &amp;lt;i&amp;gt;&amp;quot;Implications of Perspective in Teaching Objects First and Object Design&amp;quot;&amp;lt;/i&amp;gt;, Proceedings of the 10th annual &amp;lt;i&amp;gt;SIGCSE&amp;lt;/i&amp;gt; conference on Innovation and technology in computer science education, Department of Computer Science, University of Aarhus, 2005.]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Model-centric perspective===&lt;br /&gt;
In this perspective, the objects(classes, fields) and their relationships like inheritance, association, aggregation are designed by using some model. Here the program execution is a simulation of some part of the&lt;br /&gt;
world, and objects are perceived as the parts of the model. The perspective is often explained through analogies to other models like toy railways, traffic simulations, computer games, etc. This perspective stresses objects as entities in a larger context (they are parts of a model) as opposed to the self-contained language-centric definition. This approach works fine for real life systems such as an order-entry system, a library system, boat-rental and various other real world entity oriented systems. This naturally leads to a strong focus on what the relations are between the parts: association, generalization, composition. Dynamics is an inherent part of the concept simulation and the explicit guideline for designing object interaction is to imitate real world or model interactions.&lt;br /&gt;
Let us consider a real world example of designing a partial implementation of the board game-Backgammon to understand the objected oriented using a model-centric perspective. The physical parts of Backgammon identifiable are the checkers, points, board, dice, player, etc. The diagram below is a design of model parts (classes) and their relationships (relations).&lt;br /&gt;
&lt;br /&gt;
===Responsibility-centric perspective===&lt;br /&gt;
This perspective stresses on the behavior of software systems and the concepts used to do design include behavior, roles, responsibilities and protocol. Here, the primary focus is the dynamics of the program. Roles and responsibilities are the core concepts in this perspective and hence it has more coupling to behavior when compared to static elements like objects or model parts. There is a difference between behavior and responsibility, where behavior is the concrete actions taken by objects where as responsibility is to fulfill requests through any number of concrete behaviors. So, responsibility is more abstract than behavior.&lt;br /&gt;
One can look at responsibility-centric perspective as an extension of the model-centric perspective with a shift of focus (from a focus on model parts to a focus on the simulation or dynamical aspects). The Backgammon example can again be&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Object Oriented Design Concepts &amp;lt;ref&amp;gt;http://books.google.com/books/about/Object_Design.html?id=vUF72vN5MY8C&amp;lt;/ref&amp;gt;==&lt;br /&gt;
[[File:AnObject.jpg|350px|right|thumb|An object encapsulates scripts and information&amp;lt;ref&amp;gt;http://books.google.com/books?id=vUF72vN5MY8C&amp;amp;pg=PA2&amp;amp;source=gbs_toc_r&amp;amp;cad=4#v=onepage&amp;amp;q&amp;amp;f=false Object Design: Roles, Responsibilities, and Collaborations by Rebecca Wirfs-Brock, Alan McKean&amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
A software application is constructed from parts. These parts -software objects- interact by sending messages to request information or action from others. Throughout its lifetime, each object remains responsible for responding to a fixed set of requests. To fulfill these requests, objects encapsulate scripted responses and the information that they base them on (see Figure 4a). If an object is designed to remember certain facts, it can use them to respond differently to future requests.&lt;br /&gt;
&lt;br /&gt;
Building an object-oriented application means inventing appropriate machinery. We represent real-world information, processes, interactions, relationships, even errors, by inventing objects that don't exist in the real world. We give life and intelligence to inanimate things. We take difficult-to-comprehend real-world objects and split them into simpler, more manageable software ones. We invent new objects. Each has a specific role to play in the application. Our measure of success lies in how clearly we invent a software reality that satisfies our application's requirements—and not in how closely it resembles the real world.&amp;lt;ref&amp;gt;http://books.google.com/books?id=vUF72vN5MY8C&amp;amp;pg=PA3&amp;amp;source=gbs_toc_r&amp;amp;cad=4#v=onepage&amp;amp;q&amp;amp;f=false Object Design: Roles, Responsibilities, and Collaborations by Rebecca Wirfs-Brock, Alan McKean&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''For example''', filling out and filing a form seems simple. But to perform that task in software, behind the simple forms, the application is validating the data against business rules, reading and refreshing the persistent data, guaranteeing the consistency of the information, and managing simultaneous access by dozens of users. Software objects display information, coordinate activities, compute, or connect to services.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Concept&lt;br /&gt;
! Short description&lt;br /&gt;
|-&lt;br /&gt;
|An object || an implementation of one or more roles.&lt;br /&gt;
|-&lt;br /&gt;
|A role || a set of related responsibilities.&lt;br /&gt;
|-&lt;br /&gt;
|A responsibility || an obligation to perform a task or know information&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Roles ''(relation with objects)'' ===&lt;br /&gt;
An object has a specific purpose - a role it plays within a given context. Objects that play the same role can be interchanged. For example, there are several providers that can deliver letters and packages: DHL, FedEx, UPS, Post, Airborne. They all have the same purpose, if not the same way of carrying out their business. We choose from among them according to the requirements that you have for delivery. We pick among the mail carriers that meet your requirements.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre-wrap; &lt;br /&gt;
white-space: -moz-pre-wrap;&lt;br /&gt;
white-space: -pre-wrap;&lt;br /&gt;
white-space: -o-pre-wrap; &lt;br /&gt;
word-wrap: break-word&amp;quot;&amp;gt;&lt;br /&gt;
A role is a set of responsibilities that can be used interchangeably.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A well-defined object supports a clearly defined role. We use purposeful oversimplifications, or role stereotypes, to help focus an object's responsibilities. Stereotypes are characterizations of the roles needed by an application. Because our goal is to build consistent and easy-to-use objects, it is advantageous to stereotype objects, ignoring specifics of their behaviors and thinking about them at a higher level. By oversimplifying and characterizing it, we can ponder the nature of an object's role more easily. We find these stereotypes to be useful:&lt;br /&gt;
*Information holder - knows and provides information&lt;br /&gt;
*Structurer - maintains relationships between objects and information about those relationships&lt;br /&gt;
*Service provider - performs work and, in general, offers computing services&lt;br /&gt;
*Coordinator - reacts to events by delegating tasks to others&lt;br /&gt;
*Controller - makes decisions and closely directs others' actions&lt;br /&gt;
*Interfacer - transforms information and requests between distinct parts of our system&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre-wrap; &lt;br /&gt;
white-space: -moz-pre-wrap;&lt;br /&gt;
white-space: -pre-wrap;&lt;br /&gt;
white-space: -o-pre-wrap; &lt;br /&gt;
word-wrap: break-word&amp;quot;&amp;gt;&lt;br /&gt;
Just as an actor tries to play a believable part in a play, an object takes on a character in an application by assuming responsibilities that define a meaningful role.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Responsibilities &amp;lt;ref&amp;gt;http://books.google.com/books?id=vUF72vN5MY8C&amp;amp;pg=PA5&amp;amp;source=gbs_toc_r&amp;amp;cad=4#v=onepage&amp;amp;q&amp;amp;f=false&amp;lt;/ref&amp;gt;===&lt;br /&gt;
An application implements a system of responsibilities. Responsibilities are assigned to roles. Roles collaborate to carry out their responsibilities. A good application is structured to effectively fulfill these responsibilities. We start design by inventing objects, assigning responsibilities to them for knowing information and doing the application's work. Collectively, these objects work together to fulfill the larger responsibilities of the application.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre-wrap; &lt;br /&gt;
white-space: -moz-pre-wrap;&lt;br /&gt;
white-space: -pre-wrap;&lt;br /&gt;
white-space: -o-pre-wrap; &lt;br /&gt;
word-wrap: break-word&amp;quot;&amp;gt;&lt;br /&gt;
An object embodies a set of roles with a designated set of responsibilities.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Responsibilities are general statements about software objects. They include three major items:&lt;br /&gt;
*The actions an object performs&lt;br /&gt;
*The knowledge an object maintains&lt;br /&gt;
*Major decisions an object makes that affect others&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre-wrap; &lt;br /&gt;
white-space: -moz-pre-wrap;&lt;br /&gt;
white-space: -pre-wrap;&lt;br /&gt;
white-space: -o-pre-wrap; &lt;br /&gt;
word-wrap: break-word&amp;quot;&amp;gt;&lt;br /&gt;
Physical objects, unlike our intelligent software objects, typically do work or hold on to things or information. A phone book is a physical object but it takes no action. A thermostat exists, and it makes decisions and sends control signals. A teakettle exists, but it does little more than act as a reservoir (and occasionally whistles to send a signal). Physical objects usually don't make informed decisions. However, a dog is man's best friend and companion and does many different things on its own behalf. Our software objects lie somewhere between these extremes: They aren't sentient beings, but they can be more or less lively, depending on what responsibilities we give them.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Responsibilities come from statements or implications of system behavior found in use cases. There is a gap between use case descriptions and object responsibilities. Responsibilities are general statements about what an object knows, does, or decides. Use case descriptions are statements about our system's behavior and how actors interact with it. Use cases describe our software from the perspective of an outside observer. They don't tell how something is accomplished. Use cases provide a rough idea of how our system will work and the tasks involved. As&lt;br /&gt;
designers we bridge this gap by transforming descriptions found in use cases into explicit statements about actions, information, or decision-making responsibilities. This is a three-step process:&lt;br /&gt;
*Identify things the system does and information it manages.&lt;br /&gt;
*Restate these as responsibilities.&lt;br /&gt;
*Break them down into smaller parts if necessary, and assign them to appropriate objects.&lt;br /&gt;
&lt;br /&gt;
=== Behavior ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Protocols &amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Protocol_(object-oriented_programming)&amp;lt;/ref&amp;gt;===&lt;br /&gt;
In [http://en.wikipedia.org/wiki/Object-oriented_programming object-oriented programming], a '''protocol''' or '''interface''' is a common means for unrelated objects to communicate with each other. When objects do collaborate, they are designed to follow certain protocols and observe specific conventions: Make requests only for advertised services. Provide appropriate information. Use services under certain conditions. Finally, accept the consequences of using them. Object contracts should describe all these terms.&lt;br /&gt;
&lt;br /&gt;
The protocol is a description of:&lt;br /&gt;
* The messages that are understood by the object.&lt;br /&gt;
* The arguments that these messages may be supplied with.&lt;br /&gt;
* The types of results that these messages return.&lt;br /&gt;
* The [http://en.wikipedia.org/wiki/Invariant_(computer_science) invariants] that are preserved despite modifications to the state of an object.&lt;br /&gt;
* The exceptional situations that will be required to be handled by clients to the object.&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Additional Reading==&lt;br /&gt;
*[http://books.google.com/books?id=VQaf_vOTDzMC&amp;amp;pg=PA244&amp;amp;lpg=PA244&amp;amp;dq=%22language+centric%22+%22model-centric%22+%22responsibility+centric%22+object+oriented+design&amp;amp;source=bl&amp;amp;ots=tY3C6nStiA&amp;amp;sig=bEO2VyjGTobxQ362Yaubi542ZTc&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ei=f3KFUJ2-D4Ho8QTC_IHQBA&amp;amp;ved=0CEMQ6AEwAg#v=onepage&amp;amp;q=%22language%20centric%22%20%22model-centric%22%20%22responsibility%20centric%22%20object%20oriented%20design&amp;amp;f=false Flexible,Reliable Software using Patterns and Agile Development]&lt;br /&gt;
*[http://books.google.com/books?id=YnGz2ghKF-gC&amp;amp;pg=PA60&amp;amp;lpg=PA60&amp;amp;dq=%22language-centric%22+object+oriented+design&amp;amp;source=bl&amp;amp;ots=ko8xV4SZJs&amp;amp;sig=yemCujDGu_BEySZ_k32Kc0KVbgM&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ei=K8WFUOykNYW89gTcx4GQAg&amp;amp;ved=0CFEQ6AEwBA#v=onepage&amp;amp;q=%22language-centric%22%20object%20oriented%20design&amp;amp;f=false Jibitesh Mishra, Ashok Mohanty, &amp;lt;i&amp;gt;&amp;quot;Software Engineering&amp;quot;&amp;lt;/i&amp;gt;]&lt;br /&gt;
*[http://web.engr.oregonstate.edu/~budd/Books/oopintro3e/info/ReadMe.html An Introduction to Object Oriented Programming]&lt;/div&gt;</summary>
		<author><name>Rchakar</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w15_rr&amp;diff=68009</id>
		<title>CSC/ECE 517 Fall 2012/ch2a 2w15 rr</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w15_rr&amp;diff=68009"/>
		<updated>2012-10-23T08:06:05Z</updated>

		<summary type="html">&lt;p&gt;Rchakar: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
Object-oriented design is a programming model that began in the late 60's as software programs became more complex. The idea behind the approach was to build software systems by modeling them based on the real-world objects that they were trying to represent. For example, banking systems would contain customer objects, account objects and so on. Today, object-oriented design has been widely adopted &amp;lt;ref&amp;gt; [http://www.objectmentor.com/omSolutions/oops_what.html Introduction to Object Oriented Design]&amp;lt;/ref&amp;gt;. When done properly, this approach leads to simple, robust, flexible and modular software. When something goes wrong, the results could be bad. Object oriented design can be seen from different perspectives. In the language-centric perspective, objects are containers of data and methods. The model-centric perspective views the objects as model elements reflecting the real world objects and Responsibility-centric perspective views objects as interacting elements each playing a role in object community. Each of these perspectives are outlined in the following sections.&lt;br /&gt;
&lt;br /&gt;
==Background==&lt;br /&gt;
The history of object oriented design has many branches, and many people have contributed to this domain. The 1960s and 1970s saw the emergence of object oriented programming languages, such as Simula and Smalltalk, with key contributors such as Kristen Nygaard and Alan Kay, the visionary computer scientist who founded Smalltalk.&amp;lt;ref&amp;gt;[http://www.informit.com/articles/article.aspx?p=360440&amp;amp;seqNum=8 History of Object Oriented Design]&amp;lt;/ref&amp;gt;&lt;br /&gt;
But object oriented design was informal through that period, and it was only form 1982 that it became popular.  Contributors in this domain include Grady Booch, Kent Beck, Peter Coad, Don Firesmith, Ivar Jacobson (a UML founder), Steve Mellor, Bertrand Meyer, Jim Rumbaugh (a UML founder) and Rebecca Wirfs-Brock among others. Each of these perspectives are outlined in the following sections.&lt;br /&gt;
&lt;br /&gt;
==Object Oriented Design Perspectives==&lt;br /&gt;
===Language-centric perspective===&lt;br /&gt;
The focus of the language-centric perspective is classes and objects as building blocks for developing software. The emphasis is on the internal structure which are the fields and methods. Thus it is inherently a compile-time or static view which means that the definition speaks in terms of what it looks like in the following code:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
public class foo&lt;br /&gt;
{&lt;br /&gt;
 private int x;&lt;br /&gt;
 public static double y;&lt;br /&gt;
&lt;br /&gt;
 public int double (int x)&lt;br /&gt;
 {&lt;br /&gt;
   return (3*x);&lt;br /&gt;
 }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The implicit aspect of this view is that, an object is an entity in its own right and the definition is closed. Any object can be understood in isolation where the fields and methods are just enumerated. The advantage of this perspective is of that it is very concrete, closely related to the programming language level and therefore it is easy to understand. The disadvantage is that it does not help to structure the collaboration between objects, the dynamics, and this is typically where the hard challenges of design lie. Thus the perspective offers little guidance in the process of designing any realistic system.&amp;lt;ref&amp;gt;[https://docs.google.com/viewer?a=v&amp;amp;q=cache:Kl7VOfRFnNEJ:citeseerx.ist.psu.edu/viewdoc/download%3Fdoi%3D10.1.1.86.7500%26rep%3Drep1%26type%3Dpdf+%22language+centric%22+object+oriented+design&amp;amp;hl=en&amp;amp;gl=us&amp;amp;pid=bl&amp;amp;srcid=ADGEESj-HffIDcwsyYlGssvRYS3OAEloLCID6dCIHQeZ_WQ5W-fy9B3rC4uxbUKVBGzyPVn4uBra4ot0hCS71JC3NNy7nBVXRxzR4z06p3fVQKSIjn5t_fFr3dzrMICa5qNUVRnYHEAv&amp;amp;sig=AHIEtbRX7G0XgBl1mKxnPINiorZvNhW32Q Henrik Baerbak Christensen, &amp;lt;i&amp;gt;&amp;quot;Implications of Perspective in Teaching Objects First and Object Design&amp;quot;&amp;lt;/i&amp;gt;, Proceedings of the 10th annual &amp;lt;i&amp;gt;SIGCSE&amp;lt;/i&amp;gt; conference on Innovation and technology in computer science education, Department of Computer Science, University of Aarhus, 2005.]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Model-centric perspective===&lt;br /&gt;
In this perspective, the objects(classes, fields) and their relationships like inheritance, association, aggregation are designed by using some model. Here the program execution is a simulation of some part of the&lt;br /&gt;
world, and objects are perceived as the parts of the model. The perspective is often explained through analogies to other models like toy railways, traffic simulations, computer games, etc. This perspective stresses objects as entities in a larger context (they are parts of a model) as opposed to the self-contained language-centric definition. This approach works fine for real life systems such as an order-entry system, a library system, boat-rental and various other real world entity oriented systems. This naturally leads to a strong focus on what the relations are between the parts: association, generalization, composition. Dynamics is an inherent part of the concept simulation and the explicit guideline for designing object interaction is to imitate real world or model interactions.&lt;br /&gt;
Let us consider a real world example of designing a partial implementation of the board game-Backgammon to understand the objected oriented using a model-centric perspective. The physical parts of Backgammon identifiable are the checkers, points, board, dice, player, etc. The diagram below is a design of model parts (classes) and their relationships (relations).&lt;br /&gt;
&lt;br /&gt;
===Responsibility-centric perspective===&lt;br /&gt;
This perspective stresses on the behavior of software systems and the concepts used to do design include behavior, roles, responsibilities and protocol. Here, the primary focus is the dynamics of the program. Roles and responsibilities are the core concepts in this perspective and hence it has more coupling to behavior when compared to static elements like objects or model parts. There is a difference between behavior and responsibility, where behavior is the concrete actions taken by objects where as responsibility is to fulfill requests through any number of concrete behaviors. So, responsibility is more abstract than behavior.&lt;br /&gt;
One can look at responsibility-centric perspective as an extension of the model-centric perspective with a shift of focus (from a focus on model parts to a focus on the simulation or dynamical aspects). The Backgammon example can again be&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Object Oriented Design Concepts &amp;lt;ref&amp;gt;http://books.google.com/books/about/Object_Design.html?id=vUF72vN5MY8C&amp;lt;/ref&amp;gt;==&lt;br /&gt;
[[File:AnObject.jpg|350px|right|thumb|An object encapsulates scripts and information&amp;lt;ref&amp;gt;http://books.google.com/books?id=vUF72vN5MY8C&amp;amp;pg=PA2&amp;amp;source=gbs_toc_r&amp;amp;cad=4#v=onepage&amp;amp;q&amp;amp;f=false Object Design: Roles, Responsibilities, and Collaborations by Rebecca Wirfs-Brock, Alan McKean&amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
A software application is constructed from parts. These parts -software objects- interact by sending messages to request information or action from others. Throughout its lifetime, each object remains responsible for responding to a fixed set of requests. To fulfill these requests, objects encapsulate scripted responses and the information that they base them on (see Figure 4a). If an object is designed to remember certain facts, it can use them to respond differently to future requests.&lt;br /&gt;
&lt;br /&gt;
Building an object-oriented application means inventing appropriate machinery. We represent real-world information, processes, interactions, relationships, even errors, by inventing objects that don't exist in the real world. We give life and intelligence to inanimate things. We take difficult-to-comprehend real-world objects and split them into simpler, more manageable software ones. We invent new objects. Each has a specific role to play in the application. Our measure of success lies in how clearly we invent a software reality that satisfies our application's requirements—and not in how closely it resembles the real world.&amp;lt;ref&amp;gt;http://books.google.com/books?id=vUF72vN5MY8C&amp;amp;pg=PA3&amp;amp;source=gbs_toc_r&amp;amp;cad=4#v=onepage&amp;amp;q&amp;amp;f=false Object Design: Roles, Responsibilities, and Collaborations by Rebecca Wirfs-Brock, Alan McKean&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''For example''', filling out and filing a form seems simple. But to perform that task in software, behind the simple forms, the application is validating the data against business rules, reading and refreshing the persistent data, guaranteeing the consistency of the information, and managing simultaneous access by dozens of users. Software objects display information, coordinate activities, compute, or connect to services.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Concept&lt;br /&gt;
! Short description&lt;br /&gt;
|-&lt;br /&gt;
|An object || an implementation of one or more roles.&lt;br /&gt;
|-&lt;br /&gt;
|A role || a set of related responsibilities.&lt;br /&gt;
|-&lt;br /&gt;
|A responsibility || an obligation to perform a task or know information&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Roles ''(relation with objects)'' ===&lt;br /&gt;
An object has a specific purpose - a role it plays within a given context. Objects that play the same role can be interchanged. For example, there are several providers that can deliver letters and packages: DHL, FedEx, UPS, Post, Airborne. They all have the same purpose, if not the same way of carrying out their business. We choose from among them according to the requirements that you have for delivery. We pick among the mail carriers that meet your requirements.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre-wrap; &lt;br /&gt;
white-space: -moz-pre-wrap;&lt;br /&gt;
white-space: -pre-wrap;&lt;br /&gt;
white-space: -o-pre-wrap; &lt;br /&gt;
word-wrap: break-word&amp;quot;&amp;gt;&lt;br /&gt;
A role is a set of responsibilities that can be used interchangeably.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A well-defined object supports a clearly defined role. We use purposeful oversimplifications, or role stereotypes, to help focus an object's responsibilities. Stereotypes are characterizations of the roles needed by an application. Because our goal is to build consistent and easy-to-use objects, it is advantageous to stereotype objects, ignoring specifics of their behaviors and thinking about them at a higher level. By oversimplifying and characterizing it, we can ponder the nature of an object's role more easily. We find these stereotypes to be useful:&lt;br /&gt;
*Information holder - knows and provides information&lt;br /&gt;
*Structurer - maintains relationships between objects and information about those relationships&lt;br /&gt;
*Service provider - performs work and, in general, offers computing services&lt;br /&gt;
*Coordinator - reacts to events by delegating tasks to others&lt;br /&gt;
*Controller - makes decisions and closely directs others' actions&lt;br /&gt;
*Interfacer - transforms information and requests between distinct parts of our system&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre-wrap; &lt;br /&gt;
white-space: -moz-pre-wrap;&lt;br /&gt;
white-space: -pre-wrap;&lt;br /&gt;
white-space: -o-pre-wrap; &lt;br /&gt;
word-wrap: break-word&amp;quot;&amp;gt;&lt;br /&gt;
Just as an actor tries to play a believable part in a play, an object takes on a character in an application by assuming responsibilities that define a meaningful role.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Responsibilities &amp;lt;ref&amp;gt;http://books.google.com/books?id=vUF72vN5MY8C&amp;amp;pg=PA5&amp;amp;source=gbs_toc_r&amp;amp;cad=4#v=onepage&amp;amp;q&amp;amp;f=false&amp;lt;/ref&amp;gt;===&lt;br /&gt;
An application implements a system of responsibilities. Responsibilities are assigned to roles. Roles collaborate to carry out their responsibilities. A good application is structured to effectively fulfill these responsibilities. We start design by inventing objects, assigning responsibilities to them for knowing information and doing the application's work. Collectively, these objects work together to fulfill the larger responsibilities of the application.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre-wrap; &lt;br /&gt;
white-space: -moz-pre-wrap;&lt;br /&gt;
white-space: -pre-wrap;&lt;br /&gt;
white-space: -o-pre-wrap; &lt;br /&gt;
word-wrap: break-word&amp;quot;&amp;gt;&lt;br /&gt;
An object embodies a set of roles with a designated set of responsibilities.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Responsibilities are general statements about software objects. They include three major items:&lt;br /&gt;
*The actions an object performs&lt;br /&gt;
*The knowledge an object maintains&lt;br /&gt;
*Major decisions an object makes that affect others&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre-wrap; &lt;br /&gt;
white-space: -moz-pre-wrap;&lt;br /&gt;
white-space: -pre-wrap;&lt;br /&gt;
white-space: -o-pre-wrap; &lt;br /&gt;
word-wrap: break-word&amp;quot;&amp;gt;&lt;br /&gt;
Physical objects, unlike our intelligent software objects, typically do work or hold on to things or information. A phone book is a physical object but it takes no action. A thermostat exists, and it makes decisions and sends control signals. A teakettle exists, but it does little more than act as a reservoir (and occasionally whistles to send a signal). Physical objects usually don't make informed decisions. However, a dog is man's best friend and companion and does many different things on its own behalf. Our software objects lie somewhere between these extremes: They aren't sentient beings, but they can be more or less lively, depending on what responsibilities we give them.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Responsibilities come from statements or implications of system behavior found in use cases. There is a gap between use case descriptions and object responsibilities. Responsibilities are general statements about what an object knows, does, or decides. Use case descriptions are statements about our system's behavior and how actors interact with it. Use cases describe our software from the perspective of an outside observer. They don't tell how something is accomplished. Use cases provide a rough idea of how our system will work and the tasks involved. As&lt;br /&gt;
designers we bridge this gap by transforming descriptions found in use cases into explicit statements about actions, information, or decision-making responsibilities. This is a three-step process:&lt;br /&gt;
*Identify things the system does and information it manages.&lt;br /&gt;
*Restate these as responsibilities.&lt;br /&gt;
*Break them down into smaller parts if necessary, and assign them to appropriate objects.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Behavior ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Protocols &amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Protocol_(object-oriented_programming)&amp;lt;/ref&amp;gt;===&lt;br /&gt;
In [http://en.wikipedia.org/wiki/Object-oriented_programming object-oriented programming], a '''protocol''' or '''interface''' is a common means for unrelated objects to communicate with each other. When objects do collaborate, they are designed to follow certain protocols and observe specific conventions: Make requests only for advertised services. Provide appropriate information. Use services under certain conditions. Finally, accept the consequences of using them. Object contracts should describe all these terms.&lt;br /&gt;
&lt;br /&gt;
The protocol is a description of:&lt;br /&gt;
* The messages that are understood by the object.&lt;br /&gt;
* The arguments that these messages may be supplied with.&lt;br /&gt;
* The types of results that these messages return.&lt;br /&gt;
* The [http://en.wikipedia.org/wiki/Invariant_(computer_science) invariants] that are preserved despite modifications to the state of an object.&lt;br /&gt;
* The exceptional situations that will be required to be handled by clients to the object.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Additional Reading==&lt;br /&gt;
*[http://books.google.com/books?id=VQaf_vOTDzMC&amp;amp;pg=PA244&amp;amp;lpg=PA244&amp;amp;dq=%22language+centric%22+%22model-centric%22+%22responsibility+centric%22+object+oriented+design&amp;amp;source=bl&amp;amp;ots=tY3C6nStiA&amp;amp;sig=bEO2VyjGTobxQ362Yaubi542ZTc&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ei=f3KFUJ2-D4Ho8QTC_IHQBA&amp;amp;ved=0CEMQ6AEwAg#v=onepage&amp;amp;q=%22language%20centric%22%20%22model-centric%22%20%22responsibility%20centric%22%20object%20oriented%20design&amp;amp;f=false Flexible,Reliable Software using Patterns and Agile Development]&lt;br /&gt;
*[http://books.google.com/books?id=YnGz2ghKF-gC&amp;amp;pg=PA60&amp;amp;lpg=PA60&amp;amp;dq=%22language-centric%22+object+oriented+design&amp;amp;source=bl&amp;amp;ots=ko8xV4SZJs&amp;amp;sig=yemCujDGu_BEySZ_k32Kc0KVbgM&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ei=K8WFUOykNYW89gTcx4GQAg&amp;amp;ved=0CFEQ6AEwBA#v=onepage&amp;amp;q=%22language-centric%22%20object%20oriented%20design&amp;amp;f=false Jibitesh Mishra, Ashok Mohanty, &amp;lt;i&amp;gt;&amp;quot;Software Engineering&amp;quot;&amp;lt;/i&amp;gt;]&lt;br /&gt;
*[http://web.engr.oregonstate.edu/~budd/Books/oopintro3e/info/ReadMe.html An Introduction to Object Oriented Programming]&lt;/div&gt;</summary>
		<author><name>Rchakar</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w15_rr&amp;diff=68008</id>
		<title>CSC/ECE 517 Fall 2012/ch2a 2w15 rr</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w15_rr&amp;diff=68008"/>
		<updated>2012-10-23T08:05:42Z</updated>

		<summary type="html">&lt;p&gt;Rchakar: /* Protocols */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
Object-oriented design is a programming model that began in the late 60's as software programs became more complex. The idea behind the approach was to build software systems by modeling them based on the real-world objects that they were trying to represent. For example, banking systems would contain customer objects, account objects and so on. Today, object-oriented design has been widely adopted &amp;lt;ref&amp;gt; [http://www.objectmentor.com/omSolutions/oops_what.html Introduction to Object Oriented Design]&amp;lt;/ref&amp;gt;. When done properly, this approach leads to simple, robust, flexible and modular software. When something goes wrong, the results could be bad. Object oriented design can be seen from different perspectives. In the language-centric perspective, objects are containers of data and methods. The model-centric perspective views the objects as model elements reflecting the real world objects and Responsibility-centric perspective views objects as interacting elements each playing a role in object community. Each of these perspectives are outlined in the following sections.&lt;br /&gt;
&lt;br /&gt;
==Background==&lt;br /&gt;
The history of object oriented design has many branches, and many people have contributed to this domain. The 1960s and 1970s saw the emergence of object oriented programming languages, such as Simula and Smalltalk, with key contributors such as Kristen Nygaard and Alan Kay, the visionary computer scientist who founded Smalltalk.&amp;lt;ref&amp;gt;[http://www.informit.com/articles/article.aspx?p=360440&amp;amp;seqNum=8 History of Object Oriented Design]&amp;lt;/ref&amp;gt;&lt;br /&gt;
But object oriented design was informal through that period, and it was only form 1982 that it became popular.  Contributors in this domain include Grady Booch, Kent Beck, Peter Coad, Don Firesmith, Ivar Jacobson (a UML founder), Steve Mellor, Bertrand Meyer, Jim Rumbaugh (a UML founder) and Rebecca Wirfs-Brock among others. Each of these perspectives are outlined in the following sections.&lt;br /&gt;
&lt;br /&gt;
==Object Oriented Design Perspectives==&lt;br /&gt;
===Language-centric perspective===&lt;br /&gt;
The focus of the language-centric perspective is classes and objects as building blocks for developing software. The emphasis is on the internal structure which are the fields and methods. Thus it is inherently a compile-time or static view which means that the definition speaks in terms of what it looks like in the following code:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
public class foo&lt;br /&gt;
{&lt;br /&gt;
 private int x;&lt;br /&gt;
 public static double y;&lt;br /&gt;
&lt;br /&gt;
 public int double (int x)&lt;br /&gt;
 {&lt;br /&gt;
   return (3*x);&lt;br /&gt;
 }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The implicit aspect of this view is that, an object is an entity in its own right and the definition is closed. Any object can be understood in isolation where the fields and methods are just enumerated. The advantage of this perspective is of that it is very concrete, closely related to the programming language level and therefore it is easy to understand. The disadvantage is that it does not help to structure the collaboration between objects, the dynamics, and this is typically where the hard challenges of design lie. Thus the perspective offers little guidance in the process of designing any realistic system.&amp;lt;ref&amp;gt;[https://docs.google.com/viewer?a=v&amp;amp;q=cache:Kl7VOfRFnNEJ:citeseerx.ist.psu.edu/viewdoc/download%3Fdoi%3D10.1.1.86.7500%26rep%3Drep1%26type%3Dpdf+%22language+centric%22+object+oriented+design&amp;amp;hl=en&amp;amp;gl=us&amp;amp;pid=bl&amp;amp;srcid=ADGEESj-HffIDcwsyYlGssvRYS3OAEloLCID6dCIHQeZ_WQ5W-fy9B3rC4uxbUKVBGzyPVn4uBra4ot0hCS71JC3NNy7nBVXRxzR4z06p3fVQKSIjn5t_fFr3dzrMICa5qNUVRnYHEAv&amp;amp;sig=AHIEtbRX7G0XgBl1mKxnPINiorZvNhW32Q Henrik Baerbak Christensen, &amp;lt;i&amp;gt;&amp;quot;Implications of Perspective in Teaching Objects First and Object Design&amp;quot;&amp;lt;/i&amp;gt;, Proceedings of the 10th annual &amp;lt;i&amp;gt;SIGCSE&amp;lt;/i&amp;gt; conference on Innovation and technology in computer science education, Department of Computer Science, University of Aarhus, 2005.]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Model-centric perspective===&lt;br /&gt;
In this perspective, the objects(classes, fields) and their relationships like inheritance, association, aggregation are designed by using some model. Here the program execution is a simulation of some part of the&lt;br /&gt;
world, and objects are perceived as the parts of the model. The perspective is often explained through analogies to other models like toy railways, traffic simulations, computer games, etc. This perspective stresses objects as entities in a larger context (they are parts of a model) as opposed to the self-contained language-centric definition. This approach works fine for real life systems such as an order-entry system, a library system, boat-rental and various other real world entity oriented systems. This naturally leads to a strong focus on what the relations are between the parts: association, generalization, composition. Dynamics is an inherent part of the concept simulation and the explicit guideline for designing object interaction is to imitate real world or model interactions.&lt;br /&gt;
Let us consider a real world example of designing a partial implementation of the board game-Backgammon to understand the objected oriented using a model-centric perspective. The physical parts of Backgammon identifiable are the checkers, points, board, dice, player, etc. The diagram below is a design of model parts (classes) and their relationships (relations).&lt;br /&gt;
&lt;br /&gt;
===Responsibility-centric perspective===&lt;br /&gt;
This perspective stresses on the behavior of software systems and the concepts used to do design include behavior, roles, responsibilities and protocol. Here, the primary focus is the dynamics of the program. Roles and responsibilities are the core concepts in this perspective and hence it has more coupling to behavior when compared to static elements like objects or model parts. There is a difference between behavior and responsibility, where behavior is the concrete actions taken by objects where as responsibility is to fulfill requests through any number of concrete behaviors. So, responsibility is more abstract than behavior.&lt;br /&gt;
One can look at responsibility-centric perspective as an extension of the model-centric perspective with a shift of focus (from a focus on model parts to a focus on the simulation or dynamical aspects). The Backgammon example can again be&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Object Oriented Design Concepts &amp;lt;ref&amp;gt;http://books.google.com/books/about/Object_Design.html?id=vUF72vN5MY8C&amp;lt;/ref&amp;gt;==&lt;br /&gt;
[[File:AnObject.jpg|350px|right|thumb|An object encapsulates scripts and information&amp;lt;ref&amp;gt;http://books.google.com/books?id=vUF72vN5MY8C&amp;amp;pg=PA2&amp;amp;source=gbs_toc_r&amp;amp;cad=4#v=onepage&amp;amp;q&amp;amp;f=false Object Design: Roles, Responsibilities, and Collaborations by Rebecca Wirfs-Brock, Alan McKean&amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
A software application is constructed from parts. These parts -software objects- interact by sending messages to request information or action from others. Throughout its lifetime, each object remains responsible for responding to a fixed set of requests. To fulfill these requests, objects encapsulate scripted responses and the information that they base them on (see Figure 4a). If an object is designed to remember certain facts, it can use them to respond differently to future requests.&lt;br /&gt;
&lt;br /&gt;
Building an object-oriented application means inventing appropriate machinery. We represent real-world information, processes, interactions, relationships, even errors, by inventing objects that don't exist in the real world. We give life and intelligence to inanimate things. We take difficult-to-comprehend real-world objects and split them into simpler, more manageable software ones. We invent new objects. Each has a specific role to play in the application. Our measure of success lies in how clearly we invent a software reality that satisfies our application's requirements—and not in how closely it resembles the real world.&amp;lt;ref&amp;gt;http://books.google.com/books?id=vUF72vN5MY8C&amp;amp;pg=PA3&amp;amp;source=gbs_toc_r&amp;amp;cad=4#v=onepage&amp;amp;q&amp;amp;f=false Object Design: Roles, Responsibilities, and Collaborations by Rebecca Wirfs-Brock, Alan McKean&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''For example''', filling out and filing a form seems simple. But to perform that task in software, behind the simple forms, the application is validating the data against business rules, reading and refreshing the persistent data, guaranteeing the consistency of the information, and managing simultaneous access by dozens of users. Software objects display information, coordinate activities, compute, or connect to services.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Concept&lt;br /&gt;
! Short description&lt;br /&gt;
|-&lt;br /&gt;
|An object || an implementation of one or more roles.&lt;br /&gt;
|-&lt;br /&gt;
|A role || a set of related responsibilities.&lt;br /&gt;
|-&lt;br /&gt;
|A responsibility || an obligation to perform a task or know information&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Roles ''(relation with objects)'' ===&lt;br /&gt;
An object has a specific purpose - a role it plays within a given context. Objects that play the same role can be interchanged. For example, there are several providers that can deliver letters and packages: DHL, FedEx, UPS, Post, Airborne. They all have the same purpose, if not the same way of carrying out their business. We choose from among them according to the requirements that you have for delivery. We pick among the mail carriers that meet your requirements.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre-wrap; &lt;br /&gt;
white-space: -moz-pre-wrap;&lt;br /&gt;
white-space: -pre-wrap;&lt;br /&gt;
white-space: -o-pre-wrap; &lt;br /&gt;
word-wrap: break-word&amp;quot;&amp;gt;&lt;br /&gt;
A role is a set of responsibilities that can be used interchangeably.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A well-defined object supports a clearly defined role. We use purposeful oversimplifications, or role stereotypes, to help focus an object's responsibilities. Stereotypes are characterizations of the roles needed by an application. Because our goal is to build consistent and easy-to-use objects, it is advantageous to stereotype objects, ignoring specifics of their behaviors and thinking about them at a higher level. By oversimplifying and characterizing it, we can ponder the nature of an object's role more easily. We find these stereotypes to be useful:&lt;br /&gt;
*Information holder - knows and provides information&lt;br /&gt;
*Structurer - maintains relationships between objects and information about those relationships&lt;br /&gt;
*Service provider - performs work and, in general, offers computing services&lt;br /&gt;
*Coordinator - reacts to events by delegating tasks to others&lt;br /&gt;
*Controller - makes decisions and closely directs others' actions&lt;br /&gt;
*Interfacer - transforms information and requests between distinct parts of our system&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre-wrap; &lt;br /&gt;
white-space: -moz-pre-wrap;&lt;br /&gt;
white-space: -pre-wrap;&lt;br /&gt;
white-space: -o-pre-wrap; &lt;br /&gt;
word-wrap: break-word&amp;quot;&amp;gt;&lt;br /&gt;
Just as an actor tries to play a believable part in a play, an object takes on a character in an application by assuming responsibilities that define a meaningful role.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Responsibilities &amp;lt;ref&amp;gt;http://books.google.com/books?id=vUF72vN5MY8C&amp;amp;pg=PA5&amp;amp;source=gbs_toc_r&amp;amp;cad=4#v=onepage&amp;amp;q&amp;amp;f=false&amp;lt;/ref&amp;gt;===&lt;br /&gt;
An application implements a system of responsibilities. Responsibilities are assigned to roles. Roles collaborate to carry out their responsibilities. A good application is structured to effectively fulfill these responsibilities. We start design by inventing objects, assigning responsibilities to them for knowing information and doing the application's work. Collectively, these objects work together to fulfill the larger responsibilities of the application.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre-wrap; &lt;br /&gt;
white-space: -moz-pre-wrap;&lt;br /&gt;
white-space: -pre-wrap;&lt;br /&gt;
white-space: -o-pre-wrap; &lt;br /&gt;
word-wrap: break-word&amp;quot;&amp;gt;&lt;br /&gt;
An object embodies a set of roles with a designated set of responsibilities.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Responsibilities are general statements about software objects. They include three major items:&lt;br /&gt;
*The actions an object performs&lt;br /&gt;
*The knowledge an object maintains&lt;br /&gt;
*Major decisions an object makes that affect others&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre-wrap; &lt;br /&gt;
white-space: -moz-pre-wrap;&lt;br /&gt;
white-space: -pre-wrap;&lt;br /&gt;
white-space: -o-pre-wrap; &lt;br /&gt;
word-wrap: break-word&amp;quot;&amp;gt;&lt;br /&gt;
Physical objects, unlike our intelligent software objects, typically do work or hold on to things or information. A phone book is a physical object but it takes no action. A thermostat exists, and it makes decisions and sends control signals. A teakettle exists, but it does little more than act as a reservoir (and occasionally whistles to send a signal). Physical objects usually don't make informed decisions. However, a dog is man's best friend and companion and does many different things on its own behalf. Our software objects lie somewhere between these extremes: They aren't sentient beings, but they can be more or less lively, depending on what responsibilities we give them.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Responsibilities come from statements or implications of system behavior found in use cases. There is a gap between use case descriptions and object responsibilities. Responsibilities are general statements about what an object knows, does, or decides. Use case descriptions are statements about our system's behavior and how actors interact with it. Use cases describe our software from the perspective of an outside observer. They don't tell how something is accomplished. Use cases provide a rough idea of how our system will work and the tasks involved. As&lt;br /&gt;
designers we bridge this gap by transforming descriptions found in use cases into explicit statements about actions, information, or decision-making responsibilities. This is a three-step process:&lt;br /&gt;
*Identify things the system does and information it manages.&lt;br /&gt;
*Restate these as responsibilities.&lt;br /&gt;
*Break them down into smaller parts if necessary, and assign them to appropriate objects.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Behavior ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Protocols &amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Protocol_(object-oriented_programming)&amp;lt;/ref&amp;gt;===&lt;br /&gt;
In [http://en.wikipedia.org/wiki/Object-oriented_programming object-oriented programming], a '''protocol''' or '''interface''' is a common means for unrelated objects to communicate with each other. When objects do collaborate, they are designed to follow certain protocols and observe specific conventions: Make requests only for advertised services. Provide appropriate information. Use services under certain conditions. Finally, accept the consequences of using them. Object contracts should describe all these terms.&lt;br /&gt;
&lt;br /&gt;
The protocol is a description of:&lt;br /&gt;
* The messages that are understood by the object.&lt;br /&gt;
* The arguments that these messages may be supplied with.&lt;br /&gt;
* The types of results that these messages return.&lt;br /&gt;
* The [http://en.wikipedia.org/wiki/Invariant_(computer_science) invariants] that are preserved despite modifications to the state of an object.&lt;br /&gt;
* The exceptional situations that will be required to be handled by clients to the object.&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
==Additional Reading==&lt;br /&gt;
*[http://books.google.com/books?id=VQaf_vOTDzMC&amp;amp;pg=PA244&amp;amp;lpg=PA244&amp;amp;dq=%22language+centric%22+%22model-centric%22+%22responsibility+centric%22+object+oriented+design&amp;amp;source=bl&amp;amp;ots=tY3C6nStiA&amp;amp;sig=bEO2VyjGTobxQ362Yaubi542ZTc&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ei=f3KFUJ2-D4Ho8QTC_IHQBA&amp;amp;ved=0CEMQ6AEwAg#v=onepage&amp;amp;q=%22language%20centric%22%20%22model-centric%22%20%22responsibility%20centric%22%20object%20oriented%20design&amp;amp;f=false Flexible,Reliable Software using Patterns and Agile Development]&lt;br /&gt;
*[http://books.google.com/books?id=YnGz2ghKF-gC&amp;amp;pg=PA60&amp;amp;lpg=PA60&amp;amp;dq=%22language-centric%22+object+oriented+design&amp;amp;source=bl&amp;amp;ots=ko8xV4SZJs&amp;amp;sig=yemCujDGu_BEySZ_k32Kc0KVbgM&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ei=K8WFUOykNYW89gTcx4GQAg&amp;amp;ved=0CFEQ6AEwBA#v=onepage&amp;amp;q=%22language-centric%22%20object%20oriented%20design&amp;amp;f=false Jibitesh Mishra, Ashok Mohanty, &amp;lt;i&amp;gt;&amp;quot;Software Engineering&amp;quot;&amp;lt;/i&amp;gt;]&lt;br /&gt;
*[http://web.engr.oregonstate.edu/~budd/Books/oopintro3e/info/ReadMe.html An Introduction to Object Oriented Programming]&lt;/div&gt;</summary>
		<author><name>Rchakar</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w15_rr&amp;diff=68001</id>
		<title>CSC/ECE 517 Fall 2012/ch2a 2w15 rr</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w15_rr&amp;diff=68001"/>
		<updated>2012-10-23T07:26:04Z</updated>

		<summary type="html">&lt;p&gt;Rchakar: /* Object Oriented Design Concepts http://books.google.com/books/about/Object_Design.html?id=vUF72vN5MY8C */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
Object-oriented design is a programming model that began in the late 60's as software programs became more complex. The idea behind the approach was to build software systems by modeling them based on the real-world objects that they were trying to represent. For example, banking systems would contain customer objects, account objects and so on. Today, object-oriented design has been widely adopted &amp;lt;ref&amp;gt; [http://www.objectmentor.com/omSolutions/oops_what.html Introduction to Object Oriented Design]&amp;lt;/ref&amp;gt;. When done properly, this approach leads to simple, robust, flexible and modular software. When something goes wrong, the results could be bad. Object oriented design can be seen from different perspectives. In the language-centric perspective, objects are containers of data and methods. The model-centric perspective views the objects as model elements reflecting the real world objects and Responsibility-centric perspective views objects as interacting elements each playing a role in object community. Each of these perspectives are outlined in the following sections.&lt;br /&gt;
&lt;br /&gt;
==Background==&lt;br /&gt;
The history of object oriented design has many branches, and many people have contributed to this domain. The 1960s and 1970s saw the emergence of object oriented programming languages, such as Simula and Smalltalk, with key contributors such as Kristen Nygaard and Alan Kay, the visionary computer scientist who founded Smalltalk.&amp;lt;ref&amp;gt;[http://www.informit.com/articles/article.aspx?p=360440&amp;amp;seqNum=8 History of Object Oriented Design]&amp;lt;/ref&amp;gt;&lt;br /&gt;
But object oriented design was informal through that period, and it was only form 1982 that it became popular.  Contributors in this domain include Grady Booch, Kent Beck, Peter Coad, Don Firesmith, Ivar Jacobson (a UML founder), Steve Mellor, Bertrand Meyer, Jim Rumbaugh (a UML founder) and Rebecca Wirfs-Brock among others. Each of these perspectives are outlined in the following sections.&lt;br /&gt;
&lt;br /&gt;
==Object Oriented Design Perspectives==&lt;br /&gt;
===Language-centric perspective===&lt;br /&gt;
The focus of the language-centric perspective is classes and objects as building blocks for developing software. The emphasis is on the internal structure which are the fields and methods. Thus it is inherently a compile-time or static view which means that the definition speaks in terms of what it looks like in the following code:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
public class foo&lt;br /&gt;
{&lt;br /&gt;
 private int x;&lt;br /&gt;
 public static double y;&lt;br /&gt;
&lt;br /&gt;
 public int double (int x)&lt;br /&gt;
 {&lt;br /&gt;
   return (3*x);&lt;br /&gt;
 }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The implicit aspect of this view is that, an object is an entity in its own right and the definition is closed. Any object can be understood in isolation where the fields and methods are just enumerated. The advantage of this perspective is of that it is very concrete, closely related to the programming language level and therefore it is easy to understand. The disadvantage is that it does not help to structure the collaboration between objects, the dynamics, and this is typically where the hard challenges of design lie. Thus the perspective offers little guidance in the process of designing any realistic system.&amp;lt;ref&amp;gt;[https://docs.google.com/viewer?a=v&amp;amp;q=cache:Kl7VOfRFnNEJ:citeseerx.ist.psu.edu/viewdoc/download%3Fdoi%3D10.1.1.86.7500%26rep%3Drep1%26type%3Dpdf+%22language+centric%22+object+oriented+design&amp;amp;hl=en&amp;amp;gl=us&amp;amp;pid=bl&amp;amp;srcid=ADGEESj-HffIDcwsyYlGssvRYS3OAEloLCID6dCIHQeZ_WQ5W-fy9B3rC4uxbUKVBGzyPVn4uBra4ot0hCS71JC3NNy7nBVXRxzR4z06p3fVQKSIjn5t_fFr3dzrMICa5qNUVRnYHEAv&amp;amp;sig=AHIEtbRX7G0XgBl1mKxnPINiorZvNhW32Q Henrik Baerbak Christensen, &amp;lt;i&amp;gt;&amp;quot;Implications of Perspective in Teaching Objects First and Object Design&amp;quot;&amp;lt;/i&amp;gt;, Proceedings of the 10th annual &amp;lt;i&amp;gt;SIGCSE&amp;lt;/i&amp;gt; conference on Innovation and technology in computer science education, Department of Computer Science, University of Aarhus, 2005.]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Model-centric perspective===&lt;br /&gt;
In this perspective, the objects(classes, fields) and their relationships like inheritance, association, aggregation are designed by using some model. Here the program execution is a simulation of some part of the&lt;br /&gt;
world, and objects are perceived as the parts of the model. The perspective is often explained through analogies to other models like toy railways, traffic simulations, computer games, etc. This perspective stresses objects as entities in a larger context (they are parts of a model) as opposed to the self-contained language-centric definition. This approach works fine for real life systems such as an order-entry system, a library system, boat-rental and various other real world entity oriented systems. This naturally leads to a strong focus on what the relations are between the parts: association, generalization, composition. Dynamics is an inherent part of the concept simulation and the explicit guideline for designing object interaction is to imitate real world or model interactions.&lt;br /&gt;
Let us consider a real world example of designing a partial implementation of the board game-Backgammon to understand the objected oriented using a model-centric perspective. The physical parts of Backgammon identifiable are the checkers, points, board, dice, player, etc. The diagram below is a design of model parts (classes) and their relationships (relations).&lt;br /&gt;
&lt;br /&gt;
===Responsibility-centric perspective===&lt;br /&gt;
This perspective stresses on the behavior of software systems and the concepts used to do design include behavior, roles, responsibilities and protocol. Here, the primary focus is the dynamics of the program. Roles and responsibilities are the core concepts in this perspective and hence it has more coupling to behavior when compared to static elements like objects or model parts. There is a difference between behavior and responsibility, where behavior is the concrete actions taken by objects where as responsibility is to fulfill requests through any number of concrete behaviors. So, responsibility is more abstract than behavior.&lt;br /&gt;
One can look at responsibility-centric perspective as an extension of the model-centric perspective with a shift of focus (from a focus on model parts to a focus on the simulation or dynamical aspects). The Backgammon example can again be&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Object Oriented Design Concepts &amp;lt;ref&amp;gt;http://books.google.com/books/about/Object_Design.html?id=vUF72vN5MY8C&amp;lt;/ref&amp;gt;==&lt;br /&gt;
[[File:AnObject.jpg|350px|right|thumb|An object encapsulates scripts and information&amp;lt;ref&amp;gt;http://books.google.com/books?id=vUF72vN5MY8C&amp;amp;pg=PA2&amp;amp;source=gbs_toc_r&amp;amp;cad=4#v=onepage&amp;amp;q&amp;amp;f=false Object Design: Roles, Responsibilities, and Collaborations by Rebecca Wirfs-Brock, Alan McKean&amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
A software application is constructed from parts. These parts -software objects- interact by sending messages to request information or action from others. Throughout its lifetime, each object remains responsible for responding to a fixed set of requests. To fulfill these requests, objects encapsulate scripted responses and the information that they base them on (see Figure 4a). If an object is designed to remember certain facts, it can use them to respond differently to future requests.&lt;br /&gt;
&lt;br /&gt;
Building an object-oriented application means inventing appropriate machinery. We represent real-world information, processes, interactions, relationships, even errors, by inventing objects that don't exist in the real world. We give life and intelligence to inanimate things. We take difficult-to-comprehend real-world objects and split them into simpler, more manageable software ones. We invent new objects. Each has a specific role to play in the application. Our measure of success lies in how clearly we invent a software reality that satisfies our application's requirements—and not in how closely it resembles the real world.&amp;lt;ref&amp;gt;http://books.google.com/books?id=vUF72vN5MY8C&amp;amp;pg=PA3&amp;amp;source=gbs_toc_r&amp;amp;cad=4#v=onepage&amp;amp;q&amp;amp;f=false Object Design: Roles, Responsibilities, and Collaborations by Rebecca Wirfs-Brock, Alan McKean&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''For example''', filling out and filing a form seems simple. But to perform that task in software, behind the simple forms, the application is validating the data against business rules, reading and refreshing the persistent data, guaranteeing the consistency of the information, and managing simultaneous access by dozens of users. Software objects display information, coordinate activities, compute, or connect to services.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Concept&lt;br /&gt;
! Short description&lt;br /&gt;
|-&lt;br /&gt;
|An object || an implementation of one or more roles.&lt;br /&gt;
|-&lt;br /&gt;
|A role || a set of related responsibilities.&lt;br /&gt;
|-&lt;br /&gt;
|A responsibility || an obligation to perform a task or know information&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Roles ''(relation with objects)'' ===&lt;br /&gt;
An object has a specific purpose - a role it plays within a given context. Objects that play the same role can be interchanged. For example, there are several providers that can deliver letters and packages: DHL, FedEx, UPS, Post, Airborne. They all have the same purpose, if not the same way of carrying out their business. We choose from among them according to the requirements that you have for delivery. We pick among the mail carriers that meet your requirements.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre-wrap; &lt;br /&gt;
white-space: -moz-pre-wrap;&lt;br /&gt;
white-space: -pre-wrap;&lt;br /&gt;
white-space: -o-pre-wrap; &lt;br /&gt;
word-wrap: break-word&amp;quot;&amp;gt;&lt;br /&gt;
A role is a set of responsibilities that can be used interchangeably.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A well-defined object supports a clearly defined role. We use purposeful oversimplifications, or role stereotypes, to help focus an object's responsibilities. Stereotypes are characterizations of the roles needed by an application. Because our goal is to build consistent and easy-to-use objects, it is advantageous to stereotype objects, ignoring specifics of their behaviors and thinking about them at a higher level. By oversimplifying and characterizing it, we can ponder the nature of an object's role more easily. We find these stereotypes to be useful:&lt;br /&gt;
*Information holder - knows and provides information&lt;br /&gt;
*Structurer - maintains relationships between objects and information about those relationships&lt;br /&gt;
*Service provider - performs work and, in general, offers computing services&lt;br /&gt;
*Coordinator - reacts to events by delegating tasks to others&lt;br /&gt;
*Controller - makes decisions and closely directs others' actions&lt;br /&gt;
*Interfacer - transforms information and requests between distinct parts of our system&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre-wrap; &lt;br /&gt;
white-space: -moz-pre-wrap;&lt;br /&gt;
white-space: -pre-wrap;&lt;br /&gt;
white-space: -o-pre-wrap; &lt;br /&gt;
word-wrap: break-word&amp;quot;&amp;gt;&lt;br /&gt;
Just as an actor tries to play a believable part in a play, an object takes on a character in an application by assuming responsibilities that define a meaningful role.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Responsibilities &amp;lt;ref&amp;gt;http://books.google.com/books?id=vUF72vN5MY8C&amp;amp;pg=PA5&amp;amp;source=gbs_toc_r&amp;amp;cad=4#v=onepage&amp;amp;q&amp;amp;f=false&amp;lt;/ref&amp;gt;===&lt;br /&gt;
An application implements a system of responsibilities. Responsibilities are assigned to roles. Roles collaborate to carry out their responsibilities. A good application is structured to effectively fulfill these responsibilities. We start design by inventing objects, assigning responsibilities to them for knowing information and doing the application's work. Collectively, these objects work together to fulfill the larger responsibilities of the application.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre-wrap; &lt;br /&gt;
white-space: -moz-pre-wrap;&lt;br /&gt;
white-space: -pre-wrap;&lt;br /&gt;
white-space: -o-pre-wrap; &lt;br /&gt;
word-wrap: break-word&amp;quot;&amp;gt;&lt;br /&gt;
An object embodies a set of roles with a designated set of responsibilities.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Responsibilities are general statements about software objects. They include three major items:&lt;br /&gt;
*The actions an object performs&lt;br /&gt;
*The knowledge an object maintains&lt;br /&gt;
*Major decisions an object makes that affect others&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre-wrap; &lt;br /&gt;
white-space: -moz-pre-wrap;&lt;br /&gt;
white-space: -pre-wrap;&lt;br /&gt;
white-space: -o-pre-wrap; &lt;br /&gt;
word-wrap: break-word&amp;quot;&amp;gt;&lt;br /&gt;
Physical objects, unlike our intelligent software objects, typically do work or hold on to things or information. A phone book is a physical object but it takes no action. A thermostat exists, and it makes decisions and sends control signals. A teakettle exists, but it does little more than act as a reservoir (and occasionally whistles to send a signal). Physical objects usually don't make informed decisions. However, a dog is man's best friend and companion and does many different things on its own behalf. Our software objects lie somewhere between these extremes: They aren't sentient beings, but they can be more or less lively, depending on what responsibilities we give them.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Responsibilities come from statements or implications of system behavior found in use cases. There is a gap between use case descriptions and object responsibilities. Responsibilities are general statements about what an object knows, does, or decides. Use case descriptions are statements about our system's behavior and how actors interact with it. Use cases describe our software from the perspective of an outside observer. They don't tell how something is accomplished. Use cases provide a rough idea of how our system will work and the tasks involved. As&lt;br /&gt;
designers we bridge this gap by transforming descriptions found in use cases into explicit statements about actions, information, or decision-making responsibilities. This is a three-step process:&lt;br /&gt;
*Identify things the system does and information it manages.&lt;br /&gt;
*Restate these as responsibilities.&lt;br /&gt;
*Break them down into smaller parts if necessary, and assign them to appropriate objects.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Behavior ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Protocols ===&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
==Additional Reading==&lt;br /&gt;
*[http://books.google.com/books?id=VQaf_vOTDzMC&amp;amp;pg=PA244&amp;amp;lpg=PA244&amp;amp;dq=%22language+centric%22+%22model-centric%22+%22responsibility+centric%22+object+oriented+design&amp;amp;source=bl&amp;amp;ots=tY3C6nStiA&amp;amp;sig=bEO2VyjGTobxQ362Yaubi542ZTc&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ei=f3KFUJ2-D4Ho8QTC_IHQBA&amp;amp;ved=0CEMQ6AEwAg#v=onepage&amp;amp;q=%22language%20centric%22%20%22model-centric%22%20%22responsibility%20centric%22%20object%20oriented%20design&amp;amp;f=false Flexible,Reliable Software using Patterns and Agile Development]&lt;br /&gt;
*[http://books.google.com/books?id=YnGz2ghKF-gC&amp;amp;pg=PA60&amp;amp;lpg=PA60&amp;amp;dq=%22language-centric%22+object+oriented+design&amp;amp;source=bl&amp;amp;ots=ko8xV4SZJs&amp;amp;sig=yemCujDGu_BEySZ_k32Kc0KVbgM&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ei=K8WFUOykNYW89gTcx4GQAg&amp;amp;ved=0CFEQ6AEwBA#v=onepage&amp;amp;q=%22language-centric%22%20object%20oriented%20design&amp;amp;f=false Jibitesh Mishra, Ashok Mohanty, &amp;lt;i&amp;gt;&amp;quot;Software Engineering&amp;quot;&amp;lt;/i&amp;gt;]&lt;br /&gt;
*[http://web.engr.oregonstate.edu/~budd/Books/oopintro3e/info/ReadMe.html An Introduction to Object Oriented Programming]&lt;/div&gt;</summary>
		<author><name>Rchakar</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w15_rr&amp;diff=68000</id>
		<title>CSC/ECE 517 Fall 2012/ch2a 2w15 rr</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w15_rr&amp;diff=68000"/>
		<updated>2012-10-23T07:24:38Z</updated>

		<summary type="html">&lt;p&gt;Rchakar: /* Object Oriented Design Concepts http://books.google.com/books/about/Object_Design.html?id=vUF72vN5MY8C */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
Object-oriented design is a programming model that began in the late 60's as software programs became more complex. The idea behind the approach was to build software systems by modeling them based on the real-world objects that they were trying to represent. For example, banking systems would contain customer objects, account objects and so on. Today, object-oriented design has been widely adopted &amp;lt;ref&amp;gt; [http://www.objectmentor.com/omSolutions/oops_what.html Introduction to Object Oriented Design]&amp;lt;/ref&amp;gt;. When done properly, this approach leads to simple, robust, flexible and modular software. When something goes wrong, the results could be bad. Object oriented design can be seen from different perspectives. In the language-centric perspective, objects are containers of data and methods. The model-centric perspective views the objects as model elements reflecting the real world objects and Responsibility-centric perspective views objects as interacting elements each playing a role in object community. Each of these perspectives are outlined in the following sections.&lt;br /&gt;
&lt;br /&gt;
==Background==&lt;br /&gt;
The history of object oriented design has many branches, and many people have contributed to this domain. The 1960s and 1970s saw the emergence of object oriented programming languages, such as Simula and Smalltalk, with key contributors such as Kristen Nygaard and Alan Kay, the visionary computer scientist who founded Smalltalk.&amp;lt;ref&amp;gt;[http://www.informit.com/articles/article.aspx?p=360440&amp;amp;seqNum=8 History of Object Oriented Design]&amp;lt;/ref&amp;gt;&lt;br /&gt;
But object oriented design was informal through that period, and it was only form 1982 that it became popular.  Contributors in this domain include Grady Booch, Kent Beck, Peter Coad, Don Firesmith, Ivar Jacobson (a UML founder), Steve Mellor, Bertrand Meyer, Jim Rumbaugh (a UML founder) and Rebecca Wirfs-Brock among others. Each of these perspectives are outlined in the following sections.&lt;br /&gt;
&lt;br /&gt;
==Object Oriented Design Perspectives==&lt;br /&gt;
===Language-centric perspective===&lt;br /&gt;
The focus of the language-centric perspective is classes and objects as building blocks for developing software. The emphasis is on the internal structure which are the fields and methods. Thus it is inherently a compile-time or static view which means that the definition speaks in terms of what it looks like in the following code:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
public class foo&lt;br /&gt;
{&lt;br /&gt;
 private int x;&lt;br /&gt;
 public static double y;&lt;br /&gt;
&lt;br /&gt;
 public int double (int x)&lt;br /&gt;
 {&lt;br /&gt;
   return (3*x);&lt;br /&gt;
 }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The implicit aspect of this view is that, an object is an entity in its own right and the definition is closed. Any object can be understood in isolation where the fields and methods are just enumerated. The advantage of this perspective is of that it is very concrete, closely related to the programming language level and therefore it is easy to understand. The disadvantage is that it does not help to structure the collaboration between objects, the dynamics, and this is typically where the hard challenges of design lie. Thus the perspective offers little guidance in the process of designing any realistic system.&amp;lt;ref&amp;gt;[https://docs.google.com/viewer?a=v&amp;amp;q=cache:Kl7VOfRFnNEJ:citeseerx.ist.psu.edu/viewdoc/download%3Fdoi%3D10.1.1.86.7500%26rep%3Drep1%26type%3Dpdf+%22language+centric%22+object+oriented+design&amp;amp;hl=en&amp;amp;gl=us&amp;amp;pid=bl&amp;amp;srcid=ADGEESj-HffIDcwsyYlGssvRYS3OAEloLCID6dCIHQeZ_WQ5W-fy9B3rC4uxbUKVBGzyPVn4uBra4ot0hCS71JC3NNy7nBVXRxzR4z06p3fVQKSIjn5t_fFr3dzrMICa5qNUVRnYHEAv&amp;amp;sig=AHIEtbRX7G0XgBl1mKxnPINiorZvNhW32Q Henrik Baerbak Christensen, &amp;lt;i&amp;gt;&amp;quot;Implications of Perspective in Teaching Objects First and Object Design&amp;quot;&amp;lt;/i&amp;gt;, Proceedings of the 10th annual &amp;lt;i&amp;gt;SIGCSE&amp;lt;/i&amp;gt; conference on Innovation and technology in computer science education, Department of Computer Science, University of Aarhus, 2005.]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Model-centric perspective===&lt;br /&gt;
In this perspective, the objects(classes, fields) and their relationships like inheritance, association, aggregation are designed by using some model. Here the program execution is a simulation of some part of the&lt;br /&gt;
world, and objects are perceived as the parts of the model. The perspective is often explained through analogies to other models like toy railways, traffic simulations, computer games, etc. This perspective stresses objects as entities in a larger context (they are parts of a model) as opposed to the self-contained language-centric definition. This approach works fine for real life systems such as an order-entry system, a library system, boat-rental and various other real world entity oriented systems. This naturally leads to a strong focus on what the relations are between the parts: association, generalization, composition. Dynamics is an inherent part of the concept simulation and the explicit guideline for designing object interaction is to imitate real world or model interactions.&lt;br /&gt;
Let us consider a real world example of designing a partial implementation of the board game-Backgammon to understand the objected oriented using a model-centric perspective. The physical parts of Backgammon identifiable are the checkers, points, board, dice, player, etc. The diagram below is a design of model parts (classes) and their relationships (relations).&lt;br /&gt;
&lt;br /&gt;
===Responsibility-centric perspective===&lt;br /&gt;
This perspective stresses on the behavior of software systems and the concepts used to do design include behavior, roles, responsibilities and protocol. Here, the primary focus is the dynamics of the program. Roles and responsibilities are the core concepts in this perspective and hence it has more coupling to behavior when compared to static elements like objects or model parts. There is a difference between behavior and responsibility, where behavior is the concrete actions taken by objects where as responsibility is to fulfill requests through any number of concrete behaviors. So, responsibility is more abstract than behavior.&lt;br /&gt;
One can look at responsibility-centric perspective as an extension of the model-centric perspective with a shift of focus (from a focus on model parts to a focus on the simulation or dynamical aspects). The Backgammon example can again be&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Object Oriented Design Concepts &amp;lt;ref&amp;gt;http://books.google.com/books/about/Object_Design.html?id=vUF72vN5MY8C&amp;lt;/ref&amp;gt;==&lt;br /&gt;
[[File:AnObject.jpg|350px|right|thumb|An object encapsulates scripts and information&amp;lt;ref&amp;gt;http://books.google.com/books?id=vUF72vN5MY8C&amp;amp;pg=PA2&amp;amp;source=gbs_toc_r&amp;amp;cad=4#v=onepage&amp;amp;q&amp;amp;f=false Object Design: Roles, Responsibilities, and Collaborations by Rebecca Wirfs-Brock, Alan McKean&amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
A software application is constructed from parts. These parts -software objects- interact by sending messages to request information or action from others. Throughout its lifetime, each object remains responsible for responding to a fixed set of requests. To fulfill these requests, objects encapsulate scripted responses and the information that they base them on (see Figure 4a). If an object is designed to remember certain facts, it can use them to respond differently to future requests.&lt;br /&gt;
&lt;br /&gt;
Building an object-oriented application means inventing appropriate machinery. We represent real-world information, processes, interactions, relationships, even errors, by inventing objects that don't exist in the real world. We give life and intelligence to inanimate things. We take difficult-to-comprehend real-world objects and split them into simpler, more manageable software ones. We invent new objects. Each has a specific role to play in the application. Our measure of success lies in how clearly we invent a software reality that satisfies our application's requirements—and not in how closely it resembles the real world.&amp;lt;ref&amp;gt;http://books.google.com/books?id=vUF72vN5MY8C&amp;amp;pg=PA3&amp;amp;source=gbs_toc_r&amp;amp;cad=4#v=onepage&amp;amp;q&amp;amp;f=false Object Design: Roles, Responsibilities, and Collaborations by Rebecca Wirfs-Brock, Alan McKean&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''For example''', filling out and filing a form seems simple. But to perform that task in software, behind the simple forms, the application is validating the data against business rules, reading and refreshing the persistent data, guaranteeing the consistency of the information, and managing simultaneous access by dozens of users. Software objects display information, coordinate activities, compute, or connect to services.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Concept&lt;br /&gt;
! Short description&lt;br /&gt;
|-&lt;br /&gt;
|An object || an implementation of one or more roles.&lt;br /&gt;
|-&lt;br /&gt;
|A role || a set of related responsibilities.&lt;br /&gt;
|-&lt;br /&gt;
|A responsibility || an obligation to perform a task or know information&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Roles ''(relation with objects)'' ===&lt;br /&gt;
An object has a specific purpose - a role it plays within a given context. Objects that play the same role can be interchanged. For example, there are several providers that can deliver letters and packages: DHL, FedEx, UPS, Post, Airborne. They all have the same purpose, if not the same way of carrying out their business. We choose from among them according to the requirements that you have for delivery. We pick among the mail carriers that meet your requirements.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre-wrap; &lt;br /&gt;
white-space: -moz-pre-wrap;&lt;br /&gt;
white-space: -pre-wrap;&lt;br /&gt;
white-space: -o-pre-wrap; &lt;br /&gt;
word-wrap: break-word&amp;quot;&amp;gt;&lt;br /&gt;
A role is a set of responsibilities that can be used interchangeably.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A well-defined object supports a clearly defined role. We use purposeful oversimplifications, or role stereotypes, to help focus an object's responsibilities. Stereotypes are characterizations of the roles needed by an application. Because our goal is to build consistent and easy-to-use objects, it is advantageous to stereotype objects, ignoring specifics of their behaviors and thinking about them at a higher level. By oversimplifying and characterizing it, we can ponder the nature of an object's role more easily. We find these stereotypes to be useful:&lt;br /&gt;
*Information holder - knows and provides information&lt;br /&gt;
*Structurer - maintains relationships between objects and information about those relationships&lt;br /&gt;
*Service provider - performs work and, in general, offers computing services&lt;br /&gt;
*Coordinator - reacts to events by delegating tasks to others&lt;br /&gt;
*Controller - makes decisions and closely directs others' actions&lt;br /&gt;
*Interfacer - transforms information and requests between distinct parts of our system&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre-wrap; &lt;br /&gt;
white-space: -moz-pre-wrap;&lt;br /&gt;
white-space: -pre-wrap;&lt;br /&gt;
white-space: -o-pre-wrap; &lt;br /&gt;
word-wrap: break-word&amp;quot;&amp;gt;&lt;br /&gt;
Just as an actor tries to play a believable part in a play, an object takes on a character in an application by assuming responsibilities that define a meaningful role.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Responsibilities &amp;lt;ref&amp;gt;http://books.google.com/books?id=vUF72vN5MY8C&amp;amp;pg=PA5&amp;amp;source=gbs_toc_r&amp;amp;cad=4#v=onepage&amp;amp;q&amp;amp;f=false&amp;lt;/ref&amp;gt;===&lt;br /&gt;
An application implements a system of responsibilities. Responsibilities are assigned to roles. Roles collaborate to carry out their responsibilities. A good application is structured to effectively fulfill these responsibilities. We start design by inventing objects, assigning responsibilities to them for knowing information and doing the application's work. Collectively, these objects work together to fulfill the larger responsibilities of the application.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre-wrap; &lt;br /&gt;
white-space: -moz-pre-wrap;&lt;br /&gt;
white-space: -pre-wrap;&lt;br /&gt;
white-space: -o-pre-wrap; &lt;br /&gt;
word-wrap: break-word&amp;quot;&amp;gt;&lt;br /&gt;
An object embodies a set of roles with a designated set of responsibilities.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Responsibilities are general statements about software objects. They include three major items:&lt;br /&gt;
*The actions an object performs&lt;br /&gt;
*The knowledge an object maintains&lt;br /&gt;
*Major decisions an object makes that affect others&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre-wrap; &lt;br /&gt;
white-space: -moz-pre-wrap;&lt;br /&gt;
white-space: -pre-wrap;&lt;br /&gt;
white-space: -o-pre-wrap; &lt;br /&gt;
word-wrap: break-word&amp;quot;&amp;gt;&lt;br /&gt;
Physical objects, unlike our intelligent software objects, typically do work or hold on to things or information. A phone book is a physical object but it takes no action. A thermostat exists, and it makes decisions and sends control signals. A teakettle exists, but it does little more than act as a reservoir (and occasionally whistles to send a signal). Physical objects usually don't make informed decisions. However, a dog is man's best friend and companion and does many different things on its own behalf. Our software objects lie somewhere between these extremes: They aren't sentient beings, but they can be more or less lively, depending on what responsibilities we give them.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Responsibilities come from statements or implications of system behavior found in use cases. There is a gap between use case descriptions and object responsibilities. Responsibilities are general statements about what an object knows, does, or decides. Use case descriptions are statements about our system's behavior and how actors interact with it. Use cases describe our software from the perspective of an outside observer. They don't tell how something is accomplished. Use cases provide a rough idea of how our system will work and the tasks involved. As&lt;br /&gt;
designers we bridge this gap by transforming descriptions found in use cases into explicit statements about actions, information, or decision-making responsibilities. This is a three-step process:&lt;br /&gt;
*Identify things the system does and information it manages.&lt;br /&gt;
*Restate these as responsibilities.&lt;br /&gt;
*Break them down into smaller parts if necessary, and assign them to appropriate objects.&lt;br /&gt;
&lt;br /&gt;
=== Behavior ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Protocols ===&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
==Additional Reading==&lt;br /&gt;
*[http://books.google.com/books?id=VQaf_vOTDzMC&amp;amp;pg=PA244&amp;amp;lpg=PA244&amp;amp;dq=%22language+centric%22+%22model-centric%22+%22responsibility+centric%22+object+oriented+design&amp;amp;source=bl&amp;amp;ots=tY3C6nStiA&amp;amp;sig=bEO2VyjGTobxQ362Yaubi542ZTc&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ei=f3KFUJ2-D4Ho8QTC_IHQBA&amp;amp;ved=0CEMQ6AEwAg#v=onepage&amp;amp;q=%22language%20centric%22%20%22model-centric%22%20%22responsibility%20centric%22%20object%20oriented%20design&amp;amp;f=false Flexible,Reliable Software using Patterns and Agile Development]&lt;br /&gt;
*[http://books.google.com/books?id=YnGz2ghKF-gC&amp;amp;pg=PA60&amp;amp;lpg=PA60&amp;amp;dq=%22language-centric%22+object+oriented+design&amp;amp;source=bl&amp;amp;ots=ko8xV4SZJs&amp;amp;sig=yemCujDGu_BEySZ_k32Kc0KVbgM&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ei=K8WFUOykNYW89gTcx4GQAg&amp;amp;ved=0CFEQ6AEwBA#v=onepage&amp;amp;q=%22language-centric%22%20object%20oriented%20design&amp;amp;f=false Jibitesh Mishra, Ashok Mohanty, &amp;lt;i&amp;gt;&amp;quot;Software Engineering&amp;quot;&amp;lt;/i&amp;gt;]&lt;br /&gt;
*[http://web.engr.oregonstate.edu/~budd/Books/oopintro3e/info/ReadMe.html An Introduction to Object Oriented Programming]&lt;/div&gt;</summary>
		<author><name>Rchakar</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w15_rr&amp;diff=67999</id>
		<title>CSC/ECE 517 Fall 2012/ch2a 2w15 rr</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w15_rr&amp;diff=67999"/>
		<updated>2012-10-23T07:24:06Z</updated>

		<summary type="html">&lt;p&gt;Rchakar: /* Object Oriented Design Concepts http://books.google.com/books/about/Object_Design.html?id=vUF72vN5MY8C */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
Object-oriented design is a programming model that began in the late 60's as software programs became more complex. The idea behind the approach was to build software systems by modeling them based on the real-world objects that they were trying to represent. For example, banking systems would contain customer objects, account objects and so on. Today, object-oriented design has been widely adopted &amp;lt;ref&amp;gt; [http://www.objectmentor.com/omSolutions/oops_what.html Introduction to Object Oriented Design]&amp;lt;/ref&amp;gt;. When done properly, this approach leads to simple, robust, flexible and modular software. When something goes wrong, the results could be bad. Object oriented design can be seen from different perspectives. In the language-centric perspective, objects are containers of data and methods. The model-centric perspective views the objects as model elements reflecting the real world objects and Responsibility-centric perspective views objects as interacting elements each playing a role in object community. Each of these perspectives are outlined in the following sections.&lt;br /&gt;
&lt;br /&gt;
==Background==&lt;br /&gt;
The history of object oriented design has many branches, and many people have contributed to this domain. The 1960s and 1970s saw the emergence of object oriented programming languages, such as Simula and Smalltalk, with key contributors such as Kristen Nygaard and Alan Kay, the visionary computer scientist who founded Smalltalk.&amp;lt;ref&amp;gt;[http://www.informit.com/articles/article.aspx?p=360440&amp;amp;seqNum=8 History of Object Oriented Design]&amp;lt;/ref&amp;gt;&lt;br /&gt;
But object oriented design was informal through that period, and it was only form 1982 that it became popular.  Contributors in this domain include Grady Booch, Kent Beck, Peter Coad, Don Firesmith, Ivar Jacobson (a UML founder), Steve Mellor, Bertrand Meyer, Jim Rumbaugh (a UML founder) and Rebecca Wirfs-Brock among others. Each of these perspectives are outlined in the following sections.&lt;br /&gt;
&lt;br /&gt;
==Object Oriented Design Perspectives==&lt;br /&gt;
===Language-centric perspective===&lt;br /&gt;
The focus of the language-centric perspective is classes and objects as building blocks for developing software. The emphasis is on the internal structure which are the fields and methods. Thus it is inherently a compile-time or static view which means that the definition speaks in terms of what it looks like in the following code:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
public class foo&lt;br /&gt;
{&lt;br /&gt;
 private int x;&lt;br /&gt;
 public static double y;&lt;br /&gt;
&lt;br /&gt;
 public int double (int x)&lt;br /&gt;
 {&lt;br /&gt;
   return (3*x);&lt;br /&gt;
 }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The implicit aspect of this view is that, an object is an entity in its own right and the definition is closed. Any object can be understood in isolation where the fields and methods are just enumerated. The advantage of this perspective is of that it is very concrete, closely related to the programming language level and therefore it is easy to understand. The disadvantage is that it does not help to structure the collaboration between objects, the dynamics, and this is typically where the hard challenges of design lie. Thus the perspective offers little guidance in the process of designing any realistic system.&amp;lt;ref&amp;gt;[https://docs.google.com/viewer?a=v&amp;amp;q=cache:Kl7VOfRFnNEJ:citeseerx.ist.psu.edu/viewdoc/download%3Fdoi%3D10.1.1.86.7500%26rep%3Drep1%26type%3Dpdf+%22language+centric%22+object+oriented+design&amp;amp;hl=en&amp;amp;gl=us&amp;amp;pid=bl&amp;amp;srcid=ADGEESj-HffIDcwsyYlGssvRYS3OAEloLCID6dCIHQeZ_WQ5W-fy9B3rC4uxbUKVBGzyPVn4uBra4ot0hCS71JC3NNy7nBVXRxzR4z06p3fVQKSIjn5t_fFr3dzrMICa5qNUVRnYHEAv&amp;amp;sig=AHIEtbRX7G0XgBl1mKxnPINiorZvNhW32Q Henrik Baerbak Christensen, &amp;lt;i&amp;gt;&amp;quot;Implications of Perspective in Teaching Objects First and Object Design&amp;quot;&amp;lt;/i&amp;gt;, Proceedings of the 10th annual &amp;lt;i&amp;gt;SIGCSE&amp;lt;/i&amp;gt; conference on Innovation and technology in computer science education, Department of Computer Science, University of Aarhus, 2005.]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Model-centric perspective===&lt;br /&gt;
In this perspective, the objects(classes, fields) and their relationships like inheritance, association, aggregation are designed by using some model. Here the program execution is a simulation of some part of the&lt;br /&gt;
world, and objects are perceived as the parts of the model. The perspective is often explained through analogies to other models like toy railways, traffic simulations, computer games, etc. This perspective stresses objects as entities in a larger context (they are parts of a model) as opposed to the self-contained language-centric definition. This approach works fine for real life systems such as an order-entry system, a library system, boat-rental and various other real world entity oriented systems. This naturally leads to a strong focus on what the relations are between the parts: association, generalization, composition. Dynamics is an inherent part of the concept simulation and the explicit guideline for designing object interaction is to imitate real world or model interactions.&lt;br /&gt;
Let us consider a real world example of designing a partial implementation of the board game-Backgammon to understand the objected oriented using a model-centric perspective. The physical parts of Backgammon identifiable are the checkers, points, board, dice, player, etc. The diagram below is a design of model parts (classes) and their relationships (relations).&lt;br /&gt;
&lt;br /&gt;
===Responsibility-centric perspective===&lt;br /&gt;
This perspective stresses on the behavior of software systems and the concepts used to do design include behavior, roles, responsibilities and protocol. Here, the primary focus is the dynamics of the program. Roles and responsibilities are the core concepts in this perspective and hence it has more coupling to behavior when compared to static elements like objects or model parts. There is a difference between behavior and responsibility, where behavior is the concrete actions taken by objects where as responsibility is to fulfill requests through any number of concrete behaviors. So, responsibility is more abstract than behavior.&lt;br /&gt;
One can look at responsibility-centric perspective as an extension of the model-centric perspective with a shift of focus (from a focus on model parts to a focus on the simulation or dynamical aspects). The Backgammon example can again be&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Object Oriented Design Concepts &amp;lt;ref&amp;gt;http://books.google.com/books/about/Object_Design.html?id=vUF72vN5MY8C&amp;lt;/ref&amp;gt;==&lt;br /&gt;
[[File:AnObject.jpg|350px|right|thumb|An object encapsulates scripts and information&amp;lt;ref&amp;gt;http://books.google.com/books?id=vUF72vN5MY8C&amp;amp;pg=PA2&amp;amp;source=gbs_toc_r&amp;amp;cad=4#v=onepage&amp;amp;q&amp;amp;f=false Object Design: Roles, Responsibilities, and Collaborations by Rebecca Wirfs-Brock, Alan McKean&amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
A software application is constructed from parts. These parts -software objects- interact by sending messages to request information or action from others. Throughout its lifetime, each object remains responsible for responding to a fixed set of requests. To fulfill these requests, objects encapsulate scripted responses and the information that they base them on (see Figure 4a). If an object is designed to remember certain facts, it can use them to respond differently to future requests.&lt;br /&gt;
&lt;br /&gt;
Building an object-oriented application means inventing appropriate machinery. We represent real-world information, processes, interactions, relationships, even errors, by inventing objects that don't exist in the real world. We give life and intelligence to inanimate things. We take difficult-to-comprehend real-world objects and split them into simpler, more manageable software ones. We invent new objects. Each has a specific role to play in the application. Our measure of success lies in how clearly we invent a software reality that satisfies our application's requirements—and not in how closely it resembles the real world.&amp;lt;ref&amp;gt;http://books.google.com/books?id=vUF72vN5MY8C&amp;amp;pg=PA3&amp;amp;source=gbs_toc_r&amp;amp;cad=4#v=onepage&amp;amp;q&amp;amp;f=false Object Design: Roles, Responsibilities, and Collaborations by Rebecca Wirfs-Brock, Alan McKean&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''For example''', filling out and filing a form seems simple. But to perform that task in software, behind the simple forms, the application is validating the data against business rules, reading and refreshing the persistent data, guaranteeing the consistency of the information, and managing simultaneous access by dozens of users. Software objects display information, coordinate activities, compute, or connect to services.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Concept&lt;br /&gt;
! Short description&lt;br /&gt;
|-&lt;br /&gt;
|An object || an implementation of one or more roles.&lt;br /&gt;
|-&lt;br /&gt;
|A role || a set of related responsibilities.&lt;br /&gt;
|-&lt;br /&gt;
|A responsibility || an obligation to perform a task or know information&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Roles ''(relation with objects)'' ===&lt;br /&gt;
An object has a specific purpose - a role it plays within a given context. Objects that play the same role can be interchanged. For example, there are several providers that can deliver letters and packages: DHL, FedEx, UPS, Post, Airborne. They all have the same purpose, if not the same way of carrying out their business. We choose from among them according to the requirements that you have for delivery. We pick among the mail carriers that meet your requirements.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre-wrap; &lt;br /&gt;
white-space: -moz-pre-wrap;&lt;br /&gt;
white-space: -pre-wrap;&lt;br /&gt;
white-space: -o-pre-wrap; &lt;br /&gt;
word-wrap: break-word&amp;quot;&amp;gt;&lt;br /&gt;
A role is a set of responsibilities that can be used interchangeably.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A well-defined object supports a clearly defined role. We use purposeful oversimplifications, or role stereotypes, to help focus an object's responsibilities. Stereotypes are characterizations of the roles needed by an application. Because our goal is to build consistent and easy-to-use objects, it is advantageous to stereotype objects, ignoring specifics of their behaviors and thinking about them at a higher level. By oversimplifying and characterizing it, we can ponder the nature of an object's role more easily. We find these stereotypes to be useful:&lt;br /&gt;
*Information holder - knows and provides information&lt;br /&gt;
*Structurer - maintains relationships between objects and information about those relationships&lt;br /&gt;
*Service provider - performs work and, in general, offers computing services&lt;br /&gt;
*Coordinator - reacts to events by delegating tasks to others&lt;br /&gt;
*Controller - makes decisions and closely directs others' actions&lt;br /&gt;
*Interfacer - transforms information and requests between distinct parts of our system&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre-wrap; &lt;br /&gt;
white-space: -moz-pre-wrap;&lt;br /&gt;
white-space: -pre-wrap;&lt;br /&gt;
white-space: -o-pre-wrap; &lt;br /&gt;
word-wrap: break-word&amp;quot;&amp;gt;&lt;br /&gt;
Just as an actor tries to play a believable part in a play, an object takes on a character in an application by assuming responsibilities that define a meaningful role.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Responsibilities &amp;lt;ref&amp;gt;http://books.google.com/books?id=vUF72vN5MY8C&amp;amp;pg=PA5&amp;amp;source=gbs_toc_r&amp;amp;cad=4#v=onepage&amp;amp;q&amp;amp;f=false&amp;lt;/ref&amp;gt;===&lt;br /&gt;
An application implements a system of responsibilities. Responsibilities are assigned to roles. Roles collaborate to carry out their responsibilities. A good application is structured to effectively fulfill these responsibilities. We start design by inventing objects, assigning responsibilities to them for knowing information and doing the application's work. Collectively, these objects work together to fulfill the larger responsibilities of the application.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre-wrap; &lt;br /&gt;
white-space: -moz-pre-wrap;&lt;br /&gt;
white-space: -pre-wrap;&lt;br /&gt;
white-space: -o-pre-wrap; &lt;br /&gt;
word-wrap: break-word&amp;quot;&amp;gt;&lt;br /&gt;
An object embodies a set of roles with a designated set of responsibilities.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Responsibilities are general statements about software objects. They include three major items:&lt;br /&gt;
*The actions an object performs&lt;br /&gt;
*The knowledge an object maintains&lt;br /&gt;
*Major decisions an object makes that affect others&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre-wrap; &lt;br /&gt;
white-space: -moz-pre-wrap;&lt;br /&gt;
white-space: -pre-wrap;&lt;br /&gt;
white-space: -o-pre-wrap; &lt;br /&gt;
word-wrap: break-word&amp;quot;&amp;gt;&lt;br /&gt;
Physical objects, unlike our intelligent software objects, typically do work or hold on to things or information. A phone book is a physical object but it takes no action. A thermostat exists, and it makes decisions and sends control signals. A teakettle exists, but it does little more than act as a reservoir (and occasionally whistles to send a signal). Physical objects usually don't make informed decisions. However, a dog is man's best friend and companion and does many different things on its own behalf. Our software objects lie somewhere between these extremes: They aren't sentient beings, but they can be more or less lively, depending on what responsibilities we give them.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Responsibilities come from statements or implications of system behavior found in use cases. There is a gap between use case descriptions and object responsibilities. Responsibilities are general statements about what an object knows, does, or decides. Use case descriptions are statements about our system's behavior and how actors interact with it. Use cases describe our software from the perspective of an outside observer. They don't tell how something is accomplished. Use cases provide a rough idea of how our system will work and the tasks involved. As&lt;br /&gt;
designers we bridge this gap by transforming descriptions found in use cases into explicit statements about actions, information, or decision-making responsibilities. This is a three-step process:&lt;br /&gt;
*Identify things the system does and information it manages.&lt;br /&gt;
*Restate these as responsibilities.&lt;br /&gt;
*Break them down into smaller parts if necessary, and assign them to appropriate objects.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Behavior ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Protocols ===&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
==Additional Reading==&lt;br /&gt;
*[http://books.google.com/books?id=VQaf_vOTDzMC&amp;amp;pg=PA244&amp;amp;lpg=PA244&amp;amp;dq=%22language+centric%22+%22model-centric%22+%22responsibility+centric%22+object+oriented+design&amp;amp;source=bl&amp;amp;ots=tY3C6nStiA&amp;amp;sig=bEO2VyjGTobxQ362Yaubi542ZTc&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ei=f3KFUJ2-D4Ho8QTC_IHQBA&amp;amp;ved=0CEMQ6AEwAg#v=onepage&amp;amp;q=%22language%20centric%22%20%22model-centric%22%20%22responsibility%20centric%22%20object%20oriented%20design&amp;amp;f=false Flexible,Reliable Software using Patterns and Agile Development]&lt;br /&gt;
*[http://books.google.com/books?id=YnGz2ghKF-gC&amp;amp;pg=PA60&amp;amp;lpg=PA60&amp;amp;dq=%22language-centric%22+object+oriented+design&amp;amp;source=bl&amp;amp;ots=ko8xV4SZJs&amp;amp;sig=yemCujDGu_BEySZ_k32Kc0KVbgM&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ei=K8WFUOykNYW89gTcx4GQAg&amp;amp;ved=0CFEQ6AEwBA#v=onepage&amp;amp;q=%22language-centric%22%20object%20oriented%20design&amp;amp;f=false Jibitesh Mishra, Ashok Mohanty, &amp;lt;i&amp;gt;&amp;quot;Software Engineering&amp;quot;&amp;lt;/i&amp;gt;]&lt;br /&gt;
*[http://web.engr.oregonstate.edu/~budd/Books/oopintro3e/info/ReadMe.html An Introduction to Object Oriented Programming]&lt;/div&gt;</summary>
		<author><name>Rchakar</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w15_rr&amp;diff=67997</id>
		<title>CSC/ECE 517 Fall 2012/ch2a 2w15 rr</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w15_rr&amp;diff=67997"/>
		<updated>2012-10-23T07:22:07Z</updated>

		<summary type="html">&lt;p&gt;Rchakar: /* Responsibilities http://books.google.com/books?id=vUF72vN5MY8C&amp;amp;pg=PA5&amp;amp;source=gbs_toc_r&amp;amp;cad=4#v=onepage&amp;amp;q&amp;amp;f=false */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
Object-oriented design is a programming model that began in the late 60's as software programs became more complex. The idea behind the approach was to build software systems by modeling them based on the real-world objects that they were trying to represent. For example, banking systems would contain customer objects, account objects and so on. Today, object-oriented design has been widely adopted &amp;lt;ref&amp;gt; [http://www.objectmentor.com/omSolutions/oops_what.html Introduction to Object Oriented Design]&amp;lt;/ref&amp;gt;. When done properly, this approach leads to simple, robust, flexible and modular software. When something goes wrong, the results could be bad. Object oriented design can be seen from different perspectives. In the language-centric perspective, objects are containers of data and methods. The model-centric perspective views the objects as model elements reflecting the real world objects and Responsibility-centric perspective views objects as interacting elements each playing a role in object community. Each of these perspectives are outlined in the following sections.&lt;br /&gt;
&lt;br /&gt;
==Background==&lt;br /&gt;
The history of object oriented design has many branches, and many people have contributed to this domain. The 1960s and 1970s saw the emergence of object oriented programming languages, such as Simula and Smalltalk, with key contributors such as Kristen Nygaard and Alan Kay, the visionary computer scientist who founded Smalltalk.&amp;lt;ref&amp;gt;[http://www.informit.com/articles/article.aspx?p=360440&amp;amp;seqNum=8 History of Object Oriented Design]&amp;lt;/ref&amp;gt;&lt;br /&gt;
But object oriented design was informal through that period, and it was only form 1982 that it became popular.  Contributors in this domain include Grady Booch, Kent Beck, Peter Coad, Don Firesmith, Ivar Jacobson (a UML founder), Steve Mellor, Bertrand Meyer, Jim Rumbaugh (a UML founder) and Rebecca Wirfs-Brock among others. Each of these perspectives are outlined in the following sections.&lt;br /&gt;
&lt;br /&gt;
==Object Oriented Design Perspectives==&lt;br /&gt;
===Language-centric perspective===&lt;br /&gt;
The focus of the language-centric perspective is classes and objects as building blocks for developing software. The emphasis is on the internal structure which are the fields and methods. Thus it is inherently a compile-time or static view which means that the definition speaks in terms of what it looks like in the following code:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
public class foo&lt;br /&gt;
{&lt;br /&gt;
 private int x;&lt;br /&gt;
 public static double y;&lt;br /&gt;
&lt;br /&gt;
 public int double (int x)&lt;br /&gt;
 {&lt;br /&gt;
   return (3*x);&lt;br /&gt;
 }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The implicit aspect of this view is that, an object is an entity in its own right and the definition is closed. Any object can be understood in isolation where the fields and methods are just enumerated. The advantage of this perspective is of that it is very concrete, closely related to the programming language level and therefore it is easy to understand. The disadvantage is that it does not help to structure the collaboration between objects, the dynamics, and this is typically where the hard challenges of design lie. Thus the perspective offers little guidance in the process of designing any realistic system.&amp;lt;ref&amp;gt;[https://docs.google.com/viewer?a=v&amp;amp;q=cache:Kl7VOfRFnNEJ:citeseerx.ist.psu.edu/viewdoc/download%3Fdoi%3D10.1.1.86.7500%26rep%3Drep1%26type%3Dpdf+%22language+centric%22+object+oriented+design&amp;amp;hl=en&amp;amp;gl=us&amp;amp;pid=bl&amp;amp;srcid=ADGEESj-HffIDcwsyYlGssvRYS3OAEloLCID6dCIHQeZ_WQ5W-fy9B3rC4uxbUKVBGzyPVn4uBra4ot0hCS71JC3NNy7nBVXRxzR4z06p3fVQKSIjn5t_fFr3dzrMICa5qNUVRnYHEAv&amp;amp;sig=AHIEtbRX7G0XgBl1mKxnPINiorZvNhW32Q Henrik Baerbak Christensen, &amp;lt;i&amp;gt;&amp;quot;Implications of Perspective in Teaching Objects First and Object Design&amp;quot;&amp;lt;/i&amp;gt;, Proceedings of the 10th annual &amp;lt;i&amp;gt;SIGCSE&amp;lt;/i&amp;gt; conference on Innovation and technology in computer science education, Department of Computer Science, University of Aarhus, 2005.]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Model-centric perspective===&lt;br /&gt;
In this perspective, the objects(classes, fields) and their relationships like inheritance, association, aggregation are designed by using some model. Here the program execution is a simulation of some part of the&lt;br /&gt;
world, and objects are perceived as the parts of the model. The perspective is often explained through analogies to other models like toy railways, traffic simulations, computer games, etc. This perspective stresses objects as entities in a larger context (they are parts of a model) as opposed to the self-contained language-centric definition. This approach works fine for real life systems such as an order-entry system, a library system, boat-rental and various other real world entity oriented systems. This naturally leads to a strong focus on what the relations are between the parts: association, generalization, composition. Dynamics is an inherent part of the concept simulation and the explicit guideline for designing object interaction is to imitate real world or model interactions.&lt;br /&gt;
Let us consider a real world example of designing a partial implementation of the board game-Backgammon to understand the objected oriented using a model-centric perspective. The physical parts of Backgammon identifiable are the checkers, points, board, dice, player, etc. The diagram below is a design of model parts (classes) and their relationships (relations).&lt;br /&gt;
&lt;br /&gt;
===Responsibility-centric perspective===&lt;br /&gt;
This perspective stresses on the behavior of software systems and the concepts used to do design include behavior, roles, responsibilities and protocol. Here, the primary focus is the dynamics of the program. Roles and responsibilities are the core concepts in this perspective and hence it has more coupling to behavior when compared to static elements like objects or model parts. There is a difference between behavior and responsibility, where behavior is the concrete actions taken by objects where as responsibility is to fulfill requests through any number of concrete behaviors. So, responsibility is more abstract than behavior.&lt;br /&gt;
One can look at responsibility-centric perspective as an extension of the model-centric perspective with a shift of focus (from a focus on model parts to a focus on the simulation or dynamical aspects). The Backgammon example can again be&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Object Oriented Design Concepts &amp;lt;ref&amp;gt;http://books.google.com/books/about/Object_Design.html?id=vUF72vN5MY8C&amp;lt;/ref&amp;gt;==&lt;br /&gt;
[[File:AnObject.jpg|350px|right|thumb|An object encapsulates scripts and information&amp;lt;ref&amp;gt;http://books.google.com/books?id=vUF72vN5MY8C&amp;amp;pg=PA2&amp;amp;source=gbs_toc_r&amp;amp;cad=4#v=onepage&amp;amp;q&amp;amp;f=false Object Design: Roles, Responsibilities, and Collaborations by Rebecca Wirfs-Brock, Alan McKean&amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
A software application is constructed from parts. These parts -software objects- interact by sending messages to request information or action from others. Throughout its lifetime, each object remains responsible for responding to a fixed set of requests. To fulfill these requests, objects encapsulate scripted responses and the information that they base them on (see Figure 4a). If an object is designed to remember certain facts, it can use them to respond differently to future requests.&lt;br /&gt;
&lt;br /&gt;
Building an object-oriented application means inventing appropriate machinery. We represent real-world information, processes, interactions, relationships, even errors, by inventing objects that don't exist in the real world. We give life and intelligence to inanimate things. We take difficult-to-comprehend real-world objects and split them into simpler, more manageable software ones. We invent new objects. Each has a specific role to play in the application. Our measure of success lies in how clearly we invent a software reality that satisfies our application's requirements—and not in how closely it resembles the real world.&amp;lt;ref&amp;gt;http://books.google.com/books?id=vUF72vN5MY8C&amp;amp;pg=PA3&amp;amp;source=gbs_toc_r&amp;amp;cad=4#v=onepage&amp;amp;q&amp;amp;f=false Object Design: Roles, Responsibilities, and Collaborations by Rebecca Wirfs-Brock, Alan McKean&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''For example''', filling out and filing a form seems simple. But to perform that task in software, behind the simple forms, the application is validating the data against business rules, reading and refreshing the persistent data, guaranteeing the consistency of the information, and managing simultaneous access by dozens of users. Software objects display information, coordinate activities, compute, or connect to services.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Concept&lt;br /&gt;
! Short description&lt;br /&gt;
|-&lt;br /&gt;
|An object || an implementation of one or more roles.&lt;br /&gt;
|-&lt;br /&gt;
|A role || a set of related responsibilities.&lt;br /&gt;
|-&lt;br /&gt;
|A responsibility || an obligation to perform a task or know information&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Roles ''(relation with objects)'' ===&lt;br /&gt;
An object has a specific purpose - a role it plays within a given context. Objects that play the same role can be interchanged. For example, there are several providers that can deliver letters and packages: DHL, FedEx, UPS, Post, Airborne. They all have the same purpose, if not the same way of carrying out their business. We choose from among them according to the requirements that you have for delivery. We pick among the mail carriers that meet your requirements.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre-wrap; &lt;br /&gt;
white-space: -moz-pre-wrap;&lt;br /&gt;
white-space: -pre-wrap;&lt;br /&gt;
white-space: -o-pre-wrap; &lt;br /&gt;
word-wrap: break-word&amp;quot;&amp;gt;&lt;br /&gt;
A role is a set of responsibilities that can be used interchangeably.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A well-defined object supports a clearly defined role. We use purposeful oversimplifications, or role stereotypes, to help focus an object's responsibilities. Stereotypes are characterizations of the roles needed by an application. Because our goal is to build consistent and easy-to-use objects, it is advantageous to stereotype objects, ignoring specifics of their behaviors and thinking about them at a higher level. By oversimplifying and characterizing it, we can ponder the nature of an object's role more easily. We find these stereotypes to be useful:&lt;br /&gt;
*Information holder - knows and provides information&lt;br /&gt;
*Structurer - maintains relationships between objects and information about those relationships&lt;br /&gt;
*Service provider - performs work and, in general, offers computing services&lt;br /&gt;
*Coordinator - reacts to events by delegating tasks to others&lt;br /&gt;
*Controller - makes decisions and closely directs others' actions&lt;br /&gt;
*Interfacer - transforms information and requests between distinct parts of our system&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre-wrap; &lt;br /&gt;
white-space: -moz-pre-wrap;&lt;br /&gt;
white-space: -pre-wrap;&lt;br /&gt;
white-space: -o-pre-wrap; &lt;br /&gt;
word-wrap: break-word&amp;quot;&amp;gt;&lt;br /&gt;
Just as an actor tries to play a believable part in a play, an object takes on a character in an application by assuming responsibilities that define a meaningful role.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Responsibilities &amp;lt;ref&amp;gt;http://books.google.com/books?id=vUF72vN5MY8C&amp;amp;pg=PA5&amp;amp;source=gbs_toc_r&amp;amp;cad=4#v=onepage&amp;amp;q&amp;amp;f=false&amp;lt;/ref&amp;gt;===&lt;br /&gt;
An application implements a system of responsibilities. Responsibilities are assigned to roles. Roles collaborate to carry out their responsibilities. A good application is structured to effectively fulfill these responsibilities. We start design by inventing objects, assigning responsibilities to them for knowing information and doing the application's work. Collectively, these objects work together to fulfill the larger responsibilities of the application.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre-wrap; &lt;br /&gt;
white-space: -moz-pre-wrap;&lt;br /&gt;
white-space: -pre-wrap;&lt;br /&gt;
white-space: -o-pre-wrap; &lt;br /&gt;
word-wrap: break-word&amp;quot;&amp;gt;&lt;br /&gt;
An object embodies a set of roles with a designated set of responsibilities.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Responsibilities are general statements about software objects. They include three major items:&lt;br /&gt;
*The actions an object performs&lt;br /&gt;
*The knowledge an object maintains&lt;br /&gt;
*Major decisions an object makes that affect others&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre-wrap; &lt;br /&gt;
white-space: -moz-pre-wrap;&lt;br /&gt;
white-space: -pre-wrap;&lt;br /&gt;
white-space: -o-pre-wrap; &lt;br /&gt;
word-wrap: break-word&amp;quot;&amp;gt;&lt;br /&gt;
Physical objects, unlike our intelligent software objects, typically do work or hold on to things or information. A phone book is a physical object but it takes no action. A thermostat exists, and it makes decisions and sends control signals. A teakettle exists, but it does little more than act as a reservoir (and occasionally whistles to send a signal). Physical objects usually don't make informed decisions. However, a dog is man's best friend and companion and does many different things on its own behalf. Our software objects lie somewhere between these extremes: They aren't sentient beings, but they can be more or less lively, depending on what responsibilities we give them.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Responsibilities come from statements or implications of system behavior found in use cases. There is a gap between use case descriptions and object responsibilities. Responsibilities are general statements about what an object knows, does, or decides. Use case descriptions are statements about our system's behavior and how actors interact with it. Use cases describe our software from the perspective of an outside observer. They don't tell how something is accomplished. Use cases provide a rough idea of how our system will work and the tasks involved. As&lt;br /&gt;
designers we bridge this gap by transforming descriptions found in use cases into explicit statements about actions, information, or decision-making responsibilities. This is a three-step process:&lt;br /&gt;
*Identify things the system does and information it manages.&lt;br /&gt;
*Restate these as responsibilities.&lt;br /&gt;
*Break them down into smaller parts if necessary, and assign them to appropriate objects.&lt;br /&gt;
&lt;br /&gt;
=== Behavior ===&lt;br /&gt;
&lt;br /&gt;
=== Protocols ===&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
==Additional Reading==&lt;br /&gt;
*[http://books.google.com/books?id=VQaf_vOTDzMC&amp;amp;pg=PA244&amp;amp;lpg=PA244&amp;amp;dq=%22language+centric%22+%22model-centric%22+%22responsibility+centric%22+object+oriented+design&amp;amp;source=bl&amp;amp;ots=tY3C6nStiA&amp;amp;sig=bEO2VyjGTobxQ362Yaubi542ZTc&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ei=f3KFUJ2-D4Ho8QTC_IHQBA&amp;amp;ved=0CEMQ6AEwAg#v=onepage&amp;amp;q=%22language%20centric%22%20%22model-centric%22%20%22responsibility%20centric%22%20object%20oriented%20design&amp;amp;f=false Flexible,Reliable Software using Patterns and Agile Development]&lt;br /&gt;
*[http://books.google.com/books?id=YnGz2ghKF-gC&amp;amp;pg=PA60&amp;amp;lpg=PA60&amp;amp;dq=%22language-centric%22+object+oriented+design&amp;amp;source=bl&amp;amp;ots=ko8xV4SZJs&amp;amp;sig=yemCujDGu_BEySZ_k32Kc0KVbgM&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ei=K8WFUOykNYW89gTcx4GQAg&amp;amp;ved=0CFEQ6AEwBA#v=onepage&amp;amp;q=%22language-centric%22%20object%20oriented%20design&amp;amp;f=false Jibitesh Mishra, Ashok Mohanty, &amp;lt;i&amp;gt;&amp;quot;Software Engineering&amp;quot;&amp;lt;/i&amp;gt;]&lt;br /&gt;
*[http://web.engr.oregonstate.edu/~budd/Books/oopintro3e/info/ReadMe.html An Introduction to Object Oriented Programming]&lt;/div&gt;</summary>
		<author><name>Rchakar</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w15_rr&amp;diff=67996</id>
		<title>CSC/ECE 517 Fall 2012/ch2a 2w15 rr</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w15_rr&amp;diff=67996"/>
		<updated>2012-10-23T06:56:10Z</updated>

		<summary type="html">&lt;p&gt;Rchakar: /* Responsibilities */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
Object-oriented design is a programming model that began in the late 60's as software programs became more complex. The idea behind the approach was to build software systems by modeling them based on the real-world objects that they were trying to represent. For example, banking systems would contain customer objects, account objects and so on. Today, object-oriented design has been widely adopted &amp;lt;ref&amp;gt; [http://www.objectmentor.com/omSolutions/oops_what.html Introduction to Object Oriented Design]&amp;lt;/ref&amp;gt;. When done properly, this approach leads to simple, robust, flexible and modular software. When something goes wrong, the results could be bad. Object oriented design can be seen from different perspectives. In the language-centric perspective, objects are containers of data and methods. The model-centric perspective views the objects as model elements reflecting the real world objects and Responsibility-centric perspective views objects as interacting elements each playing a role in object community. Each of these perspectives are outlined in the following sections.&lt;br /&gt;
&lt;br /&gt;
==Background==&lt;br /&gt;
The history of object oriented design has many branches, and many people have contributed to this domain. The 1960s and 1970s saw the emergence of object oriented programming languages, such as Simula and Smalltalk, with key contributors such as Kristen Nygaard and Alan Kay, the visionary computer scientist who founded Smalltalk.&amp;lt;ref&amp;gt;[http://www.informit.com/articles/article.aspx?p=360440&amp;amp;seqNum=8 History of Object Oriented Design]&amp;lt;/ref&amp;gt;&lt;br /&gt;
But object oriented design was informal through that period, and it was only form 1982 that it became popular.  Contributors in this domain include Grady Booch, Kent Beck, Peter Coad, Don Firesmith, Ivar Jacobson (a UML founder), Steve Mellor, Bertrand Meyer, Jim Rumbaugh (a UML founder) and Rebecca Wirfs-Brock among others. Each of these perspectives are outlined in the following sections.&lt;br /&gt;
&lt;br /&gt;
==Object Oriented Design Perspectives==&lt;br /&gt;
===Language-centric perspective===&lt;br /&gt;
The focus of the language-centric perspective is classes and objects as building blocks for developing software. The emphasis is on the internal structure which are the fields and methods. Thus it is inherently a compile-time or static view which means that the definition speaks in terms of what it looks like in the following code:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
public class foo&lt;br /&gt;
{&lt;br /&gt;
 private int x;&lt;br /&gt;
 public static double y;&lt;br /&gt;
&lt;br /&gt;
 public int double (int x)&lt;br /&gt;
 {&lt;br /&gt;
   return (3*x);&lt;br /&gt;
 }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The implicit aspect of this view is that, an object is an entity in its own right and the definition is closed. Any object can be understood in isolation where the fields and methods are just enumerated. The advantage of this perspective is of that it is very concrete, closely related to the programming language level and therefore it is easy to understand. The disadvantage is that it does not help to structure the collaboration between objects, the dynamics, and this is typically where the hard challenges of design lie. Thus the perspective offers little guidance in the process of designing any realistic system.&amp;lt;ref&amp;gt;[https://docs.google.com/viewer?a=v&amp;amp;q=cache:Kl7VOfRFnNEJ:citeseerx.ist.psu.edu/viewdoc/download%3Fdoi%3D10.1.1.86.7500%26rep%3Drep1%26type%3Dpdf+%22language+centric%22+object+oriented+design&amp;amp;hl=en&amp;amp;gl=us&amp;amp;pid=bl&amp;amp;srcid=ADGEESj-HffIDcwsyYlGssvRYS3OAEloLCID6dCIHQeZ_WQ5W-fy9B3rC4uxbUKVBGzyPVn4uBra4ot0hCS71JC3NNy7nBVXRxzR4z06p3fVQKSIjn5t_fFr3dzrMICa5qNUVRnYHEAv&amp;amp;sig=AHIEtbRX7G0XgBl1mKxnPINiorZvNhW32Q Henrik Baerbak Christensen, &amp;lt;i&amp;gt;&amp;quot;Implications of Perspective in Teaching Objects First and Object Design&amp;quot;&amp;lt;/i&amp;gt;, Proceedings of the 10th annual &amp;lt;i&amp;gt;SIGCSE&amp;lt;/i&amp;gt; conference on Innovation and technology in computer science education, Department of Computer Science, University of Aarhus, 2005.]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Model-centric perspective===&lt;br /&gt;
In this perspective, the objects(classes, fields) and their relationships like inheritance, association, aggregation are designed by using some model. Here the program execution is a simulation of some part of the&lt;br /&gt;
world, and objects are perceived as the parts of the model. The perspective is often explained through analogies to other models like toy railways, traffic simulations, computer games, etc. This perspective stresses objects as entities in a larger context (they are parts of a model) as opposed to the self-contained language-centric definition. This approach works fine for real life systems such as an order-entry system, a library system, boat-rental and various other real world entity oriented systems. This naturally leads to a strong focus on what the relations are between the parts: association, generalization, composition. Dynamics is an inherent part of the concept simulation and the explicit guideline for designing object interaction is to imitate real world or model interactions.&lt;br /&gt;
Let us consider a real world example of designing a partial implementation of the board game-Backgammon to understand the objected oriented using a model-centric perspective. The physical parts of Backgammon identifiable are the checkers, points, board, dice, player, etc. The diagram below is a design of model parts (classes) and their relationships (relations).&lt;br /&gt;
&lt;br /&gt;
===Responsibility-centric perspective===&lt;br /&gt;
This perspective stresses on the behavior of software systems and the concepts used to do design include behavior, roles, responsibilities and protocol. Here, the primary focus is the dynamics of the program. Roles and responsibilities are the core concepts in this perspective and hence it has more coupling to behavior when compared to static elements like objects or model parts. There is a difference between behavior and responsibility, where behavior is the concrete actions taken by objects where as responsibility is to fulfill requests through any number of concrete behaviors. So, responsibility is more abstract than behavior.&lt;br /&gt;
One can look at responsibility-centric perspective as an extension of the model-centric perspective with a shift of focus (from a focus on model parts to a focus on the simulation or dynamical aspects). The Backgammon example can again be&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Object Oriented Design Concepts &amp;lt;ref&amp;gt;http://books.google.com/books/about/Object_Design.html?id=vUF72vN5MY8C&amp;lt;/ref&amp;gt;==&lt;br /&gt;
[[File:AnObject.jpg|350px|right|thumb|An object encapsulates scripts and information&amp;lt;ref&amp;gt;http://books.google.com/books?id=vUF72vN5MY8C&amp;amp;pg=PA2&amp;amp;source=gbs_toc_r&amp;amp;cad=4#v=onepage&amp;amp;q&amp;amp;f=false Object Design: Roles, Responsibilities, and Collaborations by Rebecca Wirfs-Brock, Alan McKean&amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
A software application is constructed from parts. These parts -software objects- interact by sending messages to request information or action from others. Throughout its lifetime, each object remains responsible for responding to a fixed set of requests. To fulfill these requests, objects encapsulate scripted responses and the information that they base them on (see Figure 4a). If an object is designed to remember certain facts, it can use them to respond differently to future requests.&lt;br /&gt;
&lt;br /&gt;
Building an object-oriented application means inventing appropriate machinery. We represent real-world information, processes, interactions, relationships, even errors, by inventing objects that don't exist in the real world. We give life and intelligence to inanimate things. We take difficult-to-comprehend real-world objects and split them into simpler, more manageable software ones. We invent new objects. Each has a specific role to play in the application. Our measure of success lies in how clearly we invent a software reality that satisfies our application's requirements—and not in how closely it resembles the real world.&amp;lt;ref&amp;gt;http://books.google.com/books?id=vUF72vN5MY8C&amp;amp;pg=PA3&amp;amp;source=gbs_toc_r&amp;amp;cad=4#v=onepage&amp;amp;q&amp;amp;f=false Object Design: Roles, Responsibilities, and Collaborations by Rebecca Wirfs-Brock, Alan McKean&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''For example''', filling out and filing a form seems simple. But to perform that task in software, behind the simple forms, the application is validating the data against business rules, reading and refreshing the persistent data, guaranteeing the consistency of the information, and managing simultaneous access by dozens of users. Software objects display information, coordinate activities, compute, or connect to services.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Concept&lt;br /&gt;
! Short description&lt;br /&gt;
|-&lt;br /&gt;
|An object || an implementation of one or more roles.&lt;br /&gt;
|-&lt;br /&gt;
|A role || a set of related responsibilities.&lt;br /&gt;
|-&lt;br /&gt;
|A responsibility || an obligation to perform a task or know information&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Roles ''(relation with objects)'' ===&lt;br /&gt;
An object has a specific purpose - a role it plays within a given context. Objects that play the same role can be interchanged. For example, there are several providers that can deliver letters and packages: DHL, FedEx, UPS, Post, Airborne. They all have the same purpose, if not the same way of carrying out their business. We choose from among them according to the requirements that you have for delivery. We pick among the mail carriers that meet your requirements.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre-wrap; &lt;br /&gt;
white-space: -moz-pre-wrap;&lt;br /&gt;
white-space: -pre-wrap;&lt;br /&gt;
white-space: -o-pre-wrap; &lt;br /&gt;
word-wrap: break-word&amp;quot;&amp;gt;&lt;br /&gt;
A role is a set of responsibilities that can be used interchangeably.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A well-defined object supports a clearly defined role. We use purposeful oversimplifications, or role stereotypes, to help focus an object's responsibilities. Stereotypes are characterizations of the roles needed by an application. Because our goal is to build consistent and easy-to-use objects, it is advantageous to stereotype objects, ignoring specifics of their behaviors and thinking about them at a higher level. By oversimplifying and characterizing it, we can ponder the nature of an object's role more easily. We find these stereotypes to be useful:&lt;br /&gt;
*Information holder - knows and provides information&lt;br /&gt;
*Structurer - maintains relationships between objects and information about those relationships&lt;br /&gt;
*Service provider - performs work and, in general, offers computing services&lt;br /&gt;
*Coordinator - reacts to events by delegating tasks to others&lt;br /&gt;
*Controller - makes decisions and closely directs others' actions&lt;br /&gt;
*Interfacer - transforms information and requests between distinct parts of our system&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre-wrap; &lt;br /&gt;
white-space: -moz-pre-wrap;&lt;br /&gt;
white-space: -pre-wrap;&lt;br /&gt;
white-space: -o-pre-wrap; &lt;br /&gt;
word-wrap: break-word&amp;quot;&amp;gt;&lt;br /&gt;
Just as an actor tries to play a believable part in a play, an object takes on a character in an application by assuming responsibilities that define a meaningful role.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Responsibilities &amp;lt;ref&amp;gt;http://books.google.com/books?id=vUF72vN5MY8C&amp;amp;pg=PA5&amp;amp;source=gbs_toc_r&amp;amp;cad=4#v=onepage&amp;amp;q&amp;amp;f=false&amp;lt;/ref&amp;gt;===&lt;br /&gt;
An application implements a system of responsibilities. Responsibilities are assigned to roles. Roles collaborate to carry out their responsibilities. A good application is structured to effectively fulfill these responsibilities. We start design by inventing objects, assigning responsibilities to them for knowing information and doing the application's work. Collectively, these objects work together to fulfill the larger responsibilities of the application.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre-wrap; &lt;br /&gt;
white-space: -moz-pre-wrap;&lt;br /&gt;
white-space: -pre-wrap;&lt;br /&gt;
white-space: -o-pre-wrap; &lt;br /&gt;
word-wrap: break-word&amp;quot;&amp;gt;&lt;br /&gt;
An object embodies a set of roles with a designated set of responsibilities.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Responsibilities are general statements about software objects. They include three major items:&lt;br /&gt;
*The actions an object performs&lt;br /&gt;
*The knowledge an object maintains&lt;br /&gt;
*Major decisions an object makes that affect others&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre-wrap; &lt;br /&gt;
white-space: -moz-pre-wrap;&lt;br /&gt;
white-space: -pre-wrap;&lt;br /&gt;
white-space: -o-pre-wrap; &lt;br /&gt;
word-wrap: break-word&amp;quot;&amp;gt;&lt;br /&gt;
Physical objects, unlike our intelligent software objects, typically do work or hold on to things or information. A phone book is a physical object but it takes no action. A thermostat exists, and it makes decisions and sends control signals. A teakettle exists, but it does little more than act as a reservoir (and occasionally whistles to send a signal). Physical objects usually don't make informed decisions. However, a dog is man's best friend and companion and does many different things on its own behalf. Our software objects lie somewhere between these extremes: They aren't sentient beings, but they can be more or less lively, depending on what responsibilities we give them.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Behavior ===&lt;br /&gt;
&lt;br /&gt;
=== Protocols ===&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
==Additional Reading==&lt;br /&gt;
*[http://books.google.com/books?id=VQaf_vOTDzMC&amp;amp;pg=PA244&amp;amp;lpg=PA244&amp;amp;dq=%22language+centric%22+%22model-centric%22+%22responsibility+centric%22+object+oriented+design&amp;amp;source=bl&amp;amp;ots=tY3C6nStiA&amp;amp;sig=bEO2VyjGTobxQ362Yaubi542ZTc&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ei=f3KFUJ2-D4Ho8QTC_IHQBA&amp;amp;ved=0CEMQ6AEwAg#v=onepage&amp;amp;q=%22language%20centric%22%20%22model-centric%22%20%22responsibility%20centric%22%20object%20oriented%20design&amp;amp;f=false Flexible,Reliable Software using Patterns and Agile Development]&lt;br /&gt;
*[http://books.google.com/books?id=YnGz2ghKF-gC&amp;amp;pg=PA60&amp;amp;lpg=PA60&amp;amp;dq=%22language-centric%22+object+oriented+design&amp;amp;source=bl&amp;amp;ots=ko8xV4SZJs&amp;amp;sig=yemCujDGu_BEySZ_k32Kc0KVbgM&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ei=K8WFUOykNYW89gTcx4GQAg&amp;amp;ved=0CFEQ6AEwBA#v=onepage&amp;amp;q=%22language-centric%22%20object%20oriented%20design&amp;amp;f=false Jibitesh Mishra, Ashok Mohanty, &amp;lt;i&amp;gt;&amp;quot;Software Engineering&amp;quot;&amp;lt;/i&amp;gt;]&lt;br /&gt;
*[http://web.engr.oregonstate.edu/~budd/Books/oopintro3e/info/ReadMe.html An Introduction to Object Oriented Programming]&lt;/div&gt;</summary>
		<author><name>Rchakar</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w15_rr&amp;diff=67995</id>
		<title>CSC/ECE 517 Fall 2012/ch2a 2w15 rr</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w15_rr&amp;diff=67995"/>
		<updated>2012-10-23T06:52:29Z</updated>

		<summary type="html">&lt;p&gt;Rchakar: /* Responsibilities */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
Object-oriented design is a programming model that began in the late 60's as software programs became more complex. The idea behind the approach was to build software systems by modeling them based on the real-world objects that they were trying to represent. For example, banking systems would contain customer objects, account objects and so on. Today, object-oriented design has been widely adopted &amp;lt;ref&amp;gt; [http://www.objectmentor.com/omSolutions/oops_what.html Introduction to Object Oriented Design]&amp;lt;/ref&amp;gt;. When done properly, this approach leads to simple, robust, flexible and modular software. When something goes wrong, the results could be bad. Object oriented design can be seen from different perspectives. In the language-centric perspective, objects are containers of data and methods. The model-centric perspective views the objects as model elements reflecting the real world objects and Responsibility-centric perspective views objects as interacting elements each playing a role in object community. Each of these perspectives are outlined in the following sections.&lt;br /&gt;
&lt;br /&gt;
==Background==&lt;br /&gt;
The history of object oriented design has many branches, and many people have contributed to this domain. The 1960s and 1970s saw the emergence of object oriented programming languages, such as Simula and Smalltalk, with key contributors such as Kristen Nygaard and Alan Kay, the visionary computer scientist who founded Smalltalk.&amp;lt;ref&amp;gt;[http://www.informit.com/articles/article.aspx?p=360440&amp;amp;seqNum=8 History of Object Oriented Design]&amp;lt;/ref&amp;gt;&lt;br /&gt;
But object oriented design was informal through that period, and it was only form 1982 that it became popular.  Contributors in this domain include Grady Booch, Kent Beck, Peter Coad, Don Firesmith, Ivar Jacobson (a UML founder), Steve Mellor, Bertrand Meyer, Jim Rumbaugh (a UML founder) and Rebecca Wirfs-Brock among others. Each of these perspectives are outlined in the following sections.&lt;br /&gt;
&lt;br /&gt;
==Object Oriented Design Perspectives==&lt;br /&gt;
===Language-centric perspective===&lt;br /&gt;
The focus of the language-centric perspective is classes and objects as building blocks for developing software. The emphasis is on the internal structure which are the fields and methods. Thus it is inherently a compile-time or static view which means that the definition speaks in terms of what it looks like in the following code:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
public class foo&lt;br /&gt;
{&lt;br /&gt;
 private int x;&lt;br /&gt;
 public static double y;&lt;br /&gt;
&lt;br /&gt;
 public int double (int x)&lt;br /&gt;
 {&lt;br /&gt;
   return (3*x);&lt;br /&gt;
 }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The implicit aspect of this view is that, an object is an entity in its own right and the definition is closed. Any object can be understood in isolation where the fields and methods are just enumerated. The advantage of this perspective is of that it is very concrete, closely related to the programming language level and therefore it is easy to understand. The disadvantage is that it does not help to structure the collaboration between objects, the dynamics, and this is typically where the hard challenges of design lie. Thus the perspective offers little guidance in the process of designing any realistic system.&amp;lt;ref&amp;gt;[https://docs.google.com/viewer?a=v&amp;amp;q=cache:Kl7VOfRFnNEJ:citeseerx.ist.psu.edu/viewdoc/download%3Fdoi%3D10.1.1.86.7500%26rep%3Drep1%26type%3Dpdf+%22language+centric%22+object+oriented+design&amp;amp;hl=en&amp;amp;gl=us&amp;amp;pid=bl&amp;amp;srcid=ADGEESj-HffIDcwsyYlGssvRYS3OAEloLCID6dCIHQeZ_WQ5W-fy9B3rC4uxbUKVBGzyPVn4uBra4ot0hCS71JC3NNy7nBVXRxzR4z06p3fVQKSIjn5t_fFr3dzrMICa5qNUVRnYHEAv&amp;amp;sig=AHIEtbRX7G0XgBl1mKxnPINiorZvNhW32Q Henrik Baerbak Christensen, &amp;lt;i&amp;gt;&amp;quot;Implications of Perspective in Teaching Objects First and Object Design&amp;quot;&amp;lt;/i&amp;gt;, Proceedings of the 10th annual &amp;lt;i&amp;gt;SIGCSE&amp;lt;/i&amp;gt; conference on Innovation and technology in computer science education, Department of Computer Science, University of Aarhus, 2005.]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Model-centric perspective===&lt;br /&gt;
In this perspective, the objects(classes, fields) and their relationships like inheritance, association, aggregation are designed by using some model. Here the program execution is a simulation of some part of the&lt;br /&gt;
world, and objects are perceived as the parts of the model. The perspective is often explained through analogies to other models like toy railways, traffic simulations, computer games, etc. This perspective stresses objects as entities in a larger context (they are parts of a model) as opposed to the self-contained language-centric definition. This approach works fine for real life systems such as an order-entry system, a library system, boat-rental and various other real world entity oriented systems. This naturally leads to a strong focus on what the relations are between the parts: association, generalization, composition. Dynamics is an inherent part of the concept simulation and the explicit guideline for designing object interaction is to imitate real world or model interactions.&lt;br /&gt;
Let us consider a real world example of designing a partial implementation of the board game-Backgammon to understand the objected oriented using a model-centric perspective. The physical parts of Backgammon identifiable are the checkers, points, board, dice, player, etc. The diagram below is a design of model parts (classes) and their relationships (relations).&lt;br /&gt;
&lt;br /&gt;
===Responsibility-centric perspective===&lt;br /&gt;
This perspective stresses on the behavior of software systems and the concepts used to do design include behavior, roles, responsibilities and protocol. Here, the primary focus is the dynamics of the program. Roles and responsibilities are the core concepts in this perspective and hence it has more coupling to behavior when compared to static elements like objects or model parts. There is a difference between behavior and responsibility, where behavior is the concrete actions taken by objects where as responsibility is to fulfill requests through any number of concrete behaviors. So, responsibility is more abstract than behavior.&lt;br /&gt;
One can look at responsibility-centric perspective as an extension of the model-centric perspective with a shift of focus (from a focus on model parts to a focus on the simulation or dynamical aspects). The Backgammon example can again be&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Object Oriented Design Concepts &amp;lt;ref&amp;gt;http://books.google.com/books/about/Object_Design.html?id=vUF72vN5MY8C&amp;lt;/ref&amp;gt;==&lt;br /&gt;
[[File:AnObject.jpg|350px|right|thumb|An object encapsulates scripts and information&amp;lt;ref&amp;gt;http://books.google.com/books?id=vUF72vN5MY8C&amp;amp;pg=PA2&amp;amp;source=gbs_toc_r&amp;amp;cad=4#v=onepage&amp;amp;q&amp;amp;f=false Object Design: Roles, Responsibilities, and Collaborations by Rebecca Wirfs-Brock, Alan McKean&amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
A software application is constructed from parts. These parts -software objects- interact by sending messages to request information or action from others. Throughout its lifetime, each object remains responsible for responding to a fixed set of requests. To fulfill these requests, objects encapsulate scripted responses and the information that they base them on (see Figure 4a). If an object is designed to remember certain facts, it can use them to respond differently to future requests.&lt;br /&gt;
&lt;br /&gt;
Building an object-oriented application means inventing appropriate machinery. We represent real-world information, processes, interactions, relationships, even errors, by inventing objects that don't exist in the real world. We give life and intelligence to inanimate things. We take difficult-to-comprehend real-world objects and split them into simpler, more manageable software ones. We invent new objects. Each has a specific role to play in the application. Our measure of success lies in how clearly we invent a software reality that satisfies our application's requirements—and not in how closely it resembles the real world.&amp;lt;ref&amp;gt;http://books.google.com/books?id=vUF72vN5MY8C&amp;amp;pg=PA3&amp;amp;source=gbs_toc_r&amp;amp;cad=4#v=onepage&amp;amp;q&amp;amp;f=false Object Design: Roles, Responsibilities, and Collaborations by Rebecca Wirfs-Brock, Alan McKean&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''For example''', filling out and filing a form seems simple. But to perform that task in software, behind the simple forms, the application is validating the data against business rules, reading and refreshing the persistent data, guaranteeing the consistency of the information, and managing simultaneous access by dozens of users. Software objects display information, coordinate activities, compute, or connect to services.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Concept&lt;br /&gt;
! Short description&lt;br /&gt;
|-&lt;br /&gt;
|An object || an implementation of one or more roles.&lt;br /&gt;
|-&lt;br /&gt;
|A role || a set of related responsibilities.&lt;br /&gt;
|-&lt;br /&gt;
|A responsibility || an obligation to perform a task or know information&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Roles ''(relation with objects)'' ===&lt;br /&gt;
An object has a specific purpose - a role it plays within a given context. Objects that play the same role can be interchanged. For example, there are several providers that can deliver letters and packages: DHL, FedEx, UPS, Post, Airborne. They all have the same purpose, if not the same way of carrying out their business. We choose from among them according to the requirements that you have for delivery. We pick among the mail carriers that meet your requirements.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre-wrap; &lt;br /&gt;
white-space: -moz-pre-wrap;&lt;br /&gt;
white-space: -pre-wrap;&lt;br /&gt;
white-space: -o-pre-wrap; &lt;br /&gt;
word-wrap: break-word&amp;quot;&amp;gt;&lt;br /&gt;
A role is a set of responsibilities that can be used interchangeably.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A well-defined object supports a clearly defined role. We use purposeful oversimplifications, or role stereotypes, to help focus an object's responsibilities. Stereotypes are characterizations of the roles needed by an application. Because our goal is to build consistent and easy-to-use objects, it is advantageous to stereotype objects, ignoring specifics of their behaviors and thinking about them at a higher level. By oversimplifying and characterizing it, we can ponder the nature of an object's role more easily. We find these stereotypes to be useful:&lt;br /&gt;
*Information holder - knows and provides information&lt;br /&gt;
*Structurer - maintains relationships between objects and information about those relationships&lt;br /&gt;
*Service provider - performs work and, in general, offers computing services&lt;br /&gt;
*Coordinator - reacts to events by delegating tasks to others&lt;br /&gt;
*Controller - makes decisions and closely directs others' actions&lt;br /&gt;
*Interfacer - transforms information and requests between distinct parts of our system&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre-wrap; &lt;br /&gt;
white-space: -moz-pre-wrap;&lt;br /&gt;
white-space: -pre-wrap;&lt;br /&gt;
white-space: -o-pre-wrap; &lt;br /&gt;
word-wrap: break-word&amp;quot;&amp;gt;&lt;br /&gt;
Just as an actor tries to play a believable part in a play, an object takes on a character in an application by assuming responsibilities that define a meaningful role.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Responsibilities ===&lt;br /&gt;
An application implements a system of responsibilities. Responsibilities are assigned to roles. Roles collaborate to carry out their responsibilities. A good application is structured to effectively fulfill these responsibilities. We start design by inventing objects, assigning responsibilities to them for knowing information and doing the application's work. Collectively, these objects work together to fulfill the larger responsibilities of the application.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre-wrap; &lt;br /&gt;
white-space: -moz-pre-wrap;&lt;br /&gt;
white-space: -pre-wrap;&lt;br /&gt;
white-space: -o-pre-wrap; &lt;br /&gt;
word-wrap: break-word&amp;quot;&amp;gt;&lt;br /&gt;
An object embodies a set of roles with a designated set of responsibilities.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Responsibilities are general statements about software objects. They include three major items:&lt;br /&gt;
*The actions an object performs&lt;br /&gt;
*The knowledge an object maintains&lt;br /&gt;
*Major decisions an object makes that affect others&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre-wrap; &lt;br /&gt;
white-space: -moz-pre-wrap;&lt;br /&gt;
white-space: -pre-wrap;&lt;br /&gt;
white-space: -o-pre-wrap; &lt;br /&gt;
word-wrap: break-word&amp;quot;&amp;gt;&lt;br /&gt;
Physical objects, unlike our intelligent software objects, typically do work or hold on to things or information. A phone book is a physical object but it takes no action. A thermostat exists, and it makes decisions and sends control signals. A teakettle exists, but it does little more than act as a reservoir (and occasionally whistles to send a signal). Physical objects usually don't make informed decisions. However, a dog is man's best friend and companion and does many different things on its own behalf. Our software objects lie somewhere between these extremes: They aren't sentient beings, but they can be more or less lively, depending on what responsibilities we give them.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Behavior ===&lt;br /&gt;
&lt;br /&gt;
=== Protocols ===&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
==Additional Reading==&lt;br /&gt;
*[http://books.google.com/books?id=VQaf_vOTDzMC&amp;amp;pg=PA244&amp;amp;lpg=PA244&amp;amp;dq=%22language+centric%22+%22model-centric%22+%22responsibility+centric%22+object+oriented+design&amp;amp;source=bl&amp;amp;ots=tY3C6nStiA&amp;amp;sig=bEO2VyjGTobxQ362Yaubi542ZTc&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ei=f3KFUJ2-D4Ho8QTC_IHQBA&amp;amp;ved=0CEMQ6AEwAg#v=onepage&amp;amp;q=%22language%20centric%22%20%22model-centric%22%20%22responsibility%20centric%22%20object%20oriented%20design&amp;amp;f=false Flexible,Reliable Software using Patterns and Agile Development]&lt;br /&gt;
*[http://books.google.com/books?id=YnGz2ghKF-gC&amp;amp;pg=PA60&amp;amp;lpg=PA60&amp;amp;dq=%22language-centric%22+object+oriented+design&amp;amp;source=bl&amp;amp;ots=ko8xV4SZJs&amp;amp;sig=yemCujDGu_BEySZ_k32Kc0KVbgM&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ei=K8WFUOykNYW89gTcx4GQAg&amp;amp;ved=0CFEQ6AEwBA#v=onepage&amp;amp;q=%22language-centric%22%20object%20oriented%20design&amp;amp;f=false Jibitesh Mishra, Ashok Mohanty, &amp;lt;i&amp;gt;&amp;quot;Software Engineering&amp;quot;&amp;lt;/i&amp;gt;]&lt;br /&gt;
*[http://web.engr.oregonstate.edu/~budd/Books/oopintro3e/info/ReadMe.html An Introduction to Object Oriented Programming]&lt;/div&gt;</summary>
		<author><name>Rchakar</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w15_rr&amp;diff=67994</id>
		<title>CSC/ECE 517 Fall 2012/ch2a 2w15 rr</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w15_rr&amp;diff=67994"/>
		<updated>2012-10-23T06:49:46Z</updated>

		<summary type="html">&lt;p&gt;Rchakar: /* Object Oriented Design Concepts http://books.google.com/books/about/Object_Design.html?id=vUF72vN5MY8C */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
Object-oriented design is a programming model that began in the late 60's as software programs became more complex. The idea behind the approach was to build software systems by modeling them based on the real-world objects that they were trying to represent. For example, banking systems would contain customer objects, account objects and so on. Today, object-oriented design has been widely adopted &amp;lt;ref&amp;gt; [http://www.objectmentor.com/omSolutions/oops_what.html Introduction to Object Oriented Design]&amp;lt;/ref&amp;gt;. When done properly, this approach leads to simple, robust, flexible and modular software. When something goes wrong, the results could be bad. Object oriented design can be seen from different perspectives. In the language-centric perspective, objects are containers of data and methods. The model-centric perspective views the objects as model elements reflecting the real world objects and Responsibility-centric perspective views objects as interacting elements each playing a role in object community. Each of these perspectives are outlined in the following sections.&lt;br /&gt;
&lt;br /&gt;
==Background==&lt;br /&gt;
The history of object oriented design has many branches, and many people have contributed to this domain. The 1960s and 1970s saw the emergence of object oriented programming languages, such as Simula and Smalltalk, with key contributors such as Kristen Nygaard and Alan Kay, the visionary computer scientist who founded Smalltalk.&amp;lt;ref&amp;gt;[http://www.informit.com/articles/article.aspx?p=360440&amp;amp;seqNum=8 History of Object Oriented Design]&amp;lt;/ref&amp;gt;&lt;br /&gt;
But object oriented design was informal through that period, and it was only form 1982 that it became popular.  Contributors in this domain include Grady Booch, Kent Beck, Peter Coad, Don Firesmith, Ivar Jacobson (a UML founder), Steve Mellor, Bertrand Meyer, Jim Rumbaugh (a UML founder) and Rebecca Wirfs-Brock among others. Each of these perspectives are outlined in the following sections.&lt;br /&gt;
&lt;br /&gt;
==Object Oriented Design Perspectives==&lt;br /&gt;
===Language-centric perspective===&lt;br /&gt;
The focus of the language-centric perspective is classes and objects as building blocks for developing software. The emphasis is on the internal structure which are the fields and methods. Thus it is inherently a compile-time or static view which means that the definition speaks in terms of what it looks like in the following code:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
public class foo&lt;br /&gt;
{&lt;br /&gt;
 private int x;&lt;br /&gt;
 public static double y;&lt;br /&gt;
&lt;br /&gt;
 public int double (int x)&lt;br /&gt;
 {&lt;br /&gt;
   return (3*x);&lt;br /&gt;
 }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The implicit aspect of this view is that, an object is an entity in its own right and the definition is closed. Any object can be understood in isolation where the fields and methods are just enumerated. The advantage of this perspective is of that it is very concrete, closely related to the programming language level and therefore it is easy to understand. The disadvantage is that it does not help to structure the collaboration between objects, the dynamics, and this is typically where the hard challenges of design lie. Thus the perspective offers little guidance in the process of designing any realistic system.&amp;lt;ref&amp;gt;[https://docs.google.com/viewer?a=v&amp;amp;q=cache:Kl7VOfRFnNEJ:citeseerx.ist.psu.edu/viewdoc/download%3Fdoi%3D10.1.1.86.7500%26rep%3Drep1%26type%3Dpdf+%22language+centric%22+object+oriented+design&amp;amp;hl=en&amp;amp;gl=us&amp;amp;pid=bl&amp;amp;srcid=ADGEESj-HffIDcwsyYlGssvRYS3OAEloLCID6dCIHQeZ_WQ5W-fy9B3rC4uxbUKVBGzyPVn4uBra4ot0hCS71JC3NNy7nBVXRxzR4z06p3fVQKSIjn5t_fFr3dzrMICa5qNUVRnYHEAv&amp;amp;sig=AHIEtbRX7G0XgBl1mKxnPINiorZvNhW32Q Henrik Baerbak Christensen, &amp;lt;i&amp;gt;&amp;quot;Implications of Perspective in Teaching Objects First and Object Design&amp;quot;&amp;lt;/i&amp;gt;, Proceedings of the 10th annual &amp;lt;i&amp;gt;SIGCSE&amp;lt;/i&amp;gt; conference on Innovation and technology in computer science education, Department of Computer Science, University of Aarhus, 2005.]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Model-centric perspective===&lt;br /&gt;
In this perspective, the objects(classes, fields) and their relationships like inheritance, association, aggregation are designed by using some model. Here the program execution is a simulation of some part of the&lt;br /&gt;
world, and objects are perceived as the parts of the model. The perspective is often explained through analogies to other models like toy railways, traffic simulations, computer games, etc. This perspective stresses objects as entities in a larger context (they are parts of a model) as opposed to the self-contained language-centric definition. This approach works fine for real life systems such as an order-entry system, a library system, boat-rental and various other real world entity oriented systems. This naturally leads to a strong focus on what the relations are between the parts: association, generalization, composition. Dynamics is an inherent part of the concept simulation and the explicit guideline for designing object interaction is to imitate real world or model interactions.&lt;br /&gt;
Let us consider a real world example of designing a partial implementation of the board game-Backgammon to understand the objected oriented using a model-centric perspective. The physical parts of Backgammon identifiable are the checkers, points, board, dice, player, etc. The diagram below is a design of model parts (classes) and their relationships (relations).&lt;br /&gt;
&lt;br /&gt;
===Responsibility-centric perspective===&lt;br /&gt;
This perspective stresses on the behavior of software systems and the concepts used to do design include behavior, roles, responsibilities and protocol. Here, the primary focus is the dynamics of the program. Roles and responsibilities are the core concepts in this perspective and hence it has more coupling to behavior when compared to static elements like objects or model parts. There is a difference between behavior and responsibility, where behavior is the concrete actions taken by objects where as responsibility is to fulfill requests through any number of concrete behaviors. So, responsibility is more abstract than behavior.&lt;br /&gt;
One can look at responsibility-centric perspective as an extension of the model-centric perspective with a shift of focus (from a focus on model parts to a focus on the simulation or dynamical aspects). The Backgammon example can again be&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Object Oriented Design Concepts &amp;lt;ref&amp;gt;http://books.google.com/books/about/Object_Design.html?id=vUF72vN5MY8C&amp;lt;/ref&amp;gt;==&lt;br /&gt;
[[File:AnObject.jpg|350px|right|thumb|An object encapsulates scripts and information&amp;lt;ref&amp;gt;http://books.google.com/books?id=vUF72vN5MY8C&amp;amp;pg=PA2&amp;amp;source=gbs_toc_r&amp;amp;cad=4#v=onepage&amp;amp;q&amp;amp;f=false Object Design: Roles, Responsibilities, and Collaborations by Rebecca Wirfs-Brock, Alan McKean&amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
A software application is constructed from parts. These parts -software objects- interact by sending messages to request information or action from others. Throughout its lifetime, each object remains responsible for responding to a fixed set of requests. To fulfill these requests, objects encapsulate scripted responses and the information that they base them on (see Figure 4a). If an object is designed to remember certain facts, it can use them to respond differently to future requests.&lt;br /&gt;
&lt;br /&gt;
Building an object-oriented application means inventing appropriate machinery. We represent real-world information, processes, interactions, relationships, even errors, by inventing objects that don't exist in the real world. We give life and intelligence to inanimate things. We take difficult-to-comprehend real-world objects and split them into simpler, more manageable software ones. We invent new objects. Each has a specific role to play in the application. Our measure of success lies in how clearly we invent a software reality that satisfies our application's requirements—and not in how closely it resembles the real world.&amp;lt;ref&amp;gt;http://books.google.com/books?id=vUF72vN5MY8C&amp;amp;pg=PA3&amp;amp;source=gbs_toc_r&amp;amp;cad=4#v=onepage&amp;amp;q&amp;amp;f=false Object Design: Roles, Responsibilities, and Collaborations by Rebecca Wirfs-Brock, Alan McKean&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''For example''', filling out and filing a form seems simple. But to perform that task in software, behind the simple forms, the application is validating the data against business rules, reading and refreshing the persistent data, guaranteeing the consistency of the information, and managing simultaneous access by dozens of users. Software objects display information, coordinate activities, compute, or connect to services.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Concept&lt;br /&gt;
! Short description&lt;br /&gt;
|-&lt;br /&gt;
|An object || an implementation of one or more roles.&lt;br /&gt;
|-&lt;br /&gt;
|A role || a set of related responsibilities.&lt;br /&gt;
|-&lt;br /&gt;
|A responsibility || an obligation to perform a task or know information&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Roles ''(relation with objects)'' ===&lt;br /&gt;
An object has a specific purpose - a role it plays within a given context. Objects that play the same role can be interchanged. For example, there are several providers that can deliver letters and packages: DHL, FedEx, UPS, Post, Airborne. They all have the same purpose, if not the same way of carrying out their business. We choose from among them according to the requirements that you have for delivery. We pick among the mail carriers that meet your requirements.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre-wrap; &lt;br /&gt;
white-space: -moz-pre-wrap;&lt;br /&gt;
white-space: -pre-wrap;&lt;br /&gt;
white-space: -o-pre-wrap; &lt;br /&gt;
word-wrap: break-word&amp;quot;&amp;gt;&lt;br /&gt;
A role is a set of responsibilities that can be used interchangeably.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A well-defined object supports a clearly defined role. We use purposeful oversimplifications, or role stereotypes, to help focus an object's responsibilities. Stereotypes are characterizations of the roles needed by an application. Because our goal is to build consistent and easy-to-use objects, it is advantageous to stereotype objects, ignoring specifics of their behaviors and thinking about them at a higher level. By oversimplifying and characterizing it, we can ponder the nature of an object's role more easily. We find these stereotypes to be useful:&lt;br /&gt;
*Information holder - knows and provides information&lt;br /&gt;
*Structurer - maintains relationships between objects and information about those relationships&lt;br /&gt;
*Service provider - performs work and, in general, offers computing services&lt;br /&gt;
*Coordinator - reacts to events by delegating tasks to others&lt;br /&gt;
*Controller - makes decisions and closely directs others' actions&lt;br /&gt;
*Interfacer - transforms information and requests between distinct parts of our system&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre-wrap; &lt;br /&gt;
white-space: -moz-pre-wrap;&lt;br /&gt;
white-space: -pre-wrap;&lt;br /&gt;
white-space: -o-pre-wrap; &lt;br /&gt;
word-wrap: break-word&amp;quot;&amp;gt;&lt;br /&gt;
Just as an actor tries to play a believable part in a play, an object takes on a character in an application by assuming responsibilities that define a meaningful role.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Responsibilities ===&lt;br /&gt;
&lt;br /&gt;
Responsibilities are general statements about software objects. They include three major items:&lt;br /&gt;
*The actions an object performs&lt;br /&gt;
*The knowledge an object maintains&lt;br /&gt;
*Major decisions an object makes that affect others&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre-wrap; &lt;br /&gt;
white-space: -moz-pre-wrap;&lt;br /&gt;
white-space: -pre-wrap;&lt;br /&gt;
white-space: -o-pre-wrap; &lt;br /&gt;
word-wrap: break-word&amp;quot;&amp;gt;&lt;br /&gt;
Physical objects, unlike our intelligent software objects, typically do work or hold on to things or information. A phone book is a physical object but it takes no action. A thermostat exists, and it makes decisions and sends control signals. A teakettle exists, but it does little more than act as a reservoir (and occasionally whistles to send a signal). Physical objects usually don't make informed decisions. However, a dog is man's best friend and companion and does many different things on its own behalf. Our software objects lie somewhere between these extremes: They aren't sentient beings, but they can be more or less lively, depending on what responsibilities we give them.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Behavior ===&lt;br /&gt;
&lt;br /&gt;
=== Protocols ===&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
==Additional Reading==&lt;br /&gt;
*[http://books.google.com/books?id=VQaf_vOTDzMC&amp;amp;pg=PA244&amp;amp;lpg=PA244&amp;amp;dq=%22language+centric%22+%22model-centric%22+%22responsibility+centric%22+object+oriented+design&amp;amp;source=bl&amp;amp;ots=tY3C6nStiA&amp;amp;sig=bEO2VyjGTobxQ362Yaubi542ZTc&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ei=f3KFUJ2-D4Ho8QTC_IHQBA&amp;amp;ved=0CEMQ6AEwAg#v=onepage&amp;amp;q=%22language%20centric%22%20%22model-centric%22%20%22responsibility%20centric%22%20object%20oriented%20design&amp;amp;f=false Flexible,Reliable Software using Patterns and Agile Development]&lt;br /&gt;
*[http://books.google.com/books?id=YnGz2ghKF-gC&amp;amp;pg=PA60&amp;amp;lpg=PA60&amp;amp;dq=%22language-centric%22+object+oriented+design&amp;amp;source=bl&amp;amp;ots=ko8xV4SZJs&amp;amp;sig=yemCujDGu_BEySZ_k32Kc0KVbgM&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ei=K8WFUOykNYW89gTcx4GQAg&amp;amp;ved=0CFEQ6AEwBA#v=onepage&amp;amp;q=%22language-centric%22%20object%20oriented%20design&amp;amp;f=false Jibitesh Mishra, Ashok Mohanty, &amp;lt;i&amp;gt;&amp;quot;Software Engineering&amp;quot;&amp;lt;/i&amp;gt;]&lt;br /&gt;
*[http://web.engr.oregonstate.edu/~budd/Books/oopintro3e/info/ReadMe.html An Introduction to Object Oriented Programming]&lt;/div&gt;</summary>
		<author><name>Rchakar</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w15_rr&amp;diff=67993</id>
		<title>CSC/ECE 517 Fall 2012/ch2a 2w15 rr</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w15_rr&amp;diff=67993"/>
		<updated>2012-10-23T06:49:26Z</updated>

		<summary type="html">&lt;p&gt;Rchakar: /* Responsibilities */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
Object-oriented design is a programming model that began in the late 60's as software programs became more complex. The idea behind the approach was to build software systems by modeling them based on the real-world objects that they were trying to represent. For example, banking systems would contain customer objects, account objects and so on. Today, object-oriented design has been widely adopted &amp;lt;ref&amp;gt; [http://www.objectmentor.com/omSolutions/oops_what.html Introduction to Object Oriented Design]&amp;lt;/ref&amp;gt;. When done properly, this approach leads to simple, robust, flexible and modular software. When something goes wrong, the results could be bad. Object oriented design can be seen from different perspectives. In the language-centric perspective, objects are containers of data and methods. The model-centric perspective views the objects as model elements reflecting the real world objects and Responsibility-centric perspective views objects as interacting elements each playing a role in object community. Each of these perspectives are outlined in the following sections.&lt;br /&gt;
&lt;br /&gt;
==Background==&lt;br /&gt;
The history of object oriented design has many branches, and many people have contributed to this domain. The 1960s and 1970s saw the emergence of object oriented programming languages, such as Simula and Smalltalk, with key contributors such as Kristen Nygaard and Alan Kay, the visionary computer scientist who founded Smalltalk.&amp;lt;ref&amp;gt;[http://www.informit.com/articles/article.aspx?p=360440&amp;amp;seqNum=8 History of Object Oriented Design]&amp;lt;/ref&amp;gt;&lt;br /&gt;
But object oriented design was informal through that period, and it was only form 1982 that it became popular.  Contributors in this domain include Grady Booch, Kent Beck, Peter Coad, Don Firesmith, Ivar Jacobson (a UML founder), Steve Mellor, Bertrand Meyer, Jim Rumbaugh (a UML founder) and Rebecca Wirfs-Brock among others. Each of these perspectives are outlined in the following sections.&lt;br /&gt;
&lt;br /&gt;
==Object Oriented Design Perspectives==&lt;br /&gt;
===Language-centric perspective===&lt;br /&gt;
The focus of the language-centric perspective is classes and objects as building blocks for developing software. The emphasis is on the internal structure which are the fields and methods. Thus it is inherently a compile-time or static view which means that the definition speaks in terms of what it looks like in the following code:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
public class foo&lt;br /&gt;
{&lt;br /&gt;
 private int x;&lt;br /&gt;
 public static double y;&lt;br /&gt;
&lt;br /&gt;
 public int double (int x)&lt;br /&gt;
 {&lt;br /&gt;
   return (3*x);&lt;br /&gt;
 }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The implicit aspect of this view is that, an object is an entity in its own right and the definition is closed. Any object can be understood in isolation where the fields and methods are just enumerated. The advantage of this perspective is of that it is very concrete, closely related to the programming language level and therefore it is easy to understand. The disadvantage is that it does not help to structure the collaboration between objects, the dynamics, and this is typically where the hard challenges of design lie. Thus the perspective offers little guidance in the process of designing any realistic system.&amp;lt;ref&amp;gt;[https://docs.google.com/viewer?a=v&amp;amp;q=cache:Kl7VOfRFnNEJ:citeseerx.ist.psu.edu/viewdoc/download%3Fdoi%3D10.1.1.86.7500%26rep%3Drep1%26type%3Dpdf+%22language+centric%22+object+oriented+design&amp;amp;hl=en&amp;amp;gl=us&amp;amp;pid=bl&amp;amp;srcid=ADGEESj-HffIDcwsyYlGssvRYS3OAEloLCID6dCIHQeZ_WQ5W-fy9B3rC4uxbUKVBGzyPVn4uBra4ot0hCS71JC3NNy7nBVXRxzR4z06p3fVQKSIjn5t_fFr3dzrMICa5qNUVRnYHEAv&amp;amp;sig=AHIEtbRX7G0XgBl1mKxnPINiorZvNhW32Q Henrik Baerbak Christensen, &amp;lt;i&amp;gt;&amp;quot;Implications of Perspective in Teaching Objects First and Object Design&amp;quot;&amp;lt;/i&amp;gt;, Proceedings of the 10th annual &amp;lt;i&amp;gt;SIGCSE&amp;lt;/i&amp;gt; conference on Innovation and technology in computer science education, Department of Computer Science, University of Aarhus, 2005.]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Model-centric perspective===&lt;br /&gt;
In this perspective, the objects(classes, fields) and their relationships like inheritance, association, aggregation are designed by using some model. Here the program execution is a simulation of some part of the&lt;br /&gt;
world, and objects are perceived as the parts of the model. The perspective is often explained through analogies to other models like toy railways, traffic simulations, computer games, etc. This perspective stresses objects as entities in a larger context (they are parts of a model) as opposed to the self-contained language-centric definition. This approach works fine for real life systems such as an order-entry system, a library system, boat-rental and various other real world entity oriented systems. This naturally leads to a strong focus on what the relations are between the parts: association, generalization, composition. Dynamics is an inherent part of the concept simulation and the explicit guideline for designing object interaction is to imitate real world or model interactions.&lt;br /&gt;
Let us consider a real world example of designing a partial implementation of the board game-Backgammon to understand the objected oriented using a model-centric perspective. The physical parts of Backgammon identifiable are the checkers, points, board, dice, player, etc. The diagram below is a design of model parts (classes) and their relationships (relations).&lt;br /&gt;
&lt;br /&gt;
===Responsibility-centric perspective===&lt;br /&gt;
This perspective stresses on the behavior of software systems and the concepts used to do design include behavior, roles, responsibilities and protocol. Here, the primary focus is the dynamics of the program. Roles and responsibilities are the core concepts in this perspective and hence it has more coupling to behavior when compared to static elements like objects or model parts. There is a difference between behavior and responsibility, where behavior is the concrete actions taken by objects where as responsibility is to fulfill requests through any number of concrete behaviors. So, responsibility is more abstract than behavior.&lt;br /&gt;
One can look at responsibility-centric perspective as an extension of the model-centric perspective with a shift of focus (from a focus on model parts to a focus on the simulation or dynamical aspects). The Backgammon example can again be&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Object Oriented Design Concepts &amp;lt;ref&amp;gt;http://books.google.com/books/about/Object_Design.html?id=vUF72vN5MY8C&amp;lt;/ref&amp;gt;==&lt;br /&gt;
[[File:AnObject.jpg|350px|right|thumb|An object encapsulates scripts and information&amp;lt;ref&amp;gt;http://books.google.com/books?id=vUF72vN5MY8C&amp;amp;pg=PA2&amp;amp;source=gbs_toc_r&amp;amp;cad=4#v=onepage&amp;amp;q&amp;amp;f=false Object Design: Roles, Responsibilities, and Collaborations by Rebecca Wirfs-Brock, Alan McKean&amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
A software application is constructed from parts. These parts -software objects- interact by sending messages to request information or action from others. Throughout its lifetime, each object remains responsible for responding to a fixed set of requests. To fulfill these requests, objects encapsulate scripted responses and the information that they base them on (see Figure 4a). If an object is designed to remember certain facts, it can use them to respond differently to future requests.&lt;br /&gt;
&lt;br /&gt;
Building an object-oriented application means inventing appropriate machinery. We represent real-world information, processes, interactions, relationships, even errors, by inventing objects that don't exist in the real world. We give life and intelligence to inanimate things. We take difficult-to-comprehend real-world objects and split them into simpler, more manageable software ones. We invent new objects. Each has a specific role to play in the application. Our measure of success lies in how clearly we invent a software reality that satisfies our application's requirements—and not in how closely it resembles the real world.&amp;lt;ref&amp;gt;http://books.google.com/books?id=vUF72vN5MY8C&amp;amp;pg=PA3&amp;amp;source=gbs_toc_r&amp;amp;cad=4#v=onepage&amp;amp;q&amp;amp;f=false Object Design: Roles, Responsibilities, and Collaborations by Rebecca Wirfs-Brock, Alan McKean&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''For example''', filling out and filing a form seems simple. But to perform that task in software, behind the simple forms, the application is validating the data against business rules, reading and refreshing the persistent data, guaranteeing the consistency of the information, and managing simultaneous access by dozens of users. Software objects display information, coordinate activities, compute, or connect to services.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Concept&lt;br /&gt;
! Short description&lt;br /&gt;
|-&lt;br /&gt;
|An object || an implementation of one or more roles.&lt;br /&gt;
|-&lt;br /&gt;
|A role || a set of related responsibilities.&lt;br /&gt;
|-&lt;br /&gt;
|A responsibility || an obligation to perform a task or know information&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Roles ''(relation with objects)'' ===&lt;br /&gt;
An object has a specific purpose - a role it plays within a given context. Objects that play the same role can be interchanged. For example, there are several providers that can deliver letters and packages: DHL, FedEx, UPS, Post, Airborne. They all have the same purpose, if not the same way of carrying out their business. We choose from among them according to the requirements that you have for delivery. We pick among the mail carriers that meet your requirements.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre-wrap; &lt;br /&gt;
white-space: -moz-pre-wrap;&lt;br /&gt;
white-space: -pre-wrap;&lt;br /&gt;
white-space: -o-pre-wrap; &lt;br /&gt;
word-wrap: break-word&amp;quot;&amp;gt;&lt;br /&gt;
A role is a set of responsibilities that can be used interchangeably.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A well-defined object supports a clearly defined role. We use purposeful oversimplifications, or role stereotypes, to help focus an object's responsibilities. Stereotypes are characterizations of the roles needed by an application. Because our goal is to build consistent and easy-to-use objects, it is advantageous to stereotype objects, ignoring specifics of their behaviors and thinking about them at a higher level. By oversimplifying and characterizing it, we can ponder the nature of an object's role more easily. We find these stereotypes to be useful:&lt;br /&gt;
*Information holder - knows and provides information&lt;br /&gt;
*Structurer - maintains relationships between objects and information about those relationships&lt;br /&gt;
*Service provider - performs work and, in general, offers computing services&lt;br /&gt;
*Coordinator - reacts to events by delegating tasks to others&lt;br /&gt;
*Controller - makes decisions and closely directs others' actions&lt;br /&gt;
*Interfacer - transforms information and requests between distinct parts of our system&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre-wrap; &lt;br /&gt;
white-space: -moz-pre-wrap;&lt;br /&gt;
white-space: -pre-wrap;&lt;br /&gt;
white-space: -o-pre-wrap; &lt;br /&gt;
word-wrap: break-word&amp;quot;&amp;gt;&lt;br /&gt;
Just as an actor tries to play a believable part in a play, an object takes on a character in an application by assuming responsibilities that define a meaningful role.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Responsibilities ===&lt;br /&gt;
&lt;br /&gt;
Responsibilities are general statements about software objects. They include three major items:&lt;br /&gt;
*The actions an object performs&lt;br /&gt;
*The knowledge an object maintains&lt;br /&gt;
*Major decisions an object makes that affect others&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Physical objects, unlike our intelligent software objects, typically do work or hold on to things or information. A phone book is a physical object but it takes no action. A thermostat exists, and it makes decisions and sends control signals. A teakettle exists, but it does little more than act as a reservoir (and occasionally whistles to send a signal). Physical objects usually don't make informed decisions. However, a dog is man's best friend and companion and does many different things on its own behalf. Our software objects lie somewhere between these extremes: They aren't sentient beings, but they can be more or less lively, depending on what responsibilities we give them.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Behavior ===&lt;br /&gt;
&lt;br /&gt;
=== Protocols ===&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
==Additional Reading==&lt;br /&gt;
*[http://books.google.com/books?id=VQaf_vOTDzMC&amp;amp;pg=PA244&amp;amp;lpg=PA244&amp;amp;dq=%22language+centric%22+%22model-centric%22+%22responsibility+centric%22+object+oriented+design&amp;amp;source=bl&amp;amp;ots=tY3C6nStiA&amp;amp;sig=bEO2VyjGTobxQ362Yaubi542ZTc&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ei=f3KFUJ2-D4Ho8QTC_IHQBA&amp;amp;ved=0CEMQ6AEwAg#v=onepage&amp;amp;q=%22language%20centric%22%20%22model-centric%22%20%22responsibility%20centric%22%20object%20oriented%20design&amp;amp;f=false Flexible,Reliable Software using Patterns and Agile Development]&lt;br /&gt;
*[http://books.google.com/books?id=YnGz2ghKF-gC&amp;amp;pg=PA60&amp;amp;lpg=PA60&amp;amp;dq=%22language-centric%22+object+oriented+design&amp;amp;source=bl&amp;amp;ots=ko8xV4SZJs&amp;amp;sig=yemCujDGu_BEySZ_k32Kc0KVbgM&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ei=K8WFUOykNYW89gTcx4GQAg&amp;amp;ved=0CFEQ6AEwBA#v=onepage&amp;amp;q=%22language-centric%22%20object%20oriented%20design&amp;amp;f=false Jibitesh Mishra, Ashok Mohanty, &amp;lt;i&amp;gt;&amp;quot;Software Engineering&amp;quot;&amp;lt;/i&amp;gt;]&lt;br /&gt;
*[http://web.engr.oregonstate.edu/~budd/Books/oopintro3e/info/ReadMe.html An Introduction to Object Oriented Programming]&lt;/div&gt;</summary>
		<author><name>Rchakar</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w15_rr&amp;diff=67992</id>
		<title>CSC/ECE 517 Fall 2012/ch2a 2w15 rr</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w15_rr&amp;diff=67992"/>
		<updated>2012-10-23T06:46:35Z</updated>

		<summary type="html">&lt;p&gt;Rchakar: /* Object Oriented Design Concepts http://books.google.com/books/about/Object_Design.html?id=vUF72vN5MY8C */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
Object-oriented design is a programming model that began in the late 60's as software programs became more complex. The idea behind the approach was to build software systems by modeling them based on the real-world objects that they were trying to represent. For example, banking systems would contain customer objects, account objects and so on. Today, object-oriented design has been widely adopted &amp;lt;ref&amp;gt; [http://www.objectmentor.com/omSolutions/oops_what.html Introduction to Object Oriented Design]&amp;lt;/ref&amp;gt;. When done properly, this approach leads to simple, robust, flexible and modular software. When something goes wrong, the results could be bad. Object oriented design can be seen from different perspectives. In the language-centric perspective, objects are containers of data and methods. The model-centric perspective views the objects as model elements reflecting the real world objects and Responsibility-centric perspective views objects as interacting elements each playing a role in object community. Each of these perspectives are outlined in the following sections.&lt;br /&gt;
&lt;br /&gt;
==Background==&lt;br /&gt;
The history of object oriented design has many branches, and many people have contributed to this domain. The 1960s and 1970s saw the emergence of object oriented programming languages, such as Simula and Smalltalk, with key contributors such as Kristen Nygaard and Alan Kay, the visionary computer scientist who founded Smalltalk.&amp;lt;ref&amp;gt;[http://www.informit.com/articles/article.aspx?p=360440&amp;amp;seqNum=8 History of Object Oriented Design]&amp;lt;/ref&amp;gt;&lt;br /&gt;
But object oriented design was informal through that period, and it was only form 1982 that it became popular.  Contributors in this domain include Grady Booch, Kent Beck, Peter Coad, Don Firesmith, Ivar Jacobson (a UML founder), Steve Mellor, Bertrand Meyer, Jim Rumbaugh (a UML founder) and Rebecca Wirfs-Brock among others. Each of these perspectives are outlined in the following sections.&lt;br /&gt;
&lt;br /&gt;
==Object Oriented Design Perspectives==&lt;br /&gt;
===Language-centric perspective===&lt;br /&gt;
The focus of the language-centric perspective is classes and objects as building blocks for developing software. The emphasis is on the internal structure which are the fields and methods. Thus it is inherently a compile-time or static view which means that the definition speaks in terms of what it looks like in the following code:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
public class foo&lt;br /&gt;
{&lt;br /&gt;
 private int x;&lt;br /&gt;
 public static double y;&lt;br /&gt;
&lt;br /&gt;
 public int double (int x)&lt;br /&gt;
 {&lt;br /&gt;
   return (3*x);&lt;br /&gt;
 }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The implicit aspect of this view is that, an object is an entity in its own right and the definition is closed. Any object can be understood in isolation where the fields and methods are just enumerated. The advantage of this perspective is of that it is very concrete, closely related to the programming language level and therefore it is easy to understand. The disadvantage is that it does not help to structure the collaboration between objects, the dynamics, and this is typically where the hard challenges of design lie. Thus the perspective offers little guidance in the process of designing any realistic system.&amp;lt;ref&amp;gt;[https://docs.google.com/viewer?a=v&amp;amp;q=cache:Kl7VOfRFnNEJ:citeseerx.ist.psu.edu/viewdoc/download%3Fdoi%3D10.1.1.86.7500%26rep%3Drep1%26type%3Dpdf+%22language+centric%22+object+oriented+design&amp;amp;hl=en&amp;amp;gl=us&amp;amp;pid=bl&amp;amp;srcid=ADGEESj-HffIDcwsyYlGssvRYS3OAEloLCID6dCIHQeZ_WQ5W-fy9B3rC4uxbUKVBGzyPVn4uBra4ot0hCS71JC3NNy7nBVXRxzR4z06p3fVQKSIjn5t_fFr3dzrMICa5qNUVRnYHEAv&amp;amp;sig=AHIEtbRX7G0XgBl1mKxnPINiorZvNhW32Q Henrik Baerbak Christensen, &amp;lt;i&amp;gt;&amp;quot;Implications of Perspective in Teaching Objects First and Object Design&amp;quot;&amp;lt;/i&amp;gt;, Proceedings of the 10th annual &amp;lt;i&amp;gt;SIGCSE&amp;lt;/i&amp;gt; conference on Innovation and technology in computer science education, Department of Computer Science, University of Aarhus, 2005.]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Model-centric perspective===&lt;br /&gt;
In this perspective, the objects(classes, fields) and their relationships like inheritance, association, aggregation are designed by using some model. Here the program execution is a simulation of some part of the&lt;br /&gt;
world, and objects are perceived as the parts of the model. The perspective is often explained through analogies to other models like toy railways, traffic simulations, computer games, etc. This perspective stresses objects as entities in a larger context (they are parts of a model) as opposed to the self-contained language-centric definition. This approach works fine for real life systems such as an order-entry system, a library system, boat-rental and various other real world entity oriented systems. This naturally leads to a strong focus on what the relations are between the parts: association, generalization, composition. Dynamics is an inherent part of the concept simulation and the explicit guideline for designing object interaction is to imitate real world or model interactions.&lt;br /&gt;
Let us consider a real world example of designing a partial implementation of the board game-Backgammon to understand the objected oriented using a model-centric perspective. The physical parts of Backgammon identifiable are the checkers, points, board, dice, player, etc. The diagram below is a design of model parts (classes) and their relationships (relations).&lt;br /&gt;
&lt;br /&gt;
===Responsibility-centric perspective===&lt;br /&gt;
This perspective stresses on the behavior of software systems and the concepts used to do design include behavior, roles, responsibilities and protocol. Here, the primary focus is the dynamics of the program. Roles and responsibilities are the core concepts in this perspective and hence it has more coupling to behavior when compared to static elements like objects or model parts. There is a difference between behavior and responsibility, where behavior is the concrete actions taken by objects where as responsibility is to fulfill requests through any number of concrete behaviors. So, responsibility is more abstract than behavior.&lt;br /&gt;
One can look at responsibility-centric perspective as an extension of the model-centric perspective with a shift of focus (from a focus on model parts to a focus on the simulation or dynamical aspects). The Backgammon example can again be&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Object Oriented Design Concepts &amp;lt;ref&amp;gt;http://books.google.com/books/about/Object_Design.html?id=vUF72vN5MY8C&amp;lt;/ref&amp;gt;==&lt;br /&gt;
[[File:AnObject.jpg|350px|right|thumb|An object encapsulates scripts and information&amp;lt;ref&amp;gt;http://books.google.com/books?id=vUF72vN5MY8C&amp;amp;pg=PA2&amp;amp;source=gbs_toc_r&amp;amp;cad=4#v=onepage&amp;amp;q&amp;amp;f=false Object Design: Roles, Responsibilities, and Collaborations by Rebecca Wirfs-Brock, Alan McKean&amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
A software application is constructed from parts. These parts -software objects- interact by sending messages to request information or action from others. Throughout its lifetime, each object remains responsible for responding to a fixed set of requests. To fulfill these requests, objects encapsulate scripted responses and the information that they base them on (see Figure 4a). If an object is designed to remember certain facts, it can use them to respond differently to future requests.&lt;br /&gt;
&lt;br /&gt;
Building an object-oriented application means inventing appropriate machinery. We represent real-world information, processes, interactions, relationships, even errors, by inventing objects that don't exist in the real world. We give life and intelligence to inanimate things. We take difficult-to-comprehend real-world objects and split them into simpler, more manageable software ones. We invent new objects. Each has a specific role to play in the application. Our measure of success lies in how clearly we invent a software reality that satisfies our application's requirements—and not in how closely it resembles the real world.&amp;lt;ref&amp;gt;http://books.google.com/books?id=vUF72vN5MY8C&amp;amp;pg=PA3&amp;amp;source=gbs_toc_r&amp;amp;cad=4#v=onepage&amp;amp;q&amp;amp;f=false Object Design: Roles, Responsibilities, and Collaborations by Rebecca Wirfs-Brock, Alan McKean&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''For example''', filling out and filing a form seems simple. But to perform that task in software, behind the simple forms, the application is validating the data against business rules, reading and refreshing the persistent data, guaranteeing the consistency of the information, and managing simultaneous access by dozens of users. Software objects display information, coordinate activities, compute, or connect to services.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Concept&lt;br /&gt;
! Short description&lt;br /&gt;
|-&lt;br /&gt;
|An object || an implementation of one or more roles.&lt;br /&gt;
|-&lt;br /&gt;
|A role || a set of related responsibilities.&lt;br /&gt;
|-&lt;br /&gt;
|A responsibility || an obligation to perform a task or know information&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Roles ''(relation with objects)'' ===&lt;br /&gt;
An object has a specific purpose - a role it plays within a given context. Objects that play the same role can be interchanged. For example, there are several providers that can deliver letters and packages: DHL, FedEx, UPS, Post, Airborne. They all have the same purpose, if not the same way of carrying out their business. We choose from among them according to the requirements that you have for delivery. We pick among the mail carriers that meet your requirements.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre-wrap; &lt;br /&gt;
white-space: -moz-pre-wrap;&lt;br /&gt;
white-space: -pre-wrap;&lt;br /&gt;
white-space: -o-pre-wrap; &lt;br /&gt;
word-wrap: break-word&amp;quot;&amp;gt;&lt;br /&gt;
A role is a set of responsibilities that can be used interchangeably.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A well-defined object supports a clearly defined role. We use purposeful oversimplifications, or role stereotypes, to help focus an object's responsibilities. Stereotypes are characterizations of the roles needed by an application. Because our goal is to build consistent and easy-to-use objects, it is advantageous to stereotype objects, ignoring specifics of their behaviors and thinking about them at a higher level. By oversimplifying and characterizing it, we can ponder the nature of an object's role more easily. We find these stereotypes to be useful:&lt;br /&gt;
*Information holder - knows and provides information&lt;br /&gt;
*Structurer - maintains relationships between objects and information about those relationships&lt;br /&gt;
*Service provider - performs work and, in general, offers computing services&lt;br /&gt;
*Coordinator - reacts to events by delegating tasks to others&lt;br /&gt;
*Controller - makes decisions and closely directs others' actions&lt;br /&gt;
*Interfacer - transforms information and requests between distinct parts of our system&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre-wrap; &lt;br /&gt;
white-space: -moz-pre-wrap;&lt;br /&gt;
white-space: -pre-wrap;&lt;br /&gt;
white-space: -o-pre-wrap; &lt;br /&gt;
word-wrap: break-word&amp;quot;&amp;gt;&lt;br /&gt;
Just as an actor tries to play a believable part in a play, an object takes on a character in an application by assuming responsibilities that define a meaningful role.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Responsibilities ===&lt;br /&gt;
&lt;br /&gt;
=== Behavior ===&lt;br /&gt;
&lt;br /&gt;
=== Protocols ===&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
==Additional Reading==&lt;br /&gt;
*[http://books.google.com/books?id=VQaf_vOTDzMC&amp;amp;pg=PA244&amp;amp;lpg=PA244&amp;amp;dq=%22language+centric%22+%22model-centric%22+%22responsibility+centric%22+object+oriented+design&amp;amp;source=bl&amp;amp;ots=tY3C6nStiA&amp;amp;sig=bEO2VyjGTobxQ362Yaubi542ZTc&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ei=f3KFUJ2-D4Ho8QTC_IHQBA&amp;amp;ved=0CEMQ6AEwAg#v=onepage&amp;amp;q=%22language%20centric%22%20%22model-centric%22%20%22responsibility%20centric%22%20object%20oriented%20design&amp;amp;f=false Flexible,Reliable Software using Patterns and Agile Development]&lt;br /&gt;
*[http://books.google.com/books?id=YnGz2ghKF-gC&amp;amp;pg=PA60&amp;amp;lpg=PA60&amp;amp;dq=%22language-centric%22+object+oriented+design&amp;amp;source=bl&amp;amp;ots=ko8xV4SZJs&amp;amp;sig=yemCujDGu_BEySZ_k32Kc0KVbgM&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ei=K8WFUOykNYW89gTcx4GQAg&amp;amp;ved=0CFEQ6AEwBA#v=onepage&amp;amp;q=%22language-centric%22%20object%20oriented%20design&amp;amp;f=false Jibitesh Mishra, Ashok Mohanty, &amp;lt;i&amp;gt;&amp;quot;Software Engineering&amp;quot;&amp;lt;/i&amp;gt;]&lt;br /&gt;
*[http://web.engr.oregonstate.edu/~budd/Books/oopintro3e/info/ReadMe.html An Introduction to Object Oriented Programming]&lt;/div&gt;</summary>
		<author><name>Rchakar</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w15_rr&amp;diff=67991</id>
		<title>CSC/ECE 517 Fall 2012/ch2a 2w15 rr</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w15_rr&amp;diff=67991"/>
		<updated>2012-10-23T06:46:03Z</updated>

		<summary type="html">&lt;p&gt;Rchakar: /* Roles (relation with objects) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
Object-oriented design is a programming model that began in the late 60's as software programs became more complex. The idea behind the approach was to build software systems by modeling them based on the real-world objects that they were trying to represent. For example, banking systems would contain customer objects, account objects and so on. Today, object-oriented design has been widely adopted &amp;lt;ref&amp;gt; [http://www.objectmentor.com/omSolutions/oops_what.html Introduction to Object Oriented Design]&amp;lt;/ref&amp;gt;. When done properly, this approach leads to simple, robust, flexible and modular software. When something goes wrong, the results could be bad. Object oriented design can be seen from different perspectives. In the language-centric perspective, objects are containers of data and methods. The model-centric perspective views the objects as model elements reflecting the real world objects and Responsibility-centric perspective views objects as interacting elements each playing a role in object community. Each of these perspectives are outlined in the following sections.&lt;br /&gt;
&lt;br /&gt;
==Background==&lt;br /&gt;
The history of object oriented design has many branches, and many people have contributed to this domain. The 1960s and 1970s saw the emergence of object oriented programming languages, such as Simula and Smalltalk, with key contributors such as Kristen Nygaard and Alan Kay, the visionary computer scientist who founded Smalltalk.&amp;lt;ref&amp;gt;[http://www.informit.com/articles/article.aspx?p=360440&amp;amp;seqNum=8 History of Object Oriented Design]&amp;lt;/ref&amp;gt;&lt;br /&gt;
But object oriented design was informal through that period, and it was only form 1982 that it became popular.  Contributors in this domain include Grady Booch, Kent Beck, Peter Coad, Don Firesmith, Ivar Jacobson (a UML founder), Steve Mellor, Bertrand Meyer, Jim Rumbaugh (a UML founder) and Rebecca Wirfs-Brock among others. Each of these perspectives are outlined in the following sections.&lt;br /&gt;
&lt;br /&gt;
==Object Oriented Design Perspectives==&lt;br /&gt;
===Language-centric perspective===&lt;br /&gt;
The focus of the language-centric perspective is classes and objects as building blocks for developing software. The emphasis is on the internal structure which are the fields and methods. Thus it is inherently a compile-time or static view which means that the definition speaks in terms of what it looks like in the following code:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
public class foo&lt;br /&gt;
{&lt;br /&gt;
 private int x;&lt;br /&gt;
 public static double y;&lt;br /&gt;
&lt;br /&gt;
 public int double (int x)&lt;br /&gt;
 {&lt;br /&gt;
   return (3*x);&lt;br /&gt;
 }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The implicit aspect of this view is that, an object is an entity in its own right and the definition is closed. Any object can be understood in isolation where the fields and methods are just enumerated. The advantage of this perspective is of that it is very concrete, closely related to the programming language level and therefore it is easy to understand. The disadvantage is that it does not help to structure the collaboration between objects, the dynamics, and this is typically where the hard challenges of design lie. Thus the perspective offers little guidance in the process of designing any realistic system.&amp;lt;ref&amp;gt;[https://docs.google.com/viewer?a=v&amp;amp;q=cache:Kl7VOfRFnNEJ:citeseerx.ist.psu.edu/viewdoc/download%3Fdoi%3D10.1.1.86.7500%26rep%3Drep1%26type%3Dpdf+%22language+centric%22+object+oriented+design&amp;amp;hl=en&amp;amp;gl=us&amp;amp;pid=bl&amp;amp;srcid=ADGEESj-HffIDcwsyYlGssvRYS3OAEloLCID6dCIHQeZ_WQ5W-fy9B3rC4uxbUKVBGzyPVn4uBra4ot0hCS71JC3NNy7nBVXRxzR4z06p3fVQKSIjn5t_fFr3dzrMICa5qNUVRnYHEAv&amp;amp;sig=AHIEtbRX7G0XgBl1mKxnPINiorZvNhW32Q Henrik Baerbak Christensen, &amp;lt;i&amp;gt;&amp;quot;Implications of Perspective in Teaching Objects First and Object Design&amp;quot;&amp;lt;/i&amp;gt;, Proceedings of the 10th annual &amp;lt;i&amp;gt;SIGCSE&amp;lt;/i&amp;gt; conference on Innovation and technology in computer science education, Department of Computer Science, University of Aarhus, 2005.]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Model-centric perspective===&lt;br /&gt;
In this perspective, the objects(classes, fields) and their relationships like inheritance, association, aggregation are designed by using some model. Here the program execution is a simulation of some part of the&lt;br /&gt;
world, and objects are perceived as the parts of the model. The perspective is often explained through analogies to other models like toy railways, traffic simulations, computer games, etc. This perspective stresses objects as entities in a larger context (they are parts of a model) as opposed to the self-contained language-centric definition. This approach works fine for real life systems such as an order-entry system, a library system, boat-rental and various other real world entity oriented systems. This naturally leads to a strong focus on what the relations are between the parts: association, generalization, composition. Dynamics is an inherent part of the concept simulation and the explicit guideline for designing object interaction is to imitate real world or model interactions.&lt;br /&gt;
Let us consider a real world example of designing a partial implementation of the board game-Backgammon to understand the objected oriented using a model-centric perspective. The physical parts of Backgammon identifiable are the checkers, points, board, dice, player, etc. The diagram below is a design of model parts (classes) and their relationships (relations).&lt;br /&gt;
&lt;br /&gt;
===Responsibility-centric perspective===&lt;br /&gt;
This perspective stresses on the behavior of software systems and the concepts used to do design include behavior, roles, responsibilities and protocol. Here, the primary focus is the dynamics of the program. Roles and responsibilities are the core concepts in this perspective and hence it has more coupling to behavior when compared to static elements like objects or model parts. There is a difference between behavior and responsibility, where behavior is the concrete actions taken by objects where as responsibility is to fulfill requests through any number of concrete behaviors. So, responsibility is more abstract than behavior.&lt;br /&gt;
One can look at responsibility-centric perspective as an extension of the model-centric perspective with a shift of focus (from a focus on model parts to a focus on the simulation or dynamical aspects). The Backgammon example can again be&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Object Oriented Design Concepts &amp;lt;ref&amp;gt;http://books.google.com/books/about/Object_Design.html?id=vUF72vN5MY8C&amp;lt;/ref&amp;gt;==&lt;br /&gt;
[[File:AnObject.jpg|350px|right|thumb|An object encapsulates scripts and information&amp;lt;ref&amp;gt;http://books.google.com/books?id=vUF72vN5MY8C&amp;amp;pg=PA2&amp;amp;source=gbs_toc_r&amp;amp;cad=4#v=onepage&amp;amp;q&amp;amp;f=false Object Design: Roles, Responsibilities, and Collaborations by Rebecca Wirfs-Brock, Alan McKean&amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
A software application is constructed from parts. These parts -software objects- interact by sending messages to request information or action from others. Throughout its lifetime, each object remains responsible for responding to a fixed set of requests. To fulfill these requests, objects encapsulate scripted responses and the information that they base them on (see Figure 4a). If an object is designed to remember certain facts, it can use them to respond differently to future requests.&lt;br /&gt;
&lt;br /&gt;
Building an object-oriented application means inventing appropriate machinery. We represent real-world information, processes, interactions, relationships, even errors, by inventing objects that don't exist in the real world. We give life and intelligence to inanimate things. We take difficult-to-comprehend real-world objects and split them into simpler, more manageable software ones. We invent new objects. Each has a specific role to play in the application. Our measure of success lies in how clearly we invent a software reality that satisfies our application's requirements—and not in how closely it resembles the real world.&amp;lt;ref&amp;gt;http://books.google.com/books?id=vUF72vN5MY8C&amp;amp;pg=PA3&amp;amp;source=gbs_toc_r&amp;amp;cad=4#v=onepage&amp;amp;q&amp;amp;f=false Object Design: Roles, Responsibilities, and Collaborations by Rebecca Wirfs-Brock, Alan McKean&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''For example''', filling out and filing a form seems simple. But to perform that task in software, behind the simple forms, the application is validating the data against business rules, reading and refreshing the persistent data, guaranteeing the consistency of the information, and managing simultaneous access by dozens of users. Software objects display information, coordinate activities, compute, or connect to services.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Concept&lt;br /&gt;
! Short description&lt;br /&gt;
|-&lt;br /&gt;
|An object || an implementation of one or more roles.&lt;br /&gt;
|-&lt;br /&gt;
|A role || a set of related responsibilities.&lt;br /&gt;
|-&lt;br /&gt;
|A responsibility || an obligation to perform a task or know information&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Behavior ===&lt;br /&gt;
&lt;br /&gt;
=== Responsibilities ===&lt;br /&gt;
&lt;br /&gt;
=== Roles ''(relation with objects)'' ===&lt;br /&gt;
An object has a specific purpose - a role it plays within a given context. Objects that play the same role can be interchanged. For example, there are several providers that can deliver letters and packages: DHL, FedEx, UPS, Post, Airborne. They all have the same purpose, if not the same way of carrying out their business. We choose from among them according to the requirements that you have for delivery. We pick among the mail carriers that meet your requirements.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre-wrap; &lt;br /&gt;
white-space: -moz-pre-wrap;&lt;br /&gt;
white-space: -pre-wrap;&lt;br /&gt;
white-space: -o-pre-wrap; &lt;br /&gt;
word-wrap: break-word&amp;quot;&amp;gt;&lt;br /&gt;
A role is a set of responsibilities that can be used interchangeably.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A well-defined object supports a clearly defined role. We use purposeful oversimplifications, or role stereotypes, to help focus an object's responsibilities. Stereotypes are characterizations of the roles needed by an application. Because our goal is to build consistent and easy-to-use objects, it is advantageous to stereotype objects, ignoring specifics of their behaviors and thinking about them at a higher level. By oversimplifying and characterizing it, we can ponder the nature of an object's role more easily. We find these stereotypes to be useful:&lt;br /&gt;
*Information holder - knows and provides information&lt;br /&gt;
*Structurer - maintains relationships between objects and information about those relationships&lt;br /&gt;
*Service provider - performs work and, in general, offers computing services&lt;br /&gt;
*Coordinator - reacts to events by delegating tasks to others&lt;br /&gt;
*Controller - makes decisions and closely directs others' actions&lt;br /&gt;
*Interfacer - transforms information and requests between distinct parts of our system&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre-wrap; &lt;br /&gt;
white-space: -moz-pre-wrap;&lt;br /&gt;
white-space: -pre-wrap;&lt;br /&gt;
white-space: -o-pre-wrap; &lt;br /&gt;
word-wrap: break-word&amp;quot;&amp;gt;&lt;br /&gt;
Just as an actor tries to play a believable part in a play, an object takes on a character in an application by assuming responsibilities that define a meaningful role.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Protocols ===&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
==Additional Reading==&lt;br /&gt;
*[http://books.google.com/books?id=VQaf_vOTDzMC&amp;amp;pg=PA244&amp;amp;lpg=PA244&amp;amp;dq=%22language+centric%22+%22model-centric%22+%22responsibility+centric%22+object+oriented+design&amp;amp;source=bl&amp;amp;ots=tY3C6nStiA&amp;amp;sig=bEO2VyjGTobxQ362Yaubi542ZTc&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ei=f3KFUJ2-D4Ho8QTC_IHQBA&amp;amp;ved=0CEMQ6AEwAg#v=onepage&amp;amp;q=%22language%20centric%22%20%22model-centric%22%20%22responsibility%20centric%22%20object%20oriented%20design&amp;amp;f=false Flexible,Reliable Software using Patterns and Agile Development]&lt;br /&gt;
*[http://books.google.com/books?id=YnGz2ghKF-gC&amp;amp;pg=PA60&amp;amp;lpg=PA60&amp;amp;dq=%22language-centric%22+object+oriented+design&amp;amp;source=bl&amp;amp;ots=ko8xV4SZJs&amp;amp;sig=yemCujDGu_BEySZ_k32Kc0KVbgM&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ei=K8WFUOykNYW89gTcx4GQAg&amp;amp;ved=0CFEQ6AEwBA#v=onepage&amp;amp;q=%22language-centric%22%20object%20oriented%20design&amp;amp;f=false Jibitesh Mishra, Ashok Mohanty, &amp;lt;i&amp;gt;&amp;quot;Software Engineering&amp;quot;&amp;lt;/i&amp;gt;]&lt;br /&gt;
*[http://web.engr.oregonstate.edu/~budd/Books/oopintro3e/info/ReadMe.html An Introduction to Object Oriented Programming]&lt;/div&gt;</summary>
		<author><name>Rchakar</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w15_rr&amp;diff=67990</id>
		<title>CSC/ECE 517 Fall 2012/ch2a 2w15 rr</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w15_rr&amp;diff=67990"/>
		<updated>2012-10-23T06:45:32Z</updated>

		<summary type="html">&lt;p&gt;Rchakar: /* Roles */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
Object-oriented design is a programming model that began in the late 60's as software programs became more complex. The idea behind the approach was to build software systems by modeling them based on the real-world objects that they were trying to represent. For example, banking systems would contain customer objects, account objects and so on. Today, object-oriented design has been widely adopted &amp;lt;ref&amp;gt; [http://www.objectmentor.com/omSolutions/oops_what.html Introduction to Object Oriented Design]&amp;lt;/ref&amp;gt;. When done properly, this approach leads to simple, robust, flexible and modular software. When something goes wrong, the results could be bad. Object oriented design can be seen from different perspectives. In the language-centric perspective, objects are containers of data and methods. The model-centric perspective views the objects as model elements reflecting the real world objects and Responsibility-centric perspective views objects as interacting elements each playing a role in object community. Each of these perspectives are outlined in the following sections.&lt;br /&gt;
&lt;br /&gt;
==Background==&lt;br /&gt;
The history of object oriented design has many branches, and many people have contributed to this domain. The 1960s and 1970s saw the emergence of object oriented programming languages, such as Simula and Smalltalk, with key contributors such as Kristen Nygaard and Alan Kay, the visionary computer scientist who founded Smalltalk.&amp;lt;ref&amp;gt;[http://www.informit.com/articles/article.aspx?p=360440&amp;amp;seqNum=8 History of Object Oriented Design]&amp;lt;/ref&amp;gt;&lt;br /&gt;
But object oriented design was informal through that period, and it was only form 1982 that it became popular.  Contributors in this domain include Grady Booch, Kent Beck, Peter Coad, Don Firesmith, Ivar Jacobson (a UML founder), Steve Mellor, Bertrand Meyer, Jim Rumbaugh (a UML founder) and Rebecca Wirfs-Brock among others. Each of these perspectives are outlined in the following sections.&lt;br /&gt;
&lt;br /&gt;
==Object Oriented Design Perspectives==&lt;br /&gt;
===Language-centric perspective===&lt;br /&gt;
The focus of the language-centric perspective is classes and objects as building blocks for developing software. The emphasis is on the internal structure which are the fields and methods. Thus it is inherently a compile-time or static view which means that the definition speaks in terms of what it looks like in the following code:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
public class foo&lt;br /&gt;
{&lt;br /&gt;
 private int x;&lt;br /&gt;
 public static double y;&lt;br /&gt;
&lt;br /&gt;
 public int double (int x)&lt;br /&gt;
 {&lt;br /&gt;
   return (3*x);&lt;br /&gt;
 }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The implicit aspect of this view is that, an object is an entity in its own right and the definition is closed. Any object can be understood in isolation where the fields and methods are just enumerated. The advantage of this perspective is of that it is very concrete, closely related to the programming language level and therefore it is easy to understand. The disadvantage is that it does not help to structure the collaboration between objects, the dynamics, and this is typically where the hard challenges of design lie. Thus the perspective offers little guidance in the process of designing any realistic system.&amp;lt;ref&amp;gt;[https://docs.google.com/viewer?a=v&amp;amp;q=cache:Kl7VOfRFnNEJ:citeseerx.ist.psu.edu/viewdoc/download%3Fdoi%3D10.1.1.86.7500%26rep%3Drep1%26type%3Dpdf+%22language+centric%22+object+oriented+design&amp;amp;hl=en&amp;amp;gl=us&amp;amp;pid=bl&amp;amp;srcid=ADGEESj-HffIDcwsyYlGssvRYS3OAEloLCID6dCIHQeZ_WQ5W-fy9B3rC4uxbUKVBGzyPVn4uBra4ot0hCS71JC3NNy7nBVXRxzR4z06p3fVQKSIjn5t_fFr3dzrMICa5qNUVRnYHEAv&amp;amp;sig=AHIEtbRX7G0XgBl1mKxnPINiorZvNhW32Q Henrik Baerbak Christensen, &amp;lt;i&amp;gt;&amp;quot;Implications of Perspective in Teaching Objects First and Object Design&amp;quot;&amp;lt;/i&amp;gt;, Proceedings of the 10th annual &amp;lt;i&amp;gt;SIGCSE&amp;lt;/i&amp;gt; conference on Innovation and technology in computer science education, Department of Computer Science, University of Aarhus, 2005.]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Model-centric perspective===&lt;br /&gt;
In this perspective, the objects(classes, fields) and their relationships like inheritance, association, aggregation are designed by using some model. Here the program execution is a simulation of some part of the&lt;br /&gt;
world, and objects are perceived as the parts of the model. The perspective is often explained through analogies to other models like toy railways, traffic simulations, computer games, etc. This perspective stresses objects as entities in a larger context (they are parts of a model) as opposed to the self-contained language-centric definition. This approach works fine for real life systems such as an order-entry system, a library system, boat-rental and various other real world entity oriented systems. This naturally leads to a strong focus on what the relations are between the parts: association, generalization, composition. Dynamics is an inherent part of the concept simulation and the explicit guideline for designing object interaction is to imitate real world or model interactions.&lt;br /&gt;
Let us consider a real world example of designing a partial implementation of the board game-Backgammon to understand the objected oriented using a model-centric perspective. The physical parts of Backgammon identifiable are the checkers, points, board, dice, player, etc. The diagram below is a design of model parts (classes) and their relationships (relations).&lt;br /&gt;
&lt;br /&gt;
===Responsibility-centric perspective===&lt;br /&gt;
This perspective stresses on the behavior of software systems and the concepts used to do design include behavior, roles, responsibilities and protocol. Here, the primary focus is the dynamics of the program. Roles and responsibilities are the core concepts in this perspective and hence it has more coupling to behavior when compared to static elements like objects or model parts. There is a difference between behavior and responsibility, where behavior is the concrete actions taken by objects where as responsibility is to fulfill requests through any number of concrete behaviors. So, responsibility is more abstract than behavior.&lt;br /&gt;
One can look at responsibility-centric perspective as an extension of the model-centric perspective with a shift of focus (from a focus on model parts to a focus on the simulation or dynamical aspects). The Backgammon example can again be&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Object Oriented Design Concepts &amp;lt;ref&amp;gt;http://books.google.com/books/about/Object_Design.html?id=vUF72vN5MY8C&amp;lt;/ref&amp;gt;==&lt;br /&gt;
[[File:AnObject.jpg|350px|right|thumb|An object encapsulates scripts and information&amp;lt;ref&amp;gt;http://books.google.com/books?id=vUF72vN5MY8C&amp;amp;pg=PA2&amp;amp;source=gbs_toc_r&amp;amp;cad=4#v=onepage&amp;amp;q&amp;amp;f=false Object Design: Roles, Responsibilities, and Collaborations by Rebecca Wirfs-Brock, Alan McKean&amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
A software application is constructed from parts. These parts -software objects- interact by sending messages to request information or action from others. Throughout its lifetime, each object remains responsible for responding to a fixed set of requests. To fulfill these requests, objects encapsulate scripted responses and the information that they base them on (see Figure 4a). If an object is designed to remember certain facts, it can use them to respond differently to future requests.&lt;br /&gt;
&lt;br /&gt;
Building an object-oriented application means inventing appropriate machinery. We represent real-world information, processes, interactions, relationships, even errors, by inventing objects that don't exist in the real world. We give life and intelligence to inanimate things. We take difficult-to-comprehend real-world objects and split them into simpler, more manageable software ones. We invent new objects. Each has a specific role to play in the application. Our measure of success lies in how clearly we invent a software reality that satisfies our application's requirements—and not in how closely it resembles the real world.&amp;lt;ref&amp;gt;http://books.google.com/books?id=vUF72vN5MY8C&amp;amp;pg=PA3&amp;amp;source=gbs_toc_r&amp;amp;cad=4#v=onepage&amp;amp;q&amp;amp;f=false Object Design: Roles, Responsibilities, and Collaborations by Rebecca Wirfs-Brock, Alan McKean&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''For example''', filling out and filing a form seems simple. But to perform that task in software, behind the simple forms, the application is validating the data against business rules, reading and refreshing the persistent data, guaranteeing the consistency of the information, and managing simultaneous access by dozens of users. Software objects display information, coordinate activities, compute, or connect to services.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Concept&lt;br /&gt;
! Short description&lt;br /&gt;
|-&lt;br /&gt;
|An object || an implementation of one or more roles.&lt;br /&gt;
|-&lt;br /&gt;
|A role || a set of related responsibilities.&lt;br /&gt;
|-&lt;br /&gt;
|A responsibility || an obligation to perform a task or know information&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Behavior ===&lt;br /&gt;
&lt;br /&gt;
=== Responsibilities ===&lt;br /&gt;
&lt;br /&gt;
=== Roles (relation with objects) ===&lt;br /&gt;
An object has a specific purpose - a role it plays within a given context. Objects that play the same role can be interchanged. For example, there are several providers that can deliver letters and packages: DHL, FedEx, UPS, Post, Airborne. They all have the same purpose, if not the same way of carrying out their business. We choose from among them according to the requirements that you have for delivery. We pick among the mail carriers that meet your requirements.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre-wrap; &lt;br /&gt;
white-space: -moz-pre-wrap;&lt;br /&gt;
white-space: -pre-wrap;&lt;br /&gt;
white-space: -o-pre-wrap; &lt;br /&gt;
word-wrap: break-word&amp;quot;&amp;gt;&lt;br /&gt;
A role is a set of responsibilities that can be used interchangeably.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A well-defined object supports a clearly defined role. We use purposeful oversimplifications, or role stereotypes, to help focus an object's responsibilities. Stereotypes are characterizations of the roles needed by an application. Because our goal is to build consistent and easy-to-use objects, it is advantageous to stereotype objects, ignoring specifics of their behaviors and thinking about them at a higher level. By oversimplifying and characterizing it, we can ponder the nature of an object's role more easily. We find these stereotypes to be useful:&lt;br /&gt;
*Information holder - knows and provides information&lt;br /&gt;
*Structurer - maintains relationships between objects and information about those relationships&lt;br /&gt;
*Service provider - performs work and, in general, offers computing services&lt;br /&gt;
*Coordinator - reacts to events by delegating tasks to others&lt;br /&gt;
*Controller - makes decisions and closely directs others' actions&lt;br /&gt;
*Interfacer - transforms information and requests between distinct parts of our system&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre-wrap; &lt;br /&gt;
white-space: -moz-pre-wrap;&lt;br /&gt;
white-space: -pre-wrap;&lt;br /&gt;
white-space: -o-pre-wrap; &lt;br /&gt;
word-wrap: break-word&amp;quot;&amp;gt;&lt;br /&gt;
Just as an actor tries to play a believable part in a play, an object takes on a character in an application by assuming responsibilities that define a meaningful role.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Protocols ===&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
==Additional Reading==&lt;br /&gt;
*[http://books.google.com/books?id=VQaf_vOTDzMC&amp;amp;pg=PA244&amp;amp;lpg=PA244&amp;amp;dq=%22language+centric%22+%22model-centric%22+%22responsibility+centric%22+object+oriented+design&amp;amp;source=bl&amp;amp;ots=tY3C6nStiA&amp;amp;sig=bEO2VyjGTobxQ362Yaubi542ZTc&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ei=f3KFUJ2-D4Ho8QTC_IHQBA&amp;amp;ved=0CEMQ6AEwAg#v=onepage&amp;amp;q=%22language%20centric%22%20%22model-centric%22%20%22responsibility%20centric%22%20object%20oriented%20design&amp;amp;f=false Flexible,Reliable Software using Patterns and Agile Development]&lt;br /&gt;
*[http://books.google.com/books?id=YnGz2ghKF-gC&amp;amp;pg=PA60&amp;amp;lpg=PA60&amp;amp;dq=%22language-centric%22+object+oriented+design&amp;amp;source=bl&amp;amp;ots=ko8xV4SZJs&amp;amp;sig=yemCujDGu_BEySZ_k32Kc0KVbgM&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ei=K8WFUOykNYW89gTcx4GQAg&amp;amp;ved=0CFEQ6AEwBA#v=onepage&amp;amp;q=%22language-centric%22%20object%20oriented%20design&amp;amp;f=false Jibitesh Mishra, Ashok Mohanty, &amp;lt;i&amp;gt;&amp;quot;Software Engineering&amp;quot;&amp;lt;/i&amp;gt;]&lt;br /&gt;
*[http://web.engr.oregonstate.edu/~budd/Books/oopintro3e/info/ReadMe.html An Introduction to Object Oriented Programming]&lt;/div&gt;</summary>
		<author><name>Rchakar</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w15_rr&amp;diff=67989</id>
		<title>CSC/ECE 517 Fall 2012/ch2a 2w15 rr</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w15_rr&amp;diff=67989"/>
		<updated>2012-10-23T06:39:53Z</updated>

		<summary type="html">&lt;p&gt;Rchakar: /* Roles */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
Object-oriented design is a programming model that began in the late 60's as software programs became more complex. The idea behind the approach was to build software systems by modeling them based on the real-world objects that they were trying to represent. For example, banking systems would contain customer objects, account objects and so on. Today, object-oriented design has been widely adopted &amp;lt;ref&amp;gt; [http://www.objectmentor.com/omSolutions/oops_what.html Introduction to Object Oriented Design]&amp;lt;/ref&amp;gt;. When done properly, this approach leads to simple, robust, flexible and modular software. When something goes wrong, the results could be bad. Object oriented design can be seen from different perspectives. In the language-centric perspective, objects are containers of data and methods. The model-centric perspective views the objects as model elements reflecting the real world objects and Responsibility-centric perspective views objects as interacting elements each playing a role in object community. Each of these perspectives are outlined in the following sections.&lt;br /&gt;
&lt;br /&gt;
==Background==&lt;br /&gt;
The history of object oriented design has many branches, and many people have contributed to this domain. The 1960s and 1970s saw the emergence of object oriented programming languages, such as Simula and Smalltalk, with key contributors such as Kristen Nygaard and Alan Kay, the visionary computer scientist who founded Smalltalk.&amp;lt;ref&amp;gt;[http://www.informit.com/articles/article.aspx?p=360440&amp;amp;seqNum=8 History of Object Oriented Design]&amp;lt;/ref&amp;gt;&lt;br /&gt;
But object oriented design was informal through that period, and it was only form 1982 that it became popular.  Contributors in this domain include Grady Booch, Kent Beck, Peter Coad, Don Firesmith, Ivar Jacobson (a UML founder), Steve Mellor, Bertrand Meyer, Jim Rumbaugh (a UML founder) and Rebecca Wirfs-Brock among others. Each of these perspectives are outlined in the following sections.&lt;br /&gt;
&lt;br /&gt;
==Object Oriented Design Perspectives==&lt;br /&gt;
===Language-centric perspective===&lt;br /&gt;
The focus of the language-centric perspective is classes and objects as building blocks for developing software. The emphasis is on the internal structure which are the fields and methods. Thus it is inherently a compile-time or static view which means that the definition speaks in terms of what it looks like in the following code:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
public class foo&lt;br /&gt;
{&lt;br /&gt;
 private int x;&lt;br /&gt;
 public static double y;&lt;br /&gt;
&lt;br /&gt;
 public int double (int x)&lt;br /&gt;
 {&lt;br /&gt;
   return (3*x);&lt;br /&gt;
 }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The implicit aspect of this view is that, an object is an entity in its own right and the definition is closed. Any object can be understood in isolation where the fields and methods are just enumerated. The advantage of this perspective is of that it is very concrete, closely related to the programming language level and therefore it is easy to understand. The disadvantage is that it does not help to structure the collaboration between objects, the dynamics, and this is typically where the hard challenges of design lie. Thus the perspective offers little guidance in the process of designing any realistic system.&amp;lt;ref&amp;gt;[https://docs.google.com/viewer?a=v&amp;amp;q=cache:Kl7VOfRFnNEJ:citeseerx.ist.psu.edu/viewdoc/download%3Fdoi%3D10.1.1.86.7500%26rep%3Drep1%26type%3Dpdf+%22language+centric%22+object+oriented+design&amp;amp;hl=en&amp;amp;gl=us&amp;amp;pid=bl&amp;amp;srcid=ADGEESj-HffIDcwsyYlGssvRYS3OAEloLCID6dCIHQeZ_WQ5W-fy9B3rC4uxbUKVBGzyPVn4uBra4ot0hCS71JC3NNy7nBVXRxzR4z06p3fVQKSIjn5t_fFr3dzrMICa5qNUVRnYHEAv&amp;amp;sig=AHIEtbRX7G0XgBl1mKxnPINiorZvNhW32Q Henrik Baerbak Christensen, &amp;lt;i&amp;gt;&amp;quot;Implications of Perspective in Teaching Objects First and Object Design&amp;quot;&amp;lt;/i&amp;gt;, Proceedings of the 10th annual &amp;lt;i&amp;gt;SIGCSE&amp;lt;/i&amp;gt; conference on Innovation and technology in computer science education, Department of Computer Science, University of Aarhus, 2005.]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Model-centric perspective===&lt;br /&gt;
In this perspective, the objects(classes, fields) and their relationships like inheritance, association, aggregation are designed by using some model. Here the program execution is a simulation of some part of the&lt;br /&gt;
world, and objects are perceived as the parts of the model. The perspective is often explained through analogies to other models like toy railways, traffic simulations, computer games, etc. This perspective stresses objects as entities in a larger context (they are parts of a model) as opposed to the self-contained language-centric definition. This approach works fine for real life systems such as an order-entry system, a library system, boat-rental and various other real world entity oriented systems. This naturally leads to a strong focus on what the relations are between the parts: association, generalization, composition. Dynamics is an inherent part of the concept simulation and the explicit guideline for designing object interaction is to imitate real world or model interactions.&lt;br /&gt;
Let us consider a real world example of designing a partial implementation of the board game-Backgammon to understand the objected oriented using a model-centric perspective. The physical parts of Backgammon identifiable are the checkers, points, board, dice, player, etc. The diagram below is a design of model parts (classes) and their relationships (relations).&lt;br /&gt;
&lt;br /&gt;
===Responsibility-centric perspective===&lt;br /&gt;
This perspective stresses on the behavior of software systems and the concepts used to do design include behavior, roles, responsibilities and protocol. Here, the primary focus is the dynamics of the program. Roles and responsibilities are the core concepts in this perspective and hence it has more coupling to behavior when compared to static elements like objects or model parts. There is a difference between behavior and responsibility, where behavior is the concrete actions taken by objects where as responsibility is to fulfill requests through any number of concrete behaviors. So, responsibility is more abstract than behavior.&lt;br /&gt;
One can look at responsibility-centric perspective as an extension of the model-centric perspective with a shift of focus (from a focus on model parts to a focus on the simulation or dynamical aspects). The Backgammon example can again be&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Object Oriented Design Concepts &amp;lt;ref&amp;gt;http://books.google.com/books/about/Object_Design.html?id=vUF72vN5MY8C&amp;lt;/ref&amp;gt;==&lt;br /&gt;
[[File:AnObject.jpg|350px|right|thumb|An object encapsulates scripts and information&amp;lt;ref&amp;gt;http://books.google.com/books?id=vUF72vN5MY8C&amp;amp;pg=PA2&amp;amp;source=gbs_toc_r&amp;amp;cad=4#v=onepage&amp;amp;q&amp;amp;f=false Object Design: Roles, Responsibilities, and Collaborations by Rebecca Wirfs-Brock, Alan McKean&amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
A software application is constructed from parts. These parts -software objects- interact by sending messages to request information or action from others. Throughout its lifetime, each object remains responsible for responding to a fixed set of requests. To fulfill these requests, objects encapsulate scripted responses and the information that they base them on (see Figure 4a). If an object is designed to remember certain facts, it can use them to respond differently to future requests.&lt;br /&gt;
&lt;br /&gt;
Building an object-oriented application means inventing appropriate machinery. We represent real-world information, processes, interactions, relationships, even errors, by inventing objects that don't exist in the real world. We give life and intelligence to inanimate things. We take difficult-to-comprehend real-world objects and split them into simpler, more manageable software ones. We invent new objects. Each has a specific role to play in the application. Our measure of success lies in how clearly we invent a software reality that satisfies our application's requirements—and not in how closely it resembles the real world.&amp;lt;ref&amp;gt;http://books.google.com/books?id=vUF72vN5MY8C&amp;amp;pg=PA3&amp;amp;source=gbs_toc_r&amp;amp;cad=4#v=onepage&amp;amp;q&amp;amp;f=false Object Design: Roles, Responsibilities, and Collaborations by Rebecca Wirfs-Brock, Alan McKean&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''For example''', filling out and filing a form seems simple. But to perform that task in software, behind the simple forms, the application is validating the data against business rules, reading and refreshing the persistent data, guaranteeing the consistency of the information, and managing simultaneous access by dozens of users. Software objects display information, coordinate activities, compute, or connect to services.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Concept&lt;br /&gt;
! Short description&lt;br /&gt;
|-&lt;br /&gt;
|An object || an implementation of one or more roles.&lt;br /&gt;
|-&lt;br /&gt;
|A role || a set of related responsibilities.&lt;br /&gt;
|-&lt;br /&gt;
|A responsibility || an obligation to perform a task or know information&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Behavior ===&lt;br /&gt;
&lt;br /&gt;
=== Responsibilities ===&lt;br /&gt;
&lt;br /&gt;
=== Roles ===&lt;br /&gt;
An object has a specific purpose - a role it plays within a given context. Objects that play the same role can be interchanged. For example, there are several providers that can deliver letters and packages: DHL, FedEx, UPS, Post, Airborne. They all have the same purpose, if not the same way of carrying out their business. We choose from among them according to the requirements that you have for delivery. We pick among the mail carriers that meet your requirements.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre-wrap; &lt;br /&gt;
white-space: -moz-pre-wrap;&lt;br /&gt;
white-space: -pre-wrap;&lt;br /&gt;
white-space: -o-pre-wrap; &lt;br /&gt;
word-wrap: break-word&amp;quot;&amp;gt;&lt;br /&gt;
A role is a set of responsibilities that can be used interchangeably.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A well-defined object supports a clearly defined role. We use purposeful oversimplifications, or role stereotypes, to help focus an object's responsibilities. Stereotypes are characterizations of the roles needed by an application. Because our goal is to build consistent and easy-to-use objects, it is advantageous to stereotype objects, ignoring specifics of their behaviors and thinking about them at a higher level. By oversimplifying and characterizing it, we can ponder the nature of an object's role more easily. We find these stereotypes to be useful:&lt;br /&gt;
*Information holder - knows and provides information&lt;br /&gt;
*Structurer - maintains relationships between objects and information about those relationships&lt;br /&gt;
*Service provider - performs work and, in general, offers computing services&lt;br /&gt;
*Coordinator - reacts to events by delegating tasks to others&lt;br /&gt;
*Controller - makes decisions and closely directs others' actions&lt;br /&gt;
*Interfacer - transforms information and requests between distinct parts of our system&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre-wrap; &lt;br /&gt;
white-space: -moz-pre-wrap;&lt;br /&gt;
white-space: -pre-wrap;&lt;br /&gt;
white-space: -o-pre-wrap; &lt;br /&gt;
word-wrap: break-word&amp;quot;&amp;gt;&lt;br /&gt;
Just as an actor tries to play a believable part in a play, an object takes on a character in an application by assuming responsibilities that define a meaningful role.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Protocols ===&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
==Additional Reading==&lt;br /&gt;
*[http://books.google.com/books?id=VQaf_vOTDzMC&amp;amp;pg=PA244&amp;amp;lpg=PA244&amp;amp;dq=%22language+centric%22+%22model-centric%22+%22responsibility+centric%22+object+oriented+design&amp;amp;source=bl&amp;amp;ots=tY3C6nStiA&amp;amp;sig=bEO2VyjGTobxQ362Yaubi542ZTc&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ei=f3KFUJ2-D4Ho8QTC_IHQBA&amp;amp;ved=0CEMQ6AEwAg#v=onepage&amp;amp;q=%22language%20centric%22%20%22model-centric%22%20%22responsibility%20centric%22%20object%20oriented%20design&amp;amp;f=false Flexible,Reliable Software using Patterns and Agile Development]&lt;br /&gt;
*[http://books.google.com/books?id=YnGz2ghKF-gC&amp;amp;pg=PA60&amp;amp;lpg=PA60&amp;amp;dq=%22language-centric%22+object+oriented+design&amp;amp;source=bl&amp;amp;ots=ko8xV4SZJs&amp;amp;sig=yemCujDGu_BEySZ_k32Kc0KVbgM&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ei=K8WFUOykNYW89gTcx4GQAg&amp;amp;ved=0CFEQ6AEwBA#v=onepage&amp;amp;q=%22language-centric%22%20object%20oriented%20design&amp;amp;f=false Jibitesh Mishra, Ashok Mohanty, &amp;lt;i&amp;gt;&amp;quot;Software Engineering&amp;quot;&amp;lt;/i&amp;gt;]&lt;br /&gt;
*[http://web.engr.oregonstate.edu/~budd/Books/oopintro3e/info/ReadMe.html An Introduction to Object Oriented Programming]&lt;/div&gt;</summary>
		<author><name>Rchakar</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w15_rr&amp;diff=67988</id>
		<title>CSC/ECE 517 Fall 2012/ch2a 2w15 rr</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w15_rr&amp;diff=67988"/>
		<updated>2012-10-23T06:36:58Z</updated>

		<summary type="html">&lt;p&gt;Rchakar: /* Roles */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
Object-oriented design is a programming model that began in the late 60's as software programs became more complex. The idea behind the approach was to build software systems by modeling them based on the real-world objects that they were trying to represent. For example, banking systems would contain customer objects, account objects and so on. Today, object-oriented design has been widely adopted &amp;lt;ref&amp;gt; [http://www.objectmentor.com/omSolutions/oops_what.html Introduction to Object Oriented Design]&amp;lt;/ref&amp;gt;. When done properly, this approach leads to simple, robust, flexible and modular software. When something goes wrong, the results could be bad. Object oriented design can be seen from different perspectives. In the language-centric perspective, objects are containers of data and methods. The model-centric perspective views the objects as model elements reflecting the real world objects and Responsibility-centric perspective views objects as interacting elements each playing a role in object community. Each of these perspectives are outlined in the following sections.&lt;br /&gt;
&lt;br /&gt;
==Background==&lt;br /&gt;
The history of object oriented design has many branches, and many people have contributed to this domain. The 1960s and 1970s saw the emergence of object oriented programming languages, such as Simula and Smalltalk, with key contributors such as Kristen Nygaard and Alan Kay, the visionary computer scientist who founded Smalltalk.&amp;lt;ref&amp;gt;[http://www.informit.com/articles/article.aspx?p=360440&amp;amp;seqNum=8 History of Object Oriented Design]&amp;lt;/ref&amp;gt;&lt;br /&gt;
But object oriented design was informal through that period, and it was only form 1982 that it became popular.  Contributors in this domain include Grady Booch, Kent Beck, Peter Coad, Don Firesmith, Ivar Jacobson (a UML founder), Steve Mellor, Bertrand Meyer, Jim Rumbaugh (a UML founder) and Rebecca Wirfs-Brock among others. Each of these perspectives are outlined in the following sections.&lt;br /&gt;
&lt;br /&gt;
==Object Oriented Design Perspectives==&lt;br /&gt;
===Language-centric perspective===&lt;br /&gt;
The focus of the language-centric perspective is classes and objects as building blocks for developing software. The emphasis is on the internal structure which are the fields and methods. Thus it is inherently a compile-time or static view which means that the definition speaks in terms of what it looks like in the following code:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
public class foo&lt;br /&gt;
{&lt;br /&gt;
 private int x;&lt;br /&gt;
 public static double y;&lt;br /&gt;
&lt;br /&gt;
 public int double (int x)&lt;br /&gt;
 {&lt;br /&gt;
   return (3*x);&lt;br /&gt;
 }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The implicit aspect of this view is that, an object is an entity in its own right and the definition is closed. Any object can be understood in isolation where the fields and methods are just enumerated. The advantage of this perspective is of that it is very concrete, closely related to the programming language level and therefore it is easy to understand. The disadvantage is that it does not help to structure the collaboration between objects, the dynamics, and this is typically where the hard challenges of design lie. Thus the perspective offers little guidance in the process of designing any realistic system.&amp;lt;ref&amp;gt;[https://docs.google.com/viewer?a=v&amp;amp;q=cache:Kl7VOfRFnNEJ:citeseerx.ist.psu.edu/viewdoc/download%3Fdoi%3D10.1.1.86.7500%26rep%3Drep1%26type%3Dpdf+%22language+centric%22+object+oriented+design&amp;amp;hl=en&amp;amp;gl=us&amp;amp;pid=bl&amp;amp;srcid=ADGEESj-HffIDcwsyYlGssvRYS3OAEloLCID6dCIHQeZ_WQ5W-fy9B3rC4uxbUKVBGzyPVn4uBra4ot0hCS71JC3NNy7nBVXRxzR4z06p3fVQKSIjn5t_fFr3dzrMICa5qNUVRnYHEAv&amp;amp;sig=AHIEtbRX7G0XgBl1mKxnPINiorZvNhW32Q Henrik Baerbak Christensen, &amp;lt;i&amp;gt;&amp;quot;Implications of Perspective in Teaching Objects First and Object Design&amp;quot;&amp;lt;/i&amp;gt;, Proceedings of the 10th annual &amp;lt;i&amp;gt;SIGCSE&amp;lt;/i&amp;gt; conference on Innovation and technology in computer science education, Department of Computer Science, University of Aarhus, 2005.]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Model-centric perspective===&lt;br /&gt;
In this perspective, the objects(classes, fields) and their relationships like inheritance, association, aggregation are designed by using some model. Here the program execution is a simulation of some part of the&lt;br /&gt;
world, and objects are perceived as the parts of the model. The perspective is often explained through analogies to other models like toy railways, traffic simulations, computer games, etc. This perspective stresses objects as entities in a larger context (they are parts of a model) as opposed to the self-contained language-centric definition. This approach works fine for real life systems such as an order-entry system, a library system, boat-rental and various other real world entity oriented systems. This naturally leads to a strong focus on what the relations are between the parts: association, generalization, composition. Dynamics is an inherent part of the concept simulation and the explicit guideline for designing object interaction is to imitate real world or model interactions.&lt;br /&gt;
Let us consider a real world example of designing a partial implementation of the board game-Backgammon to understand the objected oriented using a model-centric perspective. The physical parts of Backgammon identifiable are the checkers, points, board, dice, player, etc. The diagram below is a design of model parts (classes) and their relationships (relations).&lt;br /&gt;
&lt;br /&gt;
===Responsibility-centric perspective===&lt;br /&gt;
This perspective stresses on the behavior of software systems and the concepts used to do design include behavior, roles, responsibilities and protocol. Here, the primary focus is the dynamics of the program. Roles and responsibilities are the core concepts in this perspective and hence it has more coupling to behavior when compared to static elements like objects or model parts. There is a difference between behavior and responsibility, where behavior is the concrete actions taken by objects where as responsibility is to fulfill requests through any number of concrete behaviors. So, responsibility is more abstract than behavior.&lt;br /&gt;
One can look at responsibility-centric perspective as an extension of the model-centric perspective with a shift of focus (from a focus on model parts to a focus on the simulation or dynamical aspects). The Backgammon example can again be&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Object Oriented Design Concepts &amp;lt;ref&amp;gt;http://books.google.com/books/about/Object_Design.html?id=vUF72vN5MY8C&amp;lt;/ref&amp;gt;==&lt;br /&gt;
[[File:AnObject.jpg|350px|right|thumb|An object encapsulates scripts and information&amp;lt;ref&amp;gt;http://books.google.com/books?id=vUF72vN5MY8C&amp;amp;pg=PA2&amp;amp;source=gbs_toc_r&amp;amp;cad=4#v=onepage&amp;amp;q&amp;amp;f=false Object Design: Roles, Responsibilities, and Collaborations by Rebecca Wirfs-Brock, Alan McKean&amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
A software application is constructed from parts. These parts -software objects- interact by sending messages to request information or action from others. Throughout its lifetime, each object remains responsible for responding to a fixed set of requests. To fulfill these requests, objects encapsulate scripted responses and the information that they base them on (see Figure 4a). If an object is designed to remember certain facts, it can use them to respond differently to future requests.&lt;br /&gt;
&lt;br /&gt;
Building an object-oriented application means inventing appropriate machinery. We represent real-world information, processes, interactions, relationships, even errors, by inventing objects that don't exist in the real world. We give life and intelligence to inanimate things. We take difficult-to-comprehend real-world objects and split them into simpler, more manageable software ones. We invent new objects. Each has a specific role to play in the application. Our measure of success lies in how clearly we invent a software reality that satisfies our application's requirements—and not in how closely it resembles the real world.&amp;lt;ref&amp;gt;http://books.google.com/books?id=vUF72vN5MY8C&amp;amp;pg=PA3&amp;amp;source=gbs_toc_r&amp;amp;cad=4#v=onepage&amp;amp;q&amp;amp;f=false Object Design: Roles, Responsibilities, and Collaborations by Rebecca Wirfs-Brock, Alan McKean&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''For example''', filling out and filing a form seems simple. But to perform that task in software, behind the simple forms, the application is validating the data against business rules, reading and refreshing the persistent data, guaranteeing the consistency of the information, and managing simultaneous access by dozens of users. Software objects display information, coordinate activities, compute, or connect to services.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Concept&lt;br /&gt;
! Short description&lt;br /&gt;
|-&lt;br /&gt;
|An object || an implementation of one or more roles.&lt;br /&gt;
|-&lt;br /&gt;
|A role || a set of related responsibilities.&lt;br /&gt;
|-&lt;br /&gt;
|A responsibility || an obligation to perform a task or know information&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Behavior ===&lt;br /&gt;
&lt;br /&gt;
=== Responsibilities ===&lt;br /&gt;
&lt;br /&gt;
=== Roles ===&lt;br /&gt;
An object has a specific purpose - a role it plays within a given context. Objects that play the same role can be interchanged. For example, there are several providers that can deliver letters and packages: DHL, FedEx, UPS, Post, Airborne. They all have the same purpose, if not the same way of carrying out their business. We choose from among them according to the requirements that you have for delivery. We pick among the mail carriers that meet your requirements.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
A role is a set of responsibilities that can be used interchangeably.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A well-defined object supports a clearly defined role. We use purposeful oversimplifications, or role stereotypes, to help focus an object's responsibilities. Stereotypes are characterizations of the roles needed by an application. Because our goal is to build consistent and easy-to-use objects, it is advantageous to stereotype objects, ignoring specifics of their behaviors and thinking about them at a higher level. By oversimplifying and characterizing it, we can ponder the nature of an object's role more easily. We find these stereotypes to be useful:&lt;br /&gt;
*Information holder - knows and provides information&lt;br /&gt;
*Structurer - maintains relationships between objects and information about those relationships&lt;br /&gt;
*Service provider - performs work and, in general, offers computing services&lt;br /&gt;
*Coordinator - reacts to events by delegating tasks to others&lt;br /&gt;
*Controller - makes decisions and closely directs others' actions&lt;br /&gt;
*Interfacer - transforms information and requests between distinct parts of our system&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Just as an actor tries to play a believable part in a play, an object takes on a character in an application by assuming responsibilities that define a meaningful role.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Protocols ===&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
==Additional Reading==&lt;br /&gt;
*[http://books.google.com/books?id=VQaf_vOTDzMC&amp;amp;pg=PA244&amp;amp;lpg=PA244&amp;amp;dq=%22language+centric%22+%22model-centric%22+%22responsibility+centric%22+object+oriented+design&amp;amp;source=bl&amp;amp;ots=tY3C6nStiA&amp;amp;sig=bEO2VyjGTobxQ362Yaubi542ZTc&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ei=f3KFUJ2-D4Ho8QTC_IHQBA&amp;amp;ved=0CEMQ6AEwAg#v=onepage&amp;amp;q=%22language%20centric%22%20%22model-centric%22%20%22responsibility%20centric%22%20object%20oriented%20design&amp;amp;f=false Flexible,Reliable Software using Patterns and Agile Development]&lt;br /&gt;
*[http://books.google.com/books?id=YnGz2ghKF-gC&amp;amp;pg=PA60&amp;amp;lpg=PA60&amp;amp;dq=%22language-centric%22+object+oriented+design&amp;amp;source=bl&amp;amp;ots=ko8xV4SZJs&amp;amp;sig=yemCujDGu_BEySZ_k32Kc0KVbgM&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ei=K8WFUOykNYW89gTcx4GQAg&amp;amp;ved=0CFEQ6AEwBA#v=onepage&amp;amp;q=%22language-centric%22%20object%20oriented%20design&amp;amp;f=false Jibitesh Mishra, Ashok Mohanty, &amp;lt;i&amp;gt;&amp;quot;Software Engineering&amp;quot;&amp;lt;/i&amp;gt;]&lt;br /&gt;
*[http://web.engr.oregonstate.edu/~budd/Books/oopintro3e/info/ReadMe.html An Introduction to Object Oriented Programming]&lt;/div&gt;</summary>
		<author><name>Rchakar</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w15_rr&amp;diff=67984</id>
		<title>CSC/ECE 517 Fall 2012/ch2a 2w15 rr</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w15_rr&amp;diff=67984"/>
		<updated>2012-10-23T06:32:10Z</updated>

		<summary type="html">&lt;p&gt;Rchakar: /* Roles */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
Object-oriented design is a programming model that began in the late 60's as software programs became more complex. The idea behind the approach was to build software systems by modeling them based on the real-world objects that they were trying to represent. For example, banking systems would contain customer objects, account objects and so on. Today, object-oriented design has been widely adopted &amp;lt;ref&amp;gt; [http://www.objectmentor.com/omSolutions/oops_what.html Introduction to Object Oriented Design]&amp;lt;/ref&amp;gt;. When done properly, this approach leads to simple, robust, flexible and modular software. When something goes wrong, the results could be bad. Object oriented design can be seen from different perspectives. In the language-centric perspective, objects are containers of data and methods. The model-centric perspective views the objects as model elements reflecting the real world objects and Responsibility-centric perspective views objects as interacting elements each playing a role in object community. Each of these perspectives are outlined in the following sections.&lt;br /&gt;
&lt;br /&gt;
==Background==&lt;br /&gt;
The history of object oriented design has many branches, and many people have contributed to this domain. The 1960s and 1970s saw the emergence of object oriented programming languages, such as Simula and Smalltalk, with key contributors such as Kristen Nygaard and Alan Kay, the visionary computer scientist who founded Smalltalk.&amp;lt;ref&amp;gt;[http://www.informit.com/articles/article.aspx?p=360440&amp;amp;seqNum=8 History of Object Oriented Design]&amp;lt;/ref&amp;gt;&lt;br /&gt;
But object oriented design was informal through that period, and it was only form 1982 that it became popular.  Contributors in this domain include Grady Booch, Kent Beck, Peter Coad, Don Firesmith, Ivar Jacobson (a UML founder), Steve Mellor, Bertrand Meyer, Jim Rumbaugh (a UML founder) and Rebecca Wirfs-Brock among others. Each of these perspectives are outlined in the following sections.&lt;br /&gt;
&lt;br /&gt;
==Object Oriented Design Perspectives==&lt;br /&gt;
===Language-centric perspective===&lt;br /&gt;
The focus of the language-centric perspective is classes and objects as building blocks for developing software. The emphasis is on the internal structure which are the fields and methods. Thus it is inherently a compile-time or static view which means that the definition speaks in terms of what it looks like in the following code:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
public class foo&lt;br /&gt;
{&lt;br /&gt;
 private int x;&lt;br /&gt;
 public static double y;&lt;br /&gt;
&lt;br /&gt;
 public int double (int x)&lt;br /&gt;
 {&lt;br /&gt;
   return (3*x);&lt;br /&gt;
 }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The implicit aspect of this view is that, an object is an entity in its own right and the definition is closed. Any object can be understood in isolation where the fields and methods are just enumerated. The advantage of this perspective is of that it is very concrete, closely related to the programming language level and therefore it is easy to understand. The disadvantage is that it does not help to structure the collaboration between objects, the dynamics, and this is typically where the hard challenges of design lie. Thus the perspective offers little guidance in the process of designing any realistic system.&amp;lt;ref&amp;gt;[https://docs.google.com/viewer?a=v&amp;amp;q=cache:Kl7VOfRFnNEJ:citeseerx.ist.psu.edu/viewdoc/download%3Fdoi%3D10.1.1.86.7500%26rep%3Drep1%26type%3Dpdf+%22language+centric%22+object+oriented+design&amp;amp;hl=en&amp;amp;gl=us&amp;amp;pid=bl&amp;amp;srcid=ADGEESj-HffIDcwsyYlGssvRYS3OAEloLCID6dCIHQeZ_WQ5W-fy9B3rC4uxbUKVBGzyPVn4uBra4ot0hCS71JC3NNy7nBVXRxzR4z06p3fVQKSIjn5t_fFr3dzrMICa5qNUVRnYHEAv&amp;amp;sig=AHIEtbRX7G0XgBl1mKxnPINiorZvNhW32Q Henrik Baerbak Christensen, &amp;lt;i&amp;gt;&amp;quot;Implications of Perspective in Teaching Objects First and Object Design&amp;quot;&amp;lt;/i&amp;gt;, Proceedings of the 10th annual &amp;lt;i&amp;gt;SIGCSE&amp;lt;/i&amp;gt; conference on Innovation and technology in computer science education, Department of Computer Science, University of Aarhus, 2005.]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Model-centric perspective===&lt;br /&gt;
In this perspective, the objects(classes, fields) and their relationships like inheritance, association, aggregation are designed by using some model. Here the program execution is a simulation of some part of the&lt;br /&gt;
world, and objects are perceived as the parts of the model. The perspective is often explained through analogies to other models like toy railways, traffic simulations, computer games, etc. This perspective stresses objects as entities in a larger context (they are parts of a model) as opposed to the self-contained language-centric definition. This approach works fine for real life systems such as an order-entry system, a library system, boat-rental and various other real world entity oriented systems. This naturally leads to a strong focus on what the relations are between the parts: association, generalization, composition. Dynamics is an inherent part of the concept simulation and the explicit guideline for designing object interaction is to imitate real world or model interactions.&lt;br /&gt;
Let us consider a real world example of designing a partial implementation of the board game-Backgammon to understand the objected oriented using a model-centric perspective. The physical parts of Backgammon identifiable are the checkers, points, board, dice, player, etc. The diagram below is a design of model parts (classes) and their relationships (relations).&lt;br /&gt;
&lt;br /&gt;
===Responsibility-centric perspective===&lt;br /&gt;
This perspective stresses on the behavior of software systems and the concepts used to do design include behavior, roles, responsibilities and protocol. Here, the primary focus is the dynamics of the program. Roles and responsibilities are the core concepts in this perspective and hence it has more coupling to behavior when compared to static elements like objects or model parts. There is a difference between behavior and responsibility, where behavior is the concrete actions taken by objects where as responsibility is to fulfill requests through any number of concrete behaviors. So, responsibility is more abstract than behavior.&lt;br /&gt;
One can look at responsibility-centric perspective as an extension of the model-centric perspective with a shift of focus (from a focus on model parts to a focus on the simulation or dynamical aspects). The Backgammon example can again be&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Object Oriented Design Concepts &amp;lt;ref&amp;gt;http://books.google.com/books/about/Object_Design.html?id=vUF72vN5MY8C&amp;lt;/ref&amp;gt;==&lt;br /&gt;
[[File:AnObject.jpg|350px|right|thumb|An object encapsulates scripts and information&amp;lt;ref&amp;gt;http://books.google.com/books?id=vUF72vN5MY8C&amp;amp;pg=PA2&amp;amp;source=gbs_toc_r&amp;amp;cad=4#v=onepage&amp;amp;q&amp;amp;f=false Object Design: Roles, Responsibilities, and Collaborations by Rebecca Wirfs-Brock, Alan McKean&amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
A software application is constructed from parts. These parts -software objects- interact by sending messages to request information or action from others. Throughout its lifetime, each object remains responsible for responding to a fixed set of requests. To fulfill these requests, objects encapsulate scripted responses and the information that they base them on (see Figure 4a). If an object is designed to remember certain facts, it can use them to respond differently to future requests.&lt;br /&gt;
&lt;br /&gt;
Building an object-oriented application means inventing appropriate machinery. We represent real-world information, processes, interactions, relationships, even errors, by inventing objects that don't exist in the real world. We give life and intelligence to inanimate things. We take difficult-to-comprehend real-world objects and split them into simpler, more manageable software ones. We invent new objects. Each has a specific role to play in the application. Our measure of success lies in how clearly we invent a software reality that satisfies our application's requirements—and not in how closely it resembles the real world.&amp;lt;ref&amp;gt;http://books.google.com/books?id=vUF72vN5MY8C&amp;amp;pg=PA3&amp;amp;source=gbs_toc_r&amp;amp;cad=4#v=onepage&amp;amp;q&amp;amp;f=false Object Design: Roles, Responsibilities, and Collaborations by Rebecca Wirfs-Brock, Alan McKean&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''For example''', filling out and filing a form seems simple. But to perform that task in software, behind the simple forms, the application is validating the data against business rules, reading and refreshing the persistent data, guaranteeing the consistency of the information, and managing simultaneous access by dozens of users. Software objects display information, coordinate activities, compute, or connect to services.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Concept&lt;br /&gt;
! Short description&lt;br /&gt;
|-&lt;br /&gt;
|An object || an implementation of one or more roles.&lt;br /&gt;
|-&lt;br /&gt;
|A role || a set of related responsibilities.&lt;br /&gt;
|-&lt;br /&gt;
|A responsibility || an obligation to perform a task or know information&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Behavior ===&lt;br /&gt;
&lt;br /&gt;
=== Responsibilities ===&lt;br /&gt;
&lt;br /&gt;
=== Roles ===&lt;br /&gt;
An object has a specific purpose - a role it plays within a given context. Objects that play the same role can be interchanged. For example, there are several providers that can deliver letters and packages: DHL, FedEx, UPS, Post, Airborne. They all have the same purpose, if not the same way of carrying out their business. We choose from among them according to the requirements that you have for delivery. We pick among the mail carriers that meet your requirements.&lt;br /&gt;
&lt;br /&gt;
{{Pre|&lt;br /&gt;
A role is a set of responsibilities that can be used interchangeably.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
A well-defined object supports a clearly defined role. We use purposeful oversimplifications, or role stereotypes, to help focus an object's responsibilities. Stereotypes are characterizations of the roles needed by an application. Because our goal is to build consistent and easy-to-use objects, it is advantageous to stereotype objects, ignoring specifics of their behaviors and thinking about them at a higher level. By oversimplifying and characterizing it, we can ponder the nature of an object's role more easily. We find these stereotypes to be useful:&lt;br /&gt;
*Information holder - knows and provides information&lt;br /&gt;
*Structurer - maintains relationships between objects and information about those relationships&lt;br /&gt;
*Service provider - performs work and, in general, offers computing services&lt;br /&gt;
*Coordinator - reacts to events by delegating tasks to others&lt;br /&gt;
*Controller - makes decisions and closely directs others' actions&lt;br /&gt;
*Interfacer - transforms information and requests between distinct parts of our system&lt;br /&gt;
{{Pre|&lt;br /&gt;
Just as an actor tries to play a believable part in a play, an object takes on a character in an application by assuming responsibilities that define a meaningful role.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Protocols ===&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
==Additional Reading==&lt;br /&gt;
*[http://books.google.com/books?id=VQaf_vOTDzMC&amp;amp;pg=PA244&amp;amp;lpg=PA244&amp;amp;dq=%22language+centric%22+%22model-centric%22+%22responsibility+centric%22+object+oriented+design&amp;amp;source=bl&amp;amp;ots=tY3C6nStiA&amp;amp;sig=bEO2VyjGTobxQ362Yaubi542ZTc&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ei=f3KFUJ2-D4Ho8QTC_IHQBA&amp;amp;ved=0CEMQ6AEwAg#v=onepage&amp;amp;q=%22language%20centric%22%20%22model-centric%22%20%22responsibility%20centric%22%20object%20oriented%20design&amp;amp;f=false Flexible,Reliable Software using Patterns and Agile Development]&lt;br /&gt;
*[http://books.google.com/books?id=YnGz2ghKF-gC&amp;amp;pg=PA60&amp;amp;lpg=PA60&amp;amp;dq=%22language-centric%22+object+oriented+design&amp;amp;source=bl&amp;amp;ots=ko8xV4SZJs&amp;amp;sig=yemCujDGu_BEySZ_k32Kc0KVbgM&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ei=K8WFUOykNYW89gTcx4GQAg&amp;amp;ved=0CFEQ6AEwBA#v=onepage&amp;amp;q=%22language-centric%22%20object%20oriented%20design&amp;amp;f=false Jibitesh Mishra, Ashok Mohanty, &amp;lt;i&amp;gt;&amp;quot;Software Engineering&amp;quot;&amp;lt;/i&amp;gt;]&lt;br /&gt;
*[http://web.engr.oregonstate.edu/~budd/Books/oopintro3e/info/ReadMe.html An Introduction to Object Oriented Programming]&lt;/div&gt;</summary>
		<author><name>Rchakar</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w15_rr&amp;diff=67983</id>
		<title>CSC/ECE 517 Fall 2012/ch2a 2w15 rr</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w15_rr&amp;diff=67983"/>
		<updated>2012-10-23T06:30:03Z</updated>

		<summary type="html">&lt;p&gt;Rchakar: /* Roles */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
Object-oriented design is a programming model that began in the late 60's as software programs became more complex. The idea behind the approach was to build software systems by modeling them based on the real-world objects that they were trying to represent. For example, banking systems would contain customer objects, account objects and so on. Today, object-oriented design has been widely adopted &amp;lt;ref&amp;gt; [http://www.objectmentor.com/omSolutions/oops_what.html Introduction to Object Oriented Design]&amp;lt;/ref&amp;gt;. When done properly, this approach leads to simple, robust, flexible and modular software. When something goes wrong, the results could be bad. Object oriented design can be seen from different perspectives. In the language-centric perspective, objects are containers of data and methods. The model-centric perspective views the objects as model elements reflecting the real world objects and Responsibility-centric perspective views objects as interacting elements each playing a role in object community. Each of these perspectives are outlined in the following sections.&lt;br /&gt;
&lt;br /&gt;
==Background==&lt;br /&gt;
The history of object oriented design has many branches, and many people have contributed to this domain. The 1960s and 1970s saw the emergence of object oriented programming languages, such as Simula and Smalltalk, with key contributors such as Kristen Nygaard and Alan Kay, the visionary computer scientist who founded Smalltalk.&amp;lt;ref&amp;gt;[http://www.informit.com/articles/article.aspx?p=360440&amp;amp;seqNum=8 History of Object Oriented Design]&amp;lt;/ref&amp;gt;&lt;br /&gt;
But object oriented design was informal through that period, and it was only form 1982 that it became popular.  Contributors in this domain include Grady Booch, Kent Beck, Peter Coad, Don Firesmith, Ivar Jacobson (a UML founder), Steve Mellor, Bertrand Meyer, Jim Rumbaugh (a UML founder) and Rebecca Wirfs-Brock among others. Each of these perspectives are outlined in the following sections.&lt;br /&gt;
&lt;br /&gt;
==Object Oriented Design Perspectives==&lt;br /&gt;
===Language-centric perspective===&lt;br /&gt;
The focus of the language-centric perspective is classes and objects as building blocks for developing software. The emphasis is on the internal structure which are the fields and methods. Thus it is inherently a compile-time or static view which means that the definition speaks in terms of what it looks like in the following code:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
public class foo&lt;br /&gt;
{&lt;br /&gt;
 private int x;&lt;br /&gt;
 public static double y;&lt;br /&gt;
&lt;br /&gt;
 public int double (int x)&lt;br /&gt;
 {&lt;br /&gt;
   return (3*x);&lt;br /&gt;
 }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The implicit aspect of this view is that, an object is an entity in its own right and the definition is closed. Any object can be understood in isolation where the fields and methods are just enumerated. The advantage of this perspective is of that it is very concrete, closely related to the programming language level and therefore it is easy to understand. The disadvantage is that it does not help to structure the collaboration between objects, the dynamics, and this is typically where the hard challenges of design lie. Thus the perspective offers little guidance in the process of designing any realistic system.&amp;lt;ref&amp;gt;[https://docs.google.com/viewer?a=v&amp;amp;q=cache:Kl7VOfRFnNEJ:citeseerx.ist.psu.edu/viewdoc/download%3Fdoi%3D10.1.1.86.7500%26rep%3Drep1%26type%3Dpdf+%22language+centric%22+object+oriented+design&amp;amp;hl=en&amp;amp;gl=us&amp;amp;pid=bl&amp;amp;srcid=ADGEESj-HffIDcwsyYlGssvRYS3OAEloLCID6dCIHQeZ_WQ5W-fy9B3rC4uxbUKVBGzyPVn4uBra4ot0hCS71JC3NNy7nBVXRxzR4z06p3fVQKSIjn5t_fFr3dzrMICa5qNUVRnYHEAv&amp;amp;sig=AHIEtbRX7G0XgBl1mKxnPINiorZvNhW32Q Henrik Baerbak Christensen, &amp;lt;i&amp;gt;&amp;quot;Implications of Perspective in Teaching Objects First and Object Design&amp;quot;&amp;lt;/i&amp;gt;, Proceedings of the 10th annual &amp;lt;i&amp;gt;SIGCSE&amp;lt;/i&amp;gt; conference on Innovation and technology in computer science education, Department of Computer Science, University of Aarhus, 2005.]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Model-centric perspective===&lt;br /&gt;
In this perspective, the objects(classes, fields) and their relationships like inheritance, association, aggregation are designed by using some model. Here the program execution is a simulation of some part of the&lt;br /&gt;
world, and objects are perceived as the parts of the model. The perspective is often explained through analogies to other models like toy railways, traffic simulations, computer games, etc. This perspective stresses objects as entities in a larger context (they are parts of a model) as opposed to the self-contained language-centric definition. This approach works fine for real life systems such as an order-entry system, a library system, boat-rental and various other real world entity oriented systems. This naturally leads to a strong focus on what the relations are between the parts: association, generalization, composition. Dynamics is an inherent part of the concept simulation and the explicit guideline for designing object interaction is to imitate real world or model interactions.&lt;br /&gt;
Let us consider a real world example of designing a partial implementation of the board game-Backgammon to understand the objected oriented using a model-centric perspective. The physical parts of Backgammon identifiable are the checkers, points, board, dice, player, etc. The diagram below is a design of model parts (classes) and their relationships (relations).&lt;br /&gt;
&lt;br /&gt;
===Responsibility-centric perspective===&lt;br /&gt;
This perspective stresses on the behavior of software systems and the concepts used to do design include behavior, roles, responsibilities and protocol. Here, the primary focus is the dynamics of the program. Roles and responsibilities are the core concepts in this perspective and hence it has more coupling to behavior when compared to static elements like objects or model parts. There is a difference between behavior and responsibility, where behavior is the concrete actions taken by objects where as responsibility is to fulfill requests through any number of concrete behaviors. So, responsibility is more abstract than behavior.&lt;br /&gt;
One can look at responsibility-centric perspective as an extension of the model-centric perspective with a shift of focus (from a focus on model parts to a focus on the simulation or dynamical aspects). The Backgammon example can again be&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Object Oriented Design Concepts &amp;lt;ref&amp;gt;http://books.google.com/books/about/Object_Design.html?id=vUF72vN5MY8C&amp;lt;/ref&amp;gt;==&lt;br /&gt;
[[File:AnObject.jpg|350px|right|thumb|An object encapsulates scripts and information&amp;lt;ref&amp;gt;http://books.google.com/books?id=vUF72vN5MY8C&amp;amp;pg=PA2&amp;amp;source=gbs_toc_r&amp;amp;cad=4#v=onepage&amp;amp;q&amp;amp;f=false Object Design: Roles, Responsibilities, and Collaborations by Rebecca Wirfs-Brock, Alan McKean&amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
A software application is constructed from parts. These parts -software objects- interact by sending messages to request information or action from others. Throughout its lifetime, each object remains responsible for responding to a fixed set of requests. To fulfill these requests, objects encapsulate scripted responses and the information that they base them on (see Figure 4a). If an object is designed to remember certain facts, it can use them to respond differently to future requests.&lt;br /&gt;
&lt;br /&gt;
Building an object-oriented application means inventing appropriate machinery. We represent real-world information, processes, interactions, relationships, even errors, by inventing objects that don't exist in the real world. We give life and intelligence to inanimate things. We take difficult-to-comprehend real-world objects and split them into simpler, more manageable software ones. We invent new objects. Each has a specific role to play in the application. Our measure of success lies in how clearly we invent a software reality that satisfies our application's requirements—and not in how closely it resembles the real world.&amp;lt;ref&amp;gt;http://books.google.com/books?id=vUF72vN5MY8C&amp;amp;pg=PA3&amp;amp;source=gbs_toc_r&amp;amp;cad=4#v=onepage&amp;amp;q&amp;amp;f=false Object Design: Roles, Responsibilities, and Collaborations by Rebecca Wirfs-Brock, Alan McKean&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''For example''', filling out and filing a form seems simple. But to perform that task in software, behind the simple forms, the application is validating the data against business rules, reading and refreshing the persistent data, guaranteeing the consistency of the information, and managing simultaneous access by dozens of users. Software objects display information, coordinate activities, compute, or connect to services.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Concept&lt;br /&gt;
! Short description&lt;br /&gt;
|-&lt;br /&gt;
|An object || an implementation of one or more roles.&lt;br /&gt;
|-&lt;br /&gt;
|A role || a set of related responsibilities.&lt;br /&gt;
|-&lt;br /&gt;
|A responsibility || an obligation to perform a task or know information&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Behavior ===&lt;br /&gt;
&lt;br /&gt;
=== Responsibilities ===&lt;br /&gt;
&lt;br /&gt;
=== Roles ===&lt;br /&gt;
An object has a specific purpose - a role it plays within a given context. Objects that play the same role can be interchanged. For example, there are several providers that can deliver letters and packages: DHL, FedEx, UPS, Post, Airborne. They all have the same purpose, if not the same way of carrying out their business. We choose from among them according to the requirements that you have for delivery. We pick among the mail carriers that meet your requirements.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
A role is a set of responsibilities that can be used interchangeably.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A well-defined object supports a clearly defined role. We use purposeful oversimplifications, or role stereotypes, to help focus an object's responsibilities. Stereotypes are characterizations of the roles needed by an application. Because our goal is to build consistent and easy-to-use objects, it is advantageous to stereotype objects, ignoring specifics of their behaviors and thinking about them at a higher level. By oversimplifying and characterizing it, we can ponder the nature of an object's role more easily. We find these stereotypes to be useful:&lt;br /&gt;
*Information holder - knows and provides information&lt;br /&gt;
*Structurer - maintains relationships between objects and information about those relationships&lt;br /&gt;
*Service provider - performs work and, in general, offers computing services&lt;br /&gt;
*Coordinator - reacts to events by delegating tasks to others&lt;br /&gt;
*Controller - makes decisions and closely directs others' actions&lt;br /&gt;
*Interfacer - transforms information and requests between distinct parts of our system&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Just as an actor tries to play a believable part in a play, an object takes on a character in an application by assuming responsibilities that define a meaningful role.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Protocols ===&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
==Additional Reading==&lt;br /&gt;
*[http://books.google.com/books?id=VQaf_vOTDzMC&amp;amp;pg=PA244&amp;amp;lpg=PA244&amp;amp;dq=%22language+centric%22+%22model-centric%22+%22responsibility+centric%22+object+oriented+design&amp;amp;source=bl&amp;amp;ots=tY3C6nStiA&amp;amp;sig=bEO2VyjGTobxQ362Yaubi542ZTc&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ei=f3KFUJ2-D4Ho8QTC_IHQBA&amp;amp;ved=0CEMQ6AEwAg#v=onepage&amp;amp;q=%22language%20centric%22%20%22model-centric%22%20%22responsibility%20centric%22%20object%20oriented%20design&amp;amp;f=false Flexible,Reliable Software using Patterns and Agile Development]&lt;br /&gt;
*[http://books.google.com/books?id=YnGz2ghKF-gC&amp;amp;pg=PA60&amp;amp;lpg=PA60&amp;amp;dq=%22language-centric%22+object+oriented+design&amp;amp;source=bl&amp;amp;ots=ko8xV4SZJs&amp;amp;sig=yemCujDGu_BEySZ_k32Kc0KVbgM&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ei=K8WFUOykNYW89gTcx4GQAg&amp;amp;ved=0CFEQ6AEwBA#v=onepage&amp;amp;q=%22language-centric%22%20object%20oriented%20design&amp;amp;f=false Jibitesh Mishra, Ashok Mohanty, &amp;lt;i&amp;gt;&amp;quot;Software Engineering&amp;quot;&amp;lt;/i&amp;gt;]&lt;br /&gt;
*[http://web.engr.oregonstate.edu/~budd/Books/oopintro3e/info/ReadMe.html An Introduction to Object Oriented Programming]&lt;/div&gt;</summary>
		<author><name>Rchakar</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w15_rr&amp;diff=67979</id>
		<title>CSC/ECE 517 Fall 2012/ch2a 2w15 rr</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w15_rr&amp;diff=67979"/>
		<updated>2012-10-23T06:29:25Z</updated>

		<summary type="html">&lt;p&gt;Rchakar: /* Roles */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
Object-oriented design is a programming model that began in the late 60's as software programs became more complex. The idea behind the approach was to build software systems by modeling them based on the real-world objects that they were trying to represent. For example, banking systems would contain customer objects, account objects and so on. Today, object-oriented design has been widely adopted &amp;lt;ref&amp;gt; [http://www.objectmentor.com/omSolutions/oops_what.html Introduction to Object Oriented Design]&amp;lt;/ref&amp;gt;. When done properly, this approach leads to simple, robust, flexible and modular software. When something goes wrong, the results could be bad. Object oriented design can be seen from different perspectives. In the language-centric perspective, objects are containers of data and methods. The model-centric perspective views the objects as model elements reflecting the real world objects and Responsibility-centric perspective views objects as interacting elements each playing a role in object community. Each of these perspectives are outlined in the following sections.&lt;br /&gt;
&lt;br /&gt;
==Background==&lt;br /&gt;
The history of object oriented design has many branches, and many people have contributed to this domain. The 1960s and 1970s saw the emergence of object oriented programming languages, such as Simula and Smalltalk, with key contributors such as Kristen Nygaard and Alan Kay, the visionary computer scientist who founded Smalltalk.&amp;lt;ref&amp;gt;[http://www.informit.com/articles/article.aspx?p=360440&amp;amp;seqNum=8 History of Object Oriented Design]&amp;lt;/ref&amp;gt;&lt;br /&gt;
But object oriented design was informal through that period, and it was only form 1982 that it became popular.  Contributors in this domain include Grady Booch, Kent Beck, Peter Coad, Don Firesmith, Ivar Jacobson (a UML founder), Steve Mellor, Bertrand Meyer, Jim Rumbaugh (a UML founder) and Rebecca Wirfs-Brock among others. Each of these perspectives are outlined in the following sections.&lt;br /&gt;
&lt;br /&gt;
==Object Oriented Design Perspectives==&lt;br /&gt;
===Language-centric perspective===&lt;br /&gt;
The focus of the language-centric perspective is classes and objects as building blocks for developing software. The emphasis is on the internal structure which are the fields and methods. Thus it is inherently a compile-time or static view which means that the definition speaks in terms of what it looks like in the following code:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
public class foo&lt;br /&gt;
{&lt;br /&gt;
 private int x;&lt;br /&gt;
 public static double y;&lt;br /&gt;
&lt;br /&gt;
 public int double (int x)&lt;br /&gt;
 {&lt;br /&gt;
   return (3*x);&lt;br /&gt;
 }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The implicit aspect of this view is that, an object is an entity in its own right and the definition is closed. Any object can be understood in isolation where the fields and methods are just enumerated. The advantage of this perspective is of that it is very concrete, closely related to the programming language level and therefore it is easy to understand. The disadvantage is that it does not help to structure the collaboration between objects, the dynamics, and this is typically where the hard challenges of design lie. Thus the perspective offers little guidance in the process of designing any realistic system.&amp;lt;ref&amp;gt;[https://docs.google.com/viewer?a=v&amp;amp;q=cache:Kl7VOfRFnNEJ:citeseerx.ist.psu.edu/viewdoc/download%3Fdoi%3D10.1.1.86.7500%26rep%3Drep1%26type%3Dpdf+%22language+centric%22+object+oriented+design&amp;amp;hl=en&amp;amp;gl=us&amp;amp;pid=bl&amp;amp;srcid=ADGEESj-HffIDcwsyYlGssvRYS3OAEloLCID6dCIHQeZ_WQ5W-fy9B3rC4uxbUKVBGzyPVn4uBra4ot0hCS71JC3NNy7nBVXRxzR4z06p3fVQKSIjn5t_fFr3dzrMICa5qNUVRnYHEAv&amp;amp;sig=AHIEtbRX7G0XgBl1mKxnPINiorZvNhW32Q Henrik Baerbak Christensen, &amp;lt;i&amp;gt;&amp;quot;Implications of Perspective in Teaching Objects First and Object Design&amp;quot;&amp;lt;/i&amp;gt;, Proceedings of the 10th annual &amp;lt;i&amp;gt;SIGCSE&amp;lt;/i&amp;gt; conference on Innovation and technology in computer science education, Department of Computer Science, University of Aarhus, 2005.]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Model-centric perspective===&lt;br /&gt;
In this perspective, the objects(classes, fields) and their relationships like inheritance, association, aggregation are designed by using some model. Here the program execution is a simulation of some part of the&lt;br /&gt;
world, and objects are perceived as the parts of the model. The perspective is often explained through analogies to other models like toy railways, traffic simulations, computer games, etc. This perspective stresses objects as entities in a larger context (they are parts of a model) as opposed to the self-contained language-centric definition. This approach works fine for real life systems such as an order-entry system, a library system, boat-rental and various other real world entity oriented systems. This naturally leads to a strong focus on what the relations are between the parts: association, generalization, composition. Dynamics is an inherent part of the concept simulation and the explicit guideline for designing object interaction is to imitate real world or model interactions.&lt;br /&gt;
Let us consider a real world example of designing a partial implementation of the board game-Backgammon to understand the objected oriented using a model-centric perspective. The physical parts of Backgammon identifiable are the checkers, points, board, dice, player, etc. The diagram below is a design of model parts (classes) and their relationships (relations).&lt;br /&gt;
&lt;br /&gt;
===Responsibility-centric perspective===&lt;br /&gt;
This perspective stresses on the behavior of software systems and the concepts used to do design include behavior, roles, responsibilities and protocol. Here, the primary focus is the dynamics of the program. Roles and responsibilities are the core concepts in this perspective and hence it has more coupling to behavior when compared to static elements like objects or model parts. There is a difference between behavior and responsibility, where behavior is the concrete actions taken by objects where as responsibility is to fulfill requests through any number of concrete behaviors. So, responsibility is more abstract than behavior.&lt;br /&gt;
One can look at responsibility-centric perspective as an extension of the model-centric perspective with a shift of focus (from a focus on model parts to a focus on the simulation or dynamical aspects). The Backgammon example can again be&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Object Oriented Design Concepts &amp;lt;ref&amp;gt;http://books.google.com/books/about/Object_Design.html?id=vUF72vN5MY8C&amp;lt;/ref&amp;gt;==&lt;br /&gt;
[[File:AnObject.jpg|350px|right|thumb|An object encapsulates scripts and information&amp;lt;ref&amp;gt;http://books.google.com/books?id=vUF72vN5MY8C&amp;amp;pg=PA2&amp;amp;source=gbs_toc_r&amp;amp;cad=4#v=onepage&amp;amp;q&amp;amp;f=false Object Design: Roles, Responsibilities, and Collaborations by Rebecca Wirfs-Brock, Alan McKean&amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
A software application is constructed from parts. These parts -software objects- interact by sending messages to request information or action from others. Throughout its lifetime, each object remains responsible for responding to a fixed set of requests. To fulfill these requests, objects encapsulate scripted responses and the information that they base them on (see Figure 4a). If an object is designed to remember certain facts, it can use them to respond differently to future requests.&lt;br /&gt;
&lt;br /&gt;
Building an object-oriented application means inventing appropriate machinery. We represent real-world information, processes, interactions, relationships, even errors, by inventing objects that don't exist in the real world. We give life and intelligence to inanimate things. We take difficult-to-comprehend real-world objects and split them into simpler, more manageable software ones. We invent new objects. Each has a specific role to play in the application. Our measure of success lies in how clearly we invent a software reality that satisfies our application's requirements—and not in how closely it resembles the real world.&amp;lt;ref&amp;gt;http://books.google.com/books?id=vUF72vN5MY8C&amp;amp;pg=PA3&amp;amp;source=gbs_toc_r&amp;amp;cad=4#v=onepage&amp;amp;q&amp;amp;f=false Object Design: Roles, Responsibilities, and Collaborations by Rebecca Wirfs-Brock, Alan McKean&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''For example''', filling out and filing a form seems simple. But to perform that task in software, behind the simple forms, the application is validating the data against business rules, reading and refreshing the persistent data, guaranteeing the consistency of the information, and managing simultaneous access by dozens of users. Software objects display information, coordinate activities, compute, or connect to services.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Concept&lt;br /&gt;
! Short description&lt;br /&gt;
|-&lt;br /&gt;
|An object || an implementation of one or more roles.&lt;br /&gt;
|-&lt;br /&gt;
|A role || a set of related responsibilities.&lt;br /&gt;
|-&lt;br /&gt;
|A responsibility || an obligation to perform a task or know information&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Behavior ===&lt;br /&gt;
&lt;br /&gt;
=== Responsibilities ===&lt;br /&gt;
&lt;br /&gt;
=== Roles ===&lt;br /&gt;
An object has a specific purpose - a role it plays within a given context. Objects that play the same role can be interchanged. For example, there are several providers that can deliver letters and packages: DHL, FedEx, UPS, Post, Airborne. They all have the same purpose, if not the same way of carrying out their business. We choose from among them according to the requirements that you have for delivery. We pick among the mail carriers that meet your requirements.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
A role is a set of responsibilities that can be used interchangeably.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A well-defined object supports a clearly defined role. We use purposeful oversimplifications, or role stereotypes, to help focus an object's responsibilities. Stereotypes are characterizations of the roles needed by an application. Because our goal is to build consistent and easy-to-use objects, it is advantageous to stereotype objects, ignoring specifics of their behaviors and thinking about them at a higher level. By oversimplifying and characterizing it, we can ponder the nature of an object's role more easily. We find these stereotypes to be useful:&lt;br /&gt;
*Information holder - knows and provides information&lt;br /&gt;
*Structurer - maintains relationships between objects and information about those relationships&lt;br /&gt;
*Service provider - performs work and, in general, offers computing services&lt;br /&gt;
*Coordinator - reacts to events by delegating tasks to others&lt;br /&gt;
*Controller - makes decisions and closely directs others' actions&lt;br /&gt;
*Interfacer - transforms information and requests between distinct parts of our system&lt;br /&gt;
Just as an actor tries to play a believable part in a play, an object takes on a character in an application by assuming responsibilities that define a meaningful role.&lt;br /&gt;
&lt;br /&gt;
=== Protocols ===&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
==Additional Reading==&lt;br /&gt;
*[http://books.google.com/books?id=VQaf_vOTDzMC&amp;amp;pg=PA244&amp;amp;lpg=PA244&amp;amp;dq=%22language+centric%22+%22model-centric%22+%22responsibility+centric%22+object+oriented+design&amp;amp;source=bl&amp;amp;ots=tY3C6nStiA&amp;amp;sig=bEO2VyjGTobxQ362Yaubi542ZTc&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ei=f3KFUJ2-D4Ho8QTC_IHQBA&amp;amp;ved=0CEMQ6AEwAg#v=onepage&amp;amp;q=%22language%20centric%22%20%22model-centric%22%20%22responsibility%20centric%22%20object%20oriented%20design&amp;amp;f=false Flexible,Reliable Software using Patterns and Agile Development]&lt;br /&gt;
*[http://books.google.com/books?id=YnGz2ghKF-gC&amp;amp;pg=PA60&amp;amp;lpg=PA60&amp;amp;dq=%22language-centric%22+object+oriented+design&amp;amp;source=bl&amp;amp;ots=ko8xV4SZJs&amp;amp;sig=yemCujDGu_BEySZ_k32Kc0KVbgM&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ei=K8WFUOykNYW89gTcx4GQAg&amp;amp;ved=0CFEQ6AEwBA#v=onepage&amp;amp;q=%22language-centric%22%20object%20oriented%20design&amp;amp;f=false Jibitesh Mishra, Ashok Mohanty, &amp;lt;i&amp;gt;&amp;quot;Software Engineering&amp;quot;&amp;lt;/i&amp;gt;]&lt;br /&gt;
*[http://web.engr.oregonstate.edu/~budd/Books/oopintro3e/info/ReadMe.html An Introduction to Object Oriented Programming]&lt;/div&gt;</summary>
		<author><name>Rchakar</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w15_rr&amp;diff=67976</id>
		<title>CSC/ECE 517 Fall 2012/ch2a 2w15 rr</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w15_rr&amp;diff=67976"/>
		<updated>2012-10-23T06:23:32Z</updated>

		<summary type="html">&lt;p&gt;Rchakar: /* Roles */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
Object-oriented design is a programming model that began in the late 60's as software programs became more complex. The idea behind the approach was to build software systems by modeling them based on the real-world objects that they were trying to represent. For example, banking systems would contain customer objects, account objects and so on. Today, object-oriented design has been widely adopted &amp;lt;ref&amp;gt; [http://www.objectmentor.com/omSolutions/oops_what.html Introduction to Object Oriented Design]&amp;lt;/ref&amp;gt;. When done properly, this approach leads to simple, robust, flexible and modular software. When something goes wrong, the results could be bad. Object oriented design can be seen from different perspectives. In the language-centric perspective, objects are containers of data and methods. The model-centric perspective views the objects as model elements reflecting the real world objects and Responsibility-centric perspective views objects as interacting elements each playing a role in object community. Each of these perspectives are outlined in the following sections.&lt;br /&gt;
&lt;br /&gt;
==Background==&lt;br /&gt;
The history of object oriented design has many branches, and many people have contributed to this domain. The 1960s and 1970s saw the emergence of object oriented programming languages, such as Simula and Smalltalk, with key contributors such as Kristen Nygaard and Alan Kay, the visionary computer scientist who founded Smalltalk.&amp;lt;ref&amp;gt;[http://www.informit.com/articles/article.aspx?p=360440&amp;amp;seqNum=8 History of Object Oriented Design]&amp;lt;/ref&amp;gt;&lt;br /&gt;
But object oriented design was informal through that period, and it was only form 1982 that it became popular.  Contributors in this domain include Grady Booch, Kent Beck, Peter Coad, Don Firesmith, Ivar Jacobson (a UML founder), Steve Mellor, Bertrand Meyer, Jim Rumbaugh (a UML founder) and Rebecca Wirfs-Brock among others. Each of these perspectives are outlined in the following sections.&lt;br /&gt;
&lt;br /&gt;
==Object Oriented Design Perspectives==&lt;br /&gt;
===Language-centric perspective===&lt;br /&gt;
The focus of the language-centric perspective is classes and objects as building blocks for developing software. The emphasis is on the internal structure which are the fields and methods. Thus it is inherently a compile-time or static view which means that the definition speaks in terms of what it looks like in the following code:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
public class foo&lt;br /&gt;
{&lt;br /&gt;
 private int x;&lt;br /&gt;
 public static double y;&lt;br /&gt;
&lt;br /&gt;
 public int double (int x)&lt;br /&gt;
 {&lt;br /&gt;
   return (3*x);&lt;br /&gt;
 }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The implicit aspect of this view is that, an object is an entity in its own right and the definition is closed. Any object can be understood in isolation where the fields and methods are just enumerated. The advantage of this perspective is of that it is very concrete, closely related to the programming language level and therefore it is easy to understand. The disadvantage is that it does not help to structure the collaboration between objects, the dynamics, and this is typically where the hard challenges of design lie. Thus the perspective offers little guidance in the process of designing any realistic system.&amp;lt;ref&amp;gt;[https://docs.google.com/viewer?a=v&amp;amp;q=cache:Kl7VOfRFnNEJ:citeseerx.ist.psu.edu/viewdoc/download%3Fdoi%3D10.1.1.86.7500%26rep%3Drep1%26type%3Dpdf+%22language+centric%22+object+oriented+design&amp;amp;hl=en&amp;amp;gl=us&amp;amp;pid=bl&amp;amp;srcid=ADGEESj-HffIDcwsyYlGssvRYS3OAEloLCID6dCIHQeZ_WQ5W-fy9B3rC4uxbUKVBGzyPVn4uBra4ot0hCS71JC3NNy7nBVXRxzR4z06p3fVQKSIjn5t_fFr3dzrMICa5qNUVRnYHEAv&amp;amp;sig=AHIEtbRX7G0XgBl1mKxnPINiorZvNhW32Q Henrik Baerbak Christensen, &amp;lt;i&amp;gt;&amp;quot;Implications of Perspective in Teaching Objects First and Object Design&amp;quot;&amp;lt;/i&amp;gt;, Proceedings of the 10th annual &amp;lt;i&amp;gt;SIGCSE&amp;lt;/i&amp;gt; conference on Innovation and technology in computer science education, Department of Computer Science, University of Aarhus, 2005.]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Model-centric perspective===&lt;br /&gt;
In this perspective, the objects(classes, fields) and their relationships like inheritance, association, aggregation are designed by using some model. Here the program execution is a simulation of some part of the&lt;br /&gt;
world, and objects are perceived as the parts of the model. The perspective is often explained through analogies to other models like toy railways, traffic simulations, computer games, etc. This perspective stresses objects as entities in a larger context (they are parts of a model) as opposed to the self-contained language-centric definition. This approach works fine for real life systems such as an order-entry system, a library system, boat-rental and various other real world entity oriented systems. This naturally leads to a strong focus on what the relations are between the parts: association, generalization, composition. Dynamics is an inherent part of the concept simulation and the explicit guideline for designing object interaction is to imitate real world or model interactions.&lt;br /&gt;
Let us consider a real world example of designing a partial implementation of the board game-Backgammon to understand the objected oriented using a model-centric perspective. The physical parts of Backgammon identifiable are the checkers, points, board, dice, player, etc. The diagram below is a design of model parts (classes) and their relationships (relations).&lt;br /&gt;
&lt;br /&gt;
===Responsibility-centric perspective===&lt;br /&gt;
This perspective stresses on the behavior of software systems and the concepts used to do design include behavior, roles, responsibilities and protocol. Here, the primary focus is the dynamics of the program. Roles and responsibilities are the core concepts in this perspective and hence it has more coupling to behavior when compared to static elements like objects or model parts. There is a difference between behavior and responsibility, where behavior is the concrete actions taken by objects where as responsibility is to fulfill requests through any number of concrete behaviors. So, responsibility is more abstract than behavior.&lt;br /&gt;
One can look at responsibility-centric perspective as an extension of the model-centric perspective with a shift of focus (from a focus on model parts to a focus on the simulation or dynamical aspects). The Backgammon example can again be&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Object Oriented Design Concepts &amp;lt;ref&amp;gt;http://books.google.com/books/about/Object_Design.html?id=vUF72vN5MY8C&amp;lt;/ref&amp;gt;==&lt;br /&gt;
[[File:AnObject.jpg|350px|right|thumb|An object encapsulates scripts and information&amp;lt;ref&amp;gt;http://books.google.com/books?id=vUF72vN5MY8C&amp;amp;pg=PA2&amp;amp;source=gbs_toc_r&amp;amp;cad=4#v=onepage&amp;amp;q&amp;amp;f=false Object Design: Roles, Responsibilities, and Collaborations by Rebecca Wirfs-Brock, Alan McKean&amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
A software application is constructed from parts. These parts -software objects- interact by sending messages to request information or action from others. Throughout its lifetime, each object remains responsible for responding to a fixed set of requests. To fulfill these requests, objects encapsulate scripted responses and the information that they base them on (see Figure 4a). If an object is designed to remember certain facts, it can use them to respond differently to future requests.&lt;br /&gt;
&lt;br /&gt;
Building an object-oriented application means inventing appropriate machinery. We represent real-world information, processes, interactions, relationships, even errors, by inventing objects that don't exist in the real world. We give life and intelligence to inanimate things. We take difficult-to-comprehend real-world objects and split them into simpler, more manageable software ones. We invent new objects. Each has a specific role to play in the application. Our measure of success lies in how clearly we invent a software reality that satisfies our application's requirements—and not in how closely it resembles the real world.&amp;lt;ref&amp;gt;http://books.google.com/books?id=vUF72vN5MY8C&amp;amp;pg=PA3&amp;amp;source=gbs_toc_r&amp;amp;cad=4#v=onepage&amp;amp;q&amp;amp;f=false Object Design: Roles, Responsibilities, and Collaborations by Rebecca Wirfs-Brock, Alan McKean&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''For example''', filling out and filing a form seems simple. But to perform that task in software, behind the simple forms, the application is validating the data against business rules, reading and refreshing the persistent data, guaranteeing the consistency of the information, and managing simultaneous access by dozens of users. Software objects display information, coordinate activities, compute, or connect to services.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Concept&lt;br /&gt;
! Short description&lt;br /&gt;
|-&lt;br /&gt;
|An object || an implementation of one or more roles.&lt;br /&gt;
|-&lt;br /&gt;
|A role || a set of related responsibilities.&lt;br /&gt;
|-&lt;br /&gt;
|A responsibility || an obligation to perform a task or know information&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Behavior ===&lt;br /&gt;
&lt;br /&gt;
=== Responsibilities ===&lt;br /&gt;
&lt;br /&gt;
=== Roles ===&lt;br /&gt;
An object has a specific purpose—a role it plays within a given context. Objects that play the same role can be interchanged. For example, there are several providers that can deliver letters and packages: DHL, FedEx, UPS, Post, Airborne. They all have the same purpose, if not the same way of carrying out their business. We choose from among them according to the requirements that you have for delivery. We pick among the mail carriers that meet your requirements.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
A role is a set of responsibilities that can be used interchangeably.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Protocols ===&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
==Additional Reading==&lt;br /&gt;
*[http://books.google.com/books?id=VQaf_vOTDzMC&amp;amp;pg=PA244&amp;amp;lpg=PA244&amp;amp;dq=%22language+centric%22+%22model-centric%22+%22responsibility+centric%22+object+oriented+design&amp;amp;source=bl&amp;amp;ots=tY3C6nStiA&amp;amp;sig=bEO2VyjGTobxQ362Yaubi542ZTc&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ei=f3KFUJ2-D4Ho8QTC_IHQBA&amp;amp;ved=0CEMQ6AEwAg#v=onepage&amp;amp;q=%22language%20centric%22%20%22model-centric%22%20%22responsibility%20centric%22%20object%20oriented%20design&amp;amp;f=false Flexible,Reliable Software using Patterns and Agile Development]&lt;br /&gt;
*[http://books.google.com/books?id=YnGz2ghKF-gC&amp;amp;pg=PA60&amp;amp;lpg=PA60&amp;amp;dq=%22language-centric%22+object+oriented+design&amp;amp;source=bl&amp;amp;ots=ko8xV4SZJs&amp;amp;sig=yemCujDGu_BEySZ_k32Kc0KVbgM&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ei=K8WFUOykNYW89gTcx4GQAg&amp;amp;ved=0CFEQ6AEwBA#v=onepage&amp;amp;q=%22language-centric%22%20object%20oriented%20design&amp;amp;f=false Jibitesh Mishra, Ashok Mohanty, &amp;lt;i&amp;gt;&amp;quot;Software Engineering&amp;quot;&amp;lt;/i&amp;gt;]&lt;br /&gt;
*[http://web.engr.oregonstate.edu/~budd/Books/oopintro3e/info/ReadMe.html An Introduction to Object Oriented Programming]&lt;/div&gt;</summary>
		<author><name>Rchakar</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w15_rr&amp;diff=67941</id>
		<title>CSC/ECE 517 Fall 2012/ch2a 2w15 rr</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w15_rr&amp;diff=67941"/>
		<updated>2012-10-23T04:58:31Z</updated>

		<summary type="html">&lt;p&gt;Rchakar: /* Object Oriented Design Concepts http://books.google.com/books/about/Object_Design.html?id=vUF72vN5MY8C */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
Object-oriented design is a programming model that began in the late 60's as software programs became more complex. The idea behind the approach was to build software systems by modeling them based on the real-world objects that they were trying to represent. For example, banking systems would contain customer objects, account objects and so on. Today, object-oriented design has been widely adopted &amp;lt;ref&amp;gt; [http://www.objectmentor.com/omSolutions/oops_what.html Introduction to Object Oriented Design]&amp;lt;/ref&amp;gt;. When done properly, this approach leads to simple, robust, flexible and modular software. When something goes wrong, the results could be bad. Object oriented design can be seen from different perspectives. In the language-centric perspective, objects are containers of data and methods. The model-centric perspective views the objects as model elements reflecting the real world objects and Responsibility-centric perspective views objects as interacting elements each playing a role in object community. Each of these perspectives are outlined in the following sections.&lt;br /&gt;
&lt;br /&gt;
==Background==&lt;br /&gt;
The history of object oriented design has many branches, and many people have contributed to this domain. The 1960s and 1970s saw the emergence of object oriented programming languages, such as Simula and Smalltalk, with key contributors such as Kristen Nygaard and Alan Kay, the visionary computer scientist who founded Smalltalk.&amp;lt;ref&amp;gt;[http://www.informit.com/articles/article.aspx?p=360440&amp;amp;seqNum=8 History of Object Oriented Design]&amp;lt;/ref&amp;gt;&lt;br /&gt;
But object oriented design was informal through that period, and it was only form 1982 that it became popular.  Contributors in this domain include Grady Booch, Kent Beck, Peter Coad, Don Firesmith, Ivar Jacobson (a UML founder), Steve Mellor, Bertrand Meyer, Jim Rumbaugh (a UML founder) and Rebecca Wirfs-Brock among others. Each of these perspectives are outlined in the following sections.&lt;br /&gt;
&lt;br /&gt;
==Object Oriented Design Perspectives==&lt;br /&gt;
===Language-centric perspective===&lt;br /&gt;
The focus of the language-centric perspective is classes and objects as building blocks for developing software. The emphasis is on the internal structure which are the fields and methods. Thus it is inherently a compile-time or static view which means that the definition speaks in terms of what it looks like in the following code:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
public class foo&lt;br /&gt;
{&lt;br /&gt;
 private int x;&lt;br /&gt;
 public static double y;&lt;br /&gt;
&lt;br /&gt;
 public int double (int x)&lt;br /&gt;
 {&lt;br /&gt;
   return (3*x);&lt;br /&gt;
 }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The implicit aspect of this view is that, an object is an entity in its own right and the definition is closed. Any object can be understood in isolation where the fields and methods are just enumerated. The advantage of this perspective is of that it is very concrete, closely related to the programming language level and therefore it is easy to understand. The disadvantage is that it does not help to structure the collaboration between objects, the dynamics, and this is typically where the hard challenges of design lie. Thus the perspective offers little guidance in the process of designing any realistic system.&amp;lt;ref&amp;gt;[https://docs.google.com/viewer?a=v&amp;amp;q=cache:Kl7VOfRFnNEJ:citeseerx.ist.psu.edu/viewdoc/download%3Fdoi%3D10.1.1.86.7500%26rep%3Drep1%26type%3Dpdf+%22language+centric%22+object+oriented+design&amp;amp;hl=en&amp;amp;gl=us&amp;amp;pid=bl&amp;amp;srcid=ADGEESj-HffIDcwsyYlGssvRYS3OAEloLCID6dCIHQeZ_WQ5W-fy9B3rC4uxbUKVBGzyPVn4uBra4ot0hCS71JC3NNy7nBVXRxzR4z06p3fVQKSIjn5t_fFr3dzrMICa5qNUVRnYHEAv&amp;amp;sig=AHIEtbRX7G0XgBl1mKxnPINiorZvNhW32Q Henrik Baerbak Christensen, &amp;lt;i&amp;gt;&amp;quot;Implications of Perspective in Teaching Objects First and Object Design&amp;quot;&amp;lt;/i&amp;gt;, Proceedings of the 10th annual &amp;lt;i&amp;gt;SIGCSE&amp;lt;/i&amp;gt; conference on Innovation and technology in computer science education, Department of Computer Science, University of Aarhus, 2005.]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Model-centric perspective===&lt;br /&gt;
In this perspective, the objects(classes, fields) and their relationships like inheritance, association, aggregation are designed by using some model. Here the program execution is a simulation of some part of the&lt;br /&gt;
world, and objects are perceived as the parts of the model. The perspective is often explained through analogies to other models like toy railways, traffic simulations, computer games, etc. This perspective stresses objects as entities in a larger context (they are parts of a model) as opposed to the self-contained language-centric definition. This approach works fine for real life systems such as an order-entry system, a library system, boat-rental and various other real world entity oriented systems. This naturally leads to a strong focus on what the relations are between the parts: association, generalization, composition. Dynamics is an inherent part of the concept simulation and the explicit guideline for designing object interaction is to imitate real world or model interactions.&lt;br /&gt;
Let us consider a real world example of designing a partial implementation of the board game-Backgammon to understand the objected oriented using a model-centric perspective. The physical parts of Backgammon identifiable are the checkers, points, board, dice, player, etc. The diagram below is a design of model parts (classes) and their relationships (relations).&lt;br /&gt;
&lt;br /&gt;
===Responsibility-centric perspective===&lt;br /&gt;
This perspective stresses on the behavior of software systems and the concepts used to do design include behavior, roles, responsibilities and protocol. Here, the primary focus is the dynamics of the program. Roles and responsibilities are the core concepts in this perspective and hence it has more coupling to behavior when compared to static elements like objects or model parts. There is a difference between behavior and responsibility, where behavior is the concrete actions taken by objects where as responsibility is to fulfill requests through any number of concrete behaviors. So, responsibility is more abstract than behavior.&lt;br /&gt;
One can look at responsibility-centric perspective as an extension of the model-centric perspective with a shift of focus (from a focus on model parts to a focus on the simulation or dynamical aspects). The Backgammon example can again be&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Object Oriented Design Concepts &amp;lt;ref&amp;gt;http://books.google.com/books/about/Object_Design.html?id=vUF72vN5MY8C&amp;lt;/ref&amp;gt;==&lt;br /&gt;
[[File:AnObject.jpg|350px|right|thumb|An object encapsulates scripts and information&amp;lt;ref&amp;gt;http://books.google.com/books?id=vUF72vN5MY8C&amp;amp;pg=PA2&amp;amp;source=gbs_toc_r&amp;amp;cad=4#v=onepage&amp;amp;q&amp;amp;f=false Object Design: Roles, Responsibilities, and Collaborations by Rebecca Wirfs-Brock, Alan McKean&amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
A software application is constructed from parts. These parts -software objects- interact by sending messages to request information or action from others. Throughout its lifetime, each object remains responsible for responding to a fixed set of requests. To fulfill these requests, objects encapsulate scripted responses and the information that they base them on (see Figure 4a). If an object is designed to remember certain facts, it can use them to respond differently to future requests.&lt;br /&gt;
&lt;br /&gt;
Building an object-oriented application means inventing appropriate machinery. We represent real-world information, processes, interactions, relationships, even errors, by inventing objects that don't exist in the real world. We give life and intelligence to inanimate things. We take difficult-to-comprehend real-world objects and split them into simpler, more manageable software ones. We invent new objects. Each has a specific role to play in the application. Our measure of success lies in how clearly we invent a software reality that satisfies our application's requirements—and not in how closely it resembles the real world.&amp;lt;ref&amp;gt;http://books.google.com/books?id=vUF72vN5MY8C&amp;amp;pg=PA3&amp;amp;source=gbs_toc_r&amp;amp;cad=4#v=onepage&amp;amp;q&amp;amp;f=false Object Design: Roles, Responsibilities, and Collaborations by Rebecca Wirfs-Brock, Alan McKean&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''For example''', filling out and filing a form seems simple. But to perform that task in software, behind the simple forms, the application is validating the data against business rules, reading and refreshing the persistent data, guaranteeing the consistency of the information, and managing simultaneous access by dozens of users. Software objects display information, coordinate activities, compute, or connect to services.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Concept&lt;br /&gt;
! Short description&lt;br /&gt;
|-&lt;br /&gt;
|An object || an implementation of one or more roles.&lt;br /&gt;
|-&lt;br /&gt;
|A role || a set of related responsibilities.&lt;br /&gt;
|-&lt;br /&gt;
|A responsibility || an obligation to perform a task or know information&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Behavior ===&lt;br /&gt;
&lt;br /&gt;
=== Responsibilities ===&lt;br /&gt;
&lt;br /&gt;
=== Roles ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
A role is a set of responsibilities that can be used interchangeably.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Protocols ===&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
==Additional Reading==&lt;br /&gt;
*[http://books.google.com/books?id=VQaf_vOTDzMC&amp;amp;pg=PA244&amp;amp;lpg=PA244&amp;amp;dq=%22language+centric%22+%22model-centric%22+%22responsibility+centric%22+object+oriented+design&amp;amp;source=bl&amp;amp;ots=tY3C6nStiA&amp;amp;sig=bEO2VyjGTobxQ362Yaubi542ZTc&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ei=f3KFUJ2-D4Ho8QTC_IHQBA&amp;amp;ved=0CEMQ6AEwAg#v=onepage&amp;amp;q=%22language%20centric%22%20%22model-centric%22%20%22responsibility%20centric%22%20object%20oriented%20design&amp;amp;f=false Flexible,Reliable Software using Patterns and Agile Development]&lt;br /&gt;
*[http://books.google.com/books?id=YnGz2ghKF-gC&amp;amp;pg=PA60&amp;amp;lpg=PA60&amp;amp;dq=%22language-centric%22+object+oriented+design&amp;amp;source=bl&amp;amp;ots=ko8xV4SZJs&amp;amp;sig=yemCujDGu_BEySZ_k32Kc0KVbgM&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ei=K8WFUOykNYW89gTcx4GQAg&amp;amp;ved=0CFEQ6AEwBA#v=onepage&amp;amp;q=%22language-centric%22%20object%20oriented%20design&amp;amp;f=false Jibitesh Mishra, Ashok Mohanty, &amp;lt;i&amp;gt;&amp;quot;Software Engineering&amp;quot;&amp;lt;/i&amp;gt;]&lt;br /&gt;
*[http://web.engr.oregonstate.edu/~budd/Books/oopintro3e/info/ReadMe.html An Introduction to Object Oriented Programming]&lt;/div&gt;</summary>
		<author><name>Rchakar</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w15_rr&amp;diff=67938</id>
		<title>CSC/ECE 517 Fall 2012/ch2a 2w15 rr</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w15_rr&amp;diff=67938"/>
		<updated>2012-10-23T04:51:50Z</updated>

		<summary type="html">&lt;p&gt;Rchakar: /* Object Oriented Design Concepts http://books.google.com/books/about/Object_Design.html?id=vUF72vN5MY8C */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
Object-oriented design is a programming model that began in the late 60's as software programs became more complex. The idea behind the approach was to build software systems by modeling them based on the real-world objects that they were trying to represent. For example, banking systems would contain customer objects, account objects and so on. Today, object-oriented design has been widely adopted &amp;lt;ref&amp;gt; [http://www.objectmentor.com/omSolutions/oops_what.html Introduction to Object Oriented Design]&amp;lt;/ref&amp;gt;. When done properly, this approach leads to simple, robust, flexible and modular software. When something goes wrong, the results could be bad. Object oriented design can be seen from different perspectives. In the language-centric perspective, objects are containers of data and methods. The model-centric perspective views the objects as model elements reflecting the real world objects and Responsibility-centric perspective views objects as interacting elements each playing a role in object community. Each of these perspectives are outlined in the following sections.&lt;br /&gt;
&lt;br /&gt;
==Background==&lt;br /&gt;
The history of object oriented design has many branches, and many people have contributed to this domain. The 1960s and 1970s saw the emergence of object oriented programming languages, such as Simula and Smalltalk, with key contributors such as Kristen Nygaard and Alan Kay, the visionary computer scientist who founded Smalltalk.&amp;lt;ref&amp;gt;[http://www.informit.com/articles/article.aspx?p=360440&amp;amp;seqNum=8 History of Object Oriented Design]&amp;lt;/ref&amp;gt;&lt;br /&gt;
But object oriented design was informal through that period, and it was only form 1982 that it became popular.  Contributors in this domain include Grady Booch, Kent Beck, Peter Coad, Don Firesmith, Ivar Jacobson (a UML founder), Steve Mellor, Bertrand Meyer, Jim Rumbaugh (a UML founder) and Rebecca Wirfs-Brock among others. Each of these perspectives are outlined in the following sections.&lt;br /&gt;
&lt;br /&gt;
==Object Oriented Design Perspectives==&lt;br /&gt;
===Language-centric perspective===&lt;br /&gt;
The focus of the language-centric perspective is classes and objects as building blocks for developing software. The emphasis is on the internal structure which are the fields and methods. Thus it is inherently a compile-time or static view which means that the definition speaks in terms of what it looks like in the following code:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
public class foo&lt;br /&gt;
{&lt;br /&gt;
 private int x;&lt;br /&gt;
 public static double y;&lt;br /&gt;
&lt;br /&gt;
 public int double (int x)&lt;br /&gt;
 {&lt;br /&gt;
   return (3*x);&lt;br /&gt;
 }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The implicit aspect of this view is that, an object is an entity in its own right and the definition is closed. Any object can be understood in isolation where the fields and methods are just enumerated. The advantage of this perspective is of that it is very concrete, closely related to the programming language level and therefore it is easy to understand. The disadvantage is that it does not help to structure the collaboration between objects, the dynamics, and this is typically where the hard challenges of design lie. Thus the perspective offers little guidance in the process of designing any realistic system.&amp;lt;ref&amp;gt;[https://docs.google.com/viewer?a=v&amp;amp;q=cache:Kl7VOfRFnNEJ:citeseerx.ist.psu.edu/viewdoc/download%3Fdoi%3D10.1.1.86.7500%26rep%3Drep1%26type%3Dpdf+%22language+centric%22+object+oriented+design&amp;amp;hl=en&amp;amp;gl=us&amp;amp;pid=bl&amp;amp;srcid=ADGEESj-HffIDcwsyYlGssvRYS3OAEloLCID6dCIHQeZ_WQ5W-fy9B3rC4uxbUKVBGzyPVn4uBra4ot0hCS71JC3NNy7nBVXRxzR4z06p3fVQKSIjn5t_fFr3dzrMICa5qNUVRnYHEAv&amp;amp;sig=AHIEtbRX7G0XgBl1mKxnPINiorZvNhW32Q Henrik Baerbak Christensen, &amp;lt;i&amp;gt;&amp;quot;Implications of Perspective in Teaching Objects First and Object Design&amp;quot;&amp;lt;/i&amp;gt;, Proceedings of the 10th annual &amp;lt;i&amp;gt;SIGCSE&amp;lt;/i&amp;gt; conference on Innovation and technology in computer science education, Department of Computer Science, University of Aarhus, 2005.]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Model-centric perspective===&lt;br /&gt;
In this perspective, the objects(classes, fields) and their relationships like inheritance, association, aggregation are designed by using some model. Here the program execution is a simulation of some part of the&lt;br /&gt;
world, and objects are perceived as the parts of the model. The perspective is often explained through analogies to other models like toy railways, traffic simulations, computer games, etc. This perspective stresses objects as entities in a larger context (they are parts of a model) as opposed to the self-contained language-centric definition. This approach works fine for real life systems such as an order-entry system, a library system, boat-rental and various other real world entity oriented systems. This naturally leads to a strong focus on what the relations are between the parts: association, generalization, composition. Dynamics is an inherent part of the concept simulation and the explicit guideline for designing object interaction is to imitate real world or model interactions.&lt;br /&gt;
Let us consider a real world example of designing a partial implementation of the board game-Backgammon to understand the objected oriented using a model-centric perspective. The physical parts of Backgammon identifiable are the checkers, points, board, dice, player, etc. The diagram below is a design of model parts (classes) and their relationships (relations).&lt;br /&gt;
&lt;br /&gt;
===Responsibility-centric perspective===&lt;br /&gt;
This perspective stresses on the behavior of software systems and the concepts used to do design include behavior, roles, responsibilities and protocol. Here, the primary focus is the dynamics of the program. Roles and responsibilities are the core concepts in this perspective and hence it has more coupling to behavior when compared to static elements like objects or model parts. There is a difference between behavior and responsibility, where behavior is the concrete actions taken by objects where as responsibility is to fulfill requests through any number of concrete behaviors. So, responsibility is more abstract than behavior.&lt;br /&gt;
One can look at responsibility-centric perspective as an extension of the model-centric perspective with a shift of focus (from a focus on model parts to a focus on the simulation or dynamical aspects). The Backgammon example can again be&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Object Oriented Design Concepts &amp;lt;ref&amp;gt;http://books.google.com/books/about/Object_Design.html?id=vUF72vN5MY8C&amp;lt;/ref&amp;gt;==&lt;br /&gt;
[[File:AnObject.jpg|350px|right|thumb|An object encapsulates scripts and information&amp;lt;ref&amp;gt;http://www.google.com/url?sa=t&amp;amp;rct=j&amp;amp;q=&amp;amp;esrc=s&amp;amp;source=web&amp;amp;cd=2&amp;amp;cad=rja&amp;amp;ved=0CCgQFjAB&amp;amp;url=http%3A%2F%2F202.5.195.4%2Febooks%2FAddison%2520Wesley%2520-%2520Object%2520Design%2520Roles%2C%2520Responsibilities%2C%2520and%2520Collaborations%2520(Nov.2002).pdf&amp;amp;ei=QBWGUJbZBZGE8ASehoGQAQ&amp;amp;usg=AFQjCNEoyVQyIidj28bG4tsPTWwZJwmt7A&amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
A software application is constructed from parts. These parts -software objects- interact by sending messages to request information or action from others. Throughout its lifetime, each object remains responsible for responding to a fixed set of requests. To fulfill these requests, objects encapsulate scripted responses and the information that they base them on (see Figure 4a). If an object is designed to remember certain facts, it can use them to respond differently to future requests.&lt;br /&gt;
&lt;br /&gt;
Building an object-oriented application means inventing appropriate machinery. We represent real-world information, processes, interactions, relationships, even errors, by inventing objects that don't exist in the real world. We give life and intelligence to inanimate things. We take difficult-to-comprehend real-world objects and split them into simpler, more manageable software ones. We invent new objects. Each has a specific role to play in the application. Our measure of success lies in how clearly we invent a software reality that satisfies our application's requirements—and not in how closely it resembles the real world.&lt;br /&gt;
&lt;br /&gt;
'''For example''', filling out and filing a form seems simple. But to perform that task in software, behind the simple forms, the application is validating the data against business rules, reading and refreshing the persistent data, guaranteeing the consistency of the information, and managing simultaneous access by dozens of users. Software objects display information, coordinate activities, compute, or connect to services.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Concept&lt;br /&gt;
! Short description&lt;br /&gt;
|-&lt;br /&gt;
|An object || an implementation of one or more roles.&lt;br /&gt;
|-&lt;br /&gt;
|A role || a set of related responsibilities.&lt;br /&gt;
|-&lt;br /&gt;
|A responsibility || an obligation to perform a task or know information&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Behavior ===&lt;br /&gt;
&lt;br /&gt;
=== Responsibilities ===&lt;br /&gt;
&lt;br /&gt;
=== Roles ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
A role is a set of responsibilities that can be used interchangeably.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Protocols ===&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
==Additional Reading==&lt;br /&gt;
*[http://books.google.com/books?id=VQaf_vOTDzMC&amp;amp;pg=PA244&amp;amp;lpg=PA244&amp;amp;dq=%22language+centric%22+%22model-centric%22+%22responsibility+centric%22+object+oriented+design&amp;amp;source=bl&amp;amp;ots=tY3C6nStiA&amp;amp;sig=bEO2VyjGTobxQ362Yaubi542ZTc&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ei=f3KFUJ2-D4Ho8QTC_IHQBA&amp;amp;ved=0CEMQ6AEwAg#v=onepage&amp;amp;q=%22language%20centric%22%20%22model-centric%22%20%22responsibility%20centric%22%20object%20oriented%20design&amp;amp;f=false Flexible,Reliable Software using Patterns and Agile Development]&lt;br /&gt;
*[http://books.google.com/books?id=YnGz2ghKF-gC&amp;amp;pg=PA60&amp;amp;lpg=PA60&amp;amp;dq=%22language-centric%22+object+oriented+design&amp;amp;source=bl&amp;amp;ots=ko8xV4SZJs&amp;amp;sig=yemCujDGu_BEySZ_k32Kc0KVbgM&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ei=K8WFUOykNYW89gTcx4GQAg&amp;amp;ved=0CFEQ6AEwBA#v=onepage&amp;amp;q=%22language-centric%22%20object%20oriented%20design&amp;amp;f=false Jibitesh Mishra, Ashok Mohanty, &amp;lt;i&amp;gt;&amp;quot;Software Engineering&amp;quot;&amp;lt;/i&amp;gt;]&lt;br /&gt;
*[http://web.engr.oregonstate.edu/~budd/Books/oopintro3e/info/ReadMe.html An Introduction to Object Oriented Programming]&lt;/div&gt;</summary>
		<author><name>Rchakar</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w15_rr&amp;diff=67937</id>
		<title>CSC/ECE 517 Fall 2012/ch2a 2w15 rr</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w15_rr&amp;diff=67937"/>
		<updated>2012-10-23T04:49:19Z</updated>

		<summary type="html">&lt;p&gt;Rchakar: /* Object Oriented Design Concepts http://books.google.com/books/about/Object_Design.html?id=vUF72vN5MY8C */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
Object-oriented design is a programming model that began in the late 60's as software programs became more complex. The idea behind the approach was to build software systems by modeling them based on the real-world objects that they were trying to represent. For example, banking systems would contain customer objects, account objects and so on. Today, object-oriented design has been widely adopted &amp;lt;ref&amp;gt; [http://www.objectmentor.com/omSolutions/oops_what.html Introduction to Object Oriented Design]&amp;lt;/ref&amp;gt;. When done properly, this approach leads to simple, robust, flexible and modular software. When something goes wrong, the results could be bad. Object oriented design can be seen from different perspectives. In the language-centric perspective, objects are containers of data and methods. The model-centric perspective views the objects as model elements reflecting the real world objects and Responsibility-centric perspective views objects as interacting elements each playing a role in object community. Each of these perspectives are outlined in the following sections.&lt;br /&gt;
&lt;br /&gt;
==Background==&lt;br /&gt;
The history of object oriented design has many branches, and many people have contributed to this domain. The 1960s and 1970s saw the emergence of object oriented programming languages, such as Simula and Smalltalk, with key contributors such as Kristen Nygaard and Alan Kay, the visionary computer scientist who founded Smalltalk.&amp;lt;ref&amp;gt;[http://www.informit.com/articles/article.aspx?p=360440&amp;amp;seqNum=8 History of Object Oriented Design]&amp;lt;/ref&amp;gt;&lt;br /&gt;
But object oriented design was informal through that period, and it was only form 1982 that it became popular.  Contributors in this domain include Grady Booch, Kent Beck, Peter Coad, Don Firesmith, Ivar Jacobson (a UML founder), Steve Mellor, Bertrand Meyer, Jim Rumbaugh (a UML founder) and Rebecca Wirfs-Brock among others. Each of these perspectives are outlined in the following sections.&lt;br /&gt;
&lt;br /&gt;
==Object Oriented Design Perspectives==&lt;br /&gt;
===Language-centric perspective===&lt;br /&gt;
The focus of the language-centric perspective is classes and objects as building blocks for developing software. The emphasis is on the internal structure which are the fields and methods. Thus it is inherently a compile-time or static view which means that the definition speaks in terms of what it looks like in the following code:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
public class foo&lt;br /&gt;
{&lt;br /&gt;
 private int x;&lt;br /&gt;
 public static double y;&lt;br /&gt;
&lt;br /&gt;
 public int double (int x)&lt;br /&gt;
 {&lt;br /&gt;
   return (3*x);&lt;br /&gt;
 }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The implicit aspect of this view is that, an object is an entity in its own right and the definition is closed. Any object can be understood in isolation where the fields and methods are just enumerated. The advantage of this perspective is of that it is very concrete, closely related to the programming language level and therefore it is easy to understand. The disadvantage is that it does not help to structure the collaboration between objects, the dynamics, and this is typically where the hard challenges of design lie. Thus the perspective offers little guidance in the process of designing any realistic system.&amp;lt;ref&amp;gt;[https://docs.google.com/viewer?a=v&amp;amp;q=cache:Kl7VOfRFnNEJ:citeseerx.ist.psu.edu/viewdoc/download%3Fdoi%3D10.1.1.86.7500%26rep%3Drep1%26type%3Dpdf+%22language+centric%22+object+oriented+design&amp;amp;hl=en&amp;amp;gl=us&amp;amp;pid=bl&amp;amp;srcid=ADGEESj-HffIDcwsyYlGssvRYS3OAEloLCID6dCIHQeZ_WQ5W-fy9B3rC4uxbUKVBGzyPVn4uBra4ot0hCS71JC3NNy7nBVXRxzR4z06p3fVQKSIjn5t_fFr3dzrMICa5qNUVRnYHEAv&amp;amp;sig=AHIEtbRX7G0XgBl1mKxnPINiorZvNhW32Q Henrik Baerbak Christensen, &amp;lt;i&amp;gt;&amp;quot;Implications of Perspective in Teaching Objects First and Object Design&amp;quot;&amp;lt;/i&amp;gt;, Proceedings of the 10th annual &amp;lt;i&amp;gt;SIGCSE&amp;lt;/i&amp;gt; conference on Innovation and technology in computer science education, Department of Computer Science, University of Aarhus, 2005.]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Model-centric perspective===&lt;br /&gt;
In this perspective, the objects(classes, fields) and their relationships like inheritance, association, aggregation are designed by using some model. Here the program execution is a simulation of some part of the&lt;br /&gt;
world, and objects are perceived as the parts of the model. The perspective is often explained through analogies to other models like toy railways, traffic simulations, computer games, etc. This perspective stresses objects as entities in a larger context (they are parts of a model) as opposed to the self-contained language-centric definition. This approach works fine for real life systems such as an order-entry system, a library system, boat-rental and various other real world entity oriented systems. This naturally leads to a strong focus on what the relations are between the parts: association, generalization, composition. Dynamics is an inherent part of the concept simulation and the explicit guideline for designing object interaction is to imitate real world or model interactions.&lt;br /&gt;
Let us consider a real world example of designing a partial implementation of the board game-Backgammon to understand the objected oriented using a model-centric perspective. The physical parts of Backgammon identifiable are the checkers, points, board, dice, player, etc. The diagram below is a design of model parts (classes) and their relationships (relations).&lt;br /&gt;
&lt;br /&gt;
===Responsibility-centric perspective===&lt;br /&gt;
This perspective stresses on the behavior of software systems and the concepts used to do design include behavior, roles, responsibilities and protocol. Here, the primary focus is the dynamics of the program. Roles and responsibilities are the core concepts in this perspective and hence it has more coupling to behavior when compared to static elements like objects or model parts. There is a difference between behavior and responsibility, where behavior is the concrete actions taken by objects where as responsibility is to fulfill requests through any number of concrete behaviors. So, responsibility is more abstract than behavior.&lt;br /&gt;
One can look at responsibility-centric perspective as an extension of the model-centric perspective with a shift of focus (from a focus on model parts to a focus on the simulation or dynamical aspects). The Backgammon example can again be&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Object Oriented Design Concepts &amp;lt;ref&amp;gt;http://books.google.com/books/about/Object_Design.html?id=vUF72vN5MY8C&amp;lt;/ref&amp;gt;==&lt;br /&gt;
[[File:AnObject.jpg|350px|right|thumb|An object encapsulates scripts and information]]&lt;br /&gt;
&lt;br /&gt;
A software application is constructed from parts. These parts -software objects- interact by sending messages to request information or action from others. Throughout its lifetime, each object remains responsible for responding to a fixed set of requests. To fulfill these requests, objects encapsulate scripted responses and the information that they base them on (see Figure 4a). If an object is designed to remember certain facts, it can use them to respond differently to future requests.&lt;br /&gt;
&lt;br /&gt;
Building an object-oriented application means inventing appropriate machinery. We represent real-world information, processes, interactions, relationships, even errors, by inventing objects that don't exist in the real world. We give life and intelligence to inanimate things. We take difficult-to-comprehend real-world objects and split them into simpler, more manageable software ones. We invent new objects. Each has a specific role to play in the application. Our measure of success lies in how clearly we invent a software reality that satisfies our application's requirements—and not in how closely it resembles the real world.&lt;br /&gt;
&lt;br /&gt;
'''For example''', filling out and filing a form seems simple. But to perform that task in software, behind the simple forms, the application is validating the data against business rules, reading and refreshing the persistent data, guaranteeing the consistency of the information, and managing simultaneous access by dozens of users. Software objects display information, coordinate activities, compute, or connect to services.&lt;br /&gt;
&lt;br /&gt;
An object = an implementation of one or more roles&lt;br /&gt;
A role = a set of related responsibilities&lt;br /&gt;
A responsibility = an obligation to perform a task or know information&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Concept&lt;br /&gt;
! Short description&lt;br /&gt;
|-&lt;br /&gt;
|An object || an implementation of one or more roles.&lt;br /&gt;
|-&lt;br /&gt;
|A role || a set of related responsibilities.&lt;br /&gt;
|-&lt;br /&gt;
|A responsibility || an obligation to perform a task or know information&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Behavior ===&lt;br /&gt;
&lt;br /&gt;
=== Responsibilities ===&lt;br /&gt;
&lt;br /&gt;
=== Roles ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
A role is a set of responsibilities that can be used interchangeably.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Protocols ===&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
==Additional Reading==&lt;br /&gt;
*[http://books.google.com/books?id=VQaf_vOTDzMC&amp;amp;pg=PA244&amp;amp;lpg=PA244&amp;amp;dq=%22language+centric%22+%22model-centric%22+%22responsibility+centric%22+object+oriented+design&amp;amp;source=bl&amp;amp;ots=tY3C6nStiA&amp;amp;sig=bEO2VyjGTobxQ362Yaubi542ZTc&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ei=f3KFUJ2-D4Ho8QTC_IHQBA&amp;amp;ved=0CEMQ6AEwAg#v=onepage&amp;amp;q=%22language%20centric%22%20%22model-centric%22%20%22responsibility%20centric%22%20object%20oriented%20design&amp;amp;f=false Flexible,Reliable Software using Patterns and Agile Development]&lt;br /&gt;
*[http://books.google.com/books?id=YnGz2ghKF-gC&amp;amp;pg=PA60&amp;amp;lpg=PA60&amp;amp;dq=%22language-centric%22+object+oriented+design&amp;amp;source=bl&amp;amp;ots=ko8xV4SZJs&amp;amp;sig=yemCujDGu_BEySZ_k32Kc0KVbgM&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ei=K8WFUOykNYW89gTcx4GQAg&amp;amp;ved=0CFEQ6AEwBA#v=onepage&amp;amp;q=%22language-centric%22%20object%20oriented%20design&amp;amp;f=false Jibitesh Mishra, Ashok Mohanty, &amp;lt;i&amp;gt;&amp;quot;Software Engineering&amp;quot;&amp;lt;/i&amp;gt;]&lt;br /&gt;
*[http://web.engr.oregonstate.edu/~budd/Books/oopintro3e/info/ReadMe.html An Introduction to Object Oriented Programming]&lt;/div&gt;</summary>
		<author><name>Rchakar</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w15_rr&amp;diff=67934</id>
		<title>CSC/ECE 517 Fall 2012/ch2a 2w15 rr</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w15_rr&amp;diff=67934"/>
		<updated>2012-10-23T04:44:03Z</updated>

		<summary type="html">&lt;p&gt;Rchakar: /* Object Oriented Design Concepts http://books.google.com/books/about/Object_Design.html?id=vUF72vN5MY8C */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
Object-oriented design is a programming model that began in the late 60's as software programs became more complex. The idea behind the approach was to build software systems by modeling them based on the real-world objects that they were trying to represent. For example, banking systems would contain customer objects, account objects and so on. Today, object-oriented design has been widely adopted &amp;lt;ref&amp;gt; [http://www.objectmentor.com/omSolutions/oops_what.html Introduction to Object Oriented Design]&amp;lt;/ref&amp;gt;. When done properly, this approach leads to simple, robust, flexible and modular software. When something goes wrong, the results could be bad. Object oriented design can be seen from different perspectives. In the language-centric perspective, objects are containers of data and methods. The model-centric perspective views the objects as model elements reflecting the real world objects and Responsibility-centric perspective views objects as interacting elements each playing a role in object community. Each of these perspectives are outlined in the following sections.&lt;br /&gt;
&lt;br /&gt;
==Background==&lt;br /&gt;
The history of object oriented design has many branches, and many people have contributed to this domain. The 1960s and 1970s saw the emergence of object oriented programming languages, such as Simula and Smalltalk, with key contributors such as Kristen Nygaard and Alan Kay, the visionary computer scientist who founded Smalltalk.&amp;lt;ref&amp;gt;[http://www.informit.com/articles/article.aspx?p=360440&amp;amp;seqNum=8 History of Object Oriented Design]&amp;lt;/ref&amp;gt;&lt;br /&gt;
But object oriented design was informal through that period, and it was only form 1982 that it became popular.  Contributors in this domain include Grady Booch, Kent Beck, Peter Coad, Don Firesmith, Ivar Jacobson (a UML founder), Steve Mellor, Bertrand Meyer, Jim Rumbaugh (a UML founder) and Rebecca Wirfs-Brock among others. Each of these perspectives are outlined in the following sections.&lt;br /&gt;
&lt;br /&gt;
==Object Oriented Design Perspectives==&lt;br /&gt;
===Language-centric perspective===&lt;br /&gt;
The focus of the language-centric perspective is classes and objects as building blocks for developing software. The emphasis is on the internal structure which are the fields and methods. Thus it is inherently a compile-time or static view which means that the definition speaks in terms of what it looks like in the following code:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
public class foo&lt;br /&gt;
{&lt;br /&gt;
 private int x;&lt;br /&gt;
 public static double y;&lt;br /&gt;
&lt;br /&gt;
 public int double (int x)&lt;br /&gt;
 {&lt;br /&gt;
   return (3*x);&lt;br /&gt;
 }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The implicit aspect of this view is that, an object is an entity in its own right and the definition is closed. Any object can be understood in isolation where the fields and methods are just enumerated. The advantage of this perspective is of that it is very concrete, closely related to the programming language level and therefore it is easy to understand. The disadvantage is that it does not help to structure the collaboration between objects, the dynamics, and this is typically where the hard challenges of design lie. Thus the perspective offers little guidance in the process of designing any realistic system.&amp;lt;ref&amp;gt;[https://docs.google.com/viewer?a=v&amp;amp;q=cache:Kl7VOfRFnNEJ:citeseerx.ist.psu.edu/viewdoc/download%3Fdoi%3D10.1.1.86.7500%26rep%3Drep1%26type%3Dpdf+%22language+centric%22+object+oriented+design&amp;amp;hl=en&amp;amp;gl=us&amp;amp;pid=bl&amp;amp;srcid=ADGEESj-HffIDcwsyYlGssvRYS3OAEloLCID6dCIHQeZ_WQ5W-fy9B3rC4uxbUKVBGzyPVn4uBra4ot0hCS71JC3NNy7nBVXRxzR4z06p3fVQKSIjn5t_fFr3dzrMICa5qNUVRnYHEAv&amp;amp;sig=AHIEtbRX7G0XgBl1mKxnPINiorZvNhW32Q Henrik Baerbak Christensen, &amp;lt;i&amp;gt;&amp;quot;Implications of Perspective in Teaching Objects First and Object Design&amp;quot;&amp;lt;/i&amp;gt;, Proceedings of the 10th annual &amp;lt;i&amp;gt;SIGCSE&amp;lt;/i&amp;gt; conference on Innovation and technology in computer science education, Department of Computer Science, University of Aarhus, 2005.]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Model-centric perspective===&lt;br /&gt;
In this perspective, the objects(classes, fields) and their relationships like inheritance, association, aggregation are designed by using some model. Here the program execution is a simulation of some part of the&lt;br /&gt;
world, and objects are perceived as the parts of the model. The perspective is often explained through analogies to other models like toy railways, traffic simulations, computer games, etc. This perspective stresses objects as entities in a larger context (they are parts of a model) as opposed to the self-contained language-centric definition. This approach works fine for real life systems such as an order-entry system, a library system, boat-rental and various other real world entity oriented systems. This naturally leads to a strong focus on what the relations are between the parts: association, generalization, composition. Dynamics is an inherent part of the concept simulation and the explicit guideline for designing object interaction is to imitate real world or model interactions.&lt;br /&gt;
Let us consider a real world example of designing a partial implementation of the board game-Backgammon to understand the objected oriented using a model-centric perspective. The physical parts of Backgammon identifiable are the checkers, points, board, dice, player, etc. The diagram below is a design of model parts (classes) and their relationships (relations).&lt;br /&gt;
&lt;br /&gt;
===Responsibility-centric perspective===&lt;br /&gt;
This perspective stresses on the behavior of software systems and the concepts used to do design include behavior, roles, responsibilities and protocol. Here, the primary focus is the dynamics of the program. Roles and responsibilities are the core concepts in this perspective and hence it has more coupling to behavior when compared to static elements like objects or model parts. There is a difference between behavior and responsibility, where behavior is the concrete actions taken by objects where as responsibility is to fulfill requests through any number of concrete behaviors. So, responsibility is more abstract than behavior.&lt;br /&gt;
One can look at responsibility-centric perspective as an extension of the model-centric perspective with a shift of focus (from a focus on model parts to a focus on the simulation or dynamical aspects). The Backgammon example can again be&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Object Oriented Design Concepts &amp;lt;ref&amp;gt;http://books.google.com/books/about/Object_Design.html?id=vUF72vN5MY8C&amp;lt;/ref&amp;gt;==&lt;br /&gt;
[[File:AnObject.jpg|350px|right|thumb|An object encapsulates scripts and information]]&lt;br /&gt;
&lt;br /&gt;
A software application is constructed from parts. These parts -software objects- interact by sending messages to request information or action from others. Throughout its lifetime, each object remains responsible for responding to a fixed set of requests. To fulfill these requests, objects encapsulate scripted responses and the information that they base them on (see Figure 4a). If an object is designed to remember certain facts, it can use them to respond differently to future requests.&lt;br /&gt;
&lt;br /&gt;
Building an object-oriented application means inventing appropriate machinery. We represent real-world information, processes, interactions, relationships, even errors, by inventing objects that don't exist in the real world. We give life and intelligence to inanimate things. We take difficult-to-comprehend real-world objects and split them into simpler, more manageable software ones. We invent new objects. Each has a specific role to play in the application. Our measure of success lies in how clearly we invent a software reality that satisfies our application's requirements—and not in how closely it resembles the real world.&lt;br /&gt;
&lt;br /&gt;
'''For example''', filling out and filing a form seems simple. But to perform that task in software, behind the simple forms, the application is validating the data against business rules, reading and refreshing the persistent data, guaranteeing the consistency of the information, and managing simultaneous access by dozens of users. Software objects display information, coordinate activities, compute, or connect to services.&lt;br /&gt;
&lt;br /&gt;
=== Behavior ===&lt;br /&gt;
&lt;br /&gt;
=== Responsibilities ===&lt;br /&gt;
&lt;br /&gt;
=== Roles ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
A role is a set of responsibilities that can be used interchangeably.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Protocols ===&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
==Additional Reading==&lt;br /&gt;
*[http://books.google.com/books?id=VQaf_vOTDzMC&amp;amp;pg=PA244&amp;amp;lpg=PA244&amp;amp;dq=%22language+centric%22+%22model-centric%22+%22responsibility+centric%22+object+oriented+design&amp;amp;source=bl&amp;amp;ots=tY3C6nStiA&amp;amp;sig=bEO2VyjGTobxQ362Yaubi542ZTc&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ei=f3KFUJ2-D4Ho8QTC_IHQBA&amp;amp;ved=0CEMQ6AEwAg#v=onepage&amp;amp;q=%22language%20centric%22%20%22model-centric%22%20%22responsibility%20centric%22%20object%20oriented%20design&amp;amp;f=false Flexible,Reliable Software using Patterns and Agile Development]&lt;br /&gt;
*[http://books.google.com/books?id=YnGz2ghKF-gC&amp;amp;pg=PA60&amp;amp;lpg=PA60&amp;amp;dq=%22language-centric%22+object+oriented+design&amp;amp;source=bl&amp;amp;ots=ko8xV4SZJs&amp;amp;sig=yemCujDGu_BEySZ_k32Kc0KVbgM&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ei=K8WFUOykNYW89gTcx4GQAg&amp;amp;ved=0CFEQ6AEwBA#v=onepage&amp;amp;q=%22language-centric%22%20object%20oriented%20design&amp;amp;f=false Jibitesh Mishra, Ashok Mohanty, &amp;lt;i&amp;gt;&amp;quot;Software Engineering&amp;quot;&amp;lt;/i&amp;gt;]&lt;br /&gt;
*[http://web.engr.oregonstate.edu/~budd/Books/oopintro3e/info/ReadMe.html An Introduction to Object Oriented Programming]&lt;/div&gt;</summary>
		<author><name>Rchakar</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w15_rr&amp;diff=67933</id>
		<title>CSC/ECE 517 Fall 2012/ch2a 2w15 rr</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w15_rr&amp;diff=67933"/>
		<updated>2012-10-23T04:39:49Z</updated>

		<summary type="html">&lt;p&gt;Rchakar: /* Object Oriented Design Concepts */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
Object-oriented design is a programming model that began in the late 60's as software programs became more complex. The idea behind the approach was to build software systems by modeling them based on the real-world objects that they were trying to represent. For example, banking systems would contain customer objects, account objects and so on. Today, object-oriented design has been widely adopted &amp;lt;ref&amp;gt; [http://www.objectmentor.com/omSolutions/oops_what.html Introduction to Object Oriented Design]&amp;lt;/ref&amp;gt;. When done properly, this approach leads to simple, robust, flexible and modular software. When something goes wrong, the results could be bad. Object oriented design can be seen from different perspectives. In the language-centric perspective, objects are containers of data and methods. The model-centric perspective views the objects as model elements reflecting the real world objects and Responsibility-centric perspective views objects as interacting elements each playing a role in object community. Each of these perspectives are outlined in the following sections.&lt;br /&gt;
&lt;br /&gt;
==Background==&lt;br /&gt;
The history of object oriented design has many branches, and many people have contributed to this domain. The 1960s and 1970s saw the emergence of object oriented programming languages, such as Simula and Smalltalk, with key contributors such as Kristen Nygaard and Alan Kay, the visionary computer scientist who founded Smalltalk.&amp;lt;ref&amp;gt;[http://www.informit.com/articles/article.aspx?p=360440&amp;amp;seqNum=8 History of Object Oriented Design]&amp;lt;/ref&amp;gt;&lt;br /&gt;
But object oriented design was informal through that period, and it was only form 1982 that it became popular.  Contributors in this domain include Grady Booch, Kent Beck, Peter Coad, Don Firesmith, Ivar Jacobson (a UML founder), Steve Mellor, Bertrand Meyer, Jim Rumbaugh (a UML founder) and Rebecca Wirfs-Brock among others. Each of these perspectives are outlined in the following sections.&lt;br /&gt;
&lt;br /&gt;
==Object Oriented Design Perspectives==&lt;br /&gt;
===Language-centric perspective===&lt;br /&gt;
The focus of the language-centric perspective is classes and objects as building blocks for developing software. The emphasis is on the internal structure which are the fields and methods. Thus it is inherently a compile-time or static view which means that the definition speaks in terms of what it looks like in the following code:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
public class foo&lt;br /&gt;
{&lt;br /&gt;
 private int x;&lt;br /&gt;
 public static double y;&lt;br /&gt;
&lt;br /&gt;
 public int double (int x)&lt;br /&gt;
 {&lt;br /&gt;
   return (3*x);&lt;br /&gt;
 }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The implicit aspect of this view is that, an object is an entity in its own right and the definition is closed. Any object can be understood in isolation where the fields and methods are just enumerated. The advantage of this perspective is of that it is very concrete, closely related to the programming language level and therefore it is easy to understand. The disadvantage is that it does not help to structure the collaboration between objects, the dynamics, and this is typically where the hard challenges of design lie. Thus the perspective offers little guidance in the process of designing any realistic system.&amp;lt;ref&amp;gt;[https://docs.google.com/viewer?a=v&amp;amp;q=cache:Kl7VOfRFnNEJ:citeseerx.ist.psu.edu/viewdoc/download%3Fdoi%3D10.1.1.86.7500%26rep%3Drep1%26type%3Dpdf+%22language+centric%22+object+oriented+design&amp;amp;hl=en&amp;amp;gl=us&amp;amp;pid=bl&amp;amp;srcid=ADGEESj-HffIDcwsyYlGssvRYS3OAEloLCID6dCIHQeZ_WQ5W-fy9B3rC4uxbUKVBGzyPVn4uBra4ot0hCS71JC3NNy7nBVXRxzR4z06p3fVQKSIjn5t_fFr3dzrMICa5qNUVRnYHEAv&amp;amp;sig=AHIEtbRX7G0XgBl1mKxnPINiorZvNhW32Q Henrik Baerbak Christensen, &amp;lt;i&amp;gt;&amp;quot;Implications of Perspective in Teaching Objects First and Object Design&amp;quot;&amp;lt;/i&amp;gt;, Proceedings of the 10th annual &amp;lt;i&amp;gt;SIGCSE&amp;lt;/i&amp;gt; conference on Innovation and technology in computer science education, Department of Computer Science, University of Aarhus, 2005.]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Model-centric perspective===&lt;br /&gt;
In this perspective, the objects(classes, fields) and their relationships like inheritance, association, aggregation are designed by using some model. Here the program execution is a simulation of some part of the&lt;br /&gt;
world, and objects are perceived as the parts of the model. The perspective is often explained through analogies to other models like toy railways, traffic simulations, computer games, etc. This perspective stresses objects as entities in a larger context (they are parts of a model) as opposed to the self-contained language-centric definition. This approach works fine for real life systems such as an order-entry system, a library system, boat-rental and various other real world entity oriented systems. This naturally leads to a strong focus on what the relations are between the parts: association, generalization, composition. Dynamics is an inherent part of the concept simulation and the explicit guideline for designing object interaction is to imitate real world or model interactions.&lt;br /&gt;
Let us consider a real world example of designing a partial implementation of the board game-Backgammon to understand the objected oriented using a model-centric perspective. The physical parts of Backgammon identifiable are the checkers, points, board, dice, player, etc. The diagram below is a design of model parts (classes) and their relationships (relations).&lt;br /&gt;
&lt;br /&gt;
===Responsibility-centric perspective===&lt;br /&gt;
This perspective stresses on the behavior of software systems and the concepts used to do design include behavior, roles, responsibilities and protocol. Here, the primary focus is the dynamics of the program. Roles and responsibilities are the core concepts in this perspective and hence it has more coupling to behavior when compared to static elements like objects or model parts. There is a difference between behavior and responsibility, where behavior is the concrete actions taken by objects where as responsibility is to fulfill requests through any number of concrete behaviors. So, responsibility is more abstract than behavior.&lt;br /&gt;
One can look at responsibility-centric perspective as an extension of the model-centric perspective with a shift of focus (from a focus on model parts to a focus on the simulation or dynamical aspects). The Backgammon example can again be&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Object Oriented Design Concepts &amp;lt;ref&amp;gt;http://books.google.com/books/about/Object_Design.html?id=vUF72vN5MY8C&amp;lt;/ref&amp;gt;==&lt;br /&gt;
[[File:AnObject.jpg|350px|right|thumb|An object encapsulates scripts and information]]&lt;br /&gt;
&lt;br /&gt;
A software application is constructed from parts. These parts -software objects- interact by sending messages to request information or action from others. Throughout its lifetime, each object remains responsible for responding to a fixed set of requests. To fulfill these requests, objects encapsulate scripted responses and the information that they base them on (see Figure 4a). If an object is designed to remember certain facts, it can use them to respond differently to future requests.&lt;br /&gt;
&lt;br /&gt;
Building an object-oriented application means inventing appropriate machinery. We represent real-world information, processes, interactions, relationships, even errors, by inventing objects that don't exist in the real world. We give life and intelligence to inanimate things. We take difficult-to-comprehend real-world objects and split them into simpler, more manageable software ones. We invent new objects. Each has a specific role to play in the application. Our measure of success lies in how clearly we invent a software reality that satisfies our application's requirements—and not in how closely it resembles the real world.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
For example, filling out and filing a form seems simple. But to perform that task in software, behind the simple forms, the application is validating the data against business rules, reading and refreshing the persistent data, guaranteeing the consistency of the information, and managing simultaneous access by dozens of users. Software objects display information, coordinate activities, compute, or connect to services. &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Behavior ===&lt;br /&gt;
&lt;br /&gt;
=== Responsibilities ===&lt;br /&gt;
&lt;br /&gt;
=== Roles ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
A role is a set of responsibilities that can be used interchangeably.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Protocols ===&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
==Additional Reading==&lt;br /&gt;
*[http://books.google.com/books?id=VQaf_vOTDzMC&amp;amp;pg=PA244&amp;amp;lpg=PA244&amp;amp;dq=%22language+centric%22+%22model-centric%22+%22responsibility+centric%22+object+oriented+design&amp;amp;source=bl&amp;amp;ots=tY3C6nStiA&amp;amp;sig=bEO2VyjGTobxQ362Yaubi542ZTc&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ei=f3KFUJ2-D4Ho8QTC_IHQBA&amp;amp;ved=0CEMQ6AEwAg#v=onepage&amp;amp;q=%22language%20centric%22%20%22model-centric%22%20%22responsibility%20centric%22%20object%20oriented%20design&amp;amp;f=false Flexible,Reliable Software using Patterns and Agile Development]&lt;br /&gt;
*[http://books.google.com/books?id=YnGz2ghKF-gC&amp;amp;pg=PA60&amp;amp;lpg=PA60&amp;amp;dq=%22language-centric%22+object+oriented+design&amp;amp;source=bl&amp;amp;ots=ko8xV4SZJs&amp;amp;sig=yemCujDGu_BEySZ_k32Kc0KVbgM&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ei=K8WFUOykNYW89gTcx4GQAg&amp;amp;ved=0CFEQ6AEwBA#v=onepage&amp;amp;q=%22language-centric%22%20object%20oriented%20design&amp;amp;f=false Jibitesh Mishra, Ashok Mohanty, &amp;lt;i&amp;gt;&amp;quot;Software Engineering&amp;quot;&amp;lt;/i&amp;gt;]&lt;br /&gt;
*[http://web.engr.oregonstate.edu/~budd/Books/oopintro3e/info/ReadMe.html An Introduction to Object Oriented Programming]&lt;/div&gt;</summary>
		<author><name>Rchakar</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w15_rr&amp;diff=67932</id>
		<title>CSC/ECE 517 Fall 2012/ch2a 2w15 rr</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w15_rr&amp;diff=67932"/>
		<updated>2012-10-23T04:36:59Z</updated>

		<summary type="html">&lt;p&gt;Rchakar: /* Object Oriented Design Concepts */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
Object-oriented design is a programming model that began in the late 60's as software programs became more complex. The idea behind the approach was to build software systems by modeling them based on the real-world objects that they were trying to represent. For example, banking systems would contain customer objects, account objects and so on. Today, object-oriented design has been widely adopted &amp;lt;ref&amp;gt; [http://www.objectmentor.com/omSolutions/oops_what.html Introduction to Object Oriented Design]&amp;lt;/ref&amp;gt;. When done properly, this approach leads to simple, robust, flexible and modular software. When something goes wrong, the results could be bad. Object oriented design can be seen from different perspectives. In the language-centric perspective, objects are containers of data and methods. The model-centric perspective views the objects as model elements reflecting the real world objects and Responsibility-centric perspective views objects as interacting elements each playing a role in object community. Each of these perspectives are outlined in the following sections.&lt;br /&gt;
&lt;br /&gt;
==Background==&lt;br /&gt;
The history of object oriented design has many branches, and many people have contributed to this domain. The 1960s and 1970s saw the emergence of object oriented programming languages, such as Simula and Smalltalk, with key contributors such as Kristen Nygaard and Alan Kay, the visionary computer scientist who founded Smalltalk.&amp;lt;ref&amp;gt;[http://www.informit.com/articles/article.aspx?p=360440&amp;amp;seqNum=8 History of Object Oriented Design]&amp;lt;/ref&amp;gt;&lt;br /&gt;
But object oriented design was informal through that period, and it was only form 1982 that it became popular.  Contributors in this domain include Grady Booch, Kent Beck, Peter Coad, Don Firesmith, Ivar Jacobson (a UML founder), Steve Mellor, Bertrand Meyer, Jim Rumbaugh (a UML founder) and Rebecca Wirfs-Brock among others. Each of these perspectives are outlined in the following sections.&lt;br /&gt;
&lt;br /&gt;
==Object Oriented Design Perspectives==&lt;br /&gt;
===Language-centric perspective===&lt;br /&gt;
The focus of the language-centric perspective is classes and objects as building blocks for developing software. The emphasis is on the internal structure which are the fields and methods. Thus it is inherently a compile-time or static view which means that the definition speaks in terms of what it looks like in the following code:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
public class foo&lt;br /&gt;
{&lt;br /&gt;
 private int x;&lt;br /&gt;
 public static double y;&lt;br /&gt;
&lt;br /&gt;
 public int double (int x)&lt;br /&gt;
 {&lt;br /&gt;
   return (3*x);&lt;br /&gt;
 }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The implicit aspect of this view is that, an object is an entity in its own right and the definition is closed. Any object can be understood in isolation where the fields and methods are just enumerated. The advantage of this perspective is of that it is very concrete, closely related to the programming language level and therefore it is easy to understand. The disadvantage is that it does not help to structure the collaboration between objects, the dynamics, and this is typically where the hard challenges of design lie. Thus the perspective offers little guidance in the process of designing any realistic system.&amp;lt;ref&amp;gt;[https://docs.google.com/viewer?a=v&amp;amp;q=cache:Kl7VOfRFnNEJ:citeseerx.ist.psu.edu/viewdoc/download%3Fdoi%3D10.1.1.86.7500%26rep%3Drep1%26type%3Dpdf+%22language+centric%22+object+oriented+design&amp;amp;hl=en&amp;amp;gl=us&amp;amp;pid=bl&amp;amp;srcid=ADGEESj-HffIDcwsyYlGssvRYS3OAEloLCID6dCIHQeZ_WQ5W-fy9B3rC4uxbUKVBGzyPVn4uBra4ot0hCS71JC3NNy7nBVXRxzR4z06p3fVQKSIjn5t_fFr3dzrMICa5qNUVRnYHEAv&amp;amp;sig=AHIEtbRX7G0XgBl1mKxnPINiorZvNhW32Q Henrik Baerbak Christensen, &amp;lt;i&amp;gt;&amp;quot;Implications of Perspective in Teaching Objects First and Object Design&amp;quot;&amp;lt;/i&amp;gt;, Proceedings of the 10th annual &amp;lt;i&amp;gt;SIGCSE&amp;lt;/i&amp;gt; conference on Innovation and technology in computer science education, Department of Computer Science, University of Aarhus, 2005.]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Model-centric perspective===&lt;br /&gt;
In this perspective, the objects(classes, fields) and their relationships like inheritance, association, aggregation are designed by using some model. Here the program execution is a simulation of some part of the&lt;br /&gt;
world, and objects are perceived as the parts of the model. The perspective is often explained through analogies to other models like toy railways, traffic simulations, computer games, etc. This perspective stresses objects as entities in a larger context (they are parts of a model) as opposed to the self-contained language-centric definition. This approach works fine for real life systems such as an order-entry system, a library system, boat-rental and various other real world entity oriented systems. This naturally leads to a strong focus on what the relations are between the parts: association, generalization, composition. Dynamics is an inherent part of the concept simulation and the explicit guideline for designing object interaction is to imitate real world or model interactions.&lt;br /&gt;
Let us consider a real world example of designing a partial implementation of the board game-Backgammon to understand the objected oriented using a model-centric perspective. The physical parts of Backgammon identifiable are the checkers, points, board, dice, player, etc. The diagram below is a design of model parts (classes) and their relationships (relations).&lt;br /&gt;
&lt;br /&gt;
===Responsibility-centric perspective===&lt;br /&gt;
This perspective stresses on the behavior of software systems and the concepts used to do design include behavior, roles, responsibilities and protocol. Here, the primary focus is the dynamics of the program. Roles and responsibilities are the core concepts in this perspective and hence it has more coupling to behavior when compared to static elements like objects or model parts. There is a difference between behavior and responsibility, where behavior is the concrete actions taken by objects where as responsibility is to fulfill requests through any number of concrete behaviors. So, responsibility is more abstract than behavior.&lt;br /&gt;
One can look at responsibility-centric perspective as an extension of the model-centric perspective with a shift of focus (from a focus on model parts to a focus on the simulation or dynamical aspects). The Backgammon example can again be&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Object Oriented Design Concepts ==&lt;br /&gt;
[[File:AnObject.jpg|350px|right|thumb|An object encapsulates scripts and information]]&lt;br /&gt;
&lt;br /&gt;
A software application is constructed from parts. These parts -software objects- interact by sending messages to request information or action from others. Throughout its lifetime, each object remains responsible for responding to a fixed set of requests. To fulfill these requests, objects encapsulate scripted responses and the information that they base them on (see Figure 4a). If an object is designed to remember certain facts, it can use them to respond differently to future requests.&amp;lt;ref&amp;gt;http://books.google.com/books/about/Object_Design.html?id=vUF72vN5MY8C&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Behavior ===&lt;br /&gt;
&lt;br /&gt;
=== Responsibilities ===&lt;br /&gt;
&lt;br /&gt;
=== Roles ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
A role is a set of responsibilities that can be used interchangeably.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Protocols ===&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
==Additional Reading==&lt;br /&gt;
*[http://books.google.com/books?id=VQaf_vOTDzMC&amp;amp;pg=PA244&amp;amp;lpg=PA244&amp;amp;dq=%22language+centric%22+%22model-centric%22+%22responsibility+centric%22+object+oriented+design&amp;amp;source=bl&amp;amp;ots=tY3C6nStiA&amp;amp;sig=bEO2VyjGTobxQ362Yaubi542ZTc&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ei=f3KFUJ2-D4Ho8QTC_IHQBA&amp;amp;ved=0CEMQ6AEwAg#v=onepage&amp;amp;q=%22language%20centric%22%20%22model-centric%22%20%22responsibility%20centric%22%20object%20oriented%20design&amp;amp;f=false Flexible,Reliable Software using Patterns and Agile Development]&lt;br /&gt;
*[http://books.google.com/books?id=YnGz2ghKF-gC&amp;amp;pg=PA60&amp;amp;lpg=PA60&amp;amp;dq=%22language-centric%22+object+oriented+design&amp;amp;source=bl&amp;amp;ots=ko8xV4SZJs&amp;amp;sig=yemCujDGu_BEySZ_k32Kc0KVbgM&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ei=K8WFUOykNYW89gTcx4GQAg&amp;amp;ved=0CFEQ6AEwBA#v=onepage&amp;amp;q=%22language-centric%22%20object%20oriented%20design&amp;amp;f=false Jibitesh Mishra, Ashok Mohanty, &amp;lt;i&amp;gt;&amp;quot;Software Engineering&amp;quot;&amp;lt;/i&amp;gt;]&lt;br /&gt;
*[http://web.engr.oregonstate.edu/~budd/Books/oopintro3e/info/ReadMe.html An Introduction to Object Oriented Programming]&lt;/div&gt;</summary>
		<author><name>Rchakar</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w15_rr&amp;diff=67930</id>
		<title>CSC/ECE 517 Fall 2012/ch2a 2w15 rr</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w15_rr&amp;diff=67930"/>
		<updated>2012-10-23T04:26:43Z</updated>

		<summary type="html">&lt;p&gt;Rchakar: /* Object Oriented Design Concepts */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
Object-oriented design is a programming model that began in the late 60's as software programs became more complex. The idea behind the approach was to build software systems by modeling them based on the real-world objects that they were trying to represent. For example, banking systems would contain customer objects, account objects and so on. Today, object-oriented design has been widely adopted &amp;lt;ref&amp;gt; [http://www.objectmentor.com/omSolutions/oops_what.html Introduction to Object Oriented Design]&amp;lt;/ref&amp;gt;. When done properly, this approach leads to simple, robust, flexible and modular software. When something goes wrong, the results could be bad. Object oriented design can be seen from different perspectives. In the language-centric perspective, objects are containers of data and methods. The model-centric perspective views the objects as model elements reflecting the real world objects and Responsibility-centric perspective views objects as interacting elements each playing a role in object community. Each of these perspectives are outlined in the following sections.&lt;br /&gt;
&lt;br /&gt;
==Background==&lt;br /&gt;
The history of object oriented design has many branches, and many people have contributed to this domain. The 1960s and 1970s saw the emergence of object oriented programming languages, such as Simula and Smalltalk, with key contributors such as Kristen Nygaard and Alan Kay, the visionary computer scientist who founded Smalltalk.&amp;lt;ref&amp;gt;[http://www.informit.com/articles/article.aspx?p=360440&amp;amp;seqNum=8 History of Object Oriented Design]&amp;lt;/ref&amp;gt;&lt;br /&gt;
But object oriented design was informal through that period, and it was only form 1982 that it became popular.  Contributors in this domain include Grady Booch, Kent Beck, Peter Coad, Don Firesmith, Ivar Jacobson (a UML founder), Steve Mellor, Bertrand Meyer, Jim Rumbaugh (a UML founder) and Rebecca Wirfs-Brock among others. Each of these perspectives are outlined in the following sections.&lt;br /&gt;
&lt;br /&gt;
==Object Oriented Design Perspectives==&lt;br /&gt;
===Language-centric perspective===&lt;br /&gt;
The focus of the language-centric perspective is classes and objects as building blocks for developing software. The emphasis is on the internal structure which are the fields and methods. Thus it is inherently a compile-time or static view which means that the definition speaks in terms of what it looks like in the following code:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
public class foo&lt;br /&gt;
{&lt;br /&gt;
 private int x;&lt;br /&gt;
 public static double y;&lt;br /&gt;
&lt;br /&gt;
 public int double (int x)&lt;br /&gt;
 {&lt;br /&gt;
   return (3*x);&lt;br /&gt;
 }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The implicit aspect of this view is that, an object is an entity in its own right and the definition is closed. Any object can be understood in isolation where the fields and methods are just enumerated. The advantage of this perspective is of that it is very concrete, closely related to the programming language level and therefore it is easy to understand. The disadvantage is that it does not help to structure the collaboration between objects, the dynamics, and this is typically where the hard challenges of design lie. Thus the perspective offers little guidance in the process of designing any realistic system.&amp;lt;ref&amp;gt;[https://docs.google.com/viewer?a=v&amp;amp;q=cache:Kl7VOfRFnNEJ:citeseerx.ist.psu.edu/viewdoc/download%3Fdoi%3D10.1.1.86.7500%26rep%3Drep1%26type%3Dpdf+%22language+centric%22+object+oriented+design&amp;amp;hl=en&amp;amp;gl=us&amp;amp;pid=bl&amp;amp;srcid=ADGEESj-HffIDcwsyYlGssvRYS3OAEloLCID6dCIHQeZ_WQ5W-fy9B3rC4uxbUKVBGzyPVn4uBra4ot0hCS71JC3NNy7nBVXRxzR4z06p3fVQKSIjn5t_fFr3dzrMICa5qNUVRnYHEAv&amp;amp;sig=AHIEtbRX7G0XgBl1mKxnPINiorZvNhW32Q Henrik Baerbak Christensen, &amp;lt;i&amp;gt;&amp;quot;Implications of Perspective in Teaching Objects First and Object Design&amp;quot;&amp;lt;/i&amp;gt;, Proceedings of the 10th annual &amp;lt;i&amp;gt;SIGCSE&amp;lt;/i&amp;gt; conference on Innovation and technology in computer science education, Department of Computer Science, University of Aarhus, 2005.]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Model-centric perspective===&lt;br /&gt;
In this perspective, the objects(classes, fields) and their relationships like inheritance, association, aggregation are designed by using some model. Here the program execution is a simulation of some part of the&lt;br /&gt;
world, and objects are perceived as the parts of the model. The perspective is often explained through analogies to other models like toy railways, traffic simulations, computer games, etc. This perspective stresses objects as entities in a larger context (they are parts of a model) as opposed to the self-contained language-centric definition. This approach works fine for real life systems such as an order-entry system, a library system, boat-rental and various other real world entity oriented systems. This naturally leads to a strong focus on what the relations are between the parts: association, generalization, composition. Dynamics is an inherent part of the concept simulation and the explicit guideline for designing object interaction is to imitate real world or model interactions.&lt;br /&gt;
Let us consider a real world example of designing a partial implementation of the board game-Backgammon to understand the objected oriented using a model-centric perspective. The physical parts of Backgammon identifiable are the checkers, points, board, dice, player, etc. The diagram below is a design of model parts (classes) and their relationships (relations).&lt;br /&gt;
&lt;br /&gt;
===Responsibility-centric perspective===&lt;br /&gt;
This perspective stresses on the behavior of software systems and the concepts used to do design include behavior, roles, responsibilities and protocol. Here, the primary focus is the dynamics of the program. Roles and responsibilities are the core concepts in this perspective and hence it has more coupling to behavior when compared to static elements like objects or model parts. There is a difference between behavior and responsibility, where behavior is the concrete actions taken by objects where as responsibility is to fulfill requests through any number of concrete behaviors. So, responsibility is more abstract than behavior.&lt;br /&gt;
One can look at responsibility-centric perspective as an extension of the model-centric perspective with a shift of focus (from a focus on model parts to a focus on the simulation or dynamical aspects). The Backgammon example can again be&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Object Oriented Design Concepts ==&lt;br /&gt;
[[File:AnObject.jpg|350px|right|thumb|An object encapsulates scripts and information]]&lt;br /&gt;
&lt;br /&gt;
A software application is constructed from parts. These parts—software objects—interact by sending messages to request information or action from others. Throughout its lifetime, each object remains responsible for responding to a fixed set of requests. To fulfill these requests, objects encapsulate scripted responses and the information that they base them on (see Figure 4a). If an object is designed to remember certain facts, it can use them to respond differently to future requests.&amp;lt;ref&amp;gt;http://books.google.com/books/about/Object_Design.html?id=vUF72vN5MY8C&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Behavior ===&lt;br /&gt;
&lt;br /&gt;
=== Responsibilities ===&lt;br /&gt;
&lt;br /&gt;
=== Roles ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
A role is a set of responsibilities that can be used interchangeably.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Protocols ===&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
==Additional Reading==&lt;br /&gt;
*[http://books.google.com/books?id=VQaf_vOTDzMC&amp;amp;pg=PA244&amp;amp;lpg=PA244&amp;amp;dq=%22language+centric%22+%22model-centric%22+%22responsibility+centric%22+object+oriented+design&amp;amp;source=bl&amp;amp;ots=tY3C6nStiA&amp;amp;sig=bEO2VyjGTobxQ362Yaubi542ZTc&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ei=f3KFUJ2-D4Ho8QTC_IHQBA&amp;amp;ved=0CEMQ6AEwAg#v=onepage&amp;amp;q=%22language%20centric%22%20%22model-centric%22%20%22responsibility%20centric%22%20object%20oriented%20design&amp;amp;f=false Flexible,Reliable Software using Patterns and Agile Development]&lt;br /&gt;
*[http://books.google.com/books?id=YnGz2ghKF-gC&amp;amp;pg=PA60&amp;amp;lpg=PA60&amp;amp;dq=%22language-centric%22+object+oriented+design&amp;amp;source=bl&amp;amp;ots=ko8xV4SZJs&amp;amp;sig=yemCujDGu_BEySZ_k32Kc0KVbgM&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ei=K8WFUOykNYW89gTcx4GQAg&amp;amp;ved=0CFEQ6AEwBA#v=onepage&amp;amp;q=%22language-centric%22%20object%20oriented%20design&amp;amp;f=false Jibitesh Mishra, Ashok Mohanty, &amp;lt;i&amp;gt;&amp;quot;Software Engineering&amp;quot;&amp;lt;/i&amp;gt;]&lt;br /&gt;
*[http://web.engr.oregonstate.edu/~budd/Books/oopintro3e/info/ReadMe.html An Introduction to Object Oriented Programming]&lt;/div&gt;</summary>
		<author><name>Rchakar</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w15_rr&amp;diff=67929</id>
		<title>CSC/ECE 517 Fall 2012/ch2a 2w15 rr</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w15_rr&amp;diff=67929"/>
		<updated>2012-10-23T04:26:25Z</updated>

		<summary type="html">&lt;p&gt;Rchakar: /* Object Oriented Design Concepts */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
Object-oriented design is a programming model that began in the late 60's as software programs became more complex. The idea behind the approach was to build software systems by modeling them based on the real-world objects that they were trying to represent. For example, banking systems would contain customer objects, account objects and so on. Today, object-oriented design has been widely adopted &amp;lt;ref&amp;gt; [http://www.objectmentor.com/omSolutions/oops_what.html Introduction to Object Oriented Design]&amp;lt;/ref&amp;gt;. When done properly, this approach leads to simple, robust, flexible and modular software. When something goes wrong, the results could be bad. Object oriented design can be seen from different perspectives. In the language-centric perspective, objects are containers of data and methods. The model-centric perspective views the objects as model elements reflecting the real world objects and Responsibility-centric perspective views objects as interacting elements each playing a role in object community. Each of these perspectives are outlined in the following sections.&lt;br /&gt;
&lt;br /&gt;
==Background==&lt;br /&gt;
The history of object oriented design has many branches, and many people have contributed to this domain. The 1960s and 1970s saw the emergence of object oriented programming languages, such as Simula and Smalltalk, with key contributors such as Kristen Nygaard and Alan Kay, the visionary computer scientist who founded Smalltalk.&amp;lt;ref&amp;gt;[http://www.informit.com/articles/article.aspx?p=360440&amp;amp;seqNum=8 History of Object Oriented Design]&amp;lt;/ref&amp;gt;&lt;br /&gt;
But object oriented design was informal through that period, and it was only form 1982 that it became popular.  Contributors in this domain include Grady Booch, Kent Beck, Peter Coad, Don Firesmith, Ivar Jacobson (a UML founder), Steve Mellor, Bertrand Meyer, Jim Rumbaugh (a UML founder) and Rebecca Wirfs-Brock among others. Each of these perspectives are outlined in the following sections.&lt;br /&gt;
&lt;br /&gt;
==Object Oriented Design Perspectives==&lt;br /&gt;
===Language-centric perspective===&lt;br /&gt;
The focus of the language-centric perspective is classes and objects as building blocks for developing software. The emphasis is on the internal structure which are the fields and methods. Thus it is inherently a compile-time or static view which means that the definition speaks in terms of what it looks like in the following code:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
public class foo&lt;br /&gt;
{&lt;br /&gt;
 private int x;&lt;br /&gt;
 public static double y;&lt;br /&gt;
&lt;br /&gt;
 public int double (int x)&lt;br /&gt;
 {&lt;br /&gt;
   return (3*x);&lt;br /&gt;
 }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The implicit aspect of this view is that, an object is an entity in its own right and the definition is closed. Any object can be understood in isolation where the fields and methods are just enumerated. The advantage of this perspective is of that it is very concrete, closely related to the programming language level and therefore it is easy to understand. The disadvantage is that it does not help to structure the collaboration between objects, the dynamics, and this is typically where the hard challenges of design lie. Thus the perspective offers little guidance in the process of designing any realistic system.&amp;lt;ref&amp;gt;[https://docs.google.com/viewer?a=v&amp;amp;q=cache:Kl7VOfRFnNEJ:citeseerx.ist.psu.edu/viewdoc/download%3Fdoi%3D10.1.1.86.7500%26rep%3Drep1%26type%3Dpdf+%22language+centric%22+object+oriented+design&amp;amp;hl=en&amp;amp;gl=us&amp;amp;pid=bl&amp;amp;srcid=ADGEESj-HffIDcwsyYlGssvRYS3OAEloLCID6dCIHQeZ_WQ5W-fy9B3rC4uxbUKVBGzyPVn4uBra4ot0hCS71JC3NNy7nBVXRxzR4z06p3fVQKSIjn5t_fFr3dzrMICa5qNUVRnYHEAv&amp;amp;sig=AHIEtbRX7G0XgBl1mKxnPINiorZvNhW32Q Henrik Baerbak Christensen, &amp;lt;i&amp;gt;&amp;quot;Implications of Perspective in Teaching Objects First and Object Design&amp;quot;&amp;lt;/i&amp;gt;, Proceedings of the 10th annual &amp;lt;i&amp;gt;SIGCSE&amp;lt;/i&amp;gt; conference on Innovation and technology in computer science education, Department of Computer Science, University of Aarhus, 2005.]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Model-centric perspective===&lt;br /&gt;
In this perspective, the objects(classes, fields) and their relationships like inheritance, association, aggregation are designed by using some model. Here the program execution is a simulation of some part of the&lt;br /&gt;
world, and objects are perceived as the parts of the model. The perspective is often explained through analogies to other models like toy railways, traffic simulations, computer games, etc. This perspective stresses objects as entities in a larger context (they are parts of a model) as opposed to the self-contained language-centric definition. This approach works fine for real life systems such as an order-entry system, a library system, boat-rental and various other real world entity oriented systems. This naturally leads to a strong focus on what the relations are between the parts: association, generalization, composition. Dynamics is an inherent part of the concept simulation and the explicit guideline for designing object interaction is to imitate real world or model interactions.&lt;br /&gt;
Let us consider a real world example of designing a partial implementation of the board game-Backgammon to understand the objected oriented using a model-centric perspective. The physical parts of Backgammon identifiable are the checkers, points, board, dice, player, etc. The diagram below is a design of model parts (classes) and their relationships (relations).&lt;br /&gt;
&lt;br /&gt;
===Responsibility-centric perspective===&lt;br /&gt;
This perspective stresses on the behavior of software systems and the concepts used to do design include behavior, roles, responsibilities and protocol. Here, the primary focus is the dynamics of the program. Roles and responsibilities are the core concepts in this perspective and hence it has more coupling to behavior when compared to static elements like objects or model parts. There is a difference between behavior and responsibility, where behavior is the concrete actions taken by objects where as responsibility is to fulfill requests through any number of concrete behaviors. So, responsibility is more abstract than behavior.&lt;br /&gt;
One can look at responsibility-centric perspective as an extension of the model-centric perspective with a shift of focus (from a focus on model parts to a focus on the simulation or dynamical aspects). The Backgammon example can again be&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Object Oriented Design Concepts ==&lt;br /&gt;
[[File:AnObject.jpg|350px|right|An object encapsulates scripts and information]]&lt;br /&gt;
&lt;br /&gt;
A software application is constructed from parts. These parts—software objects—interact by sending messages to request information or action from others. Throughout its lifetime, each object remains responsible for responding to a fixed set of requests. To fulfill these requests, objects encapsulate scripted responses and the information that they base them on (see Figure 4a). If an object is designed to remember certain facts, it can use them to respond differently to future requests.&amp;lt;ref&amp;gt;http://books.google.com/books/about/Object_Design.html?id=vUF72vN5MY8C&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Behavior ===&lt;br /&gt;
&lt;br /&gt;
=== Responsibilities ===&lt;br /&gt;
&lt;br /&gt;
=== Roles ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
A role is a set of responsibilities that can be used interchangeably.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Protocols ===&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
==Additional Reading==&lt;br /&gt;
*[http://books.google.com/books?id=VQaf_vOTDzMC&amp;amp;pg=PA244&amp;amp;lpg=PA244&amp;amp;dq=%22language+centric%22+%22model-centric%22+%22responsibility+centric%22+object+oriented+design&amp;amp;source=bl&amp;amp;ots=tY3C6nStiA&amp;amp;sig=bEO2VyjGTobxQ362Yaubi542ZTc&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ei=f3KFUJ2-D4Ho8QTC_IHQBA&amp;amp;ved=0CEMQ6AEwAg#v=onepage&amp;amp;q=%22language%20centric%22%20%22model-centric%22%20%22responsibility%20centric%22%20object%20oriented%20design&amp;amp;f=false Flexible,Reliable Software using Patterns and Agile Development]&lt;br /&gt;
*[http://books.google.com/books?id=YnGz2ghKF-gC&amp;amp;pg=PA60&amp;amp;lpg=PA60&amp;amp;dq=%22language-centric%22+object+oriented+design&amp;amp;source=bl&amp;amp;ots=ko8xV4SZJs&amp;amp;sig=yemCujDGu_BEySZ_k32Kc0KVbgM&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ei=K8WFUOykNYW89gTcx4GQAg&amp;amp;ved=0CFEQ6AEwBA#v=onepage&amp;amp;q=%22language-centric%22%20object%20oriented%20design&amp;amp;f=false Jibitesh Mishra, Ashok Mohanty, &amp;lt;i&amp;gt;&amp;quot;Software Engineering&amp;quot;&amp;lt;/i&amp;gt;]&lt;br /&gt;
*[http://web.engr.oregonstate.edu/~budd/Books/oopintro3e/info/ReadMe.html An Introduction to Object Oriented Programming]&lt;/div&gt;</summary>
		<author><name>Rchakar</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w15_rr&amp;diff=67928</id>
		<title>CSC/ECE 517 Fall 2012/ch2a 2w15 rr</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w15_rr&amp;diff=67928"/>
		<updated>2012-10-23T04:26:11Z</updated>

		<summary type="html">&lt;p&gt;Rchakar: /* Object Oriented Design Concepts */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
Object-oriented design is a programming model that began in the late 60's as software programs became more complex. The idea behind the approach was to build software systems by modeling them based on the real-world objects that they were trying to represent. For example, banking systems would contain customer objects, account objects and so on. Today, object-oriented design has been widely adopted &amp;lt;ref&amp;gt; [http://www.objectmentor.com/omSolutions/oops_what.html Introduction to Object Oriented Design]&amp;lt;/ref&amp;gt;. When done properly, this approach leads to simple, robust, flexible and modular software. When something goes wrong, the results could be bad. Object oriented design can be seen from different perspectives. In the language-centric perspective, objects are containers of data and methods. The model-centric perspective views the objects as model elements reflecting the real world objects and Responsibility-centric perspective views objects as interacting elements each playing a role in object community. Each of these perspectives are outlined in the following sections.&lt;br /&gt;
&lt;br /&gt;
==Background==&lt;br /&gt;
The history of object oriented design has many branches, and many people have contributed to this domain. The 1960s and 1970s saw the emergence of object oriented programming languages, such as Simula and Smalltalk, with key contributors such as Kristen Nygaard and Alan Kay, the visionary computer scientist who founded Smalltalk.&amp;lt;ref&amp;gt;[http://www.informit.com/articles/article.aspx?p=360440&amp;amp;seqNum=8 History of Object Oriented Design]&amp;lt;/ref&amp;gt;&lt;br /&gt;
But object oriented design was informal through that period, and it was only form 1982 that it became popular.  Contributors in this domain include Grady Booch, Kent Beck, Peter Coad, Don Firesmith, Ivar Jacobson (a UML founder), Steve Mellor, Bertrand Meyer, Jim Rumbaugh (a UML founder) and Rebecca Wirfs-Brock among others. Each of these perspectives are outlined in the following sections.&lt;br /&gt;
&lt;br /&gt;
==Object Oriented Design Perspectives==&lt;br /&gt;
===Language-centric perspective===&lt;br /&gt;
The focus of the language-centric perspective is classes and objects as building blocks for developing software. The emphasis is on the internal structure which are the fields and methods. Thus it is inherently a compile-time or static view which means that the definition speaks in terms of what it looks like in the following code:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
public class foo&lt;br /&gt;
{&lt;br /&gt;
 private int x;&lt;br /&gt;
 public static double y;&lt;br /&gt;
&lt;br /&gt;
 public int double (int x)&lt;br /&gt;
 {&lt;br /&gt;
   return (3*x);&lt;br /&gt;
 }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The implicit aspect of this view is that, an object is an entity in its own right and the definition is closed. Any object can be understood in isolation where the fields and methods are just enumerated. The advantage of this perspective is of that it is very concrete, closely related to the programming language level and therefore it is easy to understand. The disadvantage is that it does not help to structure the collaboration between objects, the dynamics, and this is typically where the hard challenges of design lie. Thus the perspective offers little guidance in the process of designing any realistic system.&amp;lt;ref&amp;gt;[https://docs.google.com/viewer?a=v&amp;amp;q=cache:Kl7VOfRFnNEJ:citeseerx.ist.psu.edu/viewdoc/download%3Fdoi%3D10.1.1.86.7500%26rep%3Drep1%26type%3Dpdf+%22language+centric%22+object+oriented+design&amp;amp;hl=en&amp;amp;gl=us&amp;amp;pid=bl&amp;amp;srcid=ADGEESj-HffIDcwsyYlGssvRYS3OAEloLCID6dCIHQeZ_WQ5W-fy9B3rC4uxbUKVBGzyPVn4uBra4ot0hCS71JC3NNy7nBVXRxzR4z06p3fVQKSIjn5t_fFr3dzrMICa5qNUVRnYHEAv&amp;amp;sig=AHIEtbRX7G0XgBl1mKxnPINiorZvNhW32Q Henrik Baerbak Christensen, &amp;lt;i&amp;gt;&amp;quot;Implications of Perspective in Teaching Objects First and Object Design&amp;quot;&amp;lt;/i&amp;gt;, Proceedings of the 10th annual &amp;lt;i&amp;gt;SIGCSE&amp;lt;/i&amp;gt; conference on Innovation and technology in computer science education, Department of Computer Science, University of Aarhus, 2005.]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Model-centric perspective===&lt;br /&gt;
In this perspective, the objects(classes, fields) and their relationships like inheritance, association, aggregation are designed by using some model. Here the program execution is a simulation of some part of the&lt;br /&gt;
world, and objects are perceived as the parts of the model. The perspective is often explained through analogies to other models like toy railways, traffic simulations, computer games, etc. This perspective stresses objects as entities in a larger context (they are parts of a model) as opposed to the self-contained language-centric definition. This approach works fine for real life systems such as an order-entry system, a library system, boat-rental and various other real world entity oriented systems. This naturally leads to a strong focus on what the relations are between the parts: association, generalization, composition. Dynamics is an inherent part of the concept simulation and the explicit guideline for designing object interaction is to imitate real world or model interactions.&lt;br /&gt;
Let us consider a real world example of designing a partial implementation of the board game-Backgammon to understand the objected oriented using a model-centric perspective. The physical parts of Backgammon identifiable are the checkers, points, board, dice, player, etc. The diagram below is a design of model parts (classes) and their relationships (relations).&lt;br /&gt;
&lt;br /&gt;
===Responsibility-centric perspective===&lt;br /&gt;
This perspective stresses on the behavior of software systems and the concepts used to do design include behavior, roles, responsibilities and protocol. Here, the primary focus is the dynamics of the program. Roles and responsibilities are the core concepts in this perspective and hence it has more coupling to behavior when compared to static elements like objects or model parts. There is a difference between behavior and responsibility, where behavior is the concrete actions taken by objects where as responsibility is to fulfill requests through any number of concrete behaviors. So, responsibility is more abstract than behavior.&lt;br /&gt;
One can look at responsibility-centric perspective as an extension of the model-centric perspective with a shift of focus (from a focus on model parts to a focus on the simulation or dynamical aspects). The Backgammon example can again be&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Object Oriented Design Concepts ==&lt;br /&gt;
[[File:AnObject.jpg|350px|right|thumb|An object encapsulates scripts and information]]&lt;br /&gt;
&lt;br /&gt;
A software application is constructed from parts. These parts—software objects—interact by sending messages to request information or action from others. Throughout its lifetime, each object remains responsible for responding to a fixed set of requests. To fulfill these requests, objects encapsulate scripted responses and the information that they base them on (see Figure 4a). If an object is designed to remember certain facts, it can use them to respond differently to future requests.&amp;lt;ref&amp;gt;http://books.google.com/books/about/Object_Design.html?id=vUF72vN5MY8C&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Behavior ===&lt;br /&gt;
&lt;br /&gt;
=== Responsibilities ===&lt;br /&gt;
&lt;br /&gt;
=== Roles ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
A role is a set of responsibilities that can be used interchangeably.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Protocols ===&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
==Additional Reading==&lt;br /&gt;
*[http://books.google.com/books?id=VQaf_vOTDzMC&amp;amp;pg=PA244&amp;amp;lpg=PA244&amp;amp;dq=%22language+centric%22+%22model-centric%22+%22responsibility+centric%22+object+oriented+design&amp;amp;source=bl&amp;amp;ots=tY3C6nStiA&amp;amp;sig=bEO2VyjGTobxQ362Yaubi542ZTc&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ei=f3KFUJ2-D4Ho8QTC_IHQBA&amp;amp;ved=0CEMQ6AEwAg#v=onepage&amp;amp;q=%22language%20centric%22%20%22model-centric%22%20%22responsibility%20centric%22%20object%20oriented%20design&amp;amp;f=false Flexible,Reliable Software using Patterns and Agile Development]&lt;br /&gt;
*[http://books.google.com/books?id=YnGz2ghKF-gC&amp;amp;pg=PA60&amp;amp;lpg=PA60&amp;amp;dq=%22language-centric%22+object+oriented+design&amp;amp;source=bl&amp;amp;ots=ko8xV4SZJs&amp;amp;sig=yemCujDGu_BEySZ_k32Kc0KVbgM&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ei=K8WFUOykNYW89gTcx4GQAg&amp;amp;ved=0CFEQ6AEwBA#v=onepage&amp;amp;q=%22language-centric%22%20object%20oriented%20design&amp;amp;f=false Jibitesh Mishra, Ashok Mohanty, &amp;lt;i&amp;gt;&amp;quot;Software Engineering&amp;quot;&amp;lt;/i&amp;gt;]&lt;br /&gt;
*[http://web.engr.oregonstate.edu/~budd/Books/oopintro3e/info/ReadMe.html An Introduction to Object Oriented Programming]&lt;/div&gt;</summary>
		<author><name>Rchakar</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:AnObject.jpg&amp;diff=67927</id>
		<title>File:AnObject.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:AnObject.jpg&amp;diff=67927"/>
		<updated>2012-10-23T04:23:39Z</updated>

		<summary type="html">&lt;p&gt;Rchakar: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Rchakar</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w15_rr&amp;diff=67924</id>
		<title>CSC/ECE 517 Fall 2012/ch2a 2w15 rr</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w15_rr&amp;diff=67924"/>
		<updated>2012-10-23T04:11:16Z</updated>

		<summary type="html">&lt;p&gt;Rchakar: /* Roles http://books.google.com/books/about/Object_Design.html?id=vUF72vN5MY8C */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
Object-oriented design is a programming model that began in the late 60's as software programs became more complex. The idea behind the approach was to build software systems by modeling them based on the real-world objects that they were trying to represent. For example, banking systems would contain customer objects, account objects and so on. Today, object-oriented design has been widely adopted &amp;lt;ref&amp;gt; [http://www.objectmentor.com/omSolutions/oops_what.html Introduction to Object Oriented Design]&amp;lt;/ref&amp;gt;. When done properly, this approach leads to simple, robust, flexible and modular software. When something goes wrong, the results could be bad. Object oriented design can be seen from different perspectives. In the language-centric perspective, objects are containers of data and methods. The model-centric perspective views the objects as model elements reflecting the real world objects and Responsibility-centric perspective views objects as interacting elements each playing a role in object community. Each of these perspectives are outlined in the following sections.&lt;br /&gt;
&lt;br /&gt;
==Background==&lt;br /&gt;
The history of object oriented design has many branches, and many people have contributed to this domain. The 1960s and 1970s saw the emergence of object oriented programming languages, such as Simula and Smalltalk, with key contributors such as Kristen Nygaard and Alan Kay, the visionary computer scientist who founded Smalltalk.&amp;lt;ref&amp;gt;[http://www.informit.com/articles/article.aspx?p=360440&amp;amp;seqNum=8 History of Object Oriented Design]&amp;lt;/ref&amp;gt;&lt;br /&gt;
But object oriented design was informal through that period, and it was only form 1982 that it became popular.  Contributors in this domain include Grady Booch, Kent Beck, Peter Coad, Don Firesmith, Ivar Jacobson (a UML founder), Steve Mellor, Bertrand Meyer, Jim Rumbaugh (a UML founder) and Rebecca Wirfs-Brock among others. Each of these perspectives are outlined in the following sections.&lt;br /&gt;
&lt;br /&gt;
==Object Oriented Design Perspectives==&lt;br /&gt;
===Language-centric perspective===&lt;br /&gt;
The focus of the language-centric perspective is classes and objects as building blocks for developing software. The emphasis is on the internal structure which are the fields and methods. Thus it is inherently a compile-time or static view which means that the definition speaks in terms of what it looks like in the following code:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
public class foo&lt;br /&gt;
{&lt;br /&gt;
 private int x;&lt;br /&gt;
 public static double y;&lt;br /&gt;
&lt;br /&gt;
 public int double (int x)&lt;br /&gt;
 {&lt;br /&gt;
   return (3*x);&lt;br /&gt;
 }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The implicit aspect of this view is that, an object is an entity in its own right and the definition is closed. Any object can be understood in isolation where the fields and methods are just enumerated. The advantage of this perspective is of that it is very concrete, closely related to the programming language level and therefore it is easy to understand. The disadvantage is that it does not help to structure the collaboration between objects, the dynamics, and this is typically where the hard challenges of design lie. Thus the perspective offers little guidance in the process of designing any realistic system.&amp;lt;ref&amp;gt;[https://docs.google.com/viewer?a=v&amp;amp;q=cache:Kl7VOfRFnNEJ:citeseerx.ist.psu.edu/viewdoc/download%3Fdoi%3D10.1.1.86.7500%26rep%3Drep1%26type%3Dpdf+%22language+centric%22+object+oriented+design&amp;amp;hl=en&amp;amp;gl=us&amp;amp;pid=bl&amp;amp;srcid=ADGEESj-HffIDcwsyYlGssvRYS3OAEloLCID6dCIHQeZ_WQ5W-fy9B3rC4uxbUKVBGzyPVn4uBra4ot0hCS71JC3NNy7nBVXRxzR4z06p3fVQKSIjn5t_fFr3dzrMICa5qNUVRnYHEAv&amp;amp;sig=AHIEtbRX7G0XgBl1mKxnPINiorZvNhW32Q Henrik Baerbak Christensen, &amp;lt;i&amp;gt;&amp;quot;Implications of Perspective in Teaching Objects First and Object Design&amp;quot;&amp;lt;/i&amp;gt;, Proceedings of the 10th annual &amp;lt;i&amp;gt;SIGCSE&amp;lt;/i&amp;gt; conference on Innovation and technology in computer science education, Department of Computer Science, University of Aarhus, 2005.]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Model-centric perspective===&lt;br /&gt;
In this perspective, the objects(classes, fields) and their relationships like inheritance, association, aggregation are designed by using some model. Here the program execution is a simulation of some part of the&lt;br /&gt;
world, and objects are perceived as the parts of the model. The perspective is often explained through analogies to other models like toy railways, traffic simulations, computer games, etc. This perspective stresses objects as entities in a larger context (they are parts of a model) as opposed to the self-contained language-centric definition. This approach works fine for real life systems such as an order-entry system, a library system, boat-rental and various other real world entity oriented systems. This naturally leads to a strong focus on what the relations are between the parts: association, generalization, composition. Dynamics is an inherent part of the concept simulation and the explicit guideline for designing object interaction is to imitate real world or model interactions.&lt;br /&gt;
Let us consider a real world example of designing a partial implementation of the board game-Backgammon to understand the objected oriented using a model-centric perspective. The physical parts of Backgammon identifiable are the checkers, points, board, dice, player, etc. The diagram below is a design of model parts (classes) and their relationships (relations).&lt;br /&gt;
&lt;br /&gt;
===Responsibility-centric perspective===&lt;br /&gt;
This perspective stresses on the behavior of software systems and the concepts used to do design include behavior, roles, responsibilities and protocol. Here, the primary focus is the dynamics of the program. Roles and responsibilities are the core concepts in this perspective and hence it has more coupling to behavior when compared to static elements like objects or model parts. There is a difference between behavior and responsibility, where behavior is the concrete actions taken by objects where as responsibility is to fulfill requests through any number of concrete behaviors. So, responsibility is more abstract than behavior.&lt;br /&gt;
One can look at responsibility-centric perspective as an extension of the model-centric perspective with a shift of focus (from a focus on model parts to a focus on the simulation or dynamical aspects). The Backgammon example can again be&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Object Oriented Design Concepts ==&lt;br /&gt;
A software application is constructed from parts. These parts—software objects—interact by sending messages to request information or action from others. Throughout its lifetime, each object remains responsible for responding to a fixed set of requests. To fulfill these requests, objects encapsulate scripted responses and the information that they base them on (see Figure 4a). If an object is designed to remember certain facts, it can use them to respond differently to future requests.&amp;lt;ref&amp;gt;http://books.google.com/books/about/Object_Design.html?id=vUF72vN5MY8C&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Behavior ===&lt;br /&gt;
&lt;br /&gt;
=== Responsibilities ===&lt;br /&gt;
&lt;br /&gt;
=== Roles ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
A role is a set of responsibilities that can be used interchangeably.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Protocols ===&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
==Additional Reading==&lt;br /&gt;
*[http://books.google.com/books?id=VQaf_vOTDzMC&amp;amp;pg=PA244&amp;amp;lpg=PA244&amp;amp;dq=%22language+centric%22+%22model-centric%22+%22responsibility+centric%22+object+oriented+design&amp;amp;source=bl&amp;amp;ots=tY3C6nStiA&amp;amp;sig=bEO2VyjGTobxQ362Yaubi542ZTc&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ei=f3KFUJ2-D4Ho8QTC_IHQBA&amp;amp;ved=0CEMQ6AEwAg#v=onepage&amp;amp;q=%22language%20centric%22%20%22model-centric%22%20%22responsibility%20centric%22%20object%20oriented%20design&amp;amp;f=false Flexible,Reliable Software using Patterns and Agile Development]&lt;br /&gt;
*[http://books.google.com/books?id=YnGz2ghKF-gC&amp;amp;pg=PA60&amp;amp;lpg=PA60&amp;amp;dq=%22language-centric%22+object+oriented+design&amp;amp;source=bl&amp;amp;ots=ko8xV4SZJs&amp;amp;sig=yemCujDGu_BEySZ_k32Kc0KVbgM&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ei=K8WFUOykNYW89gTcx4GQAg&amp;amp;ved=0CFEQ6AEwBA#v=onepage&amp;amp;q=%22language-centric%22%20object%20oriented%20design&amp;amp;f=false Jibitesh Mishra, Ashok Mohanty, &amp;lt;i&amp;gt;&amp;quot;Software Engineering&amp;quot;&amp;lt;/i&amp;gt;]&lt;br /&gt;
*[http://web.engr.oregonstate.edu/~budd/Books/oopintro3e/info/ReadMe.html An Introduction to Object Oriented Programming]&lt;/div&gt;</summary>
		<author><name>Rchakar</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w15_rr&amp;diff=67922</id>
		<title>CSC/ECE 517 Fall 2012/ch2a 2w15 rr</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w15_rr&amp;diff=67922"/>
		<updated>2012-10-23T03:58:28Z</updated>

		<summary type="html">&lt;p&gt;Rchakar: /* Object Oriented Design Concepts http://books.google.com/books/about/Object_Design.html?id=vUF72vN5MY8C */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
Object-oriented design is a programming model that began in the late 60's as software programs became more complex. The idea behind the approach was to build software systems by modeling them based on the real-world objects that they were trying to represent. For example, banking systems would contain customer objects, account objects and so on. Today, object-oriented design has been widely adopted &amp;lt;ref&amp;gt; [http://www.objectmentor.com/omSolutions/oops_what.html Introduction to Object Oriented Design]&amp;lt;/ref&amp;gt;. When done properly, this approach leads to simple, robust, flexible and modular software. When something goes wrong, the results could be bad. Object oriented design can be seen from different perspectives. In the language-centric perspective, objects are containers of data and methods. The model-centric perspective views the objects as model elements reflecting the real world objects and Responsibility-centric perspective views objects as interacting elements each playing a role in object community. Each of these perspectives are outlined in the following sections.&lt;br /&gt;
&lt;br /&gt;
==Background==&lt;br /&gt;
The history of object oriented design has many branches, and many people have contributed to this domain. The 1960s and 1970s saw the emergence of object oriented programming languages, such as Simula and Smalltalk, with key contributors such as Kristen Nygaard and Alan Kay, the visionary computer scientist who founded Smalltalk.&amp;lt;ref&amp;gt;[http://www.informit.com/articles/article.aspx?p=360440&amp;amp;seqNum=8 History of Object Oriented Design]&amp;lt;/ref&amp;gt;&lt;br /&gt;
But object oriented design was informal through that period, and it was only form 1982 that it became popular.  Contributors in this domain include Grady Booch, Kent Beck, Peter Coad, Don Firesmith, Ivar Jacobson (a UML founder), Steve Mellor, Bertrand Meyer, Jim Rumbaugh (a UML founder) and Rebecca Wirfs-Brock among others. Each of these perspectives are outlined in the following sections.&lt;br /&gt;
&lt;br /&gt;
==Object Oriented Design Perspectives==&lt;br /&gt;
===Language-centric perspective===&lt;br /&gt;
The focus of the language-centric perspective is classes and objects as building blocks for developing software. The emphasis is on the internal structure which are the fields and methods. Thus it is inherently a compile-time or static view which means that the definition speaks in terms of what it looks like in the following code:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
public class foo&lt;br /&gt;
{&lt;br /&gt;
 private int x;&lt;br /&gt;
 public static double y;&lt;br /&gt;
&lt;br /&gt;
 public int double (int x)&lt;br /&gt;
 {&lt;br /&gt;
   return (3*x);&lt;br /&gt;
 }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The implicit aspect of this view is that, an object is an entity in its own right and the definition is closed. Any object can be understood in isolation where the fields and methods are just enumerated. The advantage of this perspective is of that it is very concrete, closely related to the programming language level and therefore it is easy to understand. The disadvantage is that it does not help to structure the collaboration between objects, the dynamics, and this is typically where the hard challenges of design lie. Thus the perspective offers little guidance in the process of designing any realistic system.&amp;lt;ref&amp;gt;[https://docs.google.com/viewer?a=v&amp;amp;q=cache:Kl7VOfRFnNEJ:citeseerx.ist.psu.edu/viewdoc/download%3Fdoi%3D10.1.1.86.7500%26rep%3Drep1%26type%3Dpdf+%22language+centric%22+object+oriented+design&amp;amp;hl=en&amp;amp;gl=us&amp;amp;pid=bl&amp;amp;srcid=ADGEESj-HffIDcwsyYlGssvRYS3OAEloLCID6dCIHQeZ_WQ5W-fy9B3rC4uxbUKVBGzyPVn4uBra4ot0hCS71JC3NNy7nBVXRxzR4z06p3fVQKSIjn5t_fFr3dzrMICa5qNUVRnYHEAv&amp;amp;sig=AHIEtbRX7G0XgBl1mKxnPINiorZvNhW32Q Henrik Baerbak Christensen, &amp;lt;i&amp;gt;&amp;quot;Implications of Perspective in Teaching Objects First and Object Design&amp;quot;&amp;lt;/i&amp;gt;, Proceedings of the 10th annual &amp;lt;i&amp;gt;SIGCSE&amp;lt;/i&amp;gt; conference on Innovation and technology in computer science education, Department of Computer Science, University of Aarhus, 2005.]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Model-centric perspective===&lt;br /&gt;
In this perspective, the objects(classes, fields) and their relationships like inheritance, association, aggregation are designed by using some model. Here the program execution is a simulation of some part of the&lt;br /&gt;
world, and objects are perceived as the parts of the model. The perspective is often explained through analogies to other models like toy railways, traffic simulations, computer games, etc. This perspective stresses objects as entities in a larger context (they are parts of a model) as opposed to the self-contained language-centric definition. This approach works fine for real life systems such as an order-entry system, a library system, boat-rental and various other real world entity oriented systems. This naturally leads to a strong focus on what the relations are between the parts: association, generalization, composition. Dynamics is an inherent part of the concept simulation and the explicit guideline for designing object interaction is to imitate real world or model interactions.&lt;br /&gt;
Let us consider a real world example of designing a partial implementation of the board game-Backgammon to understand the objected oriented using a model-centric perspective. The physical parts of Backgammon identifiable are the checkers, points, board, dice, player, etc. The diagram below is a design of model parts (classes) and their relationships (relations).&lt;br /&gt;
&lt;br /&gt;
===Responsibility-centric perspective===&lt;br /&gt;
This perspective stresses on the behavior of software systems and the concepts used to do design include behavior, roles, responsibilities and protocol. Here, the primary focus is the dynamics of the program. Roles and responsibilities are the core concepts in this perspective and hence it has more coupling to behavior when compared to static elements like objects or model parts. There is a difference between behavior and responsibility, where behavior is the concrete actions taken by objects where as responsibility is to fulfill requests through any number of concrete behaviors. So, responsibility is more abstract than behavior.&lt;br /&gt;
One can look at responsibility-centric perspective as an extension of the model-centric perspective with a shift of focus (from a focus on model parts to a focus on the simulation or dynamical aspects). The Backgammon example can again be&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Object Oriented Design Concepts ==&lt;br /&gt;
A software application is constructed from parts. These parts—software objects—interact by sending messages to request information or action from others. Throughout its lifetime, each object remains responsible for responding to a fixed set of requests. To fulfill these requests, objects encapsulate scripted responses and the information that they base them on (see Figure 4a). If an object is designed to remember certain facts, it can use them to respond differently to future requests.&amp;lt;ref&amp;gt;http://books.google.com/books/about/Object_Design.html?id=vUF72vN5MY8C&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Behavior ===&lt;br /&gt;
&lt;br /&gt;
=== Responsibilities ===&lt;br /&gt;
&lt;br /&gt;
=== Roles &amp;lt;ref&amp;gt;http://books.google.com/books/about/Object_Design.html?id=vUF72vN5MY8C&amp;lt;/ref&amp;gt;===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
A role is a set of responsibilities that can be used interchangeably.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Protocols ===&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
==Additional Reading==&lt;br /&gt;
*[http://books.google.com/books?id=VQaf_vOTDzMC&amp;amp;pg=PA244&amp;amp;lpg=PA244&amp;amp;dq=%22language+centric%22+%22model-centric%22+%22responsibility+centric%22+object+oriented+design&amp;amp;source=bl&amp;amp;ots=tY3C6nStiA&amp;amp;sig=bEO2VyjGTobxQ362Yaubi542ZTc&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ei=f3KFUJ2-D4Ho8QTC_IHQBA&amp;amp;ved=0CEMQ6AEwAg#v=onepage&amp;amp;q=%22language%20centric%22%20%22model-centric%22%20%22responsibility%20centric%22%20object%20oriented%20design&amp;amp;f=false Flexible,Reliable Software using Patterns and Agile Development]&lt;br /&gt;
*[http://books.google.com/books?id=YnGz2ghKF-gC&amp;amp;pg=PA60&amp;amp;lpg=PA60&amp;amp;dq=%22language-centric%22+object+oriented+design&amp;amp;source=bl&amp;amp;ots=ko8xV4SZJs&amp;amp;sig=yemCujDGu_BEySZ_k32Kc0KVbgM&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ei=K8WFUOykNYW89gTcx4GQAg&amp;amp;ved=0CFEQ6AEwBA#v=onepage&amp;amp;q=%22language-centric%22%20object%20oriented%20design&amp;amp;f=false Jibitesh Mishra, Ashok Mohanty, &amp;lt;i&amp;gt;&amp;quot;Software Engineering&amp;quot;&amp;lt;/i&amp;gt;]&lt;br /&gt;
*[http://web.engr.oregonstate.edu/~budd/Books/oopintro3e/info/ReadMe.html An Introduction to Object Oriented Programming]&lt;/div&gt;</summary>
		<author><name>Rchakar</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w15_rr&amp;diff=67920</id>
		<title>CSC/ECE 517 Fall 2012/ch2a 2w15 rr</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w15_rr&amp;diff=67920"/>
		<updated>2012-10-23T03:57:16Z</updated>

		<summary type="html">&lt;p&gt;Rchakar: /* Object Oriented Design Concepts */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
Object-oriented design is a programming model that began in the late 60's as software programs became more complex. The idea behind the approach was to build software systems by modeling them based on the real-world objects that they were trying to represent. For example, banking systems would contain customer objects, account objects and so on. Today, object-oriented design has been widely adopted &amp;lt;ref&amp;gt; [http://www.objectmentor.com/omSolutions/oops_what.html Introduction to Object Oriented Design]&amp;lt;/ref&amp;gt;. When done properly, this approach leads to simple, robust, flexible and modular software. When something goes wrong, the results could be bad. Object oriented design can be seen from different perspectives. In the language-centric perspective, objects are containers of data and methods. The model-centric perspective views the objects as model elements reflecting the real world objects and Responsibility-centric perspective views objects as interacting elements each playing a role in object community. Each of these perspectives are outlined in the following sections.&lt;br /&gt;
&lt;br /&gt;
==Background==&lt;br /&gt;
The history of object oriented design has many branches, and many people have contributed to this domain. The 1960s and 1970s saw the emergence of object oriented programming languages, such as Simula and Smalltalk, with key contributors such as Kristen Nygaard and Alan Kay, the visionary computer scientist who founded Smalltalk.&amp;lt;ref&amp;gt;[http://www.informit.com/articles/article.aspx?p=360440&amp;amp;seqNum=8 History of Object Oriented Design]&amp;lt;/ref&amp;gt;&lt;br /&gt;
But object oriented design was informal through that period, and it was only form 1982 that it became popular.  Contributors in this domain include Grady Booch, Kent Beck, Peter Coad, Don Firesmith, Ivar Jacobson (a UML founder), Steve Mellor, Bertrand Meyer, Jim Rumbaugh (a UML founder) and Rebecca Wirfs-Brock among others. Each of these perspectives are outlined in the following sections.&lt;br /&gt;
&lt;br /&gt;
==Object Oriented Design Perspectives==&lt;br /&gt;
===Language-centric perspective===&lt;br /&gt;
The focus of the language-centric perspective is classes and objects as building blocks for developing software. The emphasis is on the internal structure which are the fields and methods. Thus it is inherently a compile-time or static view which means that the definition speaks in terms of what it looks like in the following code:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
public class foo&lt;br /&gt;
{&lt;br /&gt;
 private int x;&lt;br /&gt;
 public static double y;&lt;br /&gt;
&lt;br /&gt;
 public int double (int x)&lt;br /&gt;
 {&lt;br /&gt;
   return (3*x);&lt;br /&gt;
 }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The implicit aspect of this view is that, an object is an entity in its own right and the definition is closed. Any object can be understood in isolation where the fields and methods are just enumerated. The advantage of this perspective is of that it is very concrete, closely related to the programming language level and therefore it is easy to understand. The disadvantage is that it does not help to structure the collaboration between objects, the dynamics, and this is typically where the hard challenges of design lie. Thus the perspective offers little guidance in the process of designing any realistic system.&amp;lt;ref&amp;gt;[https://docs.google.com/viewer?a=v&amp;amp;q=cache:Kl7VOfRFnNEJ:citeseerx.ist.psu.edu/viewdoc/download%3Fdoi%3D10.1.1.86.7500%26rep%3Drep1%26type%3Dpdf+%22language+centric%22+object+oriented+design&amp;amp;hl=en&amp;amp;gl=us&amp;amp;pid=bl&amp;amp;srcid=ADGEESj-HffIDcwsyYlGssvRYS3OAEloLCID6dCIHQeZ_WQ5W-fy9B3rC4uxbUKVBGzyPVn4uBra4ot0hCS71JC3NNy7nBVXRxzR4z06p3fVQKSIjn5t_fFr3dzrMICa5qNUVRnYHEAv&amp;amp;sig=AHIEtbRX7G0XgBl1mKxnPINiorZvNhW32Q Henrik Baerbak Christensen, &amp;lt;i&amp;gt;&amp;quot;Implications of Perspective in Teaching Objects First and Object Design&amp;quot;&amp;lt;/i&amp;gt;, Proceedings of the 10th annual &amp;lt;i&amp;gt;SIGCSE&amp;lt;/i&amp;gt; conference on Innovation and technology in computer science education, Department of Computer Science, University of Aarhus, 2005.]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Model-centric perspective===&lt;br /&gt;
In this perspective, the objects(classes, fields) and their relationships like inheritance, association, aggregation are designed by using some model. Here the program execution is a simulation of some part of the&lt;br /&gt;
world, and objects are perceived as the parts of the model. The perspective is often explained through analogies to other models like toy railways, traffic simulations, computer games, etc. This perspective stresses objects as entities in a larger context (they are parts of a model) as opposed to the self-contained language-centric definition. This approach works fine for real life systems such as an order-entry system, a library system, boat-rental and various other real world entity oriented systems. This naturally leads to a strong focus on what the relations are between the parts: association, generalization, composition. Dynamics is an inherent part of the concept simulation and the explicit guideline for designing object interaction is to imitate real world or model interactions.&lt;br /&gt;
Let us consider a real world example of designing a partial implementation of the board game-Backgammon to understand the objected oriented using a model-centric perspective. The physical parts of Backgammon identifiable are the checkers, points, board, dice, player, etc. The diagram below is a design of model parts (classes) and their relationships (relations).&lt;br /&gt;
&lt;br /&gt;
===Responsibility-centric perspective===&lt;br /&gt;
This perspective stresses on the behavior of software systems and the concepts used to do design include behavior, roles, responsibilities and protocol. Here, the primary focus is the dynamics of the program. Roles and responsibilities are the core concepts in this perspective and hence it has more coupling to behavior when compared to static elements like objects or model parts. There is a difference between behavior and responsibility, where behavior is the concrete actions taken by objects where as responsibility is to fulfill requests through any number of concrete behaviors. So, responsibility is more abstract than behavior.&lt;br /&gt;
One can look at responsibility-centric perspective as an extension of the model-centric perspective with a shift of focus (from a focus on model parts to a focus on the simulation or dynamical aspects). The Backgammon example can again be&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Object Oriented Design Concepts &amp;lt;ref&amp;gt;http://books.google.com/books/about/Object_Design.html?id=vUF72vN5MY8C&amp;lt;/ref&amp;gt;==&lt;br /&gt;
A software application is constructed from parts. These parts—software objects—interact by sending messages to request information or action from others. Throughout its lifetime, each object remains responsible for responding to a fixed set of requests. To fulfill these requests, objects encapsulate scripted responses and the information that they base them on (see Figure 4a). If an object is designed to remember certain facts, it can use them to respond differently to future requests.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Behavior ===&lt;br /&gt;
&lt;br /&gt;
=== Responsibilities ===&lt;br /&gt;
&lt;br /&gt;
=== Roles ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
A role is a set of responsibilities that can be used interchangeably.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Protocols ===&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
==Additional Reading==&lt;br /&gt;
*[http://books.google.com/books?id=VQaf_vOTDzMC&amp;amp;pg=PA244&amp;amp;lpg=PA244&amp;amp;dq=%22language+centric%22+%22model-centric%22+%22responsibility+centric%22+object+oriented+design&amp;amp;source=bl&amp;amp;ots=tY3C6nStiA&amp;amp;sig=bEO2VyjGTobxQ362Yaubi542ZTc&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ei=f3KFUJ2-D4Ho8QTC_IHQBA&amp;amp;ved=0CEMQ6AEwAg#v=onepage&amp;amp;q=%22language%20centric%22%20%22model-centric%22%20%22responsibility%20centric%22%20object%20oriented%20design&amp;amp;f=false Flexible,Reliable Software using Patterns and Agile Development]&lt;br /&gt;
*[http://books.google.com/books?id=YnGz2ghKF-gC&amp;amp;pg=PA60&amp;amp;lpg=PA60&amp;amp;dq=%22language-centric%22+object+oriented+design&amp;amp;source=bl&amp;amp;ots=ko8xV4SZJs&amp;amp;sig=yemCujDGu_BEySZ_k32Kc0KVbgM&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ei=K8WFUOykNYW89gTcx4GQAg&amp;amp;ved=0CFEQ6AEwBA#v=onepage&amp;amp;q=%22language-centric%22%20object%20oriented%20design&amp;amp;f=false Jibitesh Mishra, Ashok Mohanty, &amp;lt;i&amp;gt;&amp;quot;Software Engineering&amp;quot;&amp;lt;/i&amp;gt;]&lt;br /&gt;
*[http://web.engr.oregonstate.edu/~budd/Books/oopintro3e/info/ReadMe.html An Introduction to Object Oriented Programming]&lt;/div&gt;</summary>
		<author><name>Rchakar</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w15_rr&amp;diff=67914</id>
		<title>CSC/ECE 517 Fall 2012/ch2a 2w15 rr</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w15_rr&amp;diff=67914"/>
		<updated>2012-10-23T03:52:39Z</updated>

		<summary type="html">&lt;p&gt;Rchakar: /* Object Oriented Design Concepts */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
Object-oriented design is a programming model that began in the late 60's as software programs became more complex. The idea behind the approach was to build software systems by modeling them based on the real-world objects that they were trying to represent. For example, banking systems would contain customer objects, account objects and so on. Today, object-oriented design has been widely adopted &amp;lt;ref&amp;gt; [http://www.objectmentor.com/omSolutions/oops_what.html Introduction to Object Oriented Design]&amp;lt;/ref&amp;gt;. When done properly, this approach leads to simple, robust, flexible and modular software. When something goes wrong, the results could be bad. Object oriented design can be seen from different perspectives. In the language-centric perspective, objects are containers of data and methods. The model-centric perspective views the objects as model elements reflecting the real world objects and Responsibility-centric perspective views objects as interacting elements each playing a role in object community. Each of these perspectives are outlined in the following sections.&lt;br /&gt;
&lt;br /&gt;
==Background==&lt;br /&gt;
The history of object oriented design has many branches, and many people have contributed to this domain. The 1960s and 1970s saw the emergence of object oriented programming languages, such as Simula and Smalltalk, with key contributors such as Kristen Nygaard and Alan Kay, the visionary computer scientist who founded Smalltalk.&amp;lt;ref&amp;gt;[http://www.informit.com/articles/article.aspx?p=360440&amp;amp;seqNum=8 History of Object Oriented Design]&amp;lt;/ref&amp;gt;&lt;br /&gt;
But object oriented design was informal through that period, and it was only form 1982 that it became popular.  Contributors in this domain include Grady Booch, Kent Beck, Peter Coad, Don Firesmith, Ivar Jacobson (a UML founder), Steve Mellor, Bertrand Meyer, Jim Rumbaugh (a UML founder) and Rebecca Wirfs-Brock among others. Each of these perspectives are outlined in the following sections.&lt;br /&gt;
&lt;br /&gt;
==Object Oriented Design Perspectives==&lt;br /&gt;
===Language-centric perspective===&lt;br /&gt;
The focus of the language-centric perspective is classes and objects as building blocks for developing software. The emphasis is on the internal structure which are the fields and methods. Thus it is inherently a compile-time or static view which means that the definition speaks in terms of what it looks like in the following code:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
public class foo&lt;br /&gt;
{&lt;br /&gt;
 private int x;&lt;br /&gt;
 public static double y;&lt;br /&gt;
&lt;br /&gt;
 public int double (int x)&lt;br /&gt;
 {&lt;br /&gt;
   return (3*x);&lt;br /&gt;
 }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The implicit aspect of this view is that, an object is an entity in its own right and the definition is closed. Any object can be understood in isolation where the fields and methods are just enumerated. The advantage of this perspective is of that it is very concrete, closely related to the programming language level and therefore it is easy to understand. The disadvantage is that it does not help to structure the collaboration between objects, the dynamics, and this is typically where the hard challenges of design lie. Thus the perspective offers little guidance in the process of designing any realistic system.&amp;lt;ref&amp;gt;[https://docs.google.com/viewer?a=v&amp;amp;q=cache:Kl7VOfRFnNEJ:citeseerx.ist.psu.edu/viewdoc/download%3Fdoi%3D10.1.1.86.7500%26rep%3Drep1%26type%3Dpdf+%22language+centric%22+object+oriented+design&amp;amp;hl=en&amp;amp;gl=us&amp;amp;pid=bl&amp;amp;srcid=ADGEESj-HffIDcwsyYlGssvRYS3OAEloLCID6dCIHQeZ_WQ5W-fy9B3rC4uxbUKVBGzyPVn4uBra4ot0hCS71JC3NNy7nBVXRxzR4z06p3fVQKSIjn5t_fFr3dzrMICa5qNUVRnYHEAv&amp;amp;sig=AHIEtbRX7G0XgBl1mKxnPINiorZvNhW32Q Henrik Baerbak Christensen, &amp;lt;i&amp;gt;&amp;quot;Implications of Perspective in Teaching Objects First and Object Design&amp;quot;&amp;lt;/i&amp;gt;, Proceedings of the 10th annual &amp;lt;i&amp;gt;SIGCSE&amp;lt;/i&amp;gt; conference on Innovation and technology in computer science education, Department of Computer Science, University of Aarhus, 2005.]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Model-centric perspective===&lt;br /&gt;
In this perspective, the objects(classes, fields) and their relationships like inheritance, association, aggregation are designed by using some model. Here the program execution is a simulation of some part of the&lt;br /&gt;
world, and objects are perceived as the parts of the model. The perspective is often explained through analogies to other models like toy railways, traffic simulations, computer games, etc. This perspective stresses objects as entities in a larger context (they are parts of a model) as opposed to the self-contained language-centric definition. This approach works fine for real life systems such as an order-entry system, a library system, boat-rental and various other real world entity oriented systems. This naturally leads to a strong focus on what the relations are between the parts: association, generalization, composition. Dynamics is an inherent part of the concept simulation and the explicit guideline for designing object interaction is to imitate real world or model interactions.&lt;br /&gt;
Let us consider a real world example of designing a partial implementation of the board game-Backgammon to understand the objected oriented using a model-centric perspective. The physical parts of Backgammon identifiable are the checkers, points, board, dice, player, etc. The diagram below is a design of model parts (classes) and their relationships (relations).&lt;br /&gt;
&lt;br /&gt;
===Responsibility-centric perspective===&lt;br /&gt;
This perspective stresses on the behavior of software systems and the concepts used to do design include behavior, roles, responsibilities and protocol. Here, the primary focus is the dynamics of the program. Roles and responsibilities are the core concepts in this perspective and hence it has more coupling to behavior when compared to static elements like objects or model parts. There is a difference between behavior and responsibility, where behavior is the concrete actions taken by objects where as responsibility is to fulfill requests through any number of concrete behaviors. So, responsibility is more abstract than behavior.&lt;br /&gt;
One can look at responsibility-centric perspective as an extension of the model-centric perspective with a shift of focus (from a focus on model parts to a focus on the simulation or dynamical aspects). The Backgammon example can again be&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Object Oriented Design Concepts==&lt;br /&gt;
A software application is constructed from parts. These parts—software objects—interact by sending messages to request information or action from others. Throughout its lifetime, each object remains responsible for responding to a fixed set of requests. To fulfill these requests, objects encapsulate scripted responses and the information that they base them on (see Figure 1-1). If an object is designed to remember certain facts, it can use them to respond differently to future requests.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Behavior ===&lt;br /&gt;
&lt;br /&gt;
=== Responsibilities ===&lt;br /&gt;
&lt;br /&gt;
=== Roles ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
A role is a set of responsibilities that can be used interchangeably.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Protocols ===&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
==Additional Reading==&lt;br /&gt;
*[http://books.google.com/books?id=VQaf_vOTDzMC&amp;amp;pg=PA244&amp;amp;lpg=PA244&amp;amp;dq=%22language+centric%22+%22model-centric%22+%22responsibility+centric%22+object+oriented+design&amp;amp;source=bl&amp;amp;ots=tY3C6nStiA&amp;amp;sig=bEO2VyjGTobxQ362Yaubi542ZTc&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ei=f3KFUJ2-D4Ho8QTC_IHQBA&amp;amp;ved=0CEMQ6AEwAg#v=onepage&amp;amp;q=%22language%20centric%22%20%22model-centric%22%20%22responsibility%20centric%22%20object%20oriented%20design&amp;amp;f=false Flexible,Reliable Software using Patterns and Agile Development]&lt;br /&gt;
*[http://books.google.com/books?id=YnGz2ghKF-gC&amp;amp;pg=PA60&amp;amp;lpg=PA60&amp;amp;dq=%22language-centric%22+object+oriented+design&amp;amp;source=bl&amp;amp;ots=ko8xV4SZJs&amp;amp;sig=yemCujDGu_BEySZ_k32Kc0KVbgM&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ei=K8WFUOykNYW89gTcx4GQAg&amp;amp;ved=0CFEQ6AEwBA#v=onepage&amp;amp;q=%22language-centric%22%20object%20oriented%20design&amp;amp;f=false Jibitesh Mishra, Ashok Mohanty, &amp;lt;i&amp;gt;&amp;quot;Software Engineering&amp;quot;&amp;lt;/i&amp;gt;]&lt;br /&gt;
*[http://web.engr.oregonstate.edu/~budd/Books/oopintro3e/info/ReadMe.html An Introduction to Object Oriented Programming]&lt;/div&gt;</summary>
		<author><name>Rchakar</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w15_rr&amp;diff=67913</id>
		<title>CSC/ECE 517 Fall 2012/ch2a 2w15 rr</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w15_rr&amp;diff=67913"/>
		<updated>2012-10-23T03:52:03Z</updated>

		<summary type="html">&lt;p&gt;Rchakar: /* Roles */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
Object-oriented design is a programming model that began in the late 60's as software programs became more complex. The idea behind the approach was to build software systems by modeling them based on the real-world objects that they were trying to represent. For example, banking systems would contain customer objects, account objects and so on. Today, object-oriented design has been widely adopted &amp;lt;ref&amp;gt; [http://www.objectmentor.com/omSolutions/oops_what.html Introduction to Object Oriented Design]&amp;lt;/ref&amp;gt;. When done properly, this approach leads to simple, robust, flexible and modular software. When something goes wrong, the results could be bad. Object oriented design can be seen from different perspectives. In the language-centric perspective, objects are containers of data and methods. The model-centric perspective views the objects as model elements reflecting the real world objects and Responsibility-centric perspective views objects as interacting elements each playing a role in object community. Each of these perspectives are outlined in the following sections.&lt;br /&gt;
&lt;br /&gt;
==Background==&lt;br /&gt;
The history of object oriented design has many branches, and many people have contributed to this domain. The 1960s and 1970s saw the emergence of object oriented programming languages, such as Simula and Smalltalk, with key contributors such as Kristen Nygaard and Alan Kay, the visionary computer scientist who founded Smalltalk.&amp;lt;ref&amp;gt;[http://www.informit.com/articles/article.aspx?p=360440&amp;amp;seqNum=8 History of Object Oriented Design]&amp;lt;/ref&amp;gt;&lt;br /&gt;
But object oriented design was informal through that period, and it was only form 1982 that it became popular.  Contributors in this domain include Grady Booch, Kent Beck, Peter Coad, Don Firesmith, Ivar Jacobson (a UML founder), Steve Mellor, Bertrand Meyer, Jim Rumbaugh (a UML founder) and Rebecca Wirfs-Brock among others. Each of these perspectives are outlined in the following sections.&lt;br /&gt;
&lt;br /&gt;
==Object Oriented Design Perspectives==&lt;br /&gt;
===Language-centric perspective===&lt;br /&gt;
The focus of the language-centric perspective is classes and objects as building blocks for developing software. The emphasis is on the internal structure which are the fields and methods. Thus it is inherently a compile-time or static view which means that the definition speaks in terms of what it looks like in the following code:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
public class foo&lt;br /&gt;
{&lt;br /&gt;
 private int x;&lt;br /&gt;
 public static double y;&lt;br /&gt;
&lt;br /&gt;
 public int double (int x)&lt;br /&gt;
 {&lt;br /&gt;
   return (3*x);&lt;br /&gt;
 }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The implicit aspect of this view is that, an object is an entity in its own right and the definition is closed. Any object can be understood in isolation where the fields and methods are just enumerated. The advantage of this perspective is of that it is very concrete, closely related to the programming language level and therefore it is easy to understand. The disadvantage is that it does not help to structure the collaboration between objects, the dynamics, and this is typically where the hard challenges of design lie. Thus the perspective offers little guidance in the process of designing any realistic system.&amp;lt;ref&amp;gt;[https://docs.google.com/viewer?a=v&amp;amp;q=cache:Kl7VOfRFnNEJ:citeseerx.ist.psu.edu/viewdoc/download%3Fdoi%3D10.1.1.86.7500%26rep%3Drep1%26type%3Dpdf+%22language+centric%22+object+oriented+design&amp;amp;hl=en&amp;amp;gl=us&amp;amp;pid=bl&amp;amp;srcid=ADGEESj-HffIDcwsyYlGssvRYS3OAEloLCID6dCIHQeZ_WQ5W-fy9B3rC4uxbUKVBGzyPVn4uBra4ot0hCS71JC3NNy7nBVXRxzR4z06p3fVQKSIjn5t_fFr3dzrMICa5qNUVRnYHEAv&amp;amp;sig=AHIEtbRX7G0XgBl1mKxnPINiorZvNhW32Q Henrik Baerbak Christensen, &amp;lt;i&amp;gt;&amp;quot;Implications of Perspective in Teaching Objects First and Object Design&amp;quot;&amp;lt;/i&amp;gt;, Proceedings of the 10th annual &amp;lt;i&amp;gt;SIGCSE&amp;lt;/i&amp;gt; conference on Innovation and technology in computer science education, Department of Computer Science, University of Aarhus, 2005.]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Model-centric perspective===&lt;br /&gt;
In this perspective, the objects(classes, fields) and their relationships like inheritance, association, aggregation are designed by using some model. Here the program execution is a simulation of some part of the&lt;br /&gt;
world, and objects are perceived as the parts of the model. The perspective is often explained through analogies to other models like toy railways, traffic simulations, computer games, etc. This perspective stresses objects as entities in a larger context (they are parts of a model) as opposed to the self-contained language-centric definition. This approach works fine for real life systems such as an order-entry system, a library system, boat-rental and various other real world entity oriented systems. This naturally leads to a strong focus on what the relations are between the parts: association, generalization, composition. Dynamics is an inherent part of the concept simulation and the explicit guideline for designing object interaction is to imitate real world or model interactions.&lt;br /&gt;
Let us consider a real world example of designing a partial implementation of the board game-Backgammon to understand the objected oriented using a model-centric perspective. The physical parts of Backgammon identifiable are the checkers, points, board, dice, player, etc. The diagram below is a design of model parts (classes) and their relationships (relations).&lt;br /&gt;
&lt;br /&gt;
===Responsibility-centric perspective===&lt;br /&gt;
This perspective stresses on the behavior of software systems and the concepts used to do design include behavior, roles, responsibilities and protocol. Here, the primary focus is the dynamics of the program. Roles and responsibilities are the core concepts in this perspective and hence it has more coupling to behavior when compared to static elements like objects or model parts. There is a difference between behavior and responsibility, where behavior is the concrete actions taken by objects where as responsibility is to fulfill requests through any number of concrete behaviors. So, responsibility is more abstract than behavior.&lt;br /&gt;
One can look at responsibility-centric perspective as an extension of the model-centric perspective with a shift of focus (from a focus on model parts to a focus on the simulation or dynamical aspects). The Backgammon example can again be&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Object Oriented Design Concepts==&lt;br /&gt;
=== Behavior ===&lt;br /&gt;
&lt;br /&gt;
=== Responsibilities ===&lt;br /&gt;
&lt;br /&gt;
=== Roles ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
A role is a set of responsibilities that can be used interchangeably.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Protocols ===&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
==Additional Reading==&lt;br /&gt;
*[http://books.google.com/books?id=VQaf_vOTDzMC&amp;amp;pg=PA244&amp;amp;lpg=PA244&amp;amp;dq=%22language+centric%22+%22model-centric%22+%22responsibility+centric%22+object+oriented+design&amp;amp;source=bl&amp;amp;ots=tY3C6nStiA&amp;amp;sig=bEO2VyjGTobxQ362Yaubi542ZTc&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ei=f3KFUJ2-D4Ho8QTC_IHQBA&amp;amp;ved=0CEMQ6AEwAg#v=onepage&amp;amp;q=%22language%20centric%22%20%22model-centric%22%20%22responsibility%20centric%22%20object%20oriented%20design&amp;amp;f=false Flexible,Reliable Software using Patterns and Agile Development]&lt;br /&gt;
*[http://books.google.com/books?id=YnGz2ghKF-gC&amp;amp;pg=PA60&amp;amp;lpg=PA60&amp;amp;dq=%22language-centric%22+object+oriented+design&amp;amp;source=bl&amp;amp;ots=ko8xV4SZJs&amp;amp;sig=yemCujDGu_BEySZ_k32Kc0KVbgM&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ei=K8WFUOykNYW89gTcx4GQAg&amp;amp;ved=0CFEQ6AEwBA#v=onepage&amp;amp;q=%22language-centric%22%20object%20oriented%20design&amp;amp;f=false Jibitesh Mishra, Ashok Mohanty, &amp;lt;i&amp;gt;&amp;quot;Software Engineering&amp;quot;&amp;lt;/i&amp;gt;]&lt;br /&gt;
*[http://web.engr.oregonstate.edu/~budd/Books/oopintro3e/info/ReadMe.html An Introduction to Object Oriented Programming]&lt;/div&gt;</summary>
		<author><name>Rchakar</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w15_rr&amp;diff=67912</id>
		<title>CSC/ECE 517 Fall 2012/ch2a 2w15 rr</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w15_rr&amp;diff=67912"/>
		<updated>2012-10-23T03:49:41Z</updated>

		<summary type="html">&lt;p&gt;Rchakar: /* Object Oriented Design Concepts */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
Object-oriented design is a programming model that began in the late 60's as software programs became more complex. The idea behind the approach was to build software systems by modeling them based on the real-world objects that they were trying to represent. For example, banking systems would contain customer objects, account objects and so on. Today, object-oriented design has been widely adopted &amp;lt;ref&amp;gt; [http://www.objectmentor.com/omSolutions/oops_what.html Introduction to Object Oriented Design]&amp;lt;/ref&amp;gt;. When done properly, this approach leads to simple, robust, flexible and modular software. When something goes wrong, the results could be bad. Object oriented design can be seen from different perspectives. In the language-centric perspective, objects are containers of data and methods. The model-centric perspective views the objects as model elements reflecting the real world objects and Responsibility-centric perspective views objects as interacting elements each playing a role in object community. Each of these perspectives are outlined in the following sections.&lt;br /&gt;
&lt;br /&gt;
==Background==&lt;br /&gt;
The history of object oriented design has many branches, and many people have contributed to this domain. The 1960s and 1970s saw the emergence of object oriented programming languages, such as Simula and Smalltalk, with key contributors such as Kristen Nygaard and Alan Kay, the visionary computer scientist who founded Smalltalk.&amp;lt;ref&amp;gt;[http://www.informit.com/articles/article.aspx?p=360440&amp;amp;seqNum=8 History of Object Oriented Design]&amp;lt;/ref&amp;gt;&lt;br /&gt;
But object oriented design was informal through that period, and it was only form 1982 that it became popular.  Contributors in this domain include Grady Booch, Kent Beck, Peter Coad, Don Firesmith, Ivar Jacobson (a UML founder), Steve Mellor, Bertrand Meyer, Jim Rumbaugh (a UML founder) and Rebecca Wirfs-Brock among others. Each of these perspectives are outlined in the following sections.&lt;br /&gt;
&lt;br /&gt;
==Object Oriented Design Perspectives==&lt;br /&gt;
===Language-centric perspective===&lt;br /&gt;
The focus of the language-centric perspective is classes and objects as building blocks for developing software. The emphasis is on the internal structure which are the fields and methods. Thus it is inherently a compile-time or static view which means that the definition speaks in terms of what it looks like in the following code:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
public class foo&lt;br /&gt;
{&lt;br /&gt;
 private int x;&lt;br /&gt;
 public static double y;&lt;br /&gt;
&lt;br /&gt;
 public int double (int x)&lt;br /&gt;
 {&lt;br /&gt;
   return (3*x);&lt;br /&gt;
 }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The implicit aspect of this view is that, an object is an entity in its own right and the definition is closed. Any object can be understood in isolation where the fields and methods are just enumerated. The advantage of this perspective is of that it is very concrete, closely related to the programming language level and therefore it is easy to understand. The disadvantage is that it does not help to structure the collaboration between objects, the dynamics, and this is typically where the hard challenges of design lie. Thus the perspective offers little guidance in the process of designing any realistic system.&amp;lt;ref&amp;gt;[https://docs.google.com/viewer?a=v&amp;amp;q=cache:Kl7VOfRFnNEJ:citeseerx.ist.psu.edu/viewdoc/download%3Fdoi%3D10.1.1.86.7500%26rep%3Drep1%26type%3Dpdf+%22language+centric%22+object+oriented+design&amp;amp;hl=en&amp;amp;gl=us&amp;amp;pid=bl&amp;amp;srcid=ADGEESj-HffIDcwsyYlGssvRYS3OAEloLCID6dCIHQeZ_WQ5W-fy9B3rC4uxbUKVBGzyPVn4uBra4ot0hCS71JC3NNy7nBVXRxzR4z06p3fVQKSIjn5t_fFr3dzrMICa5qNUVRnYHEAv&amp;amp;sig=AHIEtbRX7G0XgBl1mKxnPINiorZvNhW32Q Henrik Baerbak Christensen, &amp;lt;i&amp;gt;&amp;quot;Implications of Perspective in Teaching Objects First and Object Design&amp;quot;&amp;lt;/i&amp;gt;, Proceedings of the 10th annual &amp;lt;i&amp;gt;SIGCSE&amp;lt;/i&amp;gt; conference on Innovation and technology in computer science education, Department of Computer Science, University of Aarhus, 2005.]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Model-centric perspective===&lt;br /&gt;
In this perspective, the objects(classes, fields) and their relationships like inheritance, association, aggregation are designed by using some model. Here the program execution is a simulation of some part of the&lt;br /&gt;
world, and objects are perceived as the parts of the model. The perspective is often explained through analogies to other models like toy railways, traffic simulations, computer games, etc. This perspective stresses objects as entities in a larger context (they are parts of a model) as opposed to the self-contained language-centric definition. This approach works fine for real life systems such as an order-entry system, a library system, boat-rental and various other real world entity oriented systems. This naturally leads to a strong focus on what the relations are between the parts: association, generalization, composition. Dynamics is an inherent part of the concept simulation and the explicit guideline for designing object interaction is to imitate real world or model interactions.&lt;br /&gt;
Let us consider a real world example of designing a partial implementation of the board game-Backgammon to understand the objected oriented using a model-centric perspective. The physical parts of Backgammon identifiable are the checkers, points, board, dice, player, etc. The diagram below is a design of model parts (classes) and their relationships (relations).&lt;br /&gt;
&lt;br /&gt;
===Responsibility-centric perspective===&lt;br /&gt;
This perspective stresses on the behavior of software systems and the concepts used to do design include behavior, roles, responsibilities and protocol. Here, the primary focus is the dynamics of the program. Roles and responsibilities are the core concepts in this perspective and hence it has more coupling to behavior when compared to static elements like objects or model parts. There is a difference between behavior and responsibility, where behavior is the concrete actions taken by objects where as responsibility is to fulfill requests through any number of concrete behaviors. So, responsibility is more abstract than behavior.&lt;br /&gt;
One can look at responsibility-centric perspective as an extension of the model-centric perspective with a shift of focus (from a focus on model parts to a focus on the simulation or dynamical aspects). The Backgammon example can again be&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Object Oriented Design Concepts==&lt;br /&gt;
=== Behavior ===&lt;br /&gt;
&lt;br /&gt;
=== Responsibilities ===&lt;br /&gt;
&lt;br /&gt;
=== Roles ===&lt;br /&gt;
&lt;br /&gt;
=== Protocols ===&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
==Additional Reading==&lt;br /&gt;
*[http://books.google.com/books?id=VQaf_vOTDzMC&amp;amp;pg=PA244&amp;amp;lpg=PA244&amp;amp;dq=%22language+centric%22+%22model-centric%22+%22responsibility+centric%22+object+oriented+design&amp;amp;source=bl&amp;amp;ots=tY3C6nStiA&amp;amp;sig=bEO2VyjGTobxQ362Yaubi542ZTc&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ei=f3KFUJ2-D4Ho8QTC_IHQBA&amp;amp;ved=0CEMQ6AEwAg#v=onepage&amp;amp;q=%22language%20centric%22%20%22model-centric%22%20%22responsibility%20centric%22%20object%20oriented%20design&amp;amp;f=false Flexible,Reliable Software using Patterns and Agile Development]&lt;br /&gt;
*[http://books.google.com/books?id=YnGz2ghKF-gC&amp;amp;pg=PA60&amp;amp;lpg=PA60&amp;amp;dq=%22language-centric%22+object+oriented+design&amp;amp;source=bl&amp;amp;ots=ko8xV4SZJs&amp;amp;sig=yemCujDGu_BEySZ_k32Kc0KVbgM&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ei=K8WFUOykNYW89gTcx4GQAg&amp;amp;ved=0CFEQ6AEwBA#v=onepage&amp;amp;q=%22language-centric%22%20object%20oriented%20design&amp;amp;f=false Jibitesh Mishra, Ashok Mohanty, &amp;lt;i&amp;gt;&amp;quot;Software Engineering&amp;quot;&amp;lt;/i&amp;gt;]&lt;br /&gt;
*[http://web.engr.oregonstate.edu/~budd/Books/oopintro3e/info/ReadMe.html An Introduction to Object Oriented Programming]&lt;/div&gt;</summary>
		<author><name>Rchakar</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w15_rr&amp;diff=67911</id>
		<title>CSC/ECE 517 Fall 2012/ch2a 2w15 rr</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w15_rr&amp;diff=67911"/>
		<updated>2012-10-23T03:45:57Z</updated>

		<summary type="html">&lt;p&gt;Rchakar: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
Object-oriented design is a programming model that began in the late 60's as software programs became more complex. The idea behind the approach was to build software systems by modeling them based on the real-world objects that they were trying to represent. For example, banking systems would contain customer objects, account objects and so on. Today, object-oriented design has been widely adopted &amp;lt;ref&amp;gt; [http://www.objectmentor.com/omSolutions/oops_what.html Introduction to Object Oriented Design]&amp;lt;/ref&amp;gt;. When done properly, this approach leads to simple, robust, flexible and modular software. When something goes wrong, the results could be bad. Object oriented design can be seen from different perspectives. In the language-centric perspective, objects are containers of data and methods. The model-centric perspective views the objects as model elements reflecting the real world objects and Responsibility-centric perspective views objects as interacting elements each playing a role in object community. Each of these perspectives are outlined in the following sections.&lt;br /&gt;
&lt;br /&gt;
==Background==&lt;br /&gt;
The history of object oriented design has many branches, and many people have contributed to this domain. The 1960s and 1970s saw the emergence of object oriented programming languages, such as Simula and Smalltalk, with key contributors such as Kristen Nygaard and Alan Kay, the visionary computer scientist who founded Smalltalk.&amp;lt;ref&amp;gt;[http://www.informit.com/articles/article.aspx?p=360440&amp;amp;seqNum=8 History of Object Oriented Design]&amp;lt;/ref&amp;gt;&lt;br /&gt;
But object oriented design was informal through that period, and it was only form 1982 that it became popular.  Contributors in this domain include Grady Booch, Kent Beck, Peter Coad, Don Firesmith, Ivar Jacobson (a UML founder), Steve Mellor, Bertrand Meyer, Jim Rumbaugh (a UML founder) and Rebecca Wirfs-Brock among others. Each of these perspectives are outlined in the following sections.&lt;br /&gt;
&lt;br /&gt;
==Object Oriented Design Perspectives==&lt;br /&gt;
===Language-centric perspective===&lt;br /&gt;
The focus of the language-centric perspective is classes and objects as building blocks for developing software. The emphasis is on the internal structure which are the fields and methods. Thus it is inherently a compile-time or static view which means that the definition speaks in terms of what it looks like in the following code:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
public class foo&lt;br /&gt;
{&lt;br /&gt;
 private int x;&lt;br /&gt;
 public static double y;&lt;br /&gt;
&lt;br /&gt;
 public int double (int x)&lt;br /&gt;
 {&lt;br /&gt;
   return (3*x);&lt;br /&gt;
 }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The implicit aspect of this view is that, an object is an entity in its own right and the definition is closed. Any object can be understood in isolation where the fields and methods are just enumerated. The advantage of this perspective is of that it is very concrete, closely related to the programming language level and therefore it is easy to understand. The disadvantage is that it does not help to structure the collaboration between objects, the dynamics, and this is typically where the hard challenges of design lie. Thus the perspective offers little guidance in the process of designing any realistic system.&amp;lt;ref&amp;gt;[https://docs.google.com/viewer?a=v&amp;amp;q=cache:Kl7VOfRFnNEJ:citeseerx.ist.psu.edu/viewdoc/download%3Fdoi%3D10.1.1.86.7500%26rep%3Drep1%26type%3Dpdf+%22language+centric%22+object+oriented+design&amp;amp;hl=en&amp;amp;gl=us&amp;amp;pid=bl&amp;amp;srcid=ADGEESj-HffIDcwsyYlGssvRYS3OAEloLCID6dCIHQeZ_WQ5W-fy9B3rC4uxbUKVBGzyPVn4uBra4ot0hCS71JC3NNy7nBVXRxzR4z06p3fVQKSIjn5t_fFr3dzrMICa5qNUVRnYHEAv&amp;amp;sig=AHIEtbRX7G0XgBl1mKxnPINiorZvNhW32Q Henrik Baerbak Christensen, &amp;lt;i&amp;gt;&amp;quot;Implications of Perspective in Teaching Objects First and Object Design&amp;quot;&amp;lt;/i&amp;gt;, Proceedings of the 10th annual &amp;lt;i&amp;gt;SIGCSE&amp;lt;/i&amp;gt; conference on Innovation and technology in computer science education, Department of Computer Science, University of Aarhus, 2005.]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Model-centric perspective===&lt;br /&gt;
In this perspective, the objects(classes, fields) and their relationships like inheritance, association, aggregation are designed by using some model. Here the program execution is a simulation of some part of the&lt;br /&gt;
world, and objects are perceived as the parts of the model. The perspective is often explained through analogies to other models like toy railways, traffic simulations, computer games, etc. This perspective stresses objects as entities in a larger context (they are parts of a model) as opposed to the self-contained language-centric definition. This approach works fine for real life systems such as an order-entry system, a library system, boat-rental and various other real world entity oriented systems. This naturally leads to a strong focus on what the relations are between the parts: association, generalization, composition. Dynamics is an inherent part of the concept simulation and the explicit guideline for designing object interaction is to imitate real world or model interactions.&lt;br /&gt;
Let us consider a real world example of designing a partial implementation of the board game-Backgammon to understand the objected oriented using a model-centric perspective. The physical parts of Backgammon identifiable are the checkers, points, board, dice, player, etc. The diagram below is a design of model parts (classes) and their relationships (relations).&lt;br /&gt;
&lt;br /&gt;
===Responsibility-centric perspective===&lt;br /&gt;
This perspective stresses on the behavior of software systems and the concepts used to do design include behavior, roles, responsibilities and protocol. Here, the primary focus is the dynamics of the program. Roles and responsibilities are the core concepts in this perspective and hence it has more coupling to behavior when compared to static elements like objects or model parts. There is a difference between behavior and responsibility, where behavior is the concrete actions taken by objects where as responsibility is to fulfill requests through any number of concrete behaviors. So, responsibility is more abstract than behavior.&lt;br /&gt;
One can look at responsibility-centric perspective as an extension of the model-centric perspective with a shift of focus (from a focus on model parts to a focus on the simulation or dynamical aspects). The Backgammon example can again be&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Object Oriented Design Concepts==&lt;br /&gt;
===Language-centric perspective===&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
==Additional Reading==&lt;br /&gt;
*[http://books.google.com/books?id=VQaf_vOTDzMC&amp;amp;pg=PA244&amp;amp;lpg=PA244&amp;amp;dq=%22language+centric%22+%22model-centric%22+%22responsibility+centric%22+object+oriented+design&amp;amp;source=bl&amp;amp;ots=tY3C6nStiA&amp;amp;sig=bEO2VyjGTobxQ362Yaubi542ZTc&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ei=f3KFUJ2-D4Ho8QTC_IHQBA&amp;amp;ved=0CEMQ6AEwAg#v=onepage&amp;amp;q=%22language%20centric%22%20%22model-centric%22%20%22responsibility%20centric%22%20object%20oriented%20design&amp;amp;f=false Flexible,Reliable Software using Patterns and Agile Development]&lt;br /&gt;
*[http://books.google.com/books?id=YnGz2ghKF-gC&amp;amp;pg=PA60&amp;amp;lpg=PA60&amp;amp;dq=%22language-centric%22+object+oriented+design&amp;amp;source=bl&amp;amp;ots=ko8xV4SZJs&amp;amp;sig=yemCujDGu_BEySZ_k32Kc0KVbgM&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ei=K8WFUOykNYW89gTcx4GQAg&amp;amp;ved=0CFEQ6AEwBA#v=onepage&amp;amp;q=%22language-centric%22%20object%20oriented%20design&amp;amp;f=false Jibitesh Mishra, Ashok Mohanty, &amp;lt;i&amp;gt;&amp;quot;Software Engineering&amp;quot;&amp;lt;/i&amp;gt;]&lt;br /&gt;
*[http://web.engr.oregonstate.edu/~budd/Books/oopintro3e/info/ReadMe.html An Introduction to Object Oriented Programming]&lt;/div&gt;</summary>
		<author><name>Rchakar</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w15_rr&amp;diff=67825</id>
		<title>CSC/ECE 517 Fall 2012/ch2a 2w15 rr</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w15_rr&amp;diff=67825"/>
		<updated>2012-10-22T16:03:12Z</updated>

		<summary type="html">&lt;p&gt;Rchakar: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Roles and Responsibilities'''&lt;/div&gt;</summary>
		<author><name>Rchakar</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w15_rr&amp;diff=67824</id>
		<title>CSC/ECE 517 Fall 2012/ch2a 2w15 rr</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w15_rr&amp;diff=67824"/>
		<updated>2012-10-22T16:02:07Z</updated>

		<summary type="html">&lt;p&gt;Rchakar: Created page with &amp;quot;Roles and Responsibilities&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Roles and Responsibilities&lt;/div&gt;</summary>
		<author><name>Rchakar</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012&amp;diff=67822</id>
		<title>CSC/ECE 517 Fall 2012</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012&amp;diff=67822"/>
		<updated>2012-10-22T15:37:11Z</updated>

		<summary type="html">&lt;p&gt;Rchakar: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;*[[CSC/ECE 517 Fall 2012/ch1 n xx]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch1 1w1 rk]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch1 1w20 pp]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch1 1w5 su]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch1 1w6 pp]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch1 1w4 aj]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch1 1w7 am]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch1 1w8 aa]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch1 1w9 av]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch1 1w10 pk]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch1 1w11 ap]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch1a 1w12 mv]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch1 1w14 gv]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch1 1w17 ir]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch1 1w18 as]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch1 1w22 an]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch1 1w21 aa]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch1 1w21 wi]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch1 1w31 sa]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch1a 1w16 br]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch1a 1w23 as]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch1 1w24 nr]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch1 1w15 rt]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch1 1w3 pl]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch1 1w32 cm]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch2a 2w5 dp]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch1b 1w37 ss]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch1b 1w67 ks]]&lt;br /&gt;
&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch1 1w27 ms]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch1 1w29 sa]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch1 1w33 op]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch1 1w19 sa]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch1 1w34 vd]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch1 1w35 sa]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch1 1w30 rp]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch1b 1w58 am]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch1b 1w47 sk]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch1b 1w69 mv]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch1b 1w44 as]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch1b 1w45 is]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch1b 1w53 kc]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch1b 1w40 ar]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch1b 1w39 sn]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch1b 1w54 go]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch1b 1w56 ms]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch1b 1w64 nn]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch1b 1w66 as]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch1b 1w40 as]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch1b 1w42 js]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch1b 1w46 sm]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch1b 1w71 gs]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch1b 1w63 dv]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch1b 1w55 ms]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch1b 1w57 mp]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch1b 1w52 an]]&lt;br /&gt;
*[[CSC/ECE_517_Fall_2012/ch1b 1w38 nm]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch1b 1w60 ac]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch1b 1w62 rb]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch2a 2w29 st]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch2a 2w30 an]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch2a 2w17 pt]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch2a 2w31 up]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch2a 2w9 ms]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch2a 2w19 is]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch2a 2w5 dp]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch2a 2w16 dp]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch2a 2w8 vp]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch2a 2w18 as]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch2a 2w3 jm]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch2a 2w23 sr]]&lt;br /&gt;
*[[CSC/ECE_517_Fall_2012/ch2a_2w11_aa]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch2a 2w15 rr]]&lt;/div&gt;</summary>
		<author><name>Rchakar</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch1_1w1_rk&amp;diff=62952</id>
		<title>CSC/ECE 517 Fall 2012/ch1 1w1 rk</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch1_1w1_rk&amp;diff=62952"/>
		<updated>2012-09-08T01:28:29Z</updated>

		<summary type="html">&lt;p&gt;Rchakar: /* Git (Version control)http://en.wikipedia.org/wiki/Git_(software) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
A [http://en.wikipedia.org/wiki/Revision_control version control] system '''(VCS)''' is a process for managing software codes,files and directory structures and corresponding updates made to them during software development, web development etc. project or during subsequent project maintenances. Version control is also known as revision control, source control or [http://en.wikipedia.org/wiki/Software_configuration_management software configuration management] (SCM)[6].&lt;br /&gt;
&lt;br /&gt;
Any software development project is a dynamic and fast paced environment. In a typical setting, development for a project is performed simultaneously by many developers. Thus, incorporating all the changes made, either simultaneously or at different times, poses a new type of challenge. &lt;br /&gt;
&lt;br /&gt;
This wikibook chapter focuses mainly on the development history of different version control systems.&lt;br /&gt;
&lt;br /&gt;
==Why version control systems are needed?==&lt;br /&gt;
The major issues in a dynamic development environment can be described as:&lt;br /&gt;
* Obviously, '''merging''' of a lot of files. If we consider somebody to do merging manually, The sheer volume of communication required is overwhelming. This communication can be among the developers themselves in a small team or between the team leader in charge of merging and the rest of the group.&lt;br /&gt;
&lt;br /&gt;
* '''Accountability:''' if one of the developers breaks the code flow during development, It is tough to detect and naturally nobody steps forward to take the blame. A version control system can precisely indicate who caused the break in the code.&lt;br /&gt;
&lt;br /&gt;
* If a certain code implementation doesn't work as expected, '''Reverting''' to last satisfactory state may be required. &lt;br /&gt;
&lt;br /&gt;
* Development on stale code may result in '''Code loss'''. for example, two developers downloaded a certain file at 10AM. One of the developers modified foo_1() method and uploaded modified file at 10:30AM.The other developer modified foo_2() method and uploaded the same file at 10:45AM. Since the functions are in the same file, the second upload will overwrite the file uploaded by first developer at 10:30AM causing loss of his part of work.    &lt;br /&gt;
&lt;br /&gt;
* Even a lone coder might need to '''review''' why he or she made a certain change in code. Comments during code check-in can be a useful resource in such situation. &lt;br /&gt;
&lt;br /&gt;
* Version control provides a form of '''documentation''' which makes tracking easy. i.e.-'''tagging''' is a kind of snapshot of all files and documents at a particular stage of development, usually during a stable release. This allows the developers to work with the exact files that were included in that release for bug-fixing purpose. &lt;br /&gt;
&lt;br /&gt;
* '''Sandboxing / Branching:''' Version control makes it possible to perform temporary code changes in an isolated area, usually in branch folder, for testing purpose. If the outcome is satisfactory then the code can be merged with the existing code, otherwise it can be discarded without having any impact on the main code.&lt;br /&gt;
&lt;br /&gt;
* Now a days, software development teams are spread across different countries and work at different time zones. Use of a version control system for project aggregation becomes unavoidable.&lt;br /&gt;
 &lt;br /&gt;
==Evolution of version control systems==&lt;br /&gt;
&lt;br /&gt;
VCS' can be broadly categorized into three groups based on the repository model. The sequence below follows the evolution of version control systems as well: &lt;br /&gt;
&lt;br /&gt;
==='''Local repository model''' &amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Source_Code_Control_System&amp;lt;/ref&amp;gt;===&lt;br /&gt;
Local version control systems had one storage location of the files. It was called local because it didn't support networked commands or access like the other later softwares. So, all the developers had to use same computer system to access or modify files.  &lt;br /&gt;
&lt;br /&gt;
===='''Source Code Control System (SCCS)'''&amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Source_Code_Control_System&amp;lt;/ref&amp;gt;==== &lt;br /&gt;
It is one of the pioneer source code revision softwares.[5] SCCS was developed at Bell Labs in 1972 by Marc J. Rochkind. Although it was originally developed for OS/MVT, SCCS was included in [http://en.wikipedia.org/wiki/Source_Code_Control_System some UNIX distributions.] SCCS ruled as the dominant VCS until ''Revision Control System'' was released.&lt;br /&gt;
:SCCS was the dominant version control system for Unix until the release of the [http://en.wikipedia.org/wiki/Revision_Control_System Revision Control System (RCS)]. Today, SCCS is generally considered obsolete. However, its file format is still used internally by a few other revision control programs, including [http://en.wikipedia.org/wiki/BitKeeper BitKeeper] and [http://en.wikipedia.org/wiki/TeamWare TeamWare]. The latter is a frontend to SCCS. [http://en.wikipedia.org/wiki/Sablime Sablime] has been developed from a modified version of SCCS but uses a history file format that is incompatible with SCCS. The SCCS file format uses a storage technique called [http://en.wikipedia.org/wiki/Interleaved_deltas interleaved deltas] (or the weave). This storage technique is now considered by many [http://en.wikipedia.org/wiki/Revision_control revision control] system developers as foundational to advanced merging and versioning techniques, such as the &amp;quot;Precise [http://en.wikipedia.org/wiki/Codeville Codeville]&amp;quot; (&amp;quot;pcdv&amp;quot;) merge.&lt;br /&gt;
:'''What does a source code control system do?'''&lt;br /&gt;
:If you are creating or maintaining a text file---perhaps a document, or a script, or a program---a source code control system can do several things for you:&lt;br /&gt;
:*It can keep track of the changes made to the file: what was changed, when it was changed, and by whom.&lt;br /&gt;
:*It provides a version numbering scheme so you can tell which versions of a file are more recent.&lt;br /&gt;
:*It can retrieve previous versions of your file, so that you can retreat to an older version if you decide that the current version is a bad idea, or if you want to see some text that has since been changed or deleted.&lt;br /&gt;
:*If you accidentally delete the current file, you can get back the last version.&lt;br /&gt;
:*If several people are working with the same file, a source code control system can help you coordinate your work and keep track of who did what, and when.&lt;br /&gt;
&lt;br /&gt;
SCCS is also known for the &amp;lt;code&amp;gt;sccsid&amp;lt;/code&amp;gt; string, for example:&lt;br /&gt;
&lt;br /&gt;
 static char sccsid[] = &amp;quot;@(#)ls.c        8.1 (Berkeley) 6/11/93&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
This string contains the file name, date, and can also contain a comment. After compilation, this string can be found in binary and object files by looking for the pattern &amp;quot;@(#)&amp;quot; and can be used determine which source code files were used during compilation.&lt;br /&gt;
&lt;br /&gt;
===='''Control System(RCS)'''&amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Revision_Control_System Revision&amp;lt;/ref&amp;gt;==== &lt;br /&gt;
It automated storing, retrieval, logging, identification, and merging frequent revisions of texts. RCS was first released in 1982 by Walter F. Tichy as an alternative to SCCS. It quickly gained popularity and almost replaced SCCS.[9] &lt;br /&gt;
:RCS performed better by storing the most recent copy of file and then storing only reverse differences called &amp;quot;deltas&amp;quot;.One of the shortcomings of RCS was that only one person at a time could edit the file. RCS could manage only single files, not a whole project or directory.&lt;br /&gt;
:Ref.[3] is a comprehensive book on CSSC and RCS.&lt;br /&gt;
&lt;br /&gt;
==='''Client-server model'''===&lt;br /&gt;
The [http://en.wikipedia.org/wiki/Client%E2%80%93server_model client-server model] utilizes a single centralized repository for the version control which is accessible to the developers through network or internet. The below diagram [http://svnbook.red-bean.com/en/1.7/svn.basic.version-control-basics.html] provides a high level overview of the model.&lt;br /&gt;
[[Image:Client_Server_Model.png |center|]]&lt;br /&gt;
===='''Concurrent Versions System (CVS)'''&amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Concurrent_Versions_System&amp;lt;/ref&amp;gt;====&lt;br /&gt;
It was one of the early client-server model based scheme. Dick Grune started developing CVS from 1984-1985 to allow his students to collaborate in a project according to their schedule. CVS was publicly released at 1986.The main improvement for CVS over RCS was that CVS could manage the whole project while RCS could only work on a file at a time.At the beginning, CVS was script based and called RCS at background. Later it was developed into a full fledged program. A lot of the IDE's (Emacs, Eclipse/aptana,Netbeans, Komodo, PHPEdit etc.) support CVS. CVSNT is a cross platform port of CVS with some modification. CVS, which was the defacto standard for version controlling for a long time is almost replaced today by SVN. There were many disadvantages of CVS which hindered its stay in the industry further. Prominent ones were&lt;br /&gt;
#CVS check-in is not an [http://en.wikipedia.org/wiki/Atomic_commit atomic] operation. For example, given the files 1.c, 2.c, 3.c, 4.c and if someone runs '''cvs ci 1.c 3.c''' and someone else runs cvs update at the same time, the person running update might get only the change to `3.c' and not the change to `1.c'. So, if check-in process was disturbed, it could result in damage of existing project at repository.&lt;br /&gt;
#CVS only tracks modification on a file-by-file basis.&lt;br /&gt;
#CVS was designed with only text files in mind. No native support for other formats. Extensive modification are necessary at the client and the server to support other file types.&lt;br /&gt;
#Conflict resolution in CVS, if not absent, is definitely not good. Conflict markers used in CVS may go unnoticed and those file might find their way into the repository.&lt;br /&gt;
#Slow&lt;br /&gt;
&lt;br /&gt;
===='''Subversion (SVN)'''&amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Subversion_%28software%29&amp;lt;/ref&amp;gt;==== &lt;br /&gt;
As the complexity of projects increased, the shortcomings of CVS became more and more prominent. This led to the development of Subversion. CollabNet started developing svn as a successor of CVS with added [http://en.wikipedia.org/wiki/Subversion_(software)#Features functionality][2][7]. Different open source projects (i.e.-[http://en.wikipedia.org/wiki/Apache_Software_Foundation Apache Software  Foundation],[http://en.wikipedia.org/wiki/Ruby_(programming_language) Ruby],[http://en.wikipedia.org/wiki/SourceForge SourceForge],[http://en.wikipedia.org/wiki/Tigris.org Tigris.org], [http://en.wikipedia.org/wiki/PHP PHP],  [http://en.wikipedia.org/wiki/Python_(programming_language) Python] and [http://en.wikipedia.org/wiki/MediaWiki MediaWiki]) use Subversion. Subversion is an open source software due to it's Apache license[1].&lt;br /&gt;
[[Image:Subversion_project_visualization.svg.png|650px|thumb|center|Visualization of a very simple Subversion project. Source:wikimedia commons, Explanation of terms can be found at http://en.wikipedia.org/wiki/Apache_Subversion, &amp;quot;Branching and tagging&amp;quot; and at http://en.wikipedia.org/wiki/Revision_control, #&amp;quot;Common vocabulary&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Features:''' &amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Apache_Subversion#Features&amp;lt;/ref&amp;gt;&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Commit_(data_management) Commits] as true [http://en.wikipedia.org/wiki/Atomicity_(database_systems) atomic operations] (interrupted commit operations in CVS would cause repository inconsistency or corruption).&lt;br /&gt;
* Renamed/copied/moved/removed files retain full revision history.&lt;br /&gt;
* The system maintains [http://en.wikipedia.org/wiki/Software_versioning versioning] for directories, renames, and file [http://en.wikipedia.org/wiki/Metadata metadata] (but not for timestamps). Users can move and/or copy entire directory-trees very quickly, while retaining full revision history.&lt;br /&gt;
* Versioning of [http://en.wikipedia.org/wiki/Symbolic_link symbolic link]s.&lt;br /&gt;
* Native support for binary files, with space-efficient binary-diff storage.&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Apache_HTTP_Server Apache HTTP Server] as network server, [http://en.wikipedia.org/wiki/WebDAV WebDAV]/[http://en.wikipedia.org/wiki/WebDAV#Extensions_and_derivatives Delta-V] for protocol. There is also an independent server [http://en.wikipedia.org/wiki/Process_(computing) process] called svnserve that uses a custom protocol over [http://en.wikipedia.org/wiki/Internet_Protocol_Suite TCP/IP].&lt;br /&gt;
* Branching as a cheap operation, independent of file size (though Subversion itself does not distinguish between a branch and a directory)&lt;br /&gt;
* Natively [http://en.wikipedia.org/wiki/Client%E2%80%93server_model client–server], [http://en.wikipedia.org/wiki/Abstraction_layer layered] [http://en.wikipedia.org/wiki/Library_(computing) library] design.&lt;br /&gt;
* Client/server protocol sends diffs in both directions.&lt;br /&gt;
* Costs proportional to change size, not to data size.&lt;br /&gt;
* Parsable output, including XML log output.&lt;br /&gt;
* Open source licensed — Apache License in the projected 1.7 release; prior versions use a derivative of the Apache Software License, v1.1&lt;br /&gt;
* Internationalized program messages.&lt;br /&gt;
* File locking for unmergeable files (&amp;quot;reserved checkouts&amp;quot;).&lt;br /&gt;
* Path-based authorization.&lt;br /&gt;
* Language bindings for C#, PHP, Python, Perl, Ruby, and Java.&lt;br /&gt;
* Full MIME support — users can view or change the MIME type of each file, with the software knowing which MIME types can have their differences from previous versions shown.&lt;br /&gt;
* Merge tracking - Merges between branches will be tracked, this allows automatically merging between branches without telling Subversion what (doesn't) need to be merged.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=====Eclipse Subversive - Subversion (SVN) Team Provider&amp;lt;ref&amp;gt;http://www.eclipse.org/subversive/&amp;lt;/ref&amp;gt;=====&lt;br /&gt;
The Subversive project is aimed to integrate the Subversion (SVN) version control system with the Eclipse platform. Using the Subversive plug-in, you can work with projects stored in Subversion repositories directly from the Eclipse workbench in a way similar to work with other Eclipse version control providers, such as CVS and Git.&lt;br /&gt;
&lt;br /&gt;
'''Subversive Features''': Subversive plug-in provides access to Subversion repositories from the Eclipse workbench.&lt;br /&gt;
&lt;br /&gt;
*'''Full-Scale SVN Client'''&lt;br /&gt;
:Subversive is designed to be used as a full-featured SVN client, so you can update, commit, merge changes, work with SVN properties, view change history and perform other operations with SVN directly from the Eclipse environment.&lt;br /&gt;
   	&lt;br /&gt;
*'''Advanced SVN Features'''&lt;br /&gt;
:Subversive includes several features that extend functionality of the standard SVN client. In particular, Subversive can show the SVN repository content grouped by the logical structures of trunk, branch and tag and display changes on a visual revisions graph.&lt;br /&gt;
&lt;br /&gt;
*'''Seamless Integration with Eclipse'''&lt;br /&gt;
:Subversive is an official Eclipse project and an integral part of Eclipse Simultaneous releases. The project follows all Eclipse guidelines and requirements to deliver a quality SVN team provider plug-in similar to CVS and Git implementations.&lt;br /&gt;
   	&lt;br /&gt;
*'''Support of the Latest SVN Versions'''&lt;br /&gt;
:Subversive evolves together with the Subversion project to provide Eclipse users with the features that appeared in new versions of the SVN implementation. You can use the new SVN functionality in Eclipse by installing the Early Access version of Subversive.&lt;br /&gt;
&lt;br /&gt;
===='''Configuration Management Version Control (CMVC)'''&amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/IBM_Configuration_Management_Version_Control_(CMVC)&amp;lt;/ref&amp;gt;==== &lt;br /&gt;
It was developed by IBM Corporation in the mid-late 1990s and was derived in part from software purchased from HP and from IBM's internal-use-only system, IDSS. CMVC was superseded by IBM Rational ClearCase and ClearQuest. The system was used to manage the IBM OS/2 and IBM AIX source code repositories in the 1990s. It is still widely used within IBM by various teams. &lt;br /&gt;
&lt;br /&gt;
One of the drawbacks of CMVC is that, once a file is checked-out by a user, it remains locked to all the other users until the either the new version is checked-in or the lock is released explicitly by the owner (user) of the lock. Some proprietary client-server based version control softwares are:&lt;br /&gt;
::*[http://en.wikipedia.org/wiki/Autodesk_Vault Autodesk Vault] was specifically developed for Autodesk applications.&lt;br /&gt;
::*[http://en.wikipedia.org/wiki/IBM_Rational_ClearCase ClearCase] was developed by IBM Rational Software. It's a Source Code Control (SCC) compliant software.&lt;br /&gt;
::*[http://en.wikipedia.org/wiki/Visual_SourceSafe Visual SourceSafe] is developed by Microsoft targeting small development team.&lt;br /&gt;
::*[http://en.wikipedia.org/wiki/Visual_Studio_Team_System Visual Studio Team System] is also developed by Microsoft targeting larger groups.&lt;br /&gt;
&lt;br /&gt;
===Distributed model===&lt;br /&gt;
'''Distributed Version Control (DVCS)''', or '''Decentralized Version Control''' systems can have many central repositories.This is a peer to peer approach. The concept started developing at late 90's. In DVCS. Each developer works with his or her local repository and the changes are synchronized between repositories upon commit. DVCS are better suited for large teams with partially independent developers. i.e.- opensource software development.[8]&lt;br /&gt;
#[http://en.wikipedia.org/wiki/Monotone_%28software%29 Monotone] and [http://en.wikipedia.org/wiki/GNU_arch GNU arch]  were the first generation DVCS (release:2001-2003) followed by [http://en.wikipedia.org/wiki/Darcs Darcs] (stable release:2010).[http://en.wikipedia.org/wiki/Mercurial Mercurial] , [http://en.wikipedia.org/wiki/Git_%28software%29 Git] and [http://en.wikipedia.org/wiki/Bazaar_%28software%29 Bazaar] (2005-2007) are well adopted among developers.   &lt;br /&gt;
#[http://en.wikipedia.org/wiki/BitKeeper BitKeeper],[http://en.wikipedia.org/wiki/Code_Co-op Code Co-op], [http://en.wikipedia.org/wiki/Sun_WorkShop_TeamWare Sun WorkShop TeamWare] are some proprietary DVCS softwares.&lt;br /&gt;
&lt;br /&gt;
It should be noted that many distributed version control softwares support client-server model too.One of the benefits of DVCS is that a developer can save the source code as long as he wants even if the central repository (in client-server model) is discarded at the end of a project.&lt;br /&gt;
&lt;br /&gt;
[[Image:timeline.jpg|650px|thumb|center|A generalized timeline. Source:http://pg-server.csc.ncsu.edu/mediawiki/index.php/CSC/ECE_517_Fall_2009/wiki1a_5_History_of_version_control_by_av]]&lt;br /&gt;
&lt;br /&gt;
====Git (Version control)&amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Git_(software)&amp;lt;/ref&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
Git development began after many Linux kernel developers chose to give up access to BitKeeper, a proprietary SCM system that had previously been used to maintain the project. The copyright holder of BitKeeper, Larry McVoy, had withdrawn free use of the product after he claimed that Andrew Tridgell had reverse-engineered the BitKeeper protocols.&lt;br /&gt;
&lt;br /&gt;
[[Image:220px-Git_data_flow_simplified.png|650px|thumb|right|Some data flows and storage levels in the Git revision control system.]]&lt;br /&gt;
Git was created by [http://en.wikipedia.org/wiki/Linus_Torvalds Linus Torvalds] (the founder of Linux) because he really didn’t like Concurrent Versions System (CVS), which, at the time, was the most popular version control system. Torvalds wanted something to help keep versions of the kernel he was working on and he figured that he would have to build a system of his own.&lt;br /&gt;
&lt;br /&gt;
Git is an open source project, and since Torvalds’ initial development, there have been many other primary authors and contributors to the project.&lt;br /&gt;
&lt;br /&gt;
'''Advantages of Using Git'''&lt;br /&gt;
*Git is super easy to install:&lt;br /&gt;
*Git is easier to learn compared to other systems:&lt;br /&gt;
*Git is fast:&lt;br /&gt;
*Git is decentralized:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Disadvantages of Using Git'''&lt;br /&gt;
*'''Git has a learning curve:''' It’s one of the easier version control systems to use, any new thing you introduce to your workflow will need some learning time. Learning Git will be similar to learning a new software application such as Word or Excel.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The following Web sites provide free source code hosting for Git repositories:&amp;lt;ref&amp;gt;https://git.wiki.kernel.org/articles/g/i/t/GitHosting_2036.html&amp;lt;/ref&amp;gt;&lt;br /&gt;
* [http://en.wikipedia.org/wiki/BerliOS BerliOS]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Bitbucket Bitbucket]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/CodePlex CodePlex]&amp;lt;ref&amp;gt;{{cite news|last=Bright|first=Peter|title=Microsoft brings git support to its CodePlex hosting service|url=http://arstechnica.com/microsoft/news/2012/03/microsoft-brings-git-support-to-its-codeplex-hosting-service.ars|accessdate=23 March 2012|newspaper=Ars Technica|date=22 March 2012}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
* [http://en.wikipedia.org/wiki/GitHub GitHub]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Gitorious Gitorious]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/GNU_Savannah GNU Savannah]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Google_Code Google Code]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/JavaForge JavaForge] (with pull requests to control source code contribution)&lt;br /&gt;
* [http://en.wikipedia.org/wiki/SourceForge SourceForge]&lt;br /&gt;
&lt;br /&gt;
== File Sharing Models ==&lt;br /&gt;
Every system that implement version controlling have to address one fundamental problem: How will the files in the repository be safely shared across users but prevent them from accidentally stepping on each other's feet? It's all too easy for users to accidentally overwrite each other's changes in the repository.&lt;br /&gt;
&lt;br /&gt;
Consider the scenario with two users A and B. Both of them check out the same file (same version). User A after making his modification, suppose, commits the file first. A few moments later B completes his modification. B does not have any clue about A's check-in and he happily commits his code to the repository. Now B has accidentally overwritten the changes made by A leaving the system in an inconsistent state. This problem can be solved in two different ways:&amp;lt;br/&amp;gt;&lt;br /&gt;
* Lock-Modify-Unlock&lt;br /&gt;
* Copy-Modify-Merge &amp;lt;br/&amp;gt;&lt;br /&gt;
While CMVC follows the lock-modify-unlock solution, svn follows copy-modify-merge allowing users to modify the same piece of code concurrently. &amp;lt;br/&amp;gt;&lt;br /&gt;
The problem with the lock-modify-unlock model is that it's a bit restrictive and often becomes a roadblock for users:&lt;br /&gt;
&lt;br /&gt;
* Locking may cause unnecessary delay and is not desired when it comes to teams/projects which have a small cycle time between releases. For example: Suppose say, user A checks out a file (locks it) and some interrupt in his work causes him to switch to another task of higher priority. There is a possibility that he forgets completely about the file that he checked out. Now, if another user B wants to edit the same file, he cannot do so, without having the administrator unlock the file for him, his hands are tied!&lt;br /&gt;
&lt;br /&gt;
* Locking may cause unnecessary serialization: What if two different users A and B want to edit different non-intersecting portions of the same file? With proper merging solution in place, they could have done it easily without bothering about what the other user does with the file.&lt;br /&gt;
&lt;br /&gt;
* Locking may create a false sense of security: As with any model, lock-modify-unlock approach too allows two different users to work on separate files simultaneously. However the model does not define how dependencies between files are dealt with.&amp;lt;br/&amp;gt;For example: Suppose A locks and edits file f1, while B simultaneously locks and edits file f2. If there is a function call in f1 whose definition exists in f2 but the definition is removed or the function name is changed after editing f2, they don't work together anymore.&amp;lt;br/&amp;gt;Thus, locking files by itself does not provide security against such deliberate changes. Lot of manual synchronization is needed to avoid such situations which is only going to cause delay in the development of the project.&lt;br /&gt;
&lt;br /&gt;
==Use of version control in other areas ==&lt;br /&gt;
&lt;br /&gt;
Now a days, many document editing softwares have adopted version control. Wikis, GoogleDoc, Microsoft Office and OpenOffice.org suite are some example softwares that can save previous document editing history. &lt;br /&gt;
&lt;br /&gt;
==Other considerations==&lt;br /&gt;
&lt;br /&gt;
Most open source softwares have [http://linuxmafia.com/faq/Apps/vcs.html distributions for Linux] OS. In most open source cases, Linux and windows versions are released concurrently. &lt;br /&gt;
Many VCS' have plugins for common IDEs like Eclipse, Visual Studio, Oracle JDeveloper etc. NetBeans IDE and Xcode has integrated version control support.&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Additional References==&lt;br /&gt;
&lt;br /&gt;
1. [http://subversion.apache.org/news.html#news-20100217.  Apache Software Foundation Announcements, &amp;quot;Subversion becomes Apache Subversion&amp;quot;.(2010-02-17) Accessed:September 2010 ]&lt;br /&gt;
&lt;br /&gt;
2. [http://svnbook.red-bean.com/ Ben Collins-Sussman, Brian W. Fitzpatrick, C. Michael Pilato. &amp;quot;Version Control with Subversion&amp;quot;, an O'Reilly book available online. Accessed:September 2010] &lt;br /&gt;
&lt;br /&gt;
3. [http://shop.oreilly.com/product/9781565921177.do Don Bolinger, Tan Bronson: Applying RCS and SCCS. O'Reilly Media. ISBN:978-1-56592-117-7]  &lt;br /&gt;
&lt;br /&gt;
4. [http://www.ericsink.com/scm/source_control.html  Eric Sink: A collection of articles on source control and best practices, Accessed:September 2010]&lt;br /&gt;
&lt;br /&gt;
5. [http://basepath.com/aup/talks/SCCS-Slideshow.pdf  M. J. Rochkind: The Source Code Control System.] In IEEE Transactions on Software Engineering SE-1:4 (Dec. 1975), pages 364–370.&lt;br /&gt;
&lt;br /&gt;
6. [http://onlinelibrary.wiley.com/doi/10.1002/bltj.2039/pdf Martin, Robert L. (2002). &amp;quot;Software configuration management for the 21st century&amp;quot;. Bell Labs technical journal, Volume 2, Issue 1, page- 154.]&lt;br /&gt;
&lt;br /&gt;
7. Mike Mason; Pragmatic Version Control Using Subversion; Pragmatic Bookshelf; ISBN 0-9745140-6-3 (1st edition, paperback, 2005)&lt;br /&gt;
&lt;br /&gt;
8. [http://www.ibm.com/developerworks/aix/library/au-dist_ver_control/ Noah Gift,Adam Shand: Introduction to distributed version control systems (compare how to use Bazaar, Mercurial, and Git) (Apr 2009), IBM Technical Library, Accessed:September 2010 ] &lt;br /&gt;
&lt;br /&gt;
9.[http://onlinelibrary.wiley.com/doi/10.1002/spe.4380150703/abstract Walter F. Tichy; Rcs - a system for version control; In Software: Practice and Experience. Volume 15, Issue 7,(July 1985) pages 637–654 ]&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
[http://en.wikipedia.org/wiki/Revision_control Wikipedia: Revision control]&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/List_of_revision_control_software Wikipedia: List of revision control software]&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Comparison_of_revision_control_software Wikipedia: Detail comparison of revision control softwares]&lt;br /&gt;
&lt;br /&gt;
[http://www.nongnu.org/cvs/ CVS webpage]&lt;br /&gt;
&lt;br /&gt;
[http://www.cs.vu.nl/~dick/  Dick Grune's website on CVS history]&lt;br /&gt;
&lt;br /&gt;
[http://groups.google.com/group/mod.sources/msg/2ebab72ac0744fb8?dmode=source The original usenet post on CVS] archived at google groups.&lt;br /&gt;
&lt;br /&gt;
[http://linuxmafia.com/faq/Apps/vcs.html Linux availability of various version control softwares]&lt;/div&gt;</summary>
		<author><name>Rchakar</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch1_1w1_rk&amp;diff=62951</id>
		<title>CSC/ECE 517 Fall 2012/ch1 1w1 rk</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch1_1w1_rk&amp;diff=62951"/>
		<updated>2012-09-08T01:28:15Z</updated>

		<summary type="html">&lt;p&gt;Rchakar: /* Git (Version control)http://en.wikipedia.org/wiki/Git_(software) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
A [http://en.wikipedia.org/wiki/Revision_control version control] system '''(VCS)''' is a process for managing software codes,files and directory structures and corresponding updates made to them during software development, web development etc. project or during subsequent project maintenances. Version control is also known as revision control, source control or [http://en.wikipedia.org/wiki/Software_configuration_management software configuration management] (SCM)[6].&lt;br /&gt;
&lt;br /&gt;
Any software development project is a dynamic and fast paced environment. In a typical setting, development for a project is performed simultaneously by many developers. Thus, incorporating all the changes made, either simultaneously or at different times, poses a new type of challenge. &lt;br /&gt;
&lt;br /&gt;
This wikibook chapter focuses mainly on the development history of different version control systems.&lt;br /&gt;
&lt;br /&gt;
==Why version control systems are needed?==&lt;br /&gt;
The major issues in a dynamic development environment can be described as:&lt;br /&gt;
* Obviously, '''merging''' of a lot of files. If we consider somebody to do merging manually, The sheer volume of communication required is overwhelming. This communication can be among the developers themselves in a small team or between the team leader in charge of merging and the rest of the group.&lt;br /&gt;
&lt;br /&gt;
* '''Accountability:''' if one of the developers breaks the code flow during development, It is tough to detect and naturally nobody steps forward to take the blame. A version control system can precisely indicate who caused the break in the code.&lt;br /&gt;
&lt;br /&gt;
* If a certain code implementation doesn't work as expected, '''Reverting''' to last satisfactory state may be required. &lt;br /&gt;
&lt;br /&gt;
* Development on stale code may result in '''Code loss'''. for example, two developers downloaded a certain file at 10AM. One of the developers modified foo_1() method and uploaded modified file at 10:30AM.The other developer modified foo_2() method and uploaded the same file at 10:45AM. Since the functions are in the same file, the second upload will overwrite the file uploaded by first developer at 10:30AM causing loss of his part of work.    &lt;br /&gt;
&lt;br /&gt;
* Even a lone coder might need to '''review''' why he or she made a certain change in code. Comments during code check-in can be a useful resource in such situation. &lt;br /&gt;
&lt;br /&gt;
* Version control provides a form of '''documentation''' which makes tracking easy. i.e.-'''tagging''' is a kind of snapshot of all files and documents at a particular stage of development, usually during a stable release. This allows the developers to work with the exact files that were included in that release for bug-fixing purpose. &lt;br /&gt;
&lt;br /&gt;
* '''Sandboxing / Branching:''' Version control makes it possible to perform temporary code changes in an isolated area, usually in branch folder, for testing purpose. If the outcome is satisfactory then the code can be merged with the existing code, otherwise it can be discarded without having any impact on the main code.&lt;br /&gt;
&lt;br /&gt;
* Now a days, software development teams are spread across different countries and work at different time zones. Use of a version control system for project aggregation becomes unavoidable.&lt;br /&gt;
 &lt;br /&gt;
==Evolution of version control systems==&lt;br /&gt;
&lt;br /&gt;
VCS' can be broadly categorized into three groups based on the repository model. The sequence below follows the evolution of version control systems as well: &lt;br /&gt;
&lt;br /&gt;
==='''Local repository model''' &amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Source_Code_Control_System&amp;lt;/ref&amp;gt;===&lt;br /&gt;
Local version control systems had one storage location of the files. It was called local because it didn't support networked commands or access like the other later softwares. So, all the developers had to use same computer system to access or modify files.  &lt;br /&gt;
&lt;br /&gt;
===='''Source Code Control System (SCCS)'''&amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Source_Code_Control_System&amp;lt;/ref&amp;gt;==== &lt;br /&gt;
It is one of the pioneer source code revision softwares.[5] SCCS was developed at Bell Labs in 1972 by Marc J. Rochkind. Although it was originally developed for OS/MVT, SCCS was included in [http://en.wikipedia.org/wiki/Source_Code_Control_System some UNIX distributions.] SCCS ruled as the dominant VCS until ''Revision Control System'' was released.&lt;br /&gt;
:SCCS was the dominant version control system for Unix until the release of the [http://en.wikipedia.org/wiki/Revision_Control_System Revision Control System (RCS)]. Today, SCCS is generally considered obsolete. However, its file format is still used internally by a few other revision control programs, including [http://en.wikipedia.org/wiki/BitKeeper BitKeeper] and [http://en.wikipedia.org/wiki/TeamWare TeamWare]. The latter is a frontend to SCCS. [http://en.wikipedia.org/wiki/Sablime Sablime] has been developed from a modified version of SCCS but uses a history file format that is incompatible with SCCS. The SCCS file format uses a storage technique called [http://en.wikipedia.org/wiki/Interleaved_deltas interleaved deltas] (or the weave). This storage technique is now considered by many [http://en.wikipedia.org/wiki/Revision_control revision control] system developers as foundational to advanced merging and versioning techniques, such as the &amp;quot;Precise [http://en.wikipedia.org/wiki/Codeville Codeville]&amp;quot; (&amp;quot;pcdv&amp;quot;) merge.&lt;br /&gt;
:'''What does a source code control system do?'''&lt;br /&gt;
:If you are creating or maintaining a text file---perhaps a document, or a script, or a program---a source code control system can do several things for you:&lt;br /&gt;
:*It can keep track of the changes made to the file: what was changed, when it was changed, and by whom.&lt;br /&gt;
:*It provides a version numbering scheme so you can tell which versions of a file are more recent.&lt;br /&gt;
:*It can retrieve previous versions of your file, so that you can retreat to an older version if you decide that the current version is a bad idea, or if you want to see some text that has since been changed or deleted.&lt;br /&gt;
:*If you accidentally delete the current file, you can get back the last version.&lt;br /&gt;
:*If several people are working with the same file, a source code control system can help you coordinate your work and keep track of who did what, and when.&lt;br /&gt;
&lt;br /&gt;
SCCS is also known for the &amp;lt;code&amp;gt;sccsid&amp;lt;/code&amp;gt; string, for example:&lt;br /&gt;
&lt;br /&gt;
 static char sccsid[] = &amp;quot;@(#)ls.c        8.1 (Berkeley) 6/11/93&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
This string contains the file name, date, and can also contain a comment. After compilation, this string can be found in binary and object files by looking for the pattern &amp;quot;@(#)&amp;quot; and can be used determine which source code files were used during compilation.&lt;br /&gt;
&lt;br /&gt;
===='''Control System(RCS)'''&amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Revision_Control_System Revision&amp;lt;/ref&amp;gt;==== &lt;br /&gt;
It automated storing, retrieval, logging, identification, and merging frequent revisions of texts. RCS was first released in 1982 by Walter F. Tichy as an alternative to SCCS. It quickly gained popularity and almost replaced SCCS.[9] &lt;br /&gt;
:RCS performed better by storing the most recent copy of file and then storing only reverse differences called &amp;quot;deltas&amp;quot;.One of the shortcomings of RCS was that only one person at a time could edit the file. RCS could manage only single files, not a whole project or directory.&lt;br /&gt;
:Ref.[3] is a comprehensive book on CSSC and RCS.&lt;br /&gt;
&lt;br /&gt;
==='''Client-server model'''===&lt;br /&gt;
The [http://en.wikipedia.org/wiki/Client%E2%80%93server_model client-server model] utilizes a single centralized repository for the version control which is accessible to the developers through network or internet. The below diagram [http://svnbook.red-bean.com/en/1.7/svn.basic.version-control-basics.html] provides a high level overview of the model.&lt;br /&gt;
[[Image:Client_Server_Model.png |center|]]&lt;br /&gt;
===='''Concurrent Versions System (CVS)'''&amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Concurrent_Versions_System&amp;lt;/ref&amp;gt;====&lt;br /&gt;
It was one of the early client-server model based scheme. Dick Grune started developing CVS from 1984-1985 to allow his students to collaborate in a project according to their schedule. CVS was publicly released at 1986.The main improvement for CVS over RCS was that CVS could manage the whole project while RCS could only work on a file at a time.At the beginning, CVS was script based and called RCS at background. Later it was developed into a full fledged program. A lot of the IDE's (Emacs, Eclipse/aptana,Netbeans, Komodo, PHPEdit etc.) support CVS. CVSNT is a cross platform port of CVS with some modification. CVS, which was the defacto standard for version controlling for a long time is almost replaced today by SVN. There were many disadvantages of CVS which hindered its stay in the industry further. Prominent ones were&lt;br /&gt;
#CVS check-in is not an [http://en.wikipedia.org/wiki/Atomic_commit atomic] operation. For example, given the files 1.c, 2.c, 3.c, 4.c and if someone runs '''cvs ci 1.c 3.c''' and someone else runs cvs update at the same time, the person running update might get only the change to `3.c' and not the change to `1.c'. So, if check-in process was disturbed, it could result in damage of existing project at repository.&lt;br /&gt;
#CVS only tracks modification on a file-by-file basis.&lt;br /&gt;
#CVS was designed with only text files in mind. No native support for other formats. Extensive modification are necessary at the client and the server to support other file types.&lt;br /&gt;
#Conflict resolution in CVS, if not absent, is definitely not good. Conflict markers used in CVS may go unnoticed and those file might find their way into the repository.&lt;br /&gt;
#Slow&lt;br /&gt;
&lt;br /&gt;
===='''Subversion (SVN)'''&amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Subversion_%28software%29&amp;lt;/ref&amp;gt;==== &lt;br /&gt;
As the complexity of projects increased, the shortcomings of CVS became more and more prominent. This led to the development of Subversion. CollabNet started developing svn as a successor of CVS with added [http://en.wikipedia.org/wiki/Subversion_(software)#Features functionality][2][7]. Different open source projects (i.e.-[http://en.wikipedia.org/wiki/Apache_Software_Foundation Apache Software  Foundation],[http://en.wikipedia.org/wiki/Ruby_(programming_language) Ruby],[http://en.wikipedia.org/wiki/SourceForge SourceForge],[http://en.wikipedia.org/wiki/Tigris.org Tigris.org], [http://en.wikipedia.org/wiki/PHP PHP],  [http://en.wikipedia.org/wiki/Python_(programming_language) Python] and [http://en.wikipedia.org/wiki/MediaWiki MediaWiki]) use Subversion. Subversion is an open source software due to it's Apache license[1].&lt;br /&gt;
[[Image:Subversion_project_visualization.svg.png|650px|thumb|center|Visualization of a very simple Subversion project. Source:wikimedia commons, Explanation of terms can be found at http://en.wikipedia.org/wiki/Apache_Subversion, &amp;quot;Branching and tagging&amp;quot; and at http://en.wikipedia.org/wiki/Revision_control, #&amp;quot;Common vocabulary&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Features:''' &amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Apache_Subversion#Features&amp;lt;/ref&amp;gt;&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Commit_(data_management) Commits] as true [http://en.wikipedia.org/wiki/Atomicity_(database_systems) atomic operations] (interrupted commit operations in CVS would cause repository inconsistency or corruption).&lt;br /&gt;
* Renamed/copied/moved/removed files retain full revision history.&lt;br /&gt;
* The system maintains [http://en.wikipedia.org/wiki/Software_versioning versioning] for directories, renames, and file [http://en.wikipedia.org/wiki/Metadata metadata] (but not for timestamps). Users can move and/or copy entire directory-trees very quickly, while retaining full revision history.&lt;br /&gt;
* Versioning of [http://en.wikipedia.org/wiki/Symbolic_link symbolic link]s.&lt;br /&gt;
* Native support for binary files, with space-efficient binary-diff storage.&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Apache_HTTP_Server Apache HTTP Server] as network server, [http://en.wikipedia.org/wiki/WebDAV WebDAV]/[http://en.wikipedia.org/wiki/WebDAV#Extensions_and_derivatives Delta-V] for protocol. There is also an independent server [http://en.wikipedia.org/wiki/Process_(computing) process] called svnserve that uses a custom protocol over [http://en.wikipedia.org/wiki/Internet_Protocol_Suite TCP/IP].&lt;br /&gt;
* Branching as a cheap operation, independent of file size (though Subversion itself does not distinguish between a branch and a directory)&lt;br /&gt;
* Natively [http://en.wikipedia.org/wiki/Client%E2%80%93server_model client–server], [http://en.wikipedia.org/wiki/Abstraction_layer layered] [http://en.wikipedia.org/wiki/Library_(computing) library] design.&lt;br /&gt;
* Client/server protocol sends diffs in both directions.&lt;br /&gt;
* Costs proportional to change size, not to data size.&lt;br /&gt;
* Parsable output, including XML log output.&lt;br /&gt;
* Open source licensed — Apache License in the projected 1.7 release; prior versions use a derivative of the Apache Software License, v1.1&lt;br /&gt;
* Internationalized program messages.&lt;br /&gt;
* File locking for unmergeable files (&amp;quot;reserved checkouts&amp;quot;).&lt;br /&gt;
* Path-based authorization.&lt;br /&gt;
* Language bindings for C#, PHP, Python, Perl, Ruby, and Java.&lt;br /&gt;
* Full MIME support — users can view or change the MIME type of each file, with the software knowing which MIME types can have their differences from previous versions shown.&lt;br /&gt;
* Merge tracking - Merges between branches will be tracked, this allows automatically merging between branches without telling Subversion what (doesn't) need to be merged.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=====Eclipse Subversive - Subversion (SVN) Team Provider&amp;lt;ref&amp;gt;http://www.eclipse.org/subversive/&amp;lt;/ref&amp;gt;=====&lt;br /&gt;
The Subversive project is aimed to integrate the Subversion (SVN) version control system with the Eclipse platform. Using the Subversive plug-in, you can work with projects stored in Subversion repositories directly from the Eclipse workbench in a way similar to work with other Eclipse version control providers, such as CVS and Git.&lt;br /&gt;
&lt;br /&gt;
'''Subversive Features''': Subversive plug-in provides access to Subversion repositories from the Eclipse workbench.&lt;br /&gt;
&lt;br /&gt;
*'''Full-Scale SVN Client'''&lt;br /&gt;
:Subversive is designed to be used as a full-featured SVN client, so you can update, commit, merge changes, work with SVN properties, view change history and perform other operations with SVN directly from the Eclipse environment.&lt;br /&gt;
   	&lt;br /&gt;
*'''Advanced SVN Features'''&lt;br /&gt;
:Subversive includes several features that extend functionality of the standard SVN client. In particular, Subversive can show the SVN repository content grouped by the logical structures of trunk, branch and tag and display changes on a visual revisions graph.&lt;br /&gt;
&lt;br /&gt;
*'''Seamless Integration with Eclipse'''&lt;br /&gt;
:Subversive is an official Eclipse project and an integral part of Eclipse Simultaneous releases. The project follows all Eclipse guidelines and requirements to deliver a quality SVN team provider plug-in similar to CVS and Git implementations.&lt;br /&gt;
   	&lt;br /&gt;
*'''Support of the Latest SVN Versions'''&lt;br /&gt;
:Subversive evolves together with the Subversion project to provide Eclipse users with the features that appeared in new versions of the SVN implementation. You can use the new SVN functionality in Eclipse by installing the Early Access version of Subversive.&lt;br /&gt;
&lt;br /&gt;
===='''Configuration Management Version Control (CMVC)'''&amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/IBM_Configuration_Management_Version_Control_(CMVC)&amp;lt;/ref&amp;gt;==== &lt;br /&gt;
It was developed by IBM Corporation in the mid-late 1990s and was derived in part from software purchased from HP and from IBM's internal-use-only system, IDSS. CMVC was superseded by IBM Rational ClearCase and ClearQuest. The system was used to manage the IBM OS/2 and IBM AIX source code repositories in the 1990s. It is still widely used within IBM by various teams. &lt;br /&gt;
&lt;br /&gt;
One of the drawbacks of CMVC is that, once a file is checked-out by a user, it remains locked to all the other users until the either the new version is checked-in or the lock is released explicitly by the owner (user) of the lock. Some proprietary client-server based version control softwares are:&lt;br /&gt;
::*[http://en.wikipedia.org/wiki/Autodesk_Vault Autodesk Vault] was specifically developed for Autodesk applications.&lt;br /&gt;
::*[http://en.wikipedia.org/wiki/IBM_Rational_ClearCase ClearCase] was developed by IBM Rational Software. It's a Source Code Control (SCC) compliant software.&lt;br /&gt;
::*[http://en.wikipedia.org/wiki/Visual_SourceSafe Visual SourceSafe] is developed by Microsoft targeting small development team.&lt;br /&gt;
::*[http://en.wikipedia.org/wiki/Visual_Studio_Team_System Visual Studio Team System] is also developed by Microsoft targeting larger groups.&lt;br /&gt;
&lt;br /&gt;
===Distributed model===&lt;br /&gt;
'''Distributed Version Control (DVCS)''', or '''Decentralized Version Control''' systems can have many central repositories.This is a peer to peer approach. The concept started developing at late 90's. In DVCS. Each developer works with his or her local repository and the changes are synchronized between repositories upon commit. DVCS are better suited for large teams with partially independent developers. i.e.- opensource software development.[8]&lt;br /&gt;
#[http://en.wikipedia.org/wiki/Monotone_%28software%29 Monotone] and [http://en.wikipedia.org/wiki/GNU_arch GNU arch]  were the first generation DVCS (release:2001-2003) followed by [http://en.wikipedia.org/wiki/Darcs Darcs] (stable release:2010).[http://en.wikipedia.org/wiki/Mercurial Mercurial] , [http://en.wikipedia.org/wiki/Git_%28software%29 Git] and [http://en.wikipedia.org/wiki/Bazaar_%28software%29 Bazaar] (2005-2007) are well adopted among developers.   &lt;br /&gt;
#[http://en.wikipedia.org/wiki/BitKeeper BitKeeper],[http://en.wikipedia.org/wiki/Code_Co-op Code Co-op], [http://en.wikipedia.org/wiki/Sun_WorkShop_TeamWare Sun WorkShop TeamWare] are some proprietary DVCS softwares.&lt;br /&gt;
&lt;br /&gt;
It should be noted that many distributed version control softwares support client-server model too.One of the benefits of DVCS is that a developer can save the source code as long as he wants even if the central repository (in client-server model) is discarded at the end of a project.&lt;br /&gt;
&lt;br /&gt;
[[Image:timeline.jpg|650px|thumb|center|A generalized timeline. Source:http://pg-server.csc.ncsu.edu/mediawiki/index.php/CSC/ECE_517_Fall_2009/wiki1a_5_History_of_version_control_by_av]]&lt;br /&gt;
&lt;br /&gt;
====Git (Version control)&amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Git_(software)&amp;lt;/ref&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
Git development began after many Linux kernel developers chose to give up access to BitKeeper, a proprietary SCM system that had previously been used to maintain the project. The copyright holder of BitKeeper, Larry McVoy, had withdrawn free use of the product after he claimed that Andrew Tridgell had reverse-engineered the BitKeeper protocols.&lt;br /&gt;
&lt;br /&gt;
[[Image:220px-Git_data_flow_simplified.png|600px|thumb|right|Some data flows and storage levels in the Git revision control system.]]&lt;br /&gt;
Git was created by [http://en.wikipedia.org/wiki/Linus_Torvalds Linus Torvalds] (the founder of Linux) because he really didn’t like Concurrent Versions System (CVS), which, at the time, was the most popular version control system. Torvalds wanted something to help keep versions of the kernel he was working on and he figured that he would have to build a system of his own.&lt;br /&gt;
&lt;br /&gt;
Git is an open source project, and since Torvalds’ initial development, there have been many other primary authors and contributors to the project.&lt;br /&gt;
&lt;br /&gt;
'''Advantages of Using Git'''&lt;br /&gt;
*Git is super easy to install:&lt;br /&gt;
*Git is easier to learn compared to other systems:&lt;br /&gt;
*Git is fast:&lt;br /&gt;
*Git is decentralized:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Disadvantages of Using Git'''&lt;br /&gt;
*'''Git has a learning curve:''' It’s one of the easier version control systems to use, any new thing you introduce to your workflow will need some learning time. Learning Git will be similar to learning a new software application such as Word or Excel.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The following Web sites provide free source code hosting for Git repositories:&amp;lt;ref&amp;gt;https://git.wiki.kernel.org/articles/g/i/t/GitHosting_2036.html&amp;lt;/ref&amp;gt;&lt;br /&gt;
* [http://en.wikipedia.org/wiki/BerliOS BerliOS]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Bitbucket Bitbucket]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/CodePlex CodePlex]&amp;lt;ref&amp;gt;{{cite news|last=Bright|first=Peter|title=Microsoft brings git support to its CodePlex hosting service|url=http://arstechnica.com/microsoft/news/2012/03/microsoft-brings-git-support-to-its-codeplex-hosting-service.ars|accessdate=23 March 2012|newspaper=Ars Technica|date=22 March 2012}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
* [http://en.wikipedia.org/wiki/GitHub GitHub]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Gitorious Gitorious]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/GNU_Savannah GNU Savannah]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Google_Code Google Code]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/JavaForge JavaForge] (with pull requests to control source code contribution)&lt;br /&gt;
* [http://en.wikipedia.org/wiki/SourceForge SourceForge]&lt;br /&gt;
&lt;br /&gt;
== File Sharing Models ==&lt;br /&gt;
Every system that implement version controlling have to address one fundamental problem: How will the files in the repository be safely shared across users but prevent them from accidentally stepping on each other's feet? It's all too easy for users to accidentally overwrite each other's changes in the repository.&lt;br /&gt;
&lt;br /&gt;
Consider the scenario with two users A and B. Both of them check out the same file (same version). User A after making his modification, suppose, commits the file first. A few moments later B completes his modification. B does not have any clue about A's check-in and he happily commits his code to the repository. Now B has accidentally overwritten the changes made by A leaving the system in an inconsistent state. This problem can be solved in two different ways:&amp;lt;br/&amp;gt;&lt;br /&gt;
* Lock-Modify-Unlock&lt;br /&gt;
* Copy-Modify-Merge &amp;lt;br/&amp;gt;&lt;br /&gt;
While CMVC follows the lock-modify-unlock solution, svn follows copy-modify-merge allowing users to modify the same piece of code concurrently. &amp;lt;br/&amp;gt;&lt;br /&gt;
The problem with the lock-modify-unlock model is that it's a bit restrictive and often becomes a roadblock for users:&lt;br /&gt;
&lt;br /&gt;
* Locking may cause unnecessary delay and is not desired when it comes to teams/projects which have a small cycle time between releases. For example: Suppose say, user A checks out a file (locks it) and some interrupt in his work causes him to switch to another task of higher priority. There is a possibility that he forgets completely about the file that he checked out. Now, if another user B wants to edit the same file, he cannot do so, without having the administrator unlock the file for him, his hands are tied!&lt;br /&gt;
&lt;br /&gt;
* Locking may cause unnecessary serialization: What if two different users A and B want to edit different non-intersecting portions of the same file? With proper merging solution in place, they could have done it easily without bothering about what the other user does with the file.&lt;br /&gt;
&lt;br /&gt;
* Locking may create a false sense of security: As with any model, lock-modify-unlock approach too allows two different users to work on separate files simultaneously. However the model does not define how dependencies between files are dealt with.&amp;lt;br/&amp;gt;For example: Suppose A locks and edits file f1, while B simultaneously locks and edits file f2. If there is a function call in f1 whose definition exists in f2 but the definition is removed or the function name is changed after editing f2, they don't work together anymore.&amp;lt;br/&amp;gt;Thus, locking files by itself does not provide security against such deliberate changes. Lot of manual synchronization is needed to avoid such situations which is only going to cause delay in the development of the project.&lt;br /&gt;
&lt;br /&gt;
==Use of version control in other areas ==&lt;br /&gt;
&lt;br /&gt;
Now a days, many document editing softwares have adopted version control. Wikis, GoogleDoc, Microsoft Office and OpenOffice.org suite are some example softwares that can save previous document editing history. &lt;br /&gt;
&lt;br /&gt;
==Other considerations==&lt;br /&gt;
&lt;br /&gt;
Most open source softwares have [http://linuxmafia.com/faq/Apps/vcs.html distributions for Linux] OS. In most open source cases, Linux and windows versions are released concurrently. &lt;br /&gt;
Many VCS' have plugins for common IDEs like Eclipse, Visual Studio, Oracle JDeveloper etc. NetBeans IDE and Xcode has integrated version control support.&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Additional References==&lt;br /&gt;
&lt;br /&gt;
1. [http://subversion.apache.org/news.html#news-20100217.  Apache Software Foundation Announcements, &amp;quot;Subversion becomes Apache Subversion&amp;quot;.(2010-02-17) Accessed:September 2010 ]&lt;br /&gt;
&lt;br /&gt;
2. [http://svnbook.red-bean.com/ Ben Collins-Sussman, Brian W. Fitzpatrick, C. Michael Pilato. &amp;quot;Version Control with Subversion&amp;quot;, an O'Reilly book available online. Accessed:September 2010] &lt;br /&gt;
&lt;br /&gt;
3. [http://shop.oreilly.com/product/9781565921177.do Don Bolinger, Tan Bronson: Applying RCS and SCCS. O'Reilly Media. ISBN:978-1-56592-117-7]  &lt;br /&gt;
&lt;br /&gt;
4. [http://www.ericsink.com/scm/source_control.html  Eric Sink: A collection of articles on source control and best practices, Accessed:September 2010]&lt;br /&gt;
&lt;br /&gt;
5. [http://basepath.com/aup/talks/SCCS-Slideshow.pdf  M. J. Rochkind: The Source Code Control System.] In IEEE Transactions on Software Engineering SE-1:4 (Dec. 1975), pages 364–370.&lt;br /&gt;
&lt;br /&gt;
6. [http://onlinelibrary.wiley.com/doi/10.1002/bltj.2039/pdf Martin, Robert L. (2002). &amp;quot;Software configuration management for the 21st century&amp;quot;. Bell Labs technical journal, Volume 2, Issue 1, page- 154.]&lt;br /&gt;
&lt;br /&gt;
7. Mike Mason; Pragmatic Version Control Using Subversion; Pragmatic Bookshelf; ISBN 0-9745140-6-3 (1st edition, paperback, 2005)&lt;br /&gt;
&lt;br /&gt;
8. [http://www.ibm.com/developerworks/aix/library/au-dist_ver_control/ Noah Gift,Adam Shand: Introduction to distributed version control systems (compare how to use Bazaar, Mercurial, and Git) (Apr 2009), IBM Technical Library, Accessed:September 2010 ] &lt;br /&gt;
&lt;br /&gt;
9.[http://onlinelibrary.wiley.com/doi/10.1002/spe.4380150703/abstract Walter F. Tichy; Rcs - a system for version control; In Software: Practice and Experience. Volume 15, Issue 7,(July 1985) pages 637–654 ]&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
[http://en.wikipedia.org/wiki/Revision_control Wikipedia: Revision control]&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/List_of_revision_control_software Wikipedia: List of revision control software]&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Comparison_of_revision_control_software Wikipedia: Detail comparison of revision control softwares]&lt;br /&gt;
&lt;br /&gt;
[http://www.nongnu.org/cvs/ CVS webpage]&lt;br /&gt;
&lt;br /&gt;
[http://www.cs.vu.nl/~dick/  Dick Grune's website on CVS history]&lt;br /&gt;
&lt;br /&gt;
[http://groups.google.com/group/mod.sources/msg/2ebab72ac0744fb8?dmode=source The original usenet post on CVS] archived at google groups.&lt;br /&gt;
&lt;br /&gt;
[http://linuxmafia.com/faq/Apps/vcs.html Linux availability of various version control softwares]&lt;/div&gt;</summary>
		<author><name>Rchakar</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch1_1w1_rk&amp;diff=62950</id>
		<title>CSC/ECE 517 Fall 2012/ch1 1w1 rk</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch1_1w1_rk&amp;diff=62950"/>
		<updated>2012-09-08T01:27:52Z</updated>

		<summary type="html">&lt;p&gt;Rchakar: /* Git (Version control)http://en.wikipedia.org/wiki/Git_(software) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
A [http://en.wikipedia.org/wiki/Revision_control version control] system '''(VCS)''' is a process for managing software codes,files and directory structures and corresponding updates made to them during software development, web development etc. project or during subsequent project maintenances. Version control is also known as revision control, source control or [http://en.wikipedia.org/wiki/Software_configuration_management software configuration management] (SCM)[6].&lt;br /&gt;
&lt;br /&gt;
Any software development project is a dynamic and fast paced environment. In a typical setting, development for a project is performed simultaneously by many developers. Thus, incorporating all the changes made, either simultaneously or at different times, poses a new type of challenge. &lt;br /&gt;
&lt;br /&gt;
This wikibook chapter focuses mainly on the development history of different version control systems.&lt;br /&gt;
&lt;br /&gt;
==Why version control systems are needed?==&lt;br /&gt;
The major issues in a dynamic development environment can be described as:&lt;br /&gt;
* Obviously, '''merging''' of a lot of files. If we consider somebody to do merging manually, The sheer volume of communication required is overwhelming. This communication can be among the developers themselves in a small team or between the team leader in charge of merging and the rest of the group.&lt;br /&gt;
&lt;br /&gt;
* '''Accountability:''' if one of the developers breaks the code flow during development, It is tough to detect and naturally nobody steps forward to take the blame. A version control system can precisely indicate who caused the break in the code.&lt;br /&gt;
&lt;br /&gt;
* If a certain code implementation doesn't work as expected, '''Reverting''' to last satisfactory state may be required. &lt;br /&gt;
&lt;br /&gt;
* Development on stale code may result in '''Code loss'''. for example, two developers downloaded a certain file at 10AM. One of the developers modified foo_1() method and uploaded modified file at 10:30AM.The other developer modified foo_2() method and uploaded the same file at 10:45AM. Since the functions are in the same file, the second upload will overwrite the file uploaded by first developer at 10:30AM causing loss of his part of work.    &lt;br /&gt;
&lt;br /&gt;
* Even a lone coder might need to '''review''' why he or she made a certain change in code. Comments during code check-in can be a useful resource in such situation. &lt;br /&gt;
&lt;br /&gt;
* Version control provides a form of '''documentation''' which makes tracking easy. i.e.-'''tagging''' is a kind of snapshot of all files and documents at a particular stage of development, usually during a stable release. This allows the developers to work with the exact files that were included in that release for bug-fixing purpose. &lt;br /&gt;
&lt;br /&gt;
* '''Sandboxing / Branching:''' Version control makes it possible to perform temporary code changes in an isolated area, usually in branch folder, for testing purpose. If the outcome is satisfactory then the code can be merged with the existing code, otherwise it can be discarded without having any impact on the main code.&lt;br /&gt;
&lt;br /&gt;
* Now a days, software development teams are spread across different countries and work at different time zones. Use of a version control system for project aggregation becomes unavoidable.&lt;br /&gt;
 &lt;br /&gt;
==Evolution of version control systems==&lt;br /&gt;
&lt;br /&gt;
VCS' can be broadly categorized into three groups based on the repository model. The sequence below follows the evolution of version control systems as well: &lt;br /&gt;
&lt;br /&gt;
==='''Local repository model''' &amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Source_Code_Control_System&amp;lt;/ref&amp;gt;===&lt;br /&gt;
Local version control systems had one storage location of the files. It was called local because it didn't support networked commands or access like the other later softwares. So, all the developers had to use same computer system to access or modify files.  &lt;br /&gt;
&lt;br /&gt;
===='''Source Code Control System (SCCS)'''&amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Source_Code_Control_System&amp;lt;/ref&amp;gt;==== &lt;br /&gt;
It is one of the pioneer source code revision softwares.[5] SCCS was developed at Bell Labs in 1972 by Marc J. Rochkind. Although it was originally developed for OS/MVT, SCCS was included in [http://en.wikipedia.org/wiki/Source_Code_Control_System some UNIX distributions.] SCCS ruled as the dominant VCS until ''Revision Control System'' was released.&lt;br /&gt;
:SCCS was the dominant version control system for Unix until the release of the [http://en.wikipedia.org/wiki/Revision_Control_System Revision Control System (RCS)]. Today, SCCS is generally considered obsolete. However, its file format is still used internally by a few other revision control programs, including [http://en.wikipedia.org/wiki/BitKeeper BitKeeper] and [http://en.wikipedia.org/wiki/TeamWare TeamWare]. The latter is a frontend to SCCS. [http://en.wikipedia.org/wiki/Sablime Sablime] has been developed from a modified version of SCCS but uses a history file format that is incompatible with SCCS. The SCCS file format uses a storage technique called [http://en.wikipedia.org/wiki/Interleaved_deltas interleaved deltas] (or the weave). This storage technique is now considered by many [http://en.wikipedia.org/wiki/Revision_control revision control] system developers as foundational to advanced merging and versioning techniques, such as the &amp;quot;Precise [http://en.wikipedia.org/wiki/Codeville Codeville]&amp;quot; (&amp;quot;pcdv&amp;quot;) merge.&lt;br /&gt;
:'''What does a source code control system do?'''&lt;br /&gt;
:If you are creating or maintaining a text file---perhaps a document, or a script, or a program---a source code control system can do several things for you:&lt;br /&gt;
:*It can keep track of the changes made to the file: what was changed, when it was changed, and by whom.&lt;br /&gt;
:*It provides a version numbering scheme so you can tell which versions of a file are more recent.&lt;br /&gt;
:*It can retrieve previous versions of your file, so that you can retreat to an older version if you decide that the current version is a bad idea, or if you want to see some text that has since been changed or deleted.&lt;br /&gt;
:*If you accidentally delete the current file, you can get back the last version.&lt;br /&gt;
:*If several people are working with the same file, a source code control system can help you coordinate your work and keep track of who did what, and when.&lt;br /&gt;
&lt;br /&gt;
SCCS is also known for the &amp;lt;code&amp;gt;sccsid&amp;lt;/code&amp;gt; string, for example:&lt;br /&gt;
&lt;br /&gt;
 static char sccsid[] = &amp;quot;@(#)ls.c        8.1 (Berkeley) 6/11/93&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
This string contains the file name, date, and can also contain a comment. After compilation, this string can be found in binary and object files by looking for the pattern &amp;quot;@(#)&amp;quot; and can be used determine which source code files were used during compilation.&lt;br /&gt;
&lt;br /&gt;
===='''Control System(RCS)'''&amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Revision_Control_System Revision&amp;lt;/ref&amp;gt;==== &lt;br /&gt;
It automated storing, retrieval, logging, identification, and merging frequent revisions of texts. RCS was first released in 1982 by Walter F. Tichy as an alternative to SCCS. It quickly gained popularity and almost replaced SCCS.[9] &lt;br /&gt;
:RCS performed better by storing the most recent copy of file and then storing only reverse differences called &amp;quot;deltas&amp;quot;.One of the shortcomings of RCS was that only one person at a time could edit the file. RCS could manage only single files, not a whole project or directory.&lt;br /&gt;
:Ref.[3] is a comprehensive book on CSSC and RCS.&lt;br /&gt;
&lt;br /&gt;
==='''Client-server model'''===&lt;br /&gt;
The [http://en.wikipedia.org/wiki/Client%E2%80%93server_model client-server model] utilizes a single centralized repository for the version control which is accessible to the developers through network or internet. The below diagram [http://svnbook.red-bean.com/en/1.7/svn.basic.version-control-basics.html] provides a high level overview of the model.&lt;br /&gt;
[[Image:Client_Server_Model.png |center|]]&lt;br /&gt;
===='''Concurrent Versions System (CVS)'''&amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Concurrent_Versions_System&amp;lt;/ref&amp;gt;====&lt;br /&gt;
It was one of the early client-server model based scheme. Dick Grune started developing CVS from 1984-1985 to allow his students to collaborate in a project according to their schedule. CVS was publicly released at 1986.The main improvement for CVS over RCS was that CVS could manage the whole project while RCS could only work on a file at a time.At the beginning, CVS was script based and called RCS at background. Later it was developed into a full fledged program. A lot of the IDE's (Emacs, Eclipse/aptana,Netbeans, Komodo, PHPEdit etc.) support CVS. CVSNT is a cross platform port of CVS with some modification. CVS, which was the defacto standard for version controlling for a long time is almost replaced today by SVN. There were many disadvantages of CVS which hindered its stay in the industry further. Prominent ones were&lt;br /&gt;
#CVS check-in is not an [http://en.wikipedia.org/wiki/Atomic_commit atomic] operation. For example, given the files 1.c, 2.c, 3.c, 4.c and if someone runs '''cvs ci 1.c 3.c''' and someone else runs cvs update at the same time, the person running update might get only the change to `3.c' and not the change to `1.c'. So, if check-in process was disturbed, it could result in damage of existing project at repository.&lt;br /&gt;
#CVS only tracks modification on a file-by-file basis.&lt;br /&gt;
#CVS was designed with only text files in mind. No native support for other formats. Extensive modification are necessary at the client and the server to support other file types.&lt;br /&gt;
#Conflict resolution in CVS, if not absent, is definitely not good. Conflict markers used in CVS may go unnoticed and those file might find their way into the repository.&lt;br /&gt;
#Slow&lt;br /&gt;
&lt;br /&gt;
===='''Subversion (SVN)'''&amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Subversion_%28software%29&amp;lt;/ref&amp;gt;==== &lt;br /&gt;
As the complexity of projects increased, the shortcomings of CVS became more and more prominent. This led to the development of Subversion. CollabNet started developing svn as a successor of CVS with added [http://en.wikipedia.org/wiki/Subversion_(software)#Features functionality][2][7]. Different open source projects (i.e.-[http://en.wikipedia.org/wiki/Apache_Software_Foundation Apache Software  Foundation],[http://en.wikipedia.org/wiki/Ruby_(programming_language) Ruby],[http://en.wikipedia.org/wiki/SourceForge SourceForge],[http://en.wikipedia.org/wiki/Tigris.org Tigris.org], [http://en.wikipedia.org/wiki/PHP PHP],  [http://en.wikipedia.org/wiki/Python_(programming_language) Python] and [http://en.wikipedia.org/wiki/MediaWiki MediaWiki]) use Subversion. Subversion is an open source software due to it's Apache license[1].&lt;br /&gt;
[[Image:Subversion_project_visualization.svg.png|650px|thumb|center|Visualization of a very simple Subversion project. Source:wikimedia commons, Explanation of terms can be found at http://en.wikipedia.org/wiki/Apache_Subversion, &amp;quot;Branching and tagging&amp;quot; and at http://en.wikipedia.org/wiki/Revision_control, #&amp;quot;Common vocabulary&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Features:''' &amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Apache_Subversion#Features&amp;lt;/ref&amp;gt;&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Commit_(data_management) Commits] as true [http://en.wikipedia.org/wiki/Atomicity_(database_systems) atomic operations] (interrupted commit operations in CVS would cause repository inconsistency or corruption).&lt;br /&gt;
* Renamed/copied/moved/removed files retain full revision history.&lt;br /&gt;
* The system maintains [http://en.wikipedia.org/wiki/Software_versioning versioning] for directories, renames, and file [http://en.wikipedia.org/wiki/Metadata metadata] (but not for timestamps). Users can move and/or copy entire directory-trees very quickly, while retaining full revision history.&lt;br /&gt;
* Versioning of [http://en.wikipedia.org/wiki/Symbolic_link symbolic link]s.&lt;br /&gt;
* Native support for binary files, with space-efficient binary-diff storage.&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Apache_HTTP_Server Apache HTTP Server] as network server, [http://en.wikipedia.org/wiki/WebDAV WebDAV]/[http://en.wikipedia.org/wiki/WebDAV#Extensions_and_derivatives Delta-V] for protocol. There is also an independent server [http://en.wikipedia.org/wiki/Process_(computing) process] called svnserve that uses a custom protocol over [http://en.wikipedia.org/wiki/Internet_Protocol_Suite TCP/IP].&lt;br /&gt;
* Branching as a cheap operation, independent of file size (though Subversion itself does not distinguish between a branch and a directory)&lt;br /&gt;
* Natively [http://en.wikipedia.org/wiki/Client%E2%80%93server_model client–server], [http://en.wikipedia.org/wiki/Abstraction_layer layered] [http://en.wikipedia.org/wiki/Library_(computing) library] design.&lt;br /&gt;
* Client/server protocol sends diffs in both directions.&lt;br /&gt;
* Costs proportional to change size, not to data size.&lt;br /&gt;
* Parsable output, including XML log output.&lt;br /&gt;
* Open source licensed — Apache License in the projected 1.7 release; prior versions use a derivative of the Apache Software License, v1.1&lt;br /&gt;
* Internationalized program messages.&lt;br /&gt;
* File locking for unmergeable files (&amp;quot;reserved checkouts&amp;quot;).&lt;br /&gt;
* Path-based authorization.&lt;br /&gt;
* Language bindings for C#, PHP, Python, Perl, Ruby, and Java.&lt;br /&gt;
* Full MIME support — users can view or change the MIME type of each file, with the software knowing which MIME types can have their differences from previous versions shown.&lt;br /&gt;
* Merge tracking - Merges between branches will be tracked, this allows automatically merging between branches without telling Subversion what (doesn't) need to be merged.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=====Eclipse Subversive - Subversion (SVN) Team Provider&amp;lt;ref&amp;gt;http://www.eclipse.org/subversive/&amp;lt;/ref&amp;gt;=====&lt;br /&gt;
The Subversive project is aimed to integrate the Subversion (SVN) version control system with the Eclipse platform. Using the Subversive plug-in, you can work with projects stored in Subversion repositories directly from the Eclipse workbench in a way similar to work with other Eclipse version control providers, such as CVS and Git.&lt;br /&gt;
&lt;br /&gt;
'''Subversive Features''': Subversive plug-in provides access to Subversion repositories from the Eclipse workbench.&lt;br /&gt;
&lt;br /&gt;
*'''Full-Scale SVN Client'''&lt;br /&gt;
:Subversive is designed to be used as a full-featured SVN client, so you can update, commit, merge changes, work with SVN properties, view change history and perform other operations with SVN directly from the Eclipse environment.&lt;br /&gt;
   	&lt;br /&gt;
*'''Advanced SVN Features'''&lt;br /&gt;
:Subversive includes several features that extend functionality of the standard SVN client. In particular, Subversive can show the SVN repository content grouped by the logical structures of trunk, branch and tag and display changes on a visual revisions graph.&lt;br /&gt;
&lt;br /&gt;
*'''Seamless Integration with Eclipse'''&lt;br /&gt;
:Subversive is an official Eclipse project and an integral part of Eclipse Simultaneous releases. The project follows all Eclipse guidelines and requirements to deliver a quality SVN team provider plug-in similar to CVS and Git implementations.&lt;br /&gt;
   	&lt;br /&gt;
*'''Support of the Latest SVN Versions'''&lt;br /&gt;
:Subversive evolves together with the Subversion project to provide Eclipse users with the features that appeared in new versions of the SVN implementation. You can use the new SVN functionality in Eclipse by installing the Early Access version of Subversive.&lt;br /&gt;
&lt;br /&gt;
===='''Configuration Management Version Control (CMVC)'''&amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/IBM_Configuration_Management_Version_Control_(CMVC)&amp;lt;/ref&amp;gt;==== &lt;br /&gt;
It was developed by IBM Corporation in the mid-late 1990s and was derived in part from software purchased from HP and from IBM's internal-use-only system, IDSS. CMVC was superseded by IBM Rational ClearCase and ClearQuest. The system was used to manage the IBM OS/2 and IBM AIX source code repositories in the 1990s. It is still widely used within IBM by various teams. &lt;br /&gt;
&lt;br /&gt;
One of the drawbacks of CMVC is that, once a file is checked-out by a user, it remains locked to all the other users until the either the new version is checked-in or the lock is released explicitly by the owner (user) of the lock. Some proprietary client-server based version control softwares are:&lt;br /&gt;
::*[http://en.wikipedia.org/wiki/Autodesk_Vault Autodesk Vault] was specifically developed for Autodesk applications.&lt;br /&gt;
::*[http://en.wikipedia.org/wiki/IBM_Rational_ClearCase ClearCase] was developed by IBM Rational Software. It's a Source Code Control (SCC) compliant software.&lt;br /&gt;
::*[http://en.wikipedia.org/wiki/Visual_SourceSafe Visual SourceSafe] is developed by Microsoft targeting small development team.&lt;br /&gt;
::*[http://en.wikipedia.org/wiki/Visual_Studio_Team_System Visual Studio Team System] is also developed by Microsoft targeting larger groups.&lt;br /&gt;
&lt;br /&gt;
===Distributed model===&lt;br /&gt;
'''Distributed Version Control (DVCS)''', or '''Decentralized Version Control''' systems can have many central repositories.This is a peer to peer approach. The concept started developing at late 90's. In DVCS. Each developer works with his or her local repository and the changes are synchronized between repositories upon commit. DVCS are better suited for large teams with partially independent developers. i.e.- opensource software development.[8]&lt;br /&gt;
#[http://en.wikipedia.org/wiki/Monotone_%28software%29 Monotone] and [http://en.wikipedia.org/wiki/GNU_arch GNU arch]  were the first generation DVCS (release:2001-2003) followed by [http://en.wikipedia.org/wiki/Darcs Darcs] (stable release:2010).[http://en.wikipedia.org/wiki/Mercurial Mercurial] , [http://en.wikipedia.org/wiki/Git_%28software%29 Git] and [http://en.wikipedia.org/wiki/Bazaar_%28software%29 Bazaar] (2005-2007) are well adopted among developers.   &lt;br /&gt;
#[http://en.wikipedia.org/wiki/BitKeeper BitKeeper],[http://en.wikipedia.org/wiki/Code_Co-op Code Co-op], [http://en.wikipedia.org/wiki/Sun_WorkShop_TeamWare Sun WorkShop TeamWare] are some proprietary DVCS softwares.&lt;br /&gt;
&lt;br /&gt;
It should be noted that many distributed version control softwares support client-server model too.One of the benefits of DVCS is that a developer can save the source code as long as he wants even if the central repository (in client-server model) is discarded at the end of a project.&lt;br /&gt;
&lt;br /&gt;
[[Image:timeline.jpg|650px|thumb|center|A generalized timeline. Source:http://pg-server.csc.ncsu.edu/mediawiki/index.php/CSC/ECE_517_Fall_2009/wiki1a_5_History_of_version_control_by_av]]&lt;br /&gt;
&lt;br /&gt;
====Git (Version control)&amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Git_(software)&amp;lt;/ref&amp;gt;====&lt;br /&gt;
[[Image:220px-Git_data_flow_simplified.png|600px|thumb|right|Some data flows and storage levels in the Git revision control system.]]&lt;br /&gt;
Git development began after many Linux kernel developers chose to give up access to BitKeeper, a proprietary SCM system that had previously been used to maintain the project. The copyright holder of BitKeeper, Larry McVoy, had withdrawn free use of the product after he claimed that Andrew Tridgell had reverse-engineered the BitKeeper protocols.&lt;br /&gt;
&lt;br /&gt;
Git was created by [http://en.wikipedia.org/wiki/Linus_Torvalds Linus Torvalds] (the founder of Linux) because he really didn’t like Concurrent Versions System (CVS), which, at the time, was the most popular version control system. Torvalds wanted something to help keep versions of the kernel he was working on and he figured that he would have to build a system of his own.&lt;br /&gt;
&lt;br /&gt;
Git is an open source project, and since Torvalds’ initial development, there have been many other primary authors and contributors to the project.&lt;br /&gt;
&lt;br /&gt;
'''Advantages of Using Git'''&lt;br /&gt;
*Git is super easy to install:&lt;br /&gt;
*Git is easier to learn compared to other systems:&lt;br /&gt;
*Git is fast:&lt;br /&gt;
*Git is decentralized:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Disadvantages of Using Git'''&lt;br /&gt;
*'''Git has a learning curve:''' It’s one of the easier version control systems to use, any new thing you introduce to your workflow will need some learning time. Learning Git will be similar to learning a new software application such as Word or Excel.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The following Web sites provide free source code hosting for Git repositories:&amp;lt;ref&amp;gt;https://git.wiki.kernel.org/articles/g/i/t/GitHosting_2036.html&amp;lt;/ref&amp;gt;&lt;br /&gt;
* [http://en.wikipedia.org/wiki/BerliOS BerliOS]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Bitbucket Bitbucket]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/CodePlex CodePlex]&amp;lt;ref&amp;gt;{{cite news|last=Bright|first=Peter|title=Microsoft brings git support to its CodePlex hosting service|url=http://arstechnica.com/microsoft/news/2012/03/microsoft-brings-git-support-to-its-codeplex-hosting-service.ars|accessdate=23 March 2012|newspaper=Ars Technica|date=22 March 2012}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
* [http://en.wikipedia.org/wiki/GitHub GitHub]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Gitorious Gitorious]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/GNU_Savannah GNU Savannah]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Google_Code Google Code]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/JavaForge JavaForge] (with pull requests to control source code contribution)&lt;br /&gt;
* [http://en.wikipedia.org/wiki/SourceForge SourceForge]&lt;br /&gt;
&lt;br /&gt;
== File Sharing Models ==&lt;br /&gt;
Every system that implement version controlling have to address one fundamental problem: How will the files in the repository be safely shared across users but prevent them from accidentally stepping on each other's feet? It's all too easy for users to accidentally overwrite each other's changes in the repository.&lt;br /&gt;
&lt;br /&gt;
Consider the scenario with two users A and B. Both of them check out the same file (same version). User A after making his modification, suppose, commits the file first. A few moments later B completes his modification. B does not have any clue about A's check-in and he happily commits his code to the repository. Now B has accidentally overwritten the changes made by A leaving the system in an inconsistent state. This problem can be solved in two different ways:&amp;lt;br/&amp;gt;&lt;br /&gt;
* Lock-Modify-Unlock&lt;br /&gt;
* Copy-Modify-Merge &amp;lt;br/&amp;gt;&lt;br /&gt;
While CMVC follows the lock-modify-unlock solution, svn follows copy-modify-merge allowing users to modify the same piece of code concurrently. &amp;lt;br/&amp;gt;&lt;br /&gt;
The problem with the lock-modify-unlock model is that it's a bit restrictive and often becomes a roadblock for users:&lt;br /&gt;
&lt;br /&gt;
* Locking may cause unnecessary delay and is not desired when it comes to teams/projects which have a small cycle time between releases. For example: Suppose say, user A checks out a file (locks it) and some interrupt in his work causes him to switch to another task of higher priority. There is a possibility that he forgets completely about the file that he checked out. Now, if another user B wants to edit the same file, he cannot do so, without having the administrator unlock the file for him, his hands are tied!&lt;br /&gt;
&lt;br /&gt;
* Locking may cause unnecessary serialization: What if two different users A and B want to edit different non-intersecting portions of the same file? With proper merging solution in place, they could have done it easily without bothering about what the other user does with the file.&lt;br /&gt;
&lt;br /&gt;
* Locking may create a false sense of security: As with any model, lock-modify-unlock approach too allows two different users to work on separate files simultaneously. However the model does not define how dependencies between files are dealt with.&amp;lt;br/&amp;gt;For example: Suppose A locks and edits file f1, while B simultaneously locks and edits file f2. If there is a function call in f1 whose definition exists in f2 but the definition is removed or the function name is changed after editing f2, they don't work together anymore.&amp;lt;br/&amp;gt;Thus, locking files by itself does not provide security against such deliberate changes. Lot of manual synchronization is needed to avoid such situations which is only going to cause delay in the development of the project.&lt;br /&gt;
&lt;br /&gt;
==Use of version control in other areas ==&lt;br /&gt;
&lt;br /&gt;
Now a days, many document editing softwares have adopted version control. Wikis, GoogleDoc, Microsoft Office and OpenOffice.org suite are some example softwares that can save previous document editing history. &lt;br /&gt;
&lt;br /&gt;
==Other considerations==&lt;br /&gt;
&lt;br /&gt;
Most open source softwares have [http://linuxmafia.com/faq/Apps/vcs.html distributions for Linux] OS. In most open source cases, Linux and windows versions are released concurrently. &lt;br /&gt;
Many VCS' have plugins for common IDEs like Eclipse, Visual Studio, Oracle JDeveloper etc. NetBeans IDE and Xcode has integrated version control support.&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Additional References==&lt;br /&gt;
&lt;br /&gt;
1. [http://subversion.apache.org/news.html#news-20100217.  Apache Software Foundation Announcements, &amp;quot;Subversion becomes Apache Subversion&amp;quot;.(2010-02-17) Accessed:September 2010 ]&lt;br /&gt;
&lt;br /&gt;
2. [http://svnbook.red-bean.com/ Ben Collins-Sussman, Brian W. Fitzpatrick, C. Michael Pilato. &amp;quot;Version Control with Subversion&amp;quot;, an O'Reilly book available online. Accessed:September 2010] &lt;br /&gt;
&lt;br /&gt;
3. [http://shop.oreilly.com/product/9781565921177.do Don Bolinger, Tan Bronson: Applying RCS and SCCS. O'Reilly Media. ISBN:978-1-56592-117-7]  &lt;br /&gt;
&lt;br /&gt;
4. [http://www.ericsink.com/scm/source_control.html  Eric Sink: A collection of articles on source control and best practices, Accessed:September 2010]&lt;br /&gt;
&lt;br /&gt;
5. [http://basepath.com/aup/talks/SCCS-Slideshow.pdf  M. J. Rochkind: The Source Code Control System.] In IEEE Transactions on Software Engineering SE-1:4 (Dec. 1975), pages 364–370.&lt;br /&gt;
&lt;br /&gt;
6. [http://onlinelibrary.wiley.com/doi/10.1002/bltj.2039/pdf Martin, Robert L. (2002). &amp;quot;Software configuration management for the 21st century&amp;quot;. Bell Labs technical journal, Volume 2, Issue 1, page- 154.]&lt;br /&gt;
&lt;br /&gt;
7. Mike Mason; Pragmatic Version Control Using Subversion; Pragmatic Bookshelf; ISBN 0-9745140-6-3 (1st edition, paperback, 2005)&lt;br /&gt;
&lt;br /&gt;
8. [http://www.ibm.com/developerworks/aix/library/au-dist_ver_control/ Noah Gift,Adam Shand: Introduction to distributed version control systems (compare how to use Bazaar, Mercurial, and Git) (Apr 2009), IBM Technical Library, Accessed:September 2010 ] &lt;br /&gt;
&lt;br /&gt;
9.[http://onlinelibrary.wiley.com/doi/10.1002/spe.4380150703/abstract Walter F. Tichy; Rcs - a system for version control; In Software: Practice and Experience. Volume 15, Issue 7,(July 1985) pages 637–654 ]&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
[http://en.wikipedia.org/wiki/Revision_control Wikipedia: Revision control]&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/List_of_revision_control_software Wikipedia: List of revision control software]&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Comparison_of_revision_control_software Wikipedia: Detail comparison of revision control softwares]&lt;br /&gt;
&lt;br /&gt;
[http://www.nongnu.org/cvs/ CVS webpage]&lt;br /&gt;
&lt;br /&gt;
[http://www.cs.vu.nl/~dick/  Dick Grune's website on CVS history]&lt;br /&gt;
&lt;br /&gt;
[http://groups.google.com/group/mod.sources/msg/2ebab72ac0744fb8?dmode=source The original usenet post on CVS] archived at google groups.&lt;br /&gt;
&lt;br /&gt;
[http://linuxmafia.com/faq/Apps/vcs.html Linux availability of various version control softwares]&lt;/div&gt;</summary>
		<author><name>Rchakar</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch1_1w1_rk&amp;diff=62949</id>
		<title>CSC/ECE 517 Fall 2012/ch1 1w1 rk</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch1_1w1_rk&amp;diff=62949"/>
		<updated>2012-09-08T01:25:08Z</updated>

		<summary type="html">&lt;p&gt;Rchakar: /* Git (Version control)http://en.wikipedia.org/wiki/Git_(software) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
A [http://en.wikipedia.org/wiki/Revision_control version control] system '''(VCS)''' is a process for managing software codes,files and directory structures and corresponding updates made to them during software development, web development etc. project or during subsequent project maintenances. Version control is also known as revision control, source control or [http://en.wikipedia.org/wiki/Software_configuration_management software configuration management] (SCM)[6].&lt;br /&gt;
&lt;br /&gt;
Any software development project is a dynamic and fast paced environment. In a typical setting, development for a project is performed simultaneously by many developers. Thus, incorporating all the changes made, either simultaneously or at different times, poses a new type of challenge. &lt;br /&gt;
&lt;br /&gt;
This wikibook chapter focuses mainly on the development history of different version control systems.&lt;br /&gt;
&lt;br /&gt;
==Why version control systems are needed?==&lt;br /&gt;
The major issues in a dynamic development environment can be described as:&lt;br /&gt;
* Obviously, '''merging''' of a lot of files. If we consider somebody to do merging manually, The sheer volume of communication required is overwhelming. This communication can be among the developers themselves in a small team or between the team leader in charge of merging and the rest of the group.&lt;br /&gt;
&lt;br /&gt;
* '''Accountability:''' if one of the developers breaks the code flow during development, It is tough to detect and naturally nobody steps forward to take the blame. A version control system can precisely indicate who caused the break in the code.&lt;br /&gt;
&lt;br /&gt;
* If a certain code implementation doesn't work as expected, '''Reverting''' to last satisfactory state may be required. &lt;br /&gt;
&lt;br /&gt;
* Development on stale code may result in '''Code loss'''. for example, two developers downloaded a certain file at 10AM. One of the developers modified foo_1() method and uploaded modified file at 10:30AM.The other developer modified foo_2() method and uploaded the same file at 10:45AM. Since the functions are in the same file, the second upload will overwrite the file uploaded by first developer at 10:30AM causing loss of his part of work.    &lt;br /&gt;
&lt;br /&gt;
* Even a lone coder might need to '''review''' why he or she made a certain change in code. Comments during code check-in can be a useful resource in such situation. &lt;br /&gt;
&lt;br /&gt;
* Version control provides a form of '''documentation''' which makes tracking easy. i.e.-'''tagging''' is a kind of snapshot of all files and documents at a particular stage of development, usually during a stable release. This allows the developers to work with the exact files that were included in that release for bug-fixing purpose. &lt;br /&gt;
&lt;br /&gt;
* '''Sandboxing / Branching:''' Version control makes it possible to perform temporary code changes in an isolated area, usually in branch folder, for testing purpose. If the outcome is satisfactory then the code can be merged with the existing code, otherwise it can be discarded without having any impact on the main code.&lt;br /&gt;
&lt;br /&gt;
* Now a days, software development teams are spread across different countries and work at different time zones. Use of a version control system for project aggregation becomes unavoidable.&lt;br /&gt;
 &lt;br /&gt;
==Evolution of version control systems==&lt;br /&gt;
&lt;br /&gt;
VCS' can be broadly categorized into three groups based on the repository model. The sequence below follows the evolution of version control systems as well: &lt;br /&gt;
&lt;br /&gt;
==='''Local repository model''' &amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Source_Code_Control_System&amp;lt;/ref&amp;gt;===&lt;br /&gt;
Local version control systems had one storage location of the files. It was called local because it didn't support networked commands or access like the other later softwares. So, all the developers had to use same computer system to access or modify files.  &lt;br /&gt;
&lt;br /&gt;
===='''Source Code Control System (SCCS)'''&amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Source_Code_Control_System&amp;lt;/ref&amp;gt;==== &lt;br /&gt;
It is one of the pioneer source code revision softwares.[5] SCCS was developed at Bell Labs in 1972 by Marc J. Rochkind. Although it was originally developed for OS/MVT, SCCS was included in [http://en.wikipedia.org/wiki/Source_Code_Control_System some UNIX distributions.] SCCS ruled as the dominant VCS until ''Revision Control System'' was released.&lt;br /&gt;
:SCCS was the dominant version control system for Unix until the release of the [http://en.wikipedia.org/wiki/Revision_Control_System Revision Control System (RCS)]. Today, SCCS is generally considered obsolete. However, its file format is still used internally by a few other revision control programs, including [http://en.wikipedia.org/wiki/BitKeeper BitKeeper] and [http://en.wikipedia.org/wiki/TeamWare TeamWare]. The latter is a frontend to SCCS. [http://en.wikipedia.org/wiki/Sablime Sablime] has been developed from a modified version of SCCS but uses a history file format that is incompatible with SCCS. The SCCS file format uses a storage technique called [http://en.wikipedia.org/wiki/Interleaved_deltas interleaved deltas] (or the weave). This storage technique is now considered by many [http://en.wikipedia.org/wiki/Revision_control revision control] system developers as foundational to advanced merging and versioning techniques, such as the &amp;quot;Precise [http://en.wikipedia.org/wiki/Codeville Codeville]&amp;quot; (&amp;quot;pcdv&amp;quot;) merge.&lt;br /&gt;
:'''What does a source code control system do?'''&lt;br /&gt;
:If you are creating or maintaining a text file---perhaps a document, or a script, or a program---a source code control system can do several things for you:&lt;br /&gt;
:*It can keep track of the changes made to the file: what was changed, when it was changed, and by whom.&lt;br /&gt;
:*It provides a version numbering scheme so you can tell which versions of a file are more recent.&lt;br /&gt;
:*It can retrieve previous versions of your file, so that you can retreat to an older version if you decide that the current version is a bad idea, or if you want to see some text that has since been changed or deleted.&lt;br /&gt;
:*If you accidentally delete the current file, you can get back the last version.&lt;br /&gt;
:*If several people are working with the same file, a source code control system can help you coordinate your work and keep track of who did what, and when.&lt;br /&gt;
&lt;br /&gt;
SCCS is also known for the &amp;lt;code&amp;gt;sccsid&amp;lt;/code&amp;gt; string, for example:&lt;br /&gt;
&lt;br /&gt;
 static char sccsid[] = &amp;quot;@(#)ls.c        8.1 (Berkeley) 6/11/93&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
This string contains the file name, date, and can also contain a comment. After compilation, this string can be found in binary and object files by looking for the pattern &amp;quot;@(#)&amp;quot; and can be used determine which source code files were used during compilation.&lt;br /&gt;
&lt;br /&gt;
===='''Control System(RCS)'''&amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Revision_Control_System Revision&amp;lt;/ref&amp;gt;==== &lt;br /&gt;
It automated storing, retrieval, logging, identification, and merging frequent revisions of texts. RCS was first released in 1982 by Walter F. Tichy as an alternative to SCCS. It quickly gained popularity and almost replaced SCCS.[9] &lt;br /&gt;
:RCS performed better by storing the most recent copy of file and then storing only reverse differences called &amp;quot;deltas&amp;quot;.One of the shortcomings of RCS was that only one person at a time could edit the file. RCS could manage only single files, not a whole project or directory.&lt;br /&gt;
:Ref.[3] is a comprehensive book on CSSC and RCS.&lt;br /&gt;
&lt;br /&gt;
==='''Client-server model'''===&lt;br /&gt;
The [http://en.wikipedia.org/wiki/Client%E2%80%93server_model client-server model] utilizes a single centralized repository for the version control which is accessible to the developers through network or internet. The below diagram [http://svnbook.red-bean.com/en/1.7/svn.basic.version-control-basics.html] provides a high level overview of the model.&lt;br /&gt;
[[Image:Client_Server_Model.png |center|]]&lt;br /&gt;
===='''Concurrent Versions System (CVS)'''&amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Concurrent_Versions_System&amp;lt;/ref&amp;gt;====&lt;br /&gt;
It was one of the early client-server model based scheme. Dick Grune started developing CVS from 1984-1985 to allow his students to collaborate in a project according to their schedule. CVS was publicly released at 1986.The main improvement for CVS over RCS was that CVS could manage the whole project while RCS could only work on a file at a time.At the beginning, CVS was script based and called RCS at background. Later it was developed into a full fledged program. A lot of the IDE's (Emacs, Eclipse/aptana,Netbeans, Komodo, PHPEdit etc.) support CVS. CVSNT is a cross platform port of CVS with some modification. CVS, which was the defacto standard for version controlling for a long time is almost replaced today by SVN. There were many disadvantages of CVS which hindered its stay in the industry further. Prominent ones were&lt;br /&gt;
#CVS check-in is not an [http://en.wikipedia.org/wiki/Atomic_commit atomic] operation. For example, given the files 1.c, 2.c, 3.c, 4.c and if someone runs '''cvs ci 1.c 3.c''' and someone else runs cvs update at the same time, the person running update might get only the change to `3.c' and not the change to `1.c'. So, if check-in process was disturbed, it could result in damage of existing project at repository.&lt;br /&gt;
#CVS only tracks modification on a file-by-file basis.&lt;br /&gt;
#CVS was designed with only text files in mind. No native support for other formats. Extensive modification are necessary at the client and the server to support other file types.&lt;br /&gt;
#Conflict resolution in CVS, if not absent, is definitely not good. Conflict markers used in CVS may go unnoticed and those file might find their way into the repository.&lt;br /&gt;
#Slow&lt;br /&gt;
&lt;br /&gt;
===='''Subversion (SVN)'''&amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Subversion_%28software%29&amp;lt;/ref&amp;gt;==== &lt;br /&gt;
As the complexity of projects increased, the shortcomings of CVS became more and more prominent. This led to the development of Subversion. CollabNet started developing svn as a successor of CVS with added [http://en.wikipedia.org/wiki/Subversion_(software)#Features functionality][2][7]. Different open source projects (i.e.-[http://en.wikipedia.org/wiki/Apache_Software_Foundation Apache Software  Foundation],[http://en.wikipedia.org/wiki/Ruby_(programming_language) Ruby],[http://en.wikipedia.org/wiki/SourceForge SourceForge],[http://en.wikipedia.org/wiki/Tigris.org Tigris.org], [http://en.wikipedia.org/wiki/PHP PHP],  [http://en.wikipedia.org/wiki/Python_(programming_language) Python] and [http://en.wikipedia.org/wiki/MediaWiki MediaWiki]) use Subversion. Subversion is an open source software due to it's Apache license[1].&lt;br /&gt;
[[Image:Subversion_project_visualization.svg.png|650px|thumb|center|Visualization of a very simple Subversion project. Source:wikimedia commons, Explanation of terms can be found at http://en.wikipedia.org/wiki/Apache_Subversion, &amp;quot;Branching and tagging&amp;quot; and at http://en.wikipedia.org/wiki/Revision_control, #&amp;quot;Common vocabulary&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Features:''' &amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Apache_Subversion#Features&amp;lt;/ref&amp;gt;&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Commit_(data_management) Commits] as true [http://en.wikipedia.org/wiki/Atomicity_(database_systems) atomic operations] (interrupted commit operations in CVS would cause repository inconsistency or corruption).&lt;br /&gt;
* Renamed/copied/moved/removed files retain full revision history.&lt;br /&gt;
* The system maintains [http://en.wikipedia.org/wiki/Software_versioning versioning] for directories, renames, and file [http://en.wikipedia.org/wiki/Metadata metadata] (but not for timestamps). Users can move and/or copy entire directory-trees very quickly, while retaining full revision history.&lt;br /&gt;
* Versioning of [http://en.wikipedia.org/wiki/Symbolic_link symbolic link]s.&lt;br /&gt;
* Native support for binary files, with space-efficient binary-diff storage.&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Apache_HTTP_Server Apache HTTP Server] as network server, [http://en.wikipedia.org/wiki/WebDAV WebDAV]/[http://en.wikipedia.org/wiki/WebDAV#Extensions_and_derivatives Delta-V] for protocol. There is also an independent server [http://en.wikipedia.org/wiki/Process_(computing) process] called svnserve that uses a custom protocol over [http://en.wikipedia.org/wiki/Internet_Protocol_Suite TCP/IP].&lt;br /&gt;
* Branching as a cheap operation, independent of file size (though Subversion itself does not distinguish between a branch and a directory)&lt;br /&gt;
* Natively [http://en.wikipedia.org/wiki/Client%E2%80%93server_model client–server], [http://en.wikipedia.org/wiki/Abstraction_layer layered] [http://en.wikipedia.org/wiki/Library_(computing) library] design.&lt;br /&gt;
* Client/server protocol sends diffs in both directions.&lt;br /&gt;
* Costs proportional to change size, not to data size.&lt;br /&gt;
* Parsable output, including XML log output.&lt;br /&gt;
* Open source licensed — Apache License in the projected 1.7 release; prior versions use a derivative of the Apache Software License, v1.1&lt;br /&gt;
* Internationalized program messages.&lt;br /&gt;
* File locking for unmergeable files (&amp;quot;reserved checkouts&amp;quot;).&lt;br /&gt;
* Path-based authorization.&lt;br /&gt;
* Language bindings for C#, PHP, Python, Perl, Ruby, and Java.&lt;br /&gt;
* Full MIME support — users can view or change the MIME type of each file, with the software knowing which MIME types can have their differences from previous versions shown.&lt;br /&gt;
* Merge tracking - Merges between branches will be tracked, this allows automatically merging between branches without telling Subversion what (doesn't) need to be merged.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=====Eclipse Subversive - Subversion (SVN) Team Provider&amp;lt;ref&amp;gt;http://www.eclipse.org/subversive/&amp;lt;/ref&amp;gt;=====&lt;br /&gt;
The Subversive project is aimed to integrate the Subversion (SVN) version control system with the Eclipse platform. Using the Subversive plug-in, you can work with projects stored in Subversion repositories directly from the Eclipse workbench in a way similar to work with other Eclipse version control providers, such as CVS and Git.&lt;br /&gt;
&lt;br /&gt;
'''Subversive Features''': Subversive plug-in provides access to Subversion repositories from the Eclipse workbench.&lt;br /&gt;
&lt;br /&gt;
*'''Full-Scale SVN Client'''&lt;br /&gt;
:Subversive is designed to be used as a full-featured SVN client, so you can update, commit, merge changes, work with SVN properties, view change history and perform other operations with SVN directly from the Eclipse environment.&lt;br /&gt;
   	&lt;br /&gt;
*'''Advanced SVN Features'''&lt;br /&gt;
:Subversive includes several features that extend functionality of the standard SVN client. In particular, Subversive can show the SVN repository content grouped by the logical structures of trunk, branch and tag and display changes on a visual revisions graph.&lt;br /&gt;
&lt;br /&gt;
*'''Seamless Integration with Eclipse'''&lt;br /&gt;
:Subversive is an official Eclipse project and an integral part of Eclipse Simultaneous releases. The project follows all Eclipse guidelines and requirements to deliver a quality SVN team provider plug-in similar to CVS and Git implementations.&lt;br /&gt;
   	&lt;br /&gt;
*'''Support of the Latest SVN Versions'''&lt;br /&gt;
:Subversive evolves together with the Subversion project to provide Eclipse users with the features that appeared in new versions of the SVN implementation. You can use the new SVN functionality in Eclipse by installing the Early Access version of Subversive.&lt;br /&gt;
&lt;br /&gt;
===='''Configuration Management Version Control (CMVC)'''&amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/IBM_Configuration_Management_Version_Control_(CMVC)&amp;lt;/ref&amp;gt;==== &lt;br /&gt;
It was developed by IBM Corporation in the mid-late 1990s and was derived in part from software purchased from HP and from IBM's internal-use-only system, IDSS. CMVC was superseded by IBM Rational ClearCase and ClearQuest. The system was used to manage the IBM OS/2 and IBM AIX source code repositories in the 1990s. It is still widely used within IBM by various teams. &lt;br /&gt;
&lt;br /&gt;
One of the drawbacks of CMVC is that, once a file is checked-out by a user, it remains locked to all the other users until the either the new version is checked-in or the lock is released explicitly by the owner (user) of the lock. Some proprietary client-server based version control softwares are:&lt;br /&gt;
::*[http://en.wikipedia.org/wiki/Autodesk_Vault Autodesk Vault] was specifically developed for Autodesk applications.&lt;br /&gt;
::*[http://en.wikipedia.org/wiki/IBM_Rational_ClearCase ClearCase] was developed by IBM Rational Software. It's a Source Code Control (SCC) compliant software.&lt;br /&gt;
::*[http://en.wikipedia.org/wiki/Visual_SourceSafe Visual SourceSafe] is developed by Microsoft targeting small development team.&lt;br /&gt;
::*[http://en.wikipedia.org/wiki/Visual_Studio_Team_System Visual Studio Team System] is also developed by Microsoft targeting larger groups.&lt;br /&gt;
&lt;br /&gt;
===Distributed model===&lt;br /&gt;
'''Distributed Version Control (DVCS)''', or '''Decentralized Version Control''' systems can have many central repositories.This is a peer to peer approach. The concept started developing at late 90's. In DVCS. Each developer works with his or her local repository and the changes are synchronized between repositories upon commit. DVCS are better suited for large teams with partially independent developers. i.e.- opensource software development.[8]&lt;br /&gt;
#[http://en.wikipedia.org/wiki/Monotone_%28software%29 Monotone] and [http://en.wikipedia.org/wiki/GNU_arch GNU arch]  were the first generation DVCS (release:2001-2003) followed by [http://en.wikipedia.org/wiki/Darcs Darcs] (stable release:2010).[http://en.wikipedia.org/wiki/Mercurial Mercurial] , [http://en.wikipedia.org/wiki/Git_%28software%29 Git] and [http://en.wikipedia.org/wiki/Bazaar_%28software%29 Bazaar] (2005-2007) are well adopted among developers.   &lt;br /&gt;
#[http://en.wikipedia.org/wiki/BitKeeper BitKeeper],[http://en.wikipedia.org/wiki/Code_Co-op Code Co-op], [http://en.wikipedia.org/wiki/Sun_WorkShop_TeamWare Sun WorkShop TeamWare] are some proprietary DVCS softwares.&lt;br /&gt;
&lt;br /&gt;
It should be noted that many distributed version control softwares support client-server model too.One of the benefits of DVCS is that a developer can save the source code as long as he wants even if the central repository (in client-server model) is discarded at the end of a project.&lt;br /&gt;
&lt;br /&gt;
[[Image:timeline.jpg|650px|thumb|center|A generalized timeline. Source:http://pg-server.csc.ncsu.edu/mediawiki/index.php/CSC/ECE_517_Fall_2009/wiki1a_5_History_of_version_control_by_av]]&lt;br /&gt;
&lt;br /&gt;
====Git (Version control)&amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Git_(software)&amp;lt;/ref&amp;gt;====&lt;br /&gt;
[[Image:220px-Git_data_flow_simplified.png|600px|thumb|right|Some data flows and storage levels in the Git revision control system.]]&lt;br /&gt;
Git development began after many Linux kernel developers chose to give up access to BitKeeper, a proprietary SCM system that had previously been used to maintain the project. The copyright holder of BitKeeper, Larry McVoy, had withdrawn free use of the product after he claimed that Andrew Tridgell had reverse-engineered the BitKeeper protocols.&lt;br /&gt;
&lt;br /&gt;
Git was created by [http://en.wikipedia.org/wiki/Linus_Torvalds Linus Torvalds] (the founder of Linux) because he really didn’t like Concurrent Versions System (CVS), which, at the time, was the most popular version control system. Torvalds wanted something to help keep versions of the kernel he was working on and he figured that he would have to build a system of his own.&lt;br /&gt;
&lt;br /&gt;
Git is an open source project, and since Torvalds’ initial development, there have been many other primary authors and contributors to the project.&lt;br /&gt;
&lt;br /&gt;
'''Advantages of Using Git'''&lt;br /&gt;
*Git is super easy to install:&lt;br /&gt;
*Git is easier to learn compared to other systems:&lt;br /&gt;
*Git is fast:&lt;br /&gt;
*Git is decentralized:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Disadvantages of Using Git'''&lt;br /&gt;
*'''Git has a learning curve:''' It’s one of the easier version control systems to use, any new thing you introduce to your workflow will need some learning time. Learning Git will be similar to learning a new software application such as Word or Excel.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
== File Sharing Models ==&lt;br /&gt;
Every system that implement version controlling have to address one fundamental problem: How will the files in the repository be safely shared across users but prevent them from accidentally stepping on each other's feet? It's all too easy for users to accidentally overwrite each other's changes in the repository.&lt;br /&gt;
&lt;br /&gt;
Consider the scenario with two users A and B. Both of them check out the same file (same version). User A after making his modification, suppose, commits the file first. A few moments later B completes his modification. B does not have any clue about A's check-in and he happily commits his code to the repository. Now B has accidentally overwritten the changes made by A leaving the system in an inconsistent state. This problem can be solved in two different ways:&amp;lt;br/&amp;gt;&lt;br /&gt;
* Lock-Modify-Unlock&lt;br /&gt;
* Copy-Modify-Merge &amp;lt;br/&amp;gt;&lt;br /&gt;
While CMVC follows the lock-modify-unlock solution, svn follows copy-modify-merge allowing users to modify the same piece of code concurrently. &amp;lt;br/&amp;gt;&lt;br /&gt;
The problem with the lock-modify-unlock model is that it's a bit restrictive and often becomes a roadblock for users:&lt;br /&gt;
&lt;br /&gt;
* Locking may cause unnecessary delay and is not desired when it comes to teams/projects which have a small cycle time between releases. For example: Suppose say, user A checks out a file (locks it) and some interrupt in his work causes him to switch to another task of higher priority. There is a possibility that he forgets completely about the file that he checked out. Now, if another user B wants to edit the same file, he cannot do so, without having the administrator unlock the file for him, his hands are tied!&lt;br /&gt;
&lt;br /&gt;
* Locking may cause unnecessary serialization: What if two different users A and B want to edit different non-intersecting portions of the same file? With proper merging solution in place, they could have done it easily without bothering about what the other user does with the file.&lt;br /&gt;
&lt;br /&gt;
* Locking may create a false sense of security: As with any model, lock-modify-unlock approach too allows two different users to work on separate files simultaneously. However the model does not define how dependencies between files are dealt with.&amp;lt;br/&amp;gt;For example: Suppose A locks and edits file f1, while B simultaneously locks and edits file f2. If there is a function call in f1 whose definition exists in f2 but the definition is removed or the function name is changed after editing f2, they don't work together anymore.&amp;lt;br/&amp;gt;Thus, locking files by itself does not provide security against such deliberate changes. Lot of manual synchronization is needed to avoid such situations which is only going to cause delay in the development of the project.&lt;br /&gt;
&lt;br /&gt;
==Use of version control in other areas ==&lt;br /&gt;
&lt;br /&gt;
Now a days, many document editing softwares have adopted version control. Wikis, GoogleDoc, Microsoft Office and OpenOffice.org suite are some example softwares that can save previous document editing history. &lt;br /&gt;
&lt;br /&gt;
==Other considerations==&lt;br /&gt;
&lt;br /&gt;
Most open source softwares have [http://linuxmafia.com/faq/Apps/vcs.html distributions for Linux] OS. In most open source cases, Linux and windows versions are released concurrently. &lt;br /&gt;
Many VCS' have plugins for common IDEs like Eclipse, Visual Studio, Oracle JDeveloper etc. NetBeans IDE and Xcode has integrated version control support.&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Additional References==&lt;br /&gt;
&lt;br /&gt;
1. [http://subversion.apache.org/news.html#news-20100217.  Apache Software Foundation Announcements, &amp;quot;Subversion becomes Apache Subversion&amp;quot;.(2010-02-17) Accessed:September 2010 ]&lt;br /&gt;
&lt;br /&gt;
2. [http://svnbook.red-bean.com/ Ben Collins-Sussman, Brian W. Fitzpatrick, C. Michael Pilato. &amp;quot;Version Control with Subversion&amp;quot;, an O'Reilly book available online. Accessed:September 2010] &lt;br /&gt;
&lt;br /&gt;
3. [http://shop.oreilly.com/product/9781565921177.do Don Bolinger, Tan Bronson: Applying RCS and SCCS. O'Reilly Media. ISBN:978-1-56592-117-7]  &lt;br /&gt;
&lt;br /&gt;
4. [http://www.ericsink.com/scm/source_control.html  Eric Sink: A collection of articles on source control and best practices, Accessed:September 2010]&lt;br /&gt;
&lt;br /&gt;
5. [http://basepath.com/aup/talks/SCCS-Slideshow.pdf  M. J. Rochkind: The Source Code Control System.] In IEEE Transactions on Software Engineering SE-1:4 (Dec. 1975), pages 364–370.&lt;br /&gt;
&lt;br /&gt;
6. [http://onlinelibrary.wiley.com/doi/10.1002/bltj.2039/pdf Martin, Robert L. (2002). &amp;quot;Software configuration management for the 21st century&amp;quot;. Bell Labs technical journal, Volume 2, Issue 1, page- 154.]&lt;br /&gt;
&lt;br /&gt;
7. Mike Mason; Pragmatic Version Control Using Subversion; Pragmatic Bookshelf; ISBN 0-9745140-6-3 (1st edition, paperback, 2005)&lt;br /&gt;
&lt;br /&gt;
8. [http://www.ibm.com/developerworks/aix/library/au-dist_ver_control/ Noah Gift,Adam Shand: Introduction to distributed version control systems (compare how to use Bazaar, Mercurial, and Git) (Apr 2009), IBM Technical Library, Accessed:September 2010 ] &lt;br /&gt;
&lt;br /&gt;
9.[http://onlinelibrary.wiley.com/doi/10.1002/spe.4380150703/abstract Walter F. Tichy; Rcs - a system for version control; In Software: Practice and Experience. Volume 15, Issue 7,(July 1985) pages 637–654 ]&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
[http://en.wikipedia.org/wiki/Revision_control Wikipedia: Revision control]&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/List_of_revision_control_software Wikipedia: List of revision control software]&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Comparison_of_revision_control_software Wikipedia: Detail comparison of revision control softwares]&lt;br /&gt;
&lt;br /&gt;
[http://www.nongnu.org/cvs/ CVS webpage]&lt;br /&gt;
&lt;br /&gt;
[http://www.cs.vu.nl/~dick/  Dick Grune's website on CVS history]&lt;br /&gt;
&lt;br /&gt;
[http://groups.google.com/group/mod.sources/msg/2ebab72ac0744fb8?dmode=source The original usenet post on CVS] archived at google groups.&lt;br /&gt;
&lt;br /&gt;
[http://linuxmafia.com/faq/Apps/vcs.html Linux availability of various version control softwares]&lt;/div&gt;</summary>
		<author><name>Rchakar</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch1_1w1_rk&amp;diff=62948</id>
		<title>CSC/ECE 517 Fall 2012/ch1 1w1 rk</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch1_1w1_rk&amp;diff=62948"/>
		<updated>2012-09-08T01:24:34Z</updated>

		<summary type="html">&lt;p&gt;Rchakar: /* Git (Version control)http://en.wikipedia.org/wiki/Git_(software) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
A [http://en.wikipedia.org/wiki/Revision_control version control] system '''(VCS)''' is a process for managing software codes,files and directory structures and corresponding updates made to them during software development, web development etc. project or during subsequent project maintenances. Version control is also known as revision control, source control or [http://en.wikipedia.org/wiki/Software_configuration_management software configuration management] (SCM)[6].&lt;br /&gt;
&lt;br /&gt;
Any software development project is a dynamic and fast paced environment. In a typical setting, development for a project is performed simultaneously by many developers. Thus, incorporating all the changes made, either simultaneously or at different times, poses a new type of challenge. &lt;br /&gt;
&lt;br /&gt;
This wikibook chapter focuses mainly on the development history of different version control systems.&lt;br /&gt;
&lt;br /&gt;
==Why version control systems are needed?==&lt;br /&gt;
The major issues in a dynamic development environment can be described as:&lt;br /&gt;
* Obviously, '''merging''' of a lot of files. If we consider somebody to do merging manually, The sheer volume of communication required is overwhelming. This communication can be among the developers themselves in a small team or between the team leader in charge of merging and the rest of the group.&lt;br /&gt;
&lt;br /&gt;
* '''Accountability:''' if one of the developers breaks the code flow during development, It is tough to detect and naturally nobody steps forward to take the blame. A version control system can precisely indicate who caused the break in the code.&lt;br /&gt;
&lt;br /&gt;
* If a certain code implementation doesn't work as expected, '''Reverting''' to last satisfactory state may be required. &lt;br /&gt;
&lt;br /&gt;
* Development on stale code may result in '''Code loss'''. for example, two developers downloaded a certain file at 10AM. One of the developers modified foo_1() method and uploaded modified file at 10:30AM.The other developer modified foo_2() method and uploaded the same file at 10:45AM. Since the functions are in the same file, the second upload will overwrite the file uploaded by first developer at 10:30AM causing loss of his part of work.    &lt;br /&gt;
&lt;br /&gt;
* Even a lone coder might need to '''review''' why he or she made a certain change in code. Comments during code check-in can be a useful resource in such situation. &lt;br /&gt;
&lt;br /&gt;
* Version control provides a form of '''documentation''' which makes tracking easy. i.e.-'''tagging''' is a kind of snapshot of all files and documents at a particular stage of development, usually during a stable release. This allows the developers to work with the exact files that were included in that release for bug-fixing purpose. &lt;br /&gt;
&lt;br /&gt;
* '''Sandboxing / Branching:''' Version control makes it possible to perform temporary code changes in an isolated area, usually in branch folder, for testing purpose. If the outcome is satisfactory then the code can be merged with the existing code, otherwise it can be discarded without having any impact on the main code.&lt;br /&gt;
&lt;br /&gt;
* Now a days, software development teams are spread across different countries and work at different time zones. Use of a version control system for project aggregation becomes unavoidable.&lt;br /&gt;
 &lt;br /&gt;
==Evolution of version control systems==&lt;br /&gt;
&lt;br /&gt;
VCS' can be broadly categorized into three groups based on the repository model. The sequence below follows the evolution of version control systems as well: &lt;br /&gt;
&lt;br /&gt;
==='''Local repository model''' &amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Source_Code_Control_System&amp;lt;/ref&amp;gt;===&lt;br /&gt;
Local version control systems had one storage location of the files. It was called local because it didn't support networked commands or access like the other later softwares. So, all the developers had to use same computer system to access or modify files.  &lt;br /&gt;
&lt;br /&gt;
===='''Source Code Control System (SCCS)'''&amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Source_Code_Control_System&amp;lt;/ref&amp;gt;==== &lt;br /&gt;
It is one of the pioneer source code revision softwares.[5] SCCS was developed at Bell Labs in 1972 by Marc J. Rochkind. Although it was originally developed for OS/MVT, SCCS was included in [http://en.wikipedia.org/wiki/Source_Code_Control_System some UNIX distributions.] SCCS ruled as the dominant VCS until ''Revision Control System'' was released.&lt;br /&gt;
:SCCS was the dominant version control system for Unix until the release of the [http://en.wikipedia.org/wiki/Revision_Control_System Revision Control System (RCS)]. Today, SCCS is generally considered obsolete. However, its file format is still used internally by a few other revision control programs, including [http://en.wikipedia.org/wiki/BitKeeper BitKeeper] and [http://en.wikipedia.org/wiki/TeamWare TeamWare]. The latter is a frontend to SCCS. [http://en.wikipedia.org/wiki/Sablime Sablime] has been developed from a modified version of SCCS but uses a history file format that is incompatible with SCCS. The SCCS file format uses a storage technique called [http://en.wikipedia.org/wiki/Interleaved_deltas interleaved deltas] (or the weave). This storage technique is now considered by many [http://en.wikipedia.org/wiki/Revision_control revision control] system developers as foundational to advanced merging and versioning techniques, such as the &amp;quot;Precise [http://en.wikipedia.org/wiki/Codeville Codeville]&amp;quot; (&amp;quot;pcdv&amp;quot;) merge.&lt;br /&gt;
:'''What does a source code control system do?'''&lt;br /&gt;
:If you are creating or maintaining a text file---perhaps a document, or a script, or a program---a source code control system can do several things for you:&lt;br /&gt;
:*It can keep track of the changes made to the file: what was changed, when it was changed, and by whom.&lt;br /&gt;
:*It provides a version numbering scheme so you can tell which versions of a file are more recent.&lt;br /&gt;
:*It can retrieve previous versions of your file, so that you can retreat to an older version if you decide that the current version is a bad idea, or if you want to see some text that has since been changed or deleted.&lt;br /&gt;
:*If you accidentally delete the current file, you can get back the last version.&lt;br /&gt;
:*If several people are working with the same file, a source code control system can help you coordinate your work and keep track of who did what, and when.&lt;br /&gt;
&lt;br /&gt;
SCCS is also known for the &amp;lt;code&amp;gt;sccsid&amp;lt;/code&amp;gt; string, for example:&lt;br /&gt;
&lt;br /&gt;
 static char sccsid[] = &amp;quot;@(#)ls.c        8.1 (Berkeley) 6/11/93&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
This string contains the file name, date, and can also contain a comment. After compilation, this string can be found in binary and object files by looking for the pattern &amp;quot;@(#)&amp;quot; and can be used determine which source code files were used during compilation.&lt;br /&gt;
&lt;br /&gt;
===='''Control System(RCS)'''&amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Revision_Control_System Revision&amp;lt;/ref&amp;gt;==== &lt;br /&gt;
It automated storing, retrieval, logging, identification, and merging frequent revisions of texts. RCS was first released in 1982 by Walter F. Tichy as an alternative to SCCS. It quickly gained popularity and almost replaced SCCS.[9] &lt;br /&gt;
:RCS performed better by storing the most recent copy of file and then storing only reverse differences called &amp;quot;deltas&amp;quot;.One of the shortcomings of RCS was that only one person at a time could edit the file. RCS could manage only single files, not a whole project or directory.&lt;br /&gt;
:Ref.[3] is a comprehensive book on CSSC and RCS.&lt;br /&gt;
&lt;br /&gt;
==='''Client-server model'''===&lt;br /&gt;
The [http://en.wikipedia.org/wiki/Client%E2%80%93server_model client-server model] utilizes a single centralized repository for the version control which is accessible to the developers through network or internet. The below diagram [http://svnbook.red-bean.com/en/1.7/svn.basic.version-control-basics.html] provides a high level overview of the model.&lt;br /&gt;
[[Image:Client_Server_Model.png |center|]]&lt;br /&gt;
===='''Concurrent Versions System (CVS)'''&amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Concurrent_Versions_System&amp;lt;/ref&amp;gt;====&lt;br /&gt;
It was one of the early client-server model based scheme. Dick Grune started developing CVS from 1984-1985 to allow his students to collaborate in a project according to their schedule. CVS was publicly released at 1986.The main improvement for CVS over RCS was that CVS could manage the whole project while RCS could only work on a file at a time.At the beginning, CVS was script based and called RCS at background. Later it was developed into a full fledged program. A lot of the IDE's (Emacs, Eclipse/aptana,Netbeans, Komodo, PHPEdit etc.) support CVS. CVSNT is a cross platform port of CVS with some modification. CVS, which was the defacto standard for version controlling for a long time is almost replaced today by SVN. There were many disadvantages of CVS which hindered its stay in the industry further. Prominent ones were&lt;br /&gt;
#CVS check-in is not an [http://en.wikipedia.org/wiki/Atomic_commit atomic] operation. For example, given the files 1.c, 2.c, 3.c, 4.c and if someone runs '''cvs ci 1.c 3.c''' and someone else runs cvs update at the same time, the person running update might get only the change to `3.c' and not the change to `1.c'. So, if check-in process was disturbed, it could result in damage of existing project at repository.&lt;br /&gt;
#CVS only tracks modification on a file-by-file basis.&lt;br /&gt;
#CVS was designed with only text files in mind. No native support for other formats. Extensive modification are necessary at the client and the server to support other file types.&lt;br /&gt;
#Conflict resolution in CVS, if not absent, is definitely not good. Conflict markers used in CVS may go unnoticed and those file might find their way into the repository.&lt;br /&gt;
#Slow&lt;br /&gt;
&lt;br /&gt;
===='''Subversion (SVN)'''&amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Subversion_%28software%29&amp;lt;/ref&amp;gt;==== &lt;br /&gt;
As the complexity of projects increased, the shortcomings of CVS became more and more prominent. This led to the development of Subversion. CollabNet started developing svn as a successor of CVS with added [http://en.wikipedia.org/wiki/Subversion_(software)#Features functionality][2][7]. Different open source projects (i.e.-[http://en.wikipedia.org/wiki/Apache_Software_Foundation Apache Software  Foundation],[http://en.wikipedia.org/wiki/Ruby_(programming_language) Ruby],[http://en.wikipedia.org/wiki/SourceForge SourceForge],[http://en.wikipedia.org/wiki/Tigris.org Tigris.org], [http://en.wikipedia.org/wiki/PHP PHP],  [http://en.wikipedia.org/wiki/Python_(programming_language) Python] and [http://en.wikipedia.org/wiki/MediaWiki MediaWiki]) use Subversion. Subversion is an open source software due to it's Apache license[1].&lt;br /&gt;
[[Image:Subversion_project_visualization.svg.png|650px|thumb|center|Visualization of a very simple Subversion project. Source:wikimedia commons, Explanation of terms can be found at http://en.wikipedia.org/wiki/Apache_Subversion, &amp;quot;Branching and tagging&amp;quot; and at http://en.wikipedia.org/wiki/Revision_control, #&amp;quot;Common vocabulary&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Features:''' &amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Apache_Subversion#Features&amp;lt;/ref&amp;gt;&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Commit_(data_management) Commits] as true [http://en.wikipedia.org/wiki/Atomicity_(database_systems) atomic operations] (interrupted commit operations in CVS would cause repository inconsistency or corruption).&lt;br /&gt;
* Renamed/copied/moved/removed files retain full revision history.&lt;br /&gt;
* The system maintains [http://en.wikipedia.org/wiki/Software_versioning versioning] for directories, renames, and file [http://en.wikipedia.org/wiki/Metadata metadata] (but not for timestamps). Users can move and/or copy entire directory-trees very quickly, while retaining full revision history.&lt;br /&gt;
* Versioning of [http://en.wikipedia.org/wiki/Symbolic_link symbolic link]s.&lt;br /&gt;
* Native support for binary files, with space-efficient binary-diff storage.&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Apache_HTTP_Server Apache HTTP Server] as network server, [http://en.wikipedia.org/wiki/WebDAV WebDAV]/[http://en.wikipedia.org/wiki/WebDAV#Extensions_and_derivatives Delta-V] for protocol. There is also an independent server [http://en.wikipedia.org/wiki/Process_(computing) process] called svnserve that uses a custom protocol over [http://en.wikipedia.org/wiki/Internet_Protocol_Suite TCP/IP].&lt;br /&gt;
* Branching as a cheap operation, independent of file size (though Subversion itself does not distinguish between a branch and a directory)&lt;br /&gt;
* Natively [http://en.wikipedia.org/wiki/Client%E2%80%93server_model client–server], [http://en.wikipedia.org/wiki/Abstraction_layer layered] [http://en.wikipedia.org/wiki/Library_(computing) library] design.&lt;br /&gt;
* Client/server protocol sends diffs in both directions.&lt;br /&gt;
* Costs proportional to change size, not to data size.&lt;br /&gt;
* Parsable output, including XML log output.&lt;br /&gt;
* Open source licensed — Apache License in the projected 1.7 release; prior versions use a derivative of the Apache Software License, v1.1&lt;br /&gt;
* Internationalized program messages.&lt;br /&gt;
* File locking for unmergeable files (&amp;quot;reserved checkouts&amp;quot;).&lt;br /&gt;
* Path-based authorization.&lt;br /&gt;
* Language bindings for C#, PHP, Python, Perl, Ruby, and Java.&lt;br /&gt;
* Full MIME support — users can view or change the MIME type of each file, with the software knowing which MIME types can have their differences from previous versions shown.&lt;br /&gt;
* Merge tracking - Merges between branches will be tracked, this allows automatically merging between branches without telling Subversion what (doesn't) need to be merged.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=====Eclipse Subversive - Subversion (SVN) Team Provider&amp;lt;ref&amp;gt;http://www.eclipse.org/subversive/&amp;lt;/ref&amp;gt;=====&lt;br /&gt;
The Subversive project is aimed to integrate the Subversion (SVN) version control system with the Eclipse platform. Using the Subversive plug-in, you can work with projects stored in Subversion repositories directly from the Eclipse workbench in a way similar to work with other Eclipse version control providers, such as CVS and Git.&lt;br /&gt;
&lt;br /&gt;
'''Subversive Features''': Subversive plug-in provides access to Subversion repositories from the Eclipse workbench.&lt;br /&gt;
&lt;br /&gt;
*'''Full-Scale SVN Client'''&lt;br /&gt;
:Subversive is designed to be used as a full-featured SVN client, so you can update, commit, merge changes, work with SVN properties, view change history and perform other operations with SVN directly from the Eclipse environment.&lt;br /&gt;
   	&lt;br /&gt;
*'''Advanced SVN Features'''&lt;br /&gt;
:Subversive includes several features that extend functionality of the standard SVN client. In particular, Subversive can show the SVN repository content grouped by the logical structures of trunk, branch and tag and display changes on a visual revisions graph.&lt;br /&gt;
&lt;br /&gt;
*'''Seamless Integration with Eclipse'''&lt;br /&gt;
:Subversive is an official Eclipse project and an integral part of Eclipse Simultaneous releases. The project follows all Eclipse guidelines and requirements to deliver a quality SVN team provider plug-in similar to CVS and Git implementations.&lt;br /&gt;
   	&lt;br /&gt;
*'''Support of the Latest SVN Versions'''&lt;br /&gt;
:Subversive evolves together with the Subversion project to provide Eclipse users with the features that appeared in new versions of the SVN implementation. You can use the new SVN functionality in Eclipse by installing the Early Access version of Subversive.&lt;br /&gt;
&lt;br /&gt;
===='''Configuration Management Version Control (CMVC)'''&amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/IBM_Configuration_Management_Version_Control_(CMVC)&amp;lt;/ref&amp;gt;==== &lt;br /&gt;
It was developed by IBM Corporation in the mid-late 1990s and was derived in part from software purchased from HP and from IBM's internal-use-only system, IDSS. CMVC was superseded by IBM Rational ClearCase and ClearQuest. The system was used to manage the IBM OS/2 and IBM AIX source code repositories in the 1990s. It is still widely used within IBM by various teams. &lt;br /&gt;
&lt;br /&gt;
One of the drawbacks of CMVC is that, once a file is checked-out by a user, it remains locked to all the other users until the either the new version is checked-in or the lock is released explicitly by the owner (user) of the lock. Some proprietary client-server based version control softwares are:&lt;br /&gt;
::*[http://en.wikipedia.org/wiki/Autodesk_Vault Autodesk Vault] was specifically developed for Autodesk applications.&lt;br /&gt;
::*[http://en.wikipedia.org/wiki/IBM_Rational_ClearCase ClearCase] was developed by IBM Rational Software. It's a Source Code Control (SCC) compliant software.&lt;br /&gt;
::*[http://en.wikipedia.org/wiki/Visual_SourceSafe Visual SourceSafe] is developed by Microsoft targeting small development team.&lt;br /&gt;
::*[http://en.wikipedia.org/wiki/Visual_Studio_Team_System Visual Studio Team System] is also developed by Microsoft targeting larger groups.&lt;br /&gt;
&lt;br /&gt;
===Distributed model===&lt;br /&gt;
'''Distributed Version Control (DVCS)''', or '''Decentralized Version Control''' systems can have many central repositories.This is a peer to peer approach. The concept started developing at late 90's. In DVCS. Each developer works with his or her local repository and the changes are synchronized between repositories upon commit. DVCS are better suited for large teams with partially independent developers. i.e.- opensource software development.[8]&lt;br /&gt;
#[http://en.wikipedia.org/wiki/Monotone_%28software%29 Monotone] and [http://en.wikipedia.org/wiki/GNU_arch GNU arch]  were the first generation DVCS (release:2001-2003) followed by [http://en.wikipedia.org/wiki/Darcs Darcs] (stable release:2010).[http://en.wikipedia.org/wiki/Mercurial Mercurial] , [http://en.wikipedia.org/wiki/Git_%28software%29 Git] and [http://en.wikipedia.org/wiki/Bazaar_%28software%29 Bazaar] (2005-2007) are well adopted among developers.   &lt;br /&gt;
#[http://en.wikipedia.org/wiki/BitKeeper BitKeeper],[http://en.wikipedia.org/wiki/Code_Co-op Code Co-op], [http://en.wikipedia.org/wiki/Sun_WorkShop_TeamWare Sun WorkShop TeamWare] are some proprietary DVCS softwares.&lt;br /&gt;
&lt;br /&gt;
It should be noted that many distributed version control softwares support client-server model too.One of the benefits of DVCS is that a developer can save the source code as long as he wants even if the central repository (in client-server model) is discarded at the end of a project.&lt;br /&gt;
&lt;br /&gt;
[[Image:timeline.jpg|650px|thumb|center|A generalized timeline. Source:http://pg-server.csc.ncsu.edu/mediawiki/index.php/CSC/ECE_517_Fall_2009/wiki1a_5_History_of_version_control_by_av]]&lt;br /&gt;
&lt;br /&gt;
====Git (Version control)&amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Git_(software)&amp;lt;/ref&amp;gt;====&lt;br /&gt;
[[Image:220px-Git_data_flow_simplified.png|600px|thumb|right|Some data flows and storage levels in the Git revision control system.]]&lt;br /&gt;
Git development began after many Linux kernel developers chose to give up access to BitKeeper, a proprietary SCM system that had previously been used to maintain the project. The copyright holder of BitKeeper, Larry McVoy, had withdrawn free use of the product after he claimed that Andrew Tridgell had reverse-engineered the BitKeeper protocols.&lt;br /&gt;
&lt;br /&gt;
Git was created by [http://en.wikipedia.org/wiki/Linus_Torvalds Linus Torvalds] (the founder of Linux) because he really didn’t like Concurrent Versions System (CVS), which, at the time, was the most popular version control system. Torvalds wanted something to help keep versions of the kernel he was working on and he figured that he would have to build a system of his own.&lt;br /&gt;
&lt;br /&gt;
Git is an open source project, and since Torvalds’ initial development, there have been many other primary authors and contributors to the project.&lt;br /&gt;
&lt;br /&gt;
'''Advantages of Using Git'''&lt;br /&gt;
*Git is super easy to install:&lt;br /&gt;
*Git is easier to learn compared to other systems:&lt;br /&gt;
*Git is fast:&lt;br /&gt;
*Git is decentralized:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Disadvantages of Using Git'''&lt;br /&gt;
*'''Git has a learning curve:''' It’s one of the easier version control systems to use, any new thing you introduce to your workflow will need some learning time. Learning Git will be similar to learning a new software application such as Word or Excel.&lt;br /&gt;
&lt;br /&gt;
== File Sharing Models ==&lt;br /&gt;
Every system that implement version controlling have to address one fundamental problem: How will the files in the repository be safely shared across users but prevent them from accidentally stepping on each other's feet? It's all too easy for users to accidentally overwrite each other's changes in the repository.&lt;br /&gt;
&lt;br /&gt;
Consider the scenario with two users A and B. Both of them check out the same file (same version). User A after making his modification, suppose, commits the file first. A few moments later B completes his modification. B does not have any clue about A's check-in and he happily commits his code to the repository. Now B has accidentally overwritten the changes made by A leaving the system in an inconsistent state. This problem can be solved in two different ways:&amp;lt;br/&amp;gt;&lt;br /&gt;
* Lock-Modify-Unlock&lt;br /&gt;
* Copy-Modify-Merge &amp;lt;br/&amp;gt;&lt;br /&gt;
While CMVC follows the lock-modify-unlock solution, svn follows copy-modify-merge allowing users to modify the same piece of code concurrently. &amp;lt;br/&amp;gt;&lt;br /&gt;
The problem with the lock-modify-unlock model is that it's a bit restrictive and often becomes a roadblock for users:&lt;br /&gt;
&lt;br /&gt;
* Locking may cause unnecessary delay and is not desired when it comes to teams/projects which have a small cycle time between releases. For example: Suppose say, user A checks out a file (locks it) and some interrupt in his work causes him to switch to another task of higher priority. There is a possibility that he forgets completely about the file that he checked out. Now, if another user B wants to edit the same file, he cannot do so, without having the administrator unlock the file for him, his hands are tied!&lt;br /&gt;
&lt;br /&gt;
* Locking may cause unnecessary serialization: What if two different users A and B want to edit different non-intersecting portions of the same file? With proper merging solution in place, they could have done it easily without bothering about what the other user does with the file.&lt;br /&gt;
&lt;br /&gt;
* Locking may create a false sense of security: As with any model, lock-modify-unlock approach too allows two different users to work on separate files simultaneously. However the model does not define how dependencies between files are dealt with.&amp;lt;br/&amp;gt;For example: Suppose A locks and edits file f1, while B simultaneously locks and edits file f2. If there is a function call in f1 whose definition exists in f2 but the definition is removed or the function name is changed after editing f2, they don't work together anymore.&amp;lt;br/&amp;gt;Thus, locking files by itself does not provide security against such deliberate changes. Lot of manual synchronization is needed to avoid such situations which is only going to cause delay in the development of the project.&lt;br /&gt;
&lt;br /&gt;
==Use of version control in other areas ==&lt;br /&gt;
&lt;br /&gt;
Now a days, many document editing softwares have adopted version control. Wikis, GoogleDoc, Microsoft Office and OpenOffice.org suite are some example softwares that can save previous document editing history. &lt;br /&gt;
&lt;br /&gt;
==Other considerations==&lt;br /&gt;
&lt;br /&gt;
Most open source softwares have [http://linuxmafia.com/faq/Apps/vcs.html distributions for Linux] OS. In most open source cases, Linux and windows versions are released concurrently. &lt;br /&gt;
Many VCS' have plugins for common IDEs like Eclipse, Visual Studio, Oracle JDeveloper etc. NetBeans IDE and Xcode has integrated version control support.&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Additional References==&lt;br /&gt;
&lt;br /&gt;
1. [http://subversion.apache.org/news.html#news-20100217.  Apache Software Foundation Announcements, &amp;quot;Subversion becomes Apache Subversion&amp;quot;.(2010-02-17) Accessed:September 2010 ]&lt;br /&gt;
&lt;br /&gt;
2. [http://svnbook.red-bean.com/ Ben Collins-Sussman, Brian W. Fitzpatrick, C. Michael Pilato. &amp;quot;Version Control with Subversion&amp;quot;, an O'Reilly book available online. Accessed:September 2010] &lt;br /&gt;
&lt;br /&gt;
3. [http://shop.oreilly.com/product/9781565921177.do Don Bolinger, Tan Bronson: Applying RCS and SCCS. O'Reilly Media. ISBN:978-1-56592-117-7]  &lt;br /&gt;
&lt;br /&gt;
4. [http://www.ericsink.com/scm/source_control.html  Eric Sink: A collection of articles on source control and best practices, Accessed:September 2010]&lt;br /&gt;
&lt;br /&gt;
5. [http://basepath.com/aup/talks/SCCS-Slideshow.pdf  M. J. Rochkind: The Source Code Control System.] In IEEE Transactions on Software Engineering SE-1:4 (Dec. 1975), pages 364–370.&lt;br /&gt;
&lt;br /&gt;
6. [http://onlinelibrary.wiley.com/doi/10.1002/bltj.2039/pdf Martin, Robert L. (2002). &amp;quot;Software configuration management for the 21st century&amp;quot;. Bell Labs technical journal, Volume 2, Issue 1, page- 154.]&lt;br /&gt;
&lt;br /&gt;
7. Mike Mason; Pragmatic Version Control Using Subversion; Pragmatic Bookshelf; ISBN 0-9745140-6-3 (1st edition, paperback, 2005)&lt;br /&gt;
&lt;br /&gt;
8. [http://www.ibm.com/developerworks/aix/library/au-dist_ver_control/ Noah Gift,Adam Shand: Introduction to distributed version control systems (compare how to use Bazaar, Mercurial, and Git) (Apr 2009), IBM Technical Library, Accessed:September 2010 ] &lt;br /&gt;
&lt;br /&gt;
9.[http://onlinelibrary.wiley.com/doi/10.1002/spe.4380150703/abstract Walter F. Tichy; Rcs - a system for version control; In Software: Practice and Experience. Volume 15, Issue 7,(July 1985) pages 637–654 ]&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
[http://en.wikipedia.org/wiki/Revision_control Wikipedia: Revision control]&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/List_of_revision_control_software Wikipedia: List of revision control software]&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Comparison_of_revision_control_software Wikipedia: Detail comparison of revision control softwares]&lt;br /&gt;
&lt;br /&gt;
[http://www.nongnu.org/cvs/ CVS webpage]&lt;br /&gt;
&lt;br /&gt;
[http://www.cs.vu.nl/~dick/  Dick Grune's website on CVS history]&lt;br /&gt;
&lt;br /&gt;
[http://groups.google.com/group/mod.sources/msg/2ebab72ac0744fb8?dmode=source The original usenet post on CVS] archived at google groups.&lt;br /&gt;
&lt;br /&gt;
[http://linuxmafia.com/faq/Apps/vcs.html Linux availability of various version control softwares]&lt;/div&gt;</summary>
		<author><name>Rchakar</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch1_1w1_rk&amp;diff=62947</id>
		<title>CSC/ECE 517 Fall 2012/ch1 1w1 rk</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch1_1w1_rk&amp;diff=62947"/>
		<updated>2012-09-08T01:24:01Z</updated>

		<summary type="html">&lt;p&gt;Rchakar: /* Git (Version control)http://en.wikipedia.org/wiki/Git_(software) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
A [http://en.wikipedia.org/wiki/Revision_control version control] system '''(VCS)''' is a process for managing software codes,files and directory structures and corresponding updates made to them during software development, web development etc. project or during subsequent project maintenances. Version control is also known as revision control, source control or [http://en.wikipedia.org/wiki/Software_configuration_management software configuration management] (SCM)[6].&lt;br /&gt;
&lt;br /&gt;
Any software development project is a dynamic and fast paced environment. In a typical setting, development for a project is performed simultaneously by many developers. Thus, incorporating all the changes made, either simultaneously or at different times, poses a new type of challenge. &lt;br /&gt;
&lt;br /&gt;
This wikibook chapter focuses mainly on the development history of different version control systems.&lt;br /&gt;
&lt;br /&gt;
==Why version control systems are needed?==&lt;br /&gt;
The major issues in a dynamic development environment can be described as:&lt;br /&gt;
* Obviously, '''merging''' of a lot of files. If we consider somebody to do merging manually, The sheer volume of communication required is overwhelming. This communication can be among the developers themselves in a small team or between the team leader in charge of merging and the rest of the group.&lt;br /&gt;
&lt;br /&gt;
* '''Accountability:''' if one of the developers breaks the code flow during development, It is tough to detect and naturally nobody steps forward to take the blame. A version control system can precisely indicate who caused the break in the code.&lt;br /&gt;
&lt;br /&gt;
* If a certain code implementation doesn't work as expected, '''Reverting''' to last satisfactory state may be required. &lt;br /&gt;
&lt;br /&gt;
* Development on stale code may result in '''Code loss'''. for example, two developers downloaded a certain file at 10AM. One of the developers modified foo_1() method and uploaded modified file at 10:30AM.The other developer modified foo_2() method and uploaded the same file at 10:45AM. Since the functions are in the same file, the second upload will overwrite the file uploaded by first developer at 10:30AM causing loss of his part of work.    &lt;br /&gt;
&lt;br /&gt;
* Even a lone coder might need to '''review''' why he or she made a certain change in code. Comments during code check-in can be a useful resource in such situation. &lt;br /&gt;
&lt;br /&gt;
* Version control provides a form of '''documentation''' which makes tracking easy. i.e.-'''tagging''' is a kind of snapshot of all files and documents at a particular stage of development, usually during a stable release. This allows the developers to work with the exact files that were included in that release for bug-fixing purpose. &lt;br /&gt;
&lt;br /&gt;
* '''Sandboxing / Branching:''' Version control makes it possible to perform temporary code changes in an isolated area, usually in branch folder, for testing purpose. If the outcome is satisfactory then the code can be merged with the existing code, otherwise it can be discarded without having any impact on the main code.&lt;br /&gt;
&lt;br /&gt;
* Now a days, software development teams are spread across different countries and work at different time zones. Use of a version control system for project aggregation becomes unavoidable.&lt;br /&gt;
 &lt;br /&gt;
==Evolution of version control systems==&lt;br /&gt;
&lt;br /&gt;
VCS' can be broadly categorized into three groups based on the repository model. The sequence below follows the evolution of version control systems as well: &lt;br /&gt;
&lt;br /&gt;
==='''Local repository model''' &amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Source_Code_Control_System&amp;lt;/ref&amp;gt;===&lt;br /&gt;
Local version control systems had one storage location of the files. It was called local because it didn't support networked commands or access like the other later softwares. So, all the developers had to use same computer system to access or modify files.  &lt;br /&gt;
&lt;br /&gt;
===='''Source Code Control System (SCCS)'''&amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Source_Code_Control_System&amp;lt;/ref&amp;gt;==== &lt;br /&gt;
It is one of the pioneer source code revision softwares.[5] SCCS was developed at Bell Labs in 1972 by Marc J. Rochkind. Although it was originally developed for OS/MVT, SCCS was included in [http://en.wikipedia.org/wiki/Source_Code_Control_System some UNIX distributions.] SCCS ruled as the dominant VCS until ''Revision Control System'' was released.&lt;br /&gt;
:SCCS was the dominant version control system for Unix until the release of the [http://en.wikipedia.org/wiki/Revision_Control_System Revision Control System (RCS)]. Today, SCCS is generally considered obsolete. However, its file format is still used internally by a few other revision control programs, including [http://en.wikipedia.org/wiki/BitKeeper BitKeeper] and [http://en.wikipedia.org/wiki/TeamWare TeamWare]. The latter is a frontend to SCCS. [http://en.wikipedia.org/wiki/Sablime Sablime] has been developed from a modified version of SCCS but uses a history file format that is incompatible with SCCS. The SCCS file format uses a storage technique called [http://en.wikipedia.org/wiki/Interleaved_deltas interleaved deltas] (or the weave). This storage technique is now considered by many [http://en.wikipedia.org/wiki/Revision_control revision control] system developers as foundational to advanced merging and versioning techniques, such as the &amp;quot;Precise [http://en.wikipedia.org/wiki/Codeville Codeville]&amp;quot; (&amp;quot;pcdv&amp;quot;) merge.&lt;br /&gt;
:'''What does a source code control system do?'''&lt;br /&gt;
:If you are creating or maintaining a text file---perhaps a document, or a script, or a program---a source code control system can do several things for you:&lt;br /&gt;
:*It can keep track of the changes made to the file: what was changed, when it was changed, and by whom.&lt;br /&gt;
:*It provides a version numbering scheme so you can tell which versions of a file are more recent.&lt;br /&gt;
:*It can retrieve previous versions of your file, so that you can retreat to an older version if you decide that the current version is a bad idea, or if you want to see some text that has since been changed or deleted.&lt;br /&gt;
:*If you accidentally delete the current file, you can get back the last version.&lt;br /&gt;
:*If several people are working with the same file, a source code control system can help you coordinate your work and keep track of who did what, and when.&lt;br /&gt;
&lt;br /&gt;
SCCS is also known for the &amp;lt;code&amp;gt;sccsid&amp;lt;/code&amp;gt; string, for example:&lt;br /&gt;
&lt;br /&gt;
 static char sccsid[] = &amp;quot;@(#)ls.c        8.1 (Berkeley) 6/11/93&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
This string contains the file name, date, and can also contain a comment. After compilation, this string can be found in binary and object files by looking for the pattern &amp;quot;@(#)&amp;quot; and can be used determine which source code files were used during compilation.&lt;br /&gt;
&lt;br /&gt;
===='''Control System(RCS)'''&amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Revision_Control_System Revision&amp;lt;/ref&amp;gt;==== &lt;br /&gt;
It automated storing, retrieval, logging, identification, and merging frequent revisions of texts. RCS was first released in 1982 by Walter F. Tichy as an alternative to SCCS. It quickly gained popularity and almost replaced SCCS.[9] &lt;br /&gt;
:RCS performed better by storing the most recent copy of file and then storing only reverse differences called &amp;quot;deltas&amp;quot;.One of the shortcomings of RCS was that only one person at a time could edit the file. RCS could manage only single files, not a whole project or directory.&lt;br /&gt;
:Ref.[3] is a comprehensive book on CSSC and RCS.&lt;br /&gt;
&lt;br /&gt;
==='''Client-server model'''===&lt;br /&gt;
The [http://en.wikipedia.org/wiki/Client%E2%80%93server_model client-server model] utilizes a single centralized repository for the version control which is accessible to the developers through network or internet. The below diagram [http://svnbook.red-bean.com/en/1.7/svn.basic.version-control-basics.html] provides a high level overview of the model.&lt;br /&gt;
[[Image:Client_Server_Model.png |center|]]&lt;br /&gt;
===='''Concurrent Versions System (CVS)'''&amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Concurrent_Versions_System&amp;lt;/ref&amp;gt;====&lt;br /&gt;
It was one of the early client-server model based scheme. Dick Grune started developing CVS from 1984-1985 to allow his students to collaborate in a project according to their schedule. CVS was publicly released at 1986.The main improvement for CVS over RCS was that CVS could manage the whole project while RCS could only work on a file at a time.At the beginning, CVS was script based and called RCS at background. Later it was developed into a full fledged program. A lot of the IDE's (Emacs, Eclipse/aptana,Netbeans, Komodo, PHPEdit etc.) support CVS. CVSNT is a cross platform port of CVS with some modification. CVS, which was the defacto standard for version controlling for a long time is almost replaced today by SVN. There were many disadvantages of CVS which hindered its stay in the industry further. Prominent ones were&lt;br /&gt;
#CVS check-in is not an [http://en.wikipedia.org/wiki/Atomic_commit atomic] operation. For example, given the files 1.c, 2.c, 3.c, 4.c and if someone runs '''cvs ci 1.c 3.c''' and someone else runs cvs update at the same time, the person running update might get only the change to `3.c' and not the change to `1.c'. So, if check-in process was disturbed, it could result in damage of existing project at repository.&lt;br /&gt;
#CVS only tracks modification on a file-by-file basis.&lt;br /&gt;
#CVS was designed with only text files in mind. No native support for other formats. Extensive modification are necessary at the client and the server to support other file types.&lt;br /&gt;
#Conflict resolution in CVS, if not absent, is definitely not good. Conflict markers used in CVS may go unnoticed and those file might find their way into the repository.&lt;br /&gt;
#Slow&lt;br /&gt;
&lt;br /&gt;
===='''Subversion (SVN)'''&amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Subversion_%28software%29&amp;lt;/ref&amp;gt;==== &lt;br /&gt;
As the complexity of projects increased, the shortcomings of CVS became more and more prominent. This led to the development of Subversion. CollabNet started developing svn as a successor of CVS with added [http://en.wikipedia.org/wiki/Subversion_(software)#Features functionality][2][7]. Different open source projects (i.e.-[http://en.wikipedia.org/wiki/Apache_Software_Foundation Apache Software  Foundation],[http://en.wikipedia.org/wiki/Ruby_(programming_language) Ruby],[http://en.wikipedia.org/wiki/SourceForge SourceForge],[http://en.wikipedia.org/wiki/Tigris.org Tigris.org], [http://en.wikipedia.org/wiki/PHP PHP],  [http://en.wikipedia.org/wiki/Python_(programming_language) Python] and [http://en.wikipedia.org/wiki/MediaWiki MediaWiki]) use Subversion. Subversion is an open source software due to it's Apache license[1].&lt;br /&gt;
[[Image:Subversion_project_visualization.svg.png|650px|thumb|center|Visualization of a very simple Subversion project. Source:wikimedia commons, Explanation of terms can be found at http://en.wikipedia.org/wiki/Apache_Subversion, &amp;quot;Branching and tagging&amp;quot; and at http://en.wikipedia.org/wiki/Revision_control, #&amp;quot;Common vocabulary&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Features:''' &amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Apache_Subversion#Features&amp;lt;/ref&amp;gt;&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Commit_(data_management) Commits] as true [http://en.wikipedia.org/wiki/Atomicity_(database_systems) atomic operations] (interrupted commit operations in CVS would cause repository inconsistency or corruption).&lt;br /&gt;
* Renamed/copied/moved/removed files retain full revision history.&lt;br /&gt;
* The system maintains [http://en.wikipedia.org/wiki/Software_versioning versioning] for directories, renames, and file [http://en.wikipedia.org/wiki/Metadata metadata] (but not for timestamps). Users can move and/or copy entire directory-trees very quickly, while retaining full revision history.&lt;br /&gt;
* Versioning of [http://en.wikipedia.org/wiki/Symbolic_link symbolic link]s.&lt;br /&gt;
* Native support for binary files, with space-efficient binary-diff storage.&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Apache_HTTP_Server Apache HTTP Server] as network server, [http://en.wikipedia.org/wiki/WebDAV WebDAV]/[http://en.wikipedia.org/wiki/WebDAV#Extensions_and_derivatives Delta-V] for protocol. There is also an independent server [http://en.wikipedia.org/wiki/Process_(computing) process] called svnserve that uses a custom protocol over [http://en.wikipedia.org/wiki/Internet_Protocol_Suite TCP/IP].&lt;br /&gt;
* Branching as a cheap operation, independent of file size (though Subversion itself does not distinguish between a branch and a directory)&lt;br /&gt;
* Natively [http://en.wikipedia.org/wiki/Client%E2%80%93server_model client–server], [http://en.wikipedia.org/wiki/Abstraction_layer layered] [http://en.wikipedia.org/wiki/Library_(computing) library] design.&lt;br /&gt;
* Client/server protocol sends diffs in both directions.&lt;br /&gt;
* Costs proportional to change size, not to data size.&lt;br /&gt;
* Parsable output, including XML log output.&lt;br /&gt;
* Open source licensed — Apache License in the projected 1.7 release; prior versions use a derivative of the Apache Software License, v1.1&lt;br /&gt;
* Internationalized program messages.&lt;br /&gt;
* File locking for unmergeable files (&amp;quot;reserved checkouts&amp;quot;).&lt;br /&gt;
* Path-based authorization.&lt;br /&gt;
* Language bindings for C#, PHP, Python, Perl, Ruby, and Java.&lt;br /&gt;
* Full MIME support — users can view or change the MIME type of each file, with the software knowing which MIME types can have their differences from previous versions shown.&lt;br /&gt;
* Merge tracking - Merges between branches will be tracked, this allows automatically merging between branches without telling Subversion what (doesn't) need to be merged.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=====Eclipse Subversive - Subversion (SVN) Team Provider&amp;lt;ref&amp;gt;http://www.eclipse.org/subversive/&amp;lt;/ref&amp;gt;=====&lt;br /&gt;
The Subversive project is aimed to integrate the Subversion (SVN) version control system with the Eclipse platform. Using the Subversive plug-in, you can work with projects stored in Subversion repositories directly from the Eclipse workbench in a way similar to work with other Eclipse version control providers, such as CVS and Git.&lt;br /&gt;
&lt;br /&gt;
'''Subversive Features''': Subversive plug-in provides access to Subversion repositories from the Eclipse workbench.&lt;br /&gt;
&lt;br /&gt;
*'''Full-Scale SVN Client'''&lt;br /&gt;
:Subversive is designed to be used as a full-featured SVN client, so you can update, commit, merge changes, work with SVN properties, view change history and perform other operations with SVN directly from the Eclipse environment.&lt;br /&gt;
   	&lt;br /&gt;
*'''Advanced SVN Features'''&lt;br /&gt;
:Subversive includes several features that extend functionality of the standard SVN client. In particular, Subversive can show the SVN repository content grouped by the logical structures of trunk, branch and tag and display changes on a visual revisions graph.&lt;br /&gt;
&lt;br /&gt;
*'''Seamless Integration with Eclipse'''&lt;br /&gt;
:Subversive is an official Eclipse project and an integral part of Eclipse Simultaneous releases. The project follows all Eclipse guidelines and requirements to deliver a quality SVN team provider plug-in similar to CVS and Git implementations.&lt;br /&gt;
   	&lt;br /&gt;
*'''Support of the Latest SVN Versions'''&lt;br /&gt;
:Subversive evolves together with the Subversion project to provide Eclipse users with the features that appeared in new versions of the SVN implementation. You can use the new SVN functionality in Eclipse by installing the Early Access version of Subversive.&lt;br /&gt;
&lt;br /&gt;
===='''Configuration Management Version Control (CMVC)'''&amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/IBM_Configuration_Management_Version_Control_(CMVC)&amp;lt;/ref&amp;gt;==== &lt;br /&gt;
It was developed by IBM Corporation in the mid-late 1990s and was derived in part from software purchased from HP and from IBM's internal-use-only system, IDSS. CMVC was superseded by IBM Rational ClearCase and ClearQuest. The system was used to manage the IBM OS/2 and IBM AIX source code repositories in the 1990s. It is still widely used within IBM by various teams. &lt;br /&gt;
&lt;br /&gt;
One of the drawbacks of CMVC is that, once a file is checked-out by a user, it remains locked to all the other users until the either the new version is checked-in or the lock is released explicitly by the owner (user) of the lock. Some proprietary client-server based version control softwares are:&lt;br /&gt;
::*[http://en.wikipedia.org/wiki/Autodesk_Vault Autodesk Vault] was specifically developed for Autodesk applications.&lt;br /&gt;
::*[http://en.wikipedia.org/wiki/IBM_Rational_ClearCase ClearCase] was developed by IBM Rational Software. It's a Source Code Control (SCC) compliant software.&lt;br /&gt;
::*[http://en.wikipedia.org/wiki/Visual_SourceSafe Visual SourceSafe] is developed by Microsoft targeting small development team.&lt;br /&gt;
::*[http://en.wikipedia.org/wiki/Visual_Studio_Team_System Visual Studio Team System] is also developed by Microsoft targeting larger groups.&lt;br /&gt;
&lt;br /&gt;
===Distributed model===&lt;br /&gt;
'''Distributed Version Control (DVCS)''', or '''Decentralized Version Control''' systems can have many central repositories.This is a peer to peer approach. The concept started developing at late 90's. In DVCS. Each developer works with his or her local repository and the changes are synchronized between repositories upon commit. DVCS are better suited for large teams with partially independent developers. i.e.- opensource software development.[8]&lt;br /&gt;
#[http://en.wikipedia.org/wiki/Monotone_%28software%29 Monotone] and [http://en.wikipedia.org/wiki/GNU_arch GNU arch]  were the first generation DVCS (release:2001-2003) followed by [http://en.wikipedia.org/wiki/Darcs Darcs] (stable release:2010).[http://en.wikipedia.org/wiki/Mercurial Mercurial] , [http://en.wikipedia.org/wiki/Git_%28software%29 Git] and [http://en.wikipedia.org/wiki/Bazaar_%28software%29 Bazaar] (2005-2007) are well adopted among developers.   &lt;br /&gt;
#[http://en.wikipedia.org/wiki/BitKeeper BitKeeper],[http://en.wikipedia.org/wiki/Code_Co-op Code Co-op], [http://en.wikipedia.org/wiki/Sun_WorkShop_TeamWare Sun WorkShop TeamWare] are some proprietary DVCS softwares.&lt;br /&gt;
&lt;br /&gt;
It should be noted that many distributed version control softwares support client-server model too.One of the benefits of DVCS is that a developer can save the source code as long as he wants even if the central repository (in client-server model) is discarded at the end of a project.&lt;br /&gt;
&lt;br /&gt;
[[Image:timeline.jpg|650px|thumb|center|A generalized timeline. Source:http://pg-server.csc.ncsu.edu/mediawiki/index.php/CSC/ECE_517_Fall_2009/wiki1a_5_History_of_version_control_by_av]]&lt;br /&gt;
&lt;br /&gt;
====Git (Version control)&amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Git_(software)&amp;lt;/ref&amp;gt;====&lt;br /&gt;
[[Image:220px-Git_data_flow_simplified.png|650px|thumb|right|Some data flows and storage levels in the Git revision control system.]]&lt;br /&gt;
Git development began after many Linux kernel developers chose to give up access to BitKeeper, a proprietary SCM system that had previously been used to maintain the project. The copyright holder of BitKeeper, Larry McVoy, had withdrawn free use of the product after he claimed that Andrew Tridgell had reverse-engineered the BitKeeper protocols.&lt;br /&gt;
&lt;br /&gt;
Git was created by [http://en.wikipedia.org/wiki/Linus_Torvalds Linus Torvalds] (the founder of Linux) because he really didn’t like Concurrent Versions System (CVS), which, at the time, was the most popular version control system. Torvalds wanted something to help keep versions of the kernel he was working on and he figured that he would have to build a system of his own.&lt;br /&gt;
&lt;br /&gt;
Git is an open source project, and since Torvalds’ initial development, there have been many other primary authors and contributors to the project.&lt;br /&gt;
&lt;br /&gt;
'''Advantages of Using Git'''&lt;br /&gt;
*Git is super easy to install:&lt;br /&gt;
*Git is easier to learn compared to other systems:&lt;br /&gt;
*Git is fast:&lt;br /&gt;
*Git is decentralized:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Disadvantages of Using Git'''&lt;br /&gt;
*'''Git has a learning curve:''' It’s one of the easier version control systems to use, any new thing you introduce to your workflow will need some learning time. Learning Git will be similar to learning a new software application such as Word or Excel.&lt;br /&gt;
&lt;br /&gt;
== File Sharing Models ==&lt;br /&gt;
Every system that implement version controlling have to address one fundamental problem: How will the files in the repository be safely shared across users but prevent them from accidentally stepping on each other's feet? It's all too easy for users to accidentally overwrite each other's changes in the repository.&lt;br /&gt;
&lt;br /&gt;
Consider the scenario with two users A and B. Both of them check out the same file (same version). User A after making his modification, suppose, commits the file first. A few moments later B completes his modification. B does not have any clue about A's check-in and he happily commits his code to the repository. Now B has accidentally overwritten the changes made by A leaving the system in an inconsistent state. This problem can be solved in two different ways:&amp;lt;br/&amp;gt;&lt;br /&gt;
* Lock-Modify-Unlock&lt;br /&gt;
* Copy-Modify-Merge &amp;lt;br/&amp;gt;&lt;br /&gt;
While CMVC follows the lock-modify-unlock solution, svn follows copy-modify-merge allowing users to modify the same piece of code concurrently. &amp;lt;br/&amp;gt;&lt;br /&gt;
The problem with the lock-modify-unlock model is that it's a bit restrictive and often becomes a roadblock for users:&lt;br /&gt;
&lt;br /&gt;
* Locking may cause unnecessary delay and is not desired when it comes to teams/projects which have a small cycle time between releases. For example: Suppose say, user A checks out a file (locks it) and some interrupt in his work causes him to switch to another task of higher priority. There is a possibility that he forgets completely about the file that he checked out. Now, if another user B wants to edit the same file, he cannot do so, without having the administrator unlock the file for him, his hands are tied!&lt;br /&gt;
&lt;br /&gt;
* Locking may cause unnecessary serialization: What if two different users A and B want to edit different non-intersecting portions of the same file? With proper merging solution in place, they could have done it easily without bothering about what the other user does with the file.&lt;br /&gt;
&lt;br /&gt;
* Locking may create a false sense of security: As with any model, lock-modify-unlock approach too allows two different users to work on separate files simultaneously. However the model does not define how dependencies between files are dealt with.&amp;lt;br/&amp;gt;For example: Suppose A locks and edits file f1, while B simultaneously locks and edits file f2. If there is a function call in f1 whose definition exists in f2 but the definition is removed or the function name is changed after editing f2, they don't work together anymore.&amp;lt;br/&amp;gt;Thus, locking files by itself does not provide security against such deliberate changes. Lot of manual synchronization is needed to avoid such situations which is only going to cause delay in the development of the project.&lt;br /&gt;
&lt;br /&gt;
==Use of version control in other areas ==&lt;br /&gt;
&lt;br /&gt;
Now a days, many document editing softwares have adopted version control. Wikis, GoogleDoc, Microsoft Office and OpenOffice.org suite are some example softwares that can save previous document editing history. &lt;br /&gt;
&lt;br /&gt;
==Other considerations==&lt;br /&gt;
&lt;br /&gt;
Most open source softwares have [http://linuxmafia.com/faq/Apps/vcs.html distributions for Linux] OS. In most open source cases, Linux and windows versions are released concurrently. &lt;br /&gt;
Many VCS' have plugins for common IDEs like Eclipse, Visual Studio, Oracle JDeveloper etc. NetBeans IDE and Xcode has integrated version control support.&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Additional References==&lt;br /&gt;
&lt;br /&gt;
1. [http://subversion.apache.org/news.html#news-20100217.  Apache Software Foundation Announcements, &amp;quot;Subversion becomes Apache Subversion&amp;quot;.(2010-02-17) Accessed:September 2010 ]&lt;br /&gt;
&lt;br /&gt;
2. [http://svnbook.red-bean.com/ Ben Collins-Sussman, Brian W. Fitzpatrick, C. Michael Pilato. &amp;quot;Version Control with Subversion&amp;quot;, an O'Reilly book available online. Accessed:September 2010] &lt;br /&gt;
&lt;br /&gt;
3. [http://shop.oreilly.com/product/9781565921177.do Don Bolinger, Tan Bronson: Applying RCS and SCCS. O'Reilly Media. ISBN:978-1-56592-117-7]  &lt;br /&gt;
&lt;br /&gt;
4. [http://www.ericsink.com/scm/source_control.html  Eric Sink: A collection of articles on source control and best practices, Accessed:September 2010]&lt;br /&gt;
&lt;br /&gt;
5. [http://basepath.com/aup/talks/SCCS-Slideshow.pdf  M. J. Rochkind: The Source Code Control System.] In IEEE Transactions on Software Engineering SE-1:4 (Dec. 1975), pages 364–370.&lt;br /&gt;
&lt;br /&gt;
6. [http://onlinelibrary.wiley.com/doi/10.1002/bltj.2039/pdf Martin, Robert L. (2002). &amp;quot;Software configuration management for the 21st century&amp;quot;. Bell Labs technical journal, Volume 2, Issue 1, page- 154.]&lt;br /&gt;
&lt;br /&gt;
7. Mike Mason; Pragmatic Version Control Using Subversion; Pragmatic Bookshelf; ISBN 0-9745140-6-3 (1st edition, paperback, 2005)&lt;br /&gt;
&lt;br /&gt;
8. [http://www.ibm.com/developerworks/aix/library/au-dist_ver_control/ Noah Gift,Adam Shand: Introduction to distributed version control systems (compare how to use Bazaar, Mercurial, and Git) (Apr 2009), IBM Technical Library, Accessed:September 2010 ] &lt;br /&gt;
&lt;br /&gt;
9.[http://onlinelibrary.wiley.com/doi/10.1002/spe.4380150703/abstract Walter F. Tichy; Rcs - a system for version control; In Software: Practice and Experience. Volume 15, Issue 7,(July 1985) pages 637–654 ]&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
[http://en.wikipedia.org/wiki/Revision_control Wikipedia: Revision control]&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/List_of_revision_control_software Wikipedia: List of revision control software]&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Comparison_of_revision_control_software Wikipedia: Detail comparison of revision control softwares]&lt;br /&gt;
&lt;br /&gt;
[http://www.nongnu.org/cvs/ CVS webpage]&lt;br /&gt;
&lt;br /&gt;
[http://www.cs.vu.nl/~dick/  Dick Grune's website on CVS history]&lt;br /&gt;
&lt;br /&gt;
[http://groups.google.com/group/mod.sources/msg/2ebab72ac0744fb8?dmode=source The original usenet post on CVS] archived at google groups.&lt;br /&gt;
&lt;br /&gt;
[http://linuxmafia.com/faq/Apps/vcs.html Linux availability of various version control softwares]&lt;/div&gt;</summary>
		<author><name>Rchakar</name></author>
	</entry>
</feed>