<?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=Quick+Gun+Murugan</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=Quick+Gun+Murugan"/>
	<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=Special:Contributions/Quick_Gun_Murugan"/>
	<updated>2026-05-26T00:21:16Z</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_2009/wiki3_12_Patterns_for_ORM&amp;diff=29812</id>
		<title>CSC/ECE 517 Fall 2009/wiki3 12 Patterns for ORM</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_12_Patterns_for_ORM&amp;diff=29812"/>
		<updated>2009-11-22T04:03:21Z</updated>

		<summary type="html">&lt;p&gt;Quick Gun Murugan: /* '''References''' */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=='''Overview'''==&lt;br /&gt;
[http://en.wikipedia.org/wiki/Object-relational_mapping Object-relational mapping] is not trivial. Apart from being based on [http://en.wikipedia.org/wiki/Software_engineering Software Engineering] principles like [http://en.wikipedia.org/wiki/Coupling_(computer_science) coupling], [http://en.wikipedia.org/wiki/Cohesion_(computer_science) cohesion] and [http://en.wikipedia.org/wiki/Polymorphism_in_object-oriented_programming polymorphism], the object paradigm focuses on building applications out of objects that have both data and behavior. However, the relational paradigm is based on mathematical principles and focuses primarily on storing data. If only data objects were to be mapped to the relational database the procedure would have been fairly straightforward. With the growing complexities of object models, concepts like [http://en.wikipedia.org/wiki/Aggregation_(object-oriented_programming) aggregation], [http://en.wikipedia.org/wiki/Inheritance_(object-oriented_programming) inheritance], [http://en.wikipedia.org/wiki/Polymorphism_in_object-oriented_programming polymorphism], association between classes, and data type (smarted than [http://en.wikipedia.org/wiki/SQL SQL] data types) have to be mapped to relational table structure. The table below highlights the fundamental mismatch between object oriented data model and relational data storage.&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;4&amp;quot; width=&amp;quot;50%&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Object Oriented Data Model'''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Relational Database Management System'''&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Class&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Table&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Object&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Row&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Entity&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Key&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|State&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Data&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Behavior&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Transactions&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Inheritance&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Data Relationships&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=='''[http://docs.jboss.org/hibernate/core/3.3/reference/en/html/inheritance.html Inheritance Mapping]'''==&lt;br /&gt;
[http://en.wikipedia.org/wiki/Inheritance_(object-oriented_programming) Inheritance] in [http://en.wikipedia.org/wiki/Object-oriented_design Object Oriented Design] makes it difficult to map between object and relation databases. In this pattern, there is mapper class for each domain class that will save and load data for the domain class [8]. Mapper class allows both abstract and concrete classes to handle their own O/R mapping[8].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  [[Image:wiki_3_12.jpg]]                         [[Image:Wiki_3_12_2.jpg]]&lt;br /&gt;
    Figure 1: Domain Class                                            Figure 2: Mapper Class&lt;br /&gt;
&lt;br /&gt;
For example: - To find an employee “John”.&lt;br /&gt;
Figure 1 represents the  Employee Domain class and Figure 2 represents the corresponding Mapper Class.&lt;br /&gt;
Application calls find () method on concrete mapper object and instantiate a new Executive object. The find () will pass this executive object and database record to load () of Executive. This in turn will call the load () of Superclass. When all loads return, find returns the filled object.&lt;br /&gt;
Mappers loading and saving the domain objects is determined by the inheritance mapping. This inheritance hierarchy is represented in the database as follows:- &lt;br /&gt;
*Single Table Inheritance&lt;br /&gt;
*Class Table Inheritance &lt;br /&gt;
*Concrete Table Inheritance&lt;br /&gt;
Choosing a mapping scheme depends on speed requirement, whether database is shared and type of [http://en.wikipedia.org/wiki/Relational_database_management_system RDBMS]. &lt;br /&gt;
&lt;br /&gt;
==='''Single Table Inheritance'''===&lt;br /&gt;
Inheritance Hierarchy of all classes is represented as single table. The columns of this table will have fields of all classes in the hierarchy. Advantage of this Inheritance is that there is one table and requires no join while retrieving data. But it could lead to large confusing table and name conflicts.&lt;br /&gt;
  [[Image:wiki_3_12.jpg]]                         [[Image:Wiki_3_12_3_a.jpg]]&lt;br /&gt;
    Figure 3: Domain Class                                            Figure 4: Single Table Inheritance&lt;br /&gt;
&lt;br /&gt;
==='''Class Table Inheritance '''===&lt;br /&gt;
One table for each class is constructed. The advantage of this table inheritance is that there is clear relationship between class and table. There is high normalization. But multiple tables requires join and when fields move up and down in hierarchy, it requires changes in the tables.&lt;br /&gt;
&lt;br /&gt;
 [[Image:wiki_3_12.jpg]]                         [[Image:Wiki_3_12_4_.jpg]]&lt;br /&gt;
       Figure 5: Domain Class                           Figure 6: Class Table Inheritance&lt;br /&gt;
&lt;br /&gt;
==='''Concrete Table Inheritance'''===&lt;br /&gt;
In this hierarchy there is one table per concrete class. The table are independent, requires no join and there is no unused fields.&lt;br /&gt;
 [[Image:wiki_3_12.jpg]]                         [[Image:Wiki_3_12_5.jpg]]&lt;br /&gt;
       Figure 6: Domain Class                           Figure 7: Concrete Table Inheritance&lt;br /&gt;
&lt;br /&gt;
The strengths and weaknesses of each approach are compared below:&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;4&amp;quot; width=&amp;quot;70%&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Factors to Consider'''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''One table per hierarchy'''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''One table per concrete class'''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''One table per class'''&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Ad hoc reporting&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Simple&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Medium&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Medium/Difficult&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Ease of implementation&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Simple&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Medium&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Difficult&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Ease of data access&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Simple&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Simple&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Medium/Simple&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Coupling&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Very High&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|High&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Low&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Speed of data access&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Fast&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Fast&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Medium/Fast&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Support for polymorphism&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Medium&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Low&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|High&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=='''[http://en.wikipedia.org/wiki/Association_(object-oriented_programming) Association] Mapping'''==&lt;br /&gt;
The [http://en.wikipedia.org/wiki/Foreign_key Foreign key] is used to maintain relationships in relational databases. A row in one table can relate to a row in another table using foreign key. Therefore to implement relationships, a key of one table must include in the other table [4].&lt;br /&gt;
==='''One-to-one mapping'''===&lt;br /&gt;
If one record in Table A corresponds to exactly one row in Table B, this relationship is called One – to-one relationships [10].  In Figure 6, the address attribute of an employee class forms a one-to-one relation with the address class. In database, this relationship is stored by creating one-to- one mapping between these two objects by storing the id of Address instance in the Employee table instance is written [11]. When the employee is read form database, the address instance is linked to Employee. Here, the mapping is from Employee to Address.&lt;br /&gt;
                               [[Image:Wiki_3_12_6.gif]]&lt;br /&gt;
                                Figure 6: One-to-one mapping&lt;br /&gt;
&lt;br /&gt;
==='''One-to-many mapping'''===&lt;br /&gt;
If each record in Table A corresponds to many records in Table B , but each record in Table B links to only one record in Table A, this relationship is called One-to-many relationships [10].&lt;br /&gt;
In fig, a Order may have zero to many OrderItems. To represent in relational database, the Owner object’s OID can be inserted into OrderItem table [9]. Here, OID is Foreign Key. This is shown in Figure 8.&lt;br /&gt;
                   [[Image:Wiki 3 12 6.jpg]]&lt;br /&gt;
                               Figure 8 : One-to-many mapping&lt;br /&gt;
&lt;br /&gt;
==='''Many-to-many mapping'''===&lt;br /&gt;
If each record in Table A may links to many records in Table B and vice-versa [10], it’s called Many-to-Many relationships. In Figure 9, let’s consider that an employee can work more than one department and department can contain more than one employee.&amp;lt;br&amp;gt;&lt;br /&gt;
The Many-to-Many relationships is represented in term of association table.  A separate table called association table is created that contains the foreign keys of participating tables [9].&lt;br /&gt;
                          [[Image:Wiki 3 12 7.jpg]]&lt;br /&gt;
                               Figure 9 : Many-to-many mapping&lt;br /&gt;
&lt;br /&gt;
=='''[http://en.wikipedia.org/wiki/Aggregation_(object-oriented_programming) Aggregation] Mapping'''==&lt;br /&gt;
[http://en.wikipedia.org/wiki/Class_diagram#Aggregation Aggregation] is a specialized version of the association relationship. Aggregations may be mapped to relational data model either by integrating all objects' attributes into a single table or using foreign keys. &lt;br /&gt;
==='''Single table aggregation'''===&lt;br /&gt;
In this pattern the a table is created with the attributes of the Aggregating objects. The attributes of the Aggregating object is simple added to this table.&lt;br /&gt;
&lt;br /&gt;
[[Image:Index.2.png]]&lt;br /&gt;
&lt;br /&gt;
==='''Foreign key aggregation'''===&lt;br /&gt;
To achieve this create a table each for the aggregating and aggregated object. Create a foreign key reference between the two table by inserting a synthetic object identity into the aggregated objects type and reference it in the aggregating objects table.&lt;br /&gt;
&lt;br /&gt;
[[Image:Index.4.png]]&lt;br /&gt;
&lt;br /&gt;
Differences between the two approaches has been tabulated below:&amp;lt;br&amp;gt;&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;4&amp;quot; width=&amp;quot;100%&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Single Table Aggregation'''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Foreign Key Aggregation'''&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Only one table needs to be accessed to retrieve an aggregating object with all its aggregated objects. On the other hand, the fields for aggregated objects’ attributes are likely to increase the number of pages retrieved with each database access, resulting in a possible waste of I/O bandwidth.&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Needs a join operation or at least two database accesses where Single Table Aggregation needs a single database operation.&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|If the same object is aggregated in more that on one object, a change in the aggregated object would require a change in a lot of database table. This pattern thus has poor maintainability.&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Since the aggregated object has it's own table, the pattern is more maintainable and flexible.&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Aggregated objects are automatically deleted on deletion of the aggregating objects.&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Aggregated objects are not automatically deleted on deletion of the aggregating objects.&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Ad-hoc queries are very hard to formulate.&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Factoring out aggregated objects allows easy querying these tables with ad-hoc queries.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=='''Type Conversion'''==&lt;br /&gt;
There are situations when the values in the database do not map directly to object data types. Take the Boolean data type for example. Boolean values &amp;quot;true&amp;quot; and &amp;quot;false&amp;quot; may be saved as &amp;quot;T&amp;quot; and &amp;quot;F&amp;quot; respectively in the database. Type conversion should be facilitated without any data loss[2]. The figure below shows type conversion mapping.&lt;br /&gt;
[[Image:Tcmapfig.jpg]]&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
[1] http://www.objectarchitects.de/ObjectArchitects/orpatterns/&amp;lt;br&amp;gt;&lt;br /&gt;
[2] http://subs.emis.de/LNI/Proceedings/Proceedings48/GI.Band.48-6.pdf&amp;lt;br&amp;gt;&lt;br /&gt;
[3] http://www.joeyoder.com/Research/objectmappings/Persista.pdf&amp;lt;br&amp;gt;&lt;br /&gt;
[4] http://www.ibm.com/developerworks/library/ws-mapping-to-rdb/&amp;lt;br&amp;gt;&lt;br /&gt;
[5] http://www.dparsons.co.uk/mindthegap.pdf&amp;lt;br&amp;gt;&lt;br /&gt;
[6] http://proceedings.informingscience.org/InSITE2007/IISITv4p767-779Jusi281.pdf&amp;lt;br&amp;gt;&lt;br /&gt;
[7] http://www.sis.pitt.edu/~gray/INFSCI1025/references/AmblerORMMapping101Article.pdf&amp;lt;br&amp;gt;&lt;br /&gt;
[8] http://www.brettdaniel.com/files/2006/inheritancemapping.ppt&amp;lt;br&amp;gt;&lt;br /&gt;
[9] http://www.objectarchitects.de/ObjectArchitects/orpatterns/index.htm?MappingObjects2Tables/mapping_object.htm&amp;lt;br&amp;gt;&lt;br /&gt;
[10] http://databases.about.com/cs/tutorials/a/accessgup7.htm&amp;lt;br&amp;gt;&lt;br /&gt;
[11] http://www.oracle.com/technology/products/ias/toplink/doc/1013/main/_html/relmapun005.htm&amp;lt;br&amp;gt;&lt;br /&gt;
[12] http://docs.jboss.org/hibernate/core/3.3/reference/en/html/inheritance.html&amp;lt;br&amp;gt;&lt;br /&gt;
[13] http://wiki.eclipse.org/Introduction_to_Mappings_(ELUG)&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Quick Gun Murugan</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_12_Patterns_for_ORM&amp;diff=29811</id>
		<title>CSC/ECE 517 Fall 2009/wiki3 12 Patterns for ORM</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_12_Patterns_for_ORM&amp;diff=29811"/>
		<updated>2009-11-22T04:01:54Z</updated>

		<summary type="html">&lt;p&gt;Quick Gun Murugan: /* '''Type Conversion''' */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=='''Overview'''==&lt;br /&gt;
[http://en.wikipedia.org/wiki/Object-relational_mapping Object-relational mapping] is not trivial. Apart from being based on [http://en.wikipedia.org/wiki/Software_engineering Software Engineering] principles like [http://en.wikipedia.org/wiki/Coupling_(computer_science) coupling], [http://en.wikipedia.org/wiki/Cohesion_(computer_science) cohesion] and [http://en.wikipedia.org/wiki/Polymorphism_in_object-oriented_programming polymorphism], the object paradigm focuses on building applications out of objects that have both data and behavior. However, the relational paradigm is based on mathematical principles and focuses primarily on storing data. If only data objects were to be mapped to the relational database the procedure would have been fairly straightforward. With the growing complexities of object models, concepts like [http://en.wikipedia.org/wiki/Aggregation_(object-oriented_programming) aggregation], [http://en.wikipedia.org/wiki/Inheritance_(object-oriented_programming) inheritance], [http://en.wikipedia.org/wiki/Polymorphism_in_object-oriented_programming polymorphism], association between classes, and data type (smarted than [http://en.wikipedia.org/wiki/SQL SQL] data types) have to be mapped to relational table structure. The table below highlights the fundamental mismatch between object oriented data model and relational data storage.&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;4&amp;quot; width=&amp;quot;50%&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Object Oriented Data Model'''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Relational Database Management System'''&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Class&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Table&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Object&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Row&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Entity&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Key&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|State&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Data&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Behavior&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Transactions&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Inheritance&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Data Relationships&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=='''[http://docs.jboss.org/hibernate/core/3.3/reference/en/html/inheritance.html Inheritance Mapping]'''==&lt;br /&gt;
[http://en.wikipedia.org/wiki/Inheritance_(object-oriented_programming) Inheritance] in [http://en.wikipedia.org/wiki/Object-oriented_design Object Oriented Design] makes it difficult to map between object and relation databases. In this pattern, there is mapper class for each domain class that will save and load data for the domain class [8]. Mapper class allows both abstract and concrete classes to handle their own O/R mapping[8].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  [[Image:wiki_3_12.jpg]]                         [[Image:Wiki_3_12_2.jpg]]&lt;br /&gt;
    Figure 1: Domain Class                                            Figure 2: Mapper Class&lt;br /&gt;
&lt;br /&gt;
For example: - To find an employee “John”.&lt;br /&gt;
Figure 1 represents the  Employee Domain class and Figure 2 represents the corresponding Mapper Class.&lt;br /&gt;
Application calls find () method on concrete mapper object and instantiate a new Executive object. The find () will pass this executive object and database record to load () of Executive. This in turn will call the load () of Superclass. When all loads return, find returns the filled object.&lt;br /&gt;
Mappers loading and saving the domain objects is determined by the inheritance mapping. This inheritance hierarchy is represented in the database as follows:- &lt;br /&gt;
*Single Table Inheritance&lt;br /&gt;
*Class Table Inheritance &lt;br /&gt;
*Concrete Table Inheritance&lt;br /&gt;
Choosing a mapping scheme depends on speed requirement, whether database is shared and type of [http://en.wikipedia.org/wiki/Relational_database_management_system RDBMS]. &lt;br /&gt;
&lt;br /&gt;
==='''Single Table Inheritance'''===&lt;br /&gt;
Inheritance Hierarchy of all classes is represented as single table. The columns of this table will have fields of all classes in the hierarchy. Advantage of this Inheritance is that there is one table and requires no join while retrieving data. But it could lead to large confusing table and name conflicts.&lt;br /&gt;
  [[Image:wiki_3_12.jpg]]                         [[Image:Wiki_3_12_3_a.jpg]]&lt;br /&gt;
    Figure 3: Domain Class                                            Figure 4: Single Table Inheritance&lt;br /&gt;
&lt;br /&gt;
==='''Class Table Inheritance '''===&lt;br /&gt;
One table for each class is constructed. The advantage of this table inheritance is that there is clear relationship between class and table. There is high normalization. But multiple tables requires join and when fields move up and down in hierarchy, it requires changes in the tables.&lt;br /&gt;
&lt;br /&gt;
 [[Image:wiki_3_12.jpg]]                         [[Image:Wiki_3_12_4_.jpg]]&lt;br /&gt;
       Figure 5: Domain Class                           Figure 6: Class Table Inheritance&lt;br /&gt;
&lt;br /&gt;
==='''Concrete Table Inheritance'''===&lt;br /&gt;
In this hierarchy there is one table per concrete class. The table are independent, requires no join and there is no unused fields.&lt;br /&gt;
 [[Image:wiki_3_12.jpg]]                         [[Image:Wiki_3_12_5.jpg]]&lt;br /&gt;
       Figure 6: Domain Class                           Figure 7: Concrete Table Inheritance&lt;br /&gt;
&lt;br /&gt;
The strengths and weaknesses of each approach are compared below:&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;4&amp;quot; width=&amp;quot;70%&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Factors to Consider'''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''One table per hierarchy'''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''One table per concrete class'''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''One table per class'''&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Ad hoc reporting&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Simple&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Medium&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Medium/Difficult&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Ease of implementation&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Simple&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Medium&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Difficult&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Ease of data access&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Simple&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Simple&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Medium/Simple&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Coupling&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Very High&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|High&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Low&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Speed of data access&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Fast&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Fast&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Medium/Fast&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Support for polymorphism&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Medium&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Low&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|High&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=='''[http://en.wikipedia.org/wiki/Association_(object-oriented_programming) Association] Mapping'''==&lt;br /&gt;
The [http://en.wikipedia.org/wiki/Foreign_key Foreign key] is used to maintain relationships in relational databases. A row in one table can relate to a row in another table using foreign key. Therefore to implement relationships, a key of one table must include in the other table [4].&lt;br /&gt;
==='''One-to-one mapping'''===&lt;br /&gt;
If one record in Table A corresponds to exactly one row in Table B, this relationship is called One – to-one relationships [10].  In Figure 6, the address attribute of an employee class forms a one-to-one relation with the address class. In database, this relationship is stored by creating one-to- one mapping between these two objects by storing the id of Address instance in the Employee table instance is written [11]. When the employee is read form database, the address instance is linked to Employee. Here, the mapping is from Employee to Address.&lt;br /&gt;
                               [[Image:Wiki_3_12_6.gif]]&lt;br /&gt;
                                Figure 6: One-to-one mapping&lt;br /&gt;
&lt;br /&gt;
==='''One-to-many mapping'''===&lt;br /&gt;
If each record in Table A corresponds to many records in Table B , but each record in Table B links to only one record in Table A, this relationship is called One-to-many relationships [10].&lt;br /&gt;
In fig, a Order may have zero to many OrderItems. To represent in relational database, the Owner object’s OID can be inserted into OrderItem table [9]. Here, OID is Foreign Key. This is shown in Figure 8.&lt;br /&gt;
                   [[Image:Wiki 3 12 6.jpg]]&lt;br /&gt;
                               Figure 8 : One-to-many mapping&lt;br /&gt;
&lt;br /&gt;
==='''Many-to-many mapping'''===&lt;br /&gt;
If each record in Table A may links to many records in Table B and vice-versa [10], it’s called Many-to-Many relationships. In Figure 9, let’s consider that an employee can work more than one department and department can contain more than one employee.&amp;lt;br&amp;gt;&lt;br /&gt;
The Many-to-Many relationships is represented in term of association table.  A separate table called association table is created that contains the foreign keys of participating tables [9].&lt;br /&gt;
                          [[Image:Wiki 3 12 7.jpg]]&lt;br /&gt;
                               Figure 9 : Many-to-many mapping&lt;br /&gt;
&lt;br /&gt;
=='''[http://en.wikipedia.org/wiki/Aggregation_(object-oriented_programming) Aggregation] Mapping'''==&lt;br /&gt;
[http://en.wikipedia.org/wiki/Class_diagram#Aggregation Aggregation] is a specialized version of the association relationship. Aggregations may be mapped to relational data model either by integrating all objects' attributes into a single table or using foreign keys. &lt;br /&gt;
==='''Single table aggregation'''===&lt;br /&gt;
In this pattern the a table is created with the attributes of the Aggregating objects. The attributes of the Aggregating object is simple added to this table.&lt;br /&gt;
&lt;br /&gt;
[[Image:Index.2.png]]&lt;br /&gt;
&lt;br /&gt;
==='''Foreign key aggregation'''===&lt;br /&gt;
To achieve this create a table each for the aggregating and aggregated object. Create a foreign key reference between the two table by inserting a synthetic object identity into the aggregated objects type and reference it in the aggregating objects table.&lt;br /&gt;
&lt;br /&gt;
[[Image:Index.4.png]]&lt;br /&gt;
&lt;br /&gt;
Differences between the two approaches has been tabulated below:&amp;lt;br&amp;gt;&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;4&amp;quot; width=&amp;quot;100%&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Single Table Aggregation'''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Foreign Key Aggregation'''&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Only one table needs to be accessed to retrieve an aggregating object with all its aggregated objects. On the other hand, the fields for aggregated objects’ attributes are likely to increase the number of pages retrieved with each database access, resulting in a possible waste of I/O bandwidth.&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Needs a join operation or at least two database accesses where Single Table Aggregation needs a single database operation.&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|If the same object is aggregated in more that on one object, a change in the aggregated object would require a change in a lot of database table. This pattern thus has poor maintainability.&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Since the aggregated object has it's own table, the pattern is more maintainable and flexible.&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Aggregated objects are automatically deleted on deletion of the aggregating objects.&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Aggregated objects are not automatically deleted on deletion of the aggregating objects.&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Ad-hoc queries are very hard to formulate.&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Factoring out aggregated objects allows easy querying these tables with ad-hoc queries.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=='''Type Conversion'''==&lt;br /&gt;
There are situations when the values in the database do not map directly to object data types. Take the Boolean data type for example. Boolean values &amp;quot;true&amp;quot; and &amp;quot;false&amp;quot; may be saved as &amp;quot;T&amp;quot; and &amp;quot;F&amp;quot; respectively in the database. Type conversion should be facilitated without any data loss[2]. The figure below shows type conversion mapping.&lt;br /&gt;
[[Image:Tcmapfig.jpg]]&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
[1]http://www.objectarchitects.de/ObjectArchitects/orpatterns/&amp;lt;br&amp;gt;&lt;br /&gt;
[2]http://subs.emis.de/LNI/Proceedings/Proceedings48/GI.Band.48-6.pdf&amp;lt;br&amp;gt;&lt;br /&gt;
[3]http://www.joeyoder.com/Research/objectmappings/Persista.pdf&amp;lt;br&amp;gt;&lt;br /&gt;
[4]http://www.ibm.com/developerworks/library/ws-mapping-to-rdb/&amp;lt;br&amp;gt;&lt;br /&gt;
[5]http://www.dparsons.co.uk/mindthegap.pdf&amp;lt;br&amp;gt;&lt;br /&gt;
[6]http://proceedings.informingscience.org/InSITE2007/IISITv4p767-779Jusi281.pdf&amp;lt;br&amp;gt;&lt;br /&gt;
[7]http://www.sis.pitt.edu/~gray/INFSCI1025/references/AmblerORMMapping101Article.pdf&amp;lt;br&amp;gt;&lt;br /&gt;
[8]http://www.brettdaniel.com/files/2006/inheritancemapping.ppt&amp;lt;br&amp;gt;&lt;br /&gt;
[9]http://www.objectarchitects.de/ObjectArchitects/orpatterns/index.htm?MappingObjects2Tables/mapping_object.htm&amp;lt;br&amp;gt;&lt;br /&gt;
[10]http://databases.about.com/cs/tutorials/a/accessgup7.htm&amp;lt;br&amp;gt;&lt;br /&gt;
[11]http://www.oracle.com/technology/products/ias/toplink/doc/1013/main/_html/relmapun005.htm&amp;lt;br&amp;gt;&lt;br /&gt;
[12]http://docs.jboss.org/hibernate/core/3.3/reference/en/html/inheritance.html&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Quick Gun Murugan</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Tcmapfig.jpg&amp;diff=29810</id>
		<title>File:Tcmapfig.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Tcmapfig.jpg&amp;diff=29810"/>
		<updated>2009-11-22T04:00:36Z</updated>

		<summary type="html">&lt;p&gt;Quick Gun Murugan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Quick Gun Murugan</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_12_Patterns_for_ORM&amp;diff=29809</id>
		<title>CSC/ECE 517 Fall 2009/wiki3 12 Patterns for ORM</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_12_Patterns_for_ORM&amp;diff=29809"/>
		<updated>2009-11-22T03:58:06Z</updated>

		<summary type="html">&lt;p&gt;Quick Gun Murugan: /* '''Type Conversion''' */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=='''Overview'''==&lt;br /&gt;
[http://en.wikipedia.org/wiki/Object-relational_mapping Object-relational mapping] is not trivial. Apart from being based on [http://en.wikipedia.org/wiki/Software_engineering Software Engineering] principles like [http://en.wikipedia.org/wiki/Coupling_(computer_science) coupling], [http://en.wikipedia.org/wiki/Cohesion_(computer_science) cohesion] and [http://en.wikipedia.org/wiki/Polymorphism_in_object-oriented_programming polymorphism], the object paradigm focuses on building applications out of objects that have both data and behavior. However, the relational paradigm is based on mathematical principles and focuses primarily on storing data. If only data objects were to be mapped to the relational database the procedure would have been fairly straightforward. With the growing complexities of object models, concepts like [http://en.wikipedia.org/wiki/Aggregation_(object-oriented_programming) aggregation], [http://en.wikipedia.org/wiki/Inheritance_(object-oriented_programming) inheritance], [http://en.wikipedia.org/wiki/Polymorphism_in_object-oriented_programming polymorphism], association between classes, and data type (smarted than [http://en.wikipedia.org/wiki/SQL SQL] data types) have to be mapped to relational table structure. The table below highlights the fundamental mismatch between object oriented data model and relational data storage.&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;4&amp;quot; width=&amp;quot;50%&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Object Oriented Data Model'''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Relational Database Management System'''&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Class&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Table&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Object&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Row&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Entity&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Key&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|State&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Data&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Behavior&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Transactions&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Inheritance&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Data Relationships&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=='''[http://docs.jboss.org/hibernate/core/3.3/reference/en/html/inheritance.html Inheritance Mapping]'''==&lt;br /&gt;
[http://en.wikipedia.org/wiki/Inheritance_(object-oriented_programming) Inheritance] in [http://en.wikipedia.org/wiki/Object-oriented_design Object Oriented Design] makes it difficult to map between object and relation databases. In this pattern, there is mapper class for each domain class that will save and load data for the domain class [8]. Mapper class allows both abstract and concrete classes to handle their own O/R mapping[8].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  [[Image:wiki_3_12.jpg]]                         [[Image:Wiki_3_12_2.jpg]]&lt;br /&gt;
    Figure 1: Domain Class                                            Figure 2: Mapper Class&lt;br /&gt;
&lt;br /&gt;
For example: - To find an employee “John”.&lt;br /&gt;
Figure 1 represents the  Employee Domain class and Figure 2 represents the corresponding Mapper Class.&lt;br /&gt;
Application calls find () method on concrete mapper object and instantiate a new Executive object. The find () will pass this executive object and database record to load () of Executive. This in turn will call the load () of Superclass. When all loads return, find returns the filled object.&lt;br /&gt;
Mappers loading and saving the domain objects is determined by the inheritance mapping. This inheritance hierarchy is represented in the database as follows:- &lt;br /&gt;
*Single Table Inheritance&lt;br /&gt;
*Class Table Inheritance &lt;br /&gt;
*Concrete Table Inheritance&lt;br /&gt;
Choosing a mapping scheme depends on speed requirement, whether database is shared and type of [http://en.wikipedia.org/wiki/Relational_database_management_system RDBMS]. &lt;br /&gt;
&lt;br /&gt;
==='''Single Table Inheritance'''===&lt;br /&gt;
Inheritance Hierarchy of all classes is represented as single table. The columns of this table will have fields of all classes in the hierarchy. Advantage of this Inheritance is that there is one table and requires no join while retrieving data. But it could lead to large confusing table and name conflicts.&lt;br /&gt;
  [[Image:wiki_3_12.jpg]]                         [[Image:Wiki_3_12_3_a.jpg]]&lt;br /&gt;
    Figure 3: Domain Class                                            Figure 4: Single Table Inheritance&lt;br /&gt;
&lt;br /&gt;
==='''Class Table Inheritance '''===&lt;br /&gt;
One table for each class is constructed. The advantage of this table inheritance is that there is clear relationship between class and table. There is high normalization. But multiple tables requires join and when fields move up and down in hierarchy, it requires changes in the tables.&lt;br /&gt;
&lt;br /&gt;
 [[Image:wiki_3_12.jpg]]                         [[Image:Wiki_3_12_4_.jpg]]&lt;br /&gt;
       Figure 5: Domain Class                           Figure 6: Class Table Inheritance&lt;br /&gt;
&lt;br /&gt;
==='''Concrete Table Inheritance'''===&lt;br /&gt;
In this hierarchy there is one table per concrete class. The table are independent, requires no join and there is no unused fields.&lt;br /&gt;
 [[Image:wiki_3_12.jpg]]                         [[Image:Wiki_3_12_5.jpg]]&lt;br /&gt;
       Figure 6: Domain Class                           Figure 7: Concrete Table Inheritance&lt;br /&gt;
&lt;br /&gt;
The strengths and weaknesses of each approach are compared below:&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;4&amp;quot; width=&amp;quot;70%&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Factors to Consider'''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''One table per hierarchy'''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''One table per concrete class'''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''One table per class'''&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Ad hoc reporting&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Simple&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Medium&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Medium/Difficult&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Ease of implementation&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Simple&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Medium&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Difficult&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Ease of data access&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Simple&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Simple&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Medium/Simple&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Coupling&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Very High&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|High&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Low&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Speed of data access&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Fast&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Fast&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Medium/Fast&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Support for polymorphism&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Medium&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Low&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|High&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=='''[http://en.wikipedia.org/wiki/Association_(object-oriented_programming) Association] Mapping'''==&lt;br /&gt;
The [http://en.wikipedia.org/wiki/Foreign_key Foreign key] is used to maintain relationships in relational databases. A row in one table can relate to a row in another table using foreign key. Therefore to implement relationships, a key of one table must include in the other table [4].&lt;br /&gt;
==='''One-to-one mapping'''===&lt;br /&gt;
If one record in Table A corresponds to exactly one row in Table B, this relationship is called One – to-one relationships [10].  In Figure 6, the address attribute of an employee class forms a one-to-one relation with the address class. In database, this relationship is stored by creating one-to- one mapping between these two objects by storing the id of Address instance in the Employee table instance is written [11]. When the employee is read form database, the address instance is linked to Employee. Here, the mapping is from Employee to Address.&lt;br /&gt;
                               [[Image:Wiki_3_12_6.gif]]&lt;br /&gt;
                                Figure 6: One-to-one mapping&lt;br /&gt;
&lt;br /&gt;
==='''One-to-many mapping'''===&lt;br /&gt;
If each record in Table A corresponds to many records in Table B , but each record in Table B links to only one record in Table A, this relationship is called One-to-many relationships [10].&lt;br /&gt;
In fig, a Order may have zero to many OrderItems. To represent in relational database, the Owner object’s OID can be inserted into OrderItem table [9]. Here, OID is Foreign Key. This is shown in Figure 8.&lt;br /&gt;
                   [[Image:Wiki 3 12 6.jpg]]&lt;br /&gt;
                               Figure 8 : One-to-many mapping&lt;br /&gt;
&lt;br /&gt;
==='''Many-to-many mapping'''===&lt;br /&gt;
If each record in Table A may links to many records in Table B and vice-versa [10], it’s called Many-to-Many relationships. In Figure 9, let’s consider that an employee can work more than one department and department can contain more than one employee.&amp;lt;br&amp;gt;&lt;br /&gt;
The Many-to-Many relationships is represented in term of association table.  A separate table called association table is created that contains the foreign keys of participating tables [9].&lt;br /&gt;
                          [[Image:Wiki 3 12 7.jpg]]&lt;br /&gt;
                               Figure 9 : Many-to-many mapping&lt;br /&gt;
&lt;br /&gt;
=='''[http://en.wikipedia.org/wiki/Aggregation_(object-oriented_programming) Aggregation] Mapping'''==&lt;br /&gt;
[http://en.wikipedia.org/wiki/Class_diagram#Aggregation Aggregation] is a specialized version of the association relationship. Aggregations may be mapped to relational data model either by integrating all objects' attributes into a single table or using foreign keys. &lt;br /&gt;
==='''Single table aggregation'''===&lt;br /&gt;
In this pattern the a table is created with the attributes of the Aggregating objects. The attributes of the Aggregating object is simple added to this table.&lt;br /&gt;
&lt;br /&gt;
[[Image:Index.2.png]]&lt;br /&gt;
&lt;br /&gt;
==='''Foreign key aggregation'''===&lt;br /&gt;
To achieve this create a table each for the aggregating and aggregated object. Create a foreign key reference between the two table by inserting a synthetic object identity into the aggregated objects type and reference it in the aggregating objects table.&lt;br /&gt;
&lt;br /&gt;
[[Image:Index.4.png]]&lt;br /&gt;
&lt;br /&gt;
Differences between the two approaches has been tabulated below:&amp;lt;br&amp;gt;&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;4&amp;quot; width=&amp;quot;100%&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Single Table Aggregation'''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Foreign Key Aggregation'''&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Only one table needs to be accessed to retrieve an aggregating object with all its aggregated objects. On the other hand, the fields for aggregated objects’ attributes are likely to increase the number of pages retrieved with each database access, resulting in a possible waste of I/O bandwidth.&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Needs a join operation or at least two database accesses where Single Table Aggregation needs a single database operation.&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|If the same object is aggregated in more that on one object, a change in the aggregated object would require a change in a lot of database table. This pattern thus has poor maintainability.&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Since the aggregated object has it's own table, the pattern is more maintainable and flexible.&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Aggregated objects are automatically deleted on deletion of the aggregating objects.&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Aggregated objects are not automatically deleted on deletion of the aggregating objects.&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Ad-hoc queries are very hard to formulate.&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Factoring out aggregated objects allows easy querying these tables with ad-hoc queries.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=='''Type Conversion'''==&lt;br /&gt;
There are situations when the values in the database do not map directly to object data types. Take the Boolean data type for example. Boolean values &amp;quot;true&amp;quot; and &amp;quot;false&amp;quot; may be saved as &amp;quot;T&amp;quot; and &amp;quot;F&amp;quot; respectively in the database. Type conversion should be facilitated without any data loss[2].&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
[1]http://www.objectarchitects.de/ObjectArchitects/orpatterns/&amp;lt;br&amp;gt;&lt;br /&gt;
[2]http://subs.emis.de/LNI/Proceedings/Proceedings48/GI.Band.48-6.pdf&amp;lt;br&amp;gt;&lt;br /&gt;
[3]http://www.joeyoder.com/Research/objectmappings/Persista.pdf&amp;lt;br&amp;gt;&lt;br /&gt;
[4]http://www.ibm.com/developerworks/library/ws-mapping-to-rdb/&amp;lt;br&amp;gt;&lt;br /&gt;
[5]http://www.dparsons.co.uk/mindthegap.pdf&amp;lt;br&amp;gt;&lt;br /&gt;
[6]http://proceedings.informingscience.org/InSITE2007/IISITv4p767-779Jusi281.pdf&amp;lt;br&amp;gt;&lt;br /&gt;
[7]http://www.sis.pitt.edu/~gray/INFSCI1025/references/AmblerORMMapping101Article.pdf&amp;lt;br&amp;gt;&lt;br /&gt;
[8]http://www.brettdaniel.com/files/2006/inheritancemapping.ppt&amp;lt;br&amp;gt;&lt;br /&gt;
[9]http://www.objectarchitects.de/ObjectArchitects/orpatterns/index.htm?MappingObjects2Tables/mapping_object.htm&amp;lt;br&amp;gt;&lt;br /&gt;
[10]http://databases.about.com/cs/tutorials/a/accessgup7.htm&amp;lt;br&amp;gt;&lt;br /&gt;
[11]http://www.oracle.com/technology/products/ias/toplink/doc/1013/main/_html/relmapun005.htm&amp;lt;br&amp;gt;&lt;br /&gt;
[12]http://docs.jboss.org/hibernate/core/3.3/reference/en/html/inheritance.html&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Quick Gun Murugan</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_12_Patterns_for_ORM&amp;diff=29808</id>
		<title>CSC/ECE 517 Fall 2009/wiki3 12 Patterns for ORM</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_12_Patterns_for_ORM&amp;diff=29808"/>
		<updated>2009-11-22T03:40:31Z</updated>

		<summary type="html">&lt;p&gt;Quick Gun Murugan: /* '''Foreign key aggregation''' */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=='''Overview'''==&lt;br /&gt;
[http://en.wikipedia.org/wiki/Object-relational_mapping Object-relational mapping] is not trivial. Apart from being based on [http://en.wikipedia.org/wiki/Software_engineering Software Engineering] principles like [http://en.wikipedia.org/wiki/Coupling_(computer_science) coupling], [http://en.wikipedia.org/wiki/Cohesion_(computer_science) cohesion] and [http://en.wikipedia.org/wiki/Polymorphism_in_object-oriented_programming polymorphism], the object paradigm focuses on building applications out of objects that have both data and behavior. However, the relational paradigm is based on mathematical principles and focuses primarily on storing data. If only data objects were to be mapped to the relational database the procedure would have been fairly straightforward. With the growing complexities of object models, concepts like [http://en.wikipedia.org/wiki/Aggregation_(object-oriented_programming) aggregation], [http://en.wikipedia.org/wiki/Inheritance_(object-oriented_programming) inheritance], [http://en.wikipedia.org/wiki/Polymorphism_in_object-oriented_programming polymorphism], association between classes, and data type (smarted than [http://en.wikipedia.org/wiki/SQL SQL] data types) have to be mapped to relational table structure. The table below highlights the fundamental mismatch between object oriented data model and relational data storage.&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;4&amp;quot; width=&amp;quot;50%&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Object Oriented Data Model'''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Relational Database Management System'''&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Class&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Table&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Object&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Row&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Entity&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Key&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|State&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Data&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Behavior&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Transactions&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Inheritance&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Data Relationships&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=='''[http://docs.jboss.org/hibernate/core/3.3/reference/en/html/inheritance.html Inheritance Mapping]'''==&lt;br /&gt;
[http://en.wikipedia.org/wiki/Inheritance_(object-oriented_programming) Inheritance] in [http://en.wikipedia.org/wiki/Object-oriented_design Object Oriented Design] makes it difficult to map between object and relation databases. In this pattern, there is mapper class for each domain class that will save and load data for the domain class [8]. Mapper class allows both abstract and concrete classes to handle their own O/R mapping[8].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  [[Image:wiki_3_12.jpg]]                         [[Image:Wiki_3_12_2.jpg]]&lt;br /&gt;
    Figure 1: Domain Class                                            Figure 2: Mapper Class&lt;br /&gt;
&lt;br /&gt;
For example: - To find an employee “John”.&lt;br /&gt;
Figure 1 represents the  Employee Domain class and Figure 2 represents the corresponding Mapper Class.&lt;br /&gt;
Application calls find () method on concrete mapper object and instantiate a new Executive object. The find () will pass this executive object and database record to load () of Executive. This in turn will call the load () of Superclass. When all loads return, find returns the filled object.&lt;br /&gt;
Mappers loading and saving the domain objects is determined by the inheritance mapping. This inheritance hierarchy is represented in the database as follows:- &lt;br /&gt;
*Single Table Inheritance&lt;br /&gt;
*Class Table Inheritance &lt;br /&gt;
*Concrete Table Inheritance&lt;br /&gt;
Choosing a mapping scheme depends on speed requirement, whether database is shared and type of [http://en.wikipedia.org/wiki/Relational_database_management_system RDBMS]. &lt;br /&gt;
&lt;br /&gt;
==='''Single Table Inheritance'''===&lt;br /&gt;
Inheritance Hierarchy of all classes is represented as single table. The columns of this table will have fields of all classes in the hierarchy. Advantage of this Inheritance is that there is one table and requires no join while retrieving data. But it could lead to large confusing table and name conflicts.&lt;br /&gt;
  [[Image:wiki_3_12.jpg]]                         [[Image:Wiki_3_12_3_a.jpg]]&lt;br /&gt;
    Figure 3: Domain Class                                            Figure 4: Single Table Inheritance&lt;br /&gt;
&lt;br /&gt;
==='''Class Table Inheritance '''===&lt;br /&gt;
One table for each class is constructed. The advantage of this table inheritance is that there is clear relationship between class and table. There is high normalization. But multiple tables requires join and when fields move up and down in hierarchy, it requires changes in the tables.&lt;br /&gt;
&lt;br /&gt;
 [[Image:wiki_3_12.jpg]]                         [[Image:Wiki_3_12_4_.jpg]]&lt;br /&gt;
       Figure 5: Domain Class                           Figure 6: Class Table Inheritance&lt;br /&gt;
&lt;br /&gt;
==='''Concrete Table Inheritance'''===&lt;br /&gt;
In this hierarchy there is one table per concrete class. The table are independent, requires no join and there is no unused fields.&lt;br /&gt;
 [[Image:wiki_3_12.jpg]]                         [[Image:Wiki_3_12_5.jpg]]&lt;br /&gt;
       Figure 6: Domain Class                           Figure 7: Concrete Table Inheritance&lt;br /&gt;
&lt;br /&gt;
The strengths and weaknesses of each approach are compared below:&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;4&amp;quot; width=&amp;quot;70%&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Factors to Consider'''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''One table per hierarchy'''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''One table per concrete class'''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''One table per class'''&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Ad hoc reporting&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Simple&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Medium&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Medium/Difficult&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Ease of implementation&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Simple&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Medium&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Difficult&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Ease of data access&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Simple&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Simple&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Medium/Simple&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Coupling&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Very High&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|High&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Low&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Speed of data access&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Fast&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Fast&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Medium/Fast&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Support for polymorphism&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Medium&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Low&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|High&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=='''[http://en.wikipedia.org/wiki/Association_(object-oriented_programming) Association] Mapping'''==&lt;br /&gt;
The [http://en.wikipedia.org/wiki/Foreign_key Foreign key] is used to maintain relationships in relational databases. A row in one table can relate to a row in another table using foreign key. Therefore to implement relationships, a key of one table must include in the other table [4].&lt;br /&gt;
==='''One-to-one mapping'''===&lt;br /&gt;
If one record in Table A corresponds to exactly one row in Table B, this relationship is called One – to-one relationships [10].  In Figure 6, the address attribute of an employee class forms a one-to-one relation with the address class. In database, this relationship is stored by creating one-to- one mapping between these two objects by storing the id of Address instance in the Employee table instance is written [11]. When the employee is read form database, the address instance is linked to Employee. Here, the mapping is from Employee to Address.&lt;br /&gt;
                               [[Image:Wiki_3_12_6.gif]]&lt;br /&gt;
                                Figure 6: One-to-one mapping&lt;br /&gt;
&lt;br /&gt;
==='''One-to-many mapping'''===&lt;br /&gt;
If each record in Table A corresponds to many records in Table B , but each record in Table B links to only one record in Table A, this relationship is called One-to-many relationships [10].&lt;br /&gt;
In fig, a Order may have zero to many OrderItems. To represent in relational database, the Owner object’s OID can be inserted into OrderItem table [9]. Here, OID is Foreign Key. This is shown in Figure 8.&lt;br /&gt;
                   [[Image:Wiki 3 12 6.jpg]]&lt;br /&gt;
                               Figure 8 : One-to-many mapping&lt;br /&gt;
&lt;br /&gt;
==='''Many-to-many mapping'''===&lt;br /&gt;
If each record in Table A may links to many records in Table B and vice-versa [10], it’s called Many-to-Many relationships. In Figure 9, let’s consider that an employee can work more than one department and department can contain more than one employee.&amp;lt;br&amp;gt;&lt;br /&gt;
The Many-to-Many relationships is represented in term of association table.  A separate table called association table is created that contains the foreign keys of participating tables [9].&lt;br /&gt;
                          [[Image:Wiki 3 12 7.jpg]]&lt;br /&gt;
                               Figure 9 : Many-to-many mapping&lt;br /&gt;
&lt;br /&gt;
=='''[http://en.wikipedia.org/wiki/Aggregation_(object-oriented_programming) Aggregation] Mapping'''==&lt;br /&gt;
[http://en.wikipedia.org/wiki/Class_diagram#Aggregation Aggregation] is a specialized version of the association relationship. Aggregations may be mapped to relational data model either by integrating all objects' attributes into a single table or using foreign keys. &lt;br /&gt;
==='''Single table aggregation'''===&lt;br /&gt;
In this pattern the a table is created with the attributes of the Aggregating objects. The attributes of the Aggregating object is simple added to this table.&lt;br /&gt;
&lt;br /&gt;
[[Image:Index.2.png]]&lt;br /&gt;
&lt;br /&gt;
==='''Foreign key aggregation'''===&lt;br /&gt;
To achieve this create a table each for the aggregating and aggregated object. Create a foreign key reference between the two table by inserting a synthetic object identity into the aggregated objects type and reference it in the aggregating objects table.&lt;br /&gt;
&lt;br /&gt;
[[Image:Index.4.png]]&lt;br /&gt;
&lt;br /&gt;
Differences between the two approaches has been tabulated below:&amp;lt;br&amp;gt;&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;4&amp;quot; width=&amp;quot;100%&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Single Table Aggregation'''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Foreign Key Aggregation'''&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Only one table needs to be accessed to retrieve an aggregating object with all its aggregated objects. On the other hand, the fields for aggregated objects’ attributes are likely to increase the number of pages retrieved with each database access, resulting in a possible waste of I/O bandwidth.&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Needs a join operation or at least two database accesses where Single Table Aggregation needs a single database operation.&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|If the same object is aggregated in more that on one object, a change in the aggregated object would require a change in a lot of database table. This pattern thus has poor maintainability.&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Since the aggregated object has it's own table, the pattern is more maintainable and flexible.&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Aggregated objects are automatically deleted on deletion of the aggregating objects.&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Aggregated objects are not automatically deleted on deletion of the aggregating objects.&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Ad-hoc queries are very hard to formulate.&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Factoring out aggregated objects allows easy querying these tables with ad-hoc queries.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=='''Type Conversion'''==&lt;br /&gt;
There are situations when the values in the database do not map directly to object data types. Take the Boolean data type for example. Boolean values &amp;quot;true&amp;quot; and &amp;quot;false&amp;quot; may be saved as &amp;quot;T&amp;quot; and &amp;quot;F&amp;quot; respectively in the database. Type conversion should be facilitated without any data loss.&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
[1]http://www.objectarchitects.de/ObjectArchitects/orpatterns/&amp;lt;br&amp;gt;&lt;br /&gt;
[2]http://subs.emis.de/LNI/Proceedings/Proceedings48/GI.Band.48-6.pdf&amp;lt;br&amp;gt;&lt;br /&gt;
[3]http://www.joeyoder.com/Research/objectmappings/Persista.pdf&amp;lt;br&amp;gt;&lt;br /&gt;
[4]http://www.ibm.com/developerworks/library/ws-mapping-to-rdb/&amp;lt;br&amp;gt;&lt;br /&gt;
[5]http://www.dparsons.co.uk/mindthegap.pdf&amp;lt;br&amp;gt;&lt;br /&gt;
[6]http://proceedings.informingscience.org/InSITE2007/IISITv4p767-779Jusi281.pdf&amp;lt;br&amp;gt;&lt;br /&gt;
[7]http://www.sis.pitt.edu/~gray/INFSCI1025/references/AmblerORMMapping101Article.pdf&amp;lt;br&amp;gt;&lt;br /&gt;
[8]http://www.brettdaniel.com/files/2006/inheritancemapping.ppt&amp;lt;br&amp;gt;&lt;br /&gt;
[9]http://www.objectarchitects.de/ObjectArchitects/orpatterns/index.htm?MappingObjects2Tables/mapping_object.htm&amp;lt;br&amp;gt;&lt;br /&gt;
[10]http://databases.about.com/cs/tutorials/a/accessgup7.htm&amp;lt;br&amp;gt;&lt;br /&gt;
[11]http://www.oracle.com/technology/products/ias/toplink/doc/1013/main/_html/relmapun005.htm&amp;lt;br&amp;gt;&lt;br /&gt;
[12]http://docs.jboss.org/hibernate/core/3.3/reference/en/html/inheritance.html&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Quick Gun Murugan</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_12_Patterns_for_ORM&amp;diff=29807</id>
		<title>CSC/ECE 517 Fall 2009/wiki3 12 Patterns for ORM</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_12_Patterns_for_ORM&amp;diff=29807"/>
		<updated>2009-11-22T03:08:08Z</updated>

		<summary type="html">&lt;p&gt;Quick Gun Murugan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=='''Overview'''==&lt;br /&gt;
[http://en.wikipedia.org/wiki/Object-relational_mapping Object-relational mapping] is not trivial. Apart from being based on [http://en.wikipedia.org/wiki/Software_engineering Software Engineering] principles like [http://en.wikipedia.org/wiki/Coupling_(computer_science) coupling], [http://en.wikipedia.org/wiki/Cohesion_(computer_science) cohesion] and [http://en.wikipedia.org/wiki/Polymorphism_in_object-oriented_programming polymorphism], the object paradigm focuses on building applications out of objects that have both data and behavior. However, the relational paradigm is based on mathematical principles and focuses primarily on storing data. If only data objects were to be mapped to the relational database the procedure would have been fairly straightforward. With the growing complexities of object models, concepts like [http://en.wikipedia.org/wiki/Aggregation_(object-oriented_programming) aggregation], [http://en.wikipedia.org/wiki/Inheritance_(object-oriented_programming) inheritance], [http://en.wikipedia.org/wiki/Polymorphism_in_object-oriented_programming polymorphism], association between classes, and data type (smarted than [http://en.wikipedia.org/wiki/SQL SQL] data types) have to be mapped to relational table structure. The table below highlights the fundamental mismatch between object oriented data model and relational data storage.&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;4&amp;quot; width=&amp;quot;50%&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Object Oriented Data Model'''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Relational Database Management System'''&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Class&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Table&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Object&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Row&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Entity&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Key&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|State&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Data&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Behavior&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Transactions&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Inheritance&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Data Relationships&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=='''[http://docs.jboss.org/hibernate/core/3.3/reference/en/html/inheritance.html Inheritance Mapping]'''==&lt;br /&gt;
[http://en.wikipedia.org/wiki/Inheritance_(object-oriented_programming) Inheritance] in [http://en.wikipedia.org/wiki/Object-oriented_design Object Oriented Design] makes it difficult to map between object and relation databases. In this pattern, there is mapper class for each domain class that will save and load data for the domain class [8]. Mapper class allows both abstract and concrete classes to handle their own O/R mapping[8].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  [[Image:wiki_3_12.jpg]]                         [[Image:Wiki_3_12_2.jpg]]&lt;br /&gt;
    Figure 1: Domain Class                                            Figure 2: Mapper Class&lt;br /&gt;
&lt;br /&gt;
For example: - To find an employee “John”.&lt;br /&gt;
Figure 1 represents the  Employee Domain class and Figure 2 represents the corresponding Mapper Class.&lt;br /&gt;
Application calls find () method on concrete mapper object and instantiate a new Executive object. The find () will pass this executive object and database record to load () of Executive. This in turn will call the load () of Superclass. When all loads return, find returns the filled object.&lt;br /&gt;
Mappers loading and saving the domain objects is determined by the inheritance mapping. This inheritance hierarchy is represented in the database as follows:- &lt;br /&gt;
*Single Table Inheritance&lt;br /&gt;
*Class Table Inheritance &lt;br /&gt;
*Concrete Table Inheritance&lt;br /&gt;
Choosing a mapping scheme depends on speed requirement, whether database is shared and type of [http://en.wikipedia.org/wiki/Relational_database_management_system RDBMS]. &lt;br /&gt;
&lt;br /&gt;
==='''Single Table Inheritance'''===&lt;br /&gt;
Inheritance Hierarchy of all classes is represented as single table. The columns of this table will have fields of all classes in the hierarchy. Advantage of this Inheritance is that there is one table and requires no join while retrieving data. But it could lead to large confusing table and name conflicts.&lt;br /&gt;
  [[Image:wiki_3_12.jpg]]                         [[Image:Wiki_3_12_3_a.jpg]]&lt;br /&gt;
    Figure 3: Domain Class                                            Figure 4: Single Table Inheritance&lt;br /&gt;
&lt;br /&gt;
==='''Class Table Inheritance '''===&lt;br /&gt;
One table for each class is constructed. The advantage of this table inheritance is that there is clear relationship between class and table. There is high normalization. But multiple tables requires join and when fields move up and down in hierarchy, it requires changes in the tables.&lt;br /&gt;
&lt;br /&gt;
 [[Image:wiki_3_12.jpg]]                         [[Image:Wiki_3_12_4_.jpg]]&lt;br /&gt;
       Figure 5: Domain Class                           Figure 6: Class Table Inheritance&lt;br /&gt;
&lt;br /&gt;
==='''Concrete Table Inheritance'''===&lt;br /&gt;
In this hierarchy there is one table per concrete class. The table are independent, requires no join and there is no unused fields.&lt;br /&gt;
 [[Image:wiki_3_12.jpg]]                         [[Image:Wiki_3_12_5.jpg]]&lt;br /&gt;
       Figure 6: Domain Class                           Figure 7: Concrete Table Inheritance&lt;br /&gt;
&lt;br /&gt;
The strengths and weaknesses of each approach are compared below:&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;4&amp;quot; width=&amp;quot;70%&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Factors to Consider'''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''One table per hierarchy'''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''One table per concrete class'''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''One table per class'''&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Ad hoc reporting&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Simple&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Medium&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Medium/Difficult&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Ease of implementation&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Simple&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Medium&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Difficult&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Ease of data access&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Simple&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Simple&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Medium/Simple&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Coupling&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Very High&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|High&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Low&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Speed of data access&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Fast&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Fast&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Medium/Fast&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Support for polymorphism&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Medium&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Low&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|High&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=='''[http://en.wikipedia.org/wiki/Association_(object-oriented_programming) Association] Mapping'''==&lt;br /&gt;
The [http://en.wikipedia.org/wiki/Foreign_key Foreign key] is used to maintain relationships in relational databases. A row in one table can relate to a row in another table using foreign key. Therefore to implement relationships, a key of one table must include in the other table [4].&lt;br /&gt;
==='''One-to-one mapping'''===&lt;br /&gt;
If one record in Table A corresponds to exactly one row in Table B, this relationship is called One – to-one relationships [10].  In Figure 6, the address attribute of an employee class forms a one-to-one relation with the address class. In database, this relationship is stored by creating one-to- one mapping between these two objects by storing the id of Address instance in the Employee table instance is written [11]. When the employee is read form database, the address instance is linked to Employee. Here, the mapping is from Employee to Address.&lt;br /&gt;
                               [[Image:Wiki_3_12_6.gif]]&lt;br /&gt;
                                Figure 6: One-to-one mapping&lt;br /&gt;
&lt;br /&gt;
==='''One-to-many mapping'''===&lt;br /&gt;
If each record in Table A corresponds to many records in Table B , but each record in Table B links to only one record in Table A, this relationship is called One-to-many relationships [10].&lt;br /&gt;
In fig, a Order may have zero to many OrderItems. To represent in relational database, the Owner object’s OID can be inserted into OrderItem table [9]. Here, OID is Foreign Key. This is shown in Figure 8.&lt;br /&gt;
                   [[Image:Wiki 3 12 6.jpg]]&lt;br /&gt;
                               Figure 8 : One-to-many mapping&lt;br /&gt;
&lt;br /&gt;
==='''Many-to-many mapping'''===&lt;br /&gt;
If each record in Table A may links to many records in Table B and vice-versa [10], it’s called Many-to-Many relationships. In Figure 9, let’s consider that an employee can work more than one department and department can contain more than one employee.&amp;lt;br&amp;gt;&lt;br /&gt;
The Many-to-Many relationships is represented in term of association table.  A separate table called association table is created that contains the foreign keys of participating tables [9].&lt;br /&gt;
                          [[Image:Wiki 3 12 7.jpg]]&lt;br /&gt;
                               Figure 9 : Many-to-many mapping&lt;br /&gt;
&lt;br /&gt;
=='''[http://en.wikipedia.org/wiki/Aggregation_(object-oriented_programming) Aggregation] Mapping'''==&lt;br /&gt;
[http://en.wikipedia.org/wiki/Class_diagram#Aggregation Aggregation] is a specialized version of the association relationship. Aggregations may be mapped to relational data model either by integrating all objects' attributes into a single table or using foreign keys. &lt;br /&gt;
==='''Single table aggregation'''===&lt;br /&gt;
In this pattern the a table is created with the attributes of the Aggregating objects. The attributes of the Aggregating object is simple added to this table.&lt;br /&gt;
&lt;br /&gt;
[[Image:Index.2.png]]&lt;br /&gt;
&lt;br /&gt;
==='''Foreign key aggregation'''===&lt;br /&gt;
To achieve this create a table each for the aggregating and aggregated object. Create a foreign key reference between the two table by inserting a synthetic object identity into the aggregated objects type and reference it in the aggregating objects table.&lt;br /&gt;
&lt;br /&gt;
[[Image:Index.4.png]]&lt;br /&gt;
&lt;br /&gt;
Differences between the two approaches has been tabulated below:&amp;lt;br&amp;gt;&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;4&amp;quot; width=&amp;quot;100%&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Single Table Aggregation'''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Foreign Key Aggregation'''&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Only one table needs to be accessed to retrieve an aggregating object with all its aggregated objects. On the other hand, the fields for aggregated objects’ attributes are likely to increase the number of pages retrieved with each database access, resulting in a possible waste of I/O bandwidth.&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Needs a join operation or at least two database accesses where Single Table Aggregation needs a single database operation.&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|If the same object is aggregated in more that on one object, a change in the aggregated object would require a change in a lot of database table. This pattern thus has poor maintainability.&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Since the aggregated object has it's own table, the pattern is more maintainable and flexible.&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Aggregated objects are automatically deleted on deletion of the aggregating objects.&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Aggregated objects are not automatically deleted on deletion of the aggregating objects.&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Ad-hoc queries are very hard to formulate.&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Factoring out aggregated objects allows easy querying these tables with ad-hoc queries.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
[1]http://www.objectarchitects.de/ObjectArchitects/orpatterns/&amp;lt;br&amp;gt;&lt;br /&gt;
[2]http://subs.emis.de/LNI/Proceedings/Proceedings48/GI.Band.48-6.pdf&amp;lt;br&amp;gt;&lt;br /&gt;
[3]http://www.joeyoder.com/Research/objectmappings/Persista.pdf&amp;lt;br&amp;gt;&lt;br /&gt;
[4]http://www.ibm.com/developerworks/library/ws-mapping-to-rdb/&amp;lt;br&amp;gt;&lt;br /&gt;
[5]http://www.dparsons.co.uk/mindthegap.pdf&amp;lt;br&amp;gt;&lt;br /&gt;
[6]http://proceedings.informingscience.org/InSITE2007/IISITv4p767-779Jusi281.pdf&amp;lt;br&amp;gt;&lt;br /&gt;
[7]http://www.sis.pitt.edu/~gray/INFSCI1025/references/AmblerORMMapping101Article.pdf&amp;lt;br&amp;gt;&lt;br /&gt;
[8]http://www.brettdaniel.com/files/2006/inheritancemapping.ppt&amp;lt;br&amp;gt;&lt;br /&gt;
[9]http://www.objectarchitects.de/ObjectArchitects/orpatterns/index.htm?MappingObjects2Tables/mapping_object.htm&amp;lt;br&amp;gt;&lt;br /&gt;
[10]http://databases.about.com/cs/tutorials/a/accessgup7.htm&amp;lt;br&amp;gt;&lt;br /&gt;
[11]http://www.oracle.com/technology/products/ias/toplink/doc/1013/main/_html/relmapun005.htm&amp;lt;br&amp;gt;&lt;br /&gt;
[12]http://docs.jboss.org/hibernate/core/3.3/reference/en/html/inheritance.html&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Quick Gun Murugan</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_12_Patterns_for_mapping_objects_to_relational_databases&amp;diff=29790</id>
		<title>CSC/ECE 517 Fall 2009/wiki3 12 Patterns for mapping objects to relational databases</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_12_Patterns_for_mapping_objects_to_relational_databases&amp;diff=29790"/>
		<updated>2009-11-20T18:04:47Z</updated>

		<summary type="html">&lt;p&gt;Quick Gun Murugan: CSC/ECE 517 Fall 2009/wiki3 12 Patterns for mapping objects to relational databases moved to CSC/ECE 517 Fall 2009/wiki3 12 Patterns for ORM: Link did not appear in Expertiza.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[CSC/ECE 517 Fall 2009/wiki3 12 Patterns for ORM]]&lt;/div&gt;</summary>
		<author><name>Quick Gun Murugan</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_12_Patterns_for_ORM&amp;diff=29789</id>
		<title>CSC/ECE 517 Fall 2009/wiki3 12 Patterns for ORM</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_12_Patterns_for_ORM&amp;diff=29789"/>
		<updated>2009-11-20T18:04:47Z</updated>

		<summary type="html">&lt;p&gt;Quick Gun Murugan: CSC/ECE 517 Fall 2009/wiki3 12 Patterns for mapping objects to relational databases moved to CSC/ECE 517 Fall 2009/wiki3 12 Patterns for ORM: Link did not appear in Expertiza.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=='''Overview'''==&lt;br /&gt;
[http://en.wikipedia.org/wiki/Object-relational_mapping Object-relational mapping] is not trivial. Apart from being based on Software Engineering principles like coupling, cohesion and polymorphism, the object paradigm focuses on building applications out of objects that have both data and behavior. However, the relational paradigm is based on mathematical principles and focuses primarily on storing data. If only data objects were to be mapped to the relational database the procedure would have been fairly straightforward. With the growing complexities of object models, concepts like aggregation, inheritance, polymorphism, association between classes, and data type (smarted than SQL data types) have to be mapped to relational table structure. The table below highlights the fundamental mismatch between object oriented data model and relational data storage.&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;4&amp;quot; width=&amp;quot;50%&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Object Oriented Data Model'''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Relational Database Management System'''&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Class&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Table&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Object&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Row&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Entity&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Key&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|State&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Data&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Behavior&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Transactions&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Inheritance&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Data Relationships&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=='''[http://docs.jboss.org/hibernate/core/3.3/reference/en/html/inheritance.html Inheritance Mapping]'''==&lt;br /&gt;
[http://en.wikipedia.org/wiki/Inheritance_(object-oriented_programming) Inheritance] in [http://en.wikipedia.org/wiki/Object-oriented_design Object Oriented Design] makes it difficult to map between object and relation databases. In this pattern, there is mapper class for each domain class that will save and load data for the domain class [8]. Mapper class allows both abstract and concrete classes to handle their own O/R mapping[8].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  [[Image:wiki_3_12.jpg]]                         [[Image:Wiki_3_12_2.jpg]]&lt;br /&gt;
    Figure 1: Domain Class                                            Figure 2: Mapper Class&lt;br /&gt;
&lt;br /&gt;
For example: - To find an employee “John”.&lt;br /&gt;
Figure 1 represents the  Employee Domain class and Figure 2 represents the corresponding Mapper Class.&lt;br /&gt;
Application calls find () method on concrete mapper object and instantiate a new Executive object. The find () will pass this executive object and database record to load () of Executive. This in turn will call the load () of Superclass. When all loads return, find returns the filled object.&lt;br /&gt;
Mappers loading and saving the domain objects is determined by the inheritance mapping. This inheritance hierarchy is represented in the database as follows:- &lt;br /&gt;
*Single Table Inheritance&lt;br /&gt;
*Class Table Inheritance &lt;br /&gt;
*Concrete Table Inheritance&lt;br /&gt;
Choosing a mapping scheme depends on speed requirement, whether database is shared and type of [http://en.wikipedia.org/wiki/Relational_database_management_system RDBMS]. &lt;br /&gt;
&lt;br /&gt;
==='''Single Table Inheritance'''===&lt;br /&gt;
Inheritance Hierarchy of all classes is represented as single table. The columns of this table will have fields of all classes in the hierarchy. Advantage of this Inheritance is that there is one table and requires no join while retrieving data. But it could lead to large confusing table and name conflicts.&lt;br /&gt;
  [[Image:wiki_3_12.jpg]]                         [[Image:Wiki_3_12_3_a.jpg]]&lt;br /&gt;
    Figure 3: Domain Class                                            Figure 4: Single Table Inheritance&lt;br /&gt;
&lt;br /&gt;
==='''Class Table Inheritance '''===&lt;br /&gt;
One table for each class is constructed. The advantage of this table inheritance is that there is clear relationship between class and table. There is high normalization. But multiple tables requires join and when fields move up and down in hierarchy, it requires changes in the tables.&lt;br /&gt;
&lt;br /&gt;
 [[Image:wiki_3_12.jpg]]                         [[Image:Wiki_3_12_4_.jpg]]&lt;br /&gt;
       Figure 5: Domain Class                           Figure 6: Class Table Inheritance&lt;br /&gt;
&lt;br /&gt;
==='''Concrete Table Inheritance'''===&lt;br /&gt;
In this hierarchy there is one table per concrete class. The table are independent, requires no join and there is no unused fields.&lt;br /&gt;
 [[Image:wiki_3_12.jpg]]                         [[Image:Wiki_3_12_5.jpg]]&lt;br /&gt;
       Figure 6: Domain Class                           Figure 7: Concrete Table Inheritance&lt;br /&gt;
&lt;br /&gt;
The strengths and weaknesses of each approach are compared below:&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;4&amp;quot; width=&amp;quot;70%&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Factors to Consider'''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''One table per hierarchy'''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''One table per concrete class'''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''One table per class'''&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Ad hoc reporting&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Simple&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Medium&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Medium/Difficult&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Ease of implementation&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Simple&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Medium&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Difficult&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Ease of data access&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Simple&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Simple&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Medium/Simple&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Coupling&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Very High&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|High&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Low&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Speed of data access&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Fast&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Fast&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Medium/Fast&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Support for polymorphism&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Medium&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Low&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|High&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=='''[http://en.wikipedia.org/wiki/Association_(object-oriented_programming) Association] Mapping'''==&lt;br /&gt;
The [http://en.wikipedia.org/wiki/Foreign_key Foreign key] is used to maintain relationships in relational databases. A row in one table can relate to a row in another table using foreign key. Therefore to implement relationships, a key of one table must include in the other table [4].&lt;br /&gt;
==='''One-to-one mapping'''===&lt;br /&gt;
If one record in Table A corresponds to exactly one row in Table B, this relationship is called One – to-one relationships [10].  In Figure 6, the address attribute of an employee class forms a one-to-one relation with the address class. In database, this relationship is stored by creating one-to- one mapping between these two objects by storing the id of Address instance in the Employee table instance is written [11]. When the employee is read form database, the address instance is linked to Employee. Here, the mapping is from Employee to Address.&lt;br /&gt;
                               [[Image:Wiki_3_12_6.gif]]&lt;br /&gt;
                                Figure 6: One-to-one mapping&lt;br /&gt;
&lt;br /&gt;
==='''One-to-many mapping'''===&lt;br /&gt;
If each record in Table A corresponds to many records in Table B , but each record in Table B links to only one record in Table A, this relationship is called One-to-many relationships [10].&lt;br /&gt;
In fig, a Order may have zero to many OrderItems. To represent in relational database, the Owner object’s OID can be inserted into OrderItem table [9]. Here, OID is Foreign Key. This is shown in Figure 8.&lt;br /&gt;
                   [[Image:Wiki 3 12 6.jpg]]&lt;br /&gt;
                               Figure 8 : One-to-many mapping&lt;br /&gt;
&lt;br /&gt;
==='''Many-to-many mapping'''===&lt;br /&gt;
If each record in Table A may links to many records in Table B and vice-versa [10], it’s called Many-to-Many relationships. In Figure 9, let’s consider that an employee can work more than one department and department can contain more than one employee.&amp;lt;br&amp;gt;&lt;br /&gt;
The Many-to-Many relationships is represented in term of association table.  A separate table called association table is created that contains the foreign keys of participating tables [9].&lt;br /&gt;
                          [[Image:Wiki 3 12 7.jpg]]&lt;br /&gt;
                               Figure 9 : Many-to-many mapping&lt;br /&gt;
&lt;br /&gt;
=='''[http://en.wikipedia.org/wiki/Aggregation_(object-oriented_programming) Aggregation] Mapping'''==&lt;br /&gt;
[http://en.wikipedia.org/wiki/Class_diagram#Aggregation Aggregation] is a specialized version of the association relationship. Aggregations may be mapped to relational data model either by integrating all objects' attributes into a single table or using foreign keys. &lt;br /&gt;
==='''Single table aggregation'''===&lt;br /&gt;
In this pattern the a table is created with the attributes of the Aggregating objects. The attributes of the Aggregating object is simple added to this table.&lt;br /&gt;
&lt;br /&gt;
[[Image:Index.2.png]]&lt;br /&gt;
&lt;br /&gt;
==='''Foreign key aggregation'''===&lt;br /&gt;
To achieve this create a table each for the aggregating and aggregated object. Create a foreign key reference between the two table by inserting a synthetic object identity into the aggregated objects type and reference it in the aggregating objects table.&lt;br /&gt;
&lt;br /&gt;
[[Image:Index.4.png]]&lt;br /&gt;
&lt;br /&gt;
Differences between the two approaches has been tabulated below:&amp;lt;br&amp;gt;&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;4&amp;quot; width=&amp;quot;100%&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Single Table Aggregation'''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Foreign Key Aggregation'''&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Only one table needs to be accessed to retrieve an aggregating object with all its aggregated objects. On the other hand, the fields for aggregated objects’ attributes are likely to increase the number of pages retrieved with each database access, resulting in a possible waste of I/O bandwidth.&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Needs a join operation or at least two database accesses where Single Table Aggregation needs a single database operation.&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|If the same object is aggregated in more that on one object, a change in the aggregated object would require a change in a lot of database table. This pattern thus has poor maintainability.&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Since the aggregated object has it's own table, the pattern is more maintainable and flexible.&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Aggregated objects are automatically deleted on deletion of the aggregating objects.&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Aggregated objects are not automatically deleted on deletion of the aggregating objects.&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Ad-hoc queries are very hard to formulate.&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Factoring out aggregated objects allows easy querying these tables with ad-hoc queries.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
[1]http://www.objectarchitects.de/ObjectArchitects/orpatterns/&amp;lt;br&amp;gt;&lt;br /&gt;
[2]http://subs.emis.de/LNI/Proceedings/Proceedings48/GI.Band.48-6.pdf&amp;lt;br&amp;gt;&lt;br /&gt;
[3]http://www.joeyoder.com/Research/objectmappings/Persista.pdf&amp;lt;br&amp;gt;&lt;br /&gt;
[4]http://www.ibm.com/developerworks/library/ws-mapping-to-rdb/&amp;lt;br&amp;gt;&lt;br /&gt;
[5]http://www.dparsons.co.uk/mindthegap.pdf&amp;lt;br&amp;gt;&lt;br /&gt;
[6]http://proceedings.informingscience.org/InSITE2007/IISITv4p767-779Jusi281.pdf&amp;lt;br&amp;gt;&lt;br /&gt;
[7]http://www.sis.pitt.edu/~gray/INFSCI1025/references/AmblerORMMapping101Article.pdf&amp;lt;br&amp;gt;&lt;br /&gt;
[8]http://www.brettdaniel.com/files/2006/inheritancemapping.ppt&amp;lt;br&amp;gt;&lt;br /&gt;
[9]http://www.objectarchitects.de/ObjectArchitects/orpatterns/index.htm?MappingObjects2Tables/mapping_object.htm&amp;lt;br&amp;gt;&lt;br /&gt;
[10]http://databases.about.com/cs/tutorials/a/accessgup7.htm&amp;lt;br&amp;gt;&lt;br /&gt;
[11]http://www.oracle.com/technology/products/ias/toplink/doc/1013/main/_html/relmapun005.htm&amp;lt;br&amp;gt;&lt;br /&gt;
[12]http://docs.jboss.org/hibernate/core/3.3/reference/en/html/inheritance.html&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Quick Gun Murugan</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_12_Patterns_for_ORM&amp;diff=28696</id>
		<title>CSC/ECE 517 Fall 2009/wiki3 12 Patterns for ORM</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_12_Patterns_for_ORM&amp;diff=28696"/>
		<updated>2009-11-18T21:30:19Z</updated>

		<summary type="html">&lt;p&gt;Quick Gun Murugan: /* '''Foreign key aggregation''' */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=='''Overview'''==&lt;br /&gt;
[http://en.wikipedia.org/wiki/Object-relational_mapping Object-relational mapping] is not trivial. Apart from being based on Software Engineering principles like coupling, cohesion and polymorphism, the object paradigm focuses on building applications out of objects that have both data and behavior. However, the relational paradigm is based on mathematical principles and focuses primarily on storing data. If only data objects were to be mapped to the relational database the procedure would have been fairly straightforward. With the growing complexities of object models, concepts like aggregation, inheritance, polymorphism, association between classes, and data type (smarted than SQL data types) have to be mapped to relational table structure. The table below highlights the fundamental mismatch between object oriented data model and relational data storage.&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;4&amp;quot; width=&amp;quot;50%&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Object Oriented Data Model'''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Relational Database Management System'''&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Class&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Table&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Object&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Row&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Entity&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Key&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|State&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Data&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Behavior&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Transactions&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Inheritance&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Data Relationships&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=='''[http://docs.jboss.org/hibernate/core/3.3/reference/en/html/inheritance.html Inheritance Mapping]'''==&lt;br /&gt;
[http://en.wikipedia.org/wiki/Inheritance_(object-oriented_programming) Inheritance] in [http://en.wikipedia.org/wiki/Object-oriented_design Object Oriented Design] makes it difficult to map between object and relation databases. In this pattern, there is mapper class for each domain class that will save and load data for the domain class [8]. Mapper class allows both abstract and concrete classes to handle their own O/R mapping[8].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  [[Image:wiki_3_12.jpg]]                         [[Image:Wiki_3_12_2.jpg]]&lt;br /&gt;
    Figure 1: Domain Class                                            Figure 2: Mapper Class&lt;br /&gt;
&lt;br /&gt;
For example: - To find an employee “John”.&lt;br /&gt;
Figure 1 represents the  Employee Domain class and Figure 2 represents the corresponding Mapper Class.&lt;br /&gt;
Application calls find () method on concrete mapper object and instantiate a new Executive object. The find () will pass this executive object and database record to load () of Executive. This in turn will call the load () of Superclass. When all loads return, find returns the filled object.&lt;br /&gt;
Mappers loading and saving the domain objects is determined by the inheritance mapping. This inheritance hierarchy is represented in the database as follows:- &lt;br /&gt;
*Single Table Inheritance&lt;br /&gt;
*Class Table Inheritance &lt;br /&gt;
*Concrete Table Inheritance&lt;br /&gt;
Choosing a mapping scheme depends on speed requirement, whether database is shared and type of [http://en.wikipedia.org/wiki/Relational_database_management_system RDBMS]. &lt;br /&gt;
&lt;br /&gt;
==='''Single Table Inheritance'''===&lt;br /&gt;
Inheritance Hierarchy of all classes is represented as single table. The columns of this table will have fields of all classes in the hierarchy. Advantage of this Inheritance is that there is one table and requires no join while retrieving data. But it could lead to large confusing table and name conflicts.&lt;br /&gt;
  [[Image:wiki_3_12.jpg]]                         [[Image:Wiki_3_12_3_a.jpg]]&lt;br /&gt;
    Figure 3: Domain Class                                            Figure 4: Single Table Inheritance&lt;br /&gt;
&lt;br /&gt;
==='''Class Table Inheritance '''===&lt;br /&gt;
One table for each class is constructed. The advantage of this table inheritance is that there is clear relationship between class and table. There is high normalization. But multiple tables requires join and when fields move up and down in hierarchy, it requires changes in the tables.&lt;br /&gt;
&lt;br /&gt;
 [[Image:wiki_3_12.jpg]]                         [[Image:Wiki_3_12_4_.jpg]]&lt;br /&gt;
       Figure 5: Domain Class                           Figure 6: Class Table Inheritance&lt;br /&gt;
&lt;br /&gt;
==='''Concrete Table Inheritance'''===&lt;br /&gt;
In this hierarchy there is one table per concrete class. The table are independent, requires no join and there is no unused fields.&lt;br /&gt;
 [[Image:wiki_3_12.jpg]]                         [[Image:Wiki_3_12_5.jpg]]&lt;br /&gt;
       Figure 6: Domain Class                           Figure 7: Concrete Table Inheritance&lt;br /&gt;
&lt;br /&gt;
The strengths and weaknesses of each approach are compared below:&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;4&amp;quot; width=&amp;quot;70%&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Factors to Consider'''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''One table per hierarchy'''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''One table per concrete class'''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''One table per class'''&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Ad hoc reporting&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Simple&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Medium&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Medium/Difficult&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Ease of implementation&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Simple&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Medium&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Difficult&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Ease of data access&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Simple&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Simple&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Medium/Simple&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Coupling&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Very High&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|High&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Low&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Speed of data access&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Fast&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Fast&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Medium/Fast&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Support for polymorphism&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Medium&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Low&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|High&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=='''[http://en.wikipedia.org/wiki/Association_(object-oriented_programming) Association] Mapping'''==&lt;br /&gt;
The [http://en.wikipedia.org/wiki/Foreign_key Foreign key] is used to maintain relationships in relational databases. A row in one table can relate to a row in another table using foreign key. Therefore to implement relationships, a key of one table must include in the other table [4].&lt;br /&gt;
==='''One-to-one mapping'''===&lt;br /&gt;
If one record in Table A corresponds to exactly one row in Table B, this relationship is called One – to-one relationships [10].  In Figure 6, the address attribute of an employee class forms a one-to-one relation with the address class. In database, this relationship is stored by creating one-to- one mapping between these two objects by storing the id of Address instance in the Employee table instance is written [11]. When the employee is read form database, the address instance is linked to Employee. Here, the mapping is from Employee to Address.&lt;br /&gt;
                               [[Image:Wiki_3_12_6.gif]]&lt;br /&gt;
                                Figure 6: One-to-one mapping&lt;br /&gt;
&lt;br /&gt;
==='''One-to-many mapping'''===&lt;br /&gt;
If each record in Table A corresponds to many records in Table B , but each record in Table B links to only one record in Table A, this relationship is called One-to-many relationships [10].&lt;br /&gt;
In fig, a Order may have zero to many OrderItems. To represent in relational database, the Owner object’s OID can be inserted into OrderItem table [9]. Here, OID is Foreign Key. This is shown in fig .&lt;br /&gt;
==='''Many-to-many mapping'''===&lt;br /&gt;
If each record in Table A may links to many records in Table B and vice-versa [10], it’s called Many-to-Many relationships. In fig, let’s consider that an employee can work more than one department and department can contain more than one employee.&amp;lt;br&amp;gt;&lt;br /&gt;
The Many-to-Many relationships is represented in term of association table.  A separate table called association table is created that contains the foreign keys of participating tables [9].&lt;br /&gt;
&lt;br /&gt;
=='''[http://en.wikipedia.org/wiki/Aggregation_(object-oriented_programming) Aggregation] Mapping'''==&lt;br /&gt;
[http://en.wikipedia.org/wiki/Class_diagram#Aggregation Aggregation] is a specialized version of the association relationship. Aggregations may be mapped to relational data model either by integrating all objects' attributes into a single table or using foreign keys. &lt;br /&gt;
==='''Single table aggregation'''===&lt;br /&gt;
In this pattern the a table is created with the attributes of the Aggregating objects. The attributes of the Aggregating object is simple added to this table.&lt;br /&gt;
&lt;br /&gt;
[[Image:Index.2.png]]&lt;br /&gt;
&lt;br /&gt;
==='''Foreign key aggregation'''===&lt;br /&gt;
To achieve this create a table each for the aggregating and aggregated object. Create a foreign key reference between the two table by inserting a synthetic object identity into the aggregated objects type and reference it in the aggregating objects table.&lt;br /&gt;
&lt;br /&gt;
[[Image:Index.4.png]]&lt;br /&gt;
&lt;br /&gt;
Differences between the two approaches has been tabulated below:&amp;lt;br&amp;gt;&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;4&amp;quot; width=&amp;quot;100%&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Single Table Aggregation'''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Foreign Key Aggregation'''&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Only one table needs to be accessed to retrieve an aggregating object with all its aggregated objects. On the other hand, the fields for aggregated objects’ attributes are likely to increase the number of pages retrieved with each database access, resulting in a possible waste of I/O bandwidth.&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Needs a join operation or at least two database accesses where Single Table Aggregation needs a single database operation.&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|If the same object is aggregated in more that on one object, a change in the aggregated object would require a change in a lot of database table. This pattern thus has poor maintainability.&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Since the aggregated object has it's own table, the pattern is more maintainable and flexible.&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Aggregated objects are automatically deleted on deletion of the aggregating objects.&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Aggregated objects are not automatically deleted on deletion of the aggregating objects.&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Ad-hoc queries are very hard to formulate.&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Factoring out aggregated objects allows easy querying these tables with ad-hoc queries.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
[1]http://www.objectarchitects.de/ObjectArchitects/orpatterns/&amp;lt;br&amp;gt;&lt;br /&gt;
[2]http://subs.emis.de/LNI/Proceedings/Proceedings48/GI.Band.48-6.pdf&amp;lt;br&amp;gt;&lt;br /&gt;
[3]http://www.joeyoder.com/Research/objectmappings/Persista.pdf&amp;lt;br&amp;gt;&lt;br /&gt;
[4]http://www.ibm.com/developerworks/library/ws-mapping-to-rdb/&amp;lt;br&amp;gt;&lt;br /&gt;
[5]http://www.dparsons.co.uk/mindthegap.pdf&amp;lt;br&amp;gt;&lt;br /&gt;
[6]http://proceedings.informingscience.org/InSITE2007/IISITv4p767-779Jusi281.pdf&amp;lt;br&amp;gt;&lt;br /&gt;
[7]http://www.sis.pitt.edu/~gray/INFSCI1025/references/AmblerORMMapping101Article.pdf&amp;lt;br&amp;gt;&lt;br /&gt;
[8]http://www.brettdaniel.com/files/2006/inheritancemapping.ppt&amp;lt;br&amp;gt;&lt;br /&gt;
[9]http://www.objectarchitects.de/ObjectArchitects/orpatterns/index.htm?MappingObjects2Tables/mapping_object.htm&amp;lt;br&amp;gt;&lt;br /&gt;
[10]http://databases.about.com/cs/tutorials/a/accessgup7.htm&amp;lt;br&amp;gt;&lt;br /&gt;
[11]http://www.oracle.com/technology/products/ias/toplink/doc/1013/main/_html/relmapun005.htm&amp;lt;br&amp;gt;&lt;br /&gt;
[12]http://docs.jboss.org/hibernate/core/3.3/reference/en/html/inheritance.html&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Quick Gun Murugan</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_12_Patterns_for_ORM&amp;diff=28694</id>
		<title>CSC/ECE 517 Fall 2009/wiki3 12 Patterns for ORM</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_12_Patterns_for_ORM&amp;diff=28694"/>
		<updated>2009-11-18T21:29:12Z</updated>

		<summary type="html">&lt;p&gt;Quick Gun Murugan: /* '''Foreign key aggregation''' */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=='''Overview'''==&lt;br /&gt;
[http://en.wikipedia.org/wiki/Object-relational_mapping Object-relational mapping] is not trivial. Apart from being based on Software Engineering principles like coupling, cohesion and polymorphism, the object paradigm focuses on building applications out of objects that have both data and behavior. However, the relational paradigm is based on mathematical principles and focuses primarily on storing data. If only data objects were to be mapped to the relational database the procedure would have been fairly straightforward. With the growing complexities of object models, concepts like aggregation, inheritance, polymorphism, association between classes, and data type (smarted than SQL data types) have to be mapped to relational table structure. The table below highlights the fundamental mismatch between object oriented data model and relational data storage.&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;4&amp;quot; width=&amp;quot;50%&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Object Oriented Data Model'''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Relational Database Management System'''&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Class&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Table&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Object&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Row&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Entity&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Key&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|State&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Data&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Behavior&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Transactions&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Inheritance&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Data Relationships&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=='''[http://docs.jboss.org/hibernate/core/3.3/reference/en/html/inheritance.html Inheritance Mapping]'''==&lt;br /&gt;
[http://en.wikipedia.org/wiki/Inheritance_(object-oriented_programming) Inheritance] in [http://en.wikipedia.org/wiki/Object-oriented_design Object Oriented Design] makes it difficult to map between object and relation databases. In this pattern, there is mapper class for each domain class that will save and load data for the domain class [8]. Mapper class allows both abstract and concrete classes to handle their own O/R mapping[8].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  [[Image:wiki_3_12.jpg]]                         [[Image:Wiki_3_12_2.jpg]]&lt;br /&gt;
    Figure 1: Domain Class                                            Figure 2: Mapper Class&lt;br /&gt;
&lt;br /&gt;
For example: - To find an employee “John”.&lt;br /&gt;
Figure 1 represents the  Employee Domain class and Figure 2 represents the corresponding Mapper Class.&lt;br /&gt;
Application calls find () method on concrete mapper object and instantiate a new Executive object. The find () will pass this executive object and database record to load () of Executive. This in turn will call the load () of Superclass. When all loads return, find returns the filled object.&lt;br /&gt;
Mappers loading and saving the domain objects is determined by the inheritance mapping. This inheritance hierarchy is represented in the database as follows:- &lt;br /&gt;
*Single Table Inheritance&lt;br /&gt;
*Class Table Inheritance &lt;br /&gt;
*Concrete Table Inheritance&lt;br /&gt;
Choosing a mapping scheme depends on speed requirement, whether database is shared and type of [http://en.wikipedia.org/wiki/Relational_database_management_system RDBMS]. &lt;br /&gt;
&lt;br /&gt;
==='''Single Table Inheritance'''===&lt;br /&gt;
Inheritance Hierarchy of all classes is represented as single table. The columns of this table will have fields of all classes in the hierarchy. Advantage of this Inheritance is that there is one table and requires no join while retrieving data. But it could lead to large confusing table and name conflicts.&lt;br /&gt;
  [[Image:wiki_3_12.jpg]]                         [[Image:Wiki_3_12_3_a.jpg]]&lt;br /&gt;
    Figure 3: Domain Class                                            Figure 4: Single Table Inheritance&lt;br /&gt;
&lt;br /&gt;
==='''Class Table Inheritance '''===&lt;br /&gt;
One table for each class is constructed. The advantage of this table inheritance is that there is clear relationship between class and table. There is high normalization. But multiple tables requires join and when fields move up and down in hierarchy, it requires changes in the tables.&lt;br /&gt;
&lt;br /&gt;
 [[Image:wiki_3_12.jpg]]                         [[Image:Wiki_3_12_4_.jpg]]&lt;br /&gt;
       Figure 5: Domain Class                           Figure 6: Class Table Inheritance&lt;br /&gt;
&lt;br /&gt;
==='''Concrete Table Inheritance'''===&lt;br /&gt;
In this hierarchy there is one table per concrete class. The table are independent, requires no join and there is no unused fields.&lt;br /&gt;
 [[Image:wiki_3_12.jpg]]                         [[Image:Wiki_3_12_5.jpg]]&lt;br /&gt;
       Figure 6: Domain Class                           Figure 7: Concrete Table Inheritance&lt;br /&gt;
&lt;br /&gt;
The strengths and weaknesses of each approach are compared below:&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;4&amp;quot; width=&amp;quot;70%&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Factors to Consider'''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''One table per hierarchy'''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''One table per concrete class'''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''One table per class'''&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Ad hoc reporting&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Simple&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Medium&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Medium/Difficult&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Ease of implementation&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Simple&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Medium&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Difficult&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Ease of data access&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Simple&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Simple&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Medium/Simple&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Coupling&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Very High&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|High&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Low&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Speed of data access&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Fast&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Fast&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Medium/Fast&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Support for polymorphism&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Medium&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Low&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|High&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=='''[http://en.wikipedia.org/wiki/Association_(object-oriented_programming) Association] Mapping'''==&lt;br /&gt;
The [http://en.wikipedia.org/wiki/Foreign_key Foreign key] is used to maintain relationships in relational databases. A row in one table can relate to a row in another table using foreign key. Therefore to implement relationships, a key of one table must include in the other table [4].&lt;br /&gt;
==='''One-to-one mapping'''===&lt;br /&gt;
If one record in Table A corresponds to exactly one row in Table B, this relationship is called One – to-one relationships [10].  In Figure 6, the address attribute of an employee class forms a one-to-one relation with the address class. In database, this relationship is stored by creating one-to- one mapping between these two objects by storing the id of Address instance in the Employee table instance is written [11]. When the employee is read form database, the address instance is linked to Employee. Here, the mapping is from Employee to Address.&lt;br /&gt;
                               [[Image:Wiki_3_12_6.gif]]&lt;br /&gt;
                                Figure 6: One-to-one mapping&lt;br /&gt;
&lt;br /&gt;
==='''One-to-many mapping'''===&lt;br /&gt;
If each record in Table A corresponds to many records in Table B , but each record in Table B links to only one record in Table A, this relationship is called One-to-many relationships [10].&lt;br /&gt;
In fig, a Order may have zero to many OrderItems. To represent in relational database, the Owner object’s OID can be inserted into OrderItem table [9]. Here, OID is Foreign Key. This is shown in fig .&lt;br /&gt;
==='''Many-to-many mapping'''===&lt;br /&gt;
If each record in Table A may links to many records in Table B and vice-versa [10], it’s called Many-to-Many relationships. In fig, let’s consider that an employee can work more than one department and department can contain more than one employee.&amp;lt;br&amp;gt;&lt;br /&gt;
The Many-to-Many relationships is represented in term of association table.  A separate table called association table is created that contains the foreign keys of participating tables [9].&lt;br /&gt;
&lt;br /&gt;
=='''[http://en.wikipedia.org/wiki/Aggregation_(object-oriented_programming) Aggregation] Mapping'''==&lt;br /&gt;
[http://en.wikipedia.org/wiki/Class_diagram#Aggregation Aggregation] is a specialized version of the association relationship. Aggregations may be mapped to relational data model either by integrating all objects' attributes into a single table or using foreign keys. &lt;br /&gt;
==='''Single table aggregation'''===&lt;br /&gt;
In this pattern the a table is created with the attributes of the Aggregating objects. The attributes of the Aggregating object is simple added to this table.&lt;br /&gt;
&lt;br /&gt;
[[Image:Index.2.png]]&lt;br /&gt;
&lt;br /&gt;
==='''Foreign key aggregation'''===&lt;br /&gt;
To achieve this create a table each for the aggregating and aggregated object. Create a foreign key reference between the two table by inserting a synthetic object identity into the aggregated objects type and reference it in the aggregating objects table.&lt;br /&gt;
&lt;br /&gt;
[[Image:Index.4.png]]&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;4&amp;quot; width=&amp;quot;100%&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Single Table Aggregation'''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Foreign Key Aggregation'''&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Only one table needs to be accessed to retrieve an aggregating object with all its aggregated objects. On the other hand, the fields for aggregated objects’ attributes are likely to increase the number of pages retrieved with each database access, resulting in a possible waste of I/O bandwidth.&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Needs a join operation or at least two database accesses where Single Table Aggregation needs a single database operation.&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|If the same object is aggregated in more that on one object, a change in the aggregated object would require a change in a lot of database table. This pattern thus has poor maintainability.&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Since the aggregated object has it's own table, the pattern is more maintainable and flexible.&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Aggregated objects are automatically deleted on deletion of the aggregating objects.&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Aggregated objects are not automatically deleted on deletion of the aggregating objects.&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Ad-hoc queries are very hard to formulate.&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Factoring out aggregated objects allows easy querying these tables with ad-hoc queries.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
[1]http://www.objectarchitects.de/ObjectArchitects/orpatterns/&amp;lt;br&amp;gt;&lt;br /&gt;
[2]http://subs.emis.de/LNI/Proceedings/Proceedings48/GI.Band.48-6.pdf&amp;lt;br&amp;gt;&lt;br /&gt;
[3]http://www.joeyoder.com/Research/objectmappings/Persista.pdf&amp;lt;br&amp;gt;&lt;br /&gt;
[4]http://www.ibm.com/developerworks/library/ws-mapping-to-rdb/&amp;lt;br&amp;gt;&lt;br /&gt;
[5]http://www.dparsons.co.uk/mindthegap.pdf&amp;lt;br&amp;gt;&lt;br /&gt;
[6]http://proceedings.informingscience.org/InSITE2007/IISITv4p767-779Jusi281.pdf&amp;lt;br&amp;gt;&lt;br /&gt;
[7]http://www.sis.pitt.edu/~gray/INFSCI1025/references/AmblerORMMapping101Article.pdf&amp;lt;br&amp;gt;&lt;br /&gt;
[8]http://www.brettdaniel.com/files/2006/inheritancemapping.ppt&amp;lt;br&amp;gt;&lt;br /&gt;
[9]http://www.objectarchitects.de/ObjectArchitects/orpatterns/index.htm?MappingObjects2Tables/mapping_object.htm&amp;lt;br&amp;gt;&lt;br /&gt;
[10]http://databases.about.com/cs/tutorials/a/accessgup7.htm&amp;lt;br&amp;gt;&lt;br /&gt;
[11]http://www.oracle.com/technology/products/ias/toplink/doc/1013/main/_html/relmapun005.htm&amp;lt;br&amp;gt;&lt;br /&gt;
[12]http://docs.jboss.org/hibernate/core/3.3/reference/en/html/inheritance.html&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Quick Gun Murugan</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_12_Patterns_for_ORM&amp;diff=28692</id>
		<title>CSC/ECE 517 Fall 2009/wiki3 12 Patterns for ORM</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_12_Patterns_for_ORM&amp;diff=28692"/>
		<updated>2009-11-18T21:28:47Z</updated>

		<summary type="html">&lt;p&gt;Quick Gun Murugan: /* '''Single table aggregation''' */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=='''Overview'''==&lt;br /&gt;
[http://en.wikipedia.org/wiki/Object-relational_mapping Object-relational mapping] is not trivial. Apart from being based on Software Engineering principles like coupling, cohesion and polymorphism, the object paradigm focuses on building applications out of objects that have both data and behavior. However, the relational paradigm is based on mathematical principles and focuses primarily on storing data. If only data objects were to be mapped to the relational database the procedure would have been fairly straightforward. With the growing complexities of object models, concepts like aggregation, inheritance, polymorphism, association between classes, and data type (smarted than SQL data types) have to be mapped to relational table structure. The table below highlights the fundamental mismatch between object oriented data model and relational data storage.&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;4&amp;quot; width=&amp;quot;50%&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Object Oriented Data Model'''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Relational Database Management System'''&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Class&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Table&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Object&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Row&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Entity&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Key&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|State&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Data&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Behavior&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Transactions&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Inheritance&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Data Relationships&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=='''[http://docs.jboss.org/hibernate/core/3.3/reference/en/html/inheritance.html Inheritance Mapping]'''==&lt;br /&gt;
[http://en.wikipedia.org/wiki/Inheritance_(object-oriented_programming) Inheritance] in [http://en.wikipedia.org/wiki/Object-oriented_design Object Oriented Design] makes it difficult to map between object and relation databases. In this pattern, there is mapper class for each domain class that will save and load data for the domain class [8]. Mapper class allows both abstract and concrete classes to handle their own O/R mapping[8].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  [[Image:wiki_3_12.jpg]]                         [[Image:Wiki_3_12_2.jpg]]&lt;br /&gt;
    Figure 1: Domain Class                                            Figure 2: Mapper Class&lt;br /&gt;
&lt;br /&gt;
For example: - To find an employee “John”.&lt;br /&gt;
Figure 1 represents the  Employee Domain class and Figure 2 represents the corresponding Mapper Class.&lt;br /&gt;
Application calls find () method on concrete mapper object and instantiate a new Executive object. The find () will pass this executive object and database record to load () of Executive. This in turn will call the load () of Superclass. When all loads return, find returns the filled object.&lt;br /&gt;
Mappers loading and saving the domain objects is determined by the inheritance mapping. This inheritance hierarchy is represented in the database as follows:- &lt;br /&gt;
*Single Table Inheritance&lt;br /&gt;
*Class Table Inheritance &lt;br /&gt;
*Concrete Table Inheritance&lt;br /&gt;
Choosing a mapping scheme depends on speed requirement, whether database is shared and type of [http://en.wikipedia.org/wiki/Relational_database_management_system RDBMS]. &lt;br /&gt;
&lt;br /&gt;
==='''Single Table Inheritance'''===&lt;br /&gt;
Inheritance Hierarchy of all classes is represented as single table. The columns of this table will have fields of all classes in the hierarchy. Advantage of this Inheritance is that there is one table and requires no join while retrieving data. But it could lead to large confusing table and name conflicts.&lt;br /&gt;
  [[Image:wiki_3_12.jpg]]                         [[Image:Wiki_3_12_3_a.jpg]]&lt;br /&gt;
    Figure 3: Domain Class                                            Figure 4: Single Table Inheritance&lt;br /&gt;
&lt;br /&gt;
==='''Class Table Inheritance '''===&lt;br /&gt;
One table for each class is constructed. The advantage of this table inheritance is that there is clear relationship between class and table. There is high normalization. But multiple tables requires join and when fields move up and down in hierarchy, it requires changes in the tables.&lt;br /&gt;
&lt;br /&gt;
 [[Image:wiki_3_12.jpg]]                         [[Image:Wiki_3_12_4_.jpg]]&lt;br /&gt;
       Figure 5: Domain Class                           Figure 6: Class Table Inheritance&lt;br /&gt;
&lt;br /&gt;
==='''Concrete Table Inheritance'''===&lt;br /&gt;
In this hierarchy there is one table per concrete class. The table are independent, requires no join and there is no unused fields.&lt;br /&gt;
 [[Image:wiki_3_12.jpg]]                         [[Image:Wiki_3_12_5.jpg]]&lt;br /&gt;
       Figure 6: Domain Class                           Figure 7: Concrete Table Inheritance&lt;br /&gt;
&lt;br /&gt;
The strengths and weaknesses of each approach are compared below:&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;4&amp;quot; width=&amp;quot;70%&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Factors to Consider'''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''One table per hierarchy'''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''One table per concrete class'''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''One table per class'''&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Ad hoc reporting&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Simple&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Medium&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Medium/Difficult&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Ease of implementation&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Simple&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Medium&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Difficult&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Ease of data access&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Simple&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Simple&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Medium/Simple&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Coupling&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Very High&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|High&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Low&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Speed of data access&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Fast&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Fast&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Medium/Fast&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Support for polymorphism&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Medium&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Low&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|High&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=='''[http://en.wikipedia.org/wiki/Association_(object-oriented_programming) Association] Mapping'''==&lt;br /&gt;
The [http://en.wikipedia.org/wiki/Foreign_key Foreign key] is used to maintain relationships in relational databases. A row in one table can relate to a row in another table using foreign key. Therefore to implement relationships, a key of one table must include in the other table [4].&lt;br /&gt;
==='''One-to-one mapping'''===&lt;br /&gt;
If one record in Table A corresponds to exactly one row in Table B, this relationship is called One – to-one relationships [10].  In Figure 6, the address attribute of an employee class forms a one-to-one relation with the address class. In database, this relationship is stored by creating one-to- one mapping between these two objects by storing the id of Address instance in the Employee table instance is written [11]. When the employee is read form database, the address instance is linked to Employee. Here, the mapping is from Employee to Address.&lt;br /&gt;
                               [[Image:Wiki_3_12_6.gif]]&lt;br /&gt;
                                Figure 6: One-to-one mapping&lt;br /&gt;
&lt;br /&gt;
==='''One-to-many mapping'''===&lt;br /&gt;
If each record in Table A corresponds to many records in Table B , but each record in Table B links to only one record in Table A, this relationship is called One-to-many relationships [10].&lt;br /&gt;
In fig, a Order may have zero to many OrderItems. To represent in relational database, the Owner object’s OID can be inserted into OrderItem table [9]. Here, OID is Foreign Key. This is shown in fig .&lt;br /&gt;
==='''Many-to-many mapping'''===&lt;br /&gt;
If each record in Table A may links to many records in Table B and vice-versa [10], it’s called Many-to-Many relationships. In fig, let’s consider that an employee can work more than one department and department can contain more than one employee.&amp;lt;br&amp;gt;&lt;br /&gt;
The Many-to-Many relationships is represented in term of association table.  A separate table called association table is created that contains the foreign keys of participating tables [9].&lt;br /&gt;
&lt;br /&gt;
=='''[http://en.wikipedia.org/wiki/Aggregation_(object-oriented_programming) Aggregation] Mapping'''==&lt;br /&gt;
[http://en.wikipedia.org/wiki/Class_diagram#Aggregation Aggregation] is a specialized version of the association relationship. Aggregations may be mapped to relational data model either by integrating all objects' attributes into a single table or using foreign keys. &lt;br /&gt;
==='''Single table aggregation'''===&lt;br /&gt;
In this pattern the a table is created with the attributes of the Aggregating objects. The attributes of the Aggregating object is simple added to this table.&lt;br /&gt;
&lt;br /&gt;
[[Image:Index.2.png]]&lt;br /&gt;
&lt;br /&gt;
==='''Foreign key aggregation'''===&lt;br /&gt;
To achieve this create a table each for the aggregating and aggregated object. Create a foreign key reference between the two table by inserting a synthetic object identity into the aggregated objects type and reference it in the aggregating objects table.&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;4&amp;quot; width=&amp;quot;100%&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Single Table Aggregation'''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Foreign Key Aggregation'''&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Only one table needs to be accessed to retrieve an aggregating object with all its aggregated objects. On the other hand, the fields for aggregated objects’ attributes are likely to increase the number of pages retrieved with each database access, resulting in a possible waste of I/O bandwidth.&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Needs a join operation or at least two database accesses where Single Table Aggregation needs a single database operation.&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|If the same object is aggregated in more that on one object, a change in the aggregated object would require a change in a lot of database table. This pattern thus has poor maintainability.&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Since the aggregated object has it's own table, the pattern is more maintainable and flexible.&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Aggregated objects are automatically deleted on deletion of the aggregating objects.&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Aggregated objects are not automatically deleted on deletion of the aggregating objects.&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Ad-hoc queries are very hard to formulate.&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Factoring out aggregated objects allows easy querying these tables with ad-hoc queries.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
[1]http://www.objectarchitects.de/ObjectArchitects/orpatterns/&amp;lt;br&amp;gt;&lt;br /&gt;
[2]http://subs.emis.de/LNI/Proceedings/Proceedings48/GI.Band.48-6.pdf&amp;lt;br&amp;gt;&lt;br /&gt;
[3]http://www.joeyoder.com/Research/objectmappings/Persista.pdf&amp;lt;br&amp;gt;&lt;br /&gt;
[4]http://www.ibm.com/developerworks/library/ws-mapping-to-rdb/&amp;lt;br&amp;gt;&lt;br /&gt;
[5]http://www.dparsons.co.uk/mindthegap.pdf&amp;lt;br&amp;gt;&lt;br /&gt;
[6]http://proceedings.informingscience.org/InSITE2007/IISITv4p767-779Jusi281.pdf&amp;lt;br&amp;gt;&lt;br /&gt;
[7]http://www.sis.pitt.edu/~gray/INFSCI1025/references/AmblerORMMapping101Article.pdf&amp;lt;br&amp;gt;&lt;br /&gt;
[8]http://www.brettdaniel.com/files/2006/inheritancemapping.ppt&amp;lt;br&amp;gt;&lt;br /&gt;
[9]http://www.objectarchitects.de/ObjectArchitects/orpatterns/index.htm?MappingObjects2Tables/mapping_object.htm&amp;lt;br&amp;gt;&lt;br /&gt;
[10]http://databases.about.com/cs/tutorials/a/accessgup7.htm&amp;lt;br&amp;gt;&lt;br /&gt;
[11]http://www.oracle.com/technology/products/ias/toplink/doc/1013/main/_html/relmapun005.htm&amp;lt;br&amp;gt;&lt;br /&gt;
[12]http://docs.jboss.org/hibernate/core/3.3/reference/en/html/inheritance.html&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Quick Gun Murugan</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Index.4.png&amp;diff=28690</id>
		<title>File:Index.4.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Index.4.png&amp;diff=28690"/>
		<updated>2009-11-18T21:28:12Z</updated>

		<summary type="html">&lt;p&gt;Quick Gun Murugan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Quick Gun Murugan</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Index.2.png&amp;diff=28688</id>
		<title>File:Index.2.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Index.2.png&amp;diff=28688"/>
		<updated>2009-11-18T21:27:48Z</updated>

		<summary type="html">&lt;p&gt;Quick Gun Murugan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Quick Gun Murugan</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_12_Patterns_for_ORM&amp;diff=27786</id>
		<title>CSC/ECE 517 Fall 2009/wiki3 12 Patterns for ORM</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_12_Patterns_for_ORM&amp;diff=27786"/>
		<updated>2009-11-18T01:42:03Z</updated>

		<summary type="html">&lt;p&gt;Quick Gun Murugan: /* '''Foreign key aggregation''' */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=='''Overview'''==&lt;br /&gt;
[http://en.wikipedia.org/wiki/Object-relational_mapping Object-relational mapping] is not trivial. Apart from being based on Software Engineering principles like coupling, cohesion and polymorphism, the object paradigm focuses on building applications out of objects that have both data and behavior. However, the relational paradigm is based on mathematical principles and focuses primarily on storing data. If only data objects were to be mapped to the relational database the procedure would have been fairly straightforward. With the growing complexities of object models, concepts like aggregation, inheritance, polymorphism, association between classes, and data type (smarted than SQL data types) have to be mapped to relational table structure. The table below highlights the fundamental mismatch between object oriented data model and relational data storage.&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;4&amp;quot; width=&amp;quot;50%&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Object Oriented Data Model'''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Relational Database Management System'''&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Class&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Table&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Object&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Row&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Entity&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Key&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|State&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Data&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Behavior&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Transactions&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Inheritance&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Data Relationships&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=='''[http://docs.jboss.org/hibernate/core/3.3/reference/en/html/inheritance.html Inheritance Mapping]'''==&lt;br /&gt;
[http://en.wikipedia.org/wiki/Inheritance_(object-oriented_programming) Inheritance] in [http://en.wikipedia.org/wiki/Object-oriented_design Object Oriented Design] makes it difficult to map between object and relation databases. In this pattern, there is mapper class for each domain class that will save and load data for the domain class [8]. Mapper class allows both abstract and concrete classes to handle their own O/R mapping[8].&lt;br /&gt;
&lt;br /&gt;
For example: - To find an employee “John”:- &lt;br /&gt;
Application calls find () method on concrete mapper object and instantiate a new Executive object. The find () will pass this executive object and database record to load () of Executive. This in turn will call the load () of Superclass. When all loads return, find returns the filled object.&lt;br /&gt;
Mappers loading and saving the domain objects is determined by the inheritance mapping. This inheritance hierarchy is represented in the database as follows:- &lt;br /&gt;
*Single Table Inheritance&lt;br /&gt;
*Class Table Inheritance &lt;br /&gt;
*Concrete Table Inheritance&lt;br /&gt;
Choosing a mapping scheme depends on speed requirement, whether database is shared and type of [http://en.wikipedia.org/wiki/Relational_database_management_system RDBMS]. &lt;br /&gt;
&lt;br /&gt;
==='''Single Table Inheritance'''===&lt;br /&gt;
Inheritance Hierarchy of all classes is represented as single table. The columns of this table will have fields of all classes in the hierarchy. Advantage of this Inheritance is that there is one table and requires no join while retrieving data. But it could lead to large confusing table and name conflicts.&lt;br /&gt;
&lt;br /&gt;
==='''Class Table Inheritance '''===&lt;br /&gt;
One table for each class is constructed. The advantage of this table inheritance is that there is clear relationship between class and table. There is high normalization. But multiple tables requires join and when fields move up and down in hierarchy, it requires changes in the tables.&lt;br /&gt;
&lt;br /&gt;
==='''Concrete Table Inheritance'''===&lt;br /&gt;
In this hierarchy there is one table per concrete class. The table are independent, requires no join and there is no unused fields.&lt;br /&gt;
&lt;br /&gt;
The strengths and weaknesses of each approach are compared below:&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;4&amp;quot; width=&amp;quot;70%&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Factors to Consider'''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''One table per hierarchy'''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''One table per concrete class'''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''One table per class'''&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Ad hoc reporting&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Simple&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Medium&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Medium/Difficult&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Ease of implementation&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Simple&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Medium&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Difficult&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Ease of data access&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Simple&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Simple&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Medium/Simple&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Coupling&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Very High&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|High&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Low&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Speed of data access&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Fast&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Fast&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Medium/Fast&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Support for polymorphism&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Medium&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Low&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|High&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=='''[http://en.wikipedia.org/wiki/Association_(object-oriented_programming) Association] Mapping'''==&lt;br /&gt;
The [http://en.wikipedia.org/wiki/Foreign_key Foreign key] is used to maintain relationships in relational databases. A row in one table can relate to a row in another table using foreign key. Therefore to implement relationships, a key of one table must include in the other table [4].&lt;br /&gt;
==='''One-to-one mapping'''===&lt;br /&gt;
If one record in Table A corresponds to exactly one row in Table B, this relationship is called One – to-one relationships [10].  In fig, the address attribute of an employee class forms a one-to-one relation with the address class. In database, this relationship is stored by creating one-to- one mapping between these two objects by storing the id of Address instance in the Employee table instance is written [11]. When the employee is read form database, the address instance is linked to Employee. Here, the mapping is from Employee to Address.&lt;br /&gt;
==='''One-to-many mapping'''===&lt;br /&gt;
If each record in Table A corresponds to many records in Table B , but each record in Table B links to only one record in Table A, this relationship is called One-to-many relationships [10].&lt;br /&gt;
In fig, a Order may have zero to many OrderItems. To represent in relational database, the Owner object’s OID can be inserted into OrderItem table [9]. Here, OID is Foreign Key. This is shown in fig .&lt;br /&gt;
==='''Many-to-many mapping'''===&lt;br /&gt;
If each record in Table A may links to many records in Table B and vice-versa [10], it’s called Many-to-Many relationships. In fig, let’s consider that an employee can work more than one department and department can contain more than one employee.&amp;lt;br&amp;gt;&lt;br /&gt;
The Many-to-Many relationships is represented in term of association table.  A separate table called association table is created that contains the foreign keys of participating tables [9].&lt;br /&gt;
&lt;br /&gt;
=='''[http://en.wikipedia.org/wiki/Aggregation_(object-oriented_programming) Aggregation] Mapping'''==&lt;br /&gt;
[http://en.wikipedia.org/wiki/Class_diagram#Aggregation Aggregation] is a specialized version of the association relationship. Aggregations may be mapped to relational data model either by integrating all objects' attributes into a single table or using foreign keys. &lt;br /&gt;
==='''Single table aggregation'''===&lt;br /&gt;
In this pattern the a table is created with the attributes of the Aggregating objects. The attributes of the Aggregating object is simple added to this table.&lt;br /&gt;
&lt;br /&gt;
==='''Foreign key aggregation'''===&lt;br /&gt;
To achieve this create a table each for the aggregating and aggregated object. Create a foreign key reference between the two table by inserting a synthetic object identity into the aggregated objects type and reference it in the aggregating objects table.&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;4&amp;quot; width=&amp;quot;100%&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Single Table Aggregation'''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Foreign Key Aggregation'''&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Only one table needs to be accessed to retrieve an aggregating object with all its aggregated objects. On the other hand, the fields for aggregated objects’ attributes are likely to increase the number of pages retrieved with each database access, resulting in a possible waste of I/O bandwidth.&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Needs a join operation or at least two database accesses where Single Table Aggregation needs a single database operation.&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|If the same object is aggregated in more that on one object, a change in the aggregated object would require a change in a lot of database table. This pattern thus has poor maintainability.&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Since the aggregated object has it's own table, the pattern is more maintainable and flexible.&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Aggregated objects are automatically deleted on deletion of the aggregating objects.&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Aggregated objects are not automatically deleted on deletion of the aggregating objects.&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Ad-hoc queries are very hard to formulate.&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Factoring out aggregated objects allows easy querying these tables with ad-hoc queries.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
[1]http://www.objectarchitects.de/ObjectArchitects/orpatterns/&amp;lt;br&amp;gt;&lt;br /&gt;
[2]http://subs.emis.de/LNI/Proceedings/Proceedings48/GI.Band.48-6.pdf&amp;lt;br&amp;gt;&lt;br /&gt;
[3]http://www.joeyoder.com/Research/objectmappings/Persista.pdf&amp;lt;br&amp;gt;&lt;br /&gt;
[4]http://www.ibm.com/developerworks/library/ws-mapping-to-rdb/&amp;lt;br&amp;gt;&lt;br /&gt;
[5]http://www.dparsons.co.uk/mindthegap.pdf&amp;lt;br&amp;gt;&lt;br /&gt;
[6]http://proceedings.informingscience.org/InSITE2007/IISITv4p767-779Jusi281.pdf&amp;lt;br&amp;gt;&lt;br /&gt;
[7]http://www.sis.pitt.edu/~gray/INFSCI1025/references/AmblerORMMapping101Article.pdf&amp;lt;br&amp;gt;&lt;br /&gt;
[8]http://www.brettdaniel.com/files/2006/inheritancemapping.ppt&amp;lt;br&amp;gt;&lt;br /&gt;
[9]http://www.objectarchitects.de/ObjectArchitects/orpatterns/index.htm?MappingObjects2Tables/mapping_object.htm&amp;lt;br&amp;gt;&lt;br /&gt;
[10]http://databases.about.com/cs/tutorials/a/accessgup7.htm&amp;lt;br&amp;gt;&lt;br /&gt;
[11]http://www.oracle.com/technology/products/ias/toplink/doc/1013/main/_html/relmapun005.htm&amp;lt;br&amp;gt;&lt;br /&gt;
[12]http://docs.jboss.org/hibernate/core/3.3/reference/en/html/inheritance.html&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Quick Gun Murugan</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_12_Patterns_for_ORM&amp;diff=27782</id>
		<title>CSC/ECE 517 Fall 2009/wiki3 12 Patterns for ORM</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_12_Patterns_for_ORM&amp;diff=27782"/>
		<updated>2009-11-18T01:41:09Z</updated>

		<summary type="html">&lt;p&gt;Quick Gun Murugan: /* '''Foreign key aggregation''' */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=='''Overview'''==&lt;br /&gt;
[http://en.wikipedia.org/wiki/Object-relational_mapping Object-relational mapping] is not trivial. Apart from being based on Software Engineering principles like coupling, cohesion and polymorphism, the object paradigm focuses on building applications out of objects that have both data and behavior. However, the relational paradigm is based on mathematical principles and focuses primarily on storing data. If only data objects were to be mapped to the relational database the procedure would have been fairly straightforward. With the growing complexities of object models, concepts like aggregation, inheritance, polymorphism, association between classes, and data type (smarted than SQL data types) have to be mapped to relational table structure. The table below highlights the fundamental mismatch between object oriented data model and relational data storage.&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;4&amp;quot; width=&amp;quot;50%&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Object Oriented Data Model'''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Relational Database Management System'''&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Class&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Table&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Object&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Row&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Entity&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Key&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|State&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Data&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Behavior&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Transactions&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Inheritance&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Data Relationships&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=='''[http://docs.jboss.org/hibernate/core/3.3/reference/en/html/inheritance.html Inheritance Mapping]'''==&lt;br /&gt;
[http://en.wikipedia.org/wiki/Inheritance_(object-oriented_programming) Inheritance] in [http://en.wikipedia.org/wiki/Object-oriented_design Object Oriented Design] makes it difficult to map between object and relation databases. In this pattern, there is mapper class for each domain class that will save and load data for the domain class [8]. Mapper class allows both abstract and concrete classes to handle their own O/R mapping[8].&lt;br /&gt;
&lt;br /&gt;
For example: - To find an employee “John”:- &lt;br /&gt;
Application calls find () method on concrete mapper object and instantiate a new Executive object. The find () will pass this executive object and database record to load () of Executive. This in turn will call the load () of Superclass. When all loads return, find returns the filled object.&lt;br /&gt;
Mappers loading and saving the domain objects is determined by the inheritance mapping. This inheritance hierarchy is represented in the database as follows:- &lt;br /&gt;
*Single Table Inheritance&lt;br /&gt;
*Class Table Inheritance &lt;br /&gt;
*Concrete Table Inheritance&lt;br /&gt;
Choosing a mapping scheme depends on speed requirement, whether database is shared and type of [http://en.wikipedia.org/wiki/Relational_database_management_system RDBMS]. &lt;br /&gt;
&lt;br /&gt;
==='''Single Table Inheritance'''===&lt;br /&gt;
Inheritance Hierarchy of all classes is represented as single table. The columns of this table will have fields of all classes in the hierarchy. Advantage of this Inheritance is that there is one table and requires no join while retrieving data. But it could lead to large confusing table and name conflicts.&lt;br /&gt;
&lt;br /&gt;
==='''Class Table Inheritance '''===&lt;br /&gt;
One table for each class is constructed. The advantage of this table inheritance is that there is clear relationship between class and table. There is high normalization. But multiple tables requires join and when fields move up and down in hierarchy, it requires changes in the tables.&lt;br /&gt;
&lt;br /&gt;
==='''Concrete Table Inheritance'''===&lt;br /&gt;
In this hierarchy there is one table per concrete class. The table are independent, requires no join and there is no unused fields.&lt;br /&gt;
&lt;br /&gt;
The strengths and weaknesses of each approach are compared below:&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;4&amp;quot; width=&amp;quot;70%&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Factors to Consider'''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''One table per hierarchy'''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''One table per concrete class'''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''One table per class'''&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Ad hoc reporting&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Simple&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Medium&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Medium/Difficult&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Ease of implementation&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Simple&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Medium&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Difficult&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Ease of data access&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Simple&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Simple&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Medium/Simple&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Coupling&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Very High&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|High&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Low&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Speed of data access&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Fast&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Fast&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Medium/Fast&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Support for polymorphism&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Medium&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Low&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|High&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=='''[http://en.wikipedia.org/wiki/Association_(object-oriented_programming) Association] Mapping'''==&lt;br /&gt;
The [http://en.wikipedia.org/wiki/Foreign_key Foreign key] is used to maintain relationships in relational databases. A row in one table can relate to a row in another table using foreign key. Therefore to implement relationships, a key of one table must include in the other table [4].&lt;br /&gt;
==='''One-to-one mapping'''===&lt;br /&gt;
If one record in Table A corresponds to exactly one row in Table B, this relationship is called One – to-one relationships [10].  In fig, the address attribute of an employee class forms a one-to-one relation with the address class. In database, this relationship is stored by creating one-to- one mapping between these two objects by storing the id of Address instance in the Employee table instance is written [11]. When the employee is read form database, the address instance is linked to Employee. Here, the mapping is from Employee to Address.&lt;br /&gt;
==='''One-to-many mapping'''===&lt;br /&gt;
If each record in Table A corresponds to many records in Table B , but each record in Table B links to only one record in Table A, this relationship is called One-to-many relationships [10].&lt;br /&gt;
In fig, a Order may have zero to many OrderItems. To represent in relational database, the Owner object’s OID can be inserted into OrderItem table [9]. Here, OID is Foreign Key. This is shown in fig .&lt;br /&gt;
==='''Many-to-many mapping'''===&lt;br /&gt;
If each record in Table A may links to many records in Table B and vice-versa [10], it’s called Many-to-Many relationships. In fig, let’s consider that an employee can work more than one department and department can contain more than one employee.&amp;lt;br&amp;gt;&lt;br /&gt;
The Many-to-Many relationships is represented in term of association table.  A separate table called association table is created that contains the foreign keys of participating tables [9].&lt;br /&gt;
&lt;br /&gt;
=='''[http://en.wikipedia.org/wiki/Aggregation_(object-oriented_programming) Aggregation] Mapping'''==&lt;br /&gt;
[http://en.wikipedia.org/wiki/Class_diagram#Aggregation Aggregation] is a specialized version of the association relationship. Aggregations may be mapped to relational data model either by integrating all objects' attributes into a single table or using foreign keys. &lt;br /&gt;
==='''Single table aggregation'''===&lt;br /&gt;
In this pattern the a table is created with the attributes of the Aggregating objects. The attributes of the Aggregating object is simple added to this table.&lt;br /&gt;
&lt;br /&gt;
==='''Foreign key aggregation'''===&lt;br /&gt;
To achieve this create a table each for the aggregating and aggregated object. Create a foreign key reference between the two table by inserting a synthetic object identity into the aggregated objects type and reference it in the aggregating objects table.&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;4&amp;quot; width=&amp;quot;100%&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Single Table Aggregation'''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Foreign Key Aggregation'''&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Only one table needs to be accessed to retrieve an aggregating object with all its aggregated objects. On the other hand, the fields for aggregated objects’ attributes are likely to increase the number of pages retrieved with each database access, resulting in a possible waste of I/O bandwidth.&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Needs a join operation or at least two database accesses where Single Table Aggregation needs a single database operation.&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|If the same object is aggregated in more that on one object, a change in the aggregated object would require a change in a lot of database table. This pattern thus has poor maintainability.&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Since the aggregated object has it's own table, the pattern is more maintainable and flexible.&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Aggregated objects are automatically deleted on deletion of the aggregating objects.&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Aggregated objects are not automatically deleted on deletion of the aggregating objects.&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Ad-hoc queries are very hard to formulate.&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Factoring out aggregated objects allows easy querying these tables with ad-hoc queries.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ad-hoc queries: Factoring out aggregated objects into separate tables allows easy querying these tables with ad-hoc queries.&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
[1]http://www.objectarchitects.de/ObjectArchitects/orpatterns/&amp;lt;br&amp;gt;&lt;br /&gt;
[2]http://subs.emis.de/LNI/Proceedings/Proceedings48/GI.Band.48-6.pdf&amp;lt;br&amp;gt;&lt;br /&gt;
[3]http://www.joeyoder.com/Research/objectmappings/Persista.pdf&amp;lt;br&amp;gt;&lt;br /&gt;
[4]http://www.ibm.com/developerworks/library/ws-mapping-to-rdb/&amp;lt;br&amp;gt;&lt;br /&gt;
[5]http://www.dparsons.co.uk/mindthegap.pdf&amp;lt;br&amp;gt;&lt;br /&gt;
[6]http://proceedings.informingscience.org/InSITE2007/IISITv4p767-779Jusi281.pdf&amp;lt;br&amp;gt;&lt;br /&gt;
[7]http://www.sis.pitt.edu/~gray/INFSCI1025/references/AmblerORMMapping101Article.pdf&amp;lt;br&amp;gt;&lt;br /&gt;
[8]http://www.brettdaniel.com/files/2006/inheritancemapping.ppt&amp;lt;br&amp;gt;&lt;br /&gt;
[9]http://www.objectarchitects.de/ObjectArchitects/orpatterns/index.htm?MappingObjects2Tables/mapping_object.htm&amp;lt;br&amp;gt;&lt;br /&gt;
[10]http://databases.about.com/cs/tutorials/a/accessgup7.htm&amp;lt;br&amp;gt;&lt;br /&gt;
[11]http://www.oracle.com/technology/products/ias/toplink/doc/1013/main/_html/relmapun005.htm&amp;lt;br&amp;gt;&lt;br /&gt;
[12]http://docs.jboss.org/hibernate/core/3.3/reference/en/html/inheritance.html&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Quick Gun Murugan</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_12_Patterns_for_ORM&amp;diff=27761</id>
		<title>CSC/ECE 517 Fall 2009/wiki3 12 Patterns for ORM</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_12_Patterns_for_ORM&amp;diff=27761"/>
		<updated>2009-11-18T01:23:57Z</updated>

		<summary type="html">&lt;p&gt;Quick Gun Murugan: /* '''Foreign key aggregation''' */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=='''Overview'''==&lt;br /&gt;
[http://en.wikipedia.org/wiki/Object-relational_mapping Object-relational mapping] is not trivial. Apart from being based on Software Engineering principles like coupling, cohesion and polymorphism, the object paradigm focuses on building applications out of objects that have both data and behavior. However, the relational paradigm is based on mathematical principles and focuses primarily on storing data. If only data objects were to be mapped to the relational database the procedure would have been fairly straightforward. With the growing complexities of object models, concepts like aggregation, inheritance, polymorphism, association between classes, and data type (smarted than SQL data types) have to be mapped to relational table structure. The table below highlights the fundamental mismatch between object oriented data model and relational data storage.&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;4&amp;quot; width=&amp;quot;50%&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Object Oriented Data Model'''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Relational Database Management System'''&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Class&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Table&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Object&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Row&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Entity&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Key&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|State&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Data&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Behavior&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Transactions&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Inheritance&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Data Relationships&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=='''[http://docs.jboss.org/hibernate/core/3.3/reference/en/html/inheritance.html Inheritance Mapping]'''==&lt;br /&gt;
[http://en.wikipedia.org/wiki/Inheritance_(object-oriented_programming) Inheritance] in [http://en.wikipedia.org/wiki/Object-oriented_design Object Oriented Design] makes it difficult to map between object and relation databases. In this pattern, there is mapper class for each domain class that will save and load data for the domain class [8]. Mapper class allows both abstract and concrete classes to handle their own O/R mapping[8].&lt;br /&gt;
&lt;br /&gt;
For example: - To find an employee “John”:- &lt;br /&gt;
Application calls find () method on concrete mapper object and instantiate a new Executive object. The find () will pass this executive object and database record to load () of Executive. This in turn will call the load () of Superclass. When all loads return, find returns the filled object.&lt;br /&gt;
Mappers loading and saving the domain objects is determined by the inheritance mapping. This inheritance hierarchy is represented in the database as follows:- &lt;br /&gt;
*Single Table Inheritance&lt;br /&gt;
*Class Table Inheritance &lt;br /&gt;
*Concrete Table Inheritance&lt;br /&gt;
Choosing a mapping scheme depends on speed requirement, whether database is shared and type of [http://en.wikipedia.org/wiki/Relational_database_management_system RDBMS]. &lt;br /&gt;
&lt;br /&gt;
==='''Single Table Inheritance'''===&lt;br /&gt;
Inheritance Hierarchy of all classes is represented as single table. The columns of this table will have fields of all classes in the hierarchy. Advantage of this Inheritance is that there is one table and requires no join while retrieving data. But it could lead to large confusing table and name conflicts.&lt;br /&gt;
&lt;br /&gt;
==='''Class Table Inheritance '''===&lt;br /&gt;
One table for each class is constructed. The advantage of this table inheritance is that there is clear relationship between class and table. There is high normalization. But multiple tables requires join and when fields move up and down in hierarchy, it requires changes in the tables.&lt;br /&gt;
&lt;br /&gt;
==='''Concrete Table Inheritance'''===&lt;br /&gt;
In this hierarchy there is one table per concrete class. The table are independent, requires no join and there is no unused fields.&lt;br /&gt;
&lt;br /&gt;
The strengths and weaknesses of each approach are compared below:&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;4&amp;quot; width=&amp;quot;70%&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Factors to Consider'''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''One table per hierarchy'''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''One table per concrete class'''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''One table per class'''&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Ad hoc reporting&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Simple&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Medium&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Medium/Difficult&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Ease of implementation&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Simple&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Medium&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Difficult&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Ease of data access&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Simple&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Simple&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Medium/Simple&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Coupling&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Very High&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|High&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Low&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Speed of data access&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Fast&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Fast&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Medium/Fast&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Support for polymorphism&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Medium&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Low&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|High&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=='''[http://en.wikipedia.org/wiki/Association_(object-oriented_programming) Association] Mapping'''==&lt;br /&gt;
The [http://en.wikipedia.org/wiki/Foreign_key Foreign key] is used to maintain relationships in relational databases. A row in one table can relate to a row in another table using foreign key. Therefore to implement relationships, a key of one table must include in the other table [4].&lt;br /&gt;
==='''One-to-one mapping'''===&lt;br /&gt;
If one record in Table A corresponds to exactly one row in Table B, this relationship is called One – to-one relationships [10].  In fig, the address attribute of an employee class forms a one-to-one relation with the address class. In database, this relationship is stored by creating one-to- one mapping between these two objects by storing the id of Address instance in the Employee table instance is written [11]. When the employee is read form database, the address instance is linked to Employee. Here, the mapping is from Employee to Address.&lt;br /&gt;
==='''One-to-many mapping'''===&lt;br /&gt;
If each record in Table A corresponds to many records in Table B , but each record in Table B links to only one record in Table A, this relationship is called One-to-many relationships [10].&lt;br /&gt;
In fig, a Order may have zero to many OrderItems. To represent in relational database, the Owner object’s OID can be inserted into OrderItem table [9]. Here, OID is Foreign Key. This is shown in fig .&lt;br /&gt;
==='''Many-to-many mapping'''===&lt;br /&gt;
If each record in Table A may links to many records in Table B and vice-versa [10], it’s called Many-to-Many relationships. In fig, let’s consider that an employee can work more than one department and department can contain more than one employee.&amp;lt;br&amp;gt;&lt;br /&gt;
The Many-to-Many relationships is represented in term of association table.  A separate table called association table is created that contains the foreign keys of participating tables [9].&lt;br /&gt;
&lt;br /&gt;
=='''[http://en.wikipedia.org/wiki/Aggregation_(object-oriented_programming) Aggregation] Mapping'''==&lt;br /&gt;
[http://en.wikipedia.org/wiki/Class_diagram#Aggregation Aggregation] is a specialized version of the association relationship. Aggregations may be mapped to relational data model either by integrating all objects' attributes into a single table or using foreign keys. &lt;br /&gt;
==='''Single table aggregation'''===&lt;br /&gt;
In this pattern the a table is created with the attributes of the Aggregating objects. The attributes of the Aggregating object is simple added to this table.&lt;br /&gt;
&lt;br /&gt;
==='''Foreign key aggregation'''===&lt;br /&gt;
To achieve this create a table each for the aggregating and aggregated object. Create a foreign key reference between the two table by inserting a synthetic object identity into the aggregated objects type and reference it in the aggregating objects table.&lt;br /&gt;
&lt;br /&gt;
Comparison&lt;br /&gt;
&lt;br /&gt;
Performance: For optimal performance the solution should allow to retrieve an object with one database access without any join operations. Database accesses should fetch a minimum number of pages to economize on I/O bandwidth.&lt;br /&gt;
&lt;br /&gt;
 Maintainability: For optimal maintainability, aggregated types, that are aggregated in more than one object type, should be mapped to one set of tables instead of being strayed identically across many different spots in the physical data model. Normalization should be used at the data model level to ease maintenance and ad hoc queries.&lt;br /&gt;
&lt;br /&gt;
 Consistency of the database: Aggregation implies that the aggregated object’s life cycle is coupled with the aggregating object’s life cycle. This has to guaranteed by either the database or application code&lt;br /&gt;
&lt;br /&gt;
Performance: Foreign Key Aggregation needs a join operation or at least two database accesses where Single Table Aggregation needs a single database operation. If accessing aggregated objects is a statistical rare case this is acceptable. If the aggregated objects are always retrieved together with the aggregating object, you have to have a second look at performance here.&lt;br /&gt;
&lt;br /&gt;
 Maintenance: Factoring out objects like the AddressTypes into tables of their own makes them easier to maintain and hence makes the mapping more flexible.&lt;br /&gt;
&lt;br /&gt;
Consistency of the database: Aggregated objects are not automatically deleted on deletion of the aggregating objects. To perform this task you have to provide and maintain application kernel code or database triggers. This is also an implementation issue. You have to chose one of these two options.&lt;br /&gt;
&lt;br /&gt;
Ad-hoc queries: Factoring out aggregated objects into separate tables allows easy querying these tables with ad-hoc queries.&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
[1]http://www.objectarchitects.de/ObjectArchitects/orpatterns/&amp;lt;br&amp;gt;&lt;br /&gt;
[2]http://subs.emis.de/LNI/Proceedings/Proceedings48/GI.Band.48-6.pdf&amp;lt;br&amp;gt;&lt;br /&gt;
[3]http://www.joeyoder.com/Research/objectmappings/Persista.pdf&amp;lt;br&amp;gt;&lt;br /&gt;
[4]http://www.ibm.com/developerworks/library/ws-mapping-to-rdb/&amp;lt;br&amp;gt;&lt;br /&gt;
[5]http://www.dparsons.co.uk/mindthegap.pdf&amp;lt;br&amp;gt;&lt;br /&gt;
[6]http://proceedings.informingscience.org/InSITE2007/IISITv4p767-779Jusi281.pdf&amp;lt;br&amp;gt;&lt;br /&gt;
[7]http://www.sis.pitt.edu/~gray/INFSCI1025/references/AmblerORMMapping101Article.pdf&amp;lt;br&amp;gt;&lt;br /&gt;
[8]http://www.brettdaniel.com/files/2006/inheritancemapping.ppt&amp;lt;br&amp;gt;&lt;br /&gt;
[9]http://www.objectarchitects.de/ObjectArchitects/orpatterns/index.htm?MappingObjects2Tables/mapping_object.htm&amp;lt;br&amp;gt;&lt;br /&gt;
[10]http://databases.about.com/cs/tutorials/a/accessgup7.htm&amp;lt;br&amp;gt;&lt;br /&gt;
[11]http://www.oracle.com/technology/products/ias/toplink/doc/1013/main/_html/relmapun005.htm&amp;lt;br&amp;gt;&lt;br /&gt;
[12]http://docs.jboss.org/hibernate/core/3.3/reference/en/html/inheritance.html&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Quick Gun Murugan</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_12_Patterns_for_ORM&amp;diff=27751</id>
		<title>CSC/ECE 517 Fall 2009/wiki3 12 Patterns for ORM</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_12_Patterns_for_ORM&amp;diff=27751"/>
		<updated>2009-11-18T01:11:58Z</updated>

		<summary type="html">&lt;p&gt;Quick Gun Murugan: /* '''Single table aggregation''' */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=='''Overview'''==&lt;br /&gt;
[http://en.wikipedia.org/wiki/Object-relational_mapping Object-relational mapping] is not trivial. Apart from being based on Software Engineering principles like coupling, cohesion and polymorphism, the object paradigm focuses on building applications out of objects that have both data and behavior. However, the relational paradigm is based on mathematical principles and focuses primarily on storing data. If only data objects were to be mapped to the relational database the procedure would have been fairly straightforward. With the growing complexities of object models, concepts like aggregation, inheritance, polymorphism, association between classes, and data type (smarted than SQL data types) have to be mapped to relational table structure. The table below highlights the fundamental mismatch between object oriented data model and relational data storage.&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;4&amp;quot; width=&amp;quot;50%&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Object Oriented Data Model'''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Relational Database Management System'''&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Class&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Table&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Object&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Row&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Entity&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Key&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|State&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Data&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Behavior&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Transactions&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Inheritance&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Data Relationships&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=='''[http://docs.jboss.org/hibernate/core/3.3/reference/en/html/inheritance.html Inheritance Mapping]'''==&lt;br /&gt;
[http://en.wikipedia.org/wiki/Inheritance_(object-oriented_programming) Inheritance] in [http://en.wikipedia.org/wiki/Object-oriented_design Object Oriented Design] makes it difficult to map between object and relation databases. In this pattern, there is mapper class for each domain class that will save and load data for the domain class [8]. Mapper class allows both abstract and concrete classes to handle their own O/R mapping[8].&lt;br /&gt;
&lt;br /&gt;
For example: - To find an employee “John”:- &lt;br /&gt;
Application calls find () method on concrete mapper object and instantiate a new Executive object. The find () will pass this executive object and database record to load () of Executive. This in turn will call the load () of Superclass. When all loads return, find returns the filled object.&lt;br /&gt;
Mappers loading and saving the domain objects is determined by the inheritance mapping. This inheritance hierarchy is represented in the database as follows:- &lt;br /&gt;
*Single Table Inheritance&lt;br /&gt;
*Class Table Inheritance &lt;br /&gt;
*Concrete Table Inheritance&lt;br /&gt;
Choosing a mapping scheme depends on speed requirement, whether database is shared and type of [http://en.wikipedia.org/wiki/Relational_database_management_system RDBMS]. &lt;br /&gt;
&lt;br /&gt;
==='''Single Table Inheritance'''===&lt;br /&gt;
Inheritance Hierarchy of all classes is represented as single table. The columns of this table will have fields of all classes in the hierarchy. Advantage of this Inheritance is that there is one table and requires no join while retrieving data. But it could lead to large confusing table and name conflicts.&lt;br /&gt;
&lt;br /&gt;
==='''Class Table Inheritance '''===&lt;br /&gt;
One table for each class is constructed. The advantage of this table inheritance is that there is clear relationship between class and table. There is high normalization. But multiple tables requires join and when fields move up and down in hierarchy, it requires changes in the tables.&lt;br /&gt;
&lt;br /&gt;
==='''Concrete Table Inheritance'''===&lt;br /&gt;
In this hierarchy there is one table per concrete class. The table are independent, requires no join and there is no unused fields.&lt;br /&gt;
&lt;br /&gt;
The strengths and weaknesses of each approach are compared below:&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;4&amp;quot; width=&amp;quot;70%&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Factors to Consider'''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''One table per hierarchy'''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''One table per concrete class'''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''One table per class'''&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Ad hoc reporting&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Simple&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Medium&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Medium/Difficult&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Ease of implementation&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Simple&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Medium&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Difficult&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Ease of data access&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Simple&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Simple&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Medium/Simple&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Coupling&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Very High&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|High&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Low&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Speed of data access&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Fast&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Fast&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Medium/Fast&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Support for polymorphism&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Medium&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Low&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|High&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=='''[http://en.wikipedia.org/wiki/Association_(object-oriented_programming) Association] Mapping'''==&lt;br /&gt;
The [http://en.wikipedia.org/wiki/Foreign_key Foreign key] is used to maintain relationships in relational databases. A row in one table can relate to a row in another table using foreign key. Therefore to implement relationships, a key of one table must include in the other table [4].&lt;br /&gt;
==='''One-to-one mapping'''===&lt;br /&gt;
If one record in Table A corresponds to exactly one row in Table B, this relationship is called One – to-one relationships [10].  In fig, the address attribute of an employee class forms a one-to-one relation with the address class. In database, this relationship is stored by creating one-to- one mapping between these two objects by storing the id of Address instance in the Employee table instance is written [11]. When the employee is read form database, the address instance is linked to Employee. Here, the mapping is from Employee to Address.&lt;br /&gt;
==='''One-to-many mapping'''===&lt;br /&gt;
If each record in Table A corresponds to many records in Table B , but each record in Table B links to only one record in Table A, this relationship is called One-to-many relationships [10].&lt;br /&gt;
In fig, a Order may have zero to many OrderItems. To represent in relational database, the Owner object’s OID can be inserted into OrderItem table [9]. Here, OID is Foreign Key. This is shown in fig .&lt;br /&gt;
==='''Many-to-many mapping'''===&lt;br /&gt;
If each record in Table A may links to many records in Table B and vice-versa [10], it’s called Many-to-Many relationships. In fig, let’s consider that an employee can work more than one department and department can contain more than one employee.&amp;lt;br&amp;gt;&lt;br /&gt;
The Many-to-Many relationships is represented in term of association table.  A separate table called association table is created that contains the foreign keys of participating tables [9].&lt;br /&gt;
&lt;br /&gt;
=='''[http://en.wikipedia.org/wiki/Aggregation_(object-oriented_programming) Aggregation] Mapping'''==&lt;br /&gt;
[http://en.wikipedia.org/wiki/Class_diagram#Aggregation Aggregation] is a specialized version of the association relationship. Aggregations may be mapped to relational data model either by integrating all objects' attributes into a single table or using foreign keys. &lt;br /&gt;
==='''Single table aggregation'''===&lt;br /&gt;
In this pattern the a table is created with the attributes of the Aggregating objects. The attributes of the Aggregating object is simple added to this table.&lt;br /&gt;
&lt;br /&gt;
==='''Foreign key aggregation'''===&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
[1]http://www.objectarchitects.de/ObjectArchitects/orpatterns/&amp;lt;br&amp;gt;&lt;br /&gt;
[2]http://subs.emis.de/LNI/Proceedings/Proceedings48/GI.Band.48-6.pdf&amp;lt;br&amp;gt;&lt;br /&gt;
[3]http://www.joeyoder.com/Research/objectmappings/Persista.pdf&amp;lt;br&amp;gt;&lt;br /&gt;
[4]http://www.ibm.com/developerworks/library/ws-mapping-to-rdb/&amp;lt;br&amp;gt;&lt;br /&gt;
[5]http://www.dparsons.co.uk/mindthegap.pdf&amp;lt;br&amp;gt;&lt;br /&gt;
[6]http://proceedings.informingscience.org/InSITE2007/IISITv4p767-779Jusi281.pdf&amp;lt;br&amp;gt;&lt;br /&gt;
[7]http://www.sis.pitt.edu/~gray/INFSCI1025/references/AmblerORMMapping101Article.pdf&amp;lt;br&amp;gt;&lt;br /&gt;
[8]http://www.brettdaniel.com/files/2006/inheritancemapping.ppt&amp;lt;br&amp;gt;&lt;br /&gt;
[9]http://www.objectarchitects.de/ObjectArchitects/orpatterns/index.htm?MappingObjects2Tables/mapping_object.htm&amp;lt;br&amp;gt;&lt;br /&gt;
[10]http://databases.about.com/cs/tutorials/a/accessgup7.htm&amp;lt;br&amp;gt;&lt;br /&gt;
[11]http://www.oracle.com/technology/products/ias/toplink/doc/1013/main/_html/relmapun005.htm&amp;lt;br&amp;gt;&lt;br /&gt;
[12]http://docs.jboss.org/hibernate/core/3.3/reference/en/html/inheritance.html&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Quick Gun Murugan</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_12_Patterns_for_ORM&amp;diff=27747</id>
		<title>CSC/ECE 517 Fall 2009/wiki3 12 Patterns for ORM</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_12_Patterns_for_ORM&amp;diff=27747"/>
		<updated>2009-11-18T01:05:01Z</updated>

		<summary type="html">&lt;p&gt;Quick Gun Murugan: /* '''References''' */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=='''Overview'''==&lt;br /&gt;
[http://en.wikipedia.org/wiki/Object-relational_mapping Object-relational mapping] is not trivial. Apart from being based on Software Engineering principles like coupling, cohesion and polymorphism, the object paradigm focuses on building applications out of objects that have both data and behavior. However, the relational paradigm is based on mathematical principles and focuses primarily on storing data. If only data objects were to be mapped to the relational database the procedure would have been fairly straightforward. With the growing complexities of object models, concepts like aggregation, inheritance, polymorphism, association between classes, and data type (smarted than SQL data types) have to be mapped to relational table structure. The table below highlights the fundamental mismatch between object oriented data model and relational data storage.&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;4&amp;quot; width=&amp;quot;50%&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Object Oriented Data Model'''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Relational Database Management System'''&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Class&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Table&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Object&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Row&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Entity&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Key&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|State&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Data&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Behavior&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Transactions&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Inheritance&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Data Relationships&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=='''[http://docs.jboss.org/hibernate/core/3.3/reference/en/html/inheritance.html Inheritance Mapping]'''==&lt;br /&gt;
[http://en.wikipedia.org/wiki/Inheritance_(object-oriented_programming) Inheritance] in [http://en.wikipedia.org/wiki/Object-oriented_design Object Oriented Design] makes it difficult to map between object and relation databases. In this pattern, there is mapper class for each domain class that will save and load data for the domain class [8]. Mapper class allows both abstract and concrete classes to handle their own O/R mapping[8].&lt;br /&gt;
&lt;br /&gt;
For example: - To find an employee “John”:- &lt;br /&gt;
Application calls find () method on concrete mapper object and instantiate a new Executive object. The find () will pass this executive object and database record to load () of Executive. This in turn will call the load () of Superclass. When all loads return, find returns the filled object.&lt;br /&gt;
Mappers loading and saving the domain objects is determined by the inheritance mapping. This inheritance hierarchy is represented in the database as follows:- &lt;br /&gt;
*Single Table Inheritance&lt;br /&gt;
*Class Table Inheritance &lt;br /&gt;
*Concrete Table Inheritance&lt;br /&gt;
Choosing a mapping scheme depends on speed requirement, whether database is shared and type of [http://en.wikipedia.org/wiki/Relational_database_management_system RDBMS]. &lt;br /&gt;
&lt;br /&gt;
==='''Single Table Inheritance'''===&lt;br /&gt;
Inheritance Hierarchy of all classes is represented as single table. The columns of this table will have fields of all classes in the hierarchy. Advantage of this Inheritance is that there is one table and requires no join while retrieving data. But it could lead to large confusing table and name conflicts.&lt;br /&gt;
&lt;br /&gt;
==='''Class Table Inheritance '''===&lt;br /&gt;
One table for each class is constructed. The advantage of this table inheritance is that there is clear relationship between class and table. There is high normalization. But multiple tables requires join and when fields move up and down in hierarchy, it requires changes in the tables.&lt;br /&gt;
&lt;br /&gt;
==='''Concrete Table Inheritance'''===&lt;br /&gt;
In this hierarchy there is one table per concrete class. The table are independent, requires no join and there is no unused fields.&lt;br /&gt;
&lt;br /&gt;
The strengths and weaknesses of each approach are compared below:&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;4&amp;quot; width=&amp;quot;70%&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Factors to Consider'''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''One table per hierarchy'''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''One table per concrete class'''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''One table per class'''&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Ad hoc reporting&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Simple&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Medium&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Medium/Difficult&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Ease of implementation&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Simple&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Medium&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Difficult&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Ease of data access&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Simple&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Simple&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Medium/Simple&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Coupling&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Very High&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|High&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Low&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Speed of data access&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Fast&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Fast&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Medium/Fast&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Support for polymorphism&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Medium&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Low&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|High&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=='''[http://en.wikipedia.org/wiki/Association_(object-oriented_programming) Association] Mapping'''==&lt;br /&gt;
The [http://en.wikipedia.org/wiki/Foreign_key Foreign key] is used to maintain relationships in relational databases. A row in one table can relate to a row in another table using foreign key. Therefore to implement relationships, a key of one table must include in the other table [4].&lt;br /&gt;
==='''One-to-one mapping'''===&lt;br /&gt;
If one record in Table A corresponds to exactly one row in Table B, this relationship is called One – to-one relationships [10].  In fig, the address attribute of an employee class forms a one-to-one relation with the address class. In database, this relationship is stored by creating one-to- one mapping between these two objects by storing the id of Address instance in the Employee table instance is written [11]. When the employee is read form database, the address instance is linked to Employee. Here, the mapping is from Employee to Address.&lt;br /&gt;
==='''One-to-many mapping'''===&lt;br /&gt;
If each record in Table A corresponds to many records in Table B , but each record in Table B links to only one record in Table A, this relationship is called One-to-many relationships [10].&lt;br /&gt;
In fig, a Order may have zero to many OrderItems. To represent in relational database, the Owner object’s OID can be inserted into OrderItem table [9]. Here, OID is Foreign Key. This is shown in fig .&lt;br /&gt;
==='''Many-to-many mapping'''===&lt;br /&gt;
If each record in Table A may links to many records in Table B and vice-versa [10], it’s called Many-to-Many relationships. In fig, let’s consider that an employee can work more than one department and department can contain more than one employee.&amp;lt;br&amp;gt;&lt;br /&gt;
The Many-to-Many relationships is represented in term of association table.  A separate table called association table is created that contains the foreign keys of participating tables [9].&lt;br /&gt;
&lt;br /&gt;
=='''[http://en.wikipedia.org/wiki/Aggregation_(object-oriented_programming) Aggregation] Mapping'''==&lt;br /&gt;
[http://en.wikipedia.org/wiki/Class_diagram#Aggregation Aggregation] is a specialized version of the association relationship. Aggregations may be mapped to relational data model either by integrating all objects' attributes into a single table or using foreign keys. &lt;br /&gt;
==='''Single table aggregation'''===&lt;br /&gt;
==='''Foreign key aggregation'''===&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
[1]http://www.objectarchitects.de/ObjectArchitects/orpatterns/&amp;lt;br&amp;gt;&lt;br /&gt;
[2]http://subs.emis.de/LNI/Proceedings/Proceedings48/GI.Band.48-6.pdf&amp;lt;br&amp;gt;&lt;br /&gt;
[3]http://www.joeyoder.com/Research/objectmappings/Persista.pdf&amp;lt;br&amp;gt;&lt;br /&gt;
[4]http://www.ibm.com/developerworks/library/ws-mapping-to-rdb/&amp;lt;br&amp;gt;&lt;br /&gt;
[5]http://www.dparsons.co.uk/mindthegap.pdf&amp;lt;br&amp;gt;&lt;br /&gt;
[6]http://proceedings.informingscience.org/InSITE2007/IISITv4p767-779Jusi281.pdf&amp;lt;br&amp;gt;&lt;br /&gt;
[7]http://www.sis.pitt.edu/~gray/INFSCI1025/references/AmblerORMMapping101Article.pdf&amp;lt;br&amp;gt;&lt;br /&gt;
[8]http://www.brettdaniel.com/files/2006/inheritancemapping.ppt&amp;lt;br&amp;gt;&lt;br /&gt;
[9]http://www.objectarchitects.de/ObjectArchitects/orpatterns/index.htm?MappingObjects2Tables/mapping_object.htm&amp;lt;br&amp;gt;&lt;br /&gt;
[10]http://databases.about.com/cs/tutorials/a/accessgup7.htm&amp;lt;br&amp;gt;&lt;br /&gt;
[11]http://www.oracle.com/technology/products/ias/toplink/doc/1013/main/_html/relmapun005.htm&amp;lt;br&amp;gt;&lt;br /&gt;
[12]http://docs.jboss.org/hibernate/core/3.3/reference/en/html/inheritance.html&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Quick Gun Murugan</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_12_Patterns_for_ORM&amp;diff=27746</id>
		<title>CSC/ECE 517 Fall 2009/wiki3 12 Patterns for ORM</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_12_Patterns_for_ORM&amp;diff=27746"/>
		<updated>2009-11-18T01:04:20Z</updated>

		<summary type="html">&lt;p&gt;Quick Gun Murugan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=='''Overview'''==&lt;br /&gt;
[http://en.wikipedia.org/wiki/Object-relational_mapping Object-relational mapping] is not trivial. Apart from being based on Software Engineering principles like coupling, cohesion and polymorphism, the object paradigm focuses on building applications out of objects that have both data and behavior. However, the relational paradigm is based on mathematical principles and focuses primarily on storing data. If only data objects were to be mapped to the relational database the procedure would have been fairly straightforward. With the growing complexities of object models, concepts like aggregation, inheritance, polymorphism, association between classes, and data type (smarted than SQL data types) have to be mapped to relational table structure. The table below highlights the fundamental mismatch between object oriented data model and relational data storage.&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;4&amp;quot; width=&amp;quot;50%&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Object Oriented Data Model'''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Relational Database Management System'''&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Class&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Table&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Object&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Row&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Entity&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Key&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|State&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Data&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Behavior&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Transactions&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Inheritance&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Data Relationships&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=='''[http://docs.jboss.org/hibernate/core/3.3/reference/en/html/inheritance.html Inheritance Mapping]'''==&lt;br /&gt;
[http://en.wikipedia.org/wiki/Inheritance_(object-oriented_programming) Inheritance] in [http://en.wikipedia.org/wiki/Object-oriented_design Object Oriented Design] makes it difficult to map between object and relation databases. In this pattern, there is mapper class for each domain class that will save and load data for the domain class [8]. Mapper class allows both abstract and concrete classes to handle their own O/R mapping[8].&lt;br /&gt;
&lt;br /&gt;
For example: - To find an employee “John”:- &lt;br /&gt;
Application calls find () method on concrete mapper object and instantiate a new Executive object. The find () will pass this executive object and database record to load () of Executive. This in turn will call the load () of Superclass. When all loads return, find returns the filled object.&lt;br /&gt;
Mappers loading and saving the domain objects is determined by the inheritance mapping. This inheritance hierarchy is represented in the database as follows:- &lt;br /&gt;
*Single Table Inheritance&lt;br /&gt;
*Class Table Inheritance &lt;br /&gt;
*Concrete Table Inheritance&lt;br /&gt;
Choosing a mapping scheme depends on speed requirement, whether database is shared and type of [http://en.wikipedia.org/wiki/Relational_database_management_system RDBMS]. &lt;br /&gt;
&lt;br /&gt;
==='''Single Table Inheritance'''===&lt;br /&gt;
Inheritance Hierarchy of all classes is represented as single table. The columns of this table will have fields of all classes in the hierarchy. Advantage of this Inheritance is that there is one table and requires no join while retrieving data. But it could lead to large confusing table and name conflicts.&lt;br /&gt;
&lt;br /&gt;
==='''Class Table Inheritance '''===&lt;br /&gt;
One table for each class is constructed. The advantage of this table inheritance is that there is clear relationship between class and table. There is high normalization. But multiple tables requires join and when fields move up and down in hierarchy, it requires changes in the tables.&lt;br /&gt;
&lt;br /&gt;
==='''Concrete Table Inheritance'''===&lt;br /&gt;
In this hierarchy there is one table per concrete class. The table are independent, requires no join and there is no unused fields.&lt;br /&gt;
&lt;br /&gt;
The strengths and weaknesses of each approach are compared below:&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;4&amp;quot; width=&amp;quot;70%&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Factors to Consider'''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''One table per hierarchy'''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''One table per concrete class'''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''One table per class'''&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Ad hoc reporting&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Simple&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Medium&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Medium/Difficult&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Ease of implementation&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Simple&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Medium&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Difficult&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Ease of data access&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Simple&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Simple&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Medium/Simple&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Coupling&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Very High&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|High&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Low&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Speed of data access&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Fast&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Fast&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Medium/Fast&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Support for polymorphism&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Medium&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Low&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|High&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=='''[http://en.wikipedia.org/wiki/Association_(object-oriented_programming) Association] Mapping'''==&lt;br /&gt;
The [http://en.wikipedia.org/wiki/Foreign_key Foreign key] is used to maintain relationships in relational databases. A row in one table can relate to a row in another table using foreign key. Therefore to implement relationships, a key of one table must include in the other table [4].&lt;br /&gt;
==='''One-to-one mapping'''===&lt;br /&gt;
If one record in Table A corresponds to exactly one row in Table B, this relationship is called One – to-one relationships [10].  In fig, the address attribute of an employee class forms a one-to-one relation with the address class. In database, this relationship is stored by creating one-to- one mapping between these two objects by storing the id of Address instance in the Employee table instance is written [11]. When the employee is read form database, the address instance is linked to Employee. Here, the mapping is from Employee to Address.&lt;br /&gt;
==='''One-to-many mapping'''===&lt;br /&gt;
If each record in Table A corresponds to many records in Table B , but each record in Table B links to only one record in Table A, this relationship is called One-to-many relationships [10].&lt;br /&gt;
In fig, a Order may have zero to many OrderItems. To represent in relational database, the Owner object’s OID can be inserted into OrderItem table [9]. Here, OID is Foreign Key. This is shown in fig .&lt;br /&gt;
==='''Many-to-many mapping'''===&lt;br /&gt;
If each record in Table A may links to many records in Table B and vice-versa [10], it’s called Many-to-Many relationships. In fig, let’s consider that an employee can work more than one department and department can contain more than one employee.&amp;lt;br&amp;gt;&lt;br /&gt;
The Many-to-Many relationships is represented in term of association table.  A separate table called association table is created that contains the foreign keys of participating tables [9].&lt;br /&gt;
&lt;br /&gt;
=='''[http://en.wikipedia.org/wiki/Aggregation_(object-oriented_programming) Aggregation] Mapping'''==&lt;br /&gt;
[http://en.wikipedia.org/wiki/Class_diagram#Aggregation Aggregation] is a specialized version of the association relationship. Aggregations may be mapped to relational data model either by integrating all objects' attributes into a single table or using foreign keys. &lt;br /&gt;
==='''Single table aggregation'''===&lt;br /&gt;
==='''Foreign key aggregation'''===&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
[1]http://www.objectarchitects.de/ObjectArchitects/orpatterns/&amp;lt;br&amp;gt;&lt;br /&gt;
[2]http://subs.emis.de/LNI/Proceedings/Proceedings48/GI.Band.48-6.pdf&amp;lt;br&amp;gt;&lt;br /&gt;
[3]http://www.joeyoder.com/Research/objectmappings/Persista.pdf&amp;lt;br&amp;gt;&lt;br /&gt;
[4]http://www.ibm.com/developerworks/library/ws-mapping-to-rdb/&amp;lt;br&amp;gt;&lt;br /&gt;
[5]http://www.dparsons.co.uk/mindthegap.pdf&amp;lt;br&amp;gt;&lt;br /&gt;
[6]http://proceedings.informingscience.org/InSITE2007/IISITv4p767-779Jusi281.pdf&amp;lt;br&amp;gt;&lt;br /&gt;
[7]http://www.sis.pitt.edu/~gray/INFSCI1025/references/AmblerORMMapping101Article.pdf&amp;lt;br&amp;gt;&lt;br /&gt;
[8]www.brettdaniel.com/files/2006/inheritancemapping.ppt&amp;lt;br&amp;gt;&lt;br /&gt;
[9]http://www.objectarchitects.de/ObjectArchitects/orpatterns/index.htm?MappingObjects2Tables/mapping_object.htm&amp;lt;br&amp;gt;&lt;br /&gt;
[10]http://databases.about.com/cs/tutorials/a/accessgup7.htm&amp;lt;br&amp;gt;&lt;br /&gt;
[11]http://www.oracle.com/technology/products/ias/toplink/doc/1013/main/_html/relmapun005.htm&amp;lt;br&amp;gt;&lt;br /&gt;
[12]http://docs.jboss.org/hibernate/core/3.3/reference/en/html/inheritance.html&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Quick Gun Murugan</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_12_Patterns_for_ORM&amp;diff=27738</id>
		<title>CSC/ECE 517 Fall 2009/wiki3 12 Patterns for ORM</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_12_Patterns_for_ORM&amp;diff=27738"/>
		<updated>2009-11-18T01:01:55Z</updated>

		<summary type="html">&lt;p&gt;Quick Gun Murugan: /* '''Aggregation Mapping''' */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=='''Overview'''==&lt;br /&gt;
[http://en.wikipedia.org/wiki/Object-relational_mapping Object-relational mapping] is not trivial. Apart from being based on Software Engineering principles like coupling, cohesion and polymorphism, the object paradigm focuses on building applications out of objects that have both data and behavior. However, the relational paradigm is based on mathematical principles and focuses primarily on storing data. If only data objects were to be mapped to the relational database the procedure would have been fairly straightforward. With the growing complexities of object models, concepts like aggregation, inheritance, polymorphism, association between classes, and data type (smarted than SQL data types) have to be mapped to relational table structure. The table below highlights the fundamental mismatch between object oriented data model and relational data storage.&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;4&amp;quot; width=&amp;quot;50%&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Object Oriented Data Model'''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Relational Database Management System'''&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Class&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Table&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Object&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Row&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Entity&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Key&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|State&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Data&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Behavior&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Transactions&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Inheritance&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Data Relationships&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=='''[http://docs.jboss.org/hibernate/core/3.3/reference/en/html/inheritance.html Inheritance Mapping]'''==&lt;br /&gt;
[http://en.wikipedia.org/wiki/Inheritance_(object-oriented_programming) Inheritance] in [http://en.wikipedia.org/wiki/Object-oriented_design Object Oriented Design] makes it difficult to map between object and relation databases. In this pattern, there is mapper class for each domain class that will save and load data for the domain class [8]. Mapper class allows both abstract and concrete classes to handle their own O/R mapping[8].&lt;br /&gt;
&lt;br /&gt;
For example: - To find an employee “John”:- &lt;br /&gt;
Application calls find () method on concrete mapper object and instantiate a new Executive object. The find () will pass this executive object and database record to load () of Executive. This in turn will call the load () of Superclass. When all loads return, find returns the filled object.&lt;br /&gt;
Mappers loading and saving the domain objects is determined by the inheritance mapping. This inheritance hierarchy is represented in the database as follows:- &lt;br /&gt;
*Single Table Inheritance&lt;br /&gt;
*Class Table Inheritance &lt;br /&gt;
*Concrete Table Inheritance&lt;br /&gt;
Choosing a mapping scheme depends on speed requirement, whether database is shared and type of [http://en.wikipedia.org/wiki/Relational_database_management_system RDBMS]. &lt;br /&gt;
&lt;br /&gt;
==='''Single Table Inheritance'''===&lt;br /&gt;
Inheritance Hierarchy of all classes is represented as single table. The columns of this table will have fields of all classes in the hierarchy. Advantage of this Inheritance is that there is one table and requires no join while retrieving data. But it could lead to large confusing table and name conflicts.&lt;br /&gt;
&lt;br /&gt;
==='''Class Table Inheritance '''===&lt;br /&gt;
One table for each class is constructed. The advantage of this table inheritance is that there is clear relationship between class and table. There is high normalization. But multiple tables requires join and when fields move up and down in hierarchy, it requires changes in the tables.&lt;br /&gt;
&lt;br /&gt;
==='''Concrete Table Inheritance'''===&lt;br /&gt;
In this hierarchy there is one table per concrete class. The table are independent, requires no join and there is no unused fields.&lt;br /&gt;
&lt;br /&gt;
The strengths and weaknesses of each approach are compared below:&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;4&amp;quot; width=&amp;quot;70%&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Factors to Consider'''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''One table per hierarchy'''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''One table per concrete class'''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''One table per class'''&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Ad hoc reporting&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Simple&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Medium&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Medium/Difficult&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Ease of implementation&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Simple&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Medium&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Difficult&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Ease of data access&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Simple&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Simple&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Medium/Simple&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Coupling&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Very High&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|High&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Low&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Speed of data access&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Fast&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Fast&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Medium/Fast&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Support for polymorphism&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Medium&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Low&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|High&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=='''[http://en.wikipedia.org/wiki/Association_(object-oriented_programming) Association] Mapping'''==&lt;br /&gt;
The [http://en.wikipedia.org/wiki/Foreign_key Foreign key] is used to maintain relationships in relational databases. A row in one table can relate to a row in another table using foreign key. Therefore to implement relationships, a key of one table must include in the other table [4].&lt;br /&gt;
==='''One-to-one mapping'''===&lt;br /&gt;
If one record in Table A corresponds to exactly one row in Table B, this relationship is called One – to-one relationships [10].  In fig, the address attribute of an employee class forms a one-to-one relation with the address class. In database, this relationship is stored by creating one-to- one mapping between these two objects by storing the id of Address instance in the Employee table instance is written [11]. When the employee is read form database, the address instance is linked to Employee. Here, the mapping is from Employee to Address.&lt;br /&gt;
==='''One-to-many mapping'''===&lt;br /&gt;
If each record in Table A corresponds to many records in Table B , but each record in Table B links to only one record in Table A, this relationship is called One-to-many relationships [10].&lt;br /&gt;
In fig, a Order may have zero to many OrderItems. To represent in relational database, the Owner object’s OID can be inserted into OrderItem table [9]. Here, OID is Foreign Key. This is shown in fig .&lt;br /&gt;
==='''Many-to-many mapping'''===&lt;br /&gt;
If each record in Table A may links to many records in Table B and vice-versa [10], it’s called Many-to-Many relationships. In fig, let’s consider that an employee can work more than one department and department can contain more than one employee.&amp;lt;br&amp;gt;&lt;br /&gt;
The Many-to-Many relationships is represented in term of association table.  A separate table called association table is created that contains the foreign keys of participating tables [9].&lt;br /&gt;
&lt;br /&gt;
=='''[http://en.wikipedia.org/wiki/Aggregation_(object-oriented_programming) Aggregation] Mapping'''==&lt;br /&gt;
[http://en.wikipedia.org/wiki/Class_diagram#Aggregation Aggregation] is a specialized version of the association relationship. Aggregations may be mapped to relational data model either by integrating all objects' attributes into a single table or using foreign keys. &lt;br /&gt;
==='''Single table aggregation'''===&lt;br /&gt;
==='''Foreign key aggregation'''===&lt;br /&gt;
&lt;br /&gt;
=='''Conclusion'''==&lt;br /&gt;
=='''References'''==&lt;/div&gt;</summary>
		<author><name>Quick Gun Murugan</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_12_Patterns_for_ORM&amp;diff=27735</id>
		<title>CSC/ECE 517 Fall 2009/wiki3 12 Patterns for ORM</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_12_Patterns_for_ORM&amp;diff=27735"/>
		<updated>2009-11-18T01:01:03Z</updated>

		<summary type="html">&lt;p&gt;Quick Gun Murugan: /* '''Association Mapping''' */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=='''Overview'''==&lt;br /&gt;
[http://en.wikipedia.org/wiki/Object-relational_mapping Object-relational mapping] is not trivial. Apart from being based on Software Engineering principles like coupling, cohesion and polymorphism, the object paradigm focuses on building applications out of objects that have both data and behavior. However, the relational paradigm is based on mathematical principles and focuses primarily on storing data. If only data objects were to be mapped to the relational database the procedure would have been fairly straightforward. With the growing complexities of object models, concepts like aggregation, inheritance, polymorphism, association between classes, and data type (smarted than SQL data types) have to be mapped to relational table structure. The table below highlights the fundamental mismatch between object oriented data model and relational data storage.&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;4&amp;quot; width=&amp;quot;50%&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Object Oriented Data Model'''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Relational Database Management System'''&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Class&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Table&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Object&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Row&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Entity&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Key&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|State&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Data&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Behavior&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Transactions&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Inheritance&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Data Relationships&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=='''[http://docs.jboss.org/hibernate/core/3.3/reference/en/html/inheritance.html Inheritance Mapping]'''==&lt;br /&gt;
[http://en.wikipedia.org/wiki/Inheritance_(object-oriented_programming) Inheritance] in [http://en.wikipedia.org/wiki/Object-oriented_design Object Oriented Design] makes it difficult to map between object and relation databases. In this pattern, there is mapper class for each domain class that will save and load data for the domain class [8]. Mapper class allows both abstract and concrete classes to handle their own O/R mapping[8].&lt;br /&gt;
&lt;br /&gt;
For example: - To find an employee “John”:- &lt;br /&gt;
Application calls find () method on concrete mapper object and instantiate a new Executive object. The find () will pass this executive object and database record to load () of Executive. This in turn will call the load () of Superclass. When all loads return, find returns the filled object.&lt;br /&gt;
Mappers loading and saving the domain objects is determined by the inheritance mapping. This inheritance hierarchy is represented in the database as follows:- &lt;br /&gt;
*Single Table Inheritance&lt;br /&gt;
*Class Table Inheritance &lt;br /&gt;
*Concrete Table Inheritance&lt;br /&gt;
Choosing a mapping scheme depends on speed requirement, whether database is shared and type of [http://en.wikipedia.org/wiki/Relational_database_management_system RDBMS]. &lt;br /&gt;
&lt;br /&gt;
==='''Single Table Inheritance'''===&lt;br /&gt;
Inheritance Hierarchy of all classes is represented as single table. The columns of this table will have fields of all classes in the hierarchy. Advantage of this Inheritance is that there is one table and requires no join while retrieving data. But it could lead to large confusing table and name conflicts.&lt;br /&gt;
&lt;br /&gt;
==='''Class Table Inheritance '''===&lt;br /&gt;
One table for each class is constructed. The advantage of this table inheritance is that there is clear relationship between class and table. There is high normalization. But multiple tables requires join and when fields move up and down in hierarchy, it requires changes in the tables.&lt;br /&gt;
&lt;br /&gt;
==='''Concrete Table Inheritance'''===&lt;br /&gt;
In this hierarchy there is one table per concrete class. The table are independent, requires no join and there is no unused fields.&lt;br /&gt;
&lt;br /&gt;
The strengths and weaknesses of each approach are compared below:&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;4&amp;quot; width=&amp;quot;70%&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Factors to Consider'''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''One table per hierarchy'''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''One table per concrete class'''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''One table per class'''&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Ad hoc reporting&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Simple&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Medium&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Medium/Difficult&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Ease of implementation&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Simple&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Medium&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Difficult&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Ease of data access&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Simple&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Simple&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Medium/Simple&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Coupling&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Very High&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|High&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Low&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Speed of data access&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Fast&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Fast&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Medium/Fast&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Support for polymorphism&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Medium&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Low&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|High&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=='''[http://en.wikipedia.org/wiki/Association_(object-oriented_programming) Association] Mapping'''==&lt;br /&gt;
The [http://en.wikipedia.org/wiki/Foreign_key Foreign key] is used to maintain relationships in relational databases. A row in one table can relate to a row in another table using foreign key. Therefore to implement relationships, a key of one table must include in the other table [4].&lt;br /&gt;
==='''One-to-one mapping'''===&lt;br /&gt;
If one record in Table A corresponds to exactly one row in Table B, this relationship is called One – to-one relationships [10].  In fig, the address attribute of an employee class forms a one-to-one relation with the address class. In database, this relationship is stored by creating one-to- one mapping between these two objects by storing the id of Address instance in the Employee table instance is written [11]. When the employee is read form database, the address instance is linked to Employee. Here, the mapping is from Employee to Address.&lt;br /&gt;
==='''One-to-many mapping'''===&lt;br /&gt;
If each record in Table A corresponds to many records in Table B , but each record in Table B links to only one record in Table A, this relationship is called One-to-many relationships [10].&lt;br /&gt;
In fig, a Order may have zero to many OrderItems. To represent in relational database, the Owner object’s OID can be inserted into OrderItem table [9]. Here, OID is Foreign Key. This is shown in fig .&lt;br /&gt;
==='''Many-to-many mapping'''===&lt;br /&gt;
If each record in Table A may links to many records in Table B and vice-versa [10], it’s called Many-to-Many relationships. In fig, let’s consider that an employee can work more than one department and department can contain more than one employee.&amp;lt;br&amp;gt;&lt;br /&gt;
The Many-to-Many relationships is represented in term of association table.  A separate table called association table is created that contains the foreign keys of participating tables [9].&lt;br /&gt;
&lt;br /&gt;
=='''Aggregation Mapping'''==&lt;br /&gt;
[http://en.wikipedia.org/wiki/Class_diagram#Aggregation Aggregation] is a specialized version of the association relationship. Aggregations may be mapped to relational data model either by integrating all objects' attributes into a single table or using foreign keys. &lt;br /&gt;
==='''Single table aggregation'''===&lt;br /&gt;
==='''Foreign key aggregation'''===&lt;br /&gt;
&lt;br /&gt;
=='''Conclusion'''==&lt;br /&gt;
=='''References'''==&lt;/div&gt;</summary>
		<author><name>Quick Gun Murugan</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_12_Patterns_for_ORM&amp;diff=27733</id>
		<title>CSC/ECE 517 Fall 2009/wiki3 12 Patterns for ORM</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_12_Patterns_for_ORM&amp;diff=27733"/>
		<updated>2009-11-18T00:59:50Z</updated>

		<summary type="html">&lt;p&gt;Quick Gun Murugan: /* '''Aggregation Mapping''' */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=='''Overview'''==&lt;br /&gt;
[http://en.wikipedia.org/wiki/Object-relational_mapping Object-relational mapping] is not trivial. Apart from being based on Software Engineering principles like coupling, cohesion and polymorphism, the object paradigm focuses on building applications out of objects that have both data and behavior. However, the relational paradigm is based on mathematical principles and focuses primarily on storing data. If only data objects were to be mapped to the relational database the procedure would have been fairly straightforward. With the growing complexities of object models, concepts like aggregation, inheritance, polymorphism, association between classes, and data type (smarted than SQL data types) have to be mapped to relational table structure. The table below highlights the fundamental mismatch between object oriented data model and relational data storage.&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;4&amp;quot; width=&amp;quot;50%&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Object Oriented Data Model'''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Relational Database Management System'''&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Class&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Table&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Object&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Row&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Entity&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Key&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|State&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Data&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Behavior&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Transactions&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Inheritance&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Data Relationships&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=='''[http://docs.jboss.org/hibernate/core/3.3/reference/en/html/inheritance.html Inheritance Mapping]'''==&lt;br /&gt;
[http://en.wikipedia.org/wiki/Inheritance_(object-oriented_programming) Inheritance] in [http://en.wikipedia.org/wiki/Object-oriented_design Object Oriented Design] makes it difficult to map between object and relation databases. In this pattern, there is mapper class for each domain class that will save and load data for the domain class [8]. Mapper class allows both abstract and concrete classes to handle their own O/R mapping[8].&lt;br /&gt;
&lt;br /&gt;
For example: - To find an employee “John”:- &lt;br /&gt;
Application calls find () method on concrete mapper object and instantiate a new Executive object. The find () will pass this executive object and database record to load () of Executive. This in turn will call the load () of Superclass. When all loads return, find returns the filled object.&lt;br /&gt;
Mappers loading and saving the domain objects is determined by the inheritance mapping. This inheritance hierarchy is represented in the database as follows:- &lt;br /&gt;
*Single Table Inheritance&lt;br /&gt;
*Class Table Inheritance &lt;br /&gt;
*Concrete Table Inheritance&lt;br /&gt;
Choosing a mapping scheme depends on speed requirement, whether database is shared and type of [http://en.wikipedia.org/wiki/Relational_database_management_system RDBMS]. &lt;br /&gt;
&lt;br /&gt;
==='''Single Table Inheritance'''===&lt;br /&gt;
Inheritance Hierarchy of all classes is represented as single table. The columns of this table will have fields of all classes in the hierarchy. Advantage of this Inheritance is that there is one table and requires no join while retrieving data. But it could lead to large confusing table and name conflicts.&lt;br /&gt;
&lt;br /&gt;
==='''Class Table Inheritance '''===&lt;br /&gt;
One table for each class is constructed. The advantage of this table inheritance is that there is clear relationship between class and table. There is high normalization. But multiple tables requires join and when fields move up and down in hierarchy, it requires changes in the tables.&lt;br /&gt;
&lt;br /&gt;
==='''Concrete Table Inheritance'''===&lt;br /&gt;
In this hierarchy there is one table per concrete class. The table are independent, requires no join and there is no unused fields.&lt;br /&gt;
&lt;br /&gt;
The strengths and weaknesses of each approach are compared below:&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;4&amp;quot; width=&amp;quot;70%&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Factors to Consider'''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''One table per hierarchy'''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''One table per concrete class'''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''One table per class'''&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Ad hoc reporting&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Simple&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Medium&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Medium/Difficult&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Ease of implementation&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Simple&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Medium&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Difficult&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Ease of data access&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Simple&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Simple&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Medium/Simple&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Coupling&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Very High&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|High&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Low&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Speed of data access&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Fast&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Fast&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Medium/Fast&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Support for polymorphism&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Medium&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Low&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|High&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=='''Association Mapping'''==&lt;br /&gt;
The [http://en.wikipedia.org/wiki/Foreign_key Foreign key] is used to maintain relationships in relational databases. A row in one table can relate to a row in another table using foreign key. Therefore to implement relationships, a key of one table must include in the other table [4].&lt;br /&gt;
==='''One-to-one mapping'''===&lt;br /&gt;
If one record in Table A corresponds to exactly one row in Table B, this relationship is called One – to-one relationships [10].  In fig, the address attribute of an employee class forms a one-to-one relation with the address class. In database, this relationship is stored by creating one-to- one mapping between these two objects by storing the id of Address instance in the Employee table instance is written [11]. When the employee is read form database, the address instance is linked to Employee. Here, the mapping is from Employee to Address.&lt;br /&gt;
==='''One-to-many mapping'''===&lt;br /&gt;
If each record in Table A corresponds to many records in Table B , but each record in Table B links to only one record in Table A, this relationship is called One-to-many relationships [10].&lt;br /&gt;
In fig, a Order may have zero to many OrderItems. To represent in relational database, the Owner object’s OID can be inserted into OrderItem table [9]. Here, OID is Foreign Key. This is shown in fig .&lt;br /&gt;
==='''Many-to-many mapping'''===&lt;br /&gt;
If each record in Table A may links to many records in Table B and vice-versa [10], it’s called Many-to-Many relationships. In fig, let’s consider that an employee can work more than one department and department can contain more than one employee.&amp;lt;br&amp;gt;&lt;br /&gt;
The Many-to-Many relationships is represented in term of association table.  A separate table called association table is created that contains the foreign keys of participating tables [9].&lt;br /&gt;
&lt;br /&gt;
=='''Aggregation Mapping'''==&lt;br /&gt;
[http://en.wikipedia.org/wiki/Class_diagram#Aggregation Aggregation] is a specialized version of the association relationship. Aggregations may be mapped to relational data model either by integrating all objects' attributes into a single table or using foreign keys. &lt;br /&gt;
==='''Single table aggregation'''===&lt;br /&gt;
==='''Foreign key aggregation'''===&lt;br /&gt;
&lt;br /&gt;
=='''Conclusion'''==&lt;br /&gt;
=='''References'''==&lt;/div&gt;</summary>
		<author><name>Quick Gun Murugan</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_12_Patterns_for_ORM&amp;diff=27696</id>
		<title>CSC/ECE 517 Fall 2009/wiki3 12 Patterns for ORM</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_12_Patterns_for_ORM&amp;diff=27696"/>
		<updated>2009-11-17T23:57:36Z</updated>

		<summary type="html">&lt;p&gt;Quick Gun Murugan: /* '''Association Mapping''' */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=='''Overview'''==&lt;br /&gt;
[http://en.wikipedia.org/wiki/Object-relational_mapping Object-relational mapping] is not trivial. Apart from being based on Software Engineering principles like coupling, cohesion and polymorphism, the object paradigm focuses on building applications out of objects that have both data and behavior. However, the relational paradigm is based on mathematical principles and focuses primarily on storing data. If only data objects were to be mapped to the relational database the procedure would have been fairly straightforward. With the growing complexities of object models, concepts like aggregation, inheritance, polymorphism, association between classes, and data type (smarted than SQL data types) have to be mapped to relational table structure. The table below highlights the fundamental mismatch between object oriented data model and relational data storage.&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;4&amp;quot; width=&amp;quot;50%&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Object Oriented Data Model'''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Relational Database Management System'''&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Class&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Table&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Object&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Row&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Entity&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Key&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|State&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Data&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Behavior&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Transactions&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Inheritance&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Data Relationships&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=='''[http://docs.jboss.org/hibernate/core/3.3/reference/en/html/inheritance.html Inheritance Mapping]'''==&lt;br /&gt;
[http://en.wikipedia.org/wiki/Inheritance_(object-oriented_programming) Inheritance] in [http://en.wikipedia.org/wiki/Object-oriented_design Object Oriented Design] makes it difficult to map between object and relation databases. In this pattern, there is mapper class for each domain class that will save and load data for the domain class [8]. Mapper class allows both abstract and concrete classes to handle their own O/R mapping[8].&lt;br /&gt;
&lt;br /&gt;
For example: - To find an employee “John”:- &lt;br /&gt;
Application calls find () method on concrete mapper object and instantiate a new Executive object. The find () will pass this executive object and database record to load () of Executive. This in turn will call the load () of Superclass. When all loads return, find returns the filled object.&lt;br /&gt;
Mappers loading and saving the domain objects is determined by the inheritance mapping. This inheritance hierarchy is represented in the database as follows:- &lt;br /&gt;
*Single Table Inheritance&lt;br /&gt;
*Class Table Inheritance &lt;br /&gt;
*Concrete Table Inheritance&lt;br /&gt;
Choosing a mapping scheme depends on speed requirement, whether database is shared and type of [http://en.wikipedia.org/wiki/Relational_database_management_system RDBMS]. &lt;br /&gt;
&lt;br /&gt;
==='''Single Table Inheritance'''===&lt;br /&gt;
Inheritance Hierarchy of all classes is represented as single table. The columns of this table will have fields of all classes in the hierarchy. Advantage of this Inheritance is that there is one table and requires no join while retrieving data. But it could lead to large confusing table and name conflicts.&lt;br /&gt;
&lt;br /&gt;
==='''Class Table Inheritance '''===&lt;br /&gt;
One table for each class is constructed. The advantage of this table inheritance is that there is clear relationship between class and table. There is high normalization. But multiple tables requires join and when fields move up and down in hierarchy, it requires changes in the tables.&lt;br /&gt;
&lt;br /&gt;
==='''Concrete Table Inheritance'''===&lt;br /&gt;
In this hierarchy there is one table per concrete class. The table are independent, requires no join and there is no unused fields.&lt;br /&gt;
&lt;br /&gt;
The strengths and weaknesses of each approach are compared below:&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;4&amp;quot; width=&amp;quot;70%&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Factors to Consider'''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''One table per hierarchy'''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''One table per concrete class'''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''One table per class'''&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Ad hoc reporting&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Simple&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Medium&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Medium/Difficult&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Ease of implementation&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Simple&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Medium&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Difficult&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Ease of data access&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Simple&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Simple&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Medium/Simple&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Coupling&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Very High&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|High&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Low&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Speed of data access&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Fast&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Fast&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Medium/Fast&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Support for polymorphism&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Medium&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Low&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|High&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=='''Association Mapping'''==&lt;br /&gt;
The [http://en.wikipedia.org/wiki/Foreign_key Foreign key] is used to maintain relationships in relational databases. A row in one table can relate to a row in another table using foreign key. Therefore to implement relationships, a key of one table must include in the other table [4].&lt;br /&gt;
==='''One-to-one mapping'''===&lt;br /&gt;
If one record in Table A corresponds to exactly one row in Table B, this relationship is called One – to-one relationships [10].  In fig, the address attribute of an employee class forms a one-to-one relation with the address class. In database, this relationship is stored by creating one-to- one mapping between these two objects by storing the id of Address instance in the Employee table instance is written [11]. When the employee is read form database, the address instance is linked to Employee. Here, the mapping is from Employee to Address.&lt;br /&gt;
==='''One-to-many mapping'''===&lt;br /&gt;
If each record in Table A corresponds to many records in Table B , but each record in Table B links to only one record in Table A, this relationship is called One-to-many relationships [10].&lt;br /&gt;
In fig, a Order may have zero to many OrderItems. To represent in relational database, the Owner object’s OID can be inserted into OrderItem table [9]. Here, OID is Foreign Key. This is shown in fig .&lt;br /&gt;
==='''Many-to-many mapping'''===&lt;br /&gt;
If each record in Table A may links to many records in Table B and vice-versa [10], it’s called Many-to-Many relationships. In fig, let’s consider that an employee can work more than one department and department can contain more than one employee.&amp;lt;br&amp;gt;&lt;br /&gt;
The Many-to-Many relationships is represented in term of association table.  A separate table called association table is created that contains the foreign keys of participating tables [9].&lt;br /&gt;
&lt;br /&gt;
=='''Aggregation Mapping'''==&lt;br /&gt;
==='''Single table aggregation'''===&lt;br /&gt;
==='''Foreign key aggregation'''===&lt;br /&gt;
=='''Conclusion'''==&lt;br /&gt;
=='''References'''==&lt;/div&gt;</summary>
		<author><name>Quick Gun Murugan</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_12_Patterns_for_ORM&amp;diff=27691</id>
		<title>CSC/ECE 517 Fall 2009/wiki3 12 Patterns for ORM</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_12_Patterns_for_ORM&amp;diff=27691"/>
		<updated>2009-11-17T23:47:53Z</updated>

		<summary type="html">&lt;p&gt;Quick Gun Murugan: /* '''Concrete Table Inheritance''' */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=='''Overview'''==&lt;br /&gt;
[http://en.wikipedia.org/wiki/Object-relational_mapping Object-relational mapping] is not trivial. Apart from being based on Software Engineering principles like coupling, cohesion and polymorphism, the object paradigm focuses on building applications out of objects that have both data and behavior. However, the relational paradigm is based on mathematical principles and focuses primarily on storing data. If only data objects were to be mapped to the relational database the procedure would have been fairly straightforward. With the growing complexities of object models, concepts like aggregation, inheritance, polymorphism, association between classes, and data type (smarted than SQL data types) have to be mapped to relational table structure. The table below highlights the fundamental mismatch between object oriented data model and relational data storage.&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;4&amp;quot; width=&amp;quot;50%&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Object Oriented Data Model'''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Relational Database Management System'''&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Class&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Table&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Object&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Row&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Entity&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Key&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|State&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Data&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Behavior&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Transactions&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Inheritance&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Data Relationships&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=='''[http://docs.jboss.org/hibernate/core/3.3/reference/en/html/inheritance.html Inheritance Mapping]'''==&lt;br /&gt;
[http://en.wikipedia.org/wiki/Inheritance_(object-oriented_programming) Inheritance] in [http://en.wikipedia.org/wiki/Object-oriented_design Object Oriented Design] makes it difficult to map between object and relation databases. In this pattern, there is mapper class for each domain class that will save and load data for the domain class [8]. Mapper class allows both abstract and concrete classes to handle their own O/R mapping[8].&lt;br /&gt;
&lt;br /&gt;
For example: - To find an employee “John”:- &lt;br /&gt;
Application calls find () method on concrete mapper object and instantiate a new Executive object. The find () will pass this executive object and database record to load () of Executive. This in turn will call the load () of Superclass. When all loads return, find returns the filled object.&lt;br /&gt;
Mappers loading and saving the domain objects is determined by the inheritance mapping. This inheritance hierarchy is represented in the database as follows:- &lt;br /&gt;
*Single Table Inheritance&lt;br /&gt;
*Class Table Inheritance &lt;br /&gt;
*Concrete Table Inheritance&lt;br /&gt;
Choosing a mapping scheme depends on speed requirement, whether database is shared and type of [http://en.wikipedia.org/wiki/Relational_database_management_system RDBMS]. &lt;br /&gt;
&lt;br /&gt;
==='''Single Table Inheritance'''===&lt;br /&gt;
Inheritance Hierarchy of all classes is represented as single table. The columns of this table will have fields of all classes in the hierarchy. Advantage of this Inheritance is that there is one table and requires no join while retrieving data. But it could lead to large confusing table and name conflicts.&lt;br /&gt;
&lt;br /&gt;
==='''Class Table Inheritance '''===&lt;br /&gt;
One table for each class is constructed. The advantage of this table inheritance is that there is clear relationship between class and table. There is high normalization. But multiple tables requires join and when fields move up and down in hierarchy, it requires changes in the tables.&lt;br /&gt;
&lt;br /&gt;
==='''Concrete Table Inheritance'''===&lt;br /&gt;
In this hierarchy there is one table per concrete class. The table are independent, requires no join and there is no unused fields.&lt;br /&gt;
&lt;br /&gt;
The strengths and weaknesses of each approach are compared below:&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;4&amp;quot; width=&amp;quot;70%&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Factors to Consider'''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''One table per hierarchy'''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''One table per concrete class'''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''One table per class'''&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Ad hoc reporting&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Simple&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Medium&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Medium/Difficult&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Ease of implementation&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Simple&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Medium&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Difficult&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Ease of data access&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Simple&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Simple&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Medium/Simple&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Coupling&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Very High&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|High&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Low&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Speed of data access&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Fast&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Fast&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Medium/Fast&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Support for polymorphism&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Medium&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Low&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|High&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=='''Association Mapping'''==&lt;br /&gt;
==='''One-to-one mapping'''===&lt;br /&gt;
==='''One-to-many mapping'''===&lt;br /&gt;
==='''Many-to-many mapping'''===&lt;br /&gt;
=='''Aggregation Mapping'''==&lt;br /&gt;
==='''Single table aggregation'''===&lt;br /&gt;
==='''Foreign key aggregation'''===&lt;br /&gt;
=='''Conclusion'''==&lt;br /&gt;
=='''References'''==&lt;/div&gt;</summary>
		<author><name>Quick Gun Murugan</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_12_Patterns_for_ORM&amp;diff=27689</id>
		<title>CSC/ECE 517 Fall 2009/wiki3 12 Patterns for ORM</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_12_Patterns_for_ORM&amp;diff=27689"/>
		<updated>2009-11-17T23:47:14Z</updated>

		<summary type="html">&lt;p&gt;Quick Gun Murugan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=='''Overview'''==&lt;br /&gt;
[http://en.wikipedia.org/wiki/Object-relational_mapping Object-relational mapping] is not trivial. Apart from being based on Software Engineering principles like coupling, cohesion and polymorphism, the object paradigm focuses on building applications out of objects that have both data and behavior. However, the relational paradigm is based on mathematical principles and focuses primarily on storing data. If only data objects were to be mapped to the relational database the procedure would have been fairly straightforward. With the growing complexities of object models, concepts like aggregation, inheritance, polymorphism, association between classes, and data type (smarted than SQL data types) have to be mapped to relational table structure. The table below highlights the fundamental mismatch between object oriented data model and relational data storage.&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;4&amp;quot; width=&amp;quot;50%&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Object Oriented Data Model'''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Relational Database Management System'''&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Class&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Table&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Object&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Row&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Entity&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Key&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|State&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Data&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Behavior&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Transactions&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Inheritance&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Data Relationships&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=='''[http://docs.jboss.org/hibernate/core/3.3/reference/en/html/inheritance.html Inheritance Mapping]'''==&lt;br /&gt;
[http://en.wikipedia.org/wiki/Inheritance_(object-oriented_programming) Inheritance] in [http://en.wikipedia.org/wiki/Object-oriented_design Object Oriented Design] makes it difficult to map between object and relation databases. In this pattern, there is mapper class for each domain class that will save and load data for the domain class [8]. Mapper class allows both abstract and concrete classes to handle their own O/R mapping[8].&lt;br /&gt;
&lt;br /&gt;
For example: - To find an employee “John”:- &lt;br /&gt;
Application calls find () method on concrete mapper object and instantiate a new Executive object. The find () will pass this executive object and database record to load () of Executive. This in turn will call the load () of Superclass. When all loads return, find returns the filled object.&lt;br /&gt;
Mappers loading and saving the domain objects is determined by the inheritance mapping. This inheritance hierarchy is represented in the database as follows:- &lt;br /&gt;
*Single Table Inheritance&lt;br /&gt;
*Class Table Inheritance &lt;br /&gt;
*Concrete Table Inheritance&lt;br /&gt;
Choosing a mapping scheme depends on speed requirement, whether database is shared and type of [http://en.wikipedia.org/wiki/Relational_database_management_system RDBMS]. &lt;br /&gt;
&lt;br /&gt;
==='''Single Table Inheritance'''===&lt;br /&gt;
Inheritance Hierarchy of all classes is represented as single table. The columns of this table will have fields of all classes in the hierarchy. Advantage of this Inheritance is that there is one table and requires no join while retrieving data. But it could lead to large confusing table and name conflicts.&lt;br /&gt;
&lt;br /&gt;
==='''Class Table Inheritance '''===&lt;br /&gt;
One table for each class is constructed. The advantage of this table inheritance is that there is clear relationship between class and table. There is high normalization. But multiple tables requires join and when fields move up and down in hierarchy, it requires changes in the tables.&lt;br /&gt;
&lt;br /&gt;
==='''Concrete Table Inheritance'''===&lt;br /&gt;
In this hierarchy there is one table per concrete class. The table are independent, requires no join and there is no unused fields.&lt;br /&gt;
&lt;br /&gt;
The strengths and weaknesses of each approach are compared below:&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;4&amp;quot; width=&amp;quot;50%&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Factors to Consider'''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''One table per hierarchy'''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''One table per concrete class'''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''One table per class'''&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Ad hoc reporting&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Simple&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Medium&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Medium/Difficult&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Ease of implementation&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Simple&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Medium&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Difficult&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Ease of data access&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Simple&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Simple&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Medium/Simple&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Coupling&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Very High&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|High&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Low&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Speed of data access&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Fast&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Fast&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Medium/Fast&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Support for polymorphism&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Medium&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Low&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|High&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=='''Association Mapping'''==&lt;br /&gt;
==='''One-to-one mapping'''===&lt;br /&gt;
==='''One-to-many mapping'''===&lt;br /&gt;
==='''Many-to-many mapping'''===&lt;br /&gt;
=='''Aggregation Mapping'''==&lt;br /&gt;
==='''Single table aggregation'''===&lt;br /&gt;
==='''Foreign key aggregation'''===&lt;br /&gt;
=='''Conclusion'''==&lt;br /&gt;
=='''References'''==&lt;/div&gt;</summary>
		<author><name>Quick Gun Murugan</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_12_Patterns_for_ORM&amp;diff=27683</id>
		<title>CSC/ECE 517 Fall 2009/wiki3 12 Patterns for ORM</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_12_Patterns_for_ORM&amp;diff=27683"/>
		<updated>2009-11-17T23:38:19Z</updated>

		<summary type="html">&lt;p&gt;Quick Gun Murugan: /* '''Overview''' */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=='''Overview'''==&lt;br /&gt;
[http://en.wikipedia.org/wiki/Object-relational_mapping Object-relational mapping] is not trivial. Apart from being based on Software Engineering principles like coupling, cohesion and polymorphism, the object paradigm focuses on building applications out of objects that have both data and behavior. However, the relational paradigm is based on mathematical principles and focuses primarily on storing data. If only data objects were to be mapped to the relational database the procedure would have been fairly straightforward. With the growing complexities of object models, concepts like aggregation, inheritance, polymorphism, association between classes, and data type (smarted than SQL data types) have to be mapped to relational table structure. The table below highlights the fundamental mismatch between object oriented data model and relational data storage.&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;4&amp;quot; width=&amp;quot;50%&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Object Oriented Data Model'''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Relational Database Management System'''&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Class&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Table&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Object&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Row&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Entity&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Key&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|State&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Data&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Behavior&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Transactions&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Inheritance&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Data Relationships&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=='''[http://docs.jboss.org/hibernate/core/3.3/reference/en/html/inheritance.html Inheritance Mapping]'''==&lt;br /&gt;
[http://en.wikipedia.org/wiki/Inheritance_(object-oriented_programming) Inheritance] in [http://en.wikipedia.org/wiki/Object-oriented_design Object Oriented Design] makes it difficult to map between object and relation databases. In this pattern, there is mapper class for each domain class that will save and load data for the domain class [8]. Mapper class allows both abstract and concrete classes to handle their own O/R mapping[8].&lt;br /&gt;
&lt;br /&gt;
For example: - To find an employee “John”:- &lt;br /&gt;
Application calls find () method on concrete mapper object and instantiate a new Executive object. The find () will pass this executive object and database record to load () of Executive. This in turn will call the load () of Superclass. When all loads return, find returns the filled object.&lt;br /&gt;
Mappers loading and saving the domain objects is determined by the inheritance mapping. This inheritance hierarchy is represented in the database as follows:- &lt;br /&gt;
*Single Table Inheritance&lt;br /&gt;
*Class Table Inheritance &lt;br /&gt;
*Concrete Table Inheritance&lt;br /&gt;
Choosing a mapping scheme depends on speed requirement, whether database is shared and type of [http://en.wikipedia.org/wiki/Relational_database_management_system RDBMS]. &lt;br /&gt;
&lt;br /&gt;
==='''Single Table Inheritance'''===&lt;br /&gt;
Inheritance Hierarchy of all classes is represented as single table. The columns of this table will have fields of all classes in the hierarchy. Advantage of this Inheritance is that there is one table and requires no join while retrieving data. But it could lead to large confusing table and name conflicts.&lt;br /&gt;
&lt;br /&gt;
==='''Class Table Inheritance '''===&lt;br /&gt;
One table for each class is constructed. The advantage of this table inheritance is that there is clear relationship between class and table. There is high normalization. But multiple tables requires join and when fields move up and down in hierarchy, it requires changes in the tables.&lt;br /&gt;
&lt;br /&gt;
==='''Concrete Table Inheritance'''===&lt;br /&gt;
In this hierarchy there is one table per concrete class. The table are independent, requires no join and there is no unused fields.&lt;br /&gt;
&lt;br /&gt;
=='''Association Mapping'''==&lt;br /&gt;
==='''One-to-one mapping'''===&lt;br /&gt;
==='''One-to-many mapping'''===&lt;br /&gt;
==='''Many-to-many mapping'''===&lt;br /&gt;
=='''Aggregation Mapping'''==&lt;br /&gt;
==='''Single table aggregation'''===&lt;br /&gt;
==='''Foreign key aggregation'''===&lt;br /&gt;
=='''Conclusion'''==&lt;br /&gt;
=='''References'''==&lt;/div&gt;</summary>
		<author><name>Quick Gun Murugan</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_12_Patterns_for_ORM&amp;diff=27383</id>
		<title>CSC/ECE 517 Fall 2009/wiki3 12 Patterns for ORM</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_12_Patterns_for_ORM&amp;diff=27383"/>
		<updated>2009-11-17T18:13:00Z</updated>

		<summary type="html">&lt;p&gt;Quick Gun Murugan: /* '''Overview''' */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=='''Overview'''==&lt;br /&gt;
[http://en.wikipedia.org/wiki/Object-relational_mapping Object-relational mapping] is not trivial. Apart from being based on Software Engineering principles like coupling, cohesion and polymorphism, the object paradigm focuses on building applications out of objects that have both data and behavior. However, the relational paradigm is based on mathematical principles and focuses primarily on storing data. If only data objects were to be mapped to the relational database the procedure would have been fairly straightforward. With the growing complexities of object models, concepts like aggregation, inheritance, polymorphism, association between classes, and data type (smarted than SQL data types) have to be mapped to relational table structure. The table below highlights the fundamental mismatch between object oriented data model and relational data storage.&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;4&amp;quot; width=&amp;quot;50%&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''OODM'''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''RDBMS'''&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Class&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Table&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Object&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Row&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Entity&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Key&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|State&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Data&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Behavior&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Transactions&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Inheritance&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Data Relationships&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=='''[http://docs.jboss.org/hibernate/core/3.3/reference/en/html/inheritance.html Inheritance Mapping]'''==&lt;br /&gt;
[http://en.wikipedia.org/wiki/Inheritance_(object-oriented_programming) Inheritance] in [http://en.wikipedia.org/wiki/Object-oriented_design Object Oriented Design] makes it difficult to map between object and relation databases. In this pattern, there is mapper class for each domain class that will save and load data for the domain class [8]. Mapper class allows both abstract and concrete classes to handle their own O/R mapping[8].&lt;br /&gt;
&lt;br /&gt;
For example: - To find an employee “John”:- &lt;br /&gt;
Application calls find () method on concrete mapper object and instantiate a new Executive object. The find () will pass this executive object and database record to load () of Executive. This in turn will call the load () of Superclass. When all loads return, find returns the filled object.&lt;br /&gt;
Mappers loading and saving the domain objects is determined by the inheritance mapping. This inheritance hierarchy is represented in the database as follows:- &lt;br /&gt;
*Single Table Inheritance&lt;br /&gt;
*Class Table Inheritance &lt;br /&gt;
*Concrete Table Inheritance&lt;br /&gt;
Choosing a mapping scheme depends on speed requirement, whether database is shared and type of [http://en.wikipedia.org/wiki/Relational_database_management_system RDBMS]. &lt;br /&gt;
&lt;br /&gt;
==='''Single Table Inheritance'''===&lt;br /&gt;
Inheritance Hierarchy of all classes is represented as single table. The columns of this table will have fields of all classes in the hierarchy. Advantage of this Inheritance is that there is one table and requires no join while retrieving data. But it could lead to large confusing table and name conflicts.&lt;br /&gt;
&lt;br /&gt;
==='''Class Table Inheritance '''===&lt;br /&gt;
One table for each class is constructed. The advantage of this table inheritance is that there is clear relationship between class and table. There is high normalization. But multiple tables requires join and when fields move up and down in hierarchy, it requires changes in the tables.&lt;br /&gt;
&lt;br /&gt;
==='''Concrete Table Inheritance'''===&lt;br /&gt;
In this hierarchy there is one table per concrete class. The table are independent, requires no join and there is no unused fields.&lt;br /&gt;
&lt;br /&gt;
=='''Association Mapping'''==&lt;br /&gt;
==='''One-to-one mapping'''===&lt;br /&gt;
==='''One-to-many mapping'''===&lt;br /&gt;
==='''Many-to-many mapping'''===&lt;br /&gt;
=='''Aggregation Mapping'''==&lt;br /&gt;
==='''Single table aggregation'''===&lt;br /&gt;
==='''Foreign key aggregation'''===&lt;br /&gt;
=='''Conclusion'''==&lt;br /&gt;
=='''References'''==&lt;/div&gt;</summary>
		<author><name>Quick Gun Murugan</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_12_Patterns_for_ORM&amp;diff=27368</id>
		<title>CSC/ECE 517 Fall 2009/wiki3 12 Patterns for ORM</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_12_Patterns_for_ORM&amp;diff=27368"/>
		<updated>2009-11-17T18:05:06Z</updated>

		<summary type="html">&lt;p&gt;Quick Gun Murugan: /* '''[http://docs.jboss.org/hibernate/core/3.3/reference/en/html/inheritance.html Inheritance Mapping]''' */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=='''Overview'''==&lt;br /&gt;
[http://en.wikipedia.org/wiki/Object-relational_mapping Object-relational mapping] is not trivial. Apart from being based on Software Engineering principles like coupling, cohesion and polymorphism, the object paradigm focuses on building applications out of objects that have both data and behavior. However, the relational paradigm is based on mathematical principles and focuses primarily on storing data. If only data objects were to be mapped to the relational database the procedure would have been fairly straightforward. With the growing complexities of object models, concepts like aggregation, inheritance, polymorphism, association between classes, and data type (smarted than SQL data types) have to be mapped to relational table structure. The table below highlights the fundamental mismatch between object oriented data model and relational data storage.&lt;br /&gt;
&lt;br /&gt;
=='''[http://docs.jboss.org/hibernate/core/3.3/reference/en/html/inheritance.html Inheritance Mapping]'''==&lt;br /&gt;
[http://en.wikipedia.org/wiki/Inheritance_(object-oriented_programming) Inheritance] in [http://en.wikipedia.org/wiki/Object-oriented_design Object Oriented Design] makes it difficult to map between object and relation databases. In this pattern, there is mapper class for each domain class that will save and load data for the domain class [8]. Mapper class allows both abstract and concrete classes to handle their own O/R mapping[8].&lt;br /&gt;
&lt;br /&gt;
For example: - To find an employee “John”:- &lt;br /&gt;
Application calls find () method on concrete mapper object and instantiate a new Executive object. The find () will pass this executive object and database record to load () of Executive. This in turn will call the load () of Superclass. When all loads return, find returns the filled object.&lt;br /&gt;
Mappers loading and saving the domain objects is determined by the inheritance mapping. This inheritance hierarchy is represented in the database as follows:- &lt;br /&gt;
*Single Table Inheritance&lt;br /&gt;
*Class Table Inheritance &lt;br /&gt;
*Concrete Table Inheritance&lt;br /&gt;
Choosing a mapping scheme depends on speed requirement, whether database is shared and type of [http://en.wikipedia.org/wiki/Relational_database_management_system RDBMS]. &lt;br /&gt;
&lt;br /&gt;
==='''Single Table Inheritance'''===&lt;br /&gt;
Inheritance Hierarchy of all classes is represented as single table. The columns of this table will have fields of all classes in the hierarchy. Advantage of this Inheritance is that there is one table and requires no join while retrieving data. But it could lead to large confusing table and name conflicts.&lt;br /&gt;
&lt;br /&gt;
==='''Class Table Inheritance '''===&lt;br /&gt;
One table for each class is constructed. The advantage of this table inheritance is that there is clear relationship between class and table. There is high normalization. But multiple tables requires join and when fields move up and down in hierarchy, it requires changes in the tables.&lt;br /&gt;
&lt;br /&gt;
==='''Concrete Table Inheritance'''===&lt;br /&gt;
In this hierarchy there is one table per concrete class. The table are independent, requires no join and there is no unused fields.&lt;br /&gt;
&lt;br /&gt;
=='''Association Mapping'''==&lt;br /&gt;
==='''One-to-one mapping'''===&lt;br /&gt;
==='''One-to-many mapping'''===&lt;br /&gt;
==='''Many-to-many mapping'''===&lt;br /&gt;
=='''Aggregation Mapping'''==&lt;br /&gt;
==='''Single table aggregation'''===&lt;br /&gt;
==='''Foreign key aggregation'''===&lt;br /&gt;
=='''Conclusion'''==&lt;br /&gt;
=='''References'''==&lt;/div&gt;</summary>
		<author><name>Quick Gun Murugan</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_12_Patterns_for_ORM&amp;diff=27365</id>
		<title>CSC/ECE 517 Fall 2009/wiki3 12 Patterns for ORM</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_12_Patterns_for_ORM&amp;diff=27365"/>
		<updated>2009-11-17T18:03:21Z</updated>

		<summary type="html">&lt;p&gt;Quick Gun Murugan: /* '''Concrete Table Inheritance''' */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=='''Overview'''==&lt;br /&gt;
[http://en.wikipedia.org/wiki/Object-relational_mapping Object-relational mapping] is not trivial. Apart from being based on Software Engineering principles like coupling, cohesion and polymorphism, the object paradigm focuses on building applications out of objects that have both data and behavior. However, the relational paradigm is based on mathematical principles and focuses primarily on storing data. If only data objects were to be mapped to the relational database the procedure would have been fairly straightforward. With the growing complexities of object models, concepts like aggregation, inheritance, polymorphism, association between classes, and data type (smarted than SQL data types) have to be mapped to relational table structure. The table below highlights the fundamental mismatch between object oriented data model and relational data storage.&lt;br /&gt;
&lt;br /&gt;
=='''[http://docs.jboss.org/hibernate/core/3.3/reference/en/html/inheritance.html Inheritance Mapping]'''==&lt;br /&gt;
[http://en.wikipedia.org/wiki/Inheritance_(object-oriented_programming) Inheritance] in [http://en.wikipedia.org/wiki/Object-oriented_design Object Oriented Design] makes it difficult to map between object and relation databases. In this pattern, there is mapper class for each domain class that will save and load data for the domain class [8]. Mapper class allows both abstract and concrete classes to handle their own O/R mapping[8].&lt;br /&gt;
&lt;br /&gt;
For example: - To find an employee “John”:- &lt;br /&gt;
Application calls find () method on concrete mapper object and instantiate a new Executive object. The find () will pass this executive object and database record to load () of Executive. This in turn will call the load () of Superclass. When all loads return, find returns the filled object.&lt;br /&gt;
Mappers loading and saving the domain objects is determined by the inheritance mapping. This inheritance hierarchy is represented in the database as follows:- &lt;br /&gt;
*Single Table Inheritance&lt;br /&gt;
*Class Table Inheritance &lt;br /&gt;
*Concrete Table Inheritance&lt;br /&gt;
Choosing a mapping scheme depends on speed requirement, whether database is shared and type of RDBMS. &lt;br /&gt;
&lt;br /&gt;
==='''Single Table Inheritance'''===&lt;br /&gt;
Inheritance Hierarchy of all classes is represented as single table. The columns of this table will have fields of all classes in the hierarchy. Advantage of this Inheritance is that there is one table and requires no join while retrieving data. But it could lead to large confusing table and name conflicts.&lt;br /&gt;
&lt;br /&gt;
==='''Class Table Inheritance '''===&lt;br /&gt;
One table for each class is constructed. The advantage of this table inheritance is that there is clear relationship between class and table. There is high normalization. But multiple tables requires join and when fields move up and down in hierarchy, it requires changes in the tables.&lt;br /&gt;
&lt;br /&gt;
==='''Concrete Table Inheritance'''===&lt;br /&gt;
In this hierarchy there is one table per concrete class. The table are independent, requires no join and there is no unused fields.&lt;br /&gt;
&lt;br /&gt;
=='''Association Mapping'''==&lt;br /&gt;
==='''One-to-one mapping'''===&lt;br /&gt;
==='''One-to-many mapping'''===&lt;br /&gt;
==='''Many-to-many mapping'''===&lt;br /&gt;
=='''Aggregation Mapping'''==&lt;br /&gt;
==='''Single table aggregation'''===&lt;br /&gt;
==='''Foreign key aggregation'''===&lt;br /&gt;
=='''Conclusion'''==&lt;br /&gt;
=='''References'''==&lt;/div&gt;</summary>
		<author><name>Quick Gun Murugan</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_12_Patterns_for_ORM&amp;diff=27363</id>
		<title>CSC/ECE 517 Fall 2009/wiki3 12 Patterns for ORM</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_12_Patterns_for_ORM&amp;diff=27363"/>
		<updated>2009-11-17T18:02:32Z</updated>

		<summary type="html">&lt;p&gt;Quick Gun Murugan: /* '''Single Table Inheritance''' */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=='''Overview'''==&lt;br /&gt;
[http://en.wikipedia.org/wiki/Object-relational_mapping Object-relational mapping] is not trivial. Apart from being based on Software Engineering principles like coupling, cohesion and polymorphism, the object paradigm focuses on building applications out of objects that have both data and behavior. However, the relational paradigm is based on mathematical principles and focuses primarily on storing data. If only data objects were to be mapped to the relational database the procedure would have been fairly straightforward. With the growing complexities of object models, concepts like aggregation, inheritance, polymorphism, association between classes, and data type (smarted than SQL data types) have to be mapped to relational table structure. The table below highlights the fundamental mismatch between object oriented data model and relational data storage.&lt;br /&gt;
&lt;br /&gt;
=='''[http://docs.jboss.org/hibernate/core/3.3/reference/en/html/inheritance.html Inheritance Mapping]'''==&lt;br /&gt;
[http://en.wikipedia.org/wiki/Inheritance_(object-oriented_programming) Inheritance] in [http://en.wikipedia.org/wiki/Object-oriented_design Object Oriented Design] makes it difficult to map between object and relation databases. In this pattern, there is mapper class for each domain class that will save and load data for the domain class [8]. Mapper class allows both abstract and concrete classes to handle their own O/R mapping[8].&lt;br /&gt;
&lt;br /&gt;
For example: - To find an employee “John”:- &lt;br /&gt;
Application calls find () method on concrete mapper object and instantiate a new Executive object. The find () will pass this executive object and database record to load () of Executive. This in turn will call the load () of Superclass. When all loads return, find returns the filled object.&lt;br /&gt;
Mappers loading and saving the domain objects is determined by the inheritance mapping. This inheritance hierarchy is represented in the database as follows:- &lt;br /&gt;
*Single Table Inheritance&lt;br /&gt;
*Class Table Inheritance &lt;br /&gt;
*Concrete Table Inheritance&lt;br /&gt;
Choosing a mapping scheme depends on speed requirement, whether database is shared and type of RDBMS. &lt;br /&gt;
&lt;br /&gt;
==='''Single Table Inheritance'''===&lt;br /&gt;
Inheritance Hierarchy of all classes is represented as single table. The columns of this table will have fields of all classes in the hierarchy. Advantage of this Inheritance is that there is one table and requires no join while retrieving data. But it could lead to large confusing table and name conflicts.&lt;br /&gt;
&lt;br /&gt;
==='''Class Table Inheritance '''===&lt;br /&gt;
One table for each class is constructed. The advantage of this table inheritance is that there is clear relationship between class and table. There is high normalization. But multiple tables requires join and when fields move up and down in hierarchy, it requires changes in the tables.&lt;br /&gt;
&lt;br /&gt;
==='''Concrete Table Inheritance'''===&lt;br /&gt;
&lt;br /&gt;
=='''Association Mapping'''==&lt;br /&gt;
==='''One-to-one mapping'''===&lt;br /&gt;
==='''One-to-many mapping'''===&lt;br /&gt;
==='''Many-to-many mapping'''===&lt;br /&gt;
=='''Aggregation Mapping'''==&lt;br /&gt;
==='''Single table aggregation'''===&lt;br /&gt;
==='''Foreign key aggregation'''===&lt;br /&gt;
=='''Conclusion'''==&lt;br /&gt;
=='''References'''==&lt;/div&gt;</summary>
		<author><name>Quick Gun Murugan</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_12_Patterns_for_ORM&amp;diff=27362</id>
		<title>CSC/ECE 517 Fall 2009/wiki3 12 Patterns for ORM</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_12_Patterns_for_ORM&amp;diff=27362"/>
		<updated>2009-11-17T18:02:13Z</updated>

		<summary type="html">&lt;p&gt;Quick Gun Murugan: /* '''Class Table Inheritance ''' */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=='''Overview'''==&lt;br /&gt;
[http://en.wikipedia.org/wiki/Object-relational_mapping Object-relational mapping] is not trivial. Apart from being based on Software Engineering principles like coupling, cohesion and polymorphism, the object paradigm focuses on building applications out of objects that have both data and behavior. However, the relational paradigm is based on mathematical principles and focuses primarily on storing data. If only data objects were to be mapped to the relational database the procedure would have been fairly straightforward. With the growing complexities of object models, concepts like aggregation, inheritance, polymorphism, association between classes, and data type (smarted than SQL data types) have to be mapped to relational table structure. The table below highlights the fundamental mismatch between object oriented data model and relational data storage.&lt;br /&gt;
&lt;br /&gt;
=='''[http://docs.jboss.org/hibernate/core/3.3/reference/en/html/inheritance.html Inheritance Mapping]'''==&lt;br /&gt;
[http://en.wikipedia.org/wiki/Inheritance_(object-oriented_programming) Inheritance] in [http://en.wikipedia.org/wiki/Object-oriented_design Object Oriented Design] makes it difficult to map between object and relation databases. In this pattern, there is mapper class for each domain class that will save and load data for the domain class [8]. Mapper class allows both abstract and concrete classes to handle their own O/R mapping[8].&lt;br /&gt;
&lt;br /&gt;
For example: - To find an employee “John”:- &lt;br /&gt;
Application calls find () method on concrete mapper object and instantiate a new Executive object. The find () will pass this executive object and database record to load () of Executive. This in turn will call the load () of Superclass. When all loads return, find returns the filled object.&lt;br /&gt;
Mappers loading and saving the domain objects is determined by the inheritance mapping. This inheritance hierarchy is represented in the database as follows:- &lt;br /&gt;
*Single Table Inheritance&lt;br /&gt;
*Class Table Inheritance &lt;br /&gt;
*Concrete Table Inheritance&lt;br /&gt;
Choosing a mapping scheme depends on speed requirement, whether database is shared and type of RDBMS. &lt;br /&gt;
&lt;br /&gt;
==='''Single Table Inheritance'''===&lt;br /&gt;
==='''Class Table Inheritance '''===&lt;br /&gt;
One table for each class is constructed. The advantage of this table inheritance is that there is clear relationship between class and table. There is high normalization. But multiple tables requires join and when fields move up and down in hierarchy, it requires changes in the tables.&lt;br /&gt;
&lt;br /&gt;
==='''Concrete Table Inheritance'''===&lt;br /&gt;
&lt;br /&gt;
=='''Association Mapping'''==&lt;br /&gt;
==='''One-to-one mapping'''===&lt;br /&gt;
==='''One-to-many mapping'''===&lt;br /&gt;
==='''Many-to-many mapping'''===&lt;br /&gt;
=='''Aggregation Mapping'''==&lt;br /&gt;
==='''Single table aggregation'''===&lt;br /&gt;
==='''Foreign key aggregation'''===&lt;br /&gt;
=='''Conclusion'''==&lt;br /&gt;
=='''References'''==&lt;/div&gt;</summary>
		<author><name>Quick Gun Murugan</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_12_Patterns_for_ORM&amp;diff=27352</id>
		<title>CSC/ECE 517 Fall 2009/wiki3 12 Patterns for ORM</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_12_Patterns_for_ORM&amp;diff=27352"/>
		<updated>2009-11-17T17:52:20Z</updated>

		<summary type="html">&lt;p&gt;Quick Gun Murugan: /* '''Inheritance Mapping''' */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=='''Overview'''==&lt;br /&gt;
[http://en.wikipedia.org/wiki/Object-relational_mapping Object-relational mapping] is not trivial. Apart from being based on Software Engineering principles like coupling, cohesion and polymorphism, the object paradigm focuses on building applications out of objects that have both data and behavior. However, the relational paradigm is based on mathematical principles and focuses primarily on storing data. If only data objects were to be mapped to the relational database the procedure would have been fairly straightforward. With the growing complexities of object models, concepts like aggregation, inheritance, polymorphism, association between classes, and data type (smarted than SQL data types) have to be mapped to relational table structure. The table below highlights the fundamental mismatch between object oriented data model and relational data storage.&lt;br /&gt;
&lt;br /&gt;
=='''[http://docs.jboss.org/hibernate/core/3.3/reference/en/html/inheritance.html Inheritance Mapping]'''==&lt;br /&gt;
[http://en.wikipedia.org/wiki/Inheritance_(object-oriented_programming) Inheritance] in [http://en.wikipedia.org/wiki/Object-oriented_design Object Oriented Design] makes it difficult to map between object and relation databases. In this pattern, there is mapper class for each domain class that will save and load data for the domain class [8]. Mapper class allows both abstract and concrete classes to handle their own O/R mapping[8].&lt;br /&gt;
&lt;br /&gt;
For example: - To find an employee “John”:- &lt;br /&gt;
Application calls find () method on concrete mapper object and instantiate a new Executive object. The find () will pass this executive object and database record to load () of Executive. This in turn will call the load () of Superclass. When all loads return, find returns the filled object.&lt;br /&gt;
Mappers loading and saving the domain objects is determined by the inheritance mapping. This inheritance hierarchy is represented in the database as follows:- &lt;br /&gt;
*Single Table Inheritance&lt;br /&gt;
*Class Table Inheritance &lt;br /&gt;
*Concrete Table Inheritance&lt;br /&gt;
Choosing a mapping scheme depends on speed requirement, whether database is shared and type of RDBMS. &lt;br /&gt;
&lt;br /&gt;
==='''Single Table Inheritance'''===&lt;br /&gt;
==='''Class Table Inheritance '''===&lt;br /&gt;
==='''Concrete Table Inheritance'''===&lt;br /&gt;
&lt;br /&gt;
=='''Association Mapping'''==&lt;br /&gt;
==='''One-to-one mapping'''===&lt;br /&gt;
==='''One-to-many mapping'''===&lt;br /&gt;
==='''Many-to-many mapping'''===&lt;br /&gt;
=='''Aggregation Mapping'''==&lt;br /&gt;
==='''Single table aggregation'''===&lt;br /&gt;
==='''Foreign key aggregation'''===&lt;br /&gt;
=='''Conclusion'''==&lt;br /&gt;
=='''References'''==&lt;/div&gt;</summary>
		<author><name>Quick Gun Murugan</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_12_Patterns_for_ORM&amp;diff=27350</id>
		<title>CSC/ECE 517 Fall 2009/wiki3 12 Patterns for ORM</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_12_Patterns_for_ORM&amp;diff=27350"/>
		<updated>2009-11-17T17:45:38Z</updated>

		<summary type="html">&lt;p&gt;Quick Gun Murugan: /* '''Overview''' */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=='''Overview'''==&lt;br /&gt;
[http://en.wikipedia.org/wiki/Object-relational_mapping Object-relational mapping] is not trivial. Apart from being based on Software Engineering principles like coupling, cohesion and polymorphism, the object paradigm focuses on building applications out of objects that have both data and behavior. However, the relational paradigm is based on mathematical principles and focuses primarily on storing data. If only data objects were to be mapped to the relational database the procedure would have been fairly straightforward. With the growing complexities of object models, concepts like aggregation, inheritance, polymorphism, association between classes, and data type (smarted than SQL data types) have to be mapped to relational table structure. The table below highlights the fundamental mismatch between object oriented data model and relational data storage.&lt;br /&gt;
&lt;br /&gt;
=='''Inheritance Mapping'''==&lt;br /&gt;
==='''Single Table Inheritance'''===&lt;br /&gt;
==='''Class Table Inheritance '''===&lt;br /&gt;
==='''Concrete Table Inheritance'''===&lt;br /&gt;
=='''Association Mapping'''==&lt;br /&gt;
==='''One-to-one mapping'''===&lt;br /&gt;
==='''One-to-many mapping'''===&lt;br /&gt;
==='''Many-to-many mapping'''===&lt;br /&gt;
=='''Aggregation Mapping'''==&lt;br /&gt;
==='''Single table aggregation'''===&lt;br /&gt;
==='''Foreign key aggregation'''===&lt;br /&gt;
=='''Conclusion'''==&lt;br /&gt;
=='''References'''==&lt;/div&gt;</summary>
		<author><name>Quick Gun Murugan</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_12_Patterns_for_ORM&amp;diff=27345</id>
		<title>CSC/ECE 517 Fall 2009/wiki3 12 Patterns for ORM</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_12_Patterns_for_ORM&amp;diff=27345"/>
		<updated>2009-11-17T17:00:09Z</updated>

		<summary type="html">&lt;p&gt;Quick Gun Murugan: /* '''Overview''' */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=='''Overview'''==&lt;br /&gt;
[http://en.wikipedia.org/wiki/Object-relational_mapping Object-relational mapping] is not trivial. Apart from being based on Software Engineering principles like coupling, cohesion and polymorphism, the object paradigm focuses on building applications out of objects that have both data and behavior. However, the relational paradigm is based on mathematical principles and focuses primarily on storing data. If only data objects were to be mapped to the relational database the procedure would have been fairly straightforward. With the growing complexities of object models, concepts like aggregation, inheritance, polymorphism, association between classes, and data type (smarted than SQL data types) have to be mapped to relational table structure. The table below highlights the fundamental mismatch between object oriented data model and relational data storage.&lt;br /&gt;
[[Image:wiki1_8_smr_class_diagram.gif]]&lt;/div&gt;</summary>
		<author><name>Quick Gun Murugan</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_12_Patterns_for_ORM&amp;diff=27338</id>
		<title>CSC/ECE 517 Fall 2009/wiki3 12 Patterns for ORM</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_12_Patterns_for_ORM&amp;diff=27338"/>
		<updated>2009-11-17T16:33:10Z</updated>

		<summary type="html">&lt;p&gt;Quick Gun Murugan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=='''Overview'''==&lt;br /&gt;
Object-relational mapping is not trivial. Apart from being based on Software Engineering principles like coupling, cohesion and polymorphism, the object paradigm focuses on building applications out of objects that have both data and behavior. However, the relational paradigm is based on mathematical principles and focuses primarily on storing data. If only data objects were to be mapped to the relational database the procedure would have been fairly straightforward. With the growing complexities of object models, concepts like aggregation, inheritance, polymorphism, association between classes, and data type (smarted than SQL data types) have to be mapped to relational table structure. The table below highlights the fundamental mismatch between object oriented data model and relational data storage.&lt;/div&gt;</summary>
		<author><name>Quick Gun Murugan</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_12_Patterns_for_ORM&amp;diff=27337</id>
		<title>CSC/ECE 517 Fall 2009/wiki3 12 Patterns for ORM</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_12_Patterns_for_ORM&amp;diff=27337"/>
		<updated>2009-11-17T16:32:26Z</updated>

		<summary type="html">&lt;p&gt;Quick Gun Murugan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Overview&lt;br /&gt;
Object-relational mapping is not trivial. Apart from being based on Software Engineering principles like coupling, cohesion and polymorphism, the object paradigm focuses on building applications out of objects that have both data and behavior. However, the relational paradigm is based on mathematical principles and focuses primarily on storing data. If only data objects were to be mapped to the relational database the procedure would have been fairly straightforward. With the growing complexities of object models, concepts like aggregation, inheritance, polymorphism, association between classes, and data type (smarted than SQL data types) have to be mapped to relational table structure. The table below highlights the fundamental mismatch between object oriented data model and relational data storage.&lt;/div&gt;</summary>
		<author><name>Quick Gun Murugan</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_12_Schemes_for_Pattern_Classification&amp;diff=25750</id>
		<title>CSC/ECE 517 Fall 2009/wiki2 12 Schemes for Pattern Classification</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_12_Schemes_for_Pattern_Classification&amp;diff=25750"/>
		<updated>2009-10-13T02:02:53Z</updated>

		<summary type="html">&lt;p&gt;Quick Gun Murugan: /* Pree's Classification */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=='''Overview'''==&lt;br /&gt;
[http://en.wikipedia.org/wiki/Design_pattern_(computer_science) Design patterns] in [http://en.wikipedia.org/wiki/Software_engineering software engineering] is a time-tested reusable solution to recurring problems in [http://en.wikipedia.org/wiki/Software_design software design]. The origin of design patterns can be owed to the work of civil engineer [http://en.wikipedia.org/wiki/Christopher_Alexander Christopher Alexander], who documented his resolution to design issues in constructing buildings and towns[1]. About a decade and a half ago, software professional began to incorporate Alexanders ideas into guides for novice developers. From then on design patterns became increasingly popular.&lt;br /&gt;
&lt;br /&gt;
=='''Schemes for Pattern Classification'''==&lt;br /&gt;
===Gang of Four's Classification===&lt;br /&gt;
Design Patterns gained popularity with the book [http://en.wikipedia.org/wiki/Design_Patterns_(book) Design Patterns: Elements of Reusable Object-Oriented Software] by [http://en.wikipedia.org/wiki/Erich_Gamma Erich Gamma], [http://en.wikipedia.org/wiki/Richard_Helm Richard Helm], [http://en.wikipedia.org/wiki/Ralph_Johnson Ralph Johnson] and [http://en.wikipedia.org/wiki/John_Vlissides John Vlissides] published in 1995. In their work they used 2 criteria to categorize 23 design pattern[2].&lt;br /&gt;
* What does the pattern do?&lt;br /&gt;
** [http://en.wikipedia.org/wiki/Structural_pattern Structural] - These patterns deal with the composition of classes and their object.&lt;br /&gt;
** [http://en.wikipedia.org/wiki/Creational_pattern Creational] - These patterns deal with object creation.&lt;br /&gt;
** [http://en.wikipedia.org/wiki/Behavioral_pattern Behavioral] - These patterns deal with the interaction between classes and object and how they delegate responsibility.&lt;br /&gt;
&lt;br /&gt;
* What is the scope of the pattern?&lt;br /&gt;
** Class - The patterns deal with the relationships between classes and their subclasses. These are more static and fixed at compile time. &lt;br /&gt;
** Object - These patterns deal with object relationship. They are more dynamic and can vary at runtime.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;4&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|+ Example of Design Patterns that fall into each Category&lt;br /&gt;
|colspan=&amp;quot;5&amp;quot; align=&amp;quot;center&amp;quot;|'''Purpose'''&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Scope'''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Creational'''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Structural'''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Behavioral'''&lt;br /&gt;
|-&lt;br /&gt;
|rowspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot;|Class &lt;br /&gt;
|rowspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Factory_method_pattern Factory Method]&lt;br /&gt;
|rowspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Adapter_pattern Adapter (class)]&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Interpreter_pattern Interpreter]&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Template_method_pattern Template Method]&lt;br /&gt;
|-&lt;br /&gt;
|rowspan=&amp;quot;9&amp;quot; align=&amp;quot;center&amp;quot;|Object&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Abstract_factory_pattern Abstract Factory]&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Adapter_pattern Adapter (object)]&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Command_pattern Command]&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Prototype_pattern Prototype]&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Composite_pattern Composite]&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Mediator_pattern Mediator]&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Builder_pattern Builder]&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Bridge_pattern Bridge]&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Iterator_pattern Iterator]&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Singleton_pattern Singleton]&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Decorator_pattern Decorator]&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Memento_pattern Memento]&lt;br /&gt;
|-&lt;br /&gt;
|rowspan=&amp;quot;5&amp;quot; align=&amp;quot;center&amp;quot;| &lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Facade_pattern Facade]&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Observer_pattern Observer]&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Flyweight_pattern Flyweight]&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/State_pattern State]&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Proxy_pattern Proxy]&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Strategy_pattern Strategy]&lt;br /&gt;
|-&lt;br /&gt;
|rowspan=&amp;quot;2&amp;quot;  align=&amp;quot;center&amp;quot;|  &lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Visitor_pattern Visitor]&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Chain-of-responsibility_pattern Chain Of Responsibility]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Zimmer's Classification===&lt;br /&gt;
Zimmer[3] classifies the relationships between the Gang of Four design patterns. Focusing on the problem and solution of each relationship, they can be classified as :&lt;br /&gt;
* X uses Y in its solution.&lt;br /&gt;
** The [http://en.wikipedia.org/wiki/Interpreter_pattern Interpreter] design pattern uses the [http://en.wikipedia.org/wiki/Composite_pattern Composite] design patter.&lt;br /&gt;
** The [http://en.wikipedia.org/wiki/Prototype_pattern Prototype] design pattern uses the [http://en.wikipedia.org/wiki/Singleton_pattern Singleton] design pattern.&lt;br /&gt;
* Variant of X uses Y in its solution.&lt;br /&gt;
** Some variant of the [http://en.wikipedia.org/wiki/Bridge_pattern Bridge] design pattern may uses the [http://en.wikipedia.org/wiki/Adapter_pattern Adapter] design pattern.&lt;br /&gt;
* X is similar to Y.&lt;br /&gt;
** The [http://en.wikipedia.org/wiki/Mediator_pattern Mediator] design pattern is similar to the [http://en.wikipedia.org/wiki/Facade_pattern Facade] design pattern.&lt;br /&gt;
&lt;br /&gt;
Using these relationships Zimmer placed design pattern in 3 layers.&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;4&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Layer'''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Design Pattern'''&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Basic design patterns and techniques.&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Singleton_pattern Singleton], [http://en.wikipedia.org/wiki/Template_method_pattern Template Method], [http://en.wikipedia.org/wiki/Mediator_pattern Mediator], [http://en.wikipedia.org/wiki/Facade_pattern Facade], [http://en.wikipedia.org/wiki/Memento_pattern Memento], [http://en.wikipedia.org/wiki/Iterator_pattern Iterator], [http://en.wikipedia.org/wiki/Flyweight_pattern Flyweight].&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Design patterns for typical software problems.&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Abstract_factory_pattern Abstract Factory], [http://en.wikipedia.org/wiki/Builder_pattern Builder], [http://en.wikipedia.org/wiki/Strategy_pattern Strategy], [http://en.wikipedia.org/wiki/Observer_pattern Observer], [http://en.wikipedia.org/wiki/Bridge_pattern Bridge], [http://en.wikipedia.org/wiki/Adapter_pattern Adapter], [http://en.wikipedia.org/wiki/Prototype_pattern Prototype], [http://en.wikipedia.org/wiki/Factory_method_pattern Factory Method], [http://en.wikipedia.org/wiki/State_pattern State], [http://en.wikipedia.org/wiki/Command_pattern Command], [http://en.wikipedia.org/wiki/Visitor_pattern Visitor], [http://en.wikipedia.org/wiki/Composite_pattern Composite], [http://en.wikipedia.org/wiki/Decorator_pattern Decorator], [http://en.wikipedia.org/wiki/Chain-of-responsibility_pattern Chain Of Responsibility], [http://en.wikipedia.org/wiki/Proxy_pattern Proxy]&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Design patterns specific to an application domain.&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Interpreter_pattern Interpreter]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Coad's Classification===&lt;br /&gt;
In 1992 Peter Coad published his first article of design patterns. According to Coad, design patterns are identified observing classes, objects and the relationships established between them[5]. In his book Object Models: Strategies, Patterns, and Applications, Peter Coad along with David North and Mark Mayfield organized patterns into various pattern families[4].&lt;br /&gt;
* '''Fundamental Pattern''': This pattern is the template that all the other patterns follow.&lt;br /&gt;
** Collection-Worker Pattern is the fundamental object model pattern.&lt;br /&gt;
* '''Transaction Patterns''': These either have transaction players or have players that commonly play with the transaction player. The transaction patterns are:&lt;br /&gt;
** Actor-Participant pattern.&lt;br /&gt;
** Participant-Transaction pattern.&lt;br /&gt;
** Place-Transaction pattern.&lt;br /&gt;
** Specific Item-Transaction pattern.&lt;br /&gt;
** Transaction-Transaction Line Item pattern.&lt;br /&gt;
** Transaction-Subsequent Transaction pattern.&lt;br /&gt;
** Transaction Line Item-Subsequent Transaction Line Item pattern.&lt;br /&gt;
** Item-Line Item pattern.&lt;br /&gt;
** Specific Item-Line Item.&lt;br /&gt;
** Item-Specific Item.&lt;br /&gt;
** Associate-Other Associate.&lt;br /&gt;
** Specific Item-Hierarchical Item.&lt;br /&gt;
* '''Aggregate Patterns''': These patterns interconnect with other patterns. The aggregate patterns are:&lt;br /&gt;
** Container-Content pattern.&lt;br /&gt;
** Container-Container Line Item pattern.&lt;br /&gt;
** Group-Member.&lt;br /&gt;
** Assembly-Part pattern.&lt;br /&gt;
** Compound Part-Part pattern.&lt;br /&gt;
** Packet-Packet Component.&lt;br /&gt;
* '''Plan Patterns''': The plan patterns are:&lt;br /&gt;
** Plan-Step pattern.&lt;br /&gt;
** Plan-Plan Execution pattern.&lt;br /&gt;
** Plan Execution-Step Execution pattern.&lt;br /&gt;
** Step-Step Execution pattern.&lt;br /&gt;
** Plan-Plan Version pattern.&lt;br /&gt;
* '''Interaction Patterns''': These patterns, as the name suggests are patterns of interaction. The interaction patterns are:&lt;br /&gt;
** Peer-Peer pattern.&lt;br /&gt;
** Proxy-Specific Item pattern.&lt;br /&gt;
** Publisher-Subscriber pattern.&lt;br /&gt;
** Sender-Pass Through-Receiver pattern.&lt;br /&gt;
** Sender-Lookup-Receiver pattern.&lt;br /&gt;
** Caller-Dispatcher-Caller Back pattern.&lt;br /&gt;
** Gatekeeper-Request-Resource pattern.&lt;br /&gt;
&lt;br /&gt;
===Pree's Classification===&lt;br /&gt;
In his book Design Patterns for Object-Oriented Software Development, Addison-Wesley, 1995, Wolfgang Pree categorized Coad's patterns into[5]:&lt;br /&gt;
* '''Basic inheritance and interaction patterns:''' These patterns encompass primarily the basic modelling capabilities offered by object oriented programming languages.&lt;br /&gt;
* '''Patterns for structuring object-oriented software systems: '''Most of Coad's patterns belong to this category.  &lt;br /&gt;
* '''Patterns related to the [http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller MVC] framework: ''' Those of Coad's patterns that stress the framework aspect are derivatives of the Model/View/Controller framework.&lt;br /&gt;
Ignoring the fine-grained[5] pattern classification proposed by Gamma's catalog, Pree applied the following classification of the listed patterns.&lt;br /&gt;
* '''Patterns relying on abstract coupling: '''Most of the patterns in the catalog are based on abstractly coupled classes. [http://en.wikipedia.org/wiki/Factory_method_pattern Factory Method pattern] and [http://en.wikipedia.org/wiki/Observer_pattern Observer pattern] for example.  &lt;br /&gt;
* '''Patterns based on recursive structures: ''' [http://en.wikipedia.org/wiki/Composite_pattern Composite] pattern, [http://en.wikipedia.org/wiki/Chain-of-responsibility_pattern Chain Of Responsibility] pattern, [http://en.wikipedia.org/wiki/Decorator_pattern Decorator] pattern are all based on recursive structures. &lt;br /&gt;
* '''Other Catalog patterns''': Pree summarized the rest of the patterns as follows:&lt;br /&gt;
** An [http://en.wikipedia.org/wiki/Abstract_factory_pattern Abstract Factory] pattern is close to the [http://en.wikipedia.org/wiki/Factory_method_pattern Factory Method] pattern&lt;br /&gt;
** [http://en.wikipedia.org/wiki/Flyweight_pattern Flyweight] pattern represents a pattern similar to Coad's Item-Description pattern.&lt;br /&gt;
** [http://en.wikipedia.org/wiki/Singleton_pattern Singleton] pattern is a coding patterns that limits the number of creatable instances of a class to one.&lt;br /&gt;
** [http://en.wikipedia.org/wiki/Template_method_pattern Template Method] pattern forms the basis of all patterns dealing with with abstract classes.&lt;br /&gt;
&lt;br /&gt;
==='''Buschman et. al's Classification'''===&lt;br /&gt;
Frank Buschman and Regine Meunier identified the following categories[6]:&lt;br /&gt;
* '''Granularity: ''' Three levels of granularity can be specified. &lt;br /&gt;
** [http://en.wikipedia.org/wiki/Architectural_pattern_(computer_science) Architectural Framework]: Every software architecture is built according to an overall structuring principles described by architectural frameworks. Example: The [http://en.wikipedia.org/wiki/Model-view-controller Model-View-Controller] framework.&lt;br /&gt;
** [http://en.wikipedia.org/wiki/Design_pattern_(computer_science) Design Patterns]: These can be described as the smaller architectural units.&lt;br /&gt;
** [http://en.wikipedia.org/wiki/Programming_idiom Idioms]: Idioms represent the lowest level of a pattern and are closely related to a particular programming language. Example: [http://en.wikibooks.org/wiki/More_C%2B%2B_Idioms/Counted_Body The Counted Body] Idiom.&lt;br /&gt;
&lt;br /&gt;
*'''Functionality: '''Each pattern serves as a means to implement a particular functionality. The following categories of functionality can be distinguished:&lt;br /&gt;
** Creation of objects: Patterns may specify how to create particular instances of complex recursive or aggregate object structures. Example: [http://en.wikipedia.org/wiki/Singleton_pattern Singleton pattern]&lt;br /&gt;
** Guiding Communication between objects: Patterns may describe how to organize communication between a set of collaborating objects.&lt;br /&gt;
** Access to objects: Patterns may describe how to access the services and state of shared or remote objects in a safe way. Example: [http://en.wikipedia.org/wiki/Proxy_pattern Proxy pattern]&lt;br /&gt;
** Organizing the computation of the complex tasks: Patterns may specify how to distribute responsibilities among cooperating objects in order to solve a more complex task. Example: [http://en.wikipedia.org/wiki/Command_pattern Command pattern]&lt;br /&gt;
&lt;br /&gt;
*'''Structural Principles: ''' To achieve their functionality, patterns rely on certain architectural principles. These principles can be categorized as:&lt;br /&gt;
** Abstraction: A pattern provides an abstract view of a particular entity or task in a software system. Example: [http://en.wikipedia.org/wiki/Facade_pattern Facade pattern]&lt;br /&gt;
** Encapsulation: A pattern encapsulates details of a particular object, component, or service to remove dependencies on it from its clients or to protect these details from access. Example: [http://en.wikipedia.org/wiki/Mediator_pattern Mediator pattern]&lt;br /&gt;
** Separation of concerns: A pattern factors out specific responsibilities into separate objects or components.&lt;br /&gt;
** Coupling and Cohesion: A patterns removes dependencies between strongly coupled objects. Example: [http://en.wikipedia.org/wiki/Bridge_pattern Bridge pattern]&lt;br /&gt;
&lt;br /&gt;
This classification scheme is not intended as a means of picking out the right pattern, but merely a guide for designers helping them search for the pattern appropriate for a particular situation.&lt;br /&gt;
&lt;br /&gt;
===Tichy's Classification===&lt;br /&gt;
Walter Tichy classified several design patterns based on the kind of problems they solved. He grouped the problems into the following high-level categories[6]:&lt;br /&gt;
* Decoupling: dividing a software system into in-dependent parts in such a way that the parts can be built, changed, replaced, and reused independently. Decoupling patterns can be further classified into:&lt;br /&gt;
** Modules([http://en.wikipedia.org/wiki/Encapsulation_(computer_science)#Encapsulation Encapsulation]/[http://en.wikipedia.org/wiki/Information_hiding Information Hiding])[7]: Hide data structure and operations that are most likely to change, thus protecting other parts of the system from the effects of those changes. Examples for support of modules are &lt;br /&gt;
*** [http://en.wikipedia.org/wiki/Modula Modula's] modules.&lt;br /&gt;
*** [http://en.wikipedia.org/wiki/C_(programming_language) C's] header files.&lt;br /&gt;
***[http://en.wikipedia.org/wiki/Ada_(programming_language) Ada's] packages.&lt;br /&gt;
** Abstract Data Type[ADT]: Hide data structure and access algorithms behind a change-insensitive interface. The purpose of ADT is similar to that of Module, but an ADT is typically smaller, containing a single data type. Examples:&lt;br /&gt;
*** Repository pattern[8].&lt;br /&gt;
*** [http://en.wikipedia.org/wiki/Iterator_pattern Iterator pattern].&lt;br /&gt;
** Layers: The purpose of a layer is to provides an interface and an implementation of this interface. Example:&lt;br /&gt;
*** [http://en.wikipedia.org/wiki/Facade_pattern Facade pattern].&lt;br /&gt;
*** [http://en.wikipedia.org/wiki/Bridge_pattern Bridge pattern].&lt;br /&gt;
*** [http://en.wikipedia.org/wiki/Adapter_pattern Adapter pattern].&lt;br /&gt;
*** [http://en.wikipedia.org/wiki/Proxy_pattern Proxy pattern].&lt;br /&gt;
** Pipeline: Pass data through a sequence of transformations (filters) connected by channels (pipes).&lt;br /&gt;
** Event Notification: Let independent parts interact by an-nouncing and responding to events (loose coupling).&lt;br /&gt;
** Framework: Provide a complete or nearly complete application layer that can be extended by sub-classing.&lt;br /&gt;
* Variant Management: treating different objects uniformly by factoring out their commonality.&lt;br /&gt;
** Superclass: Provide uniform treatment of variant classes by placing common interface into a super-class; variants are subclasses. Example:&lt;br /&gt;
*** [http://en.wikipedia.org/wiki/Strategy_pattern Strategy pattern].&lt;br /&gt;
*** [http://en.wikipedia.org/wiki/Composite_pattern Composite pattern].&lt;br /&gt;
** [http://en.wikipedia.org/wiki/Visitor_pattern Visitor]: Add new variations of operations to stable class hierarchy.&lt;br /&gt;
** [http://en.wikipedia.org/wiki/Template_method_pattern Template Method]: Specify algorithm skeleton using primitives; vary primitives in subclasses or by delegation.&lt;br /&gt;
** [http://en.wikipedia.org/wiki/Abstract_factory_pattern Abstract Factory]: Bundle the constructors of a family of related objects into one object.&lt;br /&gt;
* State Handling: generic manipulation of object state.&lt;br /&gt;
** [http://en.wikipedia.org/wiki/Singleton_pattern Singleton]: Guarantee single instance of a class.&lt;br /&gt;
** [http://en.wikipedia.org/wiki/Prototype_pattern Prototype]: Create new objects by cloning an existing one (the prototype). &lt;br /&gt;
** [http://en.wikipedia.org/wiki/Flyweight_pattern Flyweight]: Save space by sharing common state among objects.&lt;br /&gt;
** [http://en.wikipedia.org/wiki/Memento_pattern Memento]: save and restore an object’s internal state. &lt;br /&gt;
* Control: control of execution and method selection.&lt;br /&gt;
** [http://en.wikipedia.org/wiki/Blackboard_system Blackboard]: Dynamically decide which transformers (knowledge sources) to apply to a shared data structure.&lt;br /&gt;
** [http://en.wikipedia.org/wiki/Command_pattern Command]: Separate composition of a request from the time it is executed.&lt;br /&gt;
** [Chain of Responsibility]: Pass a request down a chain of objects until an object handles it.&lt;br /&gt;
* Virtual Machines: simulated processors.&lt;br /&gt;
** Interpreter: Execute a program written in the inter-preter’s language.&lt;br /&gt;
** Rule-based Interpreter: Execute a rule set using a fact base.&lt;br /&gt;
* Convenience Patterns: simplified coding.&lt;br /&gt;
** Convenience Method: Simplify method invocations by suppressing parameters whose values are the same for many calls.&lt;br /&gt;
** Convenience Class: Simplify method invocations by storing parameter values in the class.&lt;br /&gt;
** Default Class: Provide a default implementation of a class that normally must be reimplemented by the client. Subclasses override only the methods for which the defaults are inappropriate.&lt;br /&gt;
** [http://en.wikipedia.org/wiki/Null_Object_pattern Null object]: Eliminate frequent tests for null references by replacing null references with a reference to the null object. &lt;br /&gt;
* Compound Patterns: patterns composed from others, with the original patterns visible.&lt;br /&gt;
** [http://en.wikipedia.org/wiki/Model-view-controller Model-View-Controller]: Provide multiple, dynamic views on shared data and dynamically change responses to user input. &lt;br /&gt;
** Bureaucracy: Organize objects in a hierarchical structure such that it maintains its inner consistency by itself. &lt;br /&gt;
** Active Bridge: Connect an application to event-driven resouces in a portable way.&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Concurrency_pattern Concurrency]: controlling parallel and concurrent execution.&lt;br /&gt;
* Distribution: problems germane to distributed systems.&lt;br /&gt;
** [http://www.eventhelix.com/RealTimeMantra/PatternCatalog/protocol_stack.htm Protocol Stack]&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
[1] http://www.developer.com/design/article.php/1474561/What-Are-Design-Patterns-and-Do-I-Need-Them.htm&amp;lt;br&amp;gt;&lt;br /&gt;
[2] http://www.cs.umu.se/~jubo/ExJobbs/MK/patterns.htm&amp;lt;br&amp;gt;&lt;br /&gt;
[3] [http://reference.kfupm.edu.sa/content/r/e/relationships_between_design_patterns__148528.pdf Relationships between Design Patterns, by Walter Zimmer, Forschungszentrum Informatik, Bereich Programmstrukturen, 1995]&amp;lt;br&amp;gt;&lt;br /&gt;
[4] Peter Coad, with David North, and Mark Mayfield. Object Models: Strategies, Patterns, and Applications. Englewood Cliffs, NJ: Prentice Hall, 1995.&amp;lt;br&amp;gt;&lt;br /&gt;
[5] Wolfgang Pree. Design Patterns for Object-Oriented Software Development. Addison-Wesley, 1995.&amp;lt;br&amp;gt;&lt;br /&gt;
[6] Frank Buschman and Regine Meunier. “A System of Patterns.&amp;quot; In J. O. Coplien and D. C. Schmidt (eds.), Pattern Languages of Program Design. Reading, MA: Addison-Wesley, 1995, pp. 325-343.&amp;lt;br&amp;gt;&lt;br /&gt;
[6] [http://wwwipd.ira.uka.de/~tichy/publications/Catalogue.doc Tichy, Walter F (1998), A Catalogue of General-Purpose Software Design Patterns. University of Karlsruhe, Karlsruhe, Germany.]&amp;lt;br&amp;gt;&lt;br /&gt;
[7] [http://doi.acm.org/10.1145/361598.361623 Parnas, D. L. 1972. On the criteria to be used in decomposing systems into modules. Commun. ACM 15, 12 (Dec. 1972), 1053-1058.]&amp;lt;br&amp;gt; &lt;br /&gt;
[8] [http://www.cs.cmu.edu/afs/cs.cmu.edu/project/vit/ftp/pdf/PLoP95.pdf Some Patterns for Software Architectures, Mary Shaw, Carnegie Mellon University]&lt;/div&gt;</summary>
		<author><name>Quick Gun Murugan</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_12_Schemes_for_Pattern_Classification&amp;diff=25749</id>
		<title>CSC/ECE 517 Fall 2009/wiki2 12 Schemes for Pattern Classification</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_12_Schemes_for_Pattern_Classification&amp;diff=25749"/>
		<updated>2009-10-13T02:01:57Z</updated>

		<summary type="html">&lt;p&gt;Quick Gun Murugan: /* Zimmer's Classification */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=='''Overview'''==&lt;br /&gt;
[http://en.wikipedia.org/wiki/Design_pattern_(computer_science) Design patterns] in [http://en.wikipedia.org/wiki/Software_engineering software engineering] is a time-tested reusable solution to recurring problems in [http://en.wikipedia.org/wiki/Software_design software design]. The origin of design patterns can be owed to the work of civil engineer [http://en.wikipedia.org/wiki/Christopher_Alexander Christopher Alexander], who documented his resolution to design issues in constructing buildings and towns[1]. About a decade and a half ago, software professional began to incorporate Alexanders ideas into guides for novice developers. From then on design patterns became increasingly popular.&lt;br /&gt;
&lt;br /&gt;
=='''Schemes for Pattern Classification'''==&lt;br /&gt;
===Gang of Four's Classification===&lt;br /&gt;
Design Patterns gained popularity with the book [http://en.wikipedia.org/wiki/Design_Patterns_(book) Design Patterns: Elements of Reusable Object-Oriented Software] by [http://en.wikipedia.org/wiki/Erich_Gamma Erich Gamma], [http://en.wikipedia.org/wiki/Richard_Helm Richard Helm], [http://en.wikipedia.org/wiki/Ralph_Johnson Ralph Johnson] and [http://en.wikipedia.org/wiki/John_Vlissides John Vlissides] published in 1995. In their work they used 2 criteria to categorize 23 design pattern[2].&lt;br /&gt;
* What does the pattern do?&lt;br /&gt;
** [http://en.wikipedia.org/wiki/Structural_pattern Structural] - These patterns deal with the composition of classes and their object.&lt;br /&gt;
** [http://en.wikipedia.org/wiki/Creational_pattern Creational] - These patterns deal with object creation.&lt;br /&gt;
** [http://en.wikipedia.org/wiki/Behavioral_pattern Behavioral] - These patterns deal with the interaction between classes and object and how they delegate responsibility.&lt;br /&gt;
&lt;br /&gt;
* What is the scope of the pattern?&lt;br /&gt;
** Class - The patterns deal with the relationships between classes and their subclasses. These are more static and fixed at compile time. &lt;br /&gt;
** Object - These patterns deal with object relationship. They are more dynamic and can vary at runtime.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;4&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|+ Example of Design Patterns that fall into each Category&lt;br /&gt;
|colspan=&amp;quot;5&amp;quot; align=&amp;quot;center&amp;quot;|'''Purpose'''&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Scope'''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Creational'''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Structural'''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Behavioral'''&lt;br /&gt;
|-&lt;br /&gt;
|rowspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot;|Class &lt;br /&gt;
|rowspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Factory_method_pattern Factory Method]&lt;br /&gt;
|rowspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Adapter_pattern Adapter (class)]&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Interpreter_pattern Interpreter]&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Template_method_pattern Template Method]&lt;br /&gt;
|-&lt;br /&gt;
|rowspan=&amp;quot;9&amp;quot; align=&amp;quot;center&amp;quot;|Object&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Abstract_factory_pattern Abstract Factory]&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Adapter_pattern Adapter (object)]&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Command_pattern Command]&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Prototype_pattern Prototype]&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Composite_pattern Composite]&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Mediator_pattern Mediator]&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Builder_pattern Builder]&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Bridge_pattern Bridge]&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Iterator_pattern Iterator]&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Singleton_pattern Singleton]&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Decorator_pattern Decorator]&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Memento_pattern Memento]&lt;br /&gt;
|-&lt;br /&gt;
|rowspan=&amp;quot;5&amp;quot; align=&amp;quot;center&amp;quot;| &lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Facade_pattern Facade]&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Observer_pattern Observer]&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Flyweight_pattern Flyweight]&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/State_pattern State]&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Proxy_pattern Proxy]&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Strategy_pattern Strategy]&lt;br /&gt;
|-&lt;br /&gt;
|rowspan=&amp;quot;2&amp;quot;  align=&amp;quot;center&amp;quot;|  &lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Visitor_pattern Visitor]&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Chain-of-responsibility_pattern Chain Of Responsibility]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Zimmer's Classification===&lt;br /&gt;
Zimmer[3] classifies the relationships between the Gang of Four design patterns. Focusing on the problem and solution of each relationship, they can be classified as :&lt;br /&gt;
* X uses Y in its solution.&lt;br /&gt;
** The [http://en.wikipedia.org/wiki/Interpreter_pattern Interpreter] design pattern uses the [http://en.wikipedia.org/wiki/Composite_pattern Composite] design patter.&lt;br /&gt;
** The [http://en.wikipedia.org/wiki/Prototype_pattern Prototype] design pattern uses the [http://en.wikipedia.org/wiki/Singleton_pattern Singleton] design pattern.&lt;br /&gt;
* Variant of X uses Y in its solution.&lt;br /&gt;
** Some variant of the [http://en.wikipedia.org/wiki/Bridge_pattern Bridge] design pattern may uses the [http://en.wikipedia.org/wiki/Adapter_pattern Adapter] design pattern.&lt;br /&gt;
* X is similar to Y.&lt;br /&gt;
** The [http://en.wikipedia.org/wiki/Mediator_pattern Mediator] design pattern is similar to the [http://en.wikipedia.org/wiki/Facade_pattern Facade] design pattern.&lt;br /&gt;
&lt;br /&gt;
Using these relationships Zimmer placed design pattern in 3 layers.&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;4&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Layer'''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Design Pattern'''&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Basic design patterns and techniques.&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Singleton_pattern Singleton], [http://en.wikipedia.org/wiki/Template_method_pattern Template Method], [http://en.wikipedia.org/wiki/Mediator_pattern Mediator], [http://en.wikipedia.org/wiki/Facade_pattern Facade], [http://en.wikipedia.org/wiki/Memento_pattern Memento], [http://en.wikipedia.org/wiki/Iterator_pattern Iterator], [http://en.wikipedia.org/wiki/Flyweight_pattern Flyweight].&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Design patterns for typical software problems.&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Abstract_factory_pattern Abstract Factory], [http://en.wikipedia.org/wiki/Builder_pattern Builder], [http://en.wikipedia.org/wiki/Strategy_pattern Strategy], [http://en.wikipedia.org/wiki/Observer_pattern Observer], [http://en.wikipedia.org/wiki/Bridge_pattern Bridge], [http://en.wikipedia.org/wiki/Adapter_pattern Adapter], [http://en.wikipedia.org/wiki/Prototype_pattern Prototype], [http://en.wikipedia.org/wiki/Factory_method_pattern Factory Method], [http://en.wikipedia.org/wiki/State_pattern State], [http://en.wikipedia.org/wiki/Command_pattern Command], [http://en.wikipedia.org/wiki/Visitor_pattern Visitor], [http://en.wikipedia.org/wiki/Composite_pattern Composite], [http://en.wikipedia.org/wiki/Decorator_pattern Decorator], [http://en.wikipedia.org/wiki/Chain-of-responsibility_pattern Chain Of Responsibility], [http://en.wikipedia.org/wiki/Proxy_pattern Proxy]&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Design patterns specific to an application domain.&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Interpreter_pattern Interpreter]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Coad's Classification===&lt;br /&gt;
In 1992 Peter Coad published his first article of design patterns. According to Coad, design patterns are identified observing classes, objects and the relationships established between them[5]. In his book Object Models: Strategies, Patterns, and Applications, Peter Coad along with David North and Mark Mayfield organized patterns into various pattern families[4].&lt;br /&gt;
* '''Fundamental Pattern''': This pattern is the template that all the other patterns follow.&lt;br /&gt;
** Collection-Worker Pattern is the fundamental object model pattern.&lt;br /&gt;
* '''Transaction Patterns''': These either have transaction players or have players that commonly play with the transaction player. The transaction patterns are:&lt;br /&gt;
** Actor-Participant pattern.&lt;br /&gt;
** Participant-Transaction pattern.&lt;br /&gt;
** Place-Transaction pattern.&lt;br /&gt;
** Specific Item-Transaction pattern.&lt;br /&gt;
** Transaction-Transaction Line Item pattern.&lt;br /&gt;
** Transaction-Subsequent Transaction pattern.&lt;br /&gt;
** Transaction Line Item-Subsequent Transaction Line Item pattern.&lt;br /&gt;
** Item-Line Item pattern.&lt;br /&gt;
** Specific Item-Line Item.&lt;br /&gt;
** Item-Specific Item.&lt;br /&gt;
** Associate-Other Associate.&lt;br /&gt;
** Specific Item-Hierarchical Item.&lt;br /&gt;
* '''Aggregate Patterns''': These patterns interconnect with other patterns. The aggregate patterns are:&lt;br /&gt;
** Container-Content pattern.&lt;br /&gt;
** Container-Container Line Item pattern.&lt;br /&gt;
** Group-Member.&lt;br /&gt;
** Assembly-Part pattern.&lt;br /&gt;
** Compound Part-Part pattern.&lt;br /&gt;
** Packet-Packet Component.&lt;br /&gt;
* '''Plan Patterns''': The plan patterns are:&lt;br /&gt;
** Plan-Step pattern.&lt;br /&gt;
** Plan-Plan Execution pattern.&lt;br /&gt;
** Plan Execution-Step Execution pattern.&lt;br /&gt;
** Step-Step Execution pattern.&lt;br /&gt;
** Plan-Plan Version pattern.&lt;br /&gt;
* '''Interaction Patterns''': These patterns, as the name suggests are patterns of interaction. The interaction patterns are:&lt;br /&gt;
** Peer-Peer pattern.&lt;br /&gt;
** Proxy-Specific Item pattern.&lt;br /&gt;
** Publisher-Subscriber pattern.&lt;br /&gt;
** Sender-Pass Through-Receiver pattern.&lt;br /&gt;
** Sender-Lookup-Receiver pattern.&lt;br /&gt;
** Caller-Dispatcher-Caller Back pattern.&lt;br /&gt;
** Gatekeeper-Request-Resource pattern.&lt;br /&gt;
&lt;br /&gt;
===Pree's Classification===&lt;br /&gt;
In his book Design Patterns for Object-Oriented Software Development, Addison-Wesley, 1995, Wolfgang Pree categorized Coad's patterns into[5]:&lt;br /&gt;
* '''Basic inheritance and interaction patterns:''' These patterns encompass primarily the basic modelling capabilities offered by object oriented programming languages.&lt;br /&gt;
* '''Patterns for structuring object-oriented software systems: '''Most of Coad's patterns belong to this category.  &lt;br /&gt;
* '''Patterns related to the [http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller MVC] framework: ''' Those of Coad's patterns that stress the framework aspect are derivatives of the Model/View/Controller framework.&lt;br /&gt;
Ignoring the fine-grained[5] pattern classification proposed by Gamma's catalog, Pree applied the following classification of the listed patterns.&lt;br /&gt;
* '''Patterns relying on abstract coupling: '''Most of the patterns in the catalog are based on abstractly coupled classes. [http://en.wikipedia.org/wiki/Factory_method_pattern| Factory Method pattern] and [http://en.wikipedia.org/wiki/Observer_pattern| Observer pattern] for example.  &lt;br /&gt;
* '''Patterns based on recursive structures: ''' [http://en.wikipedia.org/wiki/Composite_pattern| Composite] pattern, [http://en.wikipedia.org/wiki/Chain-of-responsibility_pattern| Chain Of Responsibility] pattern, [http://en.wikipedia.org/wiki/Decorator_pattern| Decorator] pattern are all based on recursive structures. &lt;br /&gt;
* '''Other Catalog patterns''': Pree summarized the rest of the patterns as follows:&lt;br /&gt;
** An [http://en.wikipedia.org/wiki/Abstract_factory_pattern| Abstract Factory] pattern is close to the [http://en.wikipedia.org/wiki/Factory_method_pattern| Factory Method] pattern&lt;br /&gt;
** [http://en.wikipedia.org/wiki/Flyweight_pattern| Flyweight] pattern represents a pattern similar to Coad's Item-Description pattern.&lt;br /&gt;
** [http://en.wikipedia.org/wiki/Singleton_pattern| Singleton] pattern is a coding patterns that limits the number of creatable instances of a class to one.&lt;br /&gt;
** [http://en.wikipedia.org/wiki/Template_method_pattern| Template Method] pattern forms the basis of all patterns dealing with with abstract classes.&lt;br /&gt;
&lt;br /&gt;
==='''Buschman et. al's Classification'''===&lt;br /&gt;
Frank Buschman and Regine Meunier identified the following categories[6]:&lt;br /&gt;
* '''Granularity: ''' Three levels of granularity can be specified. &lt;br /&gt;
** [http://en.wikipedia.org/wiki/Architectural_pattern_(computer_science) Architectural Framework]: Every software architecture is built according to an overall structuring principles described by architectural frameworks. Example: The [http://en.wikipedia.org/wiki/Model-view-controller Model-View-Controller] framework.&lt;br /&gt;
** [http://en.wikipedia.org/wiki/Design_pattern_(computer_science) Design Patterns]: These can be described as the smaller architectural units.&lt;br /&gt;
** [http://en.wikipedia.org/wiki/Programming_idiom Idioms]: Idioms represent the lowest level of a pattern and are closely related to a particular programming language. Example: [http://en.wikibooks.org/wiki/More_C%2B%2B_Idioms/Counted_Body The Counted Body] Idiom.&lt;br /&gt;
&lt;br /&gt;
*'''Functionality: '''Each pattern serves as a means to implement a particular functionality. The following categories of functionality can be distinguished:&lt;br /&gt;
** Creation of objects: Patterns may specify how to create particular instances of complex recursive or aggregate object structures. Example: [http://en.wikipedia.org/wiki/Singleton_pattern Singleton pattern]&lt;br /&gt;
** Guiding Communication between objects: Patterns may describe how to organize communication between a set of collaborating objects.&lt;br /&gt;
** Access to objects: Patterns may describe how to access the services and state of shared or remote objects in a safe way. Example: [http://en.wikipedia.org/wiki/Proxy_pattern Proxy pattern]&lt;br /&gt;
** Organizing the computation of the complex tasks: Patterns may specify how to distribute responsibilities among cooperating objects in order to solve a more complex task. Example: [http://en.wikipedia.org/wiki/Command_pattern Command pattern]&lt;br /&gt;
&lt;br /&gt;
*'''Structural Principles: ''' To achieve their functionality, patterns rely on certain architectural principles. These principles can be categorized as:&lt;br /&gt;
** Abstraction: A pattern provides an abstract view of a particular entity or task in a software system. Example: [http://en.wikipedia.org/wiki/Facade_pattern Facade pattern]&lt;br /&gt;
** Encapsulation: A pattern encapsulates details of a particular object, component, or service to remove dependencies on it from its clients or to protect these details from access. Example: [http://en.wikipedia.org/wiki/Mediator_pattern Mediator pattern]&lt;br /&gt;
** Separation of concerns: A pattern factors out specific responsibilities into separate objects or components.&lt;br /&gt;
** Coupling and Cohesion: A patterns removes dependencies between strongly coupled objects. Example: [http://en.wikipedia.org/wiki/Bridge_pattern Bridge pattern]&lt;br /&gt;
&lt;br /&gt;
This classification scheme is not intended as a means of picking out the right pattern, but merely a guide for designers helping them search for the pattern appropriate for a particular situation.&lt;br /&gt;
&lt;br /&gt;
===Tichy's Classification===&lt;br /&gt;
Walter Tichy classified several design patterns based on the kind of problems they solved. He grouped the problems into the following high-level categories[6]:&lt;br /&gt;
* Decoupling: dividing a software system into in-dependent parts in such a way that the parts can be built, changed, replaced, and reused independently. Decoupling patterns can be further classified into:&lt;br /&gt;
** Modules([http://en.wikipedia.org/wiki/Encapsulation_(computer_science)#Encapsulation Encapsulation]/[http://en.wikipedia.org/wiki/Information_hiding Information Hiding])[7]: Hide data structure and operations that are most likely to change, thus protecting other parts of the system from the effects of those changes. Examples for support of modules are &lt;br /&gt;
*** [http://en.wikipedia.org/wiki/Modula Modula's] modules.&lt;br /&gt;
*** [http://en.wikipedia.org/wiki/C_(programming_language) C's] header files.&lt;br /&gt;
***[http://en.wikipedia.org/wiki/Ada_(programming_language) Ada's] packages.&lt;br /&gt;
** Abstract Data Type[ADT]: Hide data structure and access algorithms behind a change-insensitive interface. The purpose of ADT is similar to that of Module, but an ADT is typically smaller, containing a single data type. Examples:&lt;br /&gt;
*** Repository pattern[8].&lt;br /&gt;
*** [http://en.wikipedia.org/wiki/Iterator_pattern Iterator pattern].&lt;br /&gt;
** Layers: The purpose of a layer is to provides an interface and an implementation of this interface. Example:&lt;br /&gt;
*** [http://en.wikipedia.org/wiki/Facade_pattern Facade pattern].&lt;br /&gt;
*** [http://en.wikipedia.org/wiki/Bridge_pattern Bridge pattern].&lt;br /&gt;
*** [http://en.wikipedia.org/wiki/Adapter_pattern Adapter pattern].&lt;br /&gt;
*** [http://en.wikipedia.org/wiki/Proxy_pattern Proxy pattern].&lt;br /&gt;
** Pipeline: Pass data through a sequence of transformations (filters) connected by channels (pipes).&lt;br /&gt;
** Event Notification: Let independent parts interact by an-nouncing and responding to events (loose coupling).&lt;br /&gt;
** Framework: Provide a complete or nearly complete application layer that can be extended by sub-classing.&lt;br /&gt;
* Variant Management: treating different objects uniformly by factoring out their commonality.&lt;br /&gt;
** Superclass: Provide uniform treatment of variant classes by placing common interface into a super-class; variants are subclasses. Example:&lt;br /&gt;
*** [http://en.wikipedia.org/wiki/Strategy_pattern Strategy pattern].&lt;br /&gt;
*** [http://en.wikipedia.org/wiki/Composite_pattern Composite pattern].&lt;br /&gt;
** [http://en.wikipedia.org/wiki/Visitor_pattern Visitor]: Add new variations of operations to stable class hierarchy.&lt;br /&gt;
** [http://en.wikipedia.org/wiki/Template_method_pattern Template Method]: Specify algorithm skeleton using primitives; vary primitives in subclasses or by delegation.&lt;br /&gt;
** [http://en.wikipedia.org/wiki/Abstract_factory_pattern Abstract Factory]: Bundle the constructors of a family of related objects into one object.&lt;br /&gt;
* State Handling: generic manipulation of object state.&lt;br /&gt;
** [http://en.wikipedia.org/wiki/Singleton_pattern Singleton]: Guarantee single instance of a class.&lt;br /&gt;
** [http://en.wikipedia.org/wiki/Prototype_pattern Prototype]: Create new objects by cloning an existing one (the prototype). &lt;br /&gt;
** [http://en.wikipedia.org/wiki/Flyweight_pattern Flyweight]: Save space by sharing common state among objects.&lt;br /&gt;
** [http://en.wikipedia.org/wiki/Memento_pattern Memento]: save and restore an object’s internal state. &lt;br /&gt;
* Control: control of execution and method selection.&lt;br /&gt;
** [http://en.wikipedia.org/wiki/Blackboard_system Blackboard]: Dynamically decide which transformers (knowledge sources) to apply to a shared data structure.&lt;br /&gt;
** [http://en.wikipedia.org/wiki/Command_pattern Command]: Separate composition of a request from the time it is executed.&lt;br /&gt;
** [Chain of Responsibility]: Pass a request down a chain of objects until an object handles it.&lt;br /&gt;
* Virtual Machines: simulated processors.&lt;br /&gt;
** Interpreter: Execute a program written in the inter-preter’s language.&lt;br /&gt;
** Rule-based Interpreter: Execute a rule set using a fact base.&lt;br /&gt;
* Convenience Patterns: simplified coding.&lt;br /&gt;
** Convenience Method: Simplify method invocations by suppressing parameters whose values are the same for many calls.&lt;br /&gt;
** Convenience Class: Simplify method invocations by storing parameter values in the class.&lt;br /&gt;
** Default Class: Provide a default implementation of a class that normally must be reimplemented by the client. Subclasses override only the methods for which the defaults are inappropriate.&lt;br /&gt;
** [http://en.wikipedia.org/wiki/Null_Object_pattern Null object]: Eliminate frequent tests for null references by replacing null references with a reference to the null object. &lt;br /&gt;
* Compound Patterns: patterns composed from others, with the original patterns visible.&lt;br /&gt;
** [http://en.wikipedia.org/wiki/Model-view-controller Model-View-Controller]: Provide multiple, dynamic views on shared data and dynamically change responses to user input. &lt;br /&gt;
** Bureaucracy: Organize objects in a hierarchical structure such that it maintains its inner consistency by itself. &lt;br /&gt;
** Active Bridge: Connect an application to event-driven resouces in a portable way.&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Concurrency_pattern Concurrency]: controlling parallel and concurrent execution.&lt;br /&gt;
* Distribution: problems germane to distributed systems.&lt;br /&gt;
** [http://www.eventhelix.com/RealTimeMantra/PatternCatalog/protocol_stack.htm Protocol Stack]&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
[1] http://www.developer.com/design/article.php/1474561/What-Are-Design-Patterns-and-Do-I-Need-Them.htm&amp;lt;br&amp;gt;&lt;br /&gt;
[2] http://www.cs.umu.se/~jubo/ExJobbs/MK/patterns.htm&amp;lt;br&amp;gt;&lt;br /&gt;
[3] [http://reference.kfupm.edu.sa/content/r/e/relationships_between_design_patterns__148528.pdf Relationships between Design Patterns, by Walter Zimmer, Forschungszentrum Informatik, Bereich Programmstrukturen, 1995]&amp;lt;br&amp;gt;&lt;br /&gt;
[4] Peter Coad, with David North, and Mark Mayfield. Object Models: Strategies, Patterns, and Applications. Englewood Cliffs, NJ: Prentice Hall, 1995.&amp;lt;br&amp;gt;&lt;br /&gt;
[5] Wolfgang Pree. Design Patterns for Object-Oriented Software Development. Addison-Wesley, 1995.&amp;lt;br&amp;gt;&lt;br /&gt;
[6] Frank Buschman and Regine Meunier. “A System of Patterns.&amp;quot; In J. O. Coplien and D. C. Schmidt (eds.), Pattern Languages of Program Design. Reading, MA: Addison-Wesley, 1995, pp. 325-343.&amp;lt;br&amp;gt;&lt;br /&gt;
[6] [http://wwwipd.ira.uka.de/~tichy/publications/Catalogue.doc Tichy, Walter F (1998), A Catalogue of General-Purpose Software Design Patterns. University of Karlsruhe, Karlsruhe, Germany.]&amp;lt;br&amp;gt;&lt;br /&gt;
[7] [http://doi.acm.org/10.1145/361598.361623 Parnas, D. L. 1972. On the criteria to be used in decomposing systems into modules. Commun. ACM 15, 12 (Dec. 1972), 1053-1058.]&amp;lt;br&amp;gt; &lt;br /&gt;
[8] [http://www.cs.cmu.edu/afs/cs.cmu.edu/project/vit/ftp/pdf/PLoP95.pdf Some Patterns for Software Architectures, Mary Shaw, Carnegie Mellon University]&lt;/div&gt;</summary>
		<author><name>Quick Gun Murugan</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_12_Schemes_for_Pattern_Classification&amp;diff=25748</id>
		<title>CSC/ECE 517 Fall 2009/wiki2 12 Schemes for Pattern Classification</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_12_Schemes_for_Pattern_Classification&amp;diff=25748"/>
		<updated>2009-10-13T02:00:36Z</updated>

		<summary type="html">&lt;p&gt;Quick Gun Murugan: /* Tichy's Classification */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=='''Overview'''==&lt;br /&gt;
[http://en.wikipedia.org/wiki/Design_pattern_(computer_science) Design patterns] in [http://en.wikipedia.org/wiki/Software_engineering software engineering] is a time-tested reusable solution to recurring problems in [http://en.wikipedia.org/wiki/Software_design software design]. The origin of design patterns can be owed to the work of civil engineer [http://en.wikipedia.org/wiki/Christopher_Alexander Christopher Alexander], who documented his resolution to design issues in constructing buildings and towns[1]. About a decade and a half ago, software professional began to incorporate Alexanders ideas into guides for novice developers. From then on design patterns became increasingly popular.&lt;br /&gt;
&lt;br /&gt;
=='''Schemes for Pattern Classification'''==&lt;br /&gt;
===Gang of Four's Classification===&lt;br /&gt;
Design Patterns gained popularity with the book [http://en.wikipedia.org/wiki/Design_Patterns_(book) Design Patterns: Elements of Reusable Object-Oriented Software] by [http://en.wikipedia.org/wiki/Erich_Gamma Erich Gamma], [http://en.wikipedia.org/wiki/Richard_Helm Richard Helm], [http://en.wikipedia.org/wiki/Ralph_Johnson Ralph Johnson] and [http://en.wikipedia.org/wiki/John_Vlissides John Vlissides] published in 1995. In their work they used 2 criteria to categorize 23 design pattern[2].&lt;br /&gt;
* What does the pattern do?&lt;br /&gt;
** [http://en.wikipedia.org/wiki/Structural_pattern Structural] - These patterns deal with the composition of classes and their object.&lt;br /&gt;
** [http://en.wikipedia.org/wiki/Creational_pattern Creational] - These patterns deal with object creation.&lt;br /&gt;
** [http://en.wikipedia.org/wiki/Behavioral_pattern Behavioral] - These patterns deal with the interaction between classes and object and how they delegate responsibility.&lt;br /&gt;
&lt;br /&gt;
* What is the scope of the pattern?&lt;br /&gt;
** Class - The patterns deal with the relationships between classes and their subclasses. These are more static and fixed at compile time. &lt;br /&gt;
** Object - These patterns deal with object relationship. They are more dynamic and can vary at runtime.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;4&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|+ Example of Design Patterns that fall into each Category&lt;br /&gt;
|colspan=&amp;quot;5&amp;quot; align=&amp;quot;center&amp;quot;|'''Purpose'''&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Scope'''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Creational'''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Structural'''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Behavioral'''&lt;br /&gt;
|-&lt;br /&gt;
|rowspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot;|Class &lt;br /&gt;
|rowspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Factory_method_pattern Factory Method]&lt;br /&gt;
|rowspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Adapter_pattern Adapter (class)]&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Interpreter_pattern Interpreter]&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Template_method_pattern Template Method]&lt;br /&gt;
|-&lt;br /&gt;
|rowspan=&amp;quot;9&amp;quot; align=&amp;quot;center&amp;quot;|Object&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Abstract_factory_pattern Abstract Factory]&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Adapter_pattern Adapter (object)]&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Command_pattern Command]&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Prototype_pattern Prototype]&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Composite_pattern Composite]&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Mediator_pattern Mediator]&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Builder_pattern Builder]&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Bridge_pattern Bridge]&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Iterator_pattern Iterator]&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Singleton_pattern Singleton]&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Decorator_pattern Decorator]&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Memento_pattern Memento]&lt;br /&gt;
|-&lt;br /&gt;
|rowspan=&amp;quot;5&amp;quot; align=&amp;quot;center&amp;quot;| &lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Facade_pattern Facade]&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Observer_pattern Observer]&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Flyweight_pattern Flyweight]&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/State_pattern State]&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Proxy_pattern Proxy]&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Strategy_pattern Strategy]&lt;br /&gt;
|-&lt;br /&gt;
|rowspan=&amp;quot;2&amp;quot;  align=&amp;quot;center&amp;quot;|  &lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Visitor_pattern Visitor]&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Chain-of-responsibility_pattern Chain Of Responsibility]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Zimmer's Classification===&lt;br /&gt;
Zimmer[3] classifies the relationships between the Gang of Four design patterns. Focusing on the problem and solution of each relationship, they can be classified as :&lt;br /&gt;
* X uses Y in its solution.&lt;br /&gt;
** The [http://en.wikipedia.org/wiki/Interpreter_pattern| Interpreter] design pattern uses the [http://en.wikipedia.org/wiki/Composite_pattern| Composite] design patter.&lt;br /&gt;
** The [http://en.wikipedia.org/wiki/Prototype_pattern| Prototype] design pattern uses the [http://en.wikipedia.org/wiki/Singleton_pattern| Singleton] design pattern.&lt;br /&gt;
* Variant of X uses Y in its solution.&lt;br /&gt;
** Some variant of the [http://en.wikipedia.org/wiki/Bridge_pattern| Bridge] design pattern may uses the [http://en.wikipedia.org/wiki/Adapter_pattern| Adapter] design pattern.&lt;br /&gt;
* X is similar to Y.&lt;br /&gt;
** The [http://en.wikipedia.org/wiki/Mediator_pattern| Mediator] design pattern is similar to the [http://en.wikipedia.org/wiki/Facade_pattern| Facade] design pattern.&lt;br /&gt;
&lt;br /&gt;
Using these relationships Zimmer placed design pattern in 3 layers.&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;4&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Layer'''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Design Pattern'''&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Basic design patterns and techniques.&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Singleton_pattern| Singleton], [http://en.wikipedia.org/wiki/Template_method_pattern| Template Method], [http://en.wikipedia.org/wiki/Mediator_pattern| Mediator], [http://en.wikipedia.org/wiki/Facade_pattern| Facade], [http://en.wikipedia.org/wiki/Memento_pattern| Memento], [http://en.wikipedia.org/wiki/Iterator_pattern| Iterator], [http://en.wikipedia.org/wiki/Flyweight_pattern| Flyweight].&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Design patterns for typical software problems.&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Abstract_factory_pattern| Abstract Factory], [http://en.wikipedia.org/wiki/Builder_pattern| Builder], [http://en.wikipedia.org/wiki/Strategy_pattern| Strategy], [http://en.wikipedia.org/wiki/Observer_pattern| Observer], [http://en.wikipedia.org/wiki/Bridge_pattern| Bridge], [http://en.wikipedia.org/wiki/Adapter_pattern| Adapter], [http://en.wikipedia.org/wiki/Prototype_pattern| Prototype], [http://en.wikipedia.org/wiki/Factory_method_pattern| Factory Method], [http://en.wikipedia.org/wiki/State_pattern| State], [http://en.wikipedia.org/wiki/Command_pattern| Command], [http://en.wikipedia.org/wiki/Visitor_pattern| Visitor], [http://en.wikipedia.org/wiki/Composite_pattern| Composite], [http://en.wikipedia.org/wiki/Decorator_pattern| Decorator], [http://en.wikipedia.org/wiki/Chain-of-responsibility_pattern| Chain Of Responsibility], [http://en.wikipedia.org/wiki/Proxy_pattern| Proxy]&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Design patterns specific to an application domain.&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Interpreter_pattern| Interpreter]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Coad's Classification===&lt;br /&gt;
In 1992 Peter Coad published his first article of design patterns. According to Coad, design patterns are identified observing classes, objects and the relationships established between them[5]. In his book Object Models: Strategies, Patterns, and Applications, Peter Coad along with David North and Mark Mayfield organized patterns into various pattern families[4].&lt;br /&gt;
* '''Fundamental Pattern''': This pattern is the template that all the other patterns follow.&lt;br /&gt;
** Collection-Worker Pattern is the fundamental object model pattern.&lt;br /&gt;
* '''Transaction Patterns''': These either have transaction players or have players that commonly play with the transaction player. The transaction patterns are:&lt;br /&gt;
** Actor-Participant pattern.&lt;br /&gt;
** Participant-Transaction pattern.&lt;br /&gt;
** Place-Transaction pattern.&lt;br /&gt;
** Specific Item-Transaction pattern.&lt;br /&gt;
** Transaction-Transaction Line Item pattern.&lt;br /&gt;
** Transaction-Subsequent Transaction pattern.&lt;br /&gt;
** Transaction Line Item-Subsequent Transaction Line Item pattern.&lt;br /&gt;
** Item-Line Item pattern.&lt;br /&gt;
** Specific Item-Line Item.&lt;br /&gt;
** Item-Specific Item.&lt;br /&gt;
** Associate-Other Associate.&lt;br /&gt;
** Specific Item-Hierarchical Item.&lt;br /&gt;
* '''Aggregate Patterns''': These patterns interconnect with other patterns. The aggregate patterns are:&lt;br /&gt;
** Container-Content pattern.&lt;br /&gt;
** Container-Container Line Item pattern.&lt;br /&gt;
** Group-Member.&lt;br /&gt;
** Assembly-Part pattern.&lt;br /&gt;
** Compound Part-Part pattern.&lt;br /&gt;
** Packet-Packet Component.&lt;br /&gt;
* '''Plan Patterns''': The plan patterns are:&lt;br /&gt;
** Plan-Step pattern.&lt;br /&gt;
** Plan-Plan Execution pattern.&lt;br /&gt;
** Plan Execution-Step Execution pattern.&lt;br /&gt;
** Step-Step Execution pattern.&lt;br /&gt;
** Plan-Plan Version pattern.&lt;br /&gt;
* '''Interaction Patterns''': These patterns, as the name suggests are patterns of interaction. The interaction patterns are:&lt;br /&gt;
** Peer-Peer pattern.&lt;br /&gt;
** Proxy-Specific Item pattern.&lt;br /&gt;
** Publisher-Subscriber pattern.&lt;br /&gt;
** Sender-Pass Through-Receiver pattern.&lt;br /&gt;
** Sender-Lookup-Receiver pattern.&lt;br /&gt;
** Caller-Dispatcher-Caller Back pattern.&lt;br /&gt;
** Gatekeeper-Request-Resource pattern.&lt;br /&gt;
&lt;br /&gt;
===Pree's Classification===&lt;br /&gt;
In his book Design Patterns for Object-Oriented Software Development, Addison-Wesley, 1995, Wolfgang Pree categorized Coad's patterns into[5]:&lt;br /&gt;
* '''Basic inheritance and interaction patterns:''' These patterns encompass primarily the basic modelling capabilities offered by object oriented programming languages.&lt;br /&gt;
* '''Patterns for structuring object-oriented software systems: '''Most of Coad's patterns belong to this category.  &lt;br /&gt;
* '''Patterns related to the [http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller MVC] framework: ''' Those of Coad's patterns that stress the framework aspect are derivatives of the Model/View/Controller framework.&lt;br /&gt;
Ignoring the fine-grained[5] pattern classification proposed by Gamma's catalog, Pree applied the following classification of the listed patterns.&lt;br /&gt;
* '''Patterns relying on abstract coupling: '''Most of the patterns in the catalog are based on abstractly coupled classes. [http://en.wikipedia.org/wiki/Factory_method_pattern| Factory Method pattern] and [http://en.wikipedia.org/wiki/Observer_pattern| Observer pattern] for example.  &lt;br /&gt;
* '''Patterns based on recursive structures: ''' [http://en.wikipedia.org/wiki/Composite_pattern| Composite] pattern, [http://en.wikipedia.org/wiki/Chain-of-responsibility_pattern| Chain Of Responsibility] pattern, [http://en.wikipedia.org/wiki/Decorator_pattern| Decorator] pattern are all based on recursive structures. &lt;br /&gt;
* '''Other Catalog patterns''': Pree summarized the rest of the patterns as follows:&lt;br /&gt;
** An [http://en.wikipedia.org/wiki/Abstract_factory_pattern| Abstract Factory] pattern is close to the [http://en.wikipedia.org/wiki/Factory_method_pattern| Factory Method] pattern&lt;br /&gt;
** [http://en.wikipedia.org/wiki/Flyweight_pattern| Flyweight] pattern represents a pattern similar to Coad's Item-Description pattern.&lt;br /&gt;
** [http://en.wikipedia.org/wiki/Singleton_pattern| Singleton] pattern is a coding patterns that limits the number of creatable instances of a class to one.&lt;br /&gt;
** [http://en.wikipedia.org/wiki/Template_method_pattern| Template Method] pattern forms the basis of all patterns dealing with with abstract classes.&lt;br /&gt;
&lt;br /&gt;
==='''Buschman et. al's Classification'''===&lt;br /&gt;
Frank Buschman and Regine Meunier identified the following categories[6]:&lt;br /&gt;
* '''Granularity: ''' Three levels of granularity can be specified. &lt;br /&gt;
** [http://en.wikipedia.org/wiki/Architectural_pattern_(computer_science) Architectural Framework]: Every software architecture is built according to an overall structuring principles described by architectural frameworks. Example: The [http://en.wikipedia.org/wiki/Model-view-controller Model-View-Controller] framework.&lt;br /&gt;
** [http://en.wikipedia.org/wiki/Design_pattern_(computer_science) Design Patterns]: These can be described as the smaller architectural units.&lt;br /&gt;
** [http://en.wikipedia.org/wiki/Programming_idiom Idioms]: Idioms represent the lowest level of a pattern and are closely related to a particular programming language. Example: [http://en.wikibooks.org/wiki/More_C%2B%2B_Idioms/Counted_Body The Counted Body] Idiom.&lt;br /&gt;
&lt;br /&gt;
*'''Functionality: '''Each pattern serves as a means to implement a particular functionality. The following categories of functionality can be distinguished:&lt;br /&gt;
** Creation of objects: Patterns may specify how to create particular instances of complex recursive or aggregate object structures. Example: [http://en.wikipedia.org/wiki/Singleton_pattern Singleton pattern]&lt;br /&gt;
** Guiding Communication between objects: Patterns may describe how to organize communication between a set of collaborating objects.&lt;br /&gt;
** Access to objects: Patterns may describe how to access the services and state of shared or remote objects in a safe way. Example: [http://en.wikipedia.org/wiki/Proxy_pattern Proxy pattern]&lt;br /&gt;
** Organizing the computation of the complex tasks: Patterns may specify how to distribute responsibilities among cooperating objects in order to solve a more complex task. Example: [http://en.wikipedia.org/wiki/Command_pattern Command pattern]&lt;br /&gt;
&lt;br /&gt;
*'''Structural Principles: ''' To achieve their functionality, patterns rely on certain architectural principles. These principles can be categorized as:&lt;br /&gt;
** Abstraction: A pattern provides an abstract view of a particular entity or task in a software system. Example: [http://en.wikipedia.org/wiki/Facade_pattern Facade pattern]&lt;br /&gt;
** Encapsulation: A pattern encapsulates details of a particular object, component, or service to remove dependencies on it from its clients or to protect these details from access. Example: [http://en.wikipedia.org/wiki/Mediator_pattern Mediator pattern]&lt;br /&gt;
** Separation of concerns: A pattern factors out specific responsibilities into separate objects or components.&lt;br /&gt;
** Coupling and Cohesion: A patterns removes dependencies between strongly coupled objects. Example: [http://en.wikipedia.org/wiki/Bridge_pattern Bridge pattern]&lt;br /&gt;
&lt;br /&gt;
This classification scheme is not intended as a means of picking out the right pattern, but merely a guide for designers helping them search for the pattern appropriate for a particular situation.&lt;br /&gt;
&lt;br /&gt;
===Tichy's Classification===&lt;br /&gt;
Walter Tichy classified several design patterns based on the kind of problems they solved. He grouped the problems into the following high-level categories[6]:&lt;br /&gt;
* Decoupling: dividing a software system into in-dependent parts in such a way that the parts can be built, changed, replaced, and reused independently. Decoupling patterns can be further classified into:&lt;br /&gt;
** Modules([http://en.wikipedia.org/wiki/Encapsulation_(computer_science)#Encapsulation Encapsulation]/[http://en.wikipedia.org/wiki/Information_hiding Information Hiding])[7]: Hide data structure and operations that are most likely to change, thus protecting other parts of the system from the effects of those changes. Examples for support of modules are &lt;br /&gt;
*** [http://en.wikipedia.org/wiki/Modula Modula's] modules.&lt;br /&gt;
*** [http://en.wikipedia.org/wiki/C_(programming_language) C's] header files.&lt;br /&gt;
***[http://en.wikipedia.org/wiki/Ada_(programming_language) Ada's] packages.&lt;br /&gt;
** Abstract Data Type[ADT]: Hide data structure and access algorithms behind a change-insensitive interface. The purpose of ADT is similar to that of Module, but an ADT is typically smaller, containing a single data type. Examples:&lt;br /&gt;
*** Repository pattern[8].&lt;br /&gt;
*** [http://en.wikipedia.org/wiki/Iterator_pattern Iterator pattern].&lt;br /&gt;
** Layers: The purpose of a layer is to provides an interface and an implementation of this interface. Example:&lt;br /&gt;
*** [http://en.wikipedia.org/wiki/Facade_pattern Facade pattern].&lt;br /&gt;
*** [http://en.wikipedia.org/wiki/Bridge_pattern Bridge pattern].&lt;br /&gt;
*** [http://en.wikipedia.org/wiki/Adapter_pattern Adapter pattern].&lt;br /&gt;
*** [http://en.wikipedia.org/wiki/Proxy_pattern Proxy pattern].&lt;br /&gt;
** Pipeline: Pass data through a sequence of transformations (filters) connected by channels (pipes).&lt;br /&gt;
** Event Notification: Let independent parts interact by an-nouncing and responding to events (loose coupling).&lt;br /&gt;
** Framework: Provide a complete or nearly complete application layer that can be extended by sub-classing.&lt;br /&gt;
* Variant Management: treating different objects uniformly by factoring out their commonality.&lt;br /&gt;
** Superclass: Provide uniform treatment of variant classes by placing common interface into a super-class; variants are subclasses. Example:&lt;br /&gt;
*** [http://en.wikipedia.org/wiki/Strategy_pattern Strategy pattern].&lt;br /&gt;
*** [http://en.wikipedia.org/wiki/Composite_pattern Composite pattern].&lt;br /&gt;
** [http://en.wikipedia.org/wiki/Visitor_pattern Visitor]: Add new variations of operations to stable class hierarchy.&lt;br /&gt;
** [http://en.wikipedia.org/wiki/Template_method_pattern Template Method]: Specify algorithm skeleton using primitives; vary primitives in subclasses or by delegation.&lt;br /&gt;
** [http://en.wikipedia.org/wiki/Abstract_factory_pattern Abstract Factory]: Bundle the constructors of a family of related objects into one object.&lt;br /&gt;
* State Handling: generic manipulation of object state.&lt;br /&gt;
** [http://en.wikipedia.org/wiki/Singleton_pattern Singleton]: Guarantee single instance of a class.&lt;br /&gt;
** [http://en.wikipedia.org/wiki/Prototype_pattern Prototype]: Create new objects by cloning an existing one (the prototype). &lt;br /&gt;
** [http://en.wikipedia.org/wiki/Flyweight_pattern Flyweight]: Save space by sharing common state among objects.&lt;br /&gt;
** [http://en.wikipedia.org/wiki/Memento_pattern Memento]: save and restore an object’s internal state. &lt;br /&gt;
* Control: control of execution and method selection.&lt;br /&gt;
** [http://en.wikipedia.org/wiki/Blackboard_system Blackboard]: Dynamically decide which transformers (knowledge sources) to apply to a shared data structure.&lt;br /&gt;
** [http://en.wikipedia.org/wiki/Command_pattern Command]: Separate composition of a request from the time it is executed.&lt;br /&gt;
** [Chain of Responsibility]: Pass a request down a chain of objects until an object handles it.&lt;br /&gt;
* Virtual Machines: simulated processors.&lt;br /&gt;
** Interpreter: Execute a program written in the inter-preter’s language.&lt;br /&gt;
** Rule-based Interpreter: Execute a rule set using a fact base.&lt;br /&gt;
* Convenience Patterns: simplified coding.&lt;br /&gt;
** Convenience Method: Simplify method invocations by suppressing parameters whose values are the same for many calls.&lt;br /&gt;
** Convenience Class: Simplify method invocations by storing parameter values in the class.&lt;br /&gt;
** Default Class: Provide a default implementation of a class that normally must be reimplemented by the client. Subclasses override only the methods for which the defaults are inappropriate.&lt;br /&gt;
** [http://en.wikipedia.org/wiki/Null_Object_pattern Null object]: Eliminate frequent tests for null references by replacing null references with a reference to the null object. &lt;br /&gt;
* Compound Patterns: patterns composed from others, with the original patterns visible.&lt;br /&gt;
** [http://en.wikipedia.org/wiki/Model-view-controller Model-View-Controller]: Provide multiple, dynamic views on shared data and dynamically change responses to user input. &lt;br /&gt;
** Bureaucracy: Organize objects in a hierarchical structure such that it maintains its inner consistency by itself. &lt;br /&gt;
** Active Bridge: Connect an application to event-driven resouces in a portable way.&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Concurrency_pattern Concurrency]: controlling parallel and concurrent execution.&lt;br /&gt;
* Distribution: problems germane to distributed systems.&lt;br /&gt;
** [http://www.eventhelix.com/RealTimeMantra/PatternCatalog/protocol_stack.htm Protocol Stack]&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
[1] http://www.developer.com/design/article.php/1474561/What-Are-Design-Patterns-and-Do-I-Need-Them.htm&amp;lt;br&amp;gt;&lt;br /&gt;
[2] http://www.cs.umu.se/~jubo/ExJobbs/MK/patterns.htm&amp;lt;br&amp;gt;&lt;br /&gt;
[3] [http://reference.kfupm.edu.sa/content/r/e/relationships_between_design_patterns__148528.pdf Relationships between Design Patterns, by Walter Zimmer, Forschungszentrum Informatik, Bereich Programmstrukturen, 1995]&amp;lt;br&amp;gt;&lt;br /&gt;
[4] Peter Coad, with David North, and Mark Mayfield. Object Models: Strategies, Patterns, and Applications. Englewood Cliffs, NJ: Prentice Hall, 1995.&amp;lt;br&amp;gt;&lt;br /&gt;
[5] Wolfgang Pree. Design Patterns for Object-Oriented Software Development. Addison-Wesley, 1995.&amp;lt;br&amp;gt;&lt;br /&gt;
[6] Frank Buschman and Regine Meunier. “A System of Patterns.&amp;quot; In J. O. Coplien and D. C. Schmidt (eds.), Pattern Languages of Program Design. Reading, MA: Addison-Wesley, 1995, pp. 325-343.&amp;lt;br&amp;gt;&lt;br /&gt;
[6] [http://wwwipd.ira.uka.de/~tichy/publications/Catalogue.doc Tichy, Walter F (1998), A Catalogue of General-Purpose Software Design Patterns. University of Karlsruhe, Karlsruhe, Germany.]&amp;lt;br&amp;gt;&lt;br /&gt;
[7] [http://doi.acm.org/10.1145/361598.361623 Parnas, D. L. 1972. On the criteria to be used in decomposing systems into modules. Commun. ACM 15, 12 (Dec. 1972), 1053-1058.]&amp;lt;br&amp;gt; &lt;br /&gt;
[8] [http://www.cs.cmu.edu/afs/cs.cmu.edu/project/vit/ftp/pdf/PLoP95.pdf Some Patterns for Software Architectures, Mary Shaw, Carnegie Mellon University]&lt;/div&gt;</summary>
		<author><name>Quick Gun Murugan</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_12_Schemes_for_Pattern_Classification&amp;diff=25745</id>
		<title>CSC/ECE 517 Fall 2009/wiki2 12 Schemes for Pattern Classification</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_12_Schemes_for_Pattern_Classification&amp;diff=25745"/>
		<updated>2009-10-13T01:40:17Z</updated>

		<summary type="html">&lt;p&gt;Quick Gun Murugan: /* Tichy's Classification */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=='''Overview'''==&lt;br /&gt;
[http://en.wikipedia.org/wiki/Design_pattern_(computer_science) Design patterns] in [http://en.wikipedia.org/wiki/Software_engineering software engineering] is a time-tested reusable solution to recurring problems in [http://en.wikipedia.org/wiki/Software_design software design]. The origin of design patterns can be owed to the work of civil engineer [http://en.wikipedia.org/wiki/Christopher_Alexander Christopher Alexander], who documented his resolution to design issues in constructing buildings and towns[1]. About a decade and a half ago, software professional began to incorporate Alexanders ideas into guides for novice developers. From then on design patterns became increasingly popular.&lt;br /&gt;
&lt;br /&gt;
=='''Schemes for Pattern Classification'''==&lt;br /&gt;
===Gang of Four's Classification===&lt;br /&gt;
Design Patterns gained popularity with the book [http://en.wikipedia.org/wiki/Design_Patterns_(book) Design Patterns: Elements of Reusable Object-Oriented Software] by [http://en.wikipedia.org/wiki/Erich_Gamma Erich Gamma], [http://en.wikipedia.org/wiki/Richard_Helm Richard Helm], [http://en.wikipedia.org/wiki/Ralph_Johnson Ralph Johnson] and [http://en.wikipedia.org/wiki/John_Vlissides John Vlissides] published in 1995. In their work they used 2 criteria to categorize 23 design pattern[2].&lt;br /&gt;
* What does the pattern do?&lt;br /&gt;
** [http://en.wikipedia.org/wiki/Structural_pattern Structural] - These patterns deal with the composition of classes and their object.&lt;br /&gt;
** [http://en.wikipedia.org/wiki/Creational_pattern Creational] - These patterns deal with object creation.&lt;br /&gt;
** [http://en.wikipedia.org/wiki/Behavioral_pattern Behavioral] - These patterns deal with the interaction between classes and object and how they delegate responsibility.&lt;br /&gt;
&lt;br /&gt;
* What is the scope of the pattern?&lt;br /&gt;
** Class - The patterns deal with the relationships between classes and their subclasses. These are more static and fixed at compile time. &lt;br /&gt;
** Object - These patterns deal with object relationship. They are more dynamic and can vary at runtime.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;4&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|+ Example of Design Patterns that fall into each Category&lt;br /&gt;
|colspan=&amp;quot;5&amp;quot; align=&amp;quot;center&amp;quot;|'''Purpose'''&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Scope'''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Creational'''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Structural'''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Behavioral'''&lt;br /&gt;
|-&lt;br /&gt;
|rowspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot;|Class &lt;br /&gt;
|rowspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Factory_method_pattern Factory Method]&lt;br /&gt;
|rowspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Adapter_pattern Adapter (class)]&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Interpreter_pattern Interpreter]&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Template_method_pattern Template Method]&lt;br /&gt;
|-&lt;br /&gt;
|rowspan=&amp;quot;9&amp;quot; align=&amp;quot;center&amp;quot;|Object&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Abstract_factory_pattern Abstract Factory]&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Adapter_pattern Adapter (object)]&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Command_pattern Command]&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Prototype_pattern Prototype]&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Composite_pattern Composite]&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Mediator_pattern Mediator]&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Builder_pattern Builder]&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Bridge_pattern Bridge]&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Iterator_pattern Iterator]&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Singleton_pattern Singleton]&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Decorator_pattern Decorator]&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Memento_pattern Memento]&lt;br /&gt;
|-&lt;br /&gt;
|rowspan=&amp;quot;5&amp;quot; align=&amp;quot;center&amp;quot;| &lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Facade_pattern Facade]&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Observer_pattern Observer]&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Flyweight_pattern Flyweight]&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/State_pattern State]&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Proxy_pattern Proxy]&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Strategy_pattern Strategy]&lt;br /&gt;
|-&lt;br /&gt;
|rowspan=&amp;quot;2&amp;quot;  align=&amp;quot;center&amp;quot;|  &lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Visitor_pattern Visitor]&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Chain-of-responsibility_pattern Chain Of Responsibility]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Zimmer's Classification===&lt;br /&gt;
Zimmer[3] classifies the relationships between the Gang of Four design patterns. Focusing on the problem and solution of each relationship, they can be classified as :&lt;br /&gt;
* X uses Y in its solution.&lt;br /&gt;
** The [http://en.wikipedia.org/wiki/Interpreter_pattern| Interpreter] design pattern uses the [http://en.wikipedia.org/wiki/Composite_pattern| Composite] design patter.&lt;br /&gt;
** The [http://en.wikipedia.org/wiki/Prototype_pattern| Prototype] design pattern uses the [http://en.wikipedia.org/wiki/Singleton_pattern| Singleton] design pattern.&lt;br /&gt;
* Variant of X uses Y in its solution.&lt;br /&gt;
** Some variant of the [http://en.wikipedia.org/wiki/Bridge_pattern| Bridge] design pattern may uses the [http://en.wikipedia.org/wiki/Adapter_pattern| Adapter] design pattern.&lt;br /&gt;
* X is similar to Y.&lt;br /&gt;
** The [http://en.wikipedia.org/wiki/Mediator_pattern| Mediator] design pattern is similar to the [http://en.wikipedia.org/wiki/Facade_pattern| Facade] design pattern.&lt;br /&gt;
&lt;br /&gt;
Using these relationships Zimmer placed design pattern in 3 layers.&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;4&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Layer'''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Design Pattern'''&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Basic design patterns and techniques.&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Singleton_pattern| Singleton], [http://en.wikipedia.org/wiki/Template_method_pattern| Template Method], [http://en.wikipedia.org/wiki/Mediator_pattern| Mediator], [http://en.wikipedia.org/wiki/Facade_pattern| Facade], [http://en.wikipedia.org/wiki/Memento_pattern| Memento], [http://en.wikipedia.org/wiki/Iterator_pattern| Iterator], [http://en.wikipedia.org/wiki/Flyweight_pattern| Flyweight].&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Design patterns for typical software problems.&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Abstract_factory_pattern| Abstract Factory], [http://en.wikipedia.org/wiki/Builder_pattern| Builder], [http://en.wikipedia.org/wiki/Strategy_pattern| Strategy], [http://en.wikipedia.org/wiki/Observer_pattern| Observer], [http://en.wikipedia.org/wiki/Bridge_pattern| Bridge], [http://en.wikipedia.org/wiki/Adapter_pattern| Adapter], [http://en.wikipedia.org/wiki/Prototype_pattern| Prototype], [http://en.wikipedia.org/wiki/Factory_method_pattern| Factory Method], [http://en.wikipedia.org/wiki/State_pattern| State], [http://en.wikipedia.org/wiki/Command_pattern| Command], [http://en.wikipedia.org/wiki/Visitor_pattern| Visitor], [http://en.wikipedia.org/wiki/Composite_pattern| Composite], [http://en.wikipedia.org/wiki/Decorator_pattern| Decorator], [http://en.wikipedia.org/wiki/Chain-of-responsibility_pattern| Chain Of Responsibility], [http://en.wikipedia.org/wiki/Proxy_pattern| Proxy]&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Design patterns specific to an application domain.&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Interpreter_pattern| Interpreter]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Coad's Classification===&lt;br /&gt;
In 1992 Peter Coad published his first article of design patterns. According to Coad, design patterns are identified observing classes, objects and the relationships established between them[5]. In his book Object Models: Strategies, Patterns, and Applications, Peter Coad along with David North and Mark Mayfield organized patterns into various pattern families[4].&lt;br /&gt;
* '''Fundamental Pattern''': This pattern is the template that all the other patterns follow.&lt;br /&gt;
** Collection-Worker Pattern is the fundamental object model pattern.&lt;br /&gt;
* '''Transaction Patterns''': These either have transaction players or have players that commonly play with the transaction player. The transaction patterns are:&lt;br /&gt;
** Actor-Participant pattern.&lt;br /&gt;
** Participant-Transaction pattern.&lt;br /&gt;
** Place-Transaction pattern.&lt;br /&gt;
** Specific Item-Transaction pattern.&lt;br /&gt;
** Transaction-Transaction Line Item pattern.&lt;br /&gt;
** Transaction-Subsequent Transaction pattern.&lt;br /&gt;
** Transaction Line Item-Subsequent Transaction Line Item pattern.&lt;br /&gt;
** Item-Line Item pattern.&lt;br /&gt;
** Specific Item-Line Item.&lt;br /&gt;
** Item-Specific Item.&lt;br /&gt;
** Associate-Other Associate.&lt;br /&gt;
** Specific Item-Hierarchical Item.&lt;br /&gt;
* '''Aggregate Patterns''': These patterns interconnect with other patterns. The aggregate patterns are:&lt;br /&gt;
** Container-Content pattern.&lt;br /&gt;
** Container-Container Line Item pattern.&lt;br /&gt;
** Group-Member.&lt;br /&gt;
** Assembly-Part pattern.&lt;br /&gt;
** Compound Part-Part pattern.&lt;br /&gt;
** Packet-Packet Component.&lt;br /&gt;
* '''Plan Patterns''': The plan patterns are:&lt;br /&gt;
** Plan-Step pattern.&lt;br /&gt;
** Plan-Plan Execution pattern.&lt;br /&gt;
** Plan Execution-Step Execution pattern.&lt;br /&gt;
** Step-Step Execution pattern.&lt;br /&gt;
** Plan-Plan Version pattern.&lt;br /&gt;
* '''Interaction Patterns''': These patterns, as the name suggests are patterns of interaction. The interaction patterns are:&lt;br /&gt;
** Peer-Peer pattern.&lt;br /&gt;
** Proxy-Specific Item pattern.&lt;br /&gt;
** Publisher-Subscriber pattern.&lt;br /&gt;
** Sender-Pass Through-Receiver pattern.&lt;br /&gt;
** Sender-Lookup-Receiver pattern.&lt;br /&gt;
** Caller-Dispatcher-Caller Back pattern.&lt;br /&gt;
** Gatekeeper-Request-Resource pattern.&lt;br /&gt;
&lt;br /&gt;
===Pree's Classification===&lt;br /&gt;
In his book Design Patterns for Object-Oriented Software Development, Addison-Wesley, 1995, Wolfgang Pree categorized Coad's patterns into[5]:&lt;br /&gt;
* '''Basic inheritance and interaction patterns:''' These patterns encompass primarily the basic modelling capabilities offered by object oriented programming languages.&lt;br /&gt;
* '''Patterns for structuring object-oriented software systems: '''Most of Coad's patterns belong to this category.  &lt;br /&gt;
* '''Patterns related to the [http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller MVC] framework: ''' Those of Coad's patterns that stress the framework aspect are derivatives of the Model/View/Controller framework.&lt;br /&gt;
Ignoring the fine-grained[5] pattern classification proposed by Gamma's catalog, Pree applied the following classification of the listed patterns.&lt;br /&gt;
* '''Patterns relying on abstract coupling: '''Most of the patterns in the catalog are based on abstractly coupled classes. [http://en.wikipedia.org/wiki/Factory_method_pattern| Factory Method pattern] and [http://en.wikipedia.org/wiki/Observer_pattern| Observer pattern] for example.  &lt;br /&gt;
* '''Patterns based on recursive structures: ''' [http://en.wikipedia.org/wiki/Composite_pattern| Composite] pattern, [http://en.wikipedia.org/wiki/Chain-of-responsibility_pattern| Chain Of Responsibility] pattern, [http://en.wikipedia.org/wiki/Decorator_pattern| Decorator] pattern are all based on recursive structures. &lt;br /&gt;
* '''Other Catalog patterns''': Pree summarized the rest of the patterns as follows:&lt;br /&gt;
** An [http://en.wikipedia.org/wiki/Abstract_factory_pattern| Abstract Factory] pattern is close to the [http://en.wikipedia.org/wiki/Factory_method_pattern| Factory Method] pattern&lt;br /&gt;
** [http://en.wikipedia.org/wiki/Flyweight_pattern| Flyweight] pattern represents a pattern similar to Coad's Item-Description pattern.&lt;br /&gt;
** [http://en.wikipedia.org/wiki/Singleton_pattern| Singleton] pattern is a coding patterns that limits the number of creatable instances of a class to one.&lt;br /&gt;
** [http://en.wikipedia.org/wiki/Template_method_pattern| Template Method] pattern forms the basis of all patterns dealing with with abstract classes.&lt;br /&gt;
&lt;br /&gt;
==='''Buschman et. al's Classification'''===&lt;br /&gt;
Frank Buschman and Regine Meunier identified the following categories[6]:&lt;br /&gt;
* '''Granularity: ''' Three levels of granularity can be specified. &lt;br /&gt;
** [http://en.wikipedia.org/wiki/Architectural_pattern_(computer_science) Architectural Framework]: Every software architecture is built according to an overall structuring principles described by architectural frameworks. Example: The [http://en.wikipedia.org/wiki/Model-view-controller Model-View-Controller] framework.&lt;br /&gt;
** [http://en.wikipedia.org/wiki/Design_pattern_(computer_science) Design Patterns]: These can be described as the smaller architectural units.&lt;br /&gt;
** [http://en.wikipedia.org/wiki/Programming_idiom Idioms]: Idioms represent the lowest level of a pattern and are closely related to a particular programming language. Example: [http://en.wikibooks.org/wiki/More_C%2B%2B_Idioms/Counted_Body The Counted Body] Idiom.&lt;br /&gt;
&lt;br /&gt;
*'''Functionality: '''Each pattern serves as a means to implement a particular functionality. The following categories of functionality can be distinguished:&lt;br /&gt;
** Creation of objects: Patterns may specify how to create particular instances of complex recursive or aggregate object structures. Example: [http://en.wikipedia.org/wiki/Singleton_pattern Singleton pattern]&lt;br /&gt;
** Guiding Communication between objects: Patterns may describe how to organize communication between a set of collaborating objects.&lt;br /&gt;
** Access to objects: Patterns may describe how to access the services and state of shared or remote objects in a safe way. Example: [http://en.wikipedia.org/wiki/Proxy_pattern Proxy pattern]&lt;br /&gt;
** Organizing the computation of the complex tasks: Patterns may specify how to distribute responsibilities among cooperating objects in order to solve a more complex task. Example: [http://en.wikipedia.org/wiki/Command_pattern Command pattern]&lt;br /&gt;
&lt;br /&gt;
*'''Structural Principles: ''' To achieve their functionality, patterns rely on certain architectural principles. These principles can be categorized as:&lt;br /&gt;
** Abstraction: A pattern provides an abstract view of a particular entity or task in a software system. Example: [http://en.wikipedia.org/wiki/Facade_pattern Facade pattern]&lt;br /&gt;
** Encapsulation: A pattern encapsulates details of a particular object, component, or service to remove dependencies on it from its clients or to protect these details from access. Example: [http://en.wikipedia.org/wiki/Mediator_pattern Mediator pattern]&lt;br /&gt;
** Separation of concerns: A pattern factors out specific responsibilities into separate objects or components.&lt;br /&gt;
** Coupling and Cohesion: A patterns removes dependencies between strongly coupled objects. Example: [http://en.wikipedia.org/wiki/Bridge_pattern Bridge pattern]&lt;br /&gt;
&lt;br /&gt;
This classification scheme is not intended as a means of picking out the right pattern, but merely a guide for designers helping them search for the pattern appropriate for a particular situation.&lt;br /&gt;
&lt;br /&gt;
===Tichy's Classification===&lt;br /&gt;
Walter Tichy classified several design patterns based on the kind of problems they solved. He grouped the problems into the following high-level categories[6]:&lt;br /&gt;
* Decoupling: dividing a software system into in-dependent parts in such a way that the parts can be built, changed, replaced, and reused independently. Decoupling patterns can be further classified into:&lt;br /&gt;
** Modules([http://en.wikipedia.org/wiki/Encapsulation_(computer_science)#Encapsulation Encapsulation]/[http://en.wikipedia.org/wiki/Information_hiding Information Hiding])[7]: Hide data structure and operations that are most likely to change, thus protecting other parts of the system from the effects of those changes. Examples for support of modules are &lt;br /&gt;
*** [http://en.wikipedia.org/wiki/Modula Modula's] modules.&lt;br /&gt;
*** [http://en.wikipedia.org/wiki/C_(programming_language) C's] header files.&lt;br /&gt;
***[http://en.wikipedia.org/wiki/Ada_(programming_language) Ada's] packages.&lt;br /&gt;
** Abstract Data Type[ADT]: Hide data structure and access algorithms behind a change-insensitive interface. The purpose of ADT is similar to that of Module, but an ADT is typically smaller, containing a single data type. Examples:&lt;br /&gt;
*** Repository pattern[8].&lt;br /&gt;
*** [http://en.wikipedia.org/wiki/Iterator_pattern Iterator pattern].&lt;br /&gt;
** Layers: The purpose of a layer is to provides an interface and an implementation of this interface. Example:&lt;br /&gt;
*** [http://en.wikipedia.org/wiki/Facade_pattern Facade pattern].&lt;br /&gt;
*** [http://en.wikipedia.org/wiki/Bridge_pattern Bridge pattern].&lt;br /&gt;
*** [http://en.wikipedia.org/wiki/Adapter_pattern Adapter pattern].&lt;br /&gt;
*** [http://en.wikipedia.org/wiki/Proxy_pattern Proxy pattern].&lt;br /&gt;
** Pipeline: Pass data through a sequence of transformations (filters) connected by channels (pipes).&lt;br /&gt;
** Event Notification: Let independent parts interact by an-nouncing and responding to events (loose coupling).&lt;br /&gt;
** Framework: Provide a complete or nearly complete application layer that can be extended by sub-classing.&lt;br /&gt;
* Variant Management: treating different objects uniformly by factoring out their commonality.&lt;br /&gt;
** Superclass: Provide uniform treatment of variant classes by placing common interface into a super-class; variants are subclasses. Example:&lt;br /&gt;
*** [http://en.wikipedia.org/wiki/Strategy_pattern Strategy pattern].&lt;br /&gt;
*** [http://en.wikipedia.org/wiki/Composite_pattern Composite pattern].&lt;br /&gt;
** [http://en.wikipedia.org/wiki/Visitor_pattern Visitor]: Add new variations of operations to stable class hierarchy.&lt;br /&gt;
** [http://en.wikipedia.org/wiki/Template_method_pattern Template Method]: Specify algorithm skeleton using primitives; vary primitives in subclasses or by delegation.&lt;br /&gt;
** [http://en.wikipedia.org/wiki/Abstract_factory_pattern Abstract Factory]: Bundle the constructors of a family of related objects into one object.&lt;br /&gt;
* State Handling: generic manipulation of object state.&lt;br /&gt;
** [http://en.wikipedia.org/wiki/Singleton_pattern Singleton]: Guarantee single instance of a class.&lt;br /&gt;
** [http://en.wikipedia.org/wiki/Prototype_pattern Prototype]: Create new objects by cloning an existing one (the prototype). &lt;br /&gt;
** [http://en.wikipedia.org/wiki/Flyweight_pattern Flyweight]: Save space by sharing common state among objects.&lt;br /&gt;
** [http://en.wikipedia.org/wiki/Memento_pattern Memento]: save and restore an object’s internal state. &lt;br /&gt;
&lt;br /&gt;
* Control: control of execution and method selection.&lt;br /&gt;
* Virtual Machines: simulated processors.&lt;br /&gt;
* Convenience Patterns: simplified coding.&lt;br /&gt;
* Compound Patterns: patterns composed from others, with the original patterns visible.&lt;br /&gt;
* Concurrency: controlling parallel and concurrent execution.&lt;br /&gt;
* Distribution: problems germane to distributed systems.&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
[1] http://www.developer.com/design/article.php/1474561/What-Are-Design-Patterns-and-Do-I-Need-Them.htm&amp;lt;br&amp;gt;&lt;br /&gt;
[2] http://www.cs.umu.se/~jubo/ExJobbs/MK/patterns.htm&amp;lt;br&amp;gt;&lt;br /&gt;
[3] [http://reference.kfupm.edu.sa/content/r/e/relationships_between_design_patterns__148528.pdf Relationships between Design Patterns, by Walter Zimmer, Forschungszentrum Informatik, Bereich Programmstrukturen, 1995]&amp;lt;br&amp;gt;&lt;br /&gt;
[4] Peter Coad, with David North, and Mark Mayfield. Object Models: Strategies, Patterns, and Applications. Englewood Cliffs, NJ: Prentice Hall, 1995.&amp;lt;br&amp;gt;&lt;br /&gt;
[5] Wolfgang Pree. Design Patterns for Object-Oriented Software Development. Addison-Wesley, 1995.&amp;lt;br&amp;gt;&lt;br /&gt;
[6] Frank Buschman and Regine Meunier. “A System of Patterns.&amp;quot; In J. O. Coplien and D. C. Schmidt (eds.), Pattern Languages of Program Design. Reading, MA: Addison-Wesley, 1995, pp. 325-343.&amp;lt;br&amp;gt;&lt;br /&gt;
[6] [http://wwwipd.ira.uka.de/~tichy/publications/Catalogue.doc Tichy, Walter F (1998), A Catalogue of General-Purpose Software Design Patterns. University of Karlsruhe, Karlsruhe, Germany.]&amp;lt;br&amp;gt;&lt;br /&gt;
[7] [http://doi.acm.org/10.1145/361598.361623 Parnas, D. L. 1972. On the criteria to be used in decomposing systems into modules. Commun. ACM 15, 12 (Dec. 1972), 1053-1058.]&amp;lt;br&amp;gt; &lt;br /&gt;
[8] [http://www.cs.cmu.edu/afs/cs.cmu.edu/project/vit/ftp/pdf/PLoP95.pdf Some Patterns for Software Architectures, Mary Shaw, Carnegie Mellon University]&lt;/div&gt;</summary>
		<author><name>Quick Gun Murugan</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b_12_Schemes_for_Pattern_Classification&amp;diff=25742</id>
		<title>CSC/ECE 517 Fall 2009/wiki1b 12 Schemes for Pattern Classification</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b_12_Schemes_for_Pattern_Classification&amp;diff=25742"/>
		<updated>2009-10-13T01:25:42Z</updated>

		<summary type="html">&lt;p&gt;Quick Gun Murugan: CSC/ECE 517 Fall 2009/wiki1b 12 Schemes for Pattern Classification moved to CSC/ECE 517 Fall 2009/wiki2 12 Schemes for Pattern Classification&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[CSC/ECE 517 Fall 2009/wiki2 12 Schemes for Pattern Classification]]&lt;/div&gt;</summary>
		<author><name>Quick Gun Murugan</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_12_Schemes_for_Pattern_Classification&amp;diff=25741</id>
		<title>CSC/ECE 517 Fall 2009/wiki2 12 Schemes for Pattern Classification</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_12_Schemes_for_Pattern_Classification&amp;diff=25741"/>
		<updated>2009-10-13T01:25:42Z</updated>

		<summary type="html">&lt;p&gt;Quick Gun Murugan: CSC/ECE 517 Fall 2009/wiki1b 12 Schemes for Pattern Classification moved to CSC/ECE 517 Fall 2009/wiki2 12 Schemes for Pattern Classification&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=='''Overview'''==&lt;br /&gt;
[http://en.wikipedia.org/wiki/Design_pattern_(computer_science) Design patterns] in [http://en.wikipedia.org/wiki/Software_engineering software engineering] is a time-tested reusable solution to recurring problems in [http://en.wikipedia.org/wiki/Software_design software design]. The origin of design patterns can be owed to the work of civil engineer [http://en.wikipedia.org/wiki/Christopher_Alexander Christopher Alexander], who documented his resolution to design issues in constructing buildings and towns[1]. About a decade and a half ago, software professional began to incorporate Alexanders ideas into guides for novice developers. From then on design patterns became increasingly popular.&lt;br /&gt;
&lt;br /&gt;
=='''Schemes for Pattern Classification'''==&lt;br /&gt;
===Gang of Four's Classification===&lt;br /&gt;
Design Patterns gained popularity with the book [http://en.wikipedia.org/wiki/Design_Patterns_(book) Design Patterns: Elements of Reusable Object-Oriented Software] by [http://en.wikipedia.org/wiki/Erich_Gamma Erich Gamma], [http://en.wikipedia.org/wiki/Richard_Helm Richard Helm], [http://en.wikipedia.org/wiki/Ralph_Johnson Ralph Johnson] and [http://en.wikipedia.org/wiki/John_Vlissides John Vlissides] published in 1995. In their work they used 2 criteria to categorize 23 design pattern[2].&lt;br /&gt;
* What does the pattern do?&lt;br /&gt;
** [http://en.wikipedia.org/wiki/Structural_pattern Structural] - These patterns deal with the composition of classes and their object.&lt;br /&gt;
** [http://en.wikipedia.org/wiki/Creational_pattern Creational] - These patterns deal with object creation.&lt;br /&gt;
** [http://en.wikipedia.org/wiki/Behavioral_pattern Behavioral] - These patterns deal with the interaction between classes and object and how they delegate responsibility.&lt;br /&gt;
&lt;br /&gt;
* What is the scope of the pattern?&lt;br /&gt;
** Class - The patterns deal with the relationships between classes and their subclasses. These are more static and fixed at compile time. &lt;br /&gt;
** Object - These patterns deal with object relationship. They are more dynamic and can vary at runtime.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;4&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|+ Example of Design Patterns that fall into each Category&lt;br /&gt;
|colspan=&amp;quot;5&amp;quot; align=&amp;quot;center&amp;quot;|'''Purpose'''&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Scope'''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Creational'''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Structural'''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Behavioral'''&lt;br /&gt;
|-&lt;br /&gt;
|rowspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot;|Class &lt;br /&gt;
|rowspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Factory_method_pattern Factory Method]&lt;br /&gt;
|rowspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Adapter_pattern Adapter (class)]&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Interpreter_pattern Interpreter]&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Template_method_pattern Template Method]&lt;br /&gt;
|-&lt;br /&gt;
|rowspan=&amp;quot;9&amp;quot; align=&amp;quot;center&amp;quot;|Object&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Abstract_factory_pattern Abstract Factory]&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Adapter_pattern Adapter (object)]&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Command_pattern Command]&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Prototype_pattern Prototype]&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Composite_pattern Composite]&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Mediator_pattern Mediator]&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Builder_pattern Builder]&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Bridge_pattern Bridge]&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Iterator_pattern Iterator]&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Singleton_pattern Singleton]&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Decorator_pattern Decorator]&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Memento_pattern Memento]&lt;br /&gt;
|-&lt;br /&gt;
|rowspan=&amp;quot;5&amp;quot; align=&amp;quot;center&amp;quot;| &lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Facade_pattern Facade]&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Observer_pattern Observer]&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Flyweight_pattern Flyweight]&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/State_pattern State]&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Proxy_pattern Proxy]&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Strategy_pattern Strategy]&lt;br /&gt;
|-&lt;br /&gt;
|rowspan=&amp;quot;2&amp;quot;  align=&amp;quot;center&amp;quot;|  &lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Visitor_pattern Visitor]&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Chain-of-responsibility_pattern Chain Of Responsibility]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Zimmer's Classification===&lt;br /&gt;
Zimmer[3] classifies the relationships between the Gang of Four design patterns. Focusing on the problem and solution of each relationship, they can be classified as :&lt;br /&gt;
* X uses Y in its solution.&lt;br /&gt;
** The [http://en.wikipedia.org/wiki/Interpreter_pattern| Interpreter] design pattern uses the [http://en.wikipedia.org/wiki/Composite_pattern| Composite] design patter.&lt;br /&gt;
** The [http://en.wikipedia.org/wiki/Prototype_pattern| Prototype] design pattern uses the [http://en.wikipedia.org/wiki/Singleton_pattern| Singleton] design pattern.&lt;br /&gt;
* Variant of X uses Y in its solution.&lt;br /&gt;
** Some variant of the [http://en.wikipedia.org/wiki/Bridge_pattern| Bridge] design pattern may uses the [http://en.wikipedia.org/wiki/Adapter_pattern| Adapter] design pattern.&lt;br /&gt;
* X is similar to Y.&lt;br /&gt;
** The [http://en.wikipedia.org/wiki/Mediator_pattern| Mediator] design pattern is similar to the [http://en.wikipedia.org/wiki/Facade_pattern| Facade] design pattern.&lt;br /&gt;
&lt;br /&gt;
Using these relationships Zimmer placed design pattern in 3 layers.&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;4&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Layer'''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Design Pattern'''&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Basic design patterns and techniques.&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Singleton_pattern| Singleton], [http://en.wikipedia.org/wiki/Template_method_pattern| Template Method], [http://en.wikipedia.org/wiki/Mediator_pattern| Mediator], [http://en.wikipedia.org/wiki/Facade_pattern| Facade], [http://en.wikipedia.org/wiki/Memento_pattern| Memento], [http://en.wikipedia.org/wiki/Iterator_pattern| Iterator], [http://en.wikipedia.org/wiki/Flyweight_pattern| Flyweight].&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Design patterns for typical software problems.&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Abstract_factory_pattern| Abstract Factory], [http://en.wikipedia.org/wiki/Builder_pattern| Builder], [http://en.wikipedia.org/wiki/Strategy_pattern| Strategy], [http://en.wikipedia.org/wiki/Observer_pattern| Observer], [http://en.wikipedia.org/wiki/Bridge_pattern| Bridge], [http://en.wikipedia.org/wiki/Adapter_pattern| Adapter], [http://en.wikipedia.org/wiki/Prototype_pattern| Prototype], [http://en.wikipedia.org/wiki/Factory_method_pattern| Factory Method], [http://en.wikipedia.org/wiki/State_pattern| State], [http://en.wikipedia.org/wiki/Command_pattern| Command], [http://en.wikipedia.org/wiki/Visitor_pattern| Visitor], [http://en.wikipedia.org/wiki/Composite_pattern| Composite], [http://en.wikipedia.org/wiki/Decorator_pattern| Decorator], [http://en.wikipedia.org/wiki/Chain-of-responsibility_pattern| Chain Of Responsibility], [http://en.wikipedia.org/wiki/Proxy_pattern| Proxy]&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Design patterns specific to an application domain.&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Interpreter_pattern| Interpreter]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Coad's Classification===&lt;br /&gt;
In 1992 Peter Coad published his first article of design patterns. According to Coad, design patterns are identified observing classes, objects and the relationships established between them[5]. In his book Object Models: Strategies, Patterns, and Applications, Peter Coad along with David North and Mark Mayfield organized patterns into various pattern families[4].&lt;br /&gt;
* '''Fundamental Pattern''': This pattern is the template that all the other patterns follow.&lt;br /&gt;
** Collection-Worker Pattern is the fundamental object model pattern.&lt;br /&gt;
* '''Transaction Patterns''': These either have transaction players or have players that commonly play with the transaction player. The transaction patterns are:&lt;br /&gt;
** Actor-Participant pattern.&lt;br /&gt;
** Participant-Transaction pattern.&lt;br /&gt;
** Place-Transaction pattern.&lt;br /&gt;
** Specific Item-Transaction pattern.&lt;br /&gt;
** Transaction-Transaction Line Item pattern.&lt;br /&gt;
** Transaction-Subsequent Transaction pattern.&lt;br /&gt;
** Transaction Line Item-Subsequent Transaction Line Item pattern.&lt;br /&gt;
** Item-Line Item pattern.&lt;br /&gt;
** Specific Item-Line Item.&lt;br /&gt;
** Item-Specific Item.&lt;br /&gt;
** Associate-Other Associate.&lt;br /&gt;
** Specific Item-Hierarchical Item.&lt;br /&gt;
* '''Aggregate Patterns''': These patterns interconnect with other patterns. The aggregate patterns are:&lt;br /&gt;
** Container-Content pattern.&lt;br /&gt;
** Container-Container Line Item pattern.&lt;br /&gt;
** Group-Member.&lt;br /&gt;
** Assembly-Part pattern.&lt;br /&gt;
** Compound Part-Part pattern.&lt;br /&gt;
** Packet-Packet Component.&lt;br /&gt;
* '''Plan Patterns''': The plan patterns are:&lt;br /&gt;
** Plan-Step pattern.&lt;br /&gt;
** Plan-Plan Execution pattern.&lt;br /&gt;
** Plan Execution-Step Execution pattern.&lt;br /&gt;
** Step-Step Execution pattern.&lt;br /&gt;
** Plan-Plan Version pattern.&lt;br /&gt;
* '''Interaction Patterns''': These patterns, as the name suggests are patterns of interaction. The interaction patterns are:&lt;br /&gt;
** Peer-Peer pattern.&lt;br /&gt;
** Proxy-Specific Item pattern.&lt;br /&gt;
** Publisher-Subscriber pattern.&lt;br /&gt;
** Sender-Pass Through-Receiver pattern.&lt;br /&gt;
** Sender-Lookup-Receiver pattern.&lt;br /&gt;
** Caller-Dispatcher-Caller Back pattern.&lt;br /&gt;
** Gatekeeper-Request-Resource pattern.&lt;br /&gt;
&lt;br /&gt;
===Pree's Classification===&lt;br /&gt;
In his book Design Patterns for Object-Oriented Software Development, Addison-Wesley, 1995, Wolfgang Pree categorized Coad's patterns into[5]:&lt;br /&gt;
* '''Basic inheritance and interaction patterns:''' These patterns encompass primarily the basic modelling capabilities offered by object oriented programming languages.&lt;br /&gt;
* '''Patterns for structuring object-oriented software systems: '''Most of Coad's patterns belong to this category.  &lt;br /&gt;
* '''Patterns related to the [http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller MVC] framework: ''' Those of Coad's patterns that stress the framework aspect are derivatives of the Model/View/Controller framework.&lt;br /&gt;
Ignoring the fine-grained[5] pattern classification proposed by Gamma's catalog, Pree applied the following classification of the listed patterns.&lt;br /&gt;
* '''Patterns relying on abstract coupling: '''Most of the patterns in the catalog are based on abstractly coupled classes. [http://en.wikipedia.org/wiki/Factory_method_pattern| Factory Method pattern] and [http://en.wikipedia.org/wiki/Observer_pattern| Observer pattern] for example.  &lt;br /&gt;
* '''Patterns based on recursive structures: ''' [http://en.wikipedia.org/wiki/Composite_pattern| Composite] pattern, [http://en.wikipedia.org/wiki/Chain-of-responsibility_pattern| Chain Of Responsibility] pattern, [http://en.wikipedia.org/wiki/Decorator_pattern| Decorator] pattern are all based on recursive structures. &lt;br /&gt;
* '''Other Catalog patterns''': Pree summarized the rest of the patterns as follows:&lt;br /&gt;
** An [http://en.wikipedia.org/wiki/Abstract_factory_pattern| Abstract Factory] pattern is close to the [http://en.wikipedia.org/wiki/Factory_method_pattern| Factory Method] pattern&lt;br /&gt;
** [http://en.wikipedia.org/wiki/Flyweight_pattern| Flyweight] pattern represents a pattern similar to Coad's Item-Description pattern.&lt;br /&gt;
** [http://en.wikipedia.org/wiki/Singleton_pattern| Singleton] pattern is a coding patterns that limits the number of creatable instances of a class to one.&lt;br /&gt;
** [http://en.wikipedia.org/wiki/Template_method_pattern| Template Method] pattern forms the basis of all patterns dealing with with abstract classes.&lt;br /&gt;
&lt;br /&gt;
==='''Buschman et. al's Classification'''===&lt;br /&gt;
Frank Buschman and Regine Meunier identified the following categories[6]:&lt;br /&gt;
* '''Granularity: ''' Three levels of granularity can be specified. &lt;br /&gt;
** [http://en.wikipedia.org/wiki/Architectural_pattern_(computer_science) Architectural Framework]: Every software architecture is built according to an overall structuring principles described by architectural frameworks. Example: The [http://en.wikipedia.org/wiki/Model-view-controller Model-View-Controller] framework.&lt;br /&gt;
** [http://en.wikipedia.org/wiki/Design_pattern_(computer_science) Design Patterns]: These can be described as the smaller architectural units.&lt;br /&gt;
** [http://en.wikipedia.org/wiki/Programming_idiom Idioms]: Idioms represent the lowest level of a pattern and are closely related to a particular programming language. Example: [http://en.wikibooks.org/wiki/More_C%2B%2B_Idioms/Counted_Body The Counted Body] Idiom.&lt;br /&gt;
&lt;br /&gt;
*'''Functionality: '''Each pattern serves as a means to implement a particular functionality. The following categories of functionality can be distinguished:&lt;br /&gt;
** Creation of objects: Patterns may specify how to create particular instances of complex recursive or aggregate object structures. Example: [http://en.wikipedia.org/wiki/Singleton_pattern Singleton pattern]&lt;br /&gt;
** Guiding Communication between objects: Patterns may describe how to organize communication between a set of collaborating objects.&lt;br /&gt;
** Access to objects: Patterns may describe how to access the services and state of shared or remote objects in a safe way. Example: [http://en.wikipedia.org/wiki/Proxy_pattern Proxy pattern]&lt;br /&gt;
** Organizing the computation of the complex tasks: Patterns may specify how to distribute responsibilities among cooperating objects in order to solve a more complex task. Example: [http://en.wikipedia.org/wiki/Command_pattern Command pattern]&lt;br /&gt;
&lt;br /&gt;
*'''Structural Principles: ''' To achieve their functionality, patterns rely on certain architectural principles. These principles can be categorized as:&lt;br /&gt;
** Abstraction: A pattern provides an abstract view of a particular entity or task in a software system. Example: [http://en.wikipedia.org/wiki/Facade_pattern Facade pattern]&lt;br /&gt;
** Encapsulation: A pattern encapsulates details of a particular object, component, or service to remove dependencies on it from its clients or to protect these details from access. Example: [http://en.wikipedia.org/wiki/Mediator_pattern Mediator pattern]&lt;br /&gt;
** Separation of concerns: A pattern factors out specific responsibilities into separate objects or components.&lt;br /&gt;
** Coupling and Cohesion: A patterns removes dependencies between strongly coupled objects. Example: [http://en.wikipedia.org/wiki/Bridge_pattern Bridge pattern]&lt;br /&gt;
&lt;br /&gt;
This classification scheme is not intended as a means of picking out the right pattern, but merely a guide for designers helping them search for the pattern appropriate for a particular situation.&lt;br /&gt;
&lt;br /&gt;
===Tichy's Classification===&lt;br /&gt;
Walter Tichy classified several design patterns based on the kind of problems they solved. He grouped the problems into the following high-level categories[6]:&lt;br /&gt;
* Decoupling: dividing a software system into in-dependent parts in such a way that the parts can be built, changed, replaced, and reused independently. Decoupling patterns can be further classified into:&lt;br /&gt;
** Modules([http://en.wikipedia.org/wiki/Encapsulation_(computer_science)#Encapsulation Encapsulation]/[http://en.wikipedia.org/wiki/Information_hiding Information Hiding])[7]: Hide data structure and operations that are most likely to change, thus protecting other parts of the system from the effects of those changes. Examples for support of modules are &lt;br /&gt;
*** [http://en.wikipedia.org/wiki/Modula Modula's] modules.&lt;br /&gt;
*** [http://en.wikipedia.org/wiki/C_(programming_language) C's] header files.&lt;br /&gt;
***[http://en.wikipedia.org/wiki/Ada_(programming_language) Ada's] packages.&lt;br /&gt;
** Abstract Data Type[ADT]: Hide data structure and access algorithms behind a change-insensitive interface. The purpose of ADT is similar to that of Module, but an ADT is typically smaller, containing a single data type. Examples:&lt;br /&gt;
*** Repository pattern[8].&lt;br /&gt;
*** [http://en.wikipedia.org/wiki/Iterator_pattern Iterator pattern].&lt;br /&gt;
** Layers: The purpose of a layer is to provides an interface and an implementation of this interface. Example:&lt;br /&gt;
*** [http://en.wikipedia.org/wiki/Facade_pattern Facade pattern].&lt;br /&gt;
*** [http://en.wikipedia.org/wiki/Bridge_pattern Bridge pattern].&lt;br /&gt;
*** [http://en.wikipedia.org/wiki/Adapter_pattern Adapter pattern].&lt;br /&gt;
*** [http://en.wikipedia.org/wiki/Proxy_pattern Proxy pattern].&lt;br /&gt;
** Pipeline: Pass data through a sequence of transformations (filters) connected by channels (pipes).&lt;br /&gt;
** Event Notification: Let independent parts interact by an-nouncing and responding to events (loose coupling).&lt;br /&gt;
** Framework: Provide a complete or nearly complete application layer that can be extended by sub-classing.&lt;br /&gt;
* Variant Management: treating different objects uniformly by factoring out their commonality.&lt;br /&gt;
** Superclass: Provide uniform treatment of variant classes by placing common interface into a super-class; variants are subclasses. Example:&lt;br /&gt;
*** [http://en.wikipedia.org/wiki/Strategy_pattern Strategy pattern].&lt;br /&gt;
*** [http://en.wikipedia.org/wiki/Composite_pattern Composite pattern].&lt;br /&gt;
** [http://en.wikipedia.org/wiki/Visitor_pattern Visitor]: Add new variations of operations to stable class hierarchy.&lt;br /&gt;
** [http://en.wikipedia.org/wiki/Template_method_pattern Template Method]: Specify algorithm skeleton using primitives; vary primitives in subclasses or by delegation. &lt;br /&gt;
* State Handling: generic manipulation of object state.&lt;br /&gt;
* Control: control of execution and method selec-tion.&lt;br /&gt;
* Virtual Machines: simulated processors.&lt;br /&gt;
* Convenience Patterns: simplified coding.&lt;br /&gt;
* Compound Patterns: patterns composed from others, with the original patterns visible.&lt;br /&gt;
* Concurrency: controlling parallel and concurrent execution.&lt;br /&gt;
* Distribution: problems germane to distributed systems.&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
[1] http://www.developer.com/design/article.php/1474561/What-Are-Design-Patterns-and-Do-I-Need-Them.htm&amp;lt;br&amp;gt;&lt;br /&gt;
[2] http://www.cs.umu.se/~jubo/ExJobbs/MK/patterns.htm&amp;lt;br&amp;gt;&lt;br /&gt;
[3] [http://reference.kfupm.edu.sa/content/r/e/relationships_between_design_patterns__148528.pdf Relationships between Design Patterns, by Walter Zimmer, Forschungszentrum Informatik, Bereich Programmstrukturen, 1995]&amp;lt;br&amp;gt;&lt;br /&gt;
[4] Peter Coad, with David North, and Mark Mayfield. Object Models: Strategies, Patterns, and Applications. Englewood Cliffs, NJ: Prentice Hall, 1995.&amp;lt;br&amp;gt;&lt;br /&gt;
[5] Wolfgang Pree. Design Patterns for Object-Oriented Software Development. Addison-Wesley, 1995.&amp;lt;br&amp;gt;&lt;br /&gt;
[6] Frank Buschman and Regine Meunier. “A System of Patterns.&amp;quot; In J. O. Coplien and D. C. Schmidt (eds.), Pattern Languages of Program Design. Reading, MA: Addison-Wesley, 1995, pp. 325-343.&amp;lt;br&amp;gt;&lt;br /&gt;
[6] [http://wwwipd.ira.uka.de/~tichy/publications/Catalogue.doc Tichy, Walter F (1998), A Catalogue of General-Purpose Software Design Patterns. University of Karlsruhe, Karlsruhe, Germany.]&amp;lt;br&amp;gt;&lt;br /&gt;
[7] [http://doi.acm.org/10.1145/361598.361623 Parnas, D. L. 1972. On the criteria to be used in decomposing systems into modules. Commun. ACM 15, 12 (Dec. 1972), 1053-1058.]&amp;lt;br&amp;gt; &lt;br /&gt;
[8] [http://www.cs.cmu.edu/afs/cs.cmu.edu/project/vit/ftp/pdf/PLoP95.pdf Some Patterns for Software Architectures, Mary Shaw, Carnegie Mellon University]&lt;/div&gt;</summary>
		<author><name>Quick Gun Murugan</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_12_Schemes_for_Pattern_Classification&amp;diff=25740</id>
		<title>CSC/ECE 517 Fall 2009/wiki2 12 Schemes for Pattern Classification</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_12_Schemes_for_Pattern_Classification&amp;diff=25740"/>
		<updated>2009-10-13T01:22:55Z</updated>

		<summary type="html">&lt;p&gt;Quick Gun Murugan: /* Gang of Four's Classification */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=='''Overview'''==&lt;br /&gt;
[http://en.wikipedia.org/wiki/Design_pattern_(computer_science) Design patterns] in [http://en.wikipedia.org/wiki/Software_engineering software engineering] is a time-tested reusable solution to recurring problems in [http://en.wikipedia.org/wiki/Software_design software design]. The origin of design patterns can be owed to the work of civil engineer [http://en.wikipedia.org/wiki/Christopher_Alexander Christopher Alexander], who documented his resolution to design issues in constructing buildings and towns[1]. About a decade and a half ago, software professional began to incorporate Alexanders ideas into guides for novice developers. From then on design patterns became increasingly popular.&lt;br /&gt;
&lt;br /&gt;
=='''Schemes for Pattern Classification'''==&lt;br /&gt;
===Gang of Four's Classification===&lt;br /&gt;
Design Patterns gained popularity with the book [http://en.wikipedia.org/wiki/Design_Patterns_(book) Design Patterns: Elements of Reusable Object-Oriented Software] by [http://en.wikipedia.org/wiki/Erich_Gamma Erich Gamma], [http://en.wikipedia.org/wiki/Richard_Helm Richard Helm], [http://en.wikipedia.org/wiki/Ralph_Johnson Ralph Johnson] and [http://en.wikipedia.org/wiki/John_Vlissides John Vlissides] published in 1995. In their work they used 2 criteria to categorize 23 design pattern[2].&lt;br /&gt;
* What does the pattern do?&lt;br /&gt;
** [http://en.wikipedia.org/wiki/Structural_pattern Structural] - These patterns deal with the composition of classes and their object.&lt;br /&gt;
** [http://en.wikipedia.org/wiki/Creational_pattern Creational] - These patterns deal with object creation.&lt;br /&gt;
** [http://en.wikipedia.org/wiki/Behavioral_pattern Behavioral] - These patterns deal with the interaction between classes and object and how they delegate responsibility.&lt;br /&gt;
&lt;br /&gt;
* What is the scope of the pattern?&lt;br /&gt;
** Class - The patterns deal with the relationships between classes and their subclasses. These are more static and fixed at compile time. &lt;br /&gt;
** Object - These patterns deal with object relationship. They are more dynamic and can vary at runtime.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;4&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|+ Example of Design Patterns that fall into each Category&lt;br /&gt;
|colspan=&amp;quot;5&amp;quot; align=&amp;quot;center&amp;quot;|'''Purpose'''&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Scope'''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Creational'''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Structural'''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Behavioral'''&lt;br /&gt;
|-&lt;br /&gt;
|rowspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot;|Class &lt;br /&gt;
|rowspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Factory_method_pattern Factory Method]&lt;br /&gt;
|rowspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Adapter_pattern Adapter (class)]&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Interpreter_pattern Interpreter]&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Template_method_pattern Template Method]&lt;br /&gt;
|-&lt;br /&gt;
|rowspan=&amp;quot;9&amp;quot; align=&amp;quot;center&amp;quot;|Object&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Abstract_factory_pattern Abstract Factory]&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Adapter_pattern Adapter (object)]&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Command_pattern Command]&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Prototype_pattern Prototype]&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Composite_pattern Composite]&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Mediator_pattern Mediator]&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Builder_pattern Builder]&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Bridge_pattern Bridge]&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Iterator_pattern Iterator]&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Singleton_pattern Singleton]&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Decorator_pattern Decorator]&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Memento_pattern Memento]&lt;br /&gt;
|-&lt;br /&gt;
|rowspan=&amp;quot;5&amp;quot; align=&amp;quot;center&amp;quot;| &lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Facade_pattern Facade]&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Observer_pattern Observer]&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Flyweight_pattern Flyweight]&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/State_pattern State]&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Proxy_pattern Proxy]&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Strategy_pattern Strategy]&lt;br /&gt;
|-&lt;br /&gt;
|rowspan=&amp;quot;2&amp;quot;  align=&amp;quot;center&amp;quot;|  &lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Visitor_pattern Visitor]&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Chain-of-responsibility_pattern Chain Of Responsibility]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Zimmer's Classification===&lt;br /&gt;
Zimmer[3] classifies the relationships between the Gang of Four design patterns. Focusing on the problem and solution of each relationship, they can be classified as :&lt;br /&gt;
* X uses Y in its solution.&lt;br /&gt;
** The [http://en.wikipedia.org/wiki/Interpreter_pattern| Interpreter] design pattern uses the [http://en.wikipedia.org/wiki/Composite_pattern| Composite] design patter.&lt;br /&gt;
** The [http://en.wikipedia.org/wiki/Prototype_pattern| Prototype] design pattern uses the [http://en.wikipedia.org/wiki/Singleton_pattern| Singleton] design pattern.&lt;br /&gt;
* Variant of X uses Y in its solution.&lt;br /&gt;
** Some variant of the [http://en.wikipedia.org/wiki/Bridge_pattern| Bridge] design pattern may uses the [http://en.wikipedia.org/wiki/Adapter_pattern| Adapter] design pattern.&lt;br /&gt;
* X is similar to Y.&lt;br /&gt;
** The [http://en.wikipedia.org/wiki/Mediator_pattern| Mediator] design pattern is similar to the [http://en.wikipedia.org/wiki/Facade_pattern| Facade] design pattern.&lt;br /&gt;
&lt;br /&gt;
Using these relationships Zimmer placed design pattern in 3 layers.&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;4&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Layer'''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Design Pattern'''&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Basic design patterns and techniques.&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Singleton_pattern| Singleton], [http://en.wikipedia.org/wiki/Template_method_pattern| Template Method], [http://en.wikipedia.org/wiki/Mediator_pattern| Mediator], [http://en.wikipedia.org/wiki/Facade_pattern| Facade], [http://en.wikipedia.org/wiki/Memento_pattern| Memento], [http://en.wikipedia.org/wiki/Iterator_pattern| Iterator], [http://en.wikipedia.org/wiki/Flyweight_pattern| Flyweight].&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Design patterns for typical software problems.&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Abstract_factory_pattern| Abstract Factory], [http://en.wikipedia.org/wiki/Builder_pattern| Builder], [http://en.wikipedia.org/wiki/Strategy_pattern| Strategy], [http://en.wikipedia.org/wiki/Observer_pattern| Observer], [http://en.wikipedia.org/wiki/Bridge_pattern| Bridge], [http://en.wikipedia.org/wiki/Adapter_pattern| Adapter], [http://en.wikipedia.org/wiki/Prototype_pattern| Prototype], [http://en.wikipedia.org/wiki/Factory_method_pattern| Factory Method], [http://en.wikipedia.org/wiki/State_pattern| State], [http://en.wikipedia.org/wiki/Command_pattern| Command], [http://en.wikipedia.org/wiki/Visitor_pattern| Visitor], [http://en.wikipedia.org/wiki/Composite_pattern| Composite], [http://en.wikipedia.org/wiki/Decorator_pattern| Decorator], [http://en.wikipedia.org/wiki/Chain-of-responsibility_pattern| Chain Of Responsibility], [http://en.wikipedia.org/wiki/Proxy_pattern| Proxy]&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Design patterns specific to an application domain.&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Interpreter_pattern| Interpreter]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Coad's Classification===&lt;br /&gt;
In 1992 Peter Coad published his first article of design patterns. According to Coad, design patterns are identified observing classes, objects and the relationships established between them[5]. In his book Object Models: Strategies, Patterns, and Applications, Peter Coad along with David North and Mark Mayfield organized patterns into various pattern families[4].&lt;br /&gt;
* '''Fundamental Pattern''': This pattern is the template that all the other patterns follow.&lt;br /&gt;
** Collection-Worker Pattern is the fundamental object model pattern.&lt;br /&gt;
* '''Transaction Patterns''': These either have transaction players or have players that commonly play with the transaction player. The transaction patterns are:&lt;br /&gt;
** Actor-Participant pattern.&lt;br /&gt;
** Participant-Transaction pattern.&lt;br /&gt;
** Place-Transaction pattern.&lt;br /&gt;
** Specific Item-Transaction pattern.&lt;br /&gt;
** Transaction-Transaction Line Item pattern.&lt;br /&gt;
** Transaction-Subsequent Transaction pattern.&lt;br /&gt;
** Transaction Line Item-Subsequent Transaction Line Item pattern.&lt;br /&gt;
** Item-Line Item pattern.&lt;br /&gt;
** Specific Item-Line Item.&lt;br /&gt;
** Item-Specific Item.&lt;br /&gt;
** Associate-Other Associate.&lt;br /&gt;
** Specific Item-Hierarchical Item.&lt;br /&gt;
* '''Aggregate Patterns''': These patterns interconnect with other patterns. The aggregate patterns are:&lt;br /&gt;
** Container-Content pattern.&lt;br /&gt;
** Container-Container Line Item pattern.&lt;br /&gt;
** Group-Member.&lt;br /&gt;
** Assembly-Part pattern.&lt;br /&gt;
** Compound Part-Part pattern.&lt;br /&gt;
** Packet-Packet Component.&lt;br /&gt;
* '''Plan Patterns''': The plan patterns are:&lt;br /&gt;
** Plan-Step pattern.&lt;br /&gt;
** Plan-Plan Execution pattern.&lt;br /&gt;
** Plan Execution-Step Execution pattern.&lt;br /&gt;
** Step-Step Execution pattern.&lt;br /&gt;
** Plan-Plan Version pattern.&lt;br /&gt;
* '''Interaction Patterns''': These patterns, as the name suggests are patterns of interaction. The interaction patterns are:&lt;br /&gt;
** Peer-Peer pattern.&lt;br /&gt;
** Proxy-Specific Item pattern.&lt;br /&gt;
** Publisher-Subscriber pattern.&lt;br /&gt;
** Sender-Pass Through-Receiver pattern.&lt;br /&gt;
** Sender-Lookup-Receiver pattern.&lt;br /&gt;
** Caller-Dispatcher-Caller Back pattern.&lt;br /&gt;
** Gatekeeper-Request-Resource pattern.&lt;br /&gt;
&lt;br /&gt;
===Pree's Classification===&lt;br /&gt;
In his book Design Patterns for Object-Oriented Software Development, Addison-Wesley, 1995, Wolfgang Pree categorized Coad's patterns into[5]:&lt;br /&gt;
* '''Basic inheritance and interaction patterns:''' These patterns encompass primarily the basic modelling capabilities offered by object oriented programming languages.&lt;br /&gt;
* '''Patterns for structuring object-oriented software systems: '''Most of Coad's patterns belong to this category.  &lt;br /&gt;
* '''Patterns related to the [http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller MVC] framework: ''' Those of Coad's patterns that stress the framework aspect are derivatives of the Model/View/Controller framework.&lt;br /&gt;
Ignoring the fine-grained[5] pattern classification proposed by Gamma's catalog, Pree applied the following classification of the listed patterns.&lt;br /&gt;
* '''Patterns relying on abstract coupling: '''Most of the patterns in the catalog are based on abstractly coupled classes. [http://en.wikipedia.org/wiki/Factory_method_pattern| Factory Method pattern] and [http://en.wikipedia.org/wiki/Observer_pattern| Observer pattern] for example.  &lt;br /&gt;
* '''Patterns based on recursive structures: ''' [http://en.wikipedia.org/wiki/Composite_pattern| Composite] pattern, [http://en.wikipedia.org/wiki/Chain-of-responsibility_pattern| Chain Of Responsibility] pattern, [http://en.wikipedia.org/wiki/Decorator_pattern| Decorator] pattern are all based on recursive structures. &lt;br /&gt;
* '''Other Catalog patterns''': Pree summarized the rest of the patterns as follows:&lt;br /&gt;
** An [http://en.wikipedia.org/wiki/Abstract_factory_pattern| Abstract Factory] pattern is close to the [http://en.wikipedia.org/wiki/Factory_method_pattern| Factory Method] pattern&lt;br /&gt;
** [http://en.wikipedia.org/wiki/Flyweight_pattern| Flyweight] pattern represents a pattern similar to Coad's Item-Description pattern.&lt;br /&gt;
** [http://en.wikipedia.org/wiki/Singleton_pattern| Singleton] pattern is a coding patterns that limits the number of creatable instances of a class to one.&lt;br /&gt;
** [http://en.wikipedia.org/wiki/Template_method_pattern| Template Method] pattern forms the basis of all patterns dealing with with abstract classes.&lt;br /&gt;
&lt;br /&gt;
==='''Buschman et. al's Classification'''===&lt;br /&gt;
Frank Buschman and Regine Meunier identified the following categories[6]:&lt;br /&gt;
* '''Granularity: ''' Three levels of granularity can be specified. &lt;br /&gt;
** [http://en.wikipedia.org/wiki/Architectural_pattern_(computer_science) Architectural Framework]: Every software architecture is built according to an overall structuring principles described by architectural frameworks. Example: The [http://en.wikipedia.org/wiki/Model-view-controller Model-View-Controller] framework.&lt;br /&gt;
** [http://en.wikipedia.org/wiki/Design_pattern_(computer_science) Design Patterns]: These can be described as the smaller architectural units.&lt;br /&gt;
** [http://en.wikipedia.org/wiki/Programming_idiom Idioms]: Idioms represent the lowest level of a pattern and are closely related to a particular programming language. Example: [http://en.wikibooks.org/wiki/More_C%2B%2B_Idioms/Counted_Body The Counted Body] Idiom.&lt;br /&gt;
&lt;br /&gt;
*'''Functionality: '''Each pattern serves as a means to implement a particular functionality. The following categories of functionality can be distinguished:&lt;br /&gt;
** Creation of objects: Patterns may specify how to create particular instances of complex recursive or aggregate object structures. Example: [http://en.wikipedia.org/wiki/Singleton_pattern Singleton pattern]&lt;br /&gt;
** Guiding Communication between objects: Patterns may describe how to organize communication between a set of collaborating objects.&lt;br /&gt;
** Access to objects: Patterns may describe how to access the services and state of shared or remote objects in a safe way. Example: [http://en.wikipedia.org/wiki/Proxy_pattern Proxy pattern]&lt;br /&gt;
** Organizing the computation of the complex tasks: Patterns may specify how to distribute responsibilities among cooperating objects in order to solve a more complex task. Example: [http://en.wikipedia.org/wiki/Command_pattern Command pattern]&lt;br /&gt;
&lt;br /&gt;
*'''Structural Principles: ''' To achieve their functionality, patterns rely on certain architectural principles. These principles can be categorized as:&lt;br /&gt;
** Abstraction: A pattern provides an abstract view of a particular entity or task in a software system. Example: [http://en.wikipedia.org/wiki/Facade_pattern Facade pattern]&lt;br /&gt;
** Encapsulation: A pattern encapsulates details of a particular object, component, or service to remove dependencies on it from its clients or to protect these details from access. Example: [http://en.wikipedia.org/wiki/Mediator_pattern Mediator pattern]&lt;br /&gt;
** Separation of concerns: A pattern factors out specific responsibilities into separate objects or components.&lt;br /&gt;
** Coupling and Cohesion: A patterns removes dependencies between strongly coupled objects. Example: [http://en.wikipedia.org/wiki/Bridge_pattern Bridge pattern]&lt;br /&gt;
&lt;br /&gt;
This classification scheme is not intended as a means of picking out the right pattern, but merely a guide for designers helping them search for the pattern appropriate for a particular situation.&lt;br /&gt;
&lt;br /&gt;
===Tichy's Classification===&lt;br /&gt;
Walter Tichy classified several design patterns based on the kind of problems they solved. He grouped the problems into the following high-level categories[6]:&lt;br /&gt;
* Decoupling: dividing a software system into in-dependent parts in such a way that the parts can be built, changed, replaced, and reused independently. Decoupling patterns can be further classified into:&lt;br /&gt;
** Modules([http://en.wikipedia.org/wiki/Encapsulation_(computer_science)#Encapsulation Encapsulation]/[http://en.wikipedia.org/wiki/Information_hiding Information Hiding])[7]: Hide data structure and operations that are most likely to change, thus protecting other parts of the system from the effects of those changes. Examples for support of modules are &lt;br /&gt;
*** [http://en.wikipedia.org/wiki/Modula Modula's] modules.&lt;br /&gt;
*** [http://en.wikipedia.org/wiki/C_(programming_language) C's] header files.&lt;br /&gt;
***[http://en.wikipedia.org/wiki/Ada_(programming_language) Ada's] packages.&lt;br /&gt;
** Abstract Data Type[ADT]: Hide data structure and access algorithms behind a change-insensitive interface. The purpose of ADT is similar to that of Module, but an ADT is typically smaller, containing a single data type. Examples:&lt;br /&gt;
*** Repository pattern[8].&lt;br /&gt;
*** [http://en.wikipedia.org/wiki/Iterator_pattern Iterator pattern].&lt;br /&gt;
** Layers: The purpose of a layer is to provides an interface and an implementation of this interface. Example:&lt;br /&gt;
*** [http://en.wikipedia.org/wiki/Facade_pattern Facade pattern].&lt;br /&gt;
*** [http://en.wikipedia.org/wiki/Bridge_pattern Bridge pattern].&lt;br /&gt;
*** [http://en.wikipedia.org/wiki/Adapter_pattern Adapter pattern].&lt;br /&gt;
*** [http://en.wikipedia.org/wiki/Proxy_pattern Proxy pattern].&lt;br /&gt;
** Pipeline: Pass data through a sequence of transformations (filters) connected by channels (pipes).&lt;br /&gt;
** Event Notification: Let independent parts interact by an-nouncing and responding to events (loose coupling).&lt;br /&gt;
** Framework: Provide a complete or nearly complete application layer that can be extended by sub-classing.&lt;br /&gt;
* Variant Management: treating different objects uniformly by factoring out their commonality.&lt;br /&gt;
** Superclass: Provide uniform treatment of variant classes by placing common interface into a super-class; variants are subclasses. Example:&lt;br /&gt;
*** [http://en.wikipedia.org/wiki/Strategy_pattern Strategy pattern].&lt;br /&gt;
*** [http://en.wikipedia.org/wiki/Composite_pattern Composite pattern].&lt;br /&gt;
** [http://en.wikipedia.org/wiki/Visitor_pattern Visitor]: Add new variations of operations to stable class hierarchy.&lt;br /&gt;
** [http://en.wikipedia.org/wiki/Template_method_pattern Template Method]: Specify algorithm skeleton using primitives; vary primitives in subclasses or by delegation. &lt;br /&gt;
* State Handling: generic manipulation of object state.&lt;br /&gt;
* Control: control of execution and method selec-tion.&lt;br /&gt;
* Virtual Machines: simulated processors.&lt;br /&gt;
* Convenience Patterns: simplified coding.&lt;br /&gt;
* Compound Patterns: patterns composed from others, with the original patterns visible.&lt;br /&gt;
* Concurrency: controlling parallel and concurrent execution.&lt;br /&gt;
* Distribution: problems germane to distributed systems.&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
[1] http://www.developer.com/design/article.php/1474561/What-Are-Design-Patterns-and-Do-I-Need-Them.htm&amp;lt;br&amp;gt;&lt;br /&gt;
[2] http://www.cs.umu.se/~jubo/ExJobbs/MK/patterns.htm&amp;lt;br&amp;gt;&lt;br /&gt;
[3] [http://reference.kfupm.edu.sa/content/r/e/relationships_between_design_patterns__148528.pdf Relationships between Design Patterns, by Walter Zimmer, Forschungszentrum Informatik, Bereich Programmstrukturen, 1995]&amp;lt;br&amp;gt;&lt;br /&gt;
[4] Peter Coad, with David North, and Mark Mayfield. Object Models: Strategies, Patterns, and Applications. Englewood Cliffs, NJ: Prentice Hall, 1995.&amp;lt;br&amp;gt;&lt;br /&gt;
[5] Wolfgang Pree. Design Patterns for Object-Oriented Software Development. Addison-Wesley, 1995.&amp;lt;br&amp;gt;&lt;br /&gt;
[6] Frank Buschman and Regine Meunier. “A System of Patterns.&amp;quot; In J. O. Coplien and D. C. Schmidt (eds.), Pattern Languages of Program Design. Reading, MA: Addison-Wesley, 1995, pp. 325-343.&amp;lt;br&amp;gt;&lt;br /&gt;
[6] [http://wwwipd.ira.uka.de/~tichy/publications/Catalogue.doc Tichy, Walter F (1998), A Catalogue of General-Purpose Software Design Patterns. University of Karlsruhe, Karlsruhe, Germany.]&amp;lt;br&amp;gt;&lt;br /&gt;
[7] [http://doi.acm.org/10.1145/361598.361623 Parnas, D. L. 1972. On the criteria to be used in decomposing systems into modules. Commun. ACM 15, 12 (Dec. 1972), 1053-1058.]&amp;lt;br&amp;gt; &lt;br /&gt;
[8] [http://www.cs.cmu.edu/afs/cs.cmu.edu/project/vit/ftp/pdf/PLoP95.pdf Some Patterns for Software Architectures, Mary Shaw, Carnegie Mellon University]&lt;/div&gt;</summary>
		<author><name>Quick Gun Murugan</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_12_Schemes_for_Pattern_Classification&amp;diff=25739</id>
		<title>CSC/ECE 517 Fall 2009/wiki2 12 Schemes for Pattern Classification</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_12_Schemes_for_Pattern_Classification&amp;diff=25739"/>
		<updated>2009-10-13T01:19:02Z</updated>

		<summary type="html">&lt;p&gt;Quick Gun Murugan: /* Gang of Four's Classification */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=='''Overview'''==&lt;br /&gt;
[http://en.wikipedia.org/wiki/Design_pattern_(computer_science) Design patterns] in [http://en.wikipedia.org/wiki/Software_engineering software engineering] is a time-tested reusable solution to recurring problems in [http://en.wikipedia.org/wiki/Software_design software design]. The origin of design patterns can be owed to the work of civil engineer [http://en.wikipedia.org/wiki/Christopher_Alexander Christopher Alexander], who documented his resolution to design issues in constructing buildings and towns[1]. About a decade and a half ago, software professional began to incorporate Alexanders ideas into guides for novice developers. From then on design patterns became increasingly popular.&lt;br /&gt;
&lt;br /&gt;
=='''Schemes for Pattern Classification'''==&lt;br /&gt;
===Gang of Four's Classification===&lt;br /&gt;
Design Patterns gained popularity with the book [http://en.wikipedia.org/wiki/Design_Patterns_(book) Design Patterns: Elements of Reusable Object-Oriented Software] by [http://en.wikipedia.org/wiki/Erich_Gamma Erich Gamma], [http://en.wikipedia.org/wiki/Richard_Helm Richard Helm], [http://en.wikipedia.org/wiki/Ralph_Johnson Ralph Johnson] and [http://en.wikipedia.org/wiki/John_Vlissides John Vlissides] published in 1995. In their work they used 2 criteria to categorize 23 design pattern[2].&lt;br /&gt;
* What does the pattern do?&lt;br /&gt;
** [http://en.wikipedia.org/wiki/Structural_pattern Structural] - These patterns deal with the composition of classes and their object.&lt;br /&gt;
** [http://en.wikipedia.org/wiki/Creational_pattern Creational] - These patterns deal with object creation.&lt;br /&gt;
** [http://en.wikipedia.org/wiki/Behavioral_pattern Behavioral] - These patterns deal with the interaction between classes and object and how they delegate responsibility.&lt;br /&gt;
&lt;br /&gt;
* What is the scope of the pattern?&lt;br /&gt;
** Class - The patterns deal with the relationships between classes and their subclasses. These are more static and fixed at compile time. &lt;br /&gt;
** Object - These patterns deal with object relationship. They are more dynamic and can vary at runtime.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;4&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|+ Example of Design Patterns that fall into each Category&lt;br /&gt;
|colspan=&amp;quot;5&amp;quot; align=&amp;quot;center&amp;quot;|'''Purpose'''&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Scope'''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Creational'''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Structural'''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Behavioral'''&lt;br /&gt;
|-&lt;br /&gt;
|rowspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot;|Class &lt;br /&gt;
|rowspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Factory_method_pattern Factory Method]&lt;br /&gt;
|rowspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Adapter_pattern Adapter (class)]&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Interpreter_pattern Interpreter]&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Template_method_pattern Template Method]&lt;br /&gt;
|-&lt;br /&gt;
|rowspan=&amp;quot;9&amp;quot; align=&amp;quot;center&amp;quot;|Object&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Abstract_factory_pattern Abstract Factory]&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Adapter_pattern Adapter (object)]&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Command_pattern Command]&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Prototype_pattern Prototype]&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Composite_pattern Composite]&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Mediator_pattern Mediator]&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Builder_pattern Builder]&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Bridge_pattern Bridge]&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Iterator_pattern Iterator]&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Singleton_pattern Singleton]&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Decorator_pattern Decorator]&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Memento_pattern Memento]&lt;br /&gt;
|-&lt;br /&gt;
|rowspan=&amp;quot;5&amp;quot; align=&amp;quot;center&amp;quot; &lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Facade_pattern Facade]&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Observer_pattern Observer]&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Flyweight_pattern Flyweight]&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/State_pattern State]&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Proxy_pattern Proxy]&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Strategy_pattern Strategy]&lt;br /&gt;
|-&lt;br /&gt;
|rowspan=&amp;quot;2&amp;quot;  align=&amp;quot;center&amp;quot; &lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Visitor_pattern Visitor]&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Chain-of-responsibility_pattern Chain Of Responsibility]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Zimmer's Classification===&lt;br /&gt;
Zimmer[3] classifies the relationships between the Gang of Four design patterns. Focusing on the problem and solution of each relationship, they can be classified as :&lt;br /&gt;
* X uses Y in its solution.&lt;br /&gt;
** The [http://en.wikipedia.org/wiki/Interpreter_pattern| Interpreter] design pattern uses the [http://en.wikipedia.org/wiki/Composite_pattern| Composite] design patter.&lt;br /&gt;
** The [http://en.wikipedia.org/wiki/Prototype_pattern| Prototype] design pattern uses the [http://en.wikipedia.org/wiki/Singleton_pattern| Singleton] design pattern.&lt;br /&gt;
* Variant of X uses Y in its solution.&lt;br /&gt;
** Some variant of the [http://en.wikipedia.org/wiki/Bridge_pattern| Bridge] design pattern may uses the [http://en.wikipedia.org/wiki/Adapter_pattern| Adapter] design pattern.&lt;br /&gt;
* X is similar to Y.&lt;br /&gt;
** The [http://en.wikipedia.org/wiki/Mediator_pattern| Mediator] design pattern is similar to the [http://en.wikipedia.org/wiki/Facade_pattern| Facade] design pattern.&lt;br /&gt;
&lt;br /&gt;
Using these relationships Zimmer placed design pattern in 3 layers.&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;4&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Layer'''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Design Pattern'''&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Basic design patterns and techniques.&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Singleton_pattern| Singleton], [http://en.wikipedia.org/wiki/Template_method_pattern| Template Method], [http://en.wikipedia.org/wiki/Mediator_pattern| Mediator], [http://en.wikipedia.org/wiki/Facade_pattern| Facade], [http://en.wikipedia.org/wiki/Memento_pattern| Memento], [http://en.wikipedia.org/wiki/Iterator_pattern| Iterator], [http://en.wikipedia.org/wiki/Flyweight_pattern| Flyweight].&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Design patterns for typical software problems.&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Abstract_factory_pattern| Abstract Factory], [http://en.wikipedia.org/wiki/Builder_pattern| Builder], [http://en.wikipedia.org/wiki/Strategy_pattern| Strategy], [http://en.wikipedia.org/wiki/Observer_pattern| Observer], [http://en.wikipedia.org/wiki/Bridge_pattern| Bridge], [http://en.wikipedia.org/wiki/Adapter_pattern| Adapter], [http://en.wikipedia.org/wiki/Prototype_pattern| Prototype], [http://en.wikipedia.org/wiki/Factory_method_pattern| Factory Method], [http://en.wikipedia.org/wiki/State_pattern| State], [http://en.wikipedia.org/wiki/Command_pattern| Command], [http://en.wikipedia.org/wiki/Visitor_pattern| Visitor], [http://en.wikipedia.org/wiki/Composite_pattern| Composite], [http://en.wikipedia.org/wiki/Decorator_pattern| Decorator], [http://en.wikipedia.org/wiki/Chain-of-responsibility_pattern| Chain Of Responsibility], [http://en.wikipedia.org/wiki/Proxy_pattern| Proxy]&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Design patterns specific to an application domain.&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Interpreter_pattern| Interpreter]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Coad's Classification===&lt;br /&gt;
In 1992 Peter Coad published his first article of design patterns. According to Coad, design patterns are identified observing classes, objects and the relationships established between them[5]. In his book Object Models: Strategies, Patterns, and Applications, Peter Coad along with David North and Mark Mayfield organized patterns into various pattern families[4].&lt;br /&gt;
* '''Fundamental Pattern''': This pattern is the template that all the other patterns follow.&lt;br /&gt;
** Collection-Worker Pattern is the fundamental object model pattern.&lt;br /&gt;
* '''Transaction Patterns''': These either have transaction players or have players that commonly play with the transaction player. The transaction patterns are:&lt;br /&gt;
** Actor-Participant pattern.&lt;br /&gt;
** Participant-Transaction pattern.&lt;br /&gt;
** Place-Transaction pattern.&lt;br /&gt;
** Specific Item-Transaction pattern.&lt;br /&gt;
** Transaction-Transaction Line Item pattern.&lt;br /&gt;
** Transaction-Subsequent Transaction pattern.&lt;br /&gt;
** Transaction Line Item-Subsequent Transaction Line Item pattern.&lt;br /&gt;
** Item-Line Item pattern.&lt;br /&gt;
** Specific Item-Line Item.&lt;br /&gt;
** Item-Specific Item.&lt;br /&gt;
** Associate-Other Associate.&lt;br /&gt;
** Specific Item-Hierarchical Item.&lt;br /&gt;
* '''Aggregate Patterns''': These patterns interconnect with other patterns. The aggregate patterns are:&lt;br /&gt;
** Container-Content pattern.&lt;br /&gt;
** Container-Container Line Item pattern.&lt;br /&gt;
** Group-Member.&lt;br /&gt;
** Assembly-Part pattern.&lt;br /&gt;
** Compound Part-Part pattern.&lt;br /&gt;
** Packet-Packet Component.&lt;br /&gt;
* '''Plan Patterns''': The plan patterns are:&lt;br /&gt;
** Plan-Step pattern.&lt;br /&gt;
** Plan-Plan Execution pattern.&lt;br /&gt;
** Plan Execution-Step Execution pattern.&lt;br /&gt;
** Step-Step Execution pattern.&lt;br /&gt;
** Plan-Plan Version pattern.&lt;br /&gt;
* '''Interaction Patterns''': These patterns, as the name suggests are patterns of interaction. The interaction patterns are:&lt;br /&gt;
** Peer-Peer pattern.&lt;br /&gt;
** Proxy-Specific Item pattern.&lt;br /&gt;
** Publisher-Subscriber pattern.&lt;br /&gt;
** Sender-Pass Through-Receiver pattern.&lt;br /&gt;
** Sender-Lookup-Receiver pattern.&lt;br /&gt;
** Caller-Dispatcher-Caller Back pattern.&lt;br /&gt;
** Gatekeeper-Request-Resource pattern.&lt;br /&gt;
&lt;br /&gt;
===Pree's Classification===&lt;br /&gt;
In his book Design Patterns for Object-Oriented Software Development, Addison-Wesley, 1995, Wolfgang Pree categorized Coad's patterns into[5]:&lt;br /&gt;
* '''Basic inheritance and interaction patterns:''' These patterns encompass primarily the basic modelling capabilities offered by object oriented programming languages.&lt;br /&gt;
* '''Patterns for structuring object-oriented software systems: '''Most of Coad's patterns belong to this category.  &lt;br /&gt;
* '''Patterns related to the [http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller MVC] framework: ''' Those of Coad's patterns that stress the framework aspect are derivatives of the Model/View/Controller framework.&lt;br /&gt;
Ignoring the fine-grained[5] pattern classification proposed by Gamma's catalog, Pree applied the following classification of the listed patterns.&lt;br /&gt;
* '''Patterns relying on abstract coupling: '''Most of the patterns in the catalog are based on abstractly coupled classes. [http://en.wikipedia.org/wiki/Factory_method_pattern| Factory Method pattern] and [http://en.wikipedia.org/wiki/Observer_pattern| Observer pattern] for example.  &lt;br /&gt;
* '''Patterns based on recursive structures: ''' [http://en.wikipedia.org/wiki/Composite_pattern| Composite] pattern, [http://en.wikipedia.org/wiki/Chain-of-responsibility_pattern| Chain Of Responsibility] pattern, [http://en.wikipedia.org/wiki/Decorator_pattern| Decorator] pattern are all based on recursive structures. &lt;br /&gt;
* '''Other Catalog patterns''': Pree summarized the rest of the patterns as follows:&lt;br /&gt;
** An [http://en.wikipedia.org/wiki/Abstract_factory_pattern| Abstract Factory] pattern is close to the [http://en.wikipedia.org/wiki/Factory_method_pattern| Factory Method] pattern&lt;br /&gt;
** [http://en.wikipedia.org/wiki/Flyweight_pattern| Flyweight] pattern represents a pattern similar to Coad's Item-Description pattern.&lt;br /&gt;
** [http://en.wikipedia.org/wiki/Singleton_pattern| Singleton] pattern is a coding patterns that limits the number of creatable instances of a class to one.&lt;br /&gt;
** [http://en.wikipedia.org/wiki/Template_method_pattern| Template Method] pattern forms the basis of all patterns dealing with with abstract classes.&lt;br /&gt;
&lt;br /&gt;
==='''Buschman et. al's Classification'''===&lt;br /&gt;
Frank Buschman and Regine Meunier identified the following categories[6]:&lt;br /&gt;
* '''Granularity: ''' Three levels of granularity can be specified. &lt;br /&gt;
** [http://en.wikipedia.org/wiki/Architectural_pattern_(computer_science) Architectural Framework]: Every software architecture is built according to an overall structuring principles described by architectural frameworks. Example: The [http://en.wikipedia.org/wiki/Model-view-controller Model-View-Controller] framework.&lt;br /&gt;
** [http://en.wikipedia.org/wiki/Design_pattern_(computer_science) Design Patterns]: These can be described as the smaller architectural units.&lt;br /&gt;
** [http://en.wikipedia.org/wiki/Programming_idiom Idioms]: Idioms represent the lowest level of a pattern and are closely related to a particular programming language. Example: [http://en.wikibooks.org/wiki/More_C%2B%2B_Idioms/Counted_Body The Counted Body] Idiom.&lt;br /&gt;
&lt;br /&gt;
*'''Functionality: '''Each pattern serves as a means to implement a particular functionality. The following categories of functionality can be distinguished:&lt;br /&gt;
** Creation of objects: Patterns may specify how to create particular instances of complex recursive or aggregate object structures. Example: [http://en.wikipedia.org/wiki/Singleton_pattern Singleton pattern]&lt;br /&gt;
** Guiding Communication between objects: Patterns may describe how to organize communication between a set of collaborating objects.&lt;br /&gt;
** Access to objects: Patterns may describe how to access the services and state of shared or remote objects in a safe way. Example: [http://en.wikipedia.org/wiki/Proxy_pattern Proxy pattern]&lt;br /&gt;
** Organizing the computation of the complex tasks: Patterns may specify how to distribute responsibilities among cooperating objects in order to solve a more complex task. Example: [http://en.wikipedia.org/wiki/Command_pattern Command pattern]&lt;br /&gt;
&lt;br /&gt;
*'''Structural Principles: ''' To achieve their functionality, patterns rely on certain architectural principles. These principles can be categorized as:&lt;br /&gt;
** Abstraction: A pattern provides an abstract view of a particular entity or task in a software system. Example: [http://en.wikipedia.org/wiki/Facade_pattern Facade pattern]&lt;br /&gt;
** Encapsulation: A pattern encapsulates details of a particular object, component, or service to remove dependencies on it from its clients or to protect these details from access. Example: [http://en.wikipedia.org/wiki/Mediator_pattern Mediator pattern]&lt;br /&gt;
** Separation of concerns: A pattern factors out specific responsibilities into separate objects or components.&lt;br /&gt;
** Coupling and Cohesion: A patterns removes dependencies between strongly coupled objects. Example: [http://en.wikipedia.org/wiki/Bridge_pattern Bridge pattern]&lt;br /&gt;
&lt;br /&gt;
This classification scheme is not intended as a means of picking out the right pattern, but merely a guide for designers helping them search for the pattern appropriate for a particular situation.&lt;br /&gt;
&lt;br /&gt;
===Tichy's Classification===&lt;br /&gt;
Walter Tichy classified several design patterns based on the kind of problems they solved. He grouped the problems into the following high-level categories[6]:&lt;br /&gt;
* Decoupling: dividing a software system into in-dependent parts in such a way that the parts can be built, changed, replaced, and reused independently. Decoupling patterns can be further classified into:&lt;br /&gt;
** Modules([http://en.wikipedia.org/wiki/Encapsulation_(computer_science)#Encapsulation Encapsulation]/[http://en.wikipedia.org/wiki/Information_hiding Information Hiding])[7]: Hide data structure and operations that are most likely to change, thus protecting other parts of the system from the effects of those changes. Examples for support of modules are &lt;br /&gt;
*** [http://en.wikipedia.org/wiki/Modula Modula's] modules.&lt;br /&gt;
*** [http://en.wikipedia.org/wiki/C_(programming_language) C's] header files.&lt;br /&gt;
***[http://en.wikipedia.org/wiki/Ada_(programming_language) Ada's] packages.&lt;br /&gt;
** Abstract Data Type[ADT]: Hide data structure and access algorithms behind a change-insensitive interface. The purpose of ADT is similar to that of Module, but an ADT is typically smaller, containing a single data type. Examples:&lt;br /&gt;
*** Repository pattern[8].&lt;br /&gt;
*** [http://en.wikipedia.org/wiki/Iterator_pattern Iterator pattern].&lt;br /&gt;
** Layers: The purpose of a layer is to provides an interface and an implementation of this interface. Example:&lt;br /&gt;
*** [http://en.wikipedia.org/wiki/Facade_pattern Facade pattern].&lt;br /&gt;
*** [http://en.wikipedia.org/wiki/Bridge_pattern Bridge pattern].&lt;br /&gt;
*** [http://en.wikipedia.org/wiki/Adapter_pattern Adapter pattern].&lt;br /&gt;
*** [http://en.wikipedia.org/wiki/Proxy_pattern Proxy pattern].&lt;br /&gt;
** Pipeline: Pass data through a sequence of transformations (filters) connected by channels (pipes).&lt;br /&gt;
** Event Notification: Let independent parts interact by an-nouncing and responding to events (loose coupling).&lt;br /&gt;
** Framework: Provide a complete or nearly complete application layer that can be extended by sub-classing.&lt;br /&gt;
* Variant Management: treating different objects uniformly by factoring out their commonality.&lt;br /&gt;
** Superclass: Provide uniform treatment of variant classes by placing common interface into a super-class; variants are subclasses. Example:&lt;br /&gt;
*** [http://en.wikipedia.org/wiki/Strategy_pattern Strategy pattern].&lt;br /&gt;
*** [http://en.wikipedia.org/wiki/Composite_pattern Composite pattern].&lt;br /&gt;
** [http://en.wikipedia.org/wiki/Visitor_pattern Visitor]: Add new variations of operations to stable class hierarchy.&lt;br /&gt;
** [http://en.wikipedia.org/wiki/Template_method_pattern Template Method]: Specify algorithm skeleton using primitives; vary primitives in subclasses or by delegation. &lt;br /&gt;
* State Handling: generic manipulation of object state.&lt;br /&gt;
* Control: control of execution and method selec-tion.&lt;br /&gt;
* Virtual Machines: simulated processors.&lt;br /&gt;
* Convenience Patterns: simplified coding.&lt;br /&gt;
* Compound Patterns: patterns composed from others, with the original patterns visible.&lt;br /&gt;
* Concurrency: controlling parallel and concurrent execution.&lt;br /&gt;
* Distribution: problems germane to distributed systems.&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
[1] http://www.developer.com/design/article.php/1474561/What-Are-Design-Patterns-and-Do-I-Need-Them.htm&amp;lt;br&amp;gt;&lt;br /&gt;
[2] http://www.cs.umu.se/~jubo/ExJobbs/MK/patterns.htm&amp;lt;br&amp;gt;&lt;br /&gt;
[3] [http://reference.kfupm.edu.sa/content/r/e/relationships_between_design_patterns__148528.pdf Relationships between Design Patterns, by Walter Zimmer, Forschungszentrum Informatik, Bereich Programmstrukturen, 1995]&amp;lt;br&amp;gt;&lt;br /&gt;
[4] Peter Coad, with David North, and Mark Mayfield. Object Models: Strategies, Patterns, and Applications. Englewood Cliffs, NJ: Prentice Hall, 1995.&amp;lt;br&amp;gt;&lt;br /&gt;
[5] Wolfgang Pree. Design Patterns for Object-Oriented Software Development. Addison-Wesley, 1995.&amp;lt;br&amp;gt;&lt;br /&gt;
[6] Frank Buschman and Regine Meunier. “A System of Patterns.&amp;quot; In J. O. Coplien and D. C. Schmidt (eds.), Pattern Languages of Program Design. Reading, MA: Addison-Wesley, 1995, pp. 325-343.&amp;lt;br&amp;gt;&lt;br /&gt;
[6] [http://wwwipd.ira.uka.de/~tichy/publications/Catalogue.doc Tichy, Walter F (1998), A Catalogue of General-Purpose Software Design Patterns. University of Karlsruhe, Karlsruhe, Germany.]&amp;lt;br&amp;gt;&lt;br /&gt;
[7] [http://doi.acm.org/10.1145/361598.361623 Parnas, D. L. 1972. On the criteria to be used in decomposing systems into modules. Commun. ACM 15, 12 (Dec. 1972), 1053-1058.]&amp;lt;br&amp;gt; &lt;br /&gt;
[8] [http://www.cs.cmu.edu/afs/cs.cmu.edu/project/vit/ftp/pdf/PLoP95.pdf Some Patterns for Software Architectures, Mary Shaw, Carnegie Mellon University]&lt;/div&gt;</summary>
		<author><name>Quick Gun Murugan</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_12_Schemes_for_Pattern_Classification&amp;diff=25738</id>
		<title>CSC/ECE 517 Fall 2009/wiki2 12 Schemes for Pattern Classification</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_12_Schemes_for_Pattern_Classification&amp;diff=25738"/>
		<updated>2009-10-13T01:17:42Z</updated>

		<summary type="html">&lt;p&gt;Quick Gun Murugan: /* Gang of Four's Classification */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=='''Overview'''==&lt;br /&gt;
[http://en.wikipedia.org/wiki/Design_pattern_(computer_science) Design patterns] in [http://en.wikipedia.org/wiki/Software_engineering software engineering] is a time-tested reusable solution to recurring problems in [http://en.wikipedia.org/wiki/Software_design software design]. The origin of design patterns can be owed to the work of civil engineer [http://en.wikipedia.org/wiki/Christopher_Alexander Christopher Alexander], who documented his resolution to design issues in constructing buildings and towns[1]. About a decade and a half ago, software professional began to incorporate Alexanders ideas into guides for novice developers. From then on design patterns became increasingly popular.&lt;br /&gt;
&lt;br /&gt;
=='''Schemes for Pattern Classification'''==&lt;br /&gt;
===Gang of Four's Classification===&lt;br /&gt;
Design Patterns gained popularity with the book [http://en.wikipedia.org/wiki/Design_Patterns_(book) Design Patterns: Elements of Reusable Object-Oriented Software] by [http://en.wikipedia.org/wiki/Erich_Gamma Erich Gamma], [http://en.wikipedia.org/wiki/Richard_Helm Richard Helm], [http://en.wikipedia.org/wiki/Ralph_Johnson Ralph Johnson] and [http://en.wikipedia.org/wiki/John_Vlissides John Vlissides] published in 1995. In their work they used 2 criteria to categorize 23 design pattern[2].&lt;br /&gt;
* What does the pattern do?&lt;br /&gt;
** [http://en.wikipedia.org/wiki/Structural_pattern Structural] - These patterns deal with the composition of classes and their object.&lt;br /&gt;
** [http://en.wikipedia.org/wiki/Creational_pattern Creational] - These patterns deal with object creation.&lt;br /&gt;
** [http://en.wikipedia.org/wiki/Behavioral_pattern Behavioral] - These patterns deal with the interaction between classes and object and how they delegate responsibility.&lt;br /&gt;
&lt;br /&gt;
* What is the scope of the pattern?&lt;br /&gt;
** Class - The patterns deal with the relationships between classes and their subclasses. These are more static and fixed at compile time. &lt;br /&gt;
** Object - These patterns deal with object relationship. They are more dynamic and can vary at runtime.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;4&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|+ Example of Design Patterns that fall into each Category&lt;br /&gt;
|colspan=&amp;quot;5&amp;quot; align=&amp;quot;center&amp;quot;|'''Purpose'''&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Scope'''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Creational'''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Structural'''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Behavioral'''&lt;br /&gt;
|-&lt;br /&gt;
|rowspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot;|Class &lt;br /&gt;
|rowspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Factory_method_pattern Factory Method]&lt;br /&gt;
|rowspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Adapter_pattern Adapter (class)]&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Interpreter_pattern Interpreter]&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Template_method_pattern Template Method]&lt;br /&gt;
|-&lt;br /&gt;
|rowspan=&amp;quot;9&amp;quot; align=&amp;quot;center&amp;quot;|Object&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Abstract_factory_pattern Abstract Factory]&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Adapter_pattern Adapter (object)]&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Command_pattern Command]&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Prototype_pattern Prototype]&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Composite_pattern Composite]&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Mediator_pattern Mediator]&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Builder_pattern Builder]&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Bridge_pattern Bridge]&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Iterator_pattern Iterator]&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Singleton_pattern Singleton]&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Decorator_pattern Decorator]&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Memento_pattern Memento]&lt;br /&gt;
|-&lt;br /&gt;
|rowspan=&amp;quot;5&amp;quot; align=&amp;quot;center&amp;quot; &lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Facade_pattern Facade]&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Observer_pattern Observer]&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Flyweight_pattern Flyweight]&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/State_pattern State]&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Proxy_pattern Proxy]&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Strategy_pattern Strategy]&lt;br /&gt;
|-&lt;br /&gt;
|rowspan=&amp;quot;2&amp;quot;  align=&amp;quot;center&amp;quot; &lt;br /&gt;
|align=&amp;quot;center&amp;quot; [http://en.wikipedia.org/wiki/Visitor_pattern Visitor]&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Chain-of-responsibility_pattern Chain Of Responsibility]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Zimmer's Classification===&lt;br /&gt;
Zimmer[3] classifies the relationships between the Gang of Four design patterns. Focusing on the problem and solution of each relationship, they can be classified as :&lt;br /&gt;
* X uses Y in its solution.&lt;br /&gt;
** The [http://en.wikipedia.org/wiki/Interpreter_pattern| Interpreter] design pattern uses the [http://en.wikipedia.org/wiki/Composite_pattern| Composite] design patter.&lt;br /&gt;
** The [http://en.wikipedia.org/wiki/Prototype_pattern| Prototype] design pattern uses the [http://en.wikipedia.org/wiki/Singleton_pattern| Singleton] design pattern.&lt;br /&gt;
* Variant of X uses Y in its solution.&lt;br /&gt;
** Some variant of the [http://en.wikipedia.org/wiki/Bridge_pattern| Bridge] design pattern may uses the [http://en.wikipedia.org/wiki/Adapter_pattern| Adapter] design pattern.&lt;br /&gt;
* X is similar to Y.&lt;br /&gt;
** The [http://en.wikipedia.org/wiki/Mediator_pattern| Mediator] design pattern is similar to the [http://en.wikipedia.org/wiki/Facade_pattern| Facade] design pattern.&lt;br /&gt;
&lt;br /&gt;
Using these relationships Zimmer placed design pattern in 3 layers.&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;4&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Layer'''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Design Pattern'''&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Basic design patterns and techniques.&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Singleton_pattern| Singleton], [http://en.wikipedia.org/wiki/Template_method_pattern| Template Method], [http://en.wikipedia.org/wiki/Mediator_pattern| Mediator], [http://en.wikipedia.org/wiki/Facade_pattern| Facade], [http://en.wikipedia.org/wiki/Memento_pattern| Memento], [http://en.wikipedia.org/wiki/Iterator_pattern| Iterator], [http://en.wikipedia.org/wiki/Flyweight_pattern| Flyweight].&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Design patterns for typical software problems.&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Abstract_factory_pattern| Abstract Factory], [http://en.wikipedia.org/wiki/Builder_pattern| Builder], [http://en.wikipedia.org/wiki/Strategy_pattern| Strategy], [http://en.wikipedia.org/wiki/Observer_pattern| Observer], [http://en.wikipedia.org/wiki/Bridge_pattern| Bridge], [http://en.wikipedia.org/wiki/Adapter_pattern| Adapter], [http://en.wikipedia.org/wiki/Prototype_pattern| Prototype], [http://en.wikipedia.org/wiki/Factory_method_pattern| Factory Method], [http://en.wikipedia.org/wiki/State_pattern| State], [http://en.wikipedia.org/wiki/Command_pattern| Command], [http://en.wikipedia.org/wiki/Visitor_pattern| Visitor], [http://en.wikipedia.org/wiki/Composite_pattern| Composite], [http://en.wikipedia.org/wiki/Decorator_pattern| Decorator], [http://en.wikipedia.org/wiki/Chain-of-responsibility_pattern| Chain Of Responsibility], [http://en.wikipedia.org/wiki/Proxy_pattern| Proxy]&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Design patterns specific to an application domain.&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Interpreter_pattern| Interpreter]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Coad's Classification===&lt;br /&gt;
In 1992 Peter Coad published his first article of design patterns. According to Coad, design patterns are identified observing classes, objects and the relationships established between them[5]. In his book Object Models: Strategies, Patterns, and Applications, Peter Coad along with David North and Mark Mayfield organized patterns into various pattern families[4].&lt;br /&gt;
* '''Fundamental Pattern''': This pattern is the template that all the other patterns follow.&lt;br /&gt;
** Collection-Worker Pattern is the fundamental object model pattern.&lt;br /&gt;
* '''Transaction Patterns''': These either have transaction players or have players that commonly play with the transaction player. The transaction patterns are:&lt;br /&gt;
** Actor-Participant pattern.&lt;br /&gt;
** Participant-Transaction pattern.&lt;br /&gt;
** Place-Transaction pattern.&lt;br /&gt;
** Specific Item-Transaction pattern.&lt;br /&gt;
** Transaction-Transaction Line Item pattern.&lt;br /&gt;
** Transaction-Subsequent Transaction pattern.&lt;br /&gt;
** Transaction Line Item-Subsequent Transaction Line Item pattern.&lt;br /&gt;
** Item-Line Item pattern.&lt;br /&gt;
** Specific Item-Line Item.&lt;br /&gt;
** Item-Specific Item.&lt;br /&gt;
** Associate-Other Associate.&lt;br /&gt;
** Specific Item-Hierarchical Item.&lt;br /&gt;
* '''Aggregate Patterns''': These patterns interconnect with other patterns. The aggregate patterns are:&lt;br /&gt;
** Container-Content pattern.&lt;br /&gt;
** Container-Container Line Item pattern.&lt;br /&gt;
** Group-Member.&lt;br /&gt;
** Assembly-Part pattern.&lt;br /&gt;
** Compound Part-Part pattern.&lt;br /&gt;
** Packet-Packet Component.&lt;br /&gt;
* '''Plan Patterns''': The plan patterns are:&lt;br /&gt;
** Plan-Step pattern.&lt;br /&gt;
** Plan-Plan Execution pattern.&lt;br /&gt;
** Plan Execution-Step Execution pattern.&lt;br /&gt;
** Step-Step Execution pattern.&lt;br /&gt;
** Plan-Plan Version pattern.&lt;br /&gt;
* '''Interaction Patterns''': These patterns, as the name suggests are patterns of interaction. The interaction patterns are:&lt;br /&gt;
** Peer-Peer pattern.&lt;br /&gt;
** Proxy-Specific Item pattern.&lt;br /&gt;
** Publisher-Subscriber pattern.&lt;br /&gt;
** Sender-Pass Through-Receiver pattern.&lt;br /&gt;
** Sender-Lookup-Receiver pattern.&lt;br /&gt;
** Caller-Dispatcher-Caller Back pattern.&lt;br /&gt;
** Gatekeeper-Request-Resource pattern.&lt;br /&gt;
&lt;br /&gt;
===Pree's Classification===&lt;br /&gt;
In his book Design Patterns for Object-Oriented Software Development, Addison-Wesley, 1995, Wolfgang Pree categorized Coad's patterns into[5]:&lt;br /&gt;
* '''Basic inheritance and interaction patterns:''' These patterns encompass primarily the basic modelling capabilities offered by object oriented programming languages.&lt;br /&gt;
* '''Patterns for structuring object-oriented software systems: '''Most of Coad's patterns belong to this category.  &lt;br /&gt;
* '''Patterns related to the [http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller MVC] framework: ''' Those of Coad's patterns that stress the framework aspect are derivatives of the Model/View/Controller framework.&lt;br /&gt;
Ignoring the fine-grained[5] pattern classification proposed by Gamma's catalog, Pree applied the following classification of the listed patterns.&lt;br /&gt;
* '''Patterns relying on abstract coupling: '''Most of the patterns in the catalog are based on abstractly coupled classes. [http://en.wikipedia.org/wiki/Factory_method_pattern| Factory Method pattern] and [http://en.wikipedia.org/wiki/Observer_pattern| Observer pattern] for example.  &lt;br /&gt;
* '''Patterns based on recursive structures: ''' [http://en.wikipedia.org/wiki/Composite_pattern| Composite] pattern, [http://en.wikipedia.org/wiki/Chain-of-responsibility_pattern| Chain Of Responsibility] pattern, [http://en.wikipedia.org/wiki/Decorator_pattern| Decorator] pattern are all based on recursive structures. &lt;br /&gt;
* '''Other Catalog patterns''': Pree summarized the rest of the patterns as follows:&lt;br /&gt;
** An [http://en.wikipedia.org/wiki/Abstract_factory_pattern| Abstract Factory] pattern is close to the [http://en.wikipedia.org/wiki/Factory_method_pattern| Factory Method] pattern&lt;br /&gt;
** [http://en.wikipedia.org/wiki/Flyweight_pattern| Flyweight] pattern represents a pattern similar to Coad's Item-Description pattern.&lt;br /&gt;
** [http://en.wikipedia.org/wiki/Singleton_pattern| Singleton] pattern is a coding patterns that limits the number of creatable instances of a class to one.&lt;br /&gt;
** [http://en.wikipedia.org/wiki/Template_method_pattern| Template Method] pattern forms the basis of all patterns dealing with with abstract classes.&lt;br /&gt;
&lt;br /&gt;
==='''Buschman et. al's Classification'''===&lt;br /&gt;
Frank Buschman and Regine Meunier identified the following categories[6]:&lt;br /&gt;
* '''Granularity: ''' Three levels of granularity can be specified. &lt;br /&gt;
** [http://en.wikipedia.org/wiki/Architectural_pattern_(computer_science) Architectural Framework]: Every software architecture is built according to an overall structuring principles described by architectural frameworks. Example: The [http://en.wikipedia.org/wiki/Model-view-controller Model-View-Controller] framework.&lt;br /&gt;
** [http://en.wikipedia.org/wiki/Design_pattern_(computer_science) Design Patterns]: These can be described as the smaller architectural units.&lt;br /&gt;
** [http://en.wikipedia.org/wiki/Programming_idiom Idioms]: Idioms represent the lowest level of a pattern and are closely related to a particular programming language. Example: [http://en.wikibooks.org/wiki/More_C%2B%2B_Idioms/Counted_Body The Counted Body] Idiom.&lt;br /&gt;
&lt;br /&gt;
*'''Functionality: '''Each pattern serves as a means to implement a particular functionality. The following categories of functionality can be distinguished:&lt;br /&gt;
** Creation of objects: Patterns may specify how to create particular instances of complex recursive or aggregate object structures. Example: [http://en.wikipedia.org/wiki/Singleton_pattern Singleton pattern]&lt;br /&gt;
** Guiding Communication between objects: Patterns may describe how to organize communication between a set of collaborating objects.&lt;br /&gt;
** Access to objects: Patterns may describe how to access the services and state of shared or remote objects in a safe way. Example: [http://en.wikipedia.org/wiki/Proxy_pattern Proxy pattern]&lt;br /&gt;
** Organizing the computation of the complex tasks: Patterns may specify how to distribute responsibilities among cooperating objects in order to solve a more complex task. Example: [http://en.wikipedia.org/wiki/Command_pattern Command pattern]&lt;br /&gt;
&lt;br /&gt;
*'''Structural Principles: ''' To achieve their functionality, patterns rely on certain architectural principles. These principles can be categorized as:&lt;br /&gt;
** Abstraction: A pattern provides an abstract view of a particular entity or task in a software system. Example: [http://en.wikipedia.org/wiki/Facade_pattern Facade pattern]&lt;br /&gt;
** Encapsulation: A pattern encapsulates details of a particular object, component, or service to remove dependencies on it from its clients or to protect these details from access. Example: [http://en.wikipedia.org/wiki/Mediator_pattern Mediator pattern]&lt;br /&gt;
** Separation of concerns: A pattern factors out specific responsibilities into separate objects or components.&lt;br /&gt;
** Coupling and Cohesion: A patterns removes dependencies between strongly coupled objects. Example: [http://en.wikipedia.org/wiki/Bridge_pattern Bridge pattern]&lt;br /&gt;
&lt;br /&gt;
This classification scheme is not intended as a means of picking out the right pattern, but merely a guide for designers helping them search for the pattern appropriate for a particular situation.&lt;br /&gt;
&lt;br /&gt;
===Tichy's Classification===&lt;br /&gt;
Walter Tichy classified several design patterns based on the kind of problems they solved. He grouped the problems into the following high-level categories[6]:&lt;br /&gt;
* Decoupling: dividing a software system into in-dependent parts in such a way that the parts can be built, changed, replaced, and reused independently. Decoupling patterns can be further classified into:&lt;br /&gt;
** Modules([http://en.wikipedia.org/wiki/Encapsulation_(computer_science)#Encapsulation Encapsulation]/[http://en.wikipedia.org/wiki/Information_hiding Information Hiding])[7]: Hide data structure and operations that are most likely to change, thus protecting other parts of the system from the effects of those changes. Examples for support of modules are &lt;br /&gt;
*** [http://en.wikipedia.org/wiki/Modula Modula's] modules.&lt;br /&gt;
*** [http://en.wikipedia.org/wiki/C_(programming_language) C's] header files.&lt;br /&gt;
***[http://en.wikipedia.org/wiki/Ada_(programming_language) Ada's] packages.&lt;br /&gt;
** Abstract Data Type[ADT]: Hide data structure and access algorithms behind a change-insensitive interface. The purpose of ADT is similar to that of Module, but an ADT is typically smaller, containing a single data type. Examples:&lt;br /&gt;
*** Repository pattern[8].&lt;br /&gt;
*** [http://en.wikipedia.org/wiki/Iterator_pattern Iterator pattern].&lt;br /&gt;
** Layers: The purpose of a layer is to provides an interface and an implementation of this interface. Example:&lt;br /&gt;
*** [http://en.wikipedia.org/wiki/Facade_pattern Facade pattern].&lt;br /&gt;
*** [http://en.wikipedia.org/wiki/Bridge_pattern Bridge pattern].&lt;br /&gt;
*** [http://en.wikipedia.org/wiki/Adapter_pattern Adapter pattern].&lt;br /&gt;
*** [http://en.wikipedia.org/wiki/Proxy_pattern Proxy pattern].&lt;br /&gt;
** Pipeline: Pass data through a sequence of transformations (filters) connected by channels (pipes).&lt;br /&gt;
** Event Notification: Let independent parts interact by an-nouncing and responding to events (loose coupling).&lt;br /&gt;
** Framework: Provide a complete or nearly complete application layer that can be extended by sub-classing.&lt;br /&gt;
* Variant Management: treating different objects uniformly by factoring out their commonality.&lt;br /&gt;
** Superclass: Provide uniform treatment of variant classes by placing common interface into a super-class; variants are subclasses. Example:&lt;br /&gt;
*** [http://en.wikipedia.org/wiki/Strategy_pattern Strategy pattern].&lt;br /&gt;
*** [http://en.wikipedia.org/wiki/Composite_pattern Composite pattern].&lt;br /&gt;
** [http://en.wikipedia.org/wiki/Visitor_pattern Visitor]: Add new variations of operations to stable class hierarchy.&lt;br /&gt;
** [http://en.wikipedia.org/wiki/Template_method_pattern Template Method]: Specify algorithm skeleton using primitives; vary primitives in subclasses or by delegation. &lt;br /&gt;
* State Handling: generic manipulation of object state.&lt;br /&gt;
* Control: control of execution and method selec-tion.&lt;br /&gt;
* Virtual Machines: simulated processors.&lt;br /&gt;
* Convenience Patterns: simplified coding.&lt;br /&gt;
* Compound Patterns: patterns composed from others, with the original patterns visible.&lt;br /&gt;
* Concurrency: controlling parallel and concurrent execution.&lt;br /&gt;
* Distribution: problems germane to distributed systems.&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
[1] http://www.developer.com/design/article.php/1474561/What-Are-Design-Patterns-and-Do-I-Need-Them.htm&amp;lt;br&amp;gt;&lt;br /&gt;
[2] http://www.cs.umu.se/~jubo/ExJobbs/MK/patterns.htm&amp;lt;br&amp;gt;&lt;br /&gt;
[3] [http://reference.kfupm.edu.sa/content/r/e/relationships_between_design_patterns__148528.pdf Relationships between Design Patterns, by Walter Zimmer, Forschungszentrum Informatik, Bereich Programmstrukturen, 1995]&amp;lt;br&amp;gt;&lt;br /&gt;
[4] Peter Coad, with David North, and Mark Mayfield. Object Models: Strategies, Patterns, and Applications. Englewood Cliffs, NJ: Prentice Hall, 1995.&amp;lt;br&amp;gt;&lt;br /&gt;
[5] Wolfgang Pree. Design Patterns for Object-Oriented Software Development. Addison-Wesley, 1995.&amp;lt;br&amp;gt;&lt;br /&gt;
[6] Frank Buschman and Regine Meunier. “A System of Patterns.&amp;quot; In J. O. Coplien and D. C. Schmidt (eds.), Pattern Languages of Program Design. Reading, MA: Addison-Wesley, 1995, pp. 325-343.&amp;lt;br&amp;gt;&lt;br /&gt;
[6] [http://wwwipd.ira.uka.de/~tichy/publications/Catalogue.doc Tichy, Walter F (1998), A Catalogue of General-Purpose Software Design Patterns. University of Karlsruhe, Karlsruhe, Germany.]&amp;lt;br&amp;gt;&lt;br /&gt;
[7] [http://doi.acm.org/10.1145/361598.361623 Parnas, D. L. 1972. On the criteria to be used in decomposing systems into modules. Commun. ACM 15, 12 (Dec. 1972), 1053-1058.]&amp;lt;br&amp;gt; &lt;br /&gt;
[8] [http://www.cs.cmu.edu/afs/cs.cmu.edu/project/vit/ftp/pdf/PLoP95.pdf Some Patterns for Software Architectures, Mary Shaw, Carnegie Mellon University]&lt;/div&gt;</summary>
		<author><name>Quick Gun Murugan</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_12_Schemes_for_Pattern_Classification&amp;diff=25737</id>
		<title>CSC/ECE 517 Fall 2009/wiki2 12 Schemes for Pattern Classification</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_12_Schemes_for_Pattern_Classification&amp;diff=25737"/>
		<updated>2009-10-13T01:15:48Z</updated>

		<summary type="html">&lt;p&gt;Quick Gun Murugan: /* Tichy's Classification */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=='''Overview'''==&lt;br /&gt;
[http://en.wikipedia.org/wiki/Design_pattern_(computer_science) Design patterns] in [http://en.wikipedia.org/wiki/Software_engineering software engineering] is a time-tested reusable solution to recurring problems in [http://en.wikipedia.org/wiki/Software_design software design]. The origin of design patterns can be owed to the work of civil engineer [http://en.wikipedia.org/wiki/Christopher_Alexander Christopher Alexander], who documented his resolution to design issues in constructing buildings and towns[1]. About a decade and a half ago, software professional began to incorporate Alexanders ideas into guides for novice developers. From then on design patterns became increasingly popular.&lt;br /&gt;
&lt;br /&gt;
=='''Schemes for Pattern Classification'''==&lt;br /&gt;
===Gang of Four's Classification===&lt;br /&gt;
Design Patterns gained popularity with the book [http://en.wikipedia.org/wiki/Design_Patterns_(book) Design Patterns: Elements of Reusable Object-Oriented Software] by [http://en.wikipedia.org/wiki/Erich_Gamma Erich Gamma], [http://en.wikipedia.org/wiki/Richard_Helm Richard Helm], [http://en.wikipedia.org/wiki/Ralph_Johnson Ralph Johnson] and [http://en.wikipedia.org/wiki/John_Vlissides John Vlissides] published in 1995. In their work they used 2 criteria to categorize 23 design pattern[2].&lt;br /&gt;
* What does the pattern do?&lt;br /&gt;
** [http://en.wikipedia.org/wiki/Structural_pattern Structural] - These patterns deal with the composition of classes and their object.&lt;br /&gt;
** [http://en.wikipedia.org/wiki/Creational_pattern Creational] - These patterns deal with object creation.&lt;br /&gt;
** [http://en.wikipedia.org/wiki/Behavioral_pattern Behavioral] - These patterns deal with the interaction between classes and object and how they delegate responsibility.&lt;br /&gt;
&lt;br /&gt;
* What is the scope of the pattern?&lt;br /&gt;
** Class - The patterns deal with the relationships between classes and their subclasses. These are more static and fixed at compile time. &lt;br /&gt;
** Object - These patterns deal with object relationship. They are more dynamic and can vary at runtime.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;4&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|+ Example of Design Patterns that fall into each Category&lt;br /&gt;
|colspan=&amp;quot;5&amp;quot; align=&amp;quot;center&amp;quot;|'''Purpose'''&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Scope'''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Creational'''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Structural'''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Behavioral'''&lt;br /&gt;
|-&lt;br /&gt;
|rowspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot;|Class &lt;br /&gt;
|rowspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Factory_method_pattern| Factory Method]&lt;br /&gt;
|rowspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Adapter_pattern| Adapter (class)]&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Interpreter_pattern| Interpreter]&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Template_method_pattern| Template Method]&lt;br /&gt;
|-&lt;br /&gt;
|rowspan=&amp;quot;9&amp;quot; align=&amp;quot;center&amp;quot;|Object&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Abstract_factory_pattern| Abstract Factory]&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Adapter_pattern| Adapter (object)]&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Command_pattern| Command]&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Prototype_pattern| Prototype]&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Composite_pattern| Composite]&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Mediator_pattern| Mediator]&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Builder_pattern| Builder]&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Bridge_pattern| Bridge]&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Iterator_pattern| Iterator]&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Singleton_pattern| Singleton]&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Decorator_pattern| Decorator]&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Memento_pattern| Memento]&lt;br /&gt;
|-&lt;br /&gt;
|rowspan=&amp;quot;5&amp;quot; align=&amp;quot;center&amp;quot;| &lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Facade_pattern| Facade]&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Observer_pattern| Observer]&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Flyweight_pattern| Flyweight]&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/State_pattern| State]&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Proxy_pattern| Proxy]&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Strategy_pattern| Strategy]&lt;br /&gt;
|-&lt;br /&gt;
|rowspan=&amp;quot;2&amp;quot;  align=&amp;quot;center&amp;quot;| &lt;br /&gt;
|align=&amp;quot;center&amp;quot;| [http://en.wikipedia.org/wiki/Visitor_pattern| Visitor]&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Chain-of-responsibility_pattern| Chain Of Responsibility]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Zimmer's Classification===&lt;br /&gt;
Zimmer[3] classifies the relationships between the Gang of Four design patterns. Focusing on the problem and solution of each relationship, they can be classified as :&lt;br /&gt;
* X uses Y in its solution.&lt;br /&gt;
** The [http://en.wikipedia.org/wiki/Interpreter_pattern| Interpreter] design pattern uses the [http://en.wikipedia.org/wiki/Composite_pattern| Composite] design patter.&lt;br /&gt;
** The [http://en.wikipedia.org/wiki/Prototype_pattern| Prototype] design pattern uses the [http://en.wikipedia.org/wiki/Singleton_pattern| Singleton] design pattern.&lt;br /&gt;
* Variant of X uses Y in its solution.&lt;br /&gt;
** Some variant of the [http://en.wikipedia.org/wiki/Bridge_pattern| Bridge] design pattern may uses the [http://en.wikipedia.org/wiki/Adapter_pattern| Adapter] design pattern.&lt;br /&gt;
* X is similar to Y.&lt;br /&gt;
** The [http://en.wikipedia.org/wiki/Mediator_pattern| Mediator] design pattern is similar to the [http://en.wikipedia.org/wiki/Facade_pattern| Facade] design pattern.&lt;br /&gt;
&lt;br /&gt;
Using these relationships Zimmer placed design pattern in 3 layers.&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;4&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Layer'''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Design Pattern'''&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Basic design patterns and techniques.&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Singleton_pattern| Singleton], [http://en.wikipedia.org/wiki/Template_method_pattern| Template Method], [http://en.wikipedia.org/wiki/Mediator_pattern| Mediator], [http://en.wikipedia.org/wiki/Facade_pattern| Facade], [http://en.wikipedia.org/wiki/Memento_pattern| Memento], [http://en.wikipedia.org/wiki/Iterator_pattern| Iterator], [http://en.wikipedia.org/wiki/Flyweight_pattern| Flyweight].&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Design patterns for typical software problems.&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Abstract_factory_pattern| Abstract Factory], [http://en.wikipedia.org/wiki/Builder_pattern| Builder], [http://en.wikipedia.org/wiki/Strategy_pattern| Strategy], [http://en.wikipedia.org/wiki/Observer_pattern| Observer], [http://en.wikipedia.org/wiki/Bridge_pattern| Bridge], [http://en.wikipedia.org/wiki/Adapter_pattern| Adapter], [http://en.wikipedia.org/wiki/Prototype_pattern| Prototype], [http://en.wikipedia.org/wiki/Factory_method_pattern| Factory Method], [http://en.wikipedia.org/wiki/State_pattern| State], [http://en.wikipedia.org/wiki/Command_pattern| Command], [http://en.wikipedia.org/wiki/Visitor_pattern| Visitor], [http://en.wikipedia.org/wiki/Composite_pattern| Composite], [http://en.wikipedia.org/wiki/Decorator_pattern| Decorator], [http://en.wikipedia.org/wiki/Chain-of-responsibility_pattern| Chain Of Responsibility], [http://en.wikipedia.org/wiki/Proxy_pattern| Proxy]&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Design patterns specific to an application domain.&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Interpreter_pattern| Interpreter]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Coad's Classification===&lt;br /&gt;
In 1992 Peter Coad published his first article of design patterns. According to Coad, design patterns are identified observing classes, objects and the relationships established between them[5]. In his book Object Models: Strategies, Patterns, and Applications, Peter Coad along with David North and Mark Mayfield organized patterns into various pattern families[4].&lt;br /&gt;
* '''Fundamental Pattern''': This pattern is the template that all the other patterns follow.&lt;br /&gt;
** Collection-Worker Pattern is the fundamental object model pattern.&lt;br /&gt;
* '''Transaction Patterns''': These either have transaction players or have players that commonly play with the transaction player. The transaction patterns are:&lt;br /&gt;
** Actor-Participant pattern.&lt;br /&gt;
** Participant-Transaction pattern.&lt;br /&gt;
** Place-Transaction pattern.&lt;br /&gt;
** Specific Item-Transaction pattern.&lt;br /&gt;
** Transaction-Transaction Line Item pattern.&lt;br /&gt;
** Transaction-Subsequent Transaction pattern.&lt;br /&gt;
** Transaction Line Item-Subsequent Transaction Line Item pattern.&lt;br /&gt;
** Item-Line Item pattern.&lt;br /&gt;
** Specific Item-Line Item.&lt;br /&gt;
** Item-Specific Item.&lt;br /&gt;
** Associate-Other Associate.&lt;br /&gt;
** Specific Item-Hierarchical Item.&lt;br /&gt;
* '''Aggregate Patterns''': These patterns interconnect with other patterns. The aggregate patterns are:&lt;br /&gt;
** Container-Content pattern.&lt;br /&gt;
** Container-Container Line Item pattern.&lt;br /&gt;
** Group-Member.&lt;br /&gt;
** Assembly-Part pattern.&lt;br /&gt;
** Compound Part-Part pattern.&lt;br /&gt;
** Packet-Packet Component.&lt;br /&gt;
* '''Plan Patterns''': The plan patterns are:&lt;br /&gt;
** Plan-Step pattern.&lt;br /&gt;
** Plan-Plan Execution pattern.&lt;br /&gt;
** Plan Execution-Step Execution pattern.&lt;br /&gt;
** Step-Step Execution pattern.&lt;br /&gt;
** Plan-Plan Version pattern.&lt;br /&gt;
* '''Interaction Patterns''': These patterns, as the name suggests are patterns of interaction. The interaction patterns are:&lt;br /&gt;
** Peer-Peer pattern.&lt;br /&gt;
** Proxy-Specific Item pattern.&lt;br /&gt;
** Publisher-Subscriber pattern.&lt;br /&gt;
** Sender-Pass Through-Receiver pattern.&lt;br /&gt;
** Sender-Lookup-Receiver pattern.&lt;br /&gt;
** Caller-Dispatcher-Caller Back pattern.&lt;br /&gt;
** Gatekeeper-Request-Resource pattern.&lt;br /&gt;
&lt;br /&gt;
===Pree's Classification===&lt;br /&gt;
In his book Design Patterns for Object-Oriented Software Development, Addison-Wesley, 1995, Wolfgang Pree categorized Coad's patterns into[5]:&lt;br /&gt;
* '''Basic inheritance and interaction patterns:''' These patterns encompass primarily the basic modelling capabilities offered by object oriented programming languages.&lt;br /&gt;
* '''Patterns for structuring object-oriented software systems: '''Most of Coad's patterns belong to this category.  &lt;br /&gt;
* '''Patterns related to the [http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller MVC] framework: ''' Those of Coad's patterns that stress the framework aspect are derivatives of the Model/View/Controller framework.&lt;br /&gt;
Ignoring the fine-grained[5] pattern classification proposed by Gamma's catalog, Pree applied the following classification of the listed patterns.&lt;br /&gt;
* '''Patterns relying on abstract coupling: '''Most of the patterns in the catalog are based on abstractly coupled classes. [http://en.wikipedia.org/wiki/Factory_method_pattern| Factory Method pattern] and [http://en.wikipedia.org/wiki/Observer_pattern| Observer pattern] for example.  &lt;br /&gt;
* '''Patterns based on recursive structures: ''' [http://en.wikipedia.org/wiki/Composite_pattern| Composite] pattern, [http://en.wikipedia.org/wiki/Chain-of-responsibility_pattern| Chain Of Responsibility] pattern, [http://en.wikipedia.org/wiki/Decorator_pattern| Decorator] pattern are all based on recursive structures. &lt;br /&gt;
* '''Other Catalog patterns''': Pree summarized the rest of the patterns as follows:&lt;br /&gt;
** An [http://en.wikipedia.org/wiki/Abstract_factory_pattern| Abstract Factory] pattern is close to the [http://en.wikipedia.org/wiki/Factory_method_pattern| Factory Method] pattern&lt;br /&gt;
** [http://en.wikipedia.org/wiki/Flyweight_pattern| Flyweight] pattern represents a pattern similar to Coad's Item-Description pattern.&lt;br /&gt;
** [http://en.wikipedia.org/wiki/Singleton_pattern| Singleton] pattern is a coding patterns that limits the number of creatable instances of a class to one.&lt;br /&gt;
** [http://en.wikipedia.org/wiki/Template_method_pattern| Template Method] pattern forms the basis of all patterns dealing with with abstract classes.&lt;br /&gt;
&lt;br /&gt;
==='''Buschman et. al's Classification'''===&lt;br /&gt;
Frank Buschman and Regine Meunier identified the following categories[6]:&lt;br /&gt;
* '''Granularity: ''' Three levels of granularity can be specified. &lt;br /&gt;
** [http://en.wikipedia.org/wiki/Architectural_pattern_(computer_science) Architectural Framework]: Every software architecture is built according to an overall structuring principles described by architectural frameworks. Example: The [http://en.wikipedia.org/wiki/Model-view-controller Model-View-Controller] framework.&lt;br /&gt;
** [http://en.wikipedia.org/wiki/Design_pattern_(computer_science) Design Patterns]: These can be described as the smaller architectural units.&lt;br /&gt;
** [http://en.wikipedia.org/wiki/Programming_idiom Idioms]: Idioms represent the lowest level of a pattern and are closely related to a particular programming language. Example: [http://en.wikibooks.org/wiki/More_C%2B%2B_Idioms/Counted_Body The Counted Body] Idiom.&lt;br /&gt;
&lt;br /&gt;
*'''Functionality: '''Each pattern serves as a means to implement a particular functionality. The following categories of functionality can be distinguished:&lt;br /&gt;
** Creation of objects: Patterns may specify how to create particular instances of complex recursive or aggregate object structures. Example: [http://en.wikipedia.org/wiki/Singleton_pattern Singleton pattern]&lt;br /&gt;
** Guiding Communication between objects: Patterns may describe how to organize communication between a set of collaborating objects.&lt;br /&gt;
** Access to objects: Patterns may describe how to access the services and state of shared or remote objects in a safe way. Example: [http://en.wikipedia.org/wiki/Proxy_pattern Proxy pattern]&lt;br /&gt;
** Organizing the computation of the complex tasks: Patterns may specify how to distribute responsibilities among cooperating objects in order to solve a more complex task. Example: [http://en.wikipedia.org/wiki/Command_pattern Command pattern]&lt;br /&gt;
&lt;br /&gt;
*'''Structural Principles: ''' To achieve their functionality, patterns rely on certain architectural principles. These principles can be categorized as:&lt;br /&gt;
** Abstraction: A pattern provides an abstract view of a particular entity or task in a software system. Example: [http://en.wikipedia.org/wiki/Facade_pattern Facade pattern]&lt;br /&gt;
** Encapsulation: A pattern encapsulates details of a particular object, component, or service to remove dependencies on it from its clients or to protect these details from access. Example: [http://en.wikipedia.org/wiki/Mediator_pattern Mediator pattern]&lt;br /&gt;
** Separation of concerns: A pattern factors out specific responsibilities into separate objects or components.&lt;br /&gt;
** Coupling and Cohesion: A patterns removes dependencies between strongly coupled objects. Example: [http://en.wikipedia.org/wiki/Bridge_pattern Bridge pattern]&lt;br /&gt;
&lt;br /&gt;
This classification scheme is not intended as a means of picking out the right pattern, but merely a guide for designers helping them search for the pattern appropriate for a particular situation.&lt;br /&gt;
&lt;br /&gt;
===Tichy's Classification===&lt;br /&gt;
Walter Tichy classified several design patterns based on the kind of problems they solved. He grouped the problems into the following high-level categories[6]:&lt;br /&gt;
* Decoupling: dividing a software system into in-dependent parts in such a way that the parts can be built, changed, replaced, and reused independently. Decoupling patterns can be further classified into:&lt;br /&gt;
** Modules([http://en.wikipedia.org/wiki/Encapsulation_(computer_science)#Encapsulation Encapsulation]/[http://en.wikipedia.org/wiki/Information_hiding Information Hiding])[7]: Hide data structure and operations that are most likely to change, thus protecting other parts of the system from the effects of those changes. Examples for support of modules are &lt;br /&gt;
*** [http://en.wikipedia.org/wiki/Modula Modula's] modules.&lt;br /&gt;
*** [http://en.wikipedia.org/wiki/C_(programming_language) C's] header files.&lt;br /&gt;
***[http://en.wikipedia.org/wiki/Ada_(programming_language) Ada's] packages.&lt;br /&gt;
** Abstract Data Type[ADT]: Hide data structure and access algorithms behind a change-insensitive interface. The purpose of ADT is similar to that of Module, but an ADT is typically smaller, containing a single data type. Examples:&lt;br /&gt;
*** Repository pattern[8].&lt;br /&gt;
*** [http://en.wikipedia.org/wiki/Iterator_pattern Iterator pattern].&lt;br /&gt;
** Layers: The purpose of a layer is to provides an interface and an implementation of this interface. Example:&lt;br /&gt;
*** [http://en.wikipedia.org/wiki/Facade_pattern Facade pattern].&lt;br /&gt;
*** [http://en.wikipedia.org/wiki/Bridge_pattern Bridge pattern].&lt;br /&gt;
*** [http://en.wikipedia.org/wiki/Adapter_pattern Adapter pattern].&lt;br /&gt;
*** [http://en.wikipedia.org/wiki/Proxy_pattern Proxy pattern].&lt;br /&gt;
** Pipeline: Pass data through a sequence of transformations (filters) connected by channels (pipes).&lt;br /&gt;
** Event Notification: Let independent parts interact by an-nouncing and responding to events (loose coupling).&lt;br /&gt;
** Framework: Provide a complete or nearly complete application layer that can be extended by sub-classing.&lt;br /&gt;
* Variant Management: treating different objects uniformly by factoring out their commonality.&lt;br /&gt;
** Superclass: Provide uniform treatment of variant classes by placing common interface into a super-class; variants are subclasses. Example:&lt;br /&gt;
*** [http://en.wikipedia.org/wiki/Strategy_pattern Strategy pattern].&lt;br /&gt;
*** [http://en.wikipedia.org/wiki/Composite_pattern Composite pattern].&lt;br /&gt;
** [http://en.wikipedia.org/wiki/Visitor_pattern Visitor]: Add new variations of operations to stable class hierarchy.&lt;br /&gt;
** [http://en.wikipedia.org/wiki/Template_method_pattern Template Method]: Specify algorithm skeleton using primitives; vary primitives in subclasses or by delegation. &lt;br /&gt;
* State Handling: generic manipulation of object state.&lt;br /&gt;
* Control: control of execution and method selec-tion.&lt;br /&gt;
* Virtual Machines: simulated processors.&lt;br /&gt;
* Convenience Patterns: simplified coding.&lt;br /&gt;
* Compound Patterns: patterns composed from others, with the original patterns visible.&lt;br /&gt;
* Concurrency: controlling parallel and concurrent execution.&lt;br /&gt;
* Distribution: problems germane to distributed systems.&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
[1] http://www.developer.com/design/article.php/1474561/What-Are-Design-Patterns-and-Do-I-Need-Them.htm&amp;lt;br&amp;gt;&lt;br /&gt;
[2] http://www.cs.umu.se/~jubo/ExJobbs/MK/patterns.htm&amp;lt;br&amp;gt;&lt;br /&gt;
[3] [http://reference.kfupm.edu.sa/content/r/e/relationships_between_design_patterns__148528.pdf Relationships between Design Patterns, by Walter Zimmer, Forschungszentrum Informatik, Bereich Programmstrukturen, 1995]&amp;lt;br&amp;gt;&lt;br /&gt;
[4] Peter Coad, with David North, and Mark Mayfield. Object Models: Strategies, Patterns, and Applications. Englewood Cliffs, NJ: Prentice Hall, 1995.&amp;lt;br&amp;gt;&lt;br /&gt;
[5] Wolfgang Pree. Design Patterns for Object-Oriented Software Development. Addison-Wesley, 1995.&amp;lt;br&amp;gt;&lt;br /&gt;
[6] Frank Buschman and Regine Meunier. “A System of Patterns.&amp;quot; In J. O. Coplien and D. C. Schmidt (eds.), Pattern Languages of Program Design. Reading, MA: Addison-Wesley, 1995, pp. 325-343.&amp;lt;br&amp;gt;&lt;br /&gt;
[6] [http://wwwipd.ira.uka.de/~tichy/publications/Catalogue.doc Tichy, Walter F (1998), A Catalogue of General-Purpose Software Design Patterns. University of Karlsruhe, Karlsruhe, Germany.]&amp;lt;br&amp;gt;&lt;br /&gt;
[7] [http://doi.acm.org/10.1145/361598.361623 Parnas, D. L. 1972. On the criteria to be used in decomposing systems into modules. Commun. ACM 15, 12 (Dec. 1972), 1053-1058.]&amp;lt;br&amp;gt; &lt;br /&gt;
[8] [http://www.cs.cmu.edu/afs/cs.cmu.edu/project/vit/ftp/pdf/PLoP95.pdf Some Patterns for Software Architectures, Mary Shaw, Carnegie Mellon University]&lt;/div&gt;</summary>
		<author><name>Quick Gun Murugan</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_12_Schemes_for_Pattern_Classification&amp;diff=25736</id>
		<title>CSC/ECE 517 Fall 2009/wiki2 12 Schemes for Pattern Classification</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_12_Schemes_for_Pattern_Classification&amp;diff=25736"/>
		<updated>2009-10-13T00:59:29Z</updated>

		<summary type="html">&lt;p&gt;Quick Gun Murugan: /* Tichy's Classification */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=='''Overview'''==&lt;br /&gt;
[http://en.wikipedia.org/wiki/Design_pattern_(computer_science) Design patterns] in [http://en.wikipedia.org/wiki/Software_engineering software engineering] is a time-tested reusable solution to recurring problems in [http://en.wikipedia.org/wiki/Software_design software design]. The origin of design patterns can be owed to the work of civil engineer [http://en.wikipedia.org/wiki/Christopher_Alexander Christopher Alexander], who documented his resolution to design issues in constructing buildings and towns[1]. About a decade and a half ago, software professional began to incorporate Alexanders ideas into guides for novice developers. From then on design patterns became increasingly popular.&lt;br /&gt;
&lt;br /&gt;
=='''Schemes for Pattern Classification'''==&lt;br /&gt;
===Gang of Four's Classification===&lt;br /&gt;
Design Patterns gained popularity with the book [http://en.wikipedia.org/wiki/Design_Patterns_(book) Design Patterns: Elements of Reusable Object-Oriented Software] by [http://en.wikipedia.org/wiki/Erich_Gamma Erich Gamma], [http://en.wikipedia.org/wiki/Richard_Helm Richard Helm], [http://en.wikipedia.org/wiki/Ralph_Johnson Ralph Johnson] and [http://en.wikipedia.org/wiki/John_Vlissides John Vlissides] published in 1995. In their work they used 2 criteria to categorize 23 design pattern[2].&lt;br /&gt;
* What does the pattern do?&lt;br /&gt;
** [http://en.wikipedia.org/wiki/Structural_pattern Structural] - These patterns deal with the composition of classes and their object.&lt;br /&gt;
** [http://en.wikipedia.org/wiki/Creational_pattern Creational] - These patterns deal with object creation.&lt;br /&gt;
** [http://en.wikipedia.org/wiki/Behavioral_pattern Behavioral] - These patterns deal with the interaction between classes and object and how they delegate responsibility.&lt;br /&gt;
&lt;br /&gt;
* What is the scope of the pattern?&lt;br /&gt;
** Class - The patterns deal with the relationships between classes and their subclasses. These are more static and fixed at compile time. &lt;br /&gt;
** Object - These patterns deal with object relationship. They are more dynamic and can vary at runtime.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;4&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|+ Example of Design Patterns that fall into each Category&lt;br /&gt;
|colspan=&amp;quot;5&amp;quot; align=&amp;quot;center&amp;quot;|'''Purpose'''&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Scope'''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Creational'''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Structural'''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Behavioral'''&lt;br /&gt;
|-&lt;br /&gt;
|rowspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot;|Class &lt;br /&gt;
|rowspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Factory_method_pattern| Factory Method]&lt;br /&gt;
|rowspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Adapter_pattern| Adapter (class)]&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Interpreter_pattern| Interpreter]&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Template_method_pattern| Template Method]&lt;br /&gt;
|-&lt;br /&gt;
|rowspan=&amp;quot;9&amp;quot; align=&amp;quot;center&amp;quot;|Object&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Abstract_factory_pattern| Abstract Factory]&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Adapter_pattern| Adapter (object)]&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Command_pattern| Command]&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Prototype_pattern| Prototype]&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Composite_pattern| Composite]&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Mediator_pattern| Mediator]&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Builder_pattern| Builder]&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Bridge_pattern| Bridge]&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Iterator_pattern| Iterator]&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Singleton_pattern| Singleton]&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Decorator_pattern| Decorator]&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Memento_pattern| Memento]&lt;br /&gt;
|-&lt;br /&gt;
|rowspan=&amp;quot;5&amp;quot; align=&amp;quot;center&amp;quot;| &lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Facade_pattern| Facade]&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Observer_pattern| Observer]&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Flyweight_pattern| Flyweight]&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/State_pattern| State]&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Proxy_pattern| Proxy]&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Strategy_pattern| Strategy]&lt;br /&gt;
|-&lt;br /&gt;
|rowspan=&amp;quot;2&amp;quot;  align=&amp;quot;center&amp;quot;| &lt;br /&gt;
|align=&amp;quot;center&amp;quot;| [http://en.wikipedia.org/wiki/Visitor_pattern| Visitor]&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Chain-of-responsibility_pattern| Chain Of Responsibility]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Zimmer's Classification===&lt;br /&gt;
Zimmer[3] classifies the relationships between the Gang of Four design patterns. Focusing on the problem and solution of each relationship, they can be classified as :&lt;br /&gt;
* X uses Y in its solution.&lt;br /&gt;
** The [http://en.wikipedia.org/wiki/Interpreter_pattern| Interpreter] design pattern uses the [http://en.wikipedia.org/wiki/Composite_pattern| Composite] design patter.&lt;br /&gt;
** The [http://en.wikipedia.org/wiki/Prototype_pattern| Prototype] design pattern uses the [http://en.wikipedia.org/wiki/Singleton_pattern| Singleton] design pattern.&lt;br /&gt;
* Variant of X uses Y in its solution.&lt;br /&gt;
** Some variant of the [http://en.wikipedia.org/wiki/Bridge_pattern| Bridge] design pattern may uses the [http://en.wikipedia.org/wiki/Adapter_pattern| Adapter] design pattern.&lt;br /&gt;
* X is similar to Y.&lt;br /&gt;
** The [http://en.wikipedia.org/wiki/Mediator_pattern| Mediator] design pattern is similar to the [http://en.wikipedia.org/wiki/Facade_pattern| Facade] design pattern.&lt;br /&gt;
&lt;br /&gt;
Using these relationships Zimmer placed design pattern in 3 layers.&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;4&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Layer'''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Design Pattern'''&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Basic design patterns and techniques.&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Singleton_pattern| Singleton], [http://en.wikipedia.org/wiki/Template_method_pattern| Template Method], [http://en.wikipedia.org/wiki/Mediator_pattern| Mediator], [http://en.wikipedia.org/wiki/Facade_pattern| Facade], [http://en.wikipedia.org/wiki/Memento_pattern| Memento], [http://en.wikipedia.org/wiki/Iterator_pattern| Iterator], [http://en.wikipedia.org/wiki/Flyweight_pattern| Flyweight].&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Design patterns for typical software problems.&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Abstract_factory_pattern| Abstract Factory], [http://en.wikipedia.org/wiki/Builder_pattern| Builder], [http://en.wikipedia.org/wiki/Strategy_pattern| Strategy], [http://en.wikipedia.org/wiki/Observer_pattern| Observer], [http://en.wikipedia.org/wiki/Bridge_pattern| Bridge], [http://en.wikipedia.org/wiki/Adapter_pattern| Adapter], [http://en.wikipedia.org/wiki/Prototype_pattern| Prototype], [http://en.wikipedia.org/wiki/Factory_method_pattern| Factory Method], [http://en.wikipedia.org/wiki/State_pattern| State], [http://en.wikipedia.org/wiki/Command_pattern| Command], [http://en.wikipedia.org/wiki/Visitor_pattern| Visitor], [http://en.wikipedia.org/wiki/Composite_pattern| Composite], [http://en.wikipedia.org/wiki/Decorator_pattern| Decorator], [http://en.wikipedia.org/wiki/Chain-of-responsibility_pattern| Chain Of Responsibility], [http://en.wikipedia.org/wiki/Proxy_pattern| Proxy]&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Design patterns specific to an application domain.&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Interpreter_pattern| Interpreter]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Coad's Classification===&lt;br /&gt;
In 1992 Peter Coad published his first article of design patterns. According to Coad, design patterns are identified observing classes, objects and the relationships established between them[5]. In his book Object Models: Strategies, Patterns, and Applications, Peter Coad along with David North and Mark Mayfield organized patterns into various pattern families[4].&lt;br /&gt;
* '''Fundamental Pattern''': This pattern is the template that all the other patterns follow.&lt;br /&gt;
** Collection-Worker Pattern is the fundamental object model pattern.&lt;br /&gt;
* '''Transaction Patterns''': These either have transaction players or have players that commonly play with the transaction player. The transaction patterns are:&lt;br /&gt;
** Actor-Participant pattern.&lt;br /&gt;
** Participant-Transaction pattern.&lt;br /&gt;
** Place-Transaction pattern.&lt;br /&gt;
** Specific Item-Transaction pattern.&lt;br /&gt;
** Transaction-Transaction Line Item pattern.&lt;br /&gt;
** Transaction-Subsequent Transaction pattern.&lt;br /&gt;
** Transaction Line Item-Subsequent Transaction Line Item pattern.&lt;br /&gt;
** Item-Line Item pattern.&lt;br /&gt;
** Specific Item-Line Item.&lt;br /&gt;
** Item-Specific Item.&lt;br /&gt;
** Associate-Other Associate.&lt;br /&gt;
** Specific Item-Hierarchical Item.&lt;br /&gt;
* '''Aggregate Patterns''': These patterns interconnect with other patterns. The aggregate patterns are:&lt;br /&gt;
** Container-Content pattern.&lt;br /&gt;
** Container-Container Line Item pattern.&lt;br /&gt;
** Group-Member.&lt;br /&gt;
** Assembly-Part pattern.&lt;br /&gt;
** Compound Part-Part pattern.&lt;br /&gt;
** Packet-Packet Component.&lt;br /&gt;
* '''Plan Patterns''': The plan patterns are:&lt;br /&gt;
** Plan-Step pattern.&lt;br /&gt;
** Plan-Plan Execution pattern.&lt;br /&gt;
** Plan Execution-Step Execution pattern.&lt;br /&gt;
** Step-Step Execution pattern.&lt;br /&gt;
** Plan-Plan Version pattern.&lt;br /&gt;
* '''Interaction Patterns''': These patterns, as the name suggests are patterns of interaction. The interaction patterns are:&lt;br /&gt;
** Peer-Peer pattern.&lt;br /&gt;
** Proxy-Specific Item pattern.&lt;br /&gt;
** Publisher-Subscriber pattern.&lt;br /&gt;
** Sender-Pass Through-Receiver pattern.&lt;br /&gt;
** Sender-Lookup-Receiver pattern.&lt;br /&gt;
** Caller-Dispatcher-Caller Back pattern.&lt;br /&gt;
** Gatekeeper-Request-Resource pattern.&lt;br /&gt;
&lt;br /&gt;
===Pree's Classification===&lt;br /&gt;
In his book Design Patterns for Object-Oriented Software Development, Addison-Wesley, 1995, Wolfgang Pree categorized Coad's patterns into[5]:&lt;br /&gt;
* '''Basic inheritance and interaction patterns:''' These patterns encompass primarily the basic modelling capabilities offered by object oriented programming languages.&lt;br /&gt;
* '''Patterns for structuring object-oriented software systems: '''Most of Coad's patterns belong to this category.  &lt;br /&gt;
* '''Patterns related to the [http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller MVC] framework: ''' Those of Coad's patterns that stress the framework aspect are derivatives of the Model/View/Controller framework.&lt;br /&gt;
Ignoring the fine-grained[5] pattern classification proposed by Gamma's catalog, Pree applied the following classification of the listed patterns.&lt;br /&gt;
* '''Patterns relying on abstract coupling: '''Most of the patterns in the catalog are based on abstractly coupled classes. [http://en.wikipedia.org/wiki/Factory_method_pattern| Factory Method pattern] and [http://en.wikipedia.org/wiki/Observer_pattern| Observer pattern] for example.  &lt;br /&gt;
* '''Patterns based on recursive structures: ''' [http://en.wikipedia.org/wiki/Composite_pattern| Composite] pattern, [http://en.wikipedia.org/wiki/Chain-of-responsibility_pattern| Chain Of Responsibility] pattern, [http://en.wikipedia.org/wiki/Decorator_pattern| Decorator] pattern are all based on recursive structures. &lt;br /&gt;
* '''Other Catalog patterns''': Pree summarized the rest of the patterns as follows:&lt;br /&gt;
** An [http://en.wikipedia.org/wiki/Abstract_factory_pattern| Abstract Factory] pattern is close to the [http://en.wikipedia.org/wiki/Factory_method_pattern| Factory Method] pattern&lt;br /&gt;
** [http://en.wikipedia.org/wiki/Flyweight_pattern| Flyweight] pattern represents a pattern similar to Coad's Item-Description pattern.&lt;br /&gt;
** [http://en.wikipedia.org/wiki/Singleton_pattern| Singleton] pattern is a coding patterns that limits the number of creatable instances of a class to one.&lt;br /&gt;
** [http://en.wikipedia.org/wiki/Template_method_pattern| Template Method] pattern forms the basis of all patterns dealing with with abstract classes.&lt;br /&gt;
&lt;br /&gt;
==='''Buschman et. al's Classification'''===&lt;br /&gt;
Frank Buschman and Regine Meunier identified the following categories[6]:&lt;br /&gt;
* '''Granularity: ''' Three levels of granularity can be specified. &lt;br /&gt;
** [http://en.wikipedia.org/wiki/Architectural_pattern_(computer_science) Architectural Framework]: Every software architecture is built according to an overall structuring principles described by architectural frameworks. Example: The [http://en.wikipedia.org/wiki/Model-view-controller Model-View-Controller] framework.&lt;br /&gt;
** [http://en.wikipedia.org/wiki/Design_pattern_(computer_science) Design Patterns]: These can be described as the smaller architectural units.&lt;br /&gt;
** [http://en.wikipedia.org/wiki/Programming_idiom Idioms]: Idioms represent the lowest level of a pattern and are closely related to a particular programming language. Example: [http://en.wikibooks.org/wiki/More_C%2B%2B_Idioms/Counted_Body The Counted Body] Idiom.&lt;br /&gt;
&lt;br /&gt;
*'''Functionality: '''Each pattern serves as a means to implement a particular functionality. The following categories of functionality can be distinguished:&lt;br /&gt;
** Creation of objects: Patterns may specify how to create particular instances of complex recursive or aggregate object structures. Example: [http://en.wikipedia.org/wiki/Singleton_pattern Singleton pattern]&lt;br /&gt;
** Guiding Communication between objects: Patterns may describe how to organize communication between a set of collaborating objects.&lt;br /&gt;
** Access to objects: Patterns may describe how to access the services and state of shared or remote objects in a safe way. Example: [http://en.wikipedia.org/wiki/Proxy_pattern Proxy pattern]&lt;br /&gt;
** Organizing the computation of the complex tasks: Patterns may specify how to distribute responsibilities among cooperating objects in order to solve a more complex task. Example: [http://en.wikipedia.org/wiki/Command_pattern Command pattern]&lt;br /&gt;
&lt;br /&gt;
*'''Structural Principles: ''' To achieve their functionality, patterns rely on certain architectural principles. These principles can be categorized as:&lt;br /&gt;
** Abstraction: A pattern provides an abstract view of a particular entity or task in a software system. Example: [http://en.wikipedia.org/wiki/Facade_pattern Facade pattern]&lt;br /&gt;
** Encapsulation: A pattern encapsulates details of a particular object, component, or service to remove dependencies on it from its clients or to protect these details from access. Example: [http://en.wikipedia.org/wiki/Mediator_pattern Mediator pattern]&lt;br /&gt;
** Separation of concerns: A pattern factors out specific responsibilities into separate objects or components.&lt;br /&gt;
** Coupling and Cohesion: A patterns removes dependencies between strongly coupled objects. Example: [http://en.wikipedia.org/wiki/Bridge_pattern Bridge pattern]&lt;br /&gt;
&lt;br /&gt;
This classification scheme is not intended as a means of picking out the right pattern, but merely a guide for designers helping them search for the pattern appropriate for a particular situation.&lt;br /&gt;
&lt;br /&gt;
===Tichy's Classification===&lt;br /&gt;
Walter Tichy classified several design patterns based on the kind of problems they solved. He grouped the problems into the following high-level categories[6]:&lt;br /&gt;
* Decoupling: dividing a software system into in-dependent parts in such a way that the parts can be built, changed, replaced, and reused independently. Decoupling patterns can be further classified into:&lt;br /&gt;
** Modules([http://en.wikipedia.org/wiki/Encapsulation_(computer_science)#Encapsulation Encapsulation]/[http://en.wikipedia.org/wiki/Information_hiding Information Hiding])[7]: Hide data structure and operations that are most likely to change, thus protecting other parts of the system from the effects of those changes. Examples for support of modules are &lt;br /&gt;
*** [http://en.wikipedia.org/wiki/Modula Modula's] modules.&lt;br /&gt;
*** [http://en.wikipedia.org/wiki/C_(programming_language) C's] header files.&lt;br /&gt;
***[http://en.wikipedia.org/wiki/Ada_(programming_language) Ada's] packages.&lt;br /&gt;
** Abstract Data Type[ADT]: Hide data structure and access algorithms behind a change-insensitive interface. The purpose of ADT is similar to that of Module, but an ADT is typically smaller, containing a single data type. Examples:&lt;br /&gt;
*** Repository pattern[8].&lt;br /&gt;
*** [http://en.wikipedia.org/wiki/Iterator_pattern Iterator pattern].&lt;br /&gt;
** Layers: The purpose of a layer is to provides an interface and an implementation of this interface. Example:&lt;br /&gt;
*** [http://en.wikipedia.org/wiki/Facade_pattern Facade pattern].&lt;br /&gt;
*** [http://en.wikipedia.org/wiki/Bridge_pattern Bridge pattern].&lt;br /&gt;
*** [http://en.wikipedia.org/wiki/Adapter_pattern Adapter pattern].&lt;br /&gt;
*** [http://en.wikipedia.org/wiki/Proxy_pattern Proxy pattern].&lt;br /&gt;
** Pipeline: Pass data through a sequence of transformations (filters) connected by channels (pipes).&lt;br /&gt;
** Event Notification: Let independent parts interact by an-nouncing and responding to events (loose coupling).&lt;br /&gt;
** Framework: Provide a complete or nearly complete application layer that can be extended by sub-classing.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Variant Management: treating different objects uniformly by factoring out their commonality. &lt;br /&gt;
* State Handling: generic manipulation of object state.&lt;br /&gt;
* Control: control of execution and method selec-tion.&lt;br /&gt;
* Virtual Machines: simulated processors.&lt;br /&gt;
* Convenience Patterns: simplified coding.&lt;br /&gt;
* Compound Patterns: patterns composed from others, with the original patterns visible.&lt;br /&gt;
* Concurrency: controlling parallel and concurrent execution.&lt;br /&gt;
* Distribution: problems germane to distributed systems.&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
[1] http://www.developer.com/design/article.php/1474561/What-Are-Design-Patterns-and-Do-I-Need-Them.htm&amp;lt;br&amp;gt;&lt;br /&gt;
[2] http://www.cs.umu.se/~jubo/ExJobbs/MK/patterns.htm&amp;lt;br&amp;gt;&lt;br /&gt;
[3] [http://reference.kfupm.edu.sa/content/r/e/relationships_between_design_patterns__148528.pdf Relationships between Design Patterns, by Walter Zimmer, Forschungszentrum Informatik, Bereich Programmstrukturen, 1995]&amp;lt;br&amp;gt;&lt;br /&gt;
[4] Peter Coad, with David North, and Mark Mayfield. Object Models: Strategies, Patterns, and Applications. Englewood Cliffs, NJ: Prentice Hall, 1995.&amp;lt;br&amp;gt;&lt;br /&gt;
[5] Wolfgang Pree. Design Patterns for Object-Oriented Software Development. Addison-Wesley, 1995.&amp;lt;br&amp;gt;&lt;br /&gt;
[6] Frank Buschman and Regine Meunier. “A System of Patterns.&amp;quot; In J. O. Coplien and D. C. Schmidt (eds.), Pattern Languages of Program Design. Reading, MA: Addison-Wesley, 1995, pp. 325-343.&amp;lt;br&amp;gt;&lt;br /&gt;
[6] [http://wwwipd.ira.uka.de/~tichy/publications/Catalogue.doc Tichy, Walter F (1998), A Catalogue of General-Purpose Software Design Patterns. University of Karlsruhe, Karlsruhe, Germany.]&amp;lt;br&amp;gt;&lt;br /&gt;
[7] [http://doi.acm.org/10.1145/361598.361623 Parnas, D. L. 1972. On the criteria to be used in decomposing systems into modules. Commun. ACM 15, 12 (Dec. 1972), 1053-1058.]&amp;lt;br&amp;gt; &lt;br /&gt;
[8] [http://www.cs.cmu.edu/afs/cs.cmu.edu/project/vit/ftp/pdf/PLoP95.pdf Some Patterns for Software Architectures, Mary Shaw, Carnegie Mellon University]&lt;/div&gt;</summary>
		<author><name>Quick Gun Murugan</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_12_Schemes_for_Pattern_Classification&amp;diff=25735</id>
		<title>CSC/ECE 517 Fall 2009/wiki2 12 Schemes for Pattern Classification</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_12_Schemes_for_Pattern_Classification&amp;diff=25735"/>
		<updated>2009-10-13T00:51:05Z</updated>

		<summary type="html">&lt;p&gt;Quick Gun Murugan: /* Tichy's Classification */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=='''Overview'''==&lt;br /&gt;
[http://en.wikipedia.org/wiki/Design_pattern_(computer_science) Design patterns] in [http://en.wikipedia.org/wiki/Software_engineering software engineering] is a time-tested reusable solution to recurring problems in [http://en.wikipedia.org/wiki/Software_design software design]. The origin of design patterns can be owed to the work of civil engineer [http://en.wikipedia.org/wiki/Christopher_Alexander Christopher Alexander], who documented his resolution to design issues in constructing buildings and towns[1]. About a decade and a half ago, software professional began to incorporate Alexanders ideas into guides for novice developers. From then on design patterns became increasingly popular.&lt;br /&gt;
&lt;br /&gt;
=='''Schemes for Pattern Classification'''==&lt;br /&gt;
===Gang of Four's Classification===&lt;br /&gt;
Design Patterns gained popularity with the book [http://en.wikipedia.org/wiki/Design_Patterns_(book) Design Patterns: Elements of Reusable Object-Oriented Software] by [http://en.wikipedia.org/wiki/Erich_Gamma Erich Gamma], [http://en.wikipedia.org/wiki/Richard_Helm Richard Helm], [http://en.wikipedia.org/wiki/Ralph_Johnson Ralph Johnson] and [http://en.wikipedia.org/wiki/John_Vlissides John Vlissides] published in 1995. In their work they used 2 criteria to categorize 23 design pattern[2].&lt;br /&gt;
* What does the pattern do?&lt;br /&gt;
** [http://en.wikipedia.org/wiki/Structural_pattern Structural] - These patterns deal with the composition of classes and their object.&lt;br /&gt;
** [http://en.wikipedia.org/wiki/Creational_pattern Creational] - These patterns deal with object creation.&lt;br /&gt;
** [http://en.wikipedia.org/wiki/Behavioral_pattern Behavioral] - These patterns deal with the interaction between classes and object and how they delegate responsibility.&lt;br /&gt;
&lt;br /&gt;
* What is the scope of the pattern?&lt;br /&gt;
** Class - The patterns deal with the relationships between classes and their subclasses. These are more static and fixed at compile time. &lt;br /&gt;
** Object - These patterns deal with object relationship. They are more dynamic and can vary at runtime.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;4&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|+ Example of Design Patterns that fall into each Category&lt;br /&gt;
|colspan=&amp;quot;5&amp;quot; align=&amp;quot;center&amp;quot;|'''Purpose'''&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Scope'''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Creational'''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Structural'''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Behavioral'''&lt;br /&gt;
|-&lt;br /&gt;
|rowspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot;|Class &lt;br /&gt;
|rowspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Factory_method_pattern| Factory Method]&lt;br /&gt;
|rowspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Adapter_pattern| Adapter (class)]&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Interpreter_pattern| Interpreter]&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Template_method_pattern| Template Method]&lt;br /&gt;
|-&lt;br /&gt;
|rowspan=&amp;quot;9&amp;quot; align=&amp;quot;center&amp;quot;|Object&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Abstract_factory_pattern| Abstract Factory]&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Adapter_pattern| Adapter (object)]&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Command_pattern| Command]&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Prototype_pattern| Prototype]&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Composite_pattern| Composite]&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Mediator_pattern| Mediator]&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Builder_pattern| Builder]&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Bridge_pattern| Bridge]&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Iterator_pattern| Iterator]&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Singleton_pattern| Singleton]&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Decorator_pattern| Decorator]&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Memento_pattern| Memento]&lt;br /&gt;
|-&lt;br /&gt;
|rowspan=&amp;quot;5&amp;quot; align=&amp;quot;center&amp;quot;| &lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Facade_pattern| Facade]&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Observer_pattern| Observer]&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Flyweight_pattern| Flyweight]&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/State_pattern| State]&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Proxy_pattern| Proxy]&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Strategy_pattern| Strategy]&lt;br /&gt;
|-&lt;br /&gt;
|rowspan=&amp;quot;2&amp;quot;  align=&amp;quot;center&amp;quot;| &lt;br /&gt;
|align=&amp;quot;center&amp;quot;| [http://en.wikipedia.org/wiki/Visitor_pattern| Visitor]&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Chain-of-responsibility_pattern| Chain Of Responsibility]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Zimmer's Classification===&lt;br /&gt;
Zimmer[3] classifies the relationships between the Gang of Four design patterns. Focusing on the problem and solution of each relationship, they can be classified as :&lt;br /&gt;
* X uses Y in its solution.&lt;br /&gt;
** The [http://en.wikipedia.org/wiki/Interpreter_pattern| Interpreter] design pattern uses the [http://en.wikipedia.org/wiki/Composite_pattern| Composite] design patter.&lt;br /&gt;
** The [http://en.wikipedia.org/wiki/Prototype_pattern| Prototype] design pattern uses the [http://en.wikipedia.org/wiki/Singleton_pattern| Singleton] design pattern.&lt;br /&gt;
* Variant of X uses Y in its solution.&lt;br /&gt;
** Some variant of the [http://en.wikipedia.org/wiki/Bridge_pattern| Bridge] design pattern may uses the [http://en.wikipedia.org/wiki/Adapter_pattern| Adapter] design pattern.&lt;br /&gt;
* X is similar to Y.&lt;br /&gt;
** The [http://en.wikipedia.org/wiki/Mediator_pattern| Mediator] design pattern is similar to the [http://en.wikipedia.org/wiki/Facade_pattern| Facade] design pattern.&lt;br /&gt;
&lt;br /&gt;
Using these relationships Zimmer placed design pattern in 3 layers.&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;4&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Layer'''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Design Pattern'''&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Basic design patterns and techniques.&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Singleton_pattern| Singleton], [http://en.wikipedia.org/wiki/Template_method_pattern| Template Method], [http://en.wikipedia.org/wiki/Mediator_pattern| Mediator], [http://en.wikipedia.org/wiki/Facade_pattern| Facade], [http://en.wikipedia.org/wiki/Memento_pattern| Memento], [http://en.wikipedia.org/wiki/Iterator_pattern| Iterator], [http://en.wikipedia.org/wiki/Flyweight_pattern| Flyweight].&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Design patterns for typical software problems.&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Abstract_factory_pattern| Abstract Factory], [http://en.wikipedia.org/wiki/Builder_pattern| Builder], [http://en.wikipedia.org/wiki/Strategy_pattern| Strategy], [http://en.wikipedia.org/wiki/Observer_pattern| Observer], [http://en.wikipedia.org/wiki/Bridge_pattern| Bridge], [http://en.wikipedia.org/wiki/Adapter_pattern| Adapter], [http://en.wikipedia.org/wiki/Prototype_pattern| Prototype], [http://en.wikipedia.org/wiki/Factory_method_pattern| Factory Method], [http://en.wikipedia.org/wiki/State_pattern| State], [http://en.wikipedia.org/wiki/Command_pattern| Command], [http://en.wikipedia.org/wiki/Visitor_pattern| Visitor], [http://en.wikipedia.org/wiki/Composite_pattern| Composite], [http://en.wikipedia.org/wiki/Decorator_pattern| Decorator], [http://en.wikipedia.org/wiki/Chain-of-responsibility_pattern| Chain Of Responsibility], [http://en.wikipedia.org/wiki/Proxy_pattern| Proxy]&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Design patterns specific to an application domain.&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Interpreter_pattern| Interpreter]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Coad's Classification===&lt;br /&gt;
In 1992 Peter Coad published his first article of design patterns. According to Coad, design patterns are identified observing classes, objects and the relationships established between them[5]. In his book Object Models: Strategies, Patterns, and Applications, Peter Coad along with David North and Mark Mayfield organized patterns into various pattern families[4].&lt;br /&gt;
* '''Fundamental Pattern''': This pattern is the template that all the other patterns follow.&lt;br /&gt;
** Collection-Worker Pattern is the fundamental object model pattern.&lt;br /&gt;
* '''Transaction Patterns''': These either have transaction players or have players that commonly play with the transaction player. The transaction patterns are:&lt;br /&gt;
** Actor-Participant pattern.&lt;br /&gt;
** Participant-Transaction pattern.&lt;br /&gt;
** Place-Transaction pattern.&lt;br /&gt;
** Specific Item-Transaction pattern.&lt;br /&gt;
** Transaction-Transaction Line Item pattern.&lt;br /&gt;
** Transaction-Subsequent Transaction pattern.&lt;br /&gt;
** Transaction Line Item-Subsequent Transaction Line Item pattern.&lt;br /&gt;
** Item-Line Item pattern.&lt;br /&gt;
** Specific Item-Line Item.&lt;br /&gt;
** Item-Specific Item.&lt;br /&gt;
** Associate-Other Associate.&lt;br /&gt;
** Specific Item-Hierarchical Item.&lt;br /&gt;
* '''Aggregate Patterns''': These patterns interconnect with other patterns. The aggregate patterns are:&lt;br /&gt;
** Container-Content pattern.&lt;br /&gt;
** Container-Container Line Item pattern.&lt;br /&gt;
** Group-Member.&lt;br /&gt;
** Assembly-Part pattern.&lt;br /&gt;
** Compound Part-Part pattern.&lt;br /&gt;
** Packet-Packet Component.&lt;br /&gt;
* '''Plan Patterns''': The plan patterns are:&lt;br /&gt;
** Plan-Step pattern.&lt;br /&gt;
** Plan-Plan Execution pattern.&lt;br /&gt;
** Plan Execution-Step Execution pattern.&lt;br /&gt;
** Step-Step Execution pattern.&lt;br /&gt;
** Plan-Plan Version pattern.&lt;br /&gt;
* '''Interaction Patterns''': These patterns, as the name suggests are patterns of interaction. The interaction patterns are:&lt;br /&gt;
** Peer-Peer pattern.&lt;br /&gt;
** Proxy-Specific Item pattern.&lt;br /&gt;
** Publisher-Subscriber pattern.&lt;br /&gt;
** Sender-Pass Through-Receiver pattern.&lt;br /&gt;
** Sender-Lookup-Receiver pattern.&lt;br /&gt;
** Caller-Dispatcher-Caller Back pattern.&lt;br /&gt;
** Gatekeeper-Request-Resource pattern.&lt;br /&gt;
&lt;br /&gt;
===Pree's Classification===&lt;br /&gt;
In his book Design Patterns for Object-Oriented Software Development, Addison-Wesley, 1995, Wolfgang Pree categorized Coad's patterns into[5]:&lt;br /&gt;
* '''Basic inheritance and interaction patterns:''' These patterns encompass primarily the basic modelling capabilities offered by object oriented programming languages.&lt;br /&gt;
* '''Patterns for structuring object-oriented software systems: '''Most of Coad's patterns belong to this category.  &lt;br /&gt;
* '''Patterns related to the [http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller MVC] framework: ''' Those of Coad's patterns that stress the framework aspect are derivatives of the Model/View/Controller framework.&lt;br /&gt;
Ignoring the fine-grained[5] pattern classification proposed by Gamma's catalog, Pree applied the following classification of the listed patterns.&lt;br /&gt;
* '''Patterns relying on abstract coupling: '''Most of the patterns in the catalog are based on abstractly coupled classes. [http://en.wikipedia.org/wiki/Factory_method_pattern| Factory Method pattern] and [http://en.wikipedia.org/wiki/Observer_pattern| Observer pattern] for example.  &lt;br /&gt;
* '''Patterns based on recursive structures: ''' [http://en.wikipedia.org/wiki/Composite_pattern| Composite] pattern, [http://en.wikipedia.org/wiki/Chain-of-responsibility_pattern| Chain Of Responsibility] pattern, [http://en.wikipedia.org/wiki/Decorator_pattern| Decorator] pattern are all based on recursive structures. &lt;br /&gt;
* '''Other Catalog patterns''': Pree summarized the rest of the patterns as follows:&lt;br /&gt;
** An [http://en.wikipedia.org/wiki/Abstract_factory_pattern| Abstract Factory] pattern is close to the [http://en.wikipedia.org/wiki/Factory_method_pattern| Factory Method] pattern&lt;br /&gt;
** [http://en.wikipedia.org/wiki/Flyweight_pattern| Flyweight] pattern represents a pattern similar to Coad's Item-Description pattern.&lt;br /&gt;
** [http://en.wikipedia.org/wiki/Singleton_pattern| Singleton] pattern is a coding patterns that limits the number of creatable instances of a class to one.&lt;br /&gt;
** [http://en.wikipedia.org/wiki/Template_method_pattern| Template Method] pattern forms the basis of all patterns dealing with with abstract classes.&lt;br /&gt;
&lt;br /&gt;
==='''Buschman et. al's Classification'''===&lt;br /&gt;
Frank Buschman and Regine Meunier identified the following categories[6]:&lt;br /&gt;
* '''Granularity: ''' Three levels of granularity can be specified. &lt;br /&gt;
** [http://en.wikipedia.org/wiki/Architectural_pattern_(computer_science) Architectural Framework]: Every software architecture is built according to an overall structuring principles described by architectural frameworks. Example: The [http://en.wikipedia.org/wiki/Model-view-controller Model-View-Controller] framework.&lt;br /&gt;
** [http://en.wikipedia.org/wiki/Design_pattern_(computer_science) Design Patterns]: These can be described as the smaller architectural units.&lt;br /&gt;
** [http://en.wikipedia.org/wiki/Programming_idiom Idioms]: Idioms represent the lowest level of a pattern and are closely related to a particular programming language. Example: [http://en.wikibooks.org/wiki/More_C%2B%2B_Idioms/Counted_Body The Counted Body] Idiom.&lt;br /&gt;
&lt;br /&gt;
*'''Functionality: '''Each pattern serves as a means to implement a particular functionality. The following categories of functionality can be distinguished:&lt;br /&gt;
** Creation of objects: Patterns may specify how to create particular instances of complex recursive or aggregate object structures. Example: [http://en.wikipedia.org/wiki/Singleton_pattern Singleton pattern]&lt;br /&gt;
** Guiding Communication between objects: Patterns may describe how to organize communication between a set of collaborating objects.&lt;br /&gt;
** Access to objects: Patterns may describe how to access the services and state of shared or remote objects in a safe way. Example: [http://en.wikipedia.org/wiki/Proxy_pattern Proxy pattern]&lt;br /&gt;
** Organizing the computation of the complex tasks: Patterns may specify how to distribute responsibilities among cooperating objects in order to solve a more complex task. Example: [http://en.wikipedia.org/wiki/Command_pattern Command pattern]&lt;br /&gt;
&lt;br /&gt;
*'''Structural Principles: ''' To achieve their functionality, patterns rely on certain architectural principles. These principles can be categorized as:&lt;br /&gt;
** Abstraction: A pattern provides an abstract view of a particular entity or task in a software system. Example: [http://en.wikipedia.org/wiki/Facade_pattern Facade pattern]&lt;br /&gt;
** Encapsulation: A pattern encapsulates details of a particular object, component, or service to remove dependencies on it from its clients or to protect these details from access. Example: [http://en.wikipedia.org/wiki/Mediator_pattern Mediator pattern]&lt;br /&gt;
** Separation of concerns: A pattern factors out specific responsibilities into separate objects or components.&lt;br /&gt;
** Coupling and Cohesion: A patterns removes dependencies between strongly coupled objects. Example: [http://en.wikipedia.org/wiki/Bridge_pattern Bridge pattern]&lt;br /&gt;
&lt;br /&gt;
This classification scheme is not intended as a means of picking out the right pattern, but merely a guide for designers helping them search for the pattern appropriate for a particular situation.&lt;br /&gt;
&lt;br /&gt;
===Tichy's Classification===&lt;br /&gt;
Walter Tichy classified several design patterns based on the kind of problems they solved. He grouped the problems into the following high-level categories[6]:&lt;br /&gt;
* Decoupling: dividing a software system into in-dependent parts in such a way that the parts can be built, changed, replaced, and reused independently. Decoupling patterns can be further classified into:&lt;br /&gt;
** Modules([http://en.wikipedia.org/wiki/Encapsulation_(computer_science)#Encapsulation Encapsulation]/[http://en.wikipedia.org/wiki/Information_hiding Information Hiding])[7]: The purpose of this design pattern is to hide data structure and operations that are most likely to change, thus protecting other parts of the system from the effects of those changes. Examples for support of modules are &lt;br /&gt;
*** [http://en.wikipedia.org/wiki/Modula Modula's] modules.&lt;br /&gt;
*** [http://en.wikipedia.org/wiki/C_(programming_language) C's] header files.&lt;br /&gt;
***[http://en.wikipedia.org/wiki/Ada_(programming_language) Ada's] packages.&lt;br /&gt;
** Abstract Data Type[ADT]: The purpose of ADT hide data structure and access algorithms behind a change-insensitive interface. The purpose of ADT is similar to that of Module, but an ADT is typically smaller, containing a single data type. Examples:&lt;br /&gt;
*** Repository pattern[8].&lt;br /&gt;
*** [http://en.wikipedia.org/wiki/Iterator_pattern Iterator pattern].&lt;br /&gt;
** Layers: The purpose of a layer is to provides an interface and an implementation of this interface. Example:&lt;br /&gt;
*** [http://en.wikipedia.org/wiki/Facade_pattern Facade pattern].&lt;br /&gt;
*** [http://en.wikipedia.org/wiki/Bridge_pattern Bridge pattern].&lt;br /&gt;
*** [http://en.wikipedia.org/wiki/Adapter_pattern Adapter pattern].&lt;br /&gt;
*** [http://en.wikipedia.org/wiki/Proxy_pattern Proxy pattern].&lt;br /&gt;
* Variant Management: treating different objects uniformly by factoring out their commonality. &lt;br /&gt;
* State Handling: generic manipulation of object state.&lt;br /&gt;
* Control: control of execution and method selec-tion.&lt;br /&gt;
* Virtual Machines: simulated processors.&lt;br /&gt;
* Convenience Patterns: simplified coding.&lt;br /&gt;
* Compound Patterns: patterns composed from others, with the original patterns visible.&lt;br /&gt;
* Concurrency: controlling parallel and concurrent execution.&lt;br /&gt;
* Distribution: problems germane to distributed systems.&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
[1] http://www.developer.com/design/article.php/1474561/What-Are-Design-Patterns-and-Do-I-Need-Them.htm&amp;lt;br&amp;gt;&lt;br /&gt;
[2] http://www.cs.umu.se/~jubo/ExJobbs/MK/patterns.htm&amp;lt;br&amp;gt;&lt;br /&gt;
[3] [http://reference.kfupm.edu.sa/content/r/e/relationships_between_design_patterns__148528.pdf Relationships between Design Patterns, by Walter Zimmer, Forschungszentrum Informatik, Bereich Programmstrukturen, 1995]&amp;lt;br&amp;gt;&lt;br /&gt;
[4] Peter Coad, with David North, and Mark Mayfield. Object Models: Strategies, Patterns, and Applications. Englewood Cliffs, NJ: Prentice Hall, 1995.&amp;lt;br&amp;gt;&lt;br /&gt;
[5] Wolfgang Pree. Design Patterns for Object-Oriented Software Development. Addison-Wesley, 1995.&amp;lt;br&amp;gt;&lt;br /&gt;
[6] Frank Buschman and Regine Meunier. “A System of Patterns.&amp;quot; In J. O. Coplien and D. C. Schmidt (eds.), Pattern Languages of Program Design. Reading, MA: Addison-Wesley, 1995, pp. 325-343.&amp;lt;br&amp;gt;&lt;br /&gt;
[6] [http://wwwipd.ira.uka.de/~tichy/publications/Catalogue.doc Tichy, Walter F (1998), A Catalogue of General-Purpose Software Design Patterns. University of Karlsruhe, Karlsruhe, Germany.]&amp;lt;br&amp;gt;&lt;br /&gt;
[7] [http://doi.acm.org/10.1145/361598.361623 Parnas, D. L. 1972. On the criteria to be used in decomposing systems into modules. Commun. ACM 15, 12 (Dec. 1972), 1053-1058.]&amp;lt;br&amp;gt; &lt;br /&gt;
[8] [http://www.cs.cmu.edu/afs/cs.cmu.edu/project/vit/ftp/pdf/PLoP95.pdf Some Patterns for Software Architectures, Mary Shaw, Carnegie Mellon University]&lt;/div&gt;</summary>
		<author><name>Quick Gun Murugan</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_12_Schemes_for_Pattern_Classification&amp;diff=25734</id>
		<title>CSC/ECE 517 Fall 2009/wiki2 12 Schemes for Pattern Classification</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_12_Schemes_for_Pattern_Classification&amp;diff=25734"/>
		<updated>2009-10-13T00:32:06Z</updated>

		<summary type="html">&lt;p&gt;Quick Gun Murugan: /* References */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=='''Overview'''==&lt;br /&gt;
[http://en.wikipedia.org/wiki/Design_pattern_(computer_science) Design patterns] in [http://en.wikipedia.org/wiki/Software_engineering software engineering] is a time-tested reusable solution to recurring problems in [http://en.wikipedia.org/wiki/Software_design software design]. The origin of design patterns can be owed to the work of civil engineer [http://en.wikipedia.org/wiki/Christopher_Alexander Christopher Alexander], who documented his resolution to design issues in constructing buildings and towns[1]. About a decade and a half ago, software professional began to incorporate Alexanders ideas into guides for novice developers. From then on design patterns became increasingly popular.&lt;br /&gt;
&lt;br /&gt;
=='''Schemes for Pattern Classification'''==&lt;br /&gt;
===Gang of Four's Classification===&lt;br /&gt;
Design Patterns gained popularity with the book [http://en.wikipedia.org/wiki/Design_Patterns_(book) Design Patterns: Elements of Reusable Object-Oriented Software] by [http://en.wikipedia.org/wiki/Erich_Gamma Erich Gamma], [http://en.wikipedia.org/wiki/Richard_Helm Richard Helm], [http://en.wikipedia.org/wiki/Ralph_Johnson Ralph Johnson] and [http://en.wikipedia.org/wiki/John_Vlissides John Vlissides] published in 1995. In their work they used 2 criteria to categorize 23 design pattern[2].&lt;br /&gt;
* What does the pattern do?&lt;br /&gt;
** [http://en.wikipedia.org/wiki/Structural_pattern Structural] - These patterns deal with the composition of classes and their object.&lt;br /&gt;
** [http://en.wikipedia.org/wiki/Creational_pattern Creational] - These patterns deal with object creation.&lt;br /&gt;
** [http://en.wikipedia.org/wiki/Behavioral_pattern Behavioral] - These patterns deal with the interaction between classes and object and how they delegate responsibility.&lt;br /&gt;
&lt;br /&gt;
* What is the scope of the pattern?&lt;br /&gt;
** Class - The patterns deal with the relationships between classes and their subclasses. These are more static and fixed at compile time. &lt;br /&gt;
** Object - These patterns deal with object relationship. They are more dynamic and can vary at runtime.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;4&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|+ Example of Design Patterns that fall into each Category&lt;br /&gt;
|colspan=&amp;quot;5&amp;quot; align=&amp;quot;center&amp;quot;|'''Purpose'''&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Scope'''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Creational'''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Structural'''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Behavioral'''&lt;br /&gt;
|-&lt;br /&gt;
|rowspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot;|Class &lt;br /&gt;
|rowspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Factory_method_pattern| Factory Method]&lt;br /&gt;
|rowspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Adapter_pattern| Adapter (class)]&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Interpreter_pattern| Interpreter]&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Template_method_pattern| Template Method]&lt;br /&gt;
|-&lt;br /&gt;
|rowspan=&amp;quot;9&amp;quot; align=&amp;quot;center&amp;quot;|Object&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Abstract_factory_pattern| Abstract Factory]&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Adapter_pattern| Adapter (object)]&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Command_pattern| Command]&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Prototype_pattern| Prototype]&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Composite_pattern| Composite]&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Mediator_pattern| Mediator]&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Builder_pattern| Builder]&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Bridge_pattern| Bridge]&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Iterator_pattern| Iterator]&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Singleton_pattern| Singleton]&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Decorator_pattern| Decorator]&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Memento_pattern| Memento]&lt;br /&gt;
|-&lt;br /&gt;
|rowspan=&amp;quot;5&amp;quot; align=&amp;quot;center&amp;quot;| &lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Facade_pattern| Facade]&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Observer_pattern| Observer]&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Flyweight_pattern| Flyweight]&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/State_pattern| State]&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Proxy_pattern| Proxy]&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Strategy_pattern| Strategy]&lt;br /&gt;
|-&lt;br /&gt;
|rowspan=&amp;quot;2&amp;quot;  align=&amp;quot;center&amp;quot;| &lt;br /&gt;
|align=&amp;quot;center&amp;quot;| [http://en.wikipedia.org/wiki/Visitor_pattern| Visitor]&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Chain-of-responsibility_pattern| Chain Of Responsibility]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Zimmer's Classification===&lt;br /&gt;
Zimmer[3] classifies the relationships between the Gang of Four design patterns. Focusing on the problem and solution of each relationship, they can be classified as :&lt;br /&gt;
* X uses Y in its solution.&lt;br /&gt;
** The [http://en.wikipedia.org/wiki/Interpreter_pattern| Interpreter] design pattern uses the [http://en.wikipedia.org/wiki/Composite_pattern| Composite] design patter.&lt;br /&gt;
** The [http://en.wikipedia.org/wiki/Prototype_pattern| Prototype] design pattern uses the [http://en.wikipedia.org/wiki/Singleton_pattern| Singleton] design pattern.&lt;br /&gt;
* Variant of X uses Y in its solution.&lt;br /&gt;
** Some variant of the [http://en.wikipedia.org/wiki/Bridge_pattern| Bridge] design pattern may uses the [http://en.wikipedia.org/wiki/Adapter_pattern| Adapter] design pattern.&lt;br /&gt;
* X is similar to Y.&lt;br /&gt;
** The [http://en.wikipedia.org/wiki/Mediator_pattern| Mediator] design pattern is similar to the [http://en.wikipedia.org/wiki/Facade_pattern| Facade] design pattern.&lt;br /&gt;
&lt;br /&gt;
Using these relationships Zimmer placed design pattern in 3 layers.&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;4&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Layer'''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Design Pattern'''&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Basic design patterns and techniques.&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Singleton_pattern| Singleton], [http://en.wikipedia.org/wiki/Template_method_pattern| Template Method], [http://en.wikipedia.org/wiki/Mediator_pattern| Mediator], [http://en.wikipedia.org/wiki/Facade_pattern| Facade], [http://en.wikipedia.org/wiki/Memento_pattern| Memento], [http://en.wikipedia.org/wiki/Iterator_pattern| Iterator], [http://en.wikipedia.org/wiki/Flyweight_pattern| Flyweight].&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Design patterns for typical software problems.&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Abstract_factory_pattern| Abstract Factory], [http://en.wikipedia.org/wiki/Builder_pattern| Builder], [http://en.wikipedia.org/wiki/Strategy_pattern| Strategy], [http://en.wikipedia.org/wiki/Observer_pattern| Observer], [http://en.wikipedia.org/wiki/Bridge_pattern| Bridge], [http://en.wikipedia.org/wiki/Adapter_pattern| Adapter], [http://en.wikipedia.org/wiki/Prototype_pattern| Prototype], [http://en.wikipedia.org/wiki/Factory_method_pattern| Factory Method], [http://en.wikipedia.org/wiki/State_pattern| State], [http://en.wikipedia.org/wiki/Command_pattern| Command], [http://en.wikipedia.org/wiki/Visitor_pattern| Visitor], [http://en.wikipedia.org/wiki/Composite_pattern| Composite], [http://en.wikipedia.org/wiki/Decorator_pattern| Decorator], [http://en.wikipedia.org/wiki/Chain-of-responsibility_pattern| Chain Of Responsibility], [http://en.wikipedia.org/wiki/Proxy_pattern| Proxy]&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Design patterns specific to an application domain.&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Interpreter_pattern| Interpreter]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Coad's Classification===&lt;br /&gt;
In 1992 Peter Coad published his first article of design patterns. According to Coad, design patterns are identified observing classes, objects and the relationships established between them[5]. In his book Object Models: Strategies, Patterns, and Applications, Peter Coad along with David North and Mark Mayfield organized patterns into various pattern families[4].&lt;br /&gt;
* '''Fundamental Pattern''': This pattern is the template that all the other patterns follow.&lt;br /&gt;
** Collection-Worker Pattern is the fundamental object model pattern.&lt;br /&gt;
* '''Transaction Patterns''': These either have transaction players or have players that commonly play with the transaction player. The transaction patterns are:&lt;br /&gt;
** Actor-Participant pattern.&lt;br /&gt;
** Participant-Transaction pattern.&lt;br /&gt;
** Place-Transaction pattern.&lt;br /&gt;
** Specific Item-Transaction pattern.&lt;br /&gt;
** Transaction-Transaction Line Item pattern.&lt;br /&gt;
** Transaction-Subsequent Transaction pattern.&lt;br /&gt;
** Transaction Line Item-Subsequent Transaction Line Item pattern.&lt;br /&gt;
** Item-Line Item pattern.&lt;br /&gt;
** Specific Item-Line Item.&lt;br /&gt;
** Item-Specific Item.&lt;br /&gt;
** Associate-Other Associate.&lt;br /&gt;
** Specific Item-Hierarchical Item.&lt;br /&gt;
* '''Aggregate Patterns''': These patterns interconnect with other patterns. The aggregate patterns are:&lt;br /&gt;
** Container-Content pattern.&lt;br /&gt;
** Container-Container Line Item pattern.&lt;br /&gt;
** Group-Member.&lt;br /&gt;
** Assembly-Part pattern.&lt;br /&gt;
** Compound Part-Part pattern.&lt;br /&gt;
** Packet-Packet Component.&lt;br /&gt;
* '''Plan Patterns''': The plan patterns are:&lt;br /&gt;
** Plan-Step pattern.&lt;br /&gt;
** Plan-Plan Execution pattern.&lt;br /&gt;
** Plan Execution-Step Execution pattern.&lt;br /&gt;
** Step-Step Execution pattern.&lt;br /&gt;
** Plan-Plan Version pattern.&lt;br /&gt;
* '''Interaction Patterns''': These patterns, as the name suggests are patterns of interaction. The interaction patterns are:&lt;br /&gt;
** Peer-Peer pattern.&lt;br /&gt;
** Proxy-Specific Item pattern.&lt;br /&gt;
** Publisher-Subscriber pattern.&lt;br /&gt;
** Sender-Pass Through-Receiver pattern.&lt;br /&gt;
** Sender-Lookup-Receiver pattern.&lt;br /&gt;
** Caller-Dispatcher-Caller Back pattern.&lt;br /&gt;
** Gatekeeper-Request-Resource pattern.&lt;br /&gt;
&lt;br /&gt;
===Pree's Classification===&lt;br /&gt;
In his book Design Patterns for Object-Oriented Software Development, Addison-Wesley, 1995, Wolfgang Pree categorized Coad's patterns into[5]:&lt;br /&gt;
* '''Basic inheritance and interaction patterns:''' These patterns encompass primarily the basic modelling capabilities offered by object oriented programming languages.&lt;br /&gt;
* '''Patterns for structuring object-oriented software systems: '''Most of Coad's patterns belong to this category.  &lt;br /&gt;
* '''Patterns related to the [http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller MVC] framework: ''' Those of Coad's patterns that stress the framework aspect are derivatives of the Model/View/Controller framework.&lt;br /&gt;
Ignoring the fine-grained[5] pattern classification proposed by Gamma's catalog, Pree applied the following classification of the listed patterns.&lt;br /&gt;
* '''Patterns relying on abstract coupling: '''Most of the patterns in the catalog are based on abstractly coupled classes. [http://en.wikipedia.org/wiki/Factory_method_pattern| Factory Method pattern] and [http://en.wikipedia.org/wiki/Observer_pattern| Observer pattern] for example.  &lt;br /&gt;
* '''Patterns based on recursive structures: ''' [http://en.wikipedia.org/wiki/Composite_pattern| Composite] pattern, [http://en.wikipedia.org/wiki/Chain-of-responsibility_pattern| Chain Of Responsibility] pattern, [http://en.wikipedia.org/wiki/Decorator_pattern| Decorator] pattern are all based on recursive structures. &lt;br /&gt;
* '''Other Catalog patterns''': Pree summarized the rest of the patterns as follows:&lt;br /&gt;
** An [http://en.wikipedia.org/wiki/Abstract_factory_pattern| Abstract Factory] pattern is close to the [http://en.wikipedia.org/wiki/Factory_method_pattern| Factory Method] pattern&lt;br /&gt;
** [http://en.wikipedia.org/wiki/Flyweight_pattern| Flyweight] pattern represents a pattern similar to Coad's Item-Description pattern.&lt;br /&gt;
** [http://en.wikipedia.org/wiki/Singleton_pattern| Singleton] pattern is a coding patterns that limits the number of creatable instances of a class to one.&lt;br /&gt;
** [http://en.wikipedia.org/wiki/Template_method_pattern| Template Method] pattern forms the basis of all patterns dealing with with abstract classes.&lt;br /&gt;
&lt;br /&gt;
==='''Buschman et. al's Classification'''===&lt;br /&gt;
Frank Buschman and Regine Meunier identified the following categories[6]:&lt;br /&gt;
* '''Granularity: ''' Three levels of granularity can be specified. &lt;br /&gt;
** [http://en.wikipedia.org/wiki/Architectural_pattern_(computer_science) Architectural Framework]: Every software architecture is built according to an overall structuring principles described by architectural frameworks. Example: The [http://en.wikipedia.org/wiki/Model-view-controller Model-View-Controller] framework.&lt;br /&gt;
** [http://en.wikipedia.org/wiki/Design_pattern_(computer_science) Design Patterns]: These can be described as the smaller architectural units.&lt;br /&gt;
** [http://en.wikipedia.org/wiki/Programming_idiom Idioms]: Idioms represent the lowest level of a pattern and are closely related to a particular programming language. Example: [http://en.wikibooks.org/wiki/More_C%2B%2B_Idioms/Counted_Body The Counted Body] Idiom.&lt;br /&gt;
&lt;br /&gt;
*'''Functionality: '''Each pattern serves as a means to implement a particular functionality. The following categories of functionality can be distinguished:&lt;br /&gt;
** Creation of objects: Patterns may specify how to create particular instances of complex recursive or aggregate object structures. Example: [http://en.wikipedia.org/wiki/Singleton_pattern Singleton pattern]&lt;br /&gt;
** Guiding Communication between objects: Patterns may describe how to organize communication between a set of collaborating objects.&lt;br /&gt;
** Access to objects: Patterns may describe how to access the services and state of shared or remote objects in a safe way. Example: [http://en.wikipedia.org/wiki/Proxy_pattern Proxy pattern]&lt;br /&gt;
** Organizing the computation of the complex tasks: Patterns may specify how to distribute responsibilities among cooperating objects in order to solve a more complex task. Example: [http://en.wikipedia.org/wiki/Command_pattern Command pattern]&lt;br /&gt;
&lt;br /&gt;
*'''Structural Principles: ''' To achieve their functionality, patterns rely on certain architectural principles. These principles can be categorized as:&lt;br /&gt;
** Abstraction: A pattern provides an abstract view of a particular entity or task in a software system. Example: [http://en.wikipedia.org/wiki/Facade_pattern Facade pattern]&lt;br /&gt;
** Encapsulation: A pattern encapsulates details of a particular object, component, or service to remove dependencies on it from its clients or to protect these details from access. Example: [http://en.wikipedia.org/wiki/Mediator_pattern Mediator pattern]&lt;br /&gt;
** Separation of concerns: A pattern factors out specific responsibilities into separate objects or components.&lt;br /&gt;
** Coupling and Cohesion: A patterns removes dependencies between strongly coupled objects. Example: [http://en.wikipedia.org/wiki/Bridge_pattern Bridge pattern]&lt;br /&gt;
&lt;br /&gt;
This classification scheme is not intended as a means of picking out the right pattern, but merely a guide for designers helping them search for the pattern appropriate for a particular situation.&lt;br /&gt;
&lt;br /&gt;
===Tichy's Classification===&lt;br /&gt;
Walter Tichy classified several design patterns based on the kind of problems they solved. He grouped the problems into the following high-level categories[6]:&lt;br /&gt;
* Decoupling: dividing a software system into in-dependent parts in such a way that the parts can be built, changed, replaced, and reused independently. Decoupling patterns can be further classified into:&lt;br /&gt;
** Modules([http://en.wikipedia.org/wiki/Encapsulation_(computer_science)#Encapsulation Encapsulation]/[http://en.wikipedia.org/wiki/Information_hiding Information Hiding])[7]: The purpose of this design pattern is to hide data structure and operations that are most likely to change, thus protecting other parts of the system from the effects of those changes. Examples for support of modules are &lt;br /&gt;
*** [http://en.wikipedia.org/wiki/Modula Modula's] modules.&lt;br /&gt;
*** [http://en.wikipedia.org/wiki/C_(programming_language) C's] header files.&lt;br /&gt;
***[http://en.wikipedia.org/wiki/Ada_(programming_language) Ada's] packages.&lt;br /&gt;
** Abstract Data Type[ADT]: Some examples of ADT&lt;br /&gt;
*** &lt;br /&gt;
&lt;br /&gt;
* Variant Management: treating different objects uniformly by factoring out their commonality. &lt;br /&gt;
* State Handling: generic manipulation of object state.&lt;br /&gt;
* Control: control of execution and method selec-tion.&lt;br /&gt;
* Virtual Machines: simulated processors.&lt;br /&gt;
* Convenience Patterns: simplified coding.&lt;br /&gt;
* Compound Patterns: patterns composed from others, with the original patterns visible.&lt;br /&gt;
* Concurrency: controlling parallel and concurrent execution.&lt;br /&gt;
* Distribution: problems germane to distributed systems.&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
[1] http://www.developer.com/design/article.php/1474561/What-Are-Design-Patterns-and-Do-I-Need-Them.htm&amp;lt;br&amp;gt;&lt;br /&gt;
[2] http://www.cs.umu.se/~jubo/ExJobbs/MK/patterns.htm&amp;lt;br&amp;gt;&lt;br /&gt;
[3] [http://reference.kfupm.edu.sa/content/r/e/relationships_between_design_patterns__148528.pdf Relationships between Design Patterns, by Walter Zimmer, Forschungszentrum Informatik, Bereich Programmstrukturen, 1995]&amp;lt;br&amp;gt;&lt;br /&gt;
[4] Peter Coad, with David North, and Mark Mayfield. Object Models: Strategies, Patterns, and Applications. Englewood Cliffs, NJ: Prentice Hall, 1995.&amp;lt;br&amp;gt;&lt;br /&gt;
[5] Wolfgang Pree. Design Patterns for Object-Oriented Software Development. Addison-Wesley, 1995.&amp;lt;br&amp;gt;&lt;br /&gt;
[6] Frank Buschman and Regine Meunier. “A System of Patterns.&amp;quot; In J. O. Coplien and D. C. Schmidt (eds.), Pattern Languages of Program Design. Reading, MA: Addison-Wesley, 1995, pp. 325-343.&amp;lt;br&amp;gt;&lt;br /&gt;
[6] [http://wwwipd.ira.uka.de/~tichy/publications/Catalogue.doc Tichy, Walter F (1998), A Catalogue of General-Purpose Software Design Patterns. University of Karlsruhe, Karlsruhe, Germany.]&amp;lt;br&amp;gt;&lt;br /&gt;
[7] [http://doi.acm.org/10.1145/361598.361623 Parnas, D. L. 1972. On the criteria to be used in decomposing systems into modules. Commun. ACM 15, 12 (Dec. 1972), 1053-1058.]&amp;lt;br&amp;gt; &lt;br /&gt;
[8] [http://www.cs.cmu.edu/afs/cs.cmu.edu/project/vit/ftp/pdf/PLoP95.pdf Some Patterns for Software Architectures, Mary Shaw, Carnegie Mellon University]&lt;/div&gt;</summary>
		<author><name>Quick Gun Murugan</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_12_Schemes_for_Pattern_Classification&amp;diff=25733</id>
		<title>CSC/ECE 517 Fall 2009/wiki2 12 Schemes for Pattern Classification</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_12_Schemes_for_Pattern_Classification&amp;diff=25733"/>
		<updated>2009-10-13T00:31:23Z</updated>

		<summary type="html">&lt;p&gt;Quick Gun Murugan: /* Schemes for Pattern Classification */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=='''Overview'''==&lt;br /&gt;
[http://en.wikipedia.org/wiki/Design_pattern_(computer_science) Design patterns] in [http://en.wikipedia.org/wiki/Software_engineering software engineering] is a time-tested reusable solution to recurring problems in [http://en.wikipedia.org/wiki/Software_design software design]. The origin of design patterns can be owed to the work of civil engineer [http://en.wikipedia.org/wiki/Christopher_Alexander Christopher Alexander], who documented his resolution to design issues in constructing buildings and towns[1]. About a decade and a half ago, software professional began to incorporate Alexanders ideas into guides for novice developers. From then on design patterns became increasingly popular.&lt;br /&gt;
&lt;br /&gt;
=='''Schemes for Pattern Classification'''==&lt;br /&gt;
===Gang of Four's Classification===&lt;br /&gt;
Design Patterns gained popularity with the book [http://en.wikipedia.org/wiki/Design_Patterns_(book) Design Patterns: Elements of Reusable Object-Oriented Software] by [http://en.wikipedia.org/wiki/Erich_Gamma Erich Gamma], [http://en.wikipedia.org/wiki/Richard_Helm Richard Helm], [http://en.wikipedia.org/wiki/Ralph_Johnson Ralph Johnson] and [http://en.wikipedia.org/wiki/John_Vlissides John Vlissides] published in 1995. In their work they used 2 criteria to categorize 23 design pattern[2].&lt;br /&gt;
* What does the pattern do?&lt;br /&gt;
** [http://en.wikipedia.org/wiki/Structural_pattern Structural] - These patterns deal with the composition of classes and their object.&lt;br /&gt;
** [http://en.wikipedia.org/wiki/Creational_pattern Creational] - These patterns deal with object creation.&lt;br /&gt;
** [http://en.wikipedia.org/wiki/Behavioral_pattern Behavioral] - These patterns deal with the interaction between classes and object and how they delegate responsibility.&lt;br /&gt;
&lt;br /&gt;
* What is the scope of the pattern?&lt;br /&gt;
** Class - The patterns deal with the relationships between classes and their subclasses. These are more static and fixed at compile time. &lt;br /&gt;
** Object - These patterns deal with object relationship. They are more dynamic and can vary at runtime.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;4&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|+ Example of Design Patterns that fall into each Category&lt;br /&gt;
|colspan=&amp;quot;5&amp;quot; align=&amp;quot;center&amp;quot;|'''Purpose'''&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Scope'''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Creational'''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Structural'''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Behavioral'''&lt;br /&gt;
|-&lt;br /&gt;
|rowspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot;|Class &lt;br /&gt;
|rowspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Factory_method_pattern| Factory Method]&lt;br /&gt;
|rowspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Adapter_pattern| Adapter (class)]&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Interpreter_pattern| Interpreter]&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Template_method_pattern| Template Method]&lt;br /&gt;
|-&lt;br /&gt;
|rowspan=&amp;quot;9&amp;quot; align=&amp;quot;center&amp;quot;|Object&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Abstract_factory_pattern| Abstract Factory]&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Adapter_pattern| Adapter (object)]&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Command_pattern| Command]&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Prototype_pattern| Prototype]&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Composite_pattern| Composite]&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Mediator_pattern| Mediator]&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Builder_pattern| Builder]&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Bridge_pattern| Bridge]&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Iterator_pattern| Iterator]&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Singleton_pattern| Singleton]&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Decorator_pattern| Decorator]&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Memento_pattern| Memento]&lt;br /&gt;
|-&lt;br /&gt;
|rowspan=&amp;quot;5&amp;quot; align=&amp;quot;center&amp;quot;| &lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Facade_pattern| Facade]&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Observer_pattern| Observer]&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Flyweight_pattern| Flyweight]&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/State_pattern| State]&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Proxy_pattern| Proxy]&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Strategy_pattern| Strategy]&lt;br /&gt;
|-&lt;br /&gt;
|rowspan=&amp;quot;2&amp;quot;  align=&amp;quot;center&amp;quot;| &lt;br /&gt;
|align=&amp;quot;center&amp;quot;| [http://en.wikipedia.org/wiki/Visitor_pattern| Visitor]&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Chain-of-responsibility_pattern| Chain Of Responsibility]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Zimmer's Classification===&lt;br /&gt;
Zimmer[3] classifies the relationships between the Gang of Four design patterns. Focusing on the problem and solution of each relationship, they can be classified as :&lt;br /&gt;
* X uses Y in its solution.&lt;br /&gt;
** The [http://en.wikipedia.org/wiki/Interpreter_pattern| Interpreter] design pattern uses the [http://en.wikipedia.org/wiki/Composite_pattern| Composite] design patter.&lt;br /&gt;
** The [http://en.wikipedia.org/wiki/Prototype_pattern| Prototype] design pattern uses the [http://en.wikipedia.org/wiki/Singleton_pattern| Singleton] design pattern.&lt;br /&gt;
* Variant of X uses Y in its solution.&lt;br /&gt;
** Some variant of the [http://en.wikipedia.org/wiki/Bridge_pattern| Bridge] design pattern may uses the [http://en.wikipedia.org/wiki/Adapter_pattern| Adapter] design pattern.&lt;br /&gt;
* X is similar to Y.&lt;br /&gt;
** The [http://en.wikipedia.org/wiki/Mediator_pattern| Mediator] design pattern is similar to the [http://en.wikipedia.org/wiki/Facade_pattern| Facade] design pattern.&lt;br /&gt;
&lt;br /&gt;
Using these relationships Zimmer placed design pattern in 3 layers.&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;4&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Layer'''&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|'''Design Pattern'''&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Basic design patterns and techniques.&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Singleton_pattern| Singleton], [http://en.wikipedia.org/wiki/Template_method_pattern| Template Method], [http://en.wikipedia.org/wiki/Mediator_pattern| Mediator], [http://en.wikipedia.org/wiki/Facade_pattern| Facade], [http://en.wikipedia.org/wiki/Memento_pattern| Memento], [http://en.wikipedia.org/wiki/Iterator_pattern| Iterator], [http://en.wikipedia.org/wiki/Flyweight_pattern| Flyweight].&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Design patterns for typical software problems.&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Abstract_factory_pattern| Abstract Factory], [http://en.wikipedia.org/wiki/Builder_pattern| Builder], [http://en.wikipedia.org/wiki/Strategy_pattern| Strategy], [http://en.wikipedia.org/wiki/Observer_pattern| Observer], [http://en.wikipedia.org/wiki/Bridge_pattern| Bridge], [http://en.wikipedia.org/wiki/Adapter_pattern| Adapter], [http://en.wikipedia.org/wiki/Prototype_pattern| Prototype], [http://en.wikipedia.org/wiki/Factory_method_pattern| Factory Method], [http://en.wikipedia.org/wiki/State_pattern| State], [http://en.wikipedia.org/wiki/Command_pattern| Command], [http://en.wikipedia.org/wiki/Visitor_pattern| Visitor], [http://en.wikipedia.org/wiki/Composite_pattern| Composite], [http://en.wikipedia.org/wiki/Decorator_pattern| Decorator], [http://en.wikipedia.org/wiki/Chain-of-responsibility_pattern| Chain Of Responsibility], [http://en.wikipedia.org/wiki/Proxy_pattern| Proxy]&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Design patterns specific to an application domain.&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://en.wikipedia.org/wiki/Interpreter_pattern| Interpreter]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Coad's Classification===&lt;br /&gt;
In 1992 Peter Coad published his first article of design patterns. According to Coad, design patterns are identified observing classes, objects and the relationships established between them[5]. In his book Object Models: Strategies, Patterns, and Applications, Peter Coad along with David North and Mark Mayfield organized patterns into various pattern families[4].&lt;br /&gt;
* '''Fundamental Pattern''': This pattern is the template that all the other patterns follow.&lt;br /&gt;
** Collection-Worker Pattern is the fundamental object model pattern.&lt;br /&gt;
* '''Transaction Patterns''': These either have transaction players or have players that commonly play with the transaction player. The transaction patterns are:&lt;br /&gt;
** Actor-Participant pattern.&lt;br /&gt;
** Participant-Transaction pattern.&lt;br /&gt;
** Place-Transaction pattern.&lt;br /&gt;
** Specific Item-Transaction pattern.&lt;br /&gt;
** Transaction-Transaction Line Item pattern.&lt;br /&gt;
** Transaction-Subsequent Transaction pattern.&lt;br /&gt;
** Transaction Line Item-Subsequent Transaction Line Item pattern.&lt;br /&gt;
** Item-Line Item pattern.&lt;br /&gt;
** Specific Item-Line Item.&lt;br /&gt;
** Item-Specific Item.&lt;br /&gt;
** Associate-Other Associate.&lt;br /&gt;
** Specific Item-Hierarchical Item.&lt;br /&gt;
* '''Aggregate Patterns''': These patterns interconnect with other patterns. The aggregate patterns are:&lt;br /&gt;
** Container-Content pattern.&lt;br /&gt;
** Container-Container Line Item pattern.&lt;br /&gt;
** Group-Member.&lt;br /&gt;
** Assembly-Part pattern.&lt;br /&gt;
** Compound Part-Part pattern.&lt;br /&gt;
** Packet-Packet Component.&lt;br /&gt;
* '''Plan Patterns''': The plan patterns are:&lt;br /&gt;
** Plan-Step pattern.&lt;br /&gt;
** Plan-Plan Execution pattern.&lt;br /&gt;
** Plan Execution-Step Execution pattern.&lt;br /&gt;
** Step-Step Execution pattern.&lt;br /&gt;
** Plan-Plan Version pattern.&lt;br /&gt;
* '''Interaction Patterns''': These patterns, as the name suggests are patterns of interaction. The interaction patterns are:&lt;br /&gt;
** Peer-Peer pattern.&lt;br /&gt;
** Proxy-Specific Item pattern.&lt;br /&gt;
** Publisher-Subscriber pattern.&lt;br /&gt;
** Sender-Pass Through-Receiver pattern.&lt;br /&gt;
** Sender-Lookup-Receiver pattern.&lt;br /&gt;
** Caller-Dispatcher-Caller Back pattern.&lt;br /&gt;
** Gatekeeper-Request-Resource pattern.&lt;br /&gt;
&lt;br /&gt;
===Pree's Classification===&lt;br /&gt;
In his book Design Patterns for Object-Oriented Software Development, Addison-Wesley, 1995, Wolfgang Pree categorized Coad's patterns into[5]:&lt;br /&gt;
* '''Basic inheritance and interaction patterns:''' These patterns encompass primarily the basic modelling capabilities offered by object oriented programming languages.&lt;br /&gt;
* '''Patterns for structuring object-oriented software systems: '''Most of Coad's patterns belong to this category.  &lt;br /&gt;
* '''Patterns related to the [http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller MVC] framework: ''' Those of Coad's patterns that stress the framework aspect are derivatives of the Model/View/Controller framework.&lt;br /&gt;
Ignoring the fine-grained[5] pattern classification proposed by Gamma's catalog, Pree applied the following classification of the listed patterns.&lt;br /&gt;
* '''Patterns relying on abstract coupling: '''Most of the patterns in the catalog are based on abstractly coupled classes. [http://en.wikipedia.org/wiki/Factory_method_pattern| Factory Method pattern] and [http://en.wikipedia.org/wiki/Observer_pattern| Observer pattern] for example.  &lt;br /&gt;
* '''Patterns based on recursive structures: ''' [http://en.wikipedia.org/wiki/Composite_pattern| Composite] pattern, [http://en.wikipedia.org/wiki/Chain-of-responsibility_pattern| Chain Of Responsibility] pattern, [http://en.wikipedia.org/wiki/Decorator_pattern| Decorator] pattern are all based on recursive structures. &lt;br /&gt;
* '''Other Catalog patterns''': Pree summarized the rest of the patterns as follows:&lt;br /&gt;
** An [http://en.wikipedia.org/wiki/Abstract_factory_pattern| Abstract Factory] pattern is close to the [http://en.wikipedia.org/wiki/Factory_method_pattern| Factory Method] pattern&lt;br /&gt;
** [http://en.wikipedia.org/wiki/Flyweight_pattern| Flyweight] pattern represents a pattern similar to Coad's Item-Description pattern.&lt;br /&gt;
** [http://en.wikipedia.org/wiki/Singleton_pattern| Singleton] pattern is a coding patterns that limits the number of creatable instances of a class to one.&lt;br /&gt;
** [http://en.wikipedia.org/wiki/Template_method_pattern| Template Method] pattern forms the basis of all patterns dealing with with abstract classes.&lt;br /&gt;
&lt;br /&gt;
==='''Buschman et. al's Classification'''===&lt;br /&gt;
Frank Buschman and Regine Meunier identified the following categories[6]:&lt;br /&gt;
* '''Granularity: ''' Three levels of granularity can be specified. &lt;br /&gt;
** [http://en.wikipedia.org/wiki/Architectural_pattern_(computer_science) Architectural Framework]: Every software architecture is built according to an overall structuring principles described by architectural frameworks. Example: The [http://en.wikipedia.org/wiki/Model-view-controller Model-View-Controller] framework.&lt;br /&gt;
** [http://en.wikipedia.org/wiki/Design_pattern_(computer_science) Design Patterns]: These can be described as the smaller architectural units.&lt;br /&gt;
** [http://en.wikipedia.org/wiki/Programming_idiom Idioms]: Idioms represent the lowest level of a pattern and are closely related to a particular programming language. Example: [http://en.wikibooks.org/wiki/More_C%2B%2B_Idioms/Counted_Body The Counted Body] Idiom.&lt;br /&gt;
&lt;br /&gt;
*'''Functionality: '''Each pattern serves as a means to implement a particular functionality. The following categories of functionality can be distinguished:&lt;br /&gt;
** Creation of objects: Patterns may specify how to create particular instances of complex recursive or aggregate object structures. Example: [http://en.wikipedia.org/wiki/Singleton_pattern Singleton pattern]&lt;br /&gt;
** Guiding Communication between objects: Patterns may describe how to organize communication between a set of collaborating objects.&lt;br /&gt;
** Access to objects: Patterns may describe how to access the services and state of shared or remote objects in a safe way. Example: [http://en.wikipedia.org/wiki/Proxy_pattern Proxy pattern]&lt;br /&gt;
** Organizing the computation of the complex tasks: Patterns may specify how to distribute responsibilities among cooperating objects in order to solve a more complex task. Example: [http://en.wikipedia.org/wiki/Command_pattern Command pattern]&lt;br /&gt;
&lt;br /&gt;
*'''Structural Principles: ''' To achieve their functionality, patterns rely on certain architectural principles. These principles can be categorized as:&lt;br /&gt;
** Abstraction: A pattern provides an abstract view of a particular entity or task in a software system. Example: [http://en.wikipedia.org/wiki/Facade_pattern Facade pattern]&lt;br /&gt;
** Encapsulation: A pattern encapsulates details of a particular object, component, or service to remove dependencies on it from its clients or to protect these details from access. Example: [http://en.wikipedia.org/wiki/Mediator_pattern Mediator pattern]&lt;br /&gt;
** Separation of concerns: A pattern factors out specific responsibilities into separate objects or components.&lt;br /&gt;
** Coupling and Cohesion: A patterns removes dependencies between strongly coupled objects. Example: [http://en.wikipedia.org/wiki/Bridge_pattern Bridge pattern]&lt;br /&gt;
&lt;br /&gt;
This classification scheme is not intended as a means of picking out the right pattern, but merely a guide for designers helping them search for the pattern appropriate for a particular situation.&lt;br /&gt;
&lt;br /&gt;
===Tichy's Classification===&lt;br /&gt;
Walter Tichy classified several design patterns based on the kind of problems they solved. He grouped the problems into the following high-level categories[6]:&lt;br /&gt;
* Decoupling: dividing a software system into in-dependent parts in such a way that the parts can be built, changed, replaced, and reused independently. Decoupling patterns can be further classified into:&lt;br /&gt;
** Modules([http://en.wikipedia.org/wiki/Encapsulation_(computer_science)#Encapsulation Encapsulation]/[http://en.wikipedia.org/wiki/Information_hiding Information Hiding])[7]: The purpose of this design pattern is to hide data structure and operations that are most likely to change, thus protecting other parts of the system from the effects of those changes. Examples for support of modules are &lt;br /&gt;
*** [http://en.wikipedia.org/wiki/Modula Modula's] modules.&lt;br /&gt;
*** [http://en.wikipedia.org/wiki/C_(programming_language) C's] header files.&lt;br /&gt;
***[http://en.wikipedia.org/wiki/Ada_(programming_language) Ada's] packages.&lt;br /&gt;
** Abstract Data Type[ADT]: Some examples of ADT&lt;br /&gt;
*** &lt;br /&gt;
&lt;br /&gt;
* Variant Management: treating different objects uniformly by factoring out their commonality. &lt;br /&gt;
* State Handling: generic manipulation of object state.&lt;br /&gt;
* Control: control of execution and method selec-tion.&lt;br /&gt;
* Virtual Machines: simulated processors.&lt;br /&gt;
* Convenience Patterns: simplified coding.&lt;br /&gt;
* Compound Patterns: patterns composed from others, with the original patterns visible.&lt;br /&gt;
* Concurrency: controlling parallel and concurrent execution.&lt;br /&gt;
* Distribution: problems germane to distributed systems.&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
[1] http://www.developer.com/design/article.php/1474561/What-Are-Design-Patterns-and-Do-I-Need-Them.htm&amp;lt;br&amp;gt;&lt;br /&gt;
[2] http://www.cs.umu.se/~jubo/ExJobbs/MK/patterns.htm&amp;lt;br&amp;gt;&lt;br /&gt;
[3] [http://reference.kfupm.edu.sa/content/r/e/relationships_between_design_patterns__148528.pdf Relationships between Design Patterns, by Walter Zimmer, Forschungszentrum Informatik, Bereich Programmstrukturen, 1995]&amp;lt;br&amp;gt;&lt;br /&gt;
[4] Peter Coad, with David North, and Mark Mayfield. Object Models: Strategies, Patterns, and Applications. Englewood Cliffs, NJ: Prentice Hall, 1995.&amp;lt;br&amp;gt;&lt;br /&gt;
[5] Wolfgang Pree. Design Patterns for Object-Oriented Software Development. Addison-Wesley, 1995.&amp;lt;br&amp;gt;&lt;br /&gt;
[6] Frank Buschman and Regine Meunier. “A System of Patterns.&amp;quot; In J. O. Coplien and D. C. Schmidt (eds.), Pattern Languages of Program Design. Reading, MA: Addison-Wesley, 1995, pp. 325-343.&amp;lt;br&amp;gt;&lt;br /&gt;
[6] [http://wwwipd.ira.uka.de/~tichy/publications/Catalogue.doc Tichy, Walter F (1998), A Catalogue of General-Purpose Software Design Patterns. University of Karlsruhe, Karlsruhe, Germany.]&amp;lt;br&amp;gt;&lt;br /&gt;
[7] [http://doi.acm.org/10.1145/361598.361623 Parnas, D. L. 1972. On the criteria to be used in decomposing systems into modules. Commun. ACM 15, 12 (Dec. 1972), 1053-1058.]&amp;lt;br&amp;gt; &lt;br /&gt;
[8] [http://www.cs.cmu.edu/afs/cs.cmu.edu/project/vit/ftp/pdf/PLoP95.pdf Some Patterns for Software Architectures, Mary Shaw, Carnegie Mellon University]&lt;/div&gt;</summary>
		<author><name>Quick Gun Murugan</name></author>
	</entry>
</feed>