<?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=Srmunill</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=Srmunill"/>
	<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=Special:Contributions/Srmunill"/>
	<updated>2026-07-03T02:05:07Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.41.0</generator>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2007/wiki3_9_sm&amp;diff=10395</id>
		<title>CSC/ECE 517 Fall 2007/wiki3 9 sm</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2007/wiki3_9_sm&amp;diff=10395"/>
		<updated>2007-11-30T02:17:56Z</updated>

		<summary type="html">&lt;p&gt;Srmunill: /* Continuous Integration */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Collective Ownership ==&lt;br /&gt;
&lt;br /&gt;
[[Image:Collective_ownership.GIF|right|500px]]&lt;br /&gt;
&lt;br /&gt;
In a software project, collective ownership of the code implies that any code written does not belong to any particular engineer. This means that anyone working on the project can modify any piece of code that has been previously written. According to Cunningham &amp;amp; Cunningham, Inc., a consulting firm specialized in object-oriented programming, there are five requirements to make Collective ownership work well:&lt;br /&gt;
&lt;br /&gt;
* All engineers use the same coding standards&lt;br /&gt;
* The project use code management tools to detect and resolve conflicts&lt;br /&gt;
* A comprehensive suite of unit tests exists&lt;br /&gt;
* Powerful browsing and refactoring tools to find references to old methods and replace them with the new&lt;br /&gt;
* Continuous Integration, so that conflicts are rare&lt;br /&gt;
&lt;br /&gt;
===Advantages of Collective Ownership===&lt;br /&gt;
&lt;br /&gt;
Collective ownership of code has several advantages of single ownership of code. The first is that no  bottlenecks are created in the code base. If a change alters the dependencies in the code, any part of the code can be changed by any engineer on the team. Second, teams are bound to gain and lose members over the course of a project. Collective ownership is helpful in this case because a single engineer does not take a large portion of knowledge about the framework with him when he leaves. Additionally, new team members can ease into working on the code base without having a set of classes that they have never seen before assigned exclusively to them.&lt;br /&gt;
&lt;br /&gt;
===Disadvantages of Collective Ownership===&lt;br /&gt;
&lt;br /&gt;
Collective ownership is of course not perfect and comes with some disadvantages. First is that engineers tend to become attached to code that they have written. If other engineers on the team come in behind and overwrite large portions of code written by another engineer, that engineer may be upset by the alteration of his or her code.&lt;br /&gt;
&lt;br /&gt;
Also collective ownership does not scale smoothly. Large teams, or teams working on large code bases, may run into problems if they attempt to use collective ownership of their code. Large teams run into problems because each engineer on a team is bound to have a slightly different vision of what the final product should look like and how it should behave. It is possible that time will be wasted as each developer adds his or her personal spin to each portion of the code, possibly overriding changes done by others.&lt;br /&gt;
&lt;br /&gt;
===Unit Tests and Collective Ownership===&lt;br /&gt;
&lt;br /&gt;
Collective ownership of code requires that an extensive test suite be present. Because engineers are allowed to change any part of the code base, they are likely to break some functionality without realizing it. This problem is mitigated by requiring that any altered code pass the test suite at 100% before it is committed. This ensures that no functionality is lost when a change is made to the system.&lt;br /&gt;
&lt;br /&gt;
===Negative Reactions to Collective Ownership===&lt;br /&gt;
&lt;br /&gt;
Not everyone in the programming community believes that Collective Ownership is the best solution for managing a code base. Concerns about collective ownership include the thrashing of the code as engineers fight over which solution is best. Additionally, there is some concern that engineers will take less pride in work they do not see as &amp;quot;theirs&amp;quot; and therefore be less motivated.&lt;br /&gt;
&lt;br /&gt;
== Continuous Integration ==&lt;br /&gt;
&lt;br /&gt;
Continuous Integration is a philosophy on how code bases should be altered and generally work in conjunction with Collective Ownership. The basic mindset behind continuous integration is the engineers should hold on to code for as short a time period as possible before committing it back to the code base. This encourages small, incremental changes over big changes to the code base.&lt;br /&gt;
&lt;br /&gt;
Under this philosophy, each engineer should integrate code they are working on at least daily, preferably every few hours. This will result in several integrations per day across the whole team. More so even than Collective Ownership, continuous integration requires an extensive unit test suite to function properly within a team.&lt;br /&gt;
&lt;br /&gt;
===Advantages of Continuous Integration===&lt;br /&gt;
&lt;br /&gt;
Because it encourages smaller changes to the code base that must be thoroughly tested by the test suite before the can be integrated, continuous integration greatly reduces issues with merging code into the code base. &lt;br /&gt;
&lt;br /&gt;
Additionally, frequent updates by engineers helps to ensure that everyone is working with the latest version of the code base when they begin modifying code. This makes it much less likely that engineers will duplicate functionality or otherwise needlessly rewrite code.&lt;br /&gt;
&lt;br /&gt;
Together, these advantages mean that less time will be wasted fixing conflicts in the code and therefore more time can be spent writing new code and working to complete the project.&lt;br /&gt;
&lt;br /&gt;
===Disadvantages of Continuous Integration===&lt;br /&gt;
&lt;br /&gt;
The disadvantage of Continuous Integration comes from one of it's requirements, extensive unit testing. If the test suites require a long period of time to verify that the system is still functioning, a lot of time can be used up waiting for these tests to complete. This is compounded because continuous integration encourages small changes to the code base. But, the entire test suite must be run each time a change is to be committed. At it's extreme, this could result in engineers spending more time running tests than on developing code.&lt;br /&gt;
&lt;br /&gt;
Because of this, like Collective Ownership, Continuous Integration does not scale well to very large projects.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
[1] http://martinfowler.com/articles/continuousIntegration.html&lt;br /&gt;
&lt;br /&gt;
[2] http://confluence.public.thoughtworks.org/display/CCNET/What+is+Continuous+Integration&lt;br /&gt;
&lt;br /&gt;
[3] http://c2.com/cgi/wiki?CollectiveCodeOwnership&lt;br /&gt;
&lt;br /&gt;
[4] http://www.extremeprogramming.org/rules/collective.html&lt;br /&gt;
&lt;br /&gt;
[5] http://c2.com/cgi/wiki?ThoughtfulReactionsToXp&lt;/div&gt;</summary>
		<author><name>Srmunill</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2007/wiki3_9_sm&amp;diff=10394</id>
		<title>CSC/ECE 517 Fall 2007/wiki3 9 sm</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2007/wiki3_9_sm&amp;diff=10394"/>
		<updated>2007-11-30T02:15:37Z</updated>

		<summary type="html">&lt;p&gt;Srmunill: /* References */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Collective Ownership ==&lt;br /&gt;
&lt;br /&gt;
[[Image:Collective_ownership.GIF|right|500px]]&lt;br /&gt;
&lt;br /&gt;
In a software project, collective ownership of the code implies that any code written does not belong to any particular engineer. This means that anyone working on the project can modify any piece of code that has been previously written. According to Cunningham &amp;amp; Cunningham, Inc., a consulting firm specialized in object-oriented programming, there are five requirements to make Collective ownership work well:&lt;br /&gt;
&lt;br /&gt;
* All engineers use the same coding standards&lt;br /&gt;
* The project use code management tools to detect and resolve conflicts&lt;br /&gt;
* A comprehensive suite of unit tests exists&lt;br /&gt;
* Powerful browsing and refactoring tools to find references to old methods and replace them with the new&lt;br /&gt;
* Continuous Integration, so that conflicts are rare&lt;br /&gt;
&lt;br /&gt;
===Advantages of Collective Ownership===&lt;br /&gt;
&lt;br /&gt;
Collective ownership of code has several advantages of single ownership of code. The first is that no  bottlenecks are created in the code base. If a change alters the dependencies in the code, any part of the code can be changed by any engineer on the team. Second, teams are bound to gain and lose members over the course of a project. Collective ownership is helpful in this case because a single engineer does not take a large portion of knowledge about the framework with him when he leaves. Additionally, new team members can ease into working on the code base without having a set of classes that they have never seen before assigned exclusively to them.&lt;br /&gt;
&lt;br /&gt;
===Disadvantages of Collective Ownership===&lt;br /&gt;
&lt;br /&gt;
Collective ownership is of course not perfect and comes with some disadvantages. First is that engineers tend to become attached to code that they have written. If other engineers on the team come in behind and overwrite large portions of code written by another engineer, that engineer may be upset by the alteration of his or her code.&lt;br /&gt;
&lt;br /&gt;
Also collective ownership does not scale smoothly. Large teams, or teams working on large code bases, may run into problems if they attempt to use collective ownership of their code. Large teams run into problems because each engineer on a team is bound to have a slightly different vision of what the final product should look like and how it should behave. It is possible that time will be wasted as each developer adds his or her personal spin to each portion of the code, possibly overriding changes done by others.&lt;br /&gt;
&lt;br /&gt;
===Unit Tests and Collective Ownership===&lt;br /&gt;
&lt;br /&gt;
Collective ownership of code requires that an extensive test suite be present. Because engineers are allowed to change any part of the code base, they are likely to break some functionality without realizing it. This problem is mitigated by requiring that any altered code pass the test suite at 100% before it is committed. This ensures that no functionality is lost when a change is made to the system.&lt;br /&gt;
&lt;br /&gt;
===Negative Reactions to Collective Ownership===&lt;br /&gt;
&lt;br /&gt;
Not everyone in the programming community believes that Collective Ownership is the best solution for managing a code base. Concerns about collective ownership include the thrashing of the code as engineers fight over which solution is best. Additionally, there is some concern that engineers will take less pride in work they do not see as &amp;quot;theirs&amp;quot; and therefore be less motivated.&lt;br /&gt;
&lt;br /&gt;
== Continuous Integration ==&lt;br /&gt;
&lt;br /&gt;
Continuous Integration is a philosophy on how code bases should be altered and generally work in conjunction with Collective Ownership. The basic mindset behind continuous integration is the engineers should hold on to code for as short a time period as possible before committing it back to the code base. This encourages small, incremental changes over big changes to the code base.&lt;br /&gt;
&lt;br /&gt;
Under this philosophy, each engineer should integrate code they are working on at least daily, preferably every few hours. This will result in several integrations per day across the whole team. More so even than Collective Ownership, continuous integration requires an extensive unit test suite to function properly within a team.&lt;br /&gt;
&lt;br /&gt;
===Advantages of Continuous Integration===&lt;br /&gt;
&lt;br /&gt;
Because it encourages smaller changes to the code base that must be thoroughly tested by the test suite before the can be integrated, continuous integration greatly reduces issues with merging code into the code base. &lt;br /&gt;
&lt;br /&gt;
Additionally, frequent updates by engineers helps to ensure that everyone is working with the latest version of the code base when they begin modifying code. This makes it much less likely that engineers will duplicate functionality or otherwise needlessly rewrite code.&lt;br /&gt;
&lt;br /&gt;
Together, these advantages mean that less time will be wasted fixing conflicts in the code and therefore more time can be spent writing new code and working to complete the project.&lt;br /&gt;
&lt;br /&gt;
===Disadvantages of Continuous Integration===&lt;br /&gt;
&lt;br /&gt;
The disadvantage of Continuous Integration comes from one of it's requirements, extensive unit testing. If the test suites require a long period of time to verify that the system is still functioning, a lot of time can be used up waiting for these tests to complete. This is compounded because continuous integration encourages small changes to the code base. But, the entire test suite must be run each time a change is to be committed. At it's extreme, this could result in engineers spending more time running tests than on developing code.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
[1] http://martinfowler.com/articles/continuousIntegration.html&lt;br /&gt;
&lt;br /&gt;
[2] http://confluence.public.thoughtworks.org/display/CCNET/What+is+Continuous+Integration&lt;br /&gt;
&lt;br /&gt;
[3] http://c2.com/cgi/wiki?CollectiveCodeOwnership&lt;br /&gt;
&lt;br /&gt;
[4] http://www.extremeprogramming.org/rules/collective.html&lt;br /&gt;
&lt;br /&gt;
[5] http://c2.com/cgi/wiki?ThoughtfulReactionsToXp&lt;/div&gt;</summary>
		<author><name>Srmunill</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2007/wiki3_9_sm&amp;diff=10393</id>
		<title>CSC/ECE 517 Fall 2007/wiki3 9 sm</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2007/wiki3_9_sm&amp;diff=10393"/>
		<updated>2007-11-30T02:15:15Z</updated>

		<summary type="html">&lt;p&gt;Srmunill: /* Disadvantages of Continuous Integration */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Collective Ownership ==&lt;br /&gt;
&lt;br /&gt;
[[Image:Collective_ownership.GIF|right|500px]]&lt;br /&gt;
&lt;br /&gt;
In a software project, collective ownership of the code implies that any code written does not belong to any particular engineer. This means that anyone working on the project can modify any piece of code that has been previously written. According to Cunningham &amp;amp; Cunningham, Inc., a consulting firm specialized in object-oriented programming, there are five requirements to make Collective ownership work well:&lt;br /&gt;
&lt;br /&gt;
* All engineers use the same coding standards&lt;br /&gt;
* The project use code management tools to detect and resolve conflicts&lt;br /&gt;
* A comprehensive suite of unit tests exists&lt;br /&gt;
* Powerful browsing and refactoring tools to find references to old methods and replace them with the new&lt;br /&gt;
* Continuous Integration, so that conflicts are rare&lt;br /&gt;
&lt;br /&gt;
===Advantages of Collective Ownership===&lt;br /&gt;
&lt;br /&gt;
Collective ownership of code has several advantages of single ownership of code. The first is that no  bottlenecks are created in the code base. If a change alters the dependencies in the code, any part of the code can be changed by any engineer on the team. Second, teams are bound to gain and lose members over the course of a project. Collective ownership is helpful in this case because a single engineer does not take a large portion of knowledge about the framework with him when he leaves. Additionally, new team members can ease into working on the code base without having a set of classes that they have never seen before assigned exclusively to them.&lt;br /&gt;
&lt;br /&gt;
===Disadvantages of Collective Ownership===&lt;br /&gt;
&lt;br /&gt;
Collective ownership is of course not perfect and comes with some disadvantages. First is that engineers tend to become attached to code that they have written. If other engineers on the team come in behind and overwrite large portions of code written by another engineer, that engineer may be upset by the alteration of his or her code.&lt;br /&gt;
&lt;br /&gt;
Also collective ownership does not scale smoothly. Large teams, or teams working on large code bases, may run into problems if they attempt to use collective ownership of their code. Large teams run into problems because each engineer on a team is bound to have a slightly different vision of what the final product should look like and how it should behave. It is possible that time will be wasted as each developer adds his or her personal spin to each portion of the code, possibly overriding changes done by others.&lt;br /&gt;
&lt;br /&gt;
===Unit Tests and Collective Ownership===&lt;br /&gt;
&lt;br /&gt;
Collective ownership of code requires that an extensive test suite be present. Because engineers are allowed to change any part of the code base, they are likely to break some functionality without realizing it. This problem is mitigated by requiring that any altered code pass the test suite at 100% before it is committed. This ensures that no functionality is lost when a change is made to the system.&lt;br /&gt;
&lt;br /&gt;
===Negative Reactions to Collective Ownership===&lt;br /&gt;
&lt;br /&gt;
Not everyone in the programming community believes that Collective Ownership is the best solution for managing a code base. Concerns about collective ownership include the thrashing of the code as engineers fight over which solution is best. Additionally, there is some concern that engineers will take less pride in work they do not see as &amp;quot;theirs&amp;quot; and therefore be less motivated.&lt;br /&gt;
&lt;br /&gt;
== Continuous Integration ==&lt;br /&gt;
&lt;br /&gt;
Continuous Integration is a philosophy on how code bases should be altered and generally work in conjunction with Collective Ownership. The basic mindset behind continuous integration is the engineers should hold on to code for as short a time period as possible before committing it back to the code base. This encourages small, incremental changes over big changes to the code base.&lt;br /&gt;
&lt;br /&gt;
Under this philosophy, each engineer should integrate code they are working on at least daily, preferably every few hours. This will result in several integrations per day across the whole team. More so even than Collective Ownership, continuous integration requires an extensive unit test suite to function properly within a team.&lt;br /&gt;
&lt;br /&gt;
===Advantages of Continuous Integration===&lt;br /&gt;
&lt;br /&gt;
Because it encourages smaller changes to the code base that must be thoroughly tested by the test suite before the can be integrated, continuous integration greatly reduces issues with merging code into the code base. &lt;br /&gt;
&lt;br /&gt;
Additionally, frequent updates by engineers helps to ensure that everyone is working with the latest version of the code base when they begin modifying code. This makes it much less likely that engineers will duplicate functionality or otherwise needlessly rewrite code.&lt;br /&gt;
&lt;br /&gt;
Together, these advantages mean that less time will be wasted fixing conflicts in the code and therefore more time can be spent writing new code and working to complete the project.&lt;br /&gt;
&lt;br /&gt;
===Disadvantages of Continuous Integration===&lt;br /&gt;
&lt;br /&gt;
The disadvantage of Continuous Integration comes from one of it's requirements, extensive unit testing. If the test suites require a long period of time to verify that the system is still functioning, a lot of time can be used up waiting for these tests to complete. This is compounded because continuous integration encourages small changes to the code base. But, the entire test suite must be run each time a change is to be committed. At it's extreme, this could result in engineers spending more time running tests than on developing code.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
[1] http://martinfowler.com/articles/continuousIntegration.html&lt;br /&gt;
&lt;br /&gt;
[2] http://confluence.public.thoughtworks.org/display/CCNET/What+is+Continuous+Integration&lt;br /&gt;
&lt;br /&gt;
[3] http://c2.com/cgi/wiki?CollectiveCodeOwnership&lt;br /&gt;
&lt;br /&gt;
[4] http://www.extremeprogramming.org/rules/collective.html&lt;/div&gt;</summary>
		<author><name>Srmunill</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2007/wiki3_9_sm&amp;diff=10392</id>
		<title>CSC/ECE 517 Fall 2007/wiki3 9 sm</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2007/wiki3_9_sm&amp;diff=10392"/>
		<updated>2007-11-30T02:10:42Z</updated>

		<summary type="html">&lt;p&gt;Srmunill: /* Advantages of Continuous Integration */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Collective Ownership ==&lt;br /&gt;
&lt;br /&gt;
[[Image:Collective_ownership.GIF|right|500px]]&lt;br /&gt;
&lt;br /&gt;
In a software project, collective ownership of the code implies that any code written does not belong to any particular engineer. This means that anyone working on the project can modify any piece of code that has been previously written. According to Cunningham &amp;amp; Cunningham, Inc., a consulting firm specialized in object-oriented programming, there are five requirements to make Collective ownership work well:&lt;br /&gt;
&lt;br /&gt;
* All engineers use the same coding standards&lt;br /&gt;
* The project use code management tools to detect and resolve conflicts&lt;br /&gt;
* A comprehensive suite of unit tests exists&lt;br /&gt;
* Powerful browsing and refactoring tools to find references to old methods and replace them with the new&lt;br /&gt;
* Continuous Integration, so that conflicts are rare&lt;br /&gt;
&lt;br /&gt;
===Advantages of Collective Ownership===&lt;br /&gt;
&lt;br /&gt;
Collective ownership of code has several advantages of single ownership of code. The first is that no  bottlenecks are created in the code base. If a change alters the dependencies in the code, any part of the code can be changed by any engineer on the team. Second, teams are bound to gain and lose members over the course of a project. Collective ownership is helpful in this case because a single engineer does not take a large portion of knowledge about the framework with him when he leaves. Additionally, new team members can ease into working on the code base without having a set of classes that they have never seen before assigned exclusively to them.&lt;br /&gt;
&lt;br /&gt;
===Disadvantages of Collective Ownership===&lt;br /&gt;
&lt;br /&gt;
Collective ownership is of course not perfect and comes with some disadvantages. First is that engineers tend to become attached to code that they have written. If other engineers on the team come in behind and overwrite large portions of code written by another engineer, that engineer may be upset by the alteration of his or her code.&lt;br /&gt;
&lt;br /&gt;
Also collective ownership does not scale smoothly. Large teams, or teams working on large code bases, may run into problems if they attempt to use collective ownership of their code. Large teams run into problems because each engineer on a team is bound to have a slightly different vision of what the final product should look like and how it should behave. It is possible that time will be wasted as each developer adds his or her personal spin to each portion of the code, possibly overriding changes done by others.&lt;br /&gt;
&lt;br /&gt;
===Unit Tests and Collective Ownership===&lt;br /&gt;
&lt;br /&gt;
Collective ownership of code requires that an extensive test suite be present. Because engineers are allowed to change any part of the code base, they are likely to break some functionality without realizing it. This problem is mitigated by requiring that any altered code pass the test suite at 100% before it is committed. This ensures that no functionality is lost when a change is made to the system.&lt;br /&gt;
&lt;br /&gt;
===Negative Reactions to Collective Ownership===&lt;br /&gt;
&lt;br /&gt;
Not everyone in the programming community believes that Collective Ownership is the best solution for managing a code base. Concerns about collective ownership include the thrashing of the code as engineers fight over which solution is best. Additionally, there is some concern that engineers will take less pride in work they do not see as &amp;quot;theirs&amp;quot; and therefore be less motivated.&lt;br /&gt;
&lt;br /&gt;
== Continuous Integration ==&lt;br /&gt;
&lt;br /&gt;
Continuous Integration is a philosophy on how code bases should be altered and generally work in conjunction with Collective Ownership. The basic mindset behind continuous integration is the engineers should hold on to code for as short a time period as possible before committing it back to the code base. This encourages small, incremental changes over big changes to the code base.&lt;br /&gt;
&lt;br /&gt;
Under this philosophy, each engineer should integrate code they are working on at least daily, preferably every few hours. This will result in several integrations per day across the whole team. More so even than Collective Ownership, continuous integration requires an extensive unit test suite to function properly within a team.&lt;br /&gt;
&lt;br /&gt;
===Advantages of Continuous Integration===&lt;br /&gt;
&lt;br /&gt;
Because it encourages smaller changes to the code base that must be thoroughly tested by the test suite before the can be integrated, continuous integration greatly reduces issues with merging code into the code base. &lt;br /&gt;
&lt;br /&gt;
Additionally, frequent updates by engineers helps to ensure that everyone is working with the latest version of the code base when they begin modifying code. This makes it much less likely that engineers will duplicate functionality or otherwise needlessly rewrite code.&lt;br /&gt;
&lt;br /&gt;
Together, these advantages mean that less time will be wasted fixing conflicts in the code and therefore more time can be spent writing new code and working to complete the project.&lt;br /&gt;
&lt;br /&gt;
===Disadvantages of Continuous Integration===&lt;br /&gt;
&lt;br /&gt;
The disadvantage of continuous integration is that it requires an extensive testing suite to ensure that the small constant changes do not break existing functionality.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
[1] http://martinfowler.com/articles/continuousIntegration.html&lt;br /&gt;
&lt;br /&gt;
[2] http://confluence.public.thoughtworks.org/display/CCNET/What+is+Continuous+Integration&lt;br /&gt;
&lt;br /&gt;
[3] http://c2.com/cgi/wiki?CollectiveCodeOwnership&lt;br /&gt;
&lt;br /&gt;
[4] http://www.extremeprogramming.org/rules/collective.html&lt;/div&gt;</summary>
		<author><name>Srmunill</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2007/wiki3_9_sm&amp;diff=10391</id>
		<title>CSC/ECE 517 Fall 2007/wiki3 9 sm</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2007/wiki3_9_sm&amp;diff=10391"/>
		<updated>2007-11-30T02:04:44Z</updated>

		<summary type="html">&lt;p&gt;Srmunill: /* Continuous Integration */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Collective Ownership ==&lt;br /&gt;
&lt;br /&gt;
[[Image:Collective_ownership.GIF|right|500px]]&lt;br /&gt;
&lt;br /&gt;
In a software project, collective ownership of the code implies that any code written does not belong to any particular engineer. This means that anyone working on the project can modify any piece of code that has been previously written. According to Cunningham &amp;amp; Cunningham, Inc., a consulting firm specialized in object-oriented programming, there are five requirements to make Collective ownership work well:&lt;br /&gt;
&lt;br /&gt;
* All engineers use the same coding standards&lt;br /&gt;
* The project use code management tools to detect and resolve conflicts&lt;br /&gt;
* A comprehensive suite of unit tests exists&lt;br /&gt;
* Powerful browsing and refactoring tools to find references to old methods and replace them with the new&lt;br /&gt;
* Continuous Integration, so that conflicts are rare&lt;br /&gt;
&lt;br /&gt;
===Advantages of Collective Ownership===&lt;br /&gt;
&lt;br /&gt;
Collective ownership of code has several advantages of single ownership of code. The first is that no  bottlenecks are created in the code base. If a change alters the dependencies in the code, any part of the code can be changed by any engineer on the team. Second, teams are bound to gain and lose members over the course of a project. Collective ownership is helpful in this case because a single engineer does not take a large portion of knowledge about the framework with him when he leaves. Additionally, new team members can ease into working on the code base without having a set of classes that they have never seen before assigned exclusively to them.&lt;br /&gt;
&lt;br /&gt;
===Disadvantages of Collective Ownership===&lt;br /&gt;
&lt;br /&gt;
Collective ownership is of course not perfect and comes with some disadvantages. First is that engineers tend to become attached to code that they have written. If other engineers on the team come in behind and overwrite large portions of code written by another engineer, that engineer may be upset by the alteration of his or her code.&lt;br /&gt;
&lt;br /&gt;
Also collective ownership does not scale smoothly. Large teams, or teams working on large code bases, may run into problems if they attempt to use collective ownership of their code. Large teams run into problems because each engineer on a team is bound to have a slightly different vision of what the final product should look like and how it should behave. It is possible that time will be wasted as each developer adds his or her personal spin to each portion of the code, possibly overriding changes done by others.&lt;br /&gt;
&lt;br /&gt;
===Unit Tests and Collective Ownership===&lt;br /&gt;
&lt;br /&gt;
Collective ownership of code requires that an extensive test suite be present. Because engineers are allowed to change any part of the code base, they are likely to break some functionality without realizing it. This problem is mitigated by requiring that any altered code pass the test suite at 100% before it is committed. This ensures that no functionality is lost when a change is made to the system.&lt;br /&gt;
&lt;br /&gt;
===Negative Reactions to Collective Ownership===&lt;br /&gt;
&lt;br /&gt;
Not everyone in the programming community believes that Collective Ownership is the best solution for managing a code base. Concerns about collective ownership include the thrashing of the code as engineers fight over which solution is best. Additionally, there is some concern that engineers will take less pride in work they do not see as &amp;quot;theirs&amp;quot; and therefore be less motivated.&lt;br /&gt;
&lt;br /&gt;
== Continuous Integration ==&lt;br /&gt;
&lt;br /&gt;
Continuous Integration is a philosophy on how code bases should be altered and generally work in conjunction with Collective Ownership. The basic mindset behind continuous integration is the engineers should hold on to code for as short a time period as possible before committing it back to the code base. This encourages small, incremental changes over big changes to the code base.&lt;br /&gt;
&lt;br /&gt;
Under this philosophy, each engineer should integrate code they are working on at least daily, preferably every few hours. This will result in several integrations per day across the whole team. More so even than Collective Ownership, continuous integration requires an extensive unit test suite to function properly within a team.&lt;br /&gt;
&lt;br /&gt;
===Advantages of Continuous Integration===&lt;br /&gt;
&lt;br /&gt;
Among the advantages of continuous integration are that greatly reduced integration issues on any given project. This is because engineers do not modify code for long periods of time. It is therefore less likely that changes made by one engineer will greatly conflict with changes made by another engineer. This leads to faster integration of code and less man hours spent fixing conflicts.&lt;br /&gt;
&lt;br /&gt;
===Disadvantages of Continuous Integration===&lt;br /&gt;
&lt;br /&gt;
The disadvantage of continuous integration is that it requires an extensive testing suite to ensure that the small constant changes do not break existing functionality.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
[1] http://martinfowler.com/articles/continuousIntegration.html&lt;br /&gt;
&lt;br /&gt;
[2] http://confluence.public.thoughtworks.org/display/CCNET/What+is+Continuous+Integration&lt;br /&gt;
&lt;br /&gt;
[3] http://c2.com/cgi/wiki?CollectiveCodeOwnership&lt;br /&gt;
&lt;br /&gt;
[4] http://www.extremeprogramming.org/rules/collective.html&lt;/div&gt;</summary>
		<author><name>Srmunill</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2007/wiki3_9_sm&amp;diff=10388</id>
		<title>CSC/ECE 517 Fall 2007/wiki3 9 sm</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2007/wiki3_9_sm&amp;diff=10388"/>
		<updated>2007-11-30T01:57:08Z</updated>

		<summary type="html">&lt;p&gt;Srmunill: /* Collective Ownership */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Collective Ownership ==&lt;br /&gt;
&lt;br /&gt;
[[Image:Collective_ownership.GIF|right|500px]]&lt;br /&gt;
&lt;br /&gt;
In a software project, collective ownership of the code implies that any code written does not belong to any particular engineer. This means that anyone working on the project can modify any piece of code that has been previously written. According to Cunningham &amp;amp; Cunningham, Inc., a consulting firm specialized in object-oriented programming, there are five requirements to make Collective ownership work well:&lt;br /&gt;
&lt;br /&gt;
* All engineers use the same coding standards&lt;br /&gt;
* The project use code management tools to detect and resolve conflicts&lt;br /&gt;
* A comprehensive suite of unit tests exists&lt;br /&gt;
* Powerful browsing and refactoring tools to find references to old methods and replace them with the new&lt;br /&gt;
* Continuous Integration, so that conflicts are rare&lt;br /&gt;
&lt;br /&gt;
===Advantages of Collective Ownership===&lt;br /&gt;
&lt;br /&gt;
Collective ownership of code has several advantages of single ownership of code. The first is that no  bottlenecks are created in the code base. If a change alters the dependencies in the code, any part of the code can be changed by any engineer on the team. Second, teams are bound to gain and lose members over the course of a project. Collective ownership is helpful in this case because a single engineer does not take a large portion of knowledge about the framework with him when he leaves. Additionally, new team members can ease into working on the code base without having a set of classes that they have never seen before assigned exclusively to them.&lt;br /&gt;
&lt;br /&gt;
===Disadvantages of Collective Ownership===&lt;br /&gt;
&lt;br /&gt;
Collective ownership is of course not perfect and comes with some disadvantages. First is that engineers tend to become attached to code that they have written. If other engineers on the team come in behind and overwrite large portions of code written by another engineer, that engineer may be upset by the alteration of his or her code.&lt;br /&gt;
&lt;br /&gt;
Also collective ownership does not scale smoothly. Large teams, or teams working on large code bases, may run into problems if they attempt to use collective ownership of their code. Large teams run into problems because each engineer on a team is bound to have a slightly different vision of what the final product should look like and how it should behave. It is possible that time will be wasted as each developer adds his or her personal spin to each portion of the code, possibly overriding changes done by others.&lt;br /&gt;
&lt;br /&gt;
===Unit Tests and Collective Ownership===&lt;br /&gt;
&lt;br /&gt;
Collective ownership of code requires that an extensive test suite be present. Because engineers are allowed to change any part of the code base, they are likely to break some functionality without realizing it. This problem is mitigated by requiring that any altered code pass the test suite at 100% before it is committed. This ensures that no functionality is lost when a change is made to the system.&lt;br /&gt;
&lt;br /&gt;
===Negative Reactions to Collective Ownership===&lt;br /&gt;
&lt;br /&gt;
Not everyone in the programming community believes that Collective Ownership is the best solution for managing a code base. Concerns about collective ownership include the thrashing of the code as engineers fight over which solution is best. Additionally, there is some concern that engineers will take less pride in work they do not see as &amp;quot;theirs&amp;quot; and therefore be less motivated.&lt;br /&gt;
&lt;br /&gt;
== Continuous Integration ==&lt;br /&gt;
&lt;br /&gt;
Continuous Integration refers to the idea that instead of engineers modifying a set of code over a long period of time and then attempting to merge that back into to main project code, code should be held for only a brief period of time and then integrated back into the main branch as soon as possible. In this system, each engineer integrates their code at least daily, preferably every few hours. This means that there are several integrations per day. Extensive automated testing is usually required for this system to function properly.&lt;br /&gt;
&lt;br /&gt;
===Advantages of Continuous Integration===&lt;br /&gt;
&lt;br /&gt;
Among the advantages of continuous integration are that greatly reduced integration issues on any given project. This is because engineers do not modify code for long periods of time. It is therefore less likely that changes made by one engineer will greatly conflict with changes made by another engineer. This leads to faster integration of code and less man hours spent fixing conflicts.&lt;br /&gt;
&lt;br /&gt;
===Disadvantages of Continuous Integration===&lt;br /&gt;
&lt;br /&gt;
The disadvantage of continuous integration is that it requires an extensive testing suite to ensure that the small constant changes do not break existing functionality.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
[1] http://martinfowler.com/articles/continuousIntegration.html&lt;br /&gt;
&lt;br /&gt;
[2] http://confluence.public.thoughtworks.org/display/CCNET/What+is+Continuous+Integration&lt;br /&gt;
&lt;br /&gt;
[3] http://c2.com/cgi/wiki?CollectiveCodeOwnership&lt;br /&gt;
&lt;br /&gt;
[4] http://www.extremeprogramming.org/rules/collective.html&lt;/div&gt;</summary>
		<author><name>Srmunill</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2007/wiki3_9_sm&amp;diff=10387</id>
		<title>CSC/ECE 517 Fall 2007/wiki3 9 sm</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2007/wiki3_9_sm&amp;diff=10387"/>
		<updated>2007-11-30T01:51:05Z</updated>

		<summary type="html">&lt;p&gt;Srmunill: /* Continuous Integration */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Collective Ownership ==&lt;br /&gt;
&lt;br /&gt;
[[Image:Collective_ownership.GIF|right|500px]]&lt;br /&gt;
&lt;br /&gt;
In a software project, collective ownership of the code implies that any code written does not belong to any particular engineer. This means that anyone working on the project can modify any piece of code that has been previously written. According to Cunningham &amp;amp; Cunningham, Inc., a consulting firm specialized in object-oriented programming, there are five requirements to make Collective ownership work well:&lt;br /&gt;
&lt;br /&gt;
* All engineers use the same coding standards&lt;br /&gt;
* The project use code management tools to detect and resolve conflicts&lt;br /&gt;
* A comprehensive suite of unit tests exists&lt;br /&gt;
* Powerful browsing and refactoring tools to find references to old methods and replace them with the new&lt;br /&gt;
* Continuous Integration, so that conflicts are rare&lt;br /&gt;
&lt;br /&gt;
===Advantages of Collective Ownership===&lt;br /&gt;
&lt;br /&gt;
Collective ownership of code has several advantages of single ownership of code. The first is that no  bottlenecks are created in the code base. If a change alters the dependencies in the code, any part of the code can be changed by any engineer on the team. Second, teams are bound to gain and lose members over the course of a project. Collective ownership is helpful in this case because a single engineer does not take a large portion of knowledge about the framework with him when he leaves. Additionally, new team members can ease into working on the code base without having a set of classes that they have never seen before assigned exclusively to them.&lt;br /&gt;
&lt;br /&gt;
===Disadvantages of Collective Ownership===&lt;br /&gt;
&lt;br /&gt;
Collective ownership is of course not perfect and comes with some disadvantages. First is that engineers tend to become attached to code that they have written. If other engineers on the team come in behind and overwrite large portions of code written by another engineer, that engineer may be upset by the alteration of his or her code.&lt;br /&gt;
&lt;br /&gt;
Also collective ownership does not scale smoothly. Large teams, or teams working on large code bases, may run into problems if they attempt to use collective ownership of their code. Large teams run into problems because each engineer on a team is bound to have a slightly different vision of what the final product should look like and how it should behave. It is possible that time will be wasted as each developer adds his or her personal spin to each portion of the code, possibly overriding changes done by others.&lt;br /&gt;
&lt;br /&gt;
===Unit Tests and Collective Ownership===&lt;br /&gt;
&lt;br /&gt;
Collective ownership of code requires that an extensive test suite be present. Because engineers are allowed to change any part of the code base, they are likely to break some functionality without realizing it. This problem is mitigated by requiring that any altered code pass the test suite at 100% before it is committed. This ensures that no functionality is lost when a change is made to the system.&lt;br /&gt;
&lt;br /&gt;
== Continuous Integration ==&lt;br /&gt;
&lt;br /&gt;
Continuous Integration refers to the idea that instead of engineers modifying a set of code over a long period of time and then attempting to merge that back into to main project code, code should be held for only a brief period of time and then integrated back into the main branch as soon as possible. In this system, each engineer integrates their code at least daily, preferably every few hours. This means that there are several integrations per day. Extensive automated testing is usually required for this system to function properly.&lt;br /&gt;
&lt;br /&gt;
===Advantages of Continuous Integration===&lt;br /&gt;
&lt;br /&gt;
Among the advantages of continuous integration are that greatly reduced integration issues on any given project. This is because engineers do not modify code for long periods of time. It is therefore less likely that changes made by one engineer will greatly conflict with changes made by another engineer. This leads to faster integration of code and less man hours spent fixing conflicts.&lt;br /&gt;
&lt;br /&gt;
===Disadvantages of Continuous Integration===&lt;br /&gt;
&lt;br /&gt;
The disadvantage of continuous integration is that it requires an extensive testing suite to ensure that the small constant changes do not break existing functionality.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
[1] http://martinfowler.com/articles/continuousIntegration.html&lt;br /&gt;
&lt;br /&gt;
[2] http://confluence.public.thoughtworks.org/display/CCNET/What+is+Continuous+Integration&lt;br /&gt;
&lt;br /&gt;
[3] http://c2.com/cgi/wiki?CollectiveCodeOwnership&lt;br /&gt;
&lt;br /&gt;
[4] http://www.extremeprogramming.org/rules/collective.html&lt;/div&gt;</summary>
		<author><name>Srmunill</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2007/wiki3_9_sm&amp;diff=10386</id>
		<title>CSC/ECE 517 Fall 2007/wiki3 9 sm</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2007/wiki3_9_sm&amp;diff=10386"/>
		<updated>2007-11-30T01:49:50Z</updated>

		<summary type="html">&lt;p&gt;Srmunill: /* Unit Tests and Collective Ownership */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Collective Ownership ==&lt;br /&gt;
&lt;br /&gt;
[[Image:Collective_ownership.GIF|right|500px]]&lt;br /&gt;
&lt;br /&gt;
In a software project, collective ownership of the code implies that any code written does not belong to any particular engineer. This means that anyone working on the project can modify any piece of code that has been previously written. According to Cunningham &amp;amp; Cunningham, Inc., a consulting firm specialized in object-oriented programming, there are five requirements to make Collective ownership work well:&lt;br /&gt;
&lt;br /&gt;
* All engineers use the same coding standards&lt;br /&gt;
* The project use code management tools to detect and resolve conflicts&lt;br /&gt;
* A comprehensive suite of unit tests exists&lt;br /&gt;
* Powerful browsing and refactoring tools to find references to old methods and replace them with the new&lt;br /&gt;
* Continuous Integration, so that conflicts are rare&lt;br /&gt;
&lt;br /&gt;
===Advantages of Collective Ownership===&lt;br /&gt;
&lt;br /&gt;
Collective ownership of code has several advantages of single ownership of code. The first is that no  bottlenecks are created in the code base. If a change alters the dependencies in the code, any part of the code can be changed by any engineer on the team. Second, teams are bound to gain and lose members over the course of a project. Collective ownership is helpful in this case because a single engineer does not take a large portion of knowledge about the framework with him when he leaves. Additionally, new team members can ease into working on the code base without having a set of classes that they have never seen before assigned exclusively to them.&lt;br /&gt;
&lt;br /&gt;
===Disadvantages of Collective Ownership===&lt;br /&gt;
&lt;br /&gt;
Collective ownership is of course not perfect and comes with some disadvantages. First is that engineers tend to become attached to code that they have written. If other engineers on the team come in behind and overwrite large portions of code written by another engineer, that engineer may be upset by the alteration of his or her code.&lt;br /&gt;
&lt;br /&gt;
Also collective ownership does not scale smoothly. Large teams, or teams working on large code bases, may run into problems if they attempt to use collective ownership of their code. Large teams run into problems because each engineer on a team is bound to have a slightly different vision of what the final product should look like and how it should behave. It is possible that time will be wasted as each developer adds his or her personal spin to each portion of the code, possibly overriding changes done by others.&lt;br /&gt;
&lt;br /&gt;
===Unit Tests and Collective Ownership===&lt;br /&gt;
&lt;br /&gt;
Collective ownership of code requires that an extensive test suite be present. Because engineers are allowed to change any part of the code base, they are likely to break some functionality without realizing it. This problem is mitigated by requiring that any altered code pass the test suite at 100% before it is committed. This ensures that no functionality is lost when a change is made to the system.&lt;br /&gt;
&lt;br /&gt;
== Continuous Integration ==&lt;br /&gt;
&lt;br /&gt;
Continuous Integration refers to the idea that instead of engineers modifying a set of code over a long period of time and then attempting to merge that back into to main project code, code should be held for only a brief period of time and then integrated back into the main branch as soon as possible. In this system, each engineer integrates their code at least daily, preferably every few hours. This means that there are several integrations per day. Extensive automated testing is usually required for this system to function properly.&lt;br /&gt;
&lt;br /&gt;
Among the advantages of continuous integration are that greatly reduced integration issues on any given project. This is because engineers do not modify code for long periods of time. It is therefore less likely that changes made by one engineer will greatly conflict with changes made by another engineer. This leads to faster integration of code and less man hours spent fixing conflicts.&lt;br /&gt;
&lt;br /&gt;
The disadvantage of continuous integration is that it requires an extensive testing suite to ensure that the small constant changes do not break existing functionality.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
[1] http://martinfowler.com/articles/continuousIntegration.html&lt;br /&gt;
&lt;br /&gt;
[2] http://confluence.public.thoughtworks.org/display/CCNET/What+is+Continuous+Integration&lt;br /&gt;
&lt;br /&gt;
[3] http://c2.com/cgi/wiki?CollectiveCodeOwnership&lt;br /&gt;
&lt;br /&gt;
[4] http://www.extremeprogramming.org/rules/collective.html&lt;/div&gt;</summary>
		<author><name>Srmunill</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2007/wiki3_9_sm&amp;diff=10385</id>
		<title>CSC/ECE 517 Fall 2007/wiki3 9 sm</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2007/wiki3_9_sm&amp;diff=10385"/>
		<updated>2007-11-30T01:46:15Z</updated>

		<summary type="html">&lt;p&gt;Srmunill: /* Collective Ownership */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Collective Ownership ==&lt;br /&gt;
&lt;br /&gt;
[[Image:Collective_ownership.GIF|right|500px]]&lt;br /&gt;
&lt;br /&gt;
In a software project, collective ownership of the code implies that any code written does not belong to any particular engineer. This means that anyone working on the project can modify any piece of code that has been previously written. According to Cunningham &amp;amp; Cunningham, Inc., a consulting firm specialized in object-oriented programming, there are five requirements to make Collective ownership work well:&lt;br /&gt;
&lt;br /&gt;
* All engineers use the same coding standards&lt;br /&gt;
* The project use code management tools to detect and resolve conflicts&lt;br /&gt;
* A comprehensive suite of unit tests exists&lt;br /&gt;
* Powerful browsing and refactoring tools to find references to old methods and replace them with the new&lt;br /&gt;
* Continuous Integration, so that conflicts are rare&lt;br /&gt;
&lt;br /&gt;
===Advantages of Collective Ownership===&lt;br /&gt;
&lt;br /&gt;
Collective ownership of code has several advantages of single ownership of code. The first is that no  bottlenecks are created in the code base. If a change alters the dependencies in the code, any part of the code can be changed by any engineer on the team. Second, teams are bound to gain and lose members over the course of a project. Collective ownership is helpful in this case because a single engineer does not take a large portion of knowledge about the framework with him when he leaves. Additionally, new team members can ease into working on the code base without having a set of classes that they have never seen before assigned exclusively to them.&lt;br /&gt;
&lt;br /&gt;
===Disadvantages of Collective Ownership===&lt;br /&gt;
&lt;br /&gt;
Collective ownership is of course not perfect and comes with some disadvantages. First is that engineers tend to become attached to code that they have written. If other engineers on the team come in behind and overwrite large portions of code written by another engineer, that engineer may be upset by the alteration of his or her code.&lt;br /&gt;
&lt;br /&gt;
Also collective ownership does not scale smoothly. Large teams, or teams working on large code bases, may run into problems if they attempt to use collective ownership of their code. Large teams run into problems because each engineer on a team is bound to have a slightly different vision of what the final product should look like and how it should behave. It is possible that time will be wasted as each developer adds his or her personal spin to each portion of the code, possibly overriding changes done by others.&lt;br /&gt;
&lt;br /&gt;
===Unit Tests and Collective Ownership===&lt;br /&gt;
&lt;br /&gt;
== Continuous Integration ==&lt;br /&gt;
&lt;br /&gt;
Continuous Integration refers to the idea that instead of engineers modifying a set of code over a long period of time and then attempting to merge that back into to main project code, code should be held for only a brief period of time and then integrated back into the main branch as soon as possible. In this system, each engineer integrates their code at least daily, preferably every few hours. This means that there are several integrations per day. Extensive automated testing is usually required for this system to function properly.&lt;br /&gt;
&lt;br /&gt;
Among the advantages of continuous integration are that greatly reduced integration issues on any given project. This is because engineers do not modify code for long periods of time. It is therefore less likely that changes made by one engineer will greatly conflict with changes made by another engineer. This leads to faster integration of code and less man hours spent fixing conflicts.&lt;br /&gt;
&lt;br /&gt;
The disadvantage of continuous integration is that it requires an extensive testing suite to ensure that the small constant changes do not break existing functionality.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
[1] http://martinfowler.com/articles/continuousIntegration.html&lt;br /&gt;
&lt;br /&gt;
[2] http://confluence.public.thoughtworks.org/display/CCNET/What+is+Continuous+Integration&lt;br /&gt;
&lt;br /&gt;
[3] http://c2.com/cgi/wiki?CollectiveCodeOwnership&lt;br /&gt;
&lt;br /&gt;
[4] http://www.extremeprogramming.org/rules/collective.html&lt;/div&gt;</summary>
		<author><name>Srmunill</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2007/wiki3_9_sm&amp;diff=10384</id>
		<title>CSC/ECE 517 Fall 2007/wiki3 9 sm</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2007/wiki3_9_sm&amp;diff=10384"/>
		<updated>2007-11-30T01:45:18Z</updated>

		<summary type="html">&lt;p&gt;Srmunill: /* Disadvantages of Collective Ownership */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Collective Ownership ==&lt;br /&gt;
&lt;br /&gt;
[[Image:Collective_ownership.GIF|right|500px]]&lt;br /&gt;
&lt;br /&gt;
In a software project, collective ownership of the code implies that any code written does not belong to any particular engineer. This means that anyone working on the project can modify any piece of code that has been previously written. According to Cunningham &amp;amp; Cunningham, Inc., a consulting firm specialized in object-oriented programming, there are five requirements to make Collective ownership work well:&lt;br /&gt;
&lt;br /&gt;
* All engineers use the same coding standards&lt;br /&gt;
* The project use code management tools to detect and resolve conflicts&lt;br /&gt;
* A comprehensive suite of unit tests exists&lt;br /&gt;
* Powerful browsing and refactoring tools to find references to old methods and replace them with the new&lt;br /&gt;
* Continuous Integration, so that conflicts are rare&lt;br /&gt;
&lt;br /&gt;
===Advantages of Collective Ownership===&lt;br /&gt;
&lt;br /&gt;
Collective ownership of code has several advantages of single ownership of code. The first is that no  bottlenecks are created in the code base. If a change alters the dependencies in the code, any part of the code can be changed by any engineer on the team. Second, teams are bound to gain and lose members over the course of a project. Collective ownership is helpful in this case because a single engineer does not take a large portion of knowledge about the framework with him when he leaves. Additionally, new team members can ease into working on the code base without having a set of classes that they have never seen before assigned exclusively to them.&lt;br /&gt;
&lt;br /&gt;
===Disadvantages of Collective Ownership===&lt;br /&gt;
&lt;br /&gt;
Collective ownership is of course not perfect and comes with some disadvantages. First is that engineers tend to become attached to code that they have written. If other engineers on the team come in behind and overwrite large portions of code written by another engineer, that engineer may be upset by the alteration of his or her code.&lt;br /&gt;
&lt;br /&gt;
Also collective ownership does not scale smoothly. Large teams, or teams working on large code bases, may run into problems if they attempt to use collective ownership of their code. Large teams run into problems because each engineer on a team is bound to have a slightly different vision of what the final product should look like and how it should behave. It is possible that time will be wasted as each developer adds his or her personal spin to each portion of the code, possibly overriding changes done by others.&lt;br /&gt;
&lt;br /&gt;
== Continuous Integration ==&lt;br /&gt;
&lt;br /&gt;
Continuous Integration refers to the idea that instead of engineers modifying a set of code over a long period of time and then attempting to merge that back into to main project code, code should be held for only a brief period of time and then integrated back into the main branch as soon as possible. In this system, each engineer integrates their code at least daily, preferably every few hours. This means that there are several integrations per day. Extensive automated testing is usually required for this system to function properly.&lt;br /&gt;
&lt;br /&gt;
Among the advantages of continuous integration are that greatly reduced integration issues on any given project. This is because engineers do not modify code for long periods of time. It is therefore less likely that changes made by one engineer will greatly conflict with changes made by another engineer. This leads to faster integration of code and less man hours spent fixing conflicts.&lt;br /&gt;
&lt;br /&gt;
The disadvantage of continuous integration is that it requires an extensive testing suite to ensure that the small constant changes do not break existing functionality.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
[1] http://martinfowler.com/articles/continuousIntegration.html&lt;br /&gt;
&lt;br /&gt;
[2] http://confluence.public.thoughtworks.org/display/CCNET/What+is+Continuous+Integration&lt;br /&gt;
&lt;br /&gt;
[3] http://c2.com/cgi/wiki?CollectiveCodeOwnership&lt;br /&gt;
&lt;br /&gt;
[4] http://www.extremeprogramming.org/rules/collective.html&lt;/div&gt;</summary>
		<author><name>Srmunill</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2007/wiki3_9_sm&amp;diff=10383</id>
		<title>CSC/ECE 517 Fall 2007/wiki3 9 sm</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2007/wiki3_9_sm&amp;diff=10383"/>
		<updated>2007-11-30T01:37:48Z</updated>

		<summary type="html">&lt;p&gt;Srmunill: /* Collective Ownership */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Collective Ownership ==&lt;br /&gt;
&lt;br /&gt;
[[Image:Collective_ownership.GIF|right|500px]]&lt;br /&gt;
&lt;br /&gt;
In a software project, collective ownership of the code implies that any code written does not belong to any particular engineer. This means that anyone working on the project can modify any piece of code that has been previously written. According to Cunningham &amp;amp; Cunningham, Inc., a consulting firm specialized in object-oriented programming, there are five requirements to make Collective ownership work well:&lt;br /&gt;
&lt;br /&gt;
* All engineers use the same coding standards&lt;br /&gt;
* The project use code management tools to detect and resolve conflicts&lt;br /&gt;
* A comprehensive suite of unit tests exists&lt;br /&gt;
* Powerful browsing and refactoring tools to find references to old methods and replace them with the new&lt;br /&gt;
* Continuous Integration, so that conflicts are rare&lt;br /&gt;
&lt;br /&gt;
===Advantages of Collective Ownership===&lt;br /&gt;
&lt;br /&gt;
Collective ownership of code has several advantages of single ownership of code. The first is that no  bottlenecks are created in the code base. If a change alters the dependencies in the code, any part of the code can be changed by any engineer on the team. Second, teams are bound to gain and lose members over the course of a project. Collective ownership is helpful in this case because a single engineer does not take a large portion of knowledge about the framework with him when he leaves. Additionally, new team members can ease into working on the code base without having a set of classes that they have never seen before assigned exclusively to them.&lt;br /&gt;
&lt;br /&gt;
===Disadvantages of Collective Ownership===&lt;br /&gt;
&lt;br /&gt;
Collective ownership is of course not perfect and comes with some disadvantages. First is that engineers tend to become attached to code that they have written. If other engineers on the team come in behind and overwrite large portions of code written by another engineer, that engineer may be upset by the alteration of his or her code.&lt;br /&gt;
&lt;br /&gt;
Also collective ownership does not scale smoothly. Large teams, or teams working on large code bases, may run into problems if they attempt to use collective ownership of their code. This is because&lt;br /&gt;
&lt;br /&gt;
== Continuous Integration ==&lt;br /&gt;
&lt;br /&gt;
Continuous Integration refers to the idea that instead of engineers modifying a set of code over a long period of time and then attempting to merge that back into to main project code, code should be held for only a brief period of time and then integrated back into the main branch as soon as possible. In this system, each engineer integrates their code at least daily, preferably every few hours. This means that there are several integrations per day. Extensive automated testing is usually required for this system to function properly.&lt;br /&gt;
&lt;br /&gt;
Among the advantages of continuous integration are that greatly reduced integration issues on any given project. This is because engineers do not modify code for long periods of time. It is therefore less likely that changes made by one engineer will greatly conflict with changes made by another engineer. This leads to faster integration of code and less man hours spent fixing conflicts.&lt;br /&gt;
&lt;br /&gt;
The disadvantage of continuous integration is that it requires an extensive testing suite to ensure that the small constant changes do not break existing functionality.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
[1] http://martinfowler.com/articles/continuousIntegration.html&lt;br /&gt;
&lt;br /&gt;
[2] http://confluence.public.thoughtworks.org/display/CCNET/What+is+Continuous+Integration&lt;br /&gt;
&lt;br /&gt;
[3] http://c2.com/cgi/wiki?CollectiveCodeOwnership&lt;br /&gt;
&lt;br /&gt;
[4] http://www.extremeprogramming.org/rules/collective.html&lt;/div&gt;</summary>
		<author><name>Srmunill</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2007/wiki3_9_sm&amp;diff=10381</id>
		<title>CSC/ECE 517 Fall 2007/wiki3 9 sm</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2007/wiki3_9_sm&amp;diff=10381"/>
		<updated>2007-11-29T20:33:33Z</updated>

		<summary type="html">&lt;p&gt;Srmunill: /* Collective Ownership */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Collective Ownership ==&lt;br /&gt;
&lt;br /&gt;
[[Image:Collective_ownership.GIF|right|500px]]&lt;br /&gt;
&lt;br /&gt;
In a software project, collective ownership of the code implies that any code written does not belong to any particular engineer. This means that anyone working on the project can modify any piece of code that has been previously written. According to Cunningham &amp;amp; Cunningham, Inc., a consulting firm specialized in object-oriented programming, there are several requirements to make Collective ownership work well:&lt;br /&gt;
&lt;br /&gt;
* All engineers use the same coding standards&lt;br /&gt;
* The project use code management tools to detect and resolve conflicts&lt;br /&gt;
* A comprehensive suite of unit tests exists&lt;br /&gt;
* Powerful browsing and refactoring tools to find references to old methods and replace them with the new&lt;br /&gt;
* Continuous Integration, so that conflicts are rare&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The advantages of collective ownership are that no one on the project has to depend on another engineer to implement a set of changes; they can simply make those changes themselves. Additionally, becuase all engineers work on all sections of the code, the loss of a single engineer should not hinder development as much.&lt;br /&gt;
&lt;br /&gt;
Collective ownership also has some disadvantages. Because all engineers can modify code, people can become upset when someone modifies code that they have written. Additionally, Collective ownership can run into problems with larger teams; if fifty engineers can modify any file in the project, tracking changes can become problematic.&lt;br /&gt;
&lt;br /&gt;
== Continuous Integration ==&lt;br /&gt;
&lt;br /&gt;
Continuous Integration refers to the idea that instead of engineers modifying a set of code over a long period of time and then attempting to merge that back into to main project code, code should be held for only a brief period of time and then integrated back into the main branch as soon as possible. In this system, each engineer integrates their code at least daily, preferably every few hours. This means that there are several integrations per day. Extensive automated testing is usually required for this system to function properly.&lt;br /&gt;
&lt;br /&gt;
Among the advantages of continuous integration are that greatly reduced integration issues on any given project. This is because engineers do not modify code for long periods of time. It is therefore less likely that changes made by one engineer will greatly conflict with changes made by another engineer. This leads to faster integration of code and less man hours spent fixing conflicts.&lt;br /&gt;
&lt;br /&gt;
The disadvantage of continuous integration is that it requires an extensive testing suite to ensure that the small constant changes do not break existing functionality.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
[1] http://martinfowler.com/articles/continuousIntegration.html&lt;br /&gt;
&lt;br /&gt;
[2] http://confluence.public.thoughtworks.org/display/CCNET/What+is+Continuous+Integration&lt;br /&gt;
&lt;br /&gt;
[3] http://c2.com/cgi/wiki?CollectiveCodeOwnership&lt;br /&gt;
&lt;br /&gt;
[4] http://www.extremeprogramming.org/rules/collective.html&lt;/div&gt;</summary>
		<author><name>Srmunill</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2007/wiki3_9_sm&amp;diff=10378</id>
		<title>CSC/ECE 517 Fall 2007/wiki3 9 sm</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2007/wiki3_9_sm&amp;diff=10378"/>
		<updated>2007-11-29T20:01:52Z</updated>

		<summary type="html">&lt;p&gt;Srmunill: /* Continuous Integration */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Collective Ownership ==&lt;br /&gt;
&lt;br /&gt;
[[Image:Collective_ownership.GIF|frame|Collective Ownership Workflow including Continuous Integration|thumb]]&lt;br /&gt;
&lt;br /&gt;
In a software project, collective ownership of the code implies that any code written does not belong to any particular engineer. This means that anyone working on the project can modify any piece of code that has been previously written. According to Cunningham &amp;amp; Cunningham, Inc., a consulting firm specialized in object-oriented programming, there are several requirements to make Collective ownership work well:&lt;br /&gt;
&lt;br /&gt;
* All engineers use the same coding standards&lt;br /&gt;
* The project use code management tools to detect and resolve conflicts&lt;br /&gt;
* A comprehensive suite of unit tests exists&lt;br /&gt;
* Powerful browsing and refactoring tools to find references to old methods and replace them with the new&lt;br /&gt;
* Continuous Integration, so that conflicts are rare&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The advantages of collective ownership are that no one on the project has to depend on another engineer to implement a set of changes; they can simply make those changes themselves. Additionally, becuase all engineers work on all sections of the code, the loss of a single engineer should not hinder development as much.&lt;br /&gt;
&lt;br /&gt;
Collective ownership also has some disadvantages. Because all engineers can modify code, people can become upset when someone modifies code that they have written. Additionally, Collective ownership can run into problems with larger teams; if fifty engineers can modify any file in the project, tracking changes can become problematic.&lt;br /&gt;
&lt;br /&gt;
== Continuous Integration ==&lt;br /&gt;
&lt;br /&gt;
Continuous Integration refers to the idea that instead of engineers modifying a set of code over a long period of time and then attempting to merge that back into to main project code, code should be held for only a brief period of time and then integrated back into the main branch as soon as possible. In this system, each engineer integrates their code at least daily, preferably every few hours. This means that there are several integrations per day. Extensive automated testing is usually required for this system to function properly.&lt;br /&gt;
&lt;br /&gt;
Among the advantages of continuous integration are that greatly reduced integration issues on any given project. This is because engineers do not modify code for long periods of time. It is therefore less likely that changes made by one engineer will greatly conflict with changes made by another engineer. This leads to faster integration of code and less man hours spent fixing conflicts.&lt;br /&gt;
&lt;br /&gt;
The disadvantage of continuous integration is that it requires an extensive testing suite to ensure that the small constant changes do not break existing functionality.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
[1] http://martinfowler.com/articles/continuousIntegration.html&lt;br /&gt;
&lt;br /&gt;
[2] http://confluence.public.thoughtworks.org/display/CCNET/What+is+Continuous+Integration&lt;br /&gt;
&lt;br /&gt;
[3] http://c2.com/cgi/wiki?CollectiveCodeOwnership&lt;br /&gt;
&lt;br /&gt;
[4] http://www.extremeprogramming.org/rules/collective.html&lt;/div&gt;</summary>
		<author><name>Srmunill</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2007/wiki3_9_sm&amp;diff=10377</id>
		<title>CSC/ECE 517 Fall 2007/wiki3 9 sm</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2007/wiki3_9_sm&amp;diff=10377"/>
		<updated>2007-11-29T20:00:15Z</updated>

		<summary type="html">&lt;p&gt;Srmunill: /* Collective Ownership */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Collective Ownership ==&lt;br /&gt;
&lt;br /&gt;
[[Image:Collective_ownership.GIF|frame|Collective Ownership Workflow including Continuous Integration|thumb]]&lt;br /&gt;
&lt;br /&gt;
In a software project, collective ownership of the code implies that any code written does not belong to any particular engineer. This means that anyone working on the project can modify any piece of code that has been previously written. According to Cunningham &amp;amp; Cunningham, Inc., a consulting firm specialized in object-oriented programming, there are several requirements to make Collective ownership work well:&lt;br /&gt;
&lt;br /&gt;
* All engineers use the same coding standards&lt;br /&gt;
* The project use code management tools to detect and resolve conflicts&lt;br /&gt;
* A comprehensive suite of unit tests exists&lt;br /&gt;
* Powerful browsing and refactoring tools to find references to old methods and replace them with the new&lt;br /&gt;
* Continuous Integration, so that conflicts are rare&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The advantages of collective ownership are that no one on the project has to depend on another engineer to implement a set of changes; they can simply make those changes themselves. Additionally, becuase all engineers work on all sections of the code, the loss of a single engineer should not hinder development as much.&lt;br /&gt;
&lt;br /&gt;
Collective ownership also has some disadvantages. Because all engineers can modify code, people can become upset when someone modifies code that they have written. Additionally, Collective ownership can run into problems with larger teams; if fifty engineers can modify any file in the project, tracking changes can become problematic.&lt;br /&gt;
&lt;br /&gt;
== Continuous Integration ==&lt;br /&gt;
&lt;br /&gt;
Continuous Integration refers to the idea that instead of engineers modifying a set of code over a long period of time and then attempting to merge that back into to main project code, code should be held for only a brief period of time and then integrated back into the main branch as soon as possible. In this system, each engineer integrates their code at least daily. This means that there are several integrations per day. Extensive automated testing is usually required for this system to function properly.&lt;br /&gt;
&lt;br /&gt;
Among the advantages of continuous integration are that greatly reduced integration issues on any given project. This is because engineers do not modify code for long periods of time. It is therefore less likely that changes made by one engineer will greatly conflict with changes made by another engineer. This leads to faster integration of code and less man hours spent fixing conflicts.&lt;br /&gt;
&lt;br /&gt;
The disadvantage of continuous integration is that it requires an extensive testing suite to ensure that the small constant changes do not break existing functionality.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
[1] http://martinfowler.com/articles/continuousIntegration.html&lt;br /&gt;
&lt;br /&gt;
[2] http://confluence.public.thoughtworks.org/display/CCNET/What+is+Continuous+Integration&lt;br /&gt;
&lt;br /&gt;
[3] http://c2.com/cgi/wiki?CollectiveCodeOwnership&lt;br /&gt;
&lt;br /&gt;
[4] http://www.extremeprogramming.org/rules/collective.html&lt;/div&gt;</summary>
		<author><name>Srmunill</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2007/wiki3_9_sm&amp;diff=10376</id>
		<title>CSC/ECE 517 Fall 2007/wiki3 9 sm</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2007/wiki3_9_sm&amp;diff=10376"/>
		<updated>2007-11-29T19:59:04Z</updated>

		<summary type="html">&lt;p&gt;Srmunill: /* Collective Ownership */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Collective Ownership ==&lt;br /&gt;
&lt;br /&gt;
[[Image:Collective_ownership.GIF|100px|frame|Collective Ownership Workflow including Continuous Integration]]&lt;br /&gt;
&lt;br /&gt;
In a software project, collective ownership of the code implies that any code written does not belong to any particular engineer. This means that anyone working on the project can modify any piece of code that has been previously written. According to Cunningham &amp;amp; Cunningham, Inc., a consulting firm specialized in object-oriented programming, there are several requirements to make Collective ownership work well:&lt;br /&gt;
&lt;br /&gt;
* All engineers use the same coding standards&lt;br /&gt;
* The project use code management tools to detect and resolve conflicts&lt;br /&gt;
* A comprehensive suite of unit tests exists&lt;br /&gt;
* Powerful browsing and refactoring tools to find references to old methods and replace them with the new&lt;br /&gt;
* Continuous Integration, so that conflicts are rare&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The advantages of collective ownership are that no one on the project has to depend on another engineer to implement a set of changes; they can simply make those changes themselves. Additionally, becuase all engineers work on all sections of the code, the loss of a single engineer should not hinder development as much.&lt;br /&gt;
&lt;br /&gt;
Collective ownership also has some disadvantages. Because all engineers can modify code, people can become upset when someone modifies code that they have written. Additionally, Collective ownership can run into problems with larger teams; if fifty engineers can modify any file in the project, tracking changes can become problematic.&lt;br /&gt;
&lt;br /&gt;
== Continuous Integration ==&lt;br /&gt;
&lt;br /&gt;
Continuous Integration refers to the idea that instead of engineers modifying a set of code over a long period of time and then attempting to merge that back into to main project code, code should be held for only a brief period of time and then integrated back into the main branch as soon as possible. In this system, each engineer integrates their code at least daily. This means that there are several integrations per day. Extensive automated testing is usually required for this system to function properly.&lt;br /&gt;
&lt;br /&gt;
Among the advantages of continuous integration are that greatly reduced integration issues on any given project. This is because engineers do not modify code for long periods of time. It is therefore less likely that changes made by one engineer will greatly conflict with changes made by another engineer. This leads to faster integration of code and less man hours spent fixing conflicts.&lt;br /&gt;
&lt;br /&gt;
The disadvantage of continuous integration is that it requires an extensive testing suite to ensure that the small constant changes do not break existing functionality.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
[1] http://martinfowler.com/articles/continuousIntegration.html&lt;br /&gt;
&lt;br /&gt;
[2] http://confluence.public.thoughtworks.org/display/CCNET/What+is+Continuous+Integration&lt;br /&gt;
&lt;br /&gt;
[3] http://c2.com/cgi/wiki?CollectiveCodeOwnership&lt;br /&gt;
&lt;br /&gt;
[4] http://www.extremeprogramming.org/rules/collective.html&lt;/div&gt;</summary>
		<author><name>Srmunill</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Collective_ownership.GIF&amp;diff=10375</id>
		<title>File:Collective ownership.GIF</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Collective_ownership.GIF&amp;diff=10375"/>
		<updated>2007-11-29T19:54:07Z</updated>

		<summary type="html">&lt;p&gt;Srmunill: From: http://www.extremeprogramming.org/map/code.html&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;From: http://www.extremeprogramming.org/map/code.html&lt;/div&gt;</summary>
		<author><name>Srmunill</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2007/wiki3_4_sm&amp;diff=9871</id>
		<title>CSC/ECE 517 Fall 2007/wiki3 4 sm</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2007/wiki3_4_sm&amp;diff=9871"/>
		<updated>2007-11-27T01:49:15Z</updated>

		<summary type="html">&lt;p&gt;Srmunill: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Interface Segregation principle ==&lt;br /&gt;
&lt;br /&gt;
The Interface Segregation principle states that &lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;quot;Clients should not be forced to depend upon interfaces that they do not use.&amp;quot;&amp;lt;sup&amp;gt;[1]&amp;lt;/sup&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The interface segregation principle comes from a desire to avoid &amp;quot;fat&amp;quot; interfaces; interfaces whose methods can be divided into more than one group. This is very similar to the principle that a class should only do one thing and do it well.&lt;br /&gt;
&lt;br /&gt;
An excellent example of why &amp;quot;fat&amp;quot; interfaces should be avoided is provided by DoodleProject:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Recall the on-line bookseller system introduced in the Open-Closed Principle  and referred to in the Dependency Inversion Principle. Now the company wants to start offering music CDs for sale through its website. To accommodate this, the search engine portion of the website will need to be modified. Trying to reuse as much code as possible, the SearchEngine and Query types are amended to accept CD searching queries. The resulting class diagram is:&lt;br /&gt;
&lt;br /&gt;
[[Image:Interface_segregation_before.gif]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;To satisfy the requirements of CD searching, the Query interface was forced to handle both BookServletQuery and CDServletQuery functionality. In the future, if there is any change to the searching functionality of CDServletQuery, then that change will be forced onto the Query interface. Furthermore, any change to Query forces a change to all of its implementers, including BookServletQuery. This scenario, a change in the CD query portion of the website forces a change (and possible bugs) in the book query portion of the website, makes the software very fragile. To fix this BookServletQuery and CDServletQuery must be implemented from separate interfaces. This can easily be accomplished by adding some additional abstract types to the design that are more specific in their tasks. The new class diagram is:&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Image:Interface_segregation_after.gif]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;With this design, the two functional concerns have been separated. Now, if CDServletQuery needs new searching functionality, the change is forced upon CDQuery but can not propagate to the book query portion of the design.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The basic idea is that it is good practice to make sure that a single objuect (in this case, an interface) does not do too much. The more functionality that is put into an object, the harder it becomes to update that object when requirements change.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
[1] http://doodleproject.sourceforge.net/articles/2001/interfaceSegregationPrinciple.html&lt;br /&gt;
&lt;br /&gt;
[2] http://www.objectmentor.com/resources/articles/isp.pdf&lt;br /&gt;
&lt;br /&gt;
[3] http://javaboutique.internet.com/tutorials/JavaOO/interface_segregation.html&lt;/div&gt;</summary>
		<author><name>Srmunill</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2007/wiki3_9_sm&amp;diff=9870</id>
		<title>CSC/ECE 517 Fall 2007/wiki3 9 sm</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2007/wiki3_9_sm&amp;diff=9870"/>
		<updated>2007-11-27T01:48:50Z</updated>

		<summary type="html">&lt;p&gt;Srmunill: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Collective Ownership ==&lt;br /&gt;
&lt;br /&gt;
In a software project, collective ownership of the code implies that any code written does not belong to any particular engineer. This means that anyone working on the project can modify any piece of code that has been previously written. According to Cunningham &amp;amp; Cunningham, Inc., a consulting firm specialized in object-oriented programming, there are several requirements to make Collective ownership work well:&lt;br /&gt;
&lt;br /&gt;
* All engineers use the same coding standards&lt;br /&gt;
* The project use code management tools to detect and resolve conflicts&lt;br /&gt;
* A comprehensive suite of unit tests exists&lt;br /&gt;
* Powerful browsing and refactoring tools to find references to old methods and replace them with the new&lt;br /&gt;
* Continuous Integration, so that conflicts are rare&lt;br /&gt;
&lt;br /&gt;
The advantages of collective ownership are that no one on the project has to depend on another engineer to implement a set of changes; they can simply make those changes themselves. Additionally, becuase all engineers work on all sections of the code, the loss of a single engineer should not hinder development as much.&lt;br /&gt;
&lt;br /&gt;
Collective ownership also has some disadvantages. Because all engineers can modify code, people can become upset when someone modifies code that they have written. Additionally, Collective ownership can run into problems with larger teams; if fifty engineers can modify any file in the project, tracking changes can become problematic.&lt;br /&gt;
&lt;br /&gt;
== Continuous Integration ==&lt;br /&gt;
&lt;br /&gt;
Continuous Integration refers to the idea that instead of engineers modifying a set of code over a long period of time and then attempting to merge that back into to main project code, code should be held for only a brief period of time and then integrated back into the main branch as soon as possible. In this system, each engineer integrates their code at least daily. This means that there are several integrations per day. Extensive automated testing is usually required for this system to function properly.&lt;br /&gt;
&lt;br /&gt;
Among the advantages of continuous integration are that greatly reduced integration issues on any given project. This is because engineers do not modify code for long periods of time. It is therefore less likely that changes made by one engineer will greatly conflict with changes made by another engineer. This leads to faster integration of code and less man hours spent fixing conflicts.&lt;br /&gt;
&lt;br /&gt;
The disadvantage of continuous integration is that it requires an extensive testing suite to ensure that the small constant changes do not break existing functionality.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
[1] http://martinfowler.com/articles/continuousIntegration.html&lt;br /&gt;
&lt;br /&gt;
[2] http://confluence.public.thoughtworks.org/display/CCNET/What+is+Continuous+Integration&lt;br /&gt;
&lt;br /&gt;
[3] http://c2.com/cgi/wiki?CollectiveCodeOwnership&lt;br /&gt;
&lt;br /&gt;
[4] http://www.extremeprogramming.org/rules/collective.html&lt;/div&gt;</summary>
		<author><name>Srmunill</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki3_9_sm&amp;diff=9637</id>
		<title>CSC/ECE 506 Fall 2007/wiki3 9 sm</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki3_9_sm&amp;diff=9637"/>
		<updated>2007-11-20T01:20:23Z</updated>

		<summary type="html">&lt;p&gt;Srmunill: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Collective Ownership ==&lt;br /&gt;
&lt;br /&gt;
In a software project, collective ownership of the code implies that any code written does not belong to any particular engineer. This means that anyone working on the project can modify any piece of code that has been previously written. According to Cunningham &amp;amp; Cunningham, Inc., a consulting firm specialized in object-oriented programming, there are several requirements to make Collective ownership work well:&lt;br /&gt;
&lt;br /&gt;
* All engineers use the same coding standards&lt;br /&gt;
* The project use code management tools to detect and resolve conflicts&lt;br /&gt;
* A comprehensive suite of unit tests exists&lt;br /&gt;
* Powerful browsing and refactoring tools to find references to old methods and replace them with the new&lt;br /&gt;
* Continuous Integration, so that conflicts are rare&lt;br /&gt;
&lt;br /&gt;
The advantages of collective ownership are that no one on the project has to depend on another engineer to implement a set of changes; they can simply make those changes themselves. Additionally, becuase all engineers work on all sections of the code, the loss of a single engineer should not hinder development as much.&lt;br /&gt;
&lt;br /&gt;
Collective ownership also has some disadvantages. Because all engineers can modify code, people can become upset when someone modifies code that they have written. Additionally, Collective ownership can run into problems with larger teams; if fifty engineers can modify any file in the project, tracking changes can become problematic.&lt;br /&gt;
&lt;br /&gt;
== Continuous Integration ==&lt;br /&gt;
&lt;br /&gt;
Continuous Integration refers to the idea that instead of engineers modifying a set of code over a long period of time and then attempting to merge that back into to main project code, code should be held for only a brief period of time and then integrated back into the main branch as soon as possible. In this system, each engineer integrates their code at least daily. This means that there are several integrations per day. Extensive automated testing is usually required for this system to function properly.&lt;br /&gt;
&lt;br /&gt;
Among the advantages of continuous integration are that greatly reduced integration issues on any given project. This is because engineers do not modify code for long periods of time. It is therefore less likely that changes made by one engineer will greatly conflict with changes made by another engineer. This leads to faster integration of code and less man hours spent fixing conflicts.&lt;br /&gt;
&lt;br /&gt;
The disadvantage of continuous integration is that it requires an extensive testing suite to ensure that the small constant changes do not break existing functionality.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
[1] http://martinfowler.com/articles/continuousIntegration.html&lt;br /&gt;
&lt;br /&gt;
[2] http://confluence.public.thoughtworks.org/display/CCNET/What+is+Continuous+Integration&lt;br /&gt;
&lt;br /&gt;
[3] http://c2.com/cgi/wiki?CollectiveCodeOwnership&lt;br /&gt;
&lt;br /&gt;
[4] http://www.extremeprogramming.org/rules/collective.html&lt;/div&gt;</summary>
		<author><name>Srmunill</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki3_4_sm&amp;diff=9602</id>
		<title>CSC/ECE 506 Fall 2007/wiki3 4 sm</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki3_4_sm&amp;diff=9602"/>
		<updated>2007-11-20T00:40:17Z</updated>

		<summary type="html">&lt;p&gt;Srmunill: /* Interface Segregation principle */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Interface Segregation principle ==&lt;br /&gt;
&lt;br /&gt;
The Interface Segregation principle states that &lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;quot;Clients should not be forced to depend upon interfaces that they do not use.&amp;quot;&amp;lt;sup&amp;gt;[1]&amp;lt;/sup&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The interface segregation principle comes from a desire to avoid &amp;quot;fat&amp;quot; interfaces; interfaces whose methods can be divided into more than one group. This is very similar to the principle that a class should only do one thing and do it well.&lt;br /&gt;
&lt;br /&gt;
An excellent example of why &amp;quot;fat&amp;quot; interfaces should be avoided is provided by DoodleProject:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Recall the on-line bookseller system introduced in the Open-Closed Principle  and referred to in the Dependency Inversion Principle. Now the company wants to start offering music CDs for sale through its website. To accommodate this, the search engine portion of the website will need to be modified. Trying to reuse as much code as possible, the SearchEngine and Query types are amended to accept CD searching queries. The resulting class diagram is:&lt;br /&gt;
&lt;br /&gt;
[[Image:Interface_segregation_before.gif]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;To satisfy the requirements of CD searching, the Query interface was forced to handle both BookServletQuery and CDServletQuery functionality. In the future, if there is any change to the searching functionality of CDServletQuery, then that change will be forced onto the Query interface. Furthermore, any change to Query forces a change to all of its implementers, including BookServletQuery. This scenario, a change in the CD query portion of the website forces a change (and possible bugs) in the book query portion of the website, makes the software very fragile. To fix this BookServletQuery and CDServletQuery must be implemented from separate interfaces. This can easily be accomplished by adding some additional abstract types to the design that are more specific in their tasks. The new class diagram is:&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Image:Interface_segregation_after.gif]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;With this design, the two functional concerns have been separated. Now, if CDServletQuery needs new searching functionality, the change is forced upon CDQuery but can not propagate to the book query portion of the design.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The basic idea is that it is good practice to make sure that a single objuect (in this case, an interface) does not do too much. The more functionality that is put into an object, the harder it becomes to update that object when requirements change.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
[1] http://doodleproject.sourceforge.net/articles/2001/interfaceSegregationPrinciple.html&lt;br /&gt;
&lt;br /&gt;
[2] http://www.objectmentor.com/resources/articles/isp.pdf&lt;br /&gt;
&lt;br /&gt;
[3] http://javaboutique.internet.com/tutorials/JavaOO/interface_segregation.html&lt;/div&gt;</summary>
		<author><name>Srmunill</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki3_4_sm&amp;diff=9601</id>
		<title>CSC/ECE 506 Fall 2007/wiki3 4 sm</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki3_4_sm&amp;diff=9601"/>
		<updated>2007-11-20T00:37:55Z</updated>

		<summary type="html">&lt;p&gt;Srmunill: /* Interface Segregation principle */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Interface Segregation principle ==&lt;br /&gt;
&lt;br /&gt;
The Interface Segregation principle states that &lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;quot;Clients should not be forced to depend upon interfaces that they do not use.&amp;quot;&amp;lt;sup&amp;gt;[1]&amp;lt;/sup&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The interface segregation principle comes from a desire to avoid &amp;quot;fat&amp;quot; interfaces; interfaces whose methods can be divided into more than one group. This is very similar to the principle that a class should only do one thing and do it well.&lt;br /&gt;
&lt;br /&gt;
An excellent example of why &amp;quot;fat&amp;quot; interfaces should be avoided is provided by DoodleProject:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Recall the on-line bookseller system introduced in the Open-Closed Principle  and referred to in the Dependency Inversion Principle. Now the company wants to start offering music CDs for sale through its website. To accommodate this, the search engine portion of the website will need to be modified. Trying to reuse as much code as possible, the SearchEngine and Query types are amended to accept CD searching queries. The resulting class diagram is:&lt;br /&gt;
&lt;br /&gt;
[[Image:Interface_segregation_before.gif]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;To satisfy the requirements of CD searching, the Query interface was forced to handle both BookServletQuery and CDServletQuery functionality. In the future, if there is any change to the searching functionality of CDServletQuery, then that change will be forced onto the Query interface. Furthermore, any change to Query forces a change to all of its implementers, including BookServletQuery. This scenario, a change in the CD query portion of the website forces a change (and possible bugs) in the book query portion of the website, makes the software very fragile. To fix this BookServletQuery and CDServletQuery must be implemented from separate interfaces. This can easily be accomplished by adding some additional abstract types to the design that are more specific in their tasks. The new class diagram is:&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Image:Interface_segregation_after.gif]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;With this design, the two functional concerns have been separated. Now, if CDServletQuery needs new searching functionality, the change is forced upon CDQuery but can not propagate to the book query portion of the design.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
[1] http://doodleproject.sourceforge.net/articles/2001/interfaceSegregationPrinciple.html&lt;br /&gt;
&lt;br /&gt;
[2] http://www.objectmentor.com/resources/articles/isp.pdf&lt;br /&gt;
&lt;br /&gt;
[3] http://javaboutique.internet.com/tutorials/JavaOO/interface_segregation.html&lt;/div&gt;</summary>
		<author><name>Srmunill</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki3_4_sm&amp;diff=9600</id>
		<title>CSC/ECE 506 Fall 2007/wiki3 4 sm</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki3_4_sm&amp;diff=9600"/>
		<updated>2007-11-20T00:37:04Z</updated>

		<summary type="html">&lt;p&gt;Srmunill: /* Interface Segregation principle */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Interface Segregation principle ==&lt;br /&gt;
&lt;br /&gt;
The Interface Segregation principle states that &lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;quot;Clients should not be forced to depend upon interfaces that they do not use.&amp;quot;&amp;lt;sup&amp;gt;[1]&amp;lt;/sup&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The interface segregation principle comes from a desire to avoid &amp;quot;fat&amp;quot; interfaces; interfaces whose methods can be divided into more than one group. This is very similar to the principle that a class should only do one thing and do it well.&lt;br /&gt;
&lt;br /&gt;
An excellent example of why &amp;quot;fat&amp;quot; interfaces should be avoided is provided by DoodleProject:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Recall the on-line bookseller system introduced in the Open-Closed Principle  and referred to in the Dependency Inversion Principle. Now the company wants to start offering music CDs for sale through its website. To accommodate this, the search engine portion of the website will need to be modified. Trying to reuse as much code as possible, the SearchEngine and Query types are amended to accept CD searching queries. The resulting class diagram is:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:Interface_segregation_before.gif]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;To satisfy the requirements of CD searching, the Query interface was forced to handle both BookServletQuery and CDServletQuery functionality. In the future, if there is any change to the searching functionality of CDServletQuery, then that change will be forced onto the Query interface. Furthermore, any change to Query forces a change to all of its implementers, including BookServletQuery. This scenario, a change in the CD query portion of the website forces a change (and possible bugs) in the book query portion of the website, makes the software very fragile. To fix this BookServletQuery and CDServletQuery must be implemented from separate interfaces. This can easily be accomplished by adding some additional abstract types to the design that are more specific in their tasks. The new class diagram is:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:Interface_segregation_after.gif]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;With this design, the two functional concerns have been separated. Now, if CDServletQuery needs new searching functionality, the change is forced upon CDQuery but can not propagate to the book query portion of the design.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
[1] http://doodleproject.sourceforge.net/articles/2001/interfaceSegregationPrinciple.html&lt;br /&gt;
&lt;br /&gt;
[2] http://www.objectmentor.com/resources/articles/isp.pdf&lt;br /&gt;
&lt;br /&gt;
[3] http://javaboutique.internet.com/tutorials/JavaOO/interface_segregation.html&lt;/div&gt;</summary>
		<author><name>Srmunill</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Interface_segregation_after.gif&amp;diff=9599</id>
		<title>File:Interface segregation after.gif</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Interface_segregation_after.gif&amp;diff=9599"/>
		<updated>2007-11-20T00:35:21Z</updated>

		<summary type="html">&lt;p&gt;Srmunill: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Srmunill</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki3_4_sm&amp;diff=9598</id>
		<title>CSC/ECE 506 Fall 2007/wiki3 4 sm</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki3_4_sm&amp;diff=9598"/>
		<updated>2007-11-20T00:33:23Z</updated>

		<summary type="html">&lt;p&gt;Srmunill: /* Interface Segregation principle */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Interface Segregation principle ==&lt;br /&gt;
&lt;br /&gt;
The Interface Segregation principle states that &lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;quot;Clients should not be forced to depend upon interfaces that they do not use.&amp;quot;&amp;lt;sup&amp;gt;[1]&amp;lt;/sup&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The interface segregation principle comes from a desire to avoid &amp;quot;fat&amp;quot; interfaces; interfaces whose methods can be divided into more than one group. This is very similar to the principle that a class should only do one thing and do it well.&lt;br /&gt;
&lt;br /&gt;
An excellent example of why &amp;quot;fat&amp;quot; interfaces should be avoided is provided by DoodleProject:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Recall the on-line bookseller system introduced in the Open-Closed Principle  and referred to in the Dependency Inversion Principle. Now the company wants to start offering music CDs for sale through its website. To accommodate this, the search engine portion of the website will need to be modified. Trying to reuse as much code as possible, the SearchEngine and Query types are amended to accept CD searching queries. The resulting class diagram is:&lt;br /&gt;
&lt;br /&gt;
[[Image:Interface_segregation_before.gif]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To satisfy the requirements of CD searching, the Query interface was forced to handle both BookServletQuery and CDServletQuery functionality. In the future, if there is any change to the searching functionality of CDServletQuery, then that change will be forced onto the Query interface. Furthermore, any change to Query forces a change to all of its implementers, including BookServletQuery. This scenario, a change in the CD query portion of the website forces a change (and possible bugs) in the book query portion of the website, makes the software very fragile. To fix this BookServletQuery and CDServletQuery must be implemented from separate interfaces. This can easily be accomplished by adding some additional abstract types to the design that are more specific in their tasks. The new class diagram is:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:Interface_segregation_after.gif]]&lt;br /&gt;
&lt;br /&gt;
With this design, the two functional concerns have been separated. Now, if CDServletQuery needs new searching functionality, the change is forced upon CDQuery but can not propagate to the book query portion of the design.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
[1] http://doodleproject.sourceforge.net/articles/2001/interfaceSegregationPrinciple.html&lt;br /&gt;
&lt;br /&gt;
[2] http://www.objectmentor.com/resources/articles/isp.pdf&lt;br /&gt;
&lt;br /&gt;
[3] http://javaboutique.internet.com/tutorials/JavaOO/interface_segregation.html&lt;/div&gt;</summary>
		<author><name>Srmunill</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Interface_segration_after.gif&amp;diff=9597</id>
		<title>File:Interface segration after.gif</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Interface_segration_after.gif&amp;diff=9597"/>
		<updated>2007-11-20T00:32:23Z</updated>

		<summary type="html">&lt;p&gt;Srmunill: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Srmunill</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Interface_segregation_before.gif&amp;diff=9596</id>
		<title>File:Interface segregation before.gif</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Interface_segregation_before.gif&amp;diff=9596"/>
		<updated>2007-11-20T00:31:57Z</updated>

		<summary type="html">&lt;p&gt;Srmunill: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Srmunill</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki3_4_sm&amp;diff=9594</id>
		<title>CSC/ECE 506 Fall 2007/wiki3 4 sm</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki3_4_sm&amp;diff=9594"/>
		<updated>2007-11-20T00:31:11Z</updated>

		<summary type="html">&lt;p&gt;Srmunill: /* Interface Segregation principle */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Interface Segregation principle ==&lt;br /&gt;
&lt;br /&gt;
The Interface Segregation principle states that &lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;quot;Clients should not be forced to depend upon interfaces that they do not use.&amp;quot;&amp;lt;sup&amp;gt;[1]&amp;lt;/sup&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The interface segregation principle comes from a desire to avoid &amp;quot;fat&amp;quot; interfaces; interfaces whose methods can be divided into more than one group. This is very similar to the principle that a class should only do one thing and do it well.&lt;br /&gt;
&lt;br /&gt;
An excellent example of why &amp;quot;fat&amp;quot; interfaces should be avoided is provided by DoodleProject:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Recall the on-line bookseller system introduced in the Open-Closed Principle  and referred to in the Dependency Inversion Principle. Now the company wants to start offering music CDs for sale through its website. To accommodate this, the search engine portion of the website will need to be modified. Trying to reuse as much code as possible, the SearchEngine and Query types are amended to accept CD searching queries. The resulting class diagram is:&lt;br /&gt;
&lt;br /&gt;
[[Image:Example.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To satisfy the requirements of CD searching, the Query interface was forced to handle both BookServletQuery and CDServletQuery functionality. In the future, if there is any change to the searching functionality of CDServletQuery, then that change will be forced onto the Query interface. Furthermore, any change to Query forces a change to all of its implementers, including BookServletQuery. This scenario, a change in the CD query portion of the website forces a change (and possible bugs) in the book query portion of the website, makes the software very fragile. To fix this BookServletQuery and CDServletQuery must be implemented from separate interfaces. This can easily be accomplished by adding some additional abstract types to the design that are more specific in their tasks. The new class diagram is:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:Example.jpg]]&lt;br /&gt;
&lt;br /&gt;
With this design, the two functional concerns have been separated. Now, if CDServletQuery needs new searching functionality, the change is forced upon CDQuery but can not propagate to the book query portion of the design.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
[1] http://doodleproject.sourceforge.net/articles/2001/interfaceSegregationPrinciple.html&lt;br /&gt;
&lt;br /&gt;
[2] http://www.objectmentor.com/resources/articles/isp.pdf&lt;br /&gt;
&lt;br /&gt;
[3] http://javaboutique.internet.com/tutorials/JavaOO/interface_segregation.html&lt;/div&gt;</summary>
		<author><name>Srmunill</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki3_4_sm&amp;diff=9509</id>
		<title>CSC/ECE 506 Fall 2007/wiki3 4 sm</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki3_4_sm&amp;diff=9509"/>
		<updated>2007-11-19T21:15:19Z</updated>

		<summary type="html">&lt;p&gt;Srmunill: /* Interface Segregation principle */  Introduction to concept&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Interface Segregation principle ==&lt;br /&gt;
&lt;br /&gt;
The Interface Segregation principle states that &amp;quot; Clients should not be forced to depend upon interfaces that they do not use.&amp;quot;[1]&lt;br /&gt;
&lt;br /&gt;
[1] http://doodleproject.sourceforge.net/articles/2001/interfaceSegregationPrinciple.html&lt;/div&gt;</summary>
		<author><name>Srmunill</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki3_4_sm&amp;diff=9506</id>
		<title>CSC/ECE 506 Fall 2007/wiki3 4 sm</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki3_4_sm&amp;diff=9506"/>
		<updated>2007-11-19T21:08:47Z</updated>

		<summary type="html">&lt;p&gt;Srmunill: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Interface Segregation principle ==&lt;/div&gt;</summary>
		<author><name>Srmunill</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki3_9_sm&amp;diff=9414</id>
		<title>CSC/ECE 506 Fall 2007/wiki3 9 sm</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki3_9_sm&amp;diff=9414"/>
		<updated>2007-11-19T19:17:17Z</updated>

		<summary type="html">&lt;p&gt;Srmunill: /* Continuous Integration */ Expanded pros and cons&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Collective Ownership ==&lt;br /&gt;
&lt;br /&gt;
In a software project, collective ownership of the code implies that any code written does not belong to any particular engineer. This means that anyone working on the project can modify any piece of code that has been previously written. According to Cunningham &amp;amp; Cunningham, Inc., a consulting firm specialized in object-oriented programming, there are several requirements to make Collective ownership work well:&lt;br /&gt;
&lt;br /&gt;
* All engineers use the same coding standards&lt;br /&gt;
* The project use code management tools to detect and resolve conflicts&lt;br /&gt;
* A comprehensive suite of unit tests exists&lt;br /&gt;
* Powerful browsing and refactoring tools to find references to old methods and replace them with the new&lt;br /&gt;
* Continuous Integration, so that conflicts are rare&lt;br /&gt;
&lt;br /&gt;
The advantages of collective ownership are that no one on the project has to depend on another engineer to implement a set of changes; they can simply make those changes themselves. Additionally, becuase all engineers work on all sections of the code, the loss of a single engineer should not hinder development as much.&lt;br /&gt;
&lt;br /&gt;
Collective ownership also has some disadvantages. Because all engineers can modify code, people can become upset when someone modifies code that they have written. Additionally, Collective ownership can run into problems with larger teams; if fifty engineers can modify any file in the project, tracking changes can become problematic.&lt;br /&gt;
&lt;br /&gt;
== Continuous Integration ==&lt;br /&gt;
&lt;br /&gt;
Continuous Integration refers to the idea that instead of engineers modifying a set of code over a long period of time and then attempting to merge that back into to main project code, code should be held for only a brief period of time and then integrated back into the main branch as soon as possible. In this system, each engineer integrates their code at least daily. This means that there are several integrations per day. Extensive automated testing is usually required for this system to function properly.&lt;br /&gt;
&lt;br /&gt;
Among the advantages of continuous integration are that greatly reduced integration issues on any given project. This is because engineers do not modify code for long periods of time. It is therefore less likely that changes made by one engineer will greatly conflict with changes made by another engineer. This leads to faster integration of code and less man hours spent fixing conflicts.&lt;br /&gt;
&lt;br /&gt;
The disadvantage of continuous integration is that it requires an extensive testing suite to ensure that the small constant changes do not break existing functionality.&lt;/div&gt;</summary>
		<author><name>Srmunill</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki3_9_sm&amp;diff=8879</id>
		<title>CSC/ECE 506 Fall 2007/wiki3 9 sm</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki3_9_sm&amp;diff=8879"/>
		<updated>2007-11-18T04:07:18Z</updated>

		<summary type="html">&lt;p&gt;Srmunill: /* Continuous Integration */  Pros and Cons of Continuous Integration&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Collective Ownership ==&lt;br /&gt;
&lt;br /&gt;
In a software project, collective ownership of the code implies that any code written does not belong to any particular engineer. This means that anyone working on the project can modify any piece of code that has been previously written. According to Cunningham &amp;amp; Cunningham, Inc., a consulting firm specialized in object-oriented programming, there are several requirements to make Collective ownership work well:&lt;br /&gt;
&lt;br /&gt;
* All engineers use the same coding standards&lt;br /&gt;
* The project use code management tools to detect and resolve conflicts&lt;br /&gt;
* A comprehensive suite of unit tests exists&lt;br /&gt;
* Powerful browsing and refactoring tools to find references to old methods and replace them with the new&lt;br /&gt;
* Continuous Integration, so that conflicts are rare&lt;br /&gt;
&lt;br /&gt;
The advantages of collective ownership are that no one on the project has to depend on another engineer to implement a set of changes; they can simply make those changes themselves. Additionally, becuase all engineers work on all sections of the code, the loss of a single engineer should not hinder development as much.&lt;br /&gt;
&lt;br /&gt;
Collective ownership also has some disadvantages. Because all engineers can modify code, people can become upset when someone modifies code that they have written. Additionally, Collective ownership can run into problems with larger teams; if fifty engineers can modify any file in the project, tracking changes can become problematic.&lt;br /&gt;
&lt;br /&gt;
== Continuous Integration ==&lt;br /&gt;
&lt;br /&gt;
Continuous Integration refers to the idea that instead of engineers modifying a set of code over a long period of time and then attepting to merge that back into to main project code, code should be held for only a brief period of time and then integrated back into the main branch as soon as possible.&lt;br /&gt;
&lt;br /&gt;
Advantages&lt;br /&gt;
Eliminates integration issues&lt;br /&gt;
&lt;br /&gt;
Disadvantages&lt;br /&gt;
Requires extensive testing&lt;/div&gt;</summary>
		<author><name>Srmunill</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki3_9_sm&amp;diff=8863</id>
		<title>CSC/ECE 506 Fall 2007/wiki3 9 sm</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki3_9_sm&amp;diff=8863"/>
		<updated>2007-11-18T03:16:17Z</updated>

		<summary type="html">&lt;p&gt;Srmunill: /* Continuous Integration */ Intro to Continuous Intergration&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Collective Ownership ==&lt;br /&gt;
&lt;br /&gt;
In a software project, collective ownership of the code implies that any code written does not belong to any particular engineer. This means that anyone working on the project can modify any piece of code that has been previously written. According to Cunningham &amp;amp; Cunningham, Inc., a consulting firm specialized in object-oriented programming, there are several requirements to make Collective ownership work well:&lt;br /&gt;
&lt;br /&gt;
* All engineers use the same coding standards&lt;br /&gt;
* The project use code management tools to detect and resolve conflicts&lt;br /&gt;
* A comprehensive suite of unit tests exists&lt;br /&gt;
* Powerful browsing and refactoring tools to find references to old methods and replace them with the new&lt;br /&gt;
* Continuous Integration, so that conflicts are rare&lt;br /&gt;
&lt;br /&gt;
The advantages of collective ownership are that no one on the project has to depend on another engineer to implement a set of changes; they can simply make those changes themselves. Additionally, becuase all engineers work on all sections of the code, the loss of a single engineer should not hinder development as much.&lt;br /&gt;
&lt;br /&gt;
Collective ownership also has some disadvantages. Because all engineers can modify code, people can become upset when someone modifies code that they have written. Additionally, Collective ownership can run into problems with larger teams; if fifty engineers can modify any file in the project, tracking changes can become problematic.&lt;br /&gt;
&lt;br /&gt;
== Continuous Integration ==&lt;br /&gt;
&lt;br /&gt;
Continuous Integration refers to the idea that instead of engineers modifying a set of code over a long period of time and then attepting to merge that back into to main project code, code should be held for only a brief period of time and then integrated back into the main branch as soon as possible.&lt;/div&gt;</summary>
		<author><name>Srmunill</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki3_9_sm&amp;diff=8861</id>
		<title>CSC/ECE 506 Fall 2007/wiki3 9 sm</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki3_9_sm&amp;diff=8861"/>
		<updated>2007-11-18T02:56:12Z</updated>

		<summary type="html">&lt;p&gt;Srmunill: /* Collective Ownership */  Added pros and cons of Collective Ownership&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Collective Ownership ==&lt;br /&gt;
&lt;br /&gt;
In a software project, collective ownership of the code implies that any code written does not belong to any particular engineer. This means that anyone working on the project can modify any piece of code that has been previously written. According to Cunningham &amp;amp; Cunningham, Inc., a consulting firm specialized in object-oriented programming, there are several requirements to make Collective ownership work well:&lt;br /&gt;
&lt;br /&gt;
* All engineers use the same coding standards&lt;br /&gt;
* The project use code management tools to detect and resolve conflicts&lt;br /&gt;
* A comprehensive suite of unit tests exists&lt;br /&gt;
* Powerful browsing and refactoring tools to find references to old methods and replace them with the new&lt;br /&gt;
* Continuous Integration, so that conflicts are rare&lt;br /&gt;
&lt;br /&gt;
The advantages of collective ownership are that no one on the project has to depend on another engineer to implement a set of changes; they can simply make those changes themselves. Additionally, becuase all engineers work on all sections of the code, the loss of a single engineer should not hinder development as much.&lt;br /&gt;
&lt;br /&gt;
Collective ownership also has some disadvantages. Because all engineers can modify code, people can become upset when someone modifies code that they have written. Additionally, Collective ownership can run into problems with larger teams; if fifty engineers can modify any file in the project, tracking changes can become problematic.&lt;br /&gt;
&lt;br /&gt;
== Continuous Integration ==&lt;/div&gt;</summary>
		<author><name>Srmunill</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki3_9_sm&amp;diff=8859</id>
		<title>CSC/ECE 506 Fall 2007/wiki3 9 sm</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki3_9_sm&amp;diff=8859"/>
		<updated>2007-11-18T02:40:40Z</updated>

		<summary type="html">&lt;p&gt;Srmunill: /* Collective Ownership */ Added introduction to Collective ownership&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Collective Ownership ==&lt;br /&gt;
&lt;br /&gt;
In a software project, collective ownership of the code implies that any code written does not belong to any particular engineer. This means that anyone working on the project can modify any piece of code that has been previously written. According to Cunningham &amp;amp; Cunningham, Inc., a consulting firm specialized in object-oriented programming, there are several requirements to make Collective ownership work well:&lt;br /&gt;
&lt;br /&gt;
* All engineers use the same coding standards&lt;br /&gt;
* The project use code management tools to detect and resolve conflicts&lt;br /&gt;
* A comprehensive suite of unit tests exists&lt;br /&gt;
* Powerful browsing and refactoring tools to find references to old methods and replace them with the new&lt;br /&gt;
* Continuous Integration, so that conflicts are rare&lt;br /&gt;
&lt;br /&gt;
== Continuous Integration ==&lt;/div&gt;</summary>
		<author><name>Srmunill</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki3_9_sm&amp;diff=8856</id>
		<title>CSC/ECE 506 Fall 2007/wiki3 9 sm</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_506_Fall_2007/wiki3_9_sm&amp;diff=8856"/>
		<updated>2007-11-18T02:17:18Z</updated>

		<summary type="html">&lt;p&gt;Srmunill: Created page with headers on the two required topics&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Collective Ownership ==&lt;br /&gt;
&lt;br /&gt;
== Continuous Integration ==&lt;/div&gt;</summary>
		<author><name>Srmunill</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2007/wiki1_5_sl&amp;diff=3942</id>
		<title>CSC/ECE 517 Fall 2007/wiki1 5 sl</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2007/wiki1_5_sl&amp;diff=3942"/>
		<updated>2007-09-14T21:45:27Z</updated>

		<summary type="html">&lt;p&gt;Srmunill: /* Duck Typing */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Duck Typing =&lt;br /&gt;
&lt;br /&gt;
The term “duck typing” comes from the common American analogy of the duck test, which can be summed up with the following phrase:&lt;br /&gt;
&lt;br /&gt;
''If it walks like a duck and quacks like a duck, I would call it a duck.'' [1]&lt;br /&gt;
&lt;br /&gt;
That is to say that, if object A displays the behavior of another object B, object A can be treated as if it was the same as object B. In computer science, this concept can be applied to the virtual objects used in object-oriented languages like Smalltalk, Java, and C#. In this case, &amp;quot;duck typing&amp;quot; is also known as unbounded polymorphism.&lt;br /&gt;
&lt;br /&gt;
In dynamically typed languages, such as Ruby, the parameters of a given method do not need to have a pre-specified type.  At run time, if the argument passed to the parameter has the necessary methods, the code will run. [2]&lt;br /&gt;
&lt;br /&gt;
This is in contrast to statically typed languages, such as Java. In these languages, if a parameter is passed to a method, that method my only use methods defined in that parameter or it's superclasses. If this rule is violated, an error is generated at compile time.&lt;br /&gt;
&lt;br /&gt;
==Java Example==&lt;br /&gt;
Let us examine the following code snippet:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
class ImaginaryNumber extends Object {&lt;br /&gt;
  public int realPart;&lt;br /&gt;
  public int imaginaryPart;&lt;br /&gt;
&lt;br /&gt;
  public ImaginaryNumber(int realPart, int imaginaryPart) {&lt;br /&gt;
	  this.realPart = realPart;&lt;br /&gt;
	  this.imaginaryPart = imaginaryPart;&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  public int getRealPart() {&lt;br /&gt;
    return realPart;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public int getImaginaryPart() {&lt;br /&gt;
    return imaginaryPart;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
class MyMath {&lt;br /&gt;
  public static boolean equals(Object a, Object b) {   &lt;br /&gt;
    // this will create a compile-time error in Java&lt;br /&gt;
    return (a.getRealPart() == b.getRealPart());&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In a non-duck typed language, such as Java, the Equals() method above has two parameters a and b. It is required that  these parameters have a specific type, in this case “Object”. A compile-time error will be generated even if two ImaginaryNumber objects are passed to the method. This occurs in spite of the fact that ImaginaryNumber has definitions for all of the methods called in Equals() and that ImaginaryNumber is a subclass of Object. In order to correct this error, Equals() would have to be changed to take two ImaginaryNumber objects as parameters. The corrected, functional version of the MyMath class is shown below.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
class MyMath {&lt;br /&gt;
  public static boolean equals(ImaginaryNumber a, ImaginaryNumber b) {   &lt;br /&gt;
    return (a.getRealPart() == b.getRealPart());&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Ruby Example==&lt;br /&gt;
In a duck typed language, such as Ruby, the Equals() method below would require parameters to have a defined type. A runtime error would be generated only if a non-ImaginaryNumber object was passed to the Equals() method. As long as only objects of type ImaginaryNumber are passed to the Equals() method, no error will ever be generated. The equivalent Ruby code is shown below. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
class ImaginaryNumber&lt;br /&gt;
  def initialize(realPart, imaginaryPart)&lt;br /&gt;
    @realPart = realPart&lt;br /&gt;
    @imaginaryPart = imaginaryPart&lt;br /&gt;
  end&lt;br /&gt;
  attr_reader :realPart, :imaginaryPart&lt;br /&gt;
end &lt;br /&gt;
&lt;br /&gt;
class MyMath&lt;br /&gt;
  def self.equals(a, b)&lt;br /&gt;
    a.realPart == b.realPart&lt;br /&gt;
  end&lt;br /&gt;
end &lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
==Duck Typing vs. Static Typing==&lt;br /&gt;
&lt;br /&gt;
The most obvious advantage of duck typing over static typing is conciseness of code. In a statically typed language, more code is often required to ensure type safety. Another major advantage is that duck typing is less restrictive since it allows the the end user to choose what type of object will be passed as parameters to any method at run time. As long as that argument has the required behavior, the method will function properly.&lt;br /&gt;
&lt;br /&gt;
The disadvantage of duck typing is the potential for errors to occur at run time when the program is out of the control of the programmer. In a statically typed language, type safety errors can be caught and corrected at compile time, before product release. As a result, statically typed languages are more suited for safety critical software, such as control systems. [3]&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
For a more detailed example using Boo, a language that uses both static typing and duck typing, see http://boo.codehaus.org/Duck+Typing. &lt;br /&gt;
&lt;br /&gt;
For a real-world example of duck-typing in C#, visit http://haacked.com/archive/2007/08/19/why-duck-typing-matters-to-c-developers.aspx.  &lt;br /&gt;
&lt;br /&gt;
Dr. Ed Gehringer's notes on duck typing can be found at http://courses.ncsu.edu/csc517/common/lectures/notes/lec6.doc.&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&lt;br /&gt;
[1] http://en.wikipedia.org/wiki/Duck_test&lt;br /&gt;
&lt;br /&gt;
[2] http://en.wikipedia.org/wiki/Duck_typing&lt;br /&gt;
&lt;br /&gt;
[3] http://courses.ncsu.edu/csc517/common/lectures/notes/lec6.doc&lt;/div&gt;</summary>
		<author><name>Srmunill</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2007/wiki1_5_sl&amp;diff=3893</id>
		<title>CSC/ECE 517 Fall 2007/wiki1 5 sl</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2007/wiki1_5_sl&amp;diff=3893"/>
		<updated>2007-09-14T17:15:54Z</updated>

		<summary type="html">&lt;p&gt;Srmunill: /* Duck Typing */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Duck Typing =&lt;br /&gt;
&lt;br /&gt;
The term “duck typing” comes from the common American analogy of the duck test. This test can be summed up with the following phrase:&lt;br /&gt;
&lt;br /&gt;
''If it walks like a duck and quacks like a duck, I would call it a duck.''[1]&lt;br /&gt;
&lt;br /&gt;
In dynamically typed languages, such as Ruby, the parameters of a given method do not need to have a pre-specified type.  At run time, if the argument passed to the parameter has the necessary methods, the code will run.&lt;br /&gt;
&lt;br /&gt;
Duck typing is also known as Unbounded Polymorphism.&lt;br /&gt;
&lt;br /&gt;
==Java Example==&lt;br /&gt;
Take the following code snippet:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
class ImaginaryNumber extends Object {&lt;br /&gt;
  public int realPart;&lt;br /&gt;
  public int imaginaryPart;&lt;br /&gt;
&lt;br /&gt;
  public ImaginaryNumber(int realPart, int imaginaryPart) {&lt;br /&gt;
	  this.realPart = realPart;&lt;br /&gt;
	  this.imaginaryPart = imaginaryPart;&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  public int getRealPart() {&lt;br /&gt;
    return realPart;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public int getImaginaryPart() {&lt;br /&gt;
    return imaginaryPart;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
class MyMath {&lt;br /&gt;
  public static boolean equals(Object a, Object b) {   &lt;br /&gt;
    // this will create a compile-time error in Java&lt;br /&gt;
    return (a.getRealPart() == b.getRealPart());&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In a non-duck typed language, such as Java, the Equals() method above has two parameters a and b. It is required that  these parameters have a specific type, in this case “Object”. A compile-time error will be generated even if two ImaginaryNumber objects are passed to the method. This occurs in spite of the fact that ImaginaryNumber has definitions for all of the methods called in Equals() and that ImaginaryNumber is a subclass of Object. In order to correct this error, Equals() would have to be changed to take two ImaginaryNumber objects as parameters. The corrected, functional version of the MyMath class is shown below.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
class MyMath {&lt;br /&gt;
  public static boolean equals(ImaginaryNumber a, ImaginaryNumber b) {   &lt;br /&gt;
    return (a.getRealPart() == b.getRealPart());&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Ruby Example==&lt;br /&gt;
In a duck typed language, such as Ruby, the Equals() method below would require parameters to have a defined type. A runtime error would be generated only if a non-ImaginaryNumber object was passed to the Equals() method. As long as only objects of type ImaginaryNumber are passed to the Equals() method, no error will ever be generated. The equivalent Ruby code is shown below. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
class ImaginaryNumber&lt;br /&gt;
  def initialize(realPart, imaginaryPart)&lt;br /&gt;
    @realPart = realPart&lt;br /&gt;
    @imaginaryPart = imaginaryPart&lt;br /&gt;
  end&lt;br /&gt;
  attr_reader :realPart, :imaginaryPart&lt;br /&gt;
end &lt;br /&gt;
&lt;br /&gt;
class MyMath&lt;br /&gt;
  def self.equals(a, b)&lt;br /&gt;
    a.realPart == b.realPart&lt;br /&gt;
  end&lt;br /&gt;
end &lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
==Duck Typing vs. Static Typing==&lt;br /&gt;
&lt;br /&gt;
The most obvious advantage of duck typing over static typing is conciseness of code. In a statically typed language, more code is often required to ensure type safety. Duck typing is less restrictive as it allows the user to choose what type of object will passed as parameters to any method. As long as that argument has that behavior, the method will function properly.&lt;br /&gt;
&lt;br /&gt;
The disadvantage of duck typing is that potential errors will occur at run time, when the program is out of the control of the programmer. In a statically typed language, type safety error can be caught and corrected at compile time, before product release. As a result, statically typed languages are more suited for safety critical software, such as control systems.&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
For a more detailed example using Boo, a language that uses both static typing and duck typing, see http://boo.codehaus.org/Duck+Typing. For a real-world example of duck-typing in C#, visit http://haacked.com/archive/2007/08/19/why-duck-typing-matters-to-c-developers.aspx&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&lt;br /&gt;
[1] http://en.wikipedia.org/wiki/Duck_test&lt;br /&gt;
     http://en.wikipedia.org/wiki/Duck_typing&lt;/div&gt;</summary>
		<author><name>Srmunill</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2007/wiki1_5_sl&amp;diff=3614</id>
		<title>CSC/ECE 517 Fall 2007/wiki1 5 sl</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2007/wiki1_5_sl&amp;diff=3614"/>
		<updated>2007-09-12T19:22:58Z</updated>

		<summary type="html">&lt;p&gt;Srmunill: /* Duck Typing vs. Static Typing */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Duck Typing =&lt;br /&gt;
&lt;br /&gt;
The term “duck typing” comes from the common American analogy of the duck test. This test can be summed up with the following phrase:&lt;br /&gt;
&lt;br /&gt;
''If it walks like a duck and quacks like a duck, I would call it a duck.''[1]&lt;br /&gt;
&lt;br /&gt;
In dynamically typed languages, such as Ruby, the parameters of a given method do not need to have a pre-specified type.  At run time, if the argument passed to the parameter has the necessary methods, the code will run.&lt;br /&gt;
&lt;br /&gt;
==Java Example==&lt;br /&gt;
Take the following code snippet:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
class ImaginaryNumber extends Object {&lt;br /&gt;
  public int realPart;&lt;br /&gt;
  public int imaginaryPart;&lt;br /&gt;
&lt;br /&gt;
  public ImaginaryNumber(int realPart, int imaginaryPart) {&lt;br /&gt;
	  this.realPart = realPart;&lt;br /&gt;
	  this.imaginaryPart = imaginaryPart;&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  public int getRealPart() {&lt;br /&gt;
    return realPart;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public int getImaginaryPart() {&lt;br /&gt;
    return imaginaryPart;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
class MyMath {&lt;br /&gt;
  public static boolean equals(Object a, Object b) {   &lt;br /&gt;
    // this will create a compile-time error in Java&lt;br /&gt;
    return (a.getRealPart() == b.getRealPart());&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In a non-duck typed language, such as Java, the Equals() method above has two parameters a and b. It is required that  these parameters have a specific type, in this case “Object”. A compile-time error will be generated even if two ImaginaryNumber objects are passed to the method. This occurs in spite of the fact that ImaginaryNumber has definitions for all of the methods called in Equals() and that ImaginaryNumber is a subclass of Object. In order to correct this error, Equals() would have to be changed to take two ImaginaryNumber objects as parameters. The corrected, functional version of the MyMath class is shown below.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
class MyMath {&lt;br /&gt;
  public static boolean equals(ImaginaryNumber a, ImaginaryNumber b) {   &lt;br /&gt;
    return (a.getRealPart() == b.getRealPart());&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Ruby Example==&lt;br /&gt;
In a duck typed language, such as Ruby, the Equals() method below would require parameters to have a defined type. A runtime error would be generated only if a non-ImaginaryNumber object was passed to the Equals() method. As long as only objects of type ImaginaryNumber are passed to the Equals() method, no error will ever be generated. The equivalent Ruby code is shown below. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
class ImaginaryNumber&lt;br /&gt;
  def initialize(realPart, imaginaryPart)&lt;br /&gt;
    @realPart = realPart&lt;br /&gt;
    @imaginaryPart = imaginaryPart&lt;br /&gt;
  end&lt;br /&gt;
  attr_reader :realPart, :imaginaryPart&lt;br /&gt;
end &lt;br /&gt;
&lt;br /&gt;
class MyMath&lt;br /&gt;
  def self.equals(a, b)&lt;br /&gt;
    a.realPart == b.realPart&lt;br /&gt;
  end&lt;br /&gt;
end &lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
==Duck Typing vs. Static Typing==&lt;br /&gt;
&lt;br /&gt;
The most obvious advantage of duck typing over static typing is conciseness of code. In a statically typed language, more code is often required to ensure type safety. Duck typing is less restrictive as it allows the user to choose what type of object will passed as parameters to any method. As long as that argument has that behavior, the method will function properly.&lt;br /&gt;
&lt;br /&gt;
The disadvantage of duck typing is that potential errors will occur at run time, when the program is out of the control of the programmer. In a statically typed language, type safety error can be caught and corrected at compile time, before product release. As a result, statically typed languages are more suited for safety critical software, such as control systems.&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
For a more detailed example using Boo, a language that uses both static typing and duck typing, see http://boo.codehaus.org/Duck+Typing. For a real-world example of duck-typing in C#, visit http://haacked.com/archive/2007/08/19/why-duck-typing-matters-to-c-developers.aspx&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&lt;br /&gt;
[1] http://en.wikipedia.org/wiki/Duck_test&lt;br /&gt;
     http://en.wikipedia.org/wiki/Duck_typing&lt;/div&gt;</summary>
		<author><name>Srmunill</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2007/wiki1_5_sl&amp;diff=3608</id>
		<title>CSC/ECE 517 Fall 2007/wiki1 5 sl</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2007/wiki1_5_sl&amp;diff=3608"/>
		<updated>2007-09-12T19:15:33Z</updated>

		<summary type="html">&lt;p&gt;Srmunill: /* Other Examples and Discussion */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Duck Typing =&lt;br /&gt;
&lt;br /&gt;
The term “duck typing” comes from the common American analogy of the duck test. This test can be summed up with the following phrase:&lt;br /&gt;
&lt;br /&gt;
''If it walks like a duck and quacks like a duck, I would call it a duck.''[1]&lt;br /&gt;
&lt;br /&gt;
In dynamically typed languages, such as Ruby, the parameters of a given method do not need to have a pre-specified type.  At run time, if the argument passed to the parameter has the necessary methods, the code will run.&lt;br /&gt;
&lt;br /&gt;
==Java Example==&lt;br /&gt;
Take the following code snippet:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
class ImaginaryNumber extends Object {&lt;br /&gt;
  public int realPart;&lt;br /&gt;
  public int imaginaryPart;&lt;br /&gt;
&lt;br /&gt;
  public ImaginaryNumber(int realPart, int imaginaryPart) {&lt;br /&gt;
	  this.realPart = realPart;&lt;br /&gt;
	  this.imaginaryPart = imaginaryPart;&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  public int getRealPart() {&lt;br /&gt;
    return realPart;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public int getImaginaryPart() {&lt;br /&gt;
    return imaginaryPart;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
class MyMath {&lt;br /&gt;
  public static boolean equals(Object a, Object b) {   &lt;br /&gt;
    // this will create a compile-time error in Java&lt;br /&gt;
    return (a.getRealPart() == b.getRealPart());&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In a non-duck typed language, such as Java, the Equals() method above has two parameters a and b. It is required that  these parameters have a specific type, in this case “Object”. A compile-time error will be generated even if two ImaginaryNumber objects are passed to the method. This occurs in spite of the fact that ImaginaryNumber has definitions for all of the methods called in Equals() and that ImaginaryNumber is a subclass of Object. In order to correct this error, Equals() would have to be changed to take two ImaginaryNumber objects as parameters. The corrected, functional version of the MyMath class is shown below.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
class MyMath {&lt;br /&gt;
  public static boolean equals(ImaginaryNumber a, ImaginaryNumber b) {   &lt;br /&gt;
    return (a.getRealPart() == b.getRealPart());&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Ruby Example==&lt;br /&gt;
In a duck typed language, such as Ruby, the Equals() method below would require parameters to have a defined type. A runtime error would be generated only if a non-ImaginaryNumber object was passed to the Equals() method. As long as only objects of type ImaginaryNumber are passed to the Equals() method, no error will ever be generated. The equivalent Ruby code is shown below. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
class ImaginaryNumber&lt;br /&gt;
  def initialize(realPart, imaginaryPart)&lt;br /&gt;
    @realPart = realPart&lt;br /&gt;
    @imaginaryPart = imaginaryPart&lt;br /&gt;
  end&lt;br /&gt;
  attr_reader :realPart, :imaginaryPart&lt;br /&gt;
end &lt;br /&gt;
&lt;br /&gt;
class MyMath&lt;br /&gt;
  def self.equals(a, b)&lt;br /&gt;
    a.realPart == b.realPart&lt;br /&gt;
  end&lt;br /&gt;
end &lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
==Duck Typing vs. Static Typing==&lt;br /&gt;
&lt;br /&gt;
The most obvious advantage of duck typing over static typing is conciseness of code. In a statically typed language, more code is often required to ensure type safety. &lt;br /&gt;
&lt;br /&gt;
The disadvantage of duck typing is that potential errors will occur at run time, when the program is out of the control of the programmer. In a statically typed language, type safety error can be caught and corrected at compile time, before product release. As a result, statically typed languages are more suited for safety critical software, such as control systems.&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
For a more detailed example using Boo, a language that uses both static typing and duck typing, see http://boo.codehaus.org/Duck+Typing. For a real-world example of duck-typing in C#, visit http://haacked.com/archive/2007/08/19/why-duck-typing-matters-to-c-developers.aspx&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&lt;br /&gt;
[1] http://en.wikipedia.org/wiki/Duck_test&lt;br /&gt;
     http://en.wikipedia.org/wiki/Duck_typing&lt;/div&gt;</summary>
		<author><name>Srmunill</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2007/wiki1_5_sl&amp;diff=3607</id>
		<title>CSC/ECE 517 Fall 2007/wiki1 5 sl</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2007/wiki1_5_sl&amp;diff=3607"/>
		<updated>2007-09-12T19:14:42Z</updated>

		<summary type="html">&lt;p&gt;Srmunill: /* Advantages &amp;amp; Disadvantages */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Duck Typing =&lt;br /&gt;
&lt;br /&gt;
The term “duck typing” comes from the common American analogy of the duck test. This test can be summed up with the following phrase:&lt;br /&gt;
&lt;br /&gt;
''If it walks like a duck and quacks like a duck, I would call it a duck.''[1]&lt;br /&gt;
&lt;br /&gt;
In dynamically typed languages, such as Ruby, the parameters of a given method do not need to have a pre-specified type.  At run time, if the argument passed to the parameter has the necessary methods, the code will run.&lt;br /&gt;
&lt;br /&gt;
==Java Example==&lt;br /&gt;
Take the following code snippet:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
class ImaginaryNumber extends Object {&lt;br /&gt;
  public int realPart;&lt;br /&gt;
  public int imaginaryPart;&lt;br /&gt;
&lt;br /&gt;
  public ImaginaryNumber(int realPart, int imaginaryPart) {&lt;br /&gt;
	  this.realPart = realPart;&lt;br /&gt;
	  this.imaginaryPart = imaginaryPart;&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  public int getRealPart() {&lt;br /&gt;
    return realPart;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public int getImaginaryPart() {&lt;br /&gt;
    return imaginaryPart;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
class MyMath {&lt;br /&gt;
  public static boolean equals(Object a, Object b) {   &lt;br /&gt;
    // this will create a compile-time error in Java&lt;br /&gt;
    return (a.getRealPart() == b.getRealPart());&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In a non-duck typed language, such as Java, the Equals() method above has two parameters a and b. It is required that  these parameters have a specific type, in this case “Object”. A compile-time error will be generated even if two ImaginaryNumber objects are passed to the method. This occurs in spite of the fact that ImaginaryNumber has definitions for all of the methods called in Equals() and that ImaginaryNumber is a subclass of Object. In order to correct this error, Equals() would have to be changed to take two ImaginaryNumber objects as parameters. The corrected, functional version of the MyMath class is shown below.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
class MyMath {&lt;br /&gt;
  public static boolean equals(ImaginaryNumber a, ImaginaryNumber b) {   &lt;br /&gt;
    return (a.getRealPart() == b.getRealPart());&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Ruby Example==&lt;br /&gt;
In a duck typed language, such as Ruby, the Equals() method below would require parameters to have a defined type. A runtime error would be generated only if a non-ImaginaryNumber object was passed to the Equals() method. As long as only objects of type ImaginaryNumber are passed to the Equals() method, no error will ever be generated. The equivalent Ruby code is shown below. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
class ImaginaryNumber&lt;br /&gt;
  def initialize(realPart, imaginaryPart)&lt;br /&gt;
    @realPart = realPart&lt;br /&gt;
    @imaginaryPart = imaginaryPart&lt;br /&gt;
  end&lt;br /&gt;
  attr_reader :realPart, :imaginaryPart&lt;br /&gt;
end &lt;br /&gt;
&lt;br /&gt;
class MyMath&lt;br /&gt;
  def self.equals(a, b)&lt;br /&gt;
    a.realPart == b.realPart&lt;br /&gt;
  end&lt;br /&gt;
end &lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
==Duck Typing vs. Static Typing==&lt;br /&gt;
&lt;br /&gt;
The most obvious advantage of duck typing over static typing is conciseness of code. In a statically typed language, more code is often required to ensure type safety. &lt;br /&gt;
&lt;br /&gt;
The disadvantage of duck typing is that potential errors will occur at run time, when the program is out of the control of the programmer. In a statically typed language, type safety error can be caught and corrected at compile time, before product release. As a result, statically typed languages are more suited for safety critical software, such as control systems.&lt;br /&gt;
&lt;br /&gt;
==Other Examples and Discussion==&lt;br /&gt;
For a more detailed example using Boo, a language that uses both static typing and duck typing, see http://boo.codehaus.org/Duck+Typing. For a real-world example of duck-typing in C#, visit http://haacked.com/archive/2007/08/19/why-duck-typing-matters-to-c-developers.aspx&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&lt;br /&gt;
[1] http://en.wikipedia.org/wiki/Duck_test&lt;br /&gt;
     http://en.wikipedia.org/wiki/Duck_typing&lt;/div&gt;</summary>
		<author><name>Srmunill</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2007/wiki1_5_sl&amp;diff=3604</id>
		<title>CSC/ECE 517 Fall 2007/wiki1 5 sl</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2007/wiki1_5_sl&amp;diff=3604"/>
		<updated>2007-09-12T19:02:51Z</updated>

		<summary type="html">&lt;p&gt;Srmunill: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Duck Typing =&lt;br /&gt;
&lt;br /&gt;
The term “duck typing” comes from the common American analogy of the duck test. This test can be summed up with the following phrase:&lt;br /&gt;
&lt;br /&gt;
''If it walks like a duck and quacks like a duck, I would call it a duck.''[1]&lt;br /&gt;
&lt;br /&gt;
In dynamically typed languages, such as Ruby, the parameters of a given method do not need to have a pre-specified type.  At run time, if the argument passed to the parameter has the necessary methods, the code will run.&lt;br /&gt;
&lt;br /&gt;
==Java Example==&lt;br /&gt;
Take the following code snippet:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
class ImaginaryNumber extends Object {&lt;br /&gt;
  public int realPart;&lt;br /&gt;
  public int imaginaryPart;&lt;br /&gt;
&lt;br /&gt;
  public ImaginaryNumber(int realPart, int imaginaryPart) {&lt;br /&gt;
	  this.realPart = realPart;&lt;br /&gt;
	  this.imaginaryPart = imaginaryPart;&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  public int getRealPart() {&lt;br /&gt;
    return realPart;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public int getImaginaryPart() {&lt;br /&gt;
    return imaginaryPart;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
class MyMath {&lt;br /&gt;
  public static boolean equals(Object a, Object b) {   &lt;br /&gt;
    // this will create a compile-time error in Java&lt;br /&gt;
    return (a.getRealPart() == b.getRealPart());&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In a non-duck typed language, such as Java, the Equals() method above has two parameters a and b. It is required that  these parameters have a specific type, in this case “Object”. A compile-time error will be generated even if two ImaginaryNumber objects are passed to the method. This occurs in spite of the fact that ImaginaryNumber has definitions for all of the methods called in Equals() and that ImaginaryNumber is a subclass of Object. In order to correct this error, Equals() would have to be changed to take two ImaginaryNumber objects as parameters. The corrected, functional version of the MyMath class is shown below.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
class MyMath {&lt;br /&gt;
  public static boolean equals(ImaginaryNumber a, ImaginaryNumber b) {   &lt;br /&gt;
    return (a.getRealPart() == b.getRealPart());&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Ruby Example==&lt;br /&gt;
In a duck typed language, such as Ruby, the Equals() method below would require parameters to have a defined type. A runtime error would be generated only if a non-ImaginaryNumber object was passed to the Equals() method. As long as only objects of type ImaginaryNumber are passed to the Equals() method, no error will ever be generated. The equivalent Ruby code is shown below. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
class ImaginaryNumber&lt;br /&gt;
  def initialize(realPart, imaginaryPart)&lt;br /&gt;
    @realPart = realPart&lt;br /&gt;
    @imaginaryPart = imaginaryPart&lt;br /&gt;
  end&lt;br /&gt;
  attr_reader :realPart, :imaginaryPart&lt;br /&gt;
end &lt;br /&gt;
&lt;br /&gt;
class MyMath&lt;br /&gt;
  def self.equals(a, b)&lt;br /&gt;
    a.realPart == b.realPart&lt;br /&gt;
  end&lt;br /&gt;
end &lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
==Advantages &amp;amp; Disadvantages==&lt;br /&gt;
&lt;br /&gt;
	Duck Typing	Static Typing&lt;br /&gt;
Advantages	Concise and elegant code&lt;br /&gt;
&lt;br /&gt;
Less restrictive	Safer (errors are caught at compile time)&lt;br /&gt;
&lt;br /&gt;
Interfaces can ensure that certain methods are always defined&lt;br /&gt;
Disadvantages	Potential errors at runtime (code cannot be monitored at runtime)&lt;br /&gt;
&lt;br /&gt;
No guarantee that required methods are implemented in subclasses	More verbose code is required to check for errors&lt;br /&gt;
&lt;br /&gt;
==Other Examples and Discussion==&lt;br /&gt;
For a more detailed example using Boo, a language that uses both static typing and duck typing, see http://boo.codehaus.org/Duck+Typing. For a real-world example of duck-typing in C#, visit http://haacked.com/archive/2007/08/19/why-duck-typing-matters-to-c-developers.aspx&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&lt;br /&gt;
[1] http://en.wikipedia.org/wiki/Duck_test&lt;br /&gt;
     http://en.wikipedia.org/wiki/Duck_typing&lt;/div&gt;</summary>
		<author><name>Srmunill</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2007/wiki1_5_sl&amp;diff=3603</id>
		<title>CSC/ECE 517 Fall 2007/wiki1 5 sl</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2007/wiki1_5_sl&amp;diff=3603"/>
		<updated>2007-09-12T19:01:59Z</updated>

		<summary type="html">&lt;p&gt;Srmunill: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Duck Typing =&lt;br /&gt;
&lt;br /&gt;
The term “duck typing” comes from the common American analogy of the duck test. This test can be summed up with the following phrase:&lt;br /&gt;
&lt;br /&gt;
''If it walks like a duck and quacks like a duck, I would call it a duck.''[1]&lt;br /&gt;
&lt;br /&gt;
In dynamically typed languages, such as Ruby, the parameters of a given method do not need to have a pre-specified type.  At run time, if the argument passed to the parameter has the necessary methods, the code will run.&lt;br /&gt;
&lt;br /&gt;
==Java Example==&lt;br /&gt;
Take the following code snippet:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
class ImaginaryNumber extends Object {&lt;br /&gt;
  public int realPart;&lt;br /&gt;
  public int imaginaryPart;&lt;br /&gt;
&lt;br /&gt;
  public ImaginaryNumber(int realPart, int imaginaryPart) {&lt;br /&gt;
	  this.realPart = realPart;&lt;br /&gt;
	  this.imaginaryPart = imaginaryPart;&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  public int getRealPart() {&lt;br /&gt;
    return realPart;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public int getImaginaryPart() {&lt;br /&gt;
    return imaginaryPart;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
class MyMath {&lt;br /&gt;
  public static boolean equals(Object a, Object b) {   &lt;br /&gt;
    return (a.getRealPart() == b.getRealPart());&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In a non-duck typed language, such as Java, the Equals() method above has two parameters a and b. It is required that  these parameters have a specific type, in this case “Object”. A compile-time error will be generated even if two ImaginaryNumber objects are passed to the method. This occurs in spite of the fact that ImaginaryNumber has definitions for all of the methods called in Equals() and that ImaginaryNumber is a subclass of Object. In order to correct this error, Equals() would have to be changed to take two ImaginaryNumber objects as parameters. The corrected, functional version of the MyMath class is shown below.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
class MyMath {&lt;br /&gt;
  public static boolean equals(ImaginaryNumber a, ImaginaryNumber b) {   &lt;br /&gt;
    // this will create a compile-time error in Java&lt;br /&gt;
    return (a.getRealPart() == b.getRealPart());&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Ruby Example==&lt;br /&gt;
In a duck typed language, such as Ruby, the Equals() method below would require parameters to have a defined type. A runtime error would be generated only if a non-ImaginaryNumber object was passed to the Equals() method. As long as only objects of type ImaginaryNumber are passed to the Equals() method, no error will ever be generated. The equivalent Ruby code is shown below. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
class ImaginaryNumber&lt;br /&gt;
  def initialize(realPart, imaginaryPart)&lt;br /&gt;
    @realPart = realPart&lt;br /&gt;
    @imaginaryPart = imaginaryPart&lt;br /&gt;
  end&lt;br /&gt;
  attr_reader :realPart, :imaginaryPart&lt;br /&gt;
end &lt;br /&gt;
&lt;br /&gt;
class MyMath&lt;br /&gt;
  def self.equals(a, b)&lt;br /&gt;
    a.realPart == b.realPart&lt;br /&gt;
  end&lt;br /&gt;
end &lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
==Advantages &amp;amp; Disadvantages==&lt;br /&gt;
&lt;br /&gt;
	Duck Typing	Static Typing&lt;br /&gt;
Advantages	Concise and elegant code&lt;br /&gt;
&lt;br /&gt;
Less restrictive	Safer (errors are caught at compile time)&lt;br /&gt;
&lt;br /&gt;
Interfaces can ensure that certain methods are always defined&lt;br /&gt;
Disadvantages	Potential errors at runtime (code cannot be monitored at runtime)&lt;br /&gt;
&lt;br /&gt;
No guarantee that required methods are implemented in subclasses	More verbose code is required to check for errors&lt;br /&gt;
&lt;br /&gt;
==Other Examples and Discussion==&lt;br /&gt;
For a more detailed example using Boo, a language that uses both static typing and duck typing, see http://boo.codehaus.org/Duck+Typing. For a real-world example of duck-typing in C#, visit http://haacked.com/archive/2007/08/19/why-duck-typing-matters-to-c-developers.aspx&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&lt;br /&gt;
[1] http://en.wikipedia.org/wiki/Duck_test&lt;br /&gt;
     http://en.wikipedia.org/wiki/Duck_typing&lt;/div&gt;</summary>
		<author><name>Srmunill</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2007/wiki1_5_sl&amp;diff=3602</id>
		<title>CSC/ECE 517 Fall 2007/wiki1 5 sl</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2007/wiki1_5_sl&amp;diff=3602"/>
		<updated>2007-09-12T18:59:16Z</updated>

		<summary type="html">&lt;p&gt;Srmunill: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Duck Typing =&lt;br /&gt;
&lt;br /&gt;
The term “duck typing” comes from the common American analogy of the duck test. This test can be summed up with the following phrase:&lt;br /&gt;
&lt;br /&gt;
''If it walks like a duck and quacks like a duck, I would call it a duck.''[1]&lt;br /&gt;
&lt;br /&gt;
In dynamically typed languages, such as Ruby, the parameters of a given method do not need to have a pre-specified type.  At run time, if the argument passed to the parameter has the necessary methods, the code will run.&lt;br /&gt;
&lt;br /&gt;
==Java Example==&lt;br /&gt;
Take the following code snippet:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
class ImaginaryNumber extends Object {&lt;br /&gt;
  public int realPart;&lt;br /&gt;
  public int imaginaryPart;&lt;br /&gt;
&lt;br /&gt;
  public ImaginaryNumber(int realPart, int imaginaryPart) {&lt;br /&gt;
	  this.realPart = realPart;&lt;br /&gt;
	  this.imaginaryPart = imaginaryPart;&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  public int getRealPart() {&lt;br /&gt;
    return realPart;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public int getImaginaryPart() {&lt;br /&gt;
    return imaginaryPart;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
class MyMath {&lt;br /&gt;
  public static boolean equals(Object a, Object b) {   &lt;br /&gt;
    // this will create a compile-time error in Java&lt;br /&gt;
    return (a.getRealPart() == b.getRealPart());&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In a non-duck typed language, such as Java, the Equals() method above has two parameters a and b. It is required that  these parameters have a specific type, in this case “Object”. A compile-time error will be generated even if two ImaginaryNumber objects are passed to the method. This occurs in spite of the fact that ImaginaryNumber has definitions for all of the methods called in Equals() and that ImaginaryNumber is a subclass of Object. In order to correct this error, Equals() would have to be changed to take two ImaginaryNumber objects as parameters. The corrected, functional version of the MyMath class is shown below.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
class MyMath {&lt;br /&gt;
  public static boolean equals(ImaginaryNumber a, ImaginaryNumber b) {   &lt;br /&gt;
    // this will create a compile-time error in Java&lt;br /&gt;
    return (a.getRealPart() == b.getRealPart());&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Ruby Example==&lt;br /&gt;
In a duck typed language, such as Ruby, the Equals() method below would require parameters to have a defined type. A runtime error would be generated only if a non-ImaginaryNumber object was passed to the Equals() method. As long as only objects of type ImaginaryNumber are passed to the Equals() method, no error will ever be generated. The equivalent Ruby code is shown below. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
class ImaginaryNumber&lt;br /&gt;
  def initialize(realPart, imaginaryPart)&lt;br /&gt;
    @realPart = realPart&lt;br /&gt;
    @imaginaryPart = imaginaryPart&lt;br /&gt;
  end&lt;br /&gt;
  attr_reader :realPart, :imaginaryPart&lt;br /&gt;
end &lt;br /&gt;
&lt;br /&gt;
class MyMath&lt;br /&gt;
  def self.equals(a, b)&lt;br /&gt;
    a.realPart == b.realPart&lt;br /&gt;
  end&lt;br /&gt;
end &lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
==Advantages &amp;amp; Disadvantages==&lt;br /&gt;
&lt;br /&gt;
	Duck Typing	Static Typing&lt;br /&gt;
Advantages	Concise and elegant code&lt;br /&gt;
&lt;br /&gt;
Less restrictive	Safer (errors are caught at compile time)&lt;br /&gt;
&lt;br /&gt;
Interfaces can ensure that certain methods are always defined&lt;br /&gt;
Disadvantages	Potential errors at runtime (code cannot be monitored at runtime)&lt;br /&gt;
&lt;br /&gt;
No guarantee that required methods are implemented in subclasses	More verbose code is required to check for errors&lt;br /&gt;
&lt;br /&gt;
==Other Examples and Discussion==&lt;br /&gt;
For a more detailed example using Boo, a language that uses both static typing and duck typing, see http://boo.codehaus.org/Duck+Typing. For a real-world example of duck-typing in C#, visit http://haacked.com/archive/2007/08/19/why-duck-typing-matters-to-c-developers.aspx&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&lt;br /&gt;
[1] http://en.wikipedia.org/wiki/Duck_test&lt;br /&gt;
     http://en.wikipedia.org/wiki/Duck_typing&lt;/div&gt;</summary>
		<author><name>Srmunill</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2007/wiki1_5_sl&amp;diff=3599</id>
		<title>CSC/ECE 517 Fall 2007/wiki1 5 sl</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2007/wiki1_5_sl&amp;diff=3599"/>
		<updated>2007-09-12T18:55:04Z</updated>

		<summary type="html">&lt;p&gt;Srmunill: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Duck Typing =&lt;br /&gt;
&lt;br /&gt;
The term “duck typing” comes from the common American analogy of the duck test. This test can be summed up with the following phrase:&lt;br /&gt;
&lt;br /&gt;
''If it walks like a duck and quacks like a duck, I would call it a duck.''[1]&lt;br /&gt;
&lt;br /&gt;
==Java Example==&lt;br /&gt;
Take the following code snippet:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
class ImaginaryNumber extends Object {&lt;br /&gt;
  public int realPart;&lt;br /&gt;
  public int imaginaryPart;&lt;br /&gt;
&lt;br /&gt;
  public ImaginaryNumber(int realPart, int imaginaryPart) {&lt;br /&gt;
	  this.realPart = realPart;&lt;br /&gt;
	  this.imaginaryPart = imaginaryPart;&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  public int getRealPart() {&lt;br /&gt;
    return realPart;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public int getImaginaryPart() {&lt;br /&gt;
    return imaginaryPart;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
class MyMath {&lt;br /&gt;
  public static boolean equals(Object a, Object b) {   &lt;br /&gt;
    // this will create a compile-time error in Java&lt;br /&gt;
    return (a.getRealPart() == b.getRealPart());&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In a non-duck typed language, such as Java, the Equals() method above has two parameters a and b. It is required that  these parameters have a specific type, in this case “Object”. A compile-time error will be generated even if two ImaginaryNumber objects are passed to the method. This occurs in spite of the fact that ImaginaryNumber has definitions for all of the methods called in Equals() and that ImaginaryNumber is a subclass of Object. In order to correct this error, Equals() would have to be changed to take two ImaginaryNumber objects as parameters.&lt;br /&gt;
&lt;br /&gt;
==Ruby Example==&lt;br /&gt;
In a duck typed language, such as Ruby, the Equals() method below would require parameters to have a defined type. A runtime error would be generated only if a non-ImaginaryNumber object was passed to the Equals() method. As long as only objects of type ImaginaryNumber are passed to the Equals() method, no error will ever be generated. The equivalent Ruby code is shown below. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
class ImaginaryNumber&lt;br /&gt;
  def initialize(realPart, imaginaryPart)&lt;br /&gt;
    @realPart = realPart&lt;br /&gt;
    @imaginaryPart = imaginaryPart&lt;br /&gt;
  end&lt;br /&gt;
  attr_reader :realPart, :imaginaryPart&lt;br /&gt;
end &lt;br /&gt;
&lt;br /&gt;
class MyMath&lt;br /&gt;
  def self.equals(a, b)&lt;br /&gt;
    a.realPart == b.realPart&lt;br /&gt;
  end&lt;br /&gt;
end &lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
==Advantages &amp;amp; Disadvantages==&lt;br /&gt;
&lt;br /&gt;
	Duck Typing	Static Typing&lt;br /&gt;
Advantages	Concise and elegant code&lt;br /&gt;
&lt;br /&gt;
Less restrictive	Safer (errors are caught at compile time)&lt;br /&gt;
&lt;br /&gt;
Interfaces can ensure that certain methods are always defined&lt;br /&gt;
Disadvantages	Potential errors at runtime (code cannot be monitored at runtime)&lt;br /&gt;
&lt;br /&gt;
No guarantee that required methods are implemented in subclasses	More verbose code is required to check for errors&lt;br /&gt;
&lt;br /&gt;
==Other Examples and Discussion==&lt;br /&gt;
For a more detailed example using Boo, a language that uses both static typing and duck typing, see http://boo.codehaus.org/Duck+Typing. For a real-world example of duck-typing in C#, visit http://haacked.com/archive/2007/08/19/why-duck-typing-matters-to-c-developers.aspx&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&lt;br /&gt;
[1] http://en.wikipedia.org/wiki/Duck_test&lt;br /&gt;
     http://en.wikipedia.org/wiki/Duck_typing&lt;/div&gt;</summary>
		<author><name>Srmunill</name></author>
	</entry>
</feed>