<?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=Eeled</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=Eeled"/>
	<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=Special:Contributions/Eeled"/>
	<updated>2026-06-07T22:07:51Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.41.0</generator>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_19_ee&amp;diff=29397</id>
		<title>CSC/ECE 517 Fall 2009/wiki3 19 ee</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_19_ee&amp;diff=29397"/>
		<updated>2009-11-19T02:39:25Z</updated>

		<summary type="html">&lt;p&gt;Eeled: /* References */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Uniform Access Principle=&lt;br /&gt;
&lt;br /&gt;
The '''Uniform Access Principle''' states that any attribute of a module (usually a class) should be accessed with the same syntax, regardless of the nature of the data.  Simply put, when a consumer reads or writes a value, they should not know (or care) weather they accessing a variable or invoking a method.  Thus, no matter how the module internally handles the data, externally the information is always accessed uniformly.&lt;br /&gt;
&lt;br /&gt;
==Origin of the Uniform Access Principle==&lt;br /&gt;
The Uniform Access Principle was created by the French engineer Bertrand Meyer.  Meyer is known to be a strong proponent of object oriented programming, and in fact was one of the earliest and most outspoken champions of OO.  His book ''Object-Oriented Software Construction'', first published in 1988, is considered to be a foundational publication of the object oriented programming movement.[http://en.wikipedia.org/wiki/Bertrand_Meyer]&lt;br /&gt;
&lt;br /&gt;
It was in this book that he put forth the uniform access principal by stating &amp;quot;All services offered by a module should be available through a uniform notation, which does not betray whether they are implemented through storage or through computation.&amp;quot;[http://en.wikipedia.org/wiki/Uniform_access_principle]&lt;br /&gt;
&lt;br /&gt;
==Advantages of the Uniform Access Principle==&lt;br /&gt;
&lt;br /&gt;
There are many advantages associated with using the Uniform Access Principal when writing software.&lt;br /&gt;
&lt;br /&gt;
===Reading Properties===&lt;br /&gt;
Reading values (or getting) from an object is a syntactic cinch in code that uses the Uniform Access Principal.  Just refer to the field that holds the relevant data and the information is accessible.  This is a very simple way of interfacing with an external class. &lt;br /&gt;
&lt;br /&gt;
===Ease of Understanding===&lt;br /&gt;
Accessing data from a class can be confusing if the user does not know how the data is stored.  For example, in C# it is often hard to remember how to access the number of items in a collection - is it collection.Count or collection.Count()?  It turns out that the syntax is collection.Count for a generic collection, but it is collection.Count() for an enumerable collection.[http://dotnetperls.com/count-array]&lt;br /&gt;
&lt;br /&gt;
This difference in syntax can be confusing to a user trying to access the data within an otherwise opaque object.  If this data was uniformly accessible, it would be much less confusing. &lt;br /&gt;
&lt;br /&gt;
===Convenience of Interface===&lt;br /&gt;
Similarly, it is convenient for a user to not have to remember details of an objects implementation to access data within the object.  If the Uniform Access Principal is exercised, the programmer does not need to keep track of which values are computed in methods and which are just attributes.  A user can simply access the data named what they are interested in.&lt;br /&gt;
&lt;br /&gt;
===Maintainability of Interface===&lt;br /&gt;
Utilizing the Uniform Access Principal also aids in maintaining (reads 'not breaking') existing interfaces.  For example, lets say there was a BankAccount class.  That BankAccount class has an attribute called &amp;quot;Balance&amp;quot;, which simply contains the balance value for that account.  But later, the policy of the BankAccount changes, such that the balance is not a stored value, but must be computed by adding multiple values together.  &lt;br /&gt;
&lt;br /&gt;
In implementations that do not support the Uniform Access Principal, the accessing of that data could go from bankAcnt.Balance to bankAcnt.GetBalance(), thus 'breaking' any code that was depending on the balance property.&lt;br /&gt;
&lt;br /&gt;
However, with an implementation that utilizes the Uniform Access Principal, this change will not be a problem.  Be it a stored value, or a value computed in a method call, the accessing of this data could always be done with the same syntax.&lt;br /&gt;
&lt;br /&gt;
==Disadvantages of the Uniform Access Principle==&lt;br /&gt;
Although it is a long-held tenet of good object oriented design, there can be some drawbacks to using the Uniform Access Principal. &lt;br /&gt;
&lt;br /&gt;
===Writing Properties===&lt;br /&gt;
Setter methods are much easier to implement than setting a field that could be an attribute or could be associated with a method. Because of this inherent ambiguity, the language will probably not be able to determine how to handle a field being set on its own. The only good and consistent solution is to enforce the rule that the designer must specify how to handle an assignment for each method that is written. This can be burdensome on the original designer.[http://www.eiffel.com/general/column/2005/Sept_October.html]&lt;br /&gt;
&lt;br /&gt;
===Performance Issues===&lt;br /&gt;
When retrieving data from a class that utilizes the Uniform Access Principal, it could potentially mask or obfuscate a performance hit the user was not anticipating.  Consider a scenario where a piece of code needs to find the highest temperature value from a collection of many years worth of readings.  A non-uniform access implementation might read something like weather.getHighestTempFromAllReadings(). An implementation using the Uniform Access Principal would likely look more like &amp;quot;weather.HighTemp&amp;quot;.  &lt;br /&gt;
&lt;br /&gt;
The second option makes it appear that the highest temperature is just a value kept track of in the object, when in fact the data is off in a massive collection that must be searched.  The user might be surprised that &amp;quot;weather.HighTemp&amp;quot; takes a long time to return a value. However, to a user invoking &amp;quot;weather.getHighestTempFromAllReadings()&amp;quot; it should be apparent that the method call is busy searching through millions of records and will return a value once it is found.&lt;br /&gt;
&lt;br /&gt;
===Class Maintenance===&lt;br /&gt;
Maintaining code using the Uniform Access Principle might be difficult, especially if a different programmer originally designed the module.  It would be unclear to the maintainer which values are computed and which are just stored.  Whereas, in implementations where methods and attributes are clearly different, it would be easier to understand what was what.&lt;br /&gt;
&lt;br /&gt;
===Language Restrictions===&lt;br /&gt;
It is actually impossible to utilize the Uniform Access Principle in some languages.  For example, in Java fields and methods are kept in different namespaces.  This means that fields and methods can have the same names.  And because they are not restricted by these names, a field named myValue is completely independent from a method named myValue().[http://programming-scala.labs.oreilly.com/ch06.html]&lt;br /&gt;
&lt;br /&gt;
==Code Examples==&lt;br /&gt;
&lt;br /&gt;
===Ruby===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class Foo&lt;br /&gt;
  attr_reader :x&lt;br /&gt;
  def initialize(x)&lt;br /&gt;
    @x = x&lt;br /&gt;
  end&lt;br /&gt;
  def squared_x&lt;br /&gt;
    return @x * @x&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
y = Foo.new(2)&lt;br /&gt;
puts y.x&lt;br /&gt;
puts y.squared_x&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
This outputs:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
2&lt;br /&gt;
4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===PHP===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class Foo{&lt;br /&gt;
    private $x;&lt;br /&gt;
&lt;br /&gt;
    function __construct($x){&lt;br /&gt;
        $this-&amp;gt;x = $x;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function x(){&lt;br /&gt;
        return $this-&amp;gt;x;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function squared_x(){&lt;br /&gt;
        return $this-&amp;gt;x * $this-&amp;gt;x;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
$y = new Foo(2);&lt;br /&gt;
echo $y-&amp;gt;x();&lt;br /&gt;
echo $y-&amp;gt;squared_x();&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
This outputs:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
2&lt;br /&gt;
4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''Note that these examples were taken from wikipeda''[http://en.wikipedia.org/wiki/Uniform_access_principle]&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
#[http://en.wikipedia.org/wiki/Bertrand_Meyer Bertrand Meyer]&lt;br /&gt;
#[http://en.wikipedia.org/wiki/Uniform_access_principle Uniform Access Principal]&lt;br /&gt;
#[http://dotnetperls.com/count-array .Net Perls]&lt;br /&gt;
#[http://www.eiffel.com/general/column/2005/Sept_October.html Eiffel World]&lt;br /&gt;
#[http://programming-scala.labs.oreilly.com/ch06.html OO Programing in Scala]&lt;/div&gt;</summary>
		<author><name>Eeled</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_19_ee&amp;diff=29395</id>
		<title>CSC/ECE 517 Fall 2009/wiki3 19 ee</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_19_ee&amp;diff=29395"/>
		<updated>2009-11-19T02:38:19Z</updated>

		<summary type="html">&lt;p&gt;Eeled: /* Uniform Access Principle */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Uniform Access Principle=&lt;br /&gt;
&lt;br /&gt;
The '''Uniform Access Principle''' states that any attribute of a module (usually a class) should be accessed with the same syntax, regardless of the nature of the data.  Simply put, when a consumer reads or writes a value, they should not know (or care) weather they accessing a variable or invoking a method.  Thus, no matter how the module internally handles the data, externally the information is always accessed uniformly.&lt;br /&gt;
&lt;br /&gt;
==Origin of the Uniform Access Principle==&lt;br /&gt;
The Uniform Access Principle was created by the French engineer Bertrand Meyer.  Meyer is known to be a strong proponent of object oriented programming, and in fact was one of the earliest and most outspoken champions of OO.  His book ''Object-Oriented Software Construction'', first published in 1988, is considered to be a foundational publication of the object oriented programming movement.[http://en.wikipedia.org/wiki/Bertrand_Meyer]&lt;br /&gt;
&lt;br /&gt;
It was in this book that he put forth the uniform access principal by stating &amp;quot;All services offered by a module should be available through a uniform notation, which does not betray whether they are implemented through storage or through computation.&amp;quot;[http://en.wikipedia.org/wiki/Uniform_access_principle]&lt;br /&gt;
&lt;br /&gt;
==Advantages of the Uniform Access Principle==&lt;br /&gt;
&lt;br /&gt;
There are many advantages associated with using the Uniform Access Principal when writing software.&lt;br /&gt;
&lt;br /&gt;
===Reading Properties===&lt;br /&gt;
Reading values (or getting) from an object is a syntactic cinch in code that uses the Uniform Access Principal.  Just refer to the field that holds the relevant data and the information is accessible.  This is a very simple way of interfacing with an external class. &lt;br /&gt;
&lt;br /&gt;
===Ease of Understanding===&lt;br /&gt;
Accessing data from a class can be confusing if the user does not know how the data is stored.  For example, in C# it is often hard to remember how to access the number of items in a collection - is it collection.Count or collection.Count()?  It turns out that the syntax is collection.Count for a generic collection, but it is collection.Count() for an enumerable collection.[http://dotnetperls.com/count-array]&lt;br /&gt;
&lt;br /&gt;
This difference in syntax can be confusing to a user trying to access the data within an otherwise opaque object.  If this data was uniformly accessible, it would be much less confusing. &lt;br /&gt;
&lt;br /&gt;
===Convenience of Interface===&lt;br /&gt;
Similarly, it is convenient for a user to not have to remember details of an objects implementation to access data within the object.  If the Uniform Access Principal is exercised, the programmer does not need to keep track of which values are computed in methods and which are just attributes.  A user can simply access the data named what they are interested in.&lt;br /&gt;
&lt;br /&gt;
===Maintainability of Interface===&lt;br /&gt;
Utilizing the Uniform Access Principal also aids in maintaining (reads 'not breaking') existing interfaces.  For example, lets say there was a BankAccount class.  That BankAccount class has an attribute called &amp;quot;Balance&amp;quot;, which simply contains the balance value for that account.  But later, the policy of the BankAccount changes, such that the balance is not a stored value, but must be computed by adding multiple values together.  &lt;br /&gt;
&lt;br /&gt;
In implementations that do not support the Uniform Access Principal, the accessing of that data could go from bankAcnt.Balance to bankAcnt.GetBalance(), thus 'breaking' any code that was depending on the balance property.&lt;br /&gt;
&lt;br /&gt;
However, with an implementation that utilizes the Uniform Access Principal, this change will not be a problem.  Be it a stored value, or a value computed in a method call, the accessing of this data could always be done with the same syntax.&lt;br /&gt;
&lt;br /&gt;
==Disadvantages of the Uniform Access Principle==&lt;br /&gt;
Although it is a long-held tenet of good object oriented design, there can be some drawbacks to using the Uniform Access Principal. &lt;br /&gt;
&lt;br /&gt;
===Writing Properties===&lt;br /&gt;
Setter methods are much easier to implement than setting a field that could be an attribute or could be associated with a method. Because of this inherent ambiguity, the language will probably not be able to determine how to handle a field being set on its own. The only good and consistent solution is to enforce the rule that the designer must specify how to handle an assignment for each method that is written. This can be burdensome on the original designer.[http://www.eiffel.com/general/column/2005/Sept_October.html]&lt;br /&gt;
&lt;br /&gt;
===Performance Issues===&lt;br /&gt;
When retrieving data from a class that utilizes the Uniform Access Principal, it could potentially mask or obfuscate a performance hit the user was not anticipating.  Consider a scenario where a piece of code needs to find the highest temperature value from a collection of many years worth of readings.  A non-uniform access implementation might read something like weather.getHighestTempFromAllReadings(). An implementation using the Uniform Access Principal would likely look more like &amp;quot;weather.HighTemp&amp;quot;.  &lt;br /&gt;
&lt;br /&gt;
The second option makes it appear that the highest temperature is just a value kept track of in the object, when in fact the data is off in a massive collection that must be searched.  The user might be surprised that &amp;quot;weather.HighTemp&amp;quot; takes a long time to return a value. However, to a user invoking &amp;quot;weather.getHighestTempFromAllReadings()&amp;quot; it should be apparent that the method call is busy searching through millions of records and will return a value once it is found.&lt;br /&gt;
&lt;br /&gt;
===Class Maintenance===&lt;br /&gt;
Maintaining code using the Uniform Access Principle might be difficult, especially if a different programmer originally designed the module.  It would be unclear to the maintainer which values are computed and which are just stored.  Whereas, in implementations where methods and attributes are clearly different, it would be easier to understand what was what.&lt;br /&gt;
&lt;br /&gt;
===Language Restrictions===&lt;br /&gt;
It is actually impossible to utilize the Uniform Access Principle in some languages.  For example, in Java fields and methods are kept in different namespaces.  This means that fields and methods can have the same names.  And because they are not restricted by these names, a field named myValue is completely independent from a method named myValue().[http://programming-scala.labs.oreilly.com/ch06.html]&lt;br /&gt;
&lt;br /&gt;
==Code Examples==&lt;br /&gt;
&lt;br /&gt;
===Ruby===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class Foo&lt;br /&gt;
  attr_reader :x&lt;br /&gt;
  def initialize(x)&lt;br /&gt;
    @x = x&lt;br /&gt;
  end&lt;br /&gt;
  def squared_x&lt;br /&gt;
    return @x * @x&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
y = Foo.new(2)&lt;br /&gt;
puts y.x&lt;br /&gt;
puts y.squared_x&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
This outputs:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
2&lt;br /&gt;
4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===PHP===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class Foo{&lt;br /&gt;
    private $x;&lt;br /&gt;
&lt;br /&gt;
    function __construct($x){&lt;br /&gt;
        $this-&amp;gt;x = $x;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function x(){&lt;br /&gt;
        return $this-&amp;gt;x;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function squared_x(){&lt;br /&gt;
        return $this-&amp;gt;x * $this-&amp;gt;x;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
$y = new Foo(2);&lt;br /&gt;
echo $y-&amp;gt;x();&lt;br /&gt;
echo $y-&amp;gt;squared_x();&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
This outputs:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
2&lt;br /&gt;
4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''Note that these examples were taken from wikipeda''[http://en.wikipedia.org/wiki/Uniform_access_principle]&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
#[Bertrand Meyer http://en.wikipedia.org/wiki/Bertrand_Meyer]&lt;br /&gt;
#[Uniform Access Principal http://en.wikipedia.org/wiki/Uniform_access_principle]&lt;br /&gt;
#[.Net Perls http://dotnetperls.com/count-array]&lt;br /&gt;
#[Eiffel World http://www.eiffel.com/general/column/2005/Sept_October.html]&lt;br /&gt;
#[OO Programing in Scala http://programming-scala.labs.oreilly.com/ch06.html]&lt;/div&gt;</summary>
		<author><name>Eeled</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_19_ee&amp;diff=29380</id>
		<title>CSC/ECE 517 Fall 2009/wiki3 19 ee</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_19_ee&amp;diff=29380"/>
		<updated>2009-11-19T02:34:04Z</updated>

		<summary type="html">&lt;p&gt;Eeled: /* Origin of the Uniform Access Principle */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Uniform Access Principle=&lt;br /&gt;
&lt;br /&gt;
The '''Uniform Access Principle''' states that any attribute of a module (usually a class) should be accessed with the same syntax, regardless of the nature of the data.  Simply put, when a consumer reads or writes a value, they should not know (or care) weather they accessing a variable or invoking a method.  Thus, no matter how the module internally handles the data, externally the information is always accessed uniformly.&lt;br /&gt;
&lt;br /&gt;
==Origin of the Uniform Access Principle==&lt;br /&gt;
The Uniform Access Principle was created by the French engineer Bertrand Meyer.  Meyer is known to be a strong proponent of object oriented programming, and in fact was one of the earliest and most outspoken champions of OO.  His book ''Object-Oriented Software Construction'', first published in 1988, is considered to be a foundational publication of the object oriented programming movement.[http://en.wikipedia.org/wiki/Bertrand_Meyer]&lt;br /&gt;
&lt;br /&gt;
It was in this book that he put forth the uniform access principal by stating &amp;quot;All services offered by a module should be available through a uniform notation, which does not betray whether they are implemented through storage or through computation.&amp;quot;[http://en.wikipedia.org/wiki/Uniform_access_principle]&lt;br /&gt;
&lt;br /&gt;
==Advantages of the Uniform Access Principle==&lt;br /&gt;
&lt;br /&gt;
There are many advantages associated with using the Uniform Access Principal when writing software.&lt;br /&gt;
&lt;br /&gt;
===Reading Properties===&lt;br /&gt;
Reading values (or getting) from an object is a syntactic cinch in code that uses the Uniform Access Principal.  Just refer to the field that holds the relevant data and the information is accessible.  This is a very simple way of interfacing with an external class. &lt;br /&gt;
&lt;br /&gt;
===Ease of Understanding===&lt;br /&gt;
Accessing data from a class can be confusing if the user does not know how the data is stored.  For example, in C# it is often hard to remember how to access the number of items in a collection - is it collection.Count or collection.Count()?  It turns out that the syntax is collection.Count for a generic collection, but it is collection.Count() for an enumerable collection.[http://dotnetperls.com/count-array]&lt;br /&gt;
&lt;br /&gt;
This difference in syntax can be confusing to a user trying to access the data within an otherwise opaque object.  If this data was uniformly accessible, it would be much less confusing. &lt;br /&gt;
&lt;br /&gt;
===Convenience of Interface===&lt;br /&gt;
Similarly, it is convenient for a user to not have to remember details of an objects implementation to access data within the object.  If the Uniform Access Principal is exercised, the programmer does not need to keep track of which values are computed in methods and which are just attributes.  A user can simply access the data named what they are interested in.&lt;br /&gt;
&lt;br /&gt;
===Maintainability of Interface===&lt;br /&gt;
Utilizing the Uniform Access Principal also aids in maintaining (reads 'not breaking') existing interfaces.  For example, lets say there was a BankAccount class.  That BankAccount class has an attribute called &amp;quot;Balance&amp;quot;, which simply contains the balance value for that account.  But later, the policy of the BankAccount changes, such that the balance is not a stored value, but must be computed by adding multiple values together.  &lt;br /&gt;
&lt;br /&gt;
In implementations that do not support the Uniform Access Principal, the accessing of that data could go from bankAcnt.Balance to bankAcnt.GetBalance(), thus 'breaking' any code that was depending on the balance property.&lt;br /&gt;
&lt;br /&gt;
However, with an implementation that utilizes the Uniform Access Principal, this change will not be a problem.  Be it a stored value, or a value computed in a method call, the accessing of this data could always be done with the same syntax.&lt;br /&gt;
&lt;br /&gt;
==Disadvantages of the Uniform Access Principle==&lt;br /&gt;
Although it is a long-held tenet of good object oriented design, there can be some drawbacks to using the Uniform Access Principal. &lt;br /&gt;
&lt;br /&gt;
===Writing Properties===&lt;br /&gt;
Setter methods are much easier to implement than setting a field that could be an attribute or could be associated with a method. Because of this inherent ambiguity, the language will probably not be able to determine how to handle a field being set on its own. The only good and consistent solution is to enforce the rule that the designer must specify how to handle an assignment for each method that is written. This can be burdensome on the original designer.[http://www.eiffel.com/general/column/2005/Sept_October.html]&lt;br /&gt;
&lt;br /&gt;
===Performance Issues===&lt;br /&gt;
When retrieving data from a class that utilizes the Uniform Access Principal, it could potentially mask or obfuscate a performance hit the user was not anticipating.  Consider a scenario where a piece of code needs to find the highest temperature value from a collection of many years worth of readings.  A non-uniform access implementation might read something like weather.getHighestTempFromAllReadings(). An implementation using the Uniform Access Principal would likely look more like &amp;quot;weather.HighTemp&amp;quot;.  &lt;br /&gt;
&lt;br /&gt;
The second option makes it appear that the highest temperature is just a value kept track of in the object, when in fact the data is off in a massive collection that must be searched.  The user might be surprised that &amp;quot;weather.HighTemp&amp;quot; takes a long time to return a value. However, to a user invoking &amp;quot;weather.getHighestTempFromAllReadings()&amp;quot; it should be apparent that the method call is busy searching through millions of records and will return a value once it is found.&lt;br /&gt;
&lt;br /&gt;
===Class Maintenance===&lt;br /&gt;
Maintaining code using the Uniform Access Principle might be difficult, especially if a different programmer originally designed the module.  It would be unclear to the maintainer which values are computed and which are just stored.  Whereas, in implementations where methods and attributes are clearly different, it would be easier to understand what was what.&lt;br /&gt;
&lt;br /&gt;
===Language Restrictions===&lt;br /&gt;
It is actually impossible to utilize the Uniform Access Principle in some languages.  For example, in Java fields and methods are kept in different namespaces.  This means that fields and methods can have the same names.  And because they are not restricted by these names, a field named myValue is completely independent from a method named myValue().[http://programming-scala.labs.oreilly.com/ch06.html]&lt;br /&gt;
&lt;br /&gt;
==Code Examples==&lt;br /&gt;
&lt;br /&gt;
===Ruby===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class Foo&lt;br /&gt;
  attr_reader :x&lt;br /&gt;
  def initialize(x)&lt;br /&gt;
    @x = x&lt;br /&gt;
  end&lt;br /&gt;
  def squared_x&lt;br /&gt;
    return @x * @x&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
y = Foo.new(2)&lt;br /&gt;
puts y.x&lt;br /&gt;
puts y.squared_x&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
This outputs:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
2&lt;br /&gt;
4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===PHP===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class Foo{&lt;br /&gt;
    private $x;&lt;br /&gt;
&lt;br /&gt;
    function __construct($x){&lt;br /&gt;
        $this-&amp;gt;x = $x;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function x(){&lt;br /&gt;
        return $this-&amp;gt;x;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function squared_x(){&lt;br /&gt;
        return $this-&amp;gt;x * $this-&amp;gt;x;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
$y = new Foo(2);&lt;br /&gt;
echo $y-&amp;gt;x();&lt;br /&gt;
echo $y-&amp;gt;squared_x();&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
This outputs:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
2&lt;br /&gt;
4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''Note that these examples were taken from wikipeda''[http://en.wikipedia.org/wiki/Uniform_access_principle]&lt;br /&gt;
&lt;br /&gt;
==References==&lt;/div&gt;</summary>
		<author><name>Eeled</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_19_ee&amp;diff=29378</id>
		<title>CSC/ECE 517 Fall 2009/wiki3 19 ee</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_19_ee&amp;diff=29378"/>
		<updated>2009-11-19T02:33:33Z</updated>

		<summary type="html">&lt;p&gt;Eeled: /* Language Restrictions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Uniform Access Principle=&lt;br /&gt;
&lt;br /&gt;
The '''Uniform Access Principle''' states that any attribute of a module (usually a class) should be accessed with the same syntax, regardless of the nature of the data.  Simply put, when a consumer reads or writes a value, they should not know (or care) weather they accessing a variable or invoking a method.  Thus, no matter how the module internally handles the data, externally the information is always accessed uniformly.&lt;br /&gt;
&lt;br /&gt;
==Origin of the Uniform Access Principle==&lt;br /&gt;
The Uniform Access Principle was created by the French engineer Bertrand Meyer.  Meyer is known to be a strong proponent of object oriented programming, and in fact was one of the earliest and most outspoken champions of OO.  His book ''Object-Oriented Software Construction'', first published in 1988, is considered to be a foundational publication of the object oriented programming movement.[http://en.wikipedia.org/wiki/Bertrand_Meyer]  It was in this book that he put forth the uniform access principal by stating &amp;quot;All services offered by a module should be available through a uniform notation, which does not betray whether they are implemented through storage or through computation.&amp;quot;[http://en.wikipedia.org/wiki/Uniform_access_principle]&lt;br /&gt;
&lt;br /&gt;
==Advantages of the Uniform Access Principle==&lt;br /&gt;
&lt;br /&gt;
There are many advantages associated with using the Uniform Access Principal when writing software.&lt;br /&gt;
&lt;br /&gt;
===Reading Properties===&lt;br /&gt;
Reading values (or getting) from an object is a syntactic cinch in code that uses the Uniform Access Principal.  Just refer to the field that holds the relevant data and the information is accessible.  This is a very simple way of interfacing with an external class. &lt;br /&gt;
&lt;br /&gt;
===Ease of Understanding===&lt;br /&gt;
Accessing data from a class can be confusing if the user does not know how the data is stored.  For example, in C# it is often hard to remember how to access the number of items in a collection - is it collection.Count or collection.Count()?  It turns out that the syntax is collection.Count for a generic collection, but it is collection.Count() for an enumerable collection.[http://dotnetperls.com/count-array]&lt;br /&gt;
&lt;br /&gt;
This difference in syntax can be confusing to a user trying to access the data within an otherwise opaque object.  If this data was uniformly accessible, it would be much less confusing. &lt;br /&gt;
&lt;br /&gt;
===Convenience of Interface===&lt;br /&gt;
Similarly, it is convenient for a user to not have to remember details of an objects implementation to access data within the object.  If the Uniform Access Principal is exercised, the programmer does not need to keep track of which values are computed in methods and which are just attributes.  A user can simply access the data named what they are interested in.&lt;br /&gt;
&lt;br /&gt;
===Maintainability of Interface===&lt;br /&gt;
Utilizing the Uniform Access Principal also aids in maintaining (reads 'not breaking') existing interfaces.  For example, lets say there was a BankAccount class.  That BankAccount class has an attribute called &amp;quot;Balance&amp;quot;, which simply contains the balance value for that account.  But later, the policy of the BankAccount changes, such that the balance is not a stored value, but must be computed by adding multiple values together.  &lt;br /&gt;
&lt;br /&gt;
In implementations that do not support the Uniform Access Principal, the accessing of that data could go from bankAcnt.Balance to bankAcnt.GetBalance(), thus 'breaking' any code that was depending on the balance property.&lt;br /&gt;
&lt;br /&gt;
However, with an implementation that utilizes the Uniform Access Principal, this change will not be a problem.  Be it a stored value, or a value computed in a method call, the accessing of this data could always be done with the same syntax.&lt;br /&gt;
&lt;br /&gt;
==Disadvantages of the Uniform Access Principle==&lt;br /&gt;
Although it is a long-held tenet of good object oriented design, there can be some drawbacks to using the Uniform Access Principal. &lt;br /&gt;
&lt;br /&gt;
===Writing Properties===&lt;br /&gt;
Setter methods are much easier to implement than setting a field that could be an attribute or could be associated with a method. Because of this inherent ambiguity, the language will probably not be able to determine how to handle a field being set on its own. The only good and consistent solution is to enforce the rule that the designer must specify how to handle an assignment for each method that is written. This can be burdensome on the original designer.[http://www.eiffel.com/general/column/2005/Sept_October.html]&lt;br /&gt;
&lt;br /&gt;
===Performance Issues===&lt;br /&gt;
When retrieving data from a class that utilizes the Uniform Access Principal, it could potentially mask or obfuscate a performance hit the user was not anticipating.  Consider a scenario where a piece of code needs to find the highest temperature value from a collection of many years worth of readings.  A non-uniform access implementation might read something like weather.getHighestTempFromAllReadings(). An implementation using the Uniform Access Principal would likely look more like &amp;quot;weather.HighTemp&amp;quot;.  &lt;br /&gt;
&lt;br /&gt;
The second option makes it appear that the highest temperature is just a value kept track of in the object, when in fact the data is off in a massive collection that must be searched.  The user might be surprised that &amp;quot;weather.HighTemp&amp;quot; takes a long time to return a value. However, to a user invoking &amp;quot;weather.getHighestTempFromAllReadings()&amp;quot; it should be apparent that the method call is busy searching through millions of records and will return a value once it is found.&lt;br /&gt;
&lt;br /&gt;
===Class Maintenance===&lt;br /&gt;
Maintaining code using the Uniform Access Principle might be difficult, especially if a different programmer originally designed the module.  It would be unclear to the maintainer which values are computed and which are just stored.  Whereas, in implementations where methods and attributes are clearly different, it would be easier to understand what was what.&lt;br /&gt;
&lt;br /&gt;
===Language Restrictions===&lt;br /&gt;
It is actually impossible to utilize the Uniform Access Principle in some languages.  For example, in Java fields and methods are kept in different namespaces.  This means that fields and methods can have the same names.  And because they are not restricted by these names, a field named myValue is completely independent from a method named myValue().[http://programming-scala.labs.oreilly.com/ch06.html]&lt;br /&gt;
&lt;br /&gt;
==Code Examples==&lt;br /&gt;
&lt;br /&gt;
===Ruby===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class Foo&lt;br /&gt;
  attr_reader :x&lt;br /&gt;
  def initialize(x)&lt;br /&gt;
    @x = x&lt;br /&gt;
  end&lt;br /&gt;
  def squared_x&lt;br /&gt;
    return @x * @x&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
y = Foo.new(2)&lt;br /&gt;
puts y.x&lt;br /&gt;
puts y.squared_x&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
This outputs:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
2&lt;br /&gt;
4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===PHP===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class Foo{&lt;br /&gt;
    private $x;&lt;br /&gt;
&lt;br /&gt;
    function __construct($x){&lt;br /&gt;
        $this-&amp;gt;x = $x;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function x(){&lt;br /&gt;
        return $this-&amp;gt;x;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function squared_x(){&lt;br /&gt;
        return $this-&amp;gt;x * $this-&amp;gt;x;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
$y = new Foo(2);&lt;br /&gt;
echo $y-&amp;gt;x();&lt;br /&gt;
echo $y-&amp;gt;squared_x();&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
This outputs:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
2&lt;br /&gt;
4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''Note that these examples were taken from wikipeda''[http://en.wikipedia.org/wiki/Uniform_access_principle]&lt;br /&gt;
&lt;br /&gt;
==References==&lt;/div&gt;</summary>
		<author><name>Eeled</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_19_ee&amp;diff=29376</id>
		<title>CSC/ECE 517 Fall 2009/wiki3 19 ee</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_19_ee&amp;diff=29376"/>
		<updated>2009-11-19T02:32:47Z</updated>

		<summary type="html">&lt;p&gt;Eeled: /* Code Examples */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Uniform Access Principle=&lt;br /&gt;
&lt;br /&gt;
The '''Uniform Access Principle''' states that any attribute of a module (usually a class) should be accessed with the same syntax, regardless of the nature of the data.  Simply put, when a consumer reads or writes a value, they should not know (or care) weather they accessing a variable or invoking a method.  Thus, no matter how the module internally handles the data, externally the information is always accessed uniformly.&lt;br /&gt;
&lt;br /&gt;
==Origin of the Uniform Access Principle==&lt;br /&gt;
The Uniform Access Principle was created by the French engineer Bertrand Meyer.  Meyer is known to be a strong proponent of object oriented programming, and in fact was one of the earliest and most outspoken champions of OO.  His book ''Object-Oriented Software Construction'', first published in 1988, is considered to be a foundational publication of the object oriented programming movement.[http://en.wikipedia.org/wiki/Bertrand_Meyer]  It was in this book that he put forth the uniform access principal by stating &amp;quot;All services offered by a module should be available through a uniform notation, which does not betray whether they are implemented through storage or through computation.&amp;quot;[http://en.wikipedia.org/wiki/Uniform_access_principle]&lt;br /&gt;
&lt;br /&gt;
==Advantages of the Uniform Access Principle==&lt;br /&gt;
&lt;br /&gt;
There are many advantages associated with using the Uniform Access Principal when writing software.&lt;br /&gt;
&lt;br /&gt;
===Reading Properties===&lt;br /&gt;
Reading values (or getting) from an object is a syntactic cinch in code that uses the Uniform Access Principal.  Just refer to the field that holds the relevant data and the information is accessible.  This is a very simple way of interfacing with an external class. &lt;br /&gt;
&lt;br /&gt;
===Ease of Understanding===&lt;br /&gt;
Accessing data from a class can be confusing if the user does not know how the data is stored.  For example, in C# it is often hard to remember how to access the number of items in a collection - is it collection.Count or collection.Count()?  It turns out that the syntax is collection.Count for a generic collection, but it is collection.Count() for an enumerable collection.[http://dotnetperls.com/count-array]&lt;br /&gt;
&lt;br /&gt;
This difference in syntax can be confusing to a user trying to access the data within an otherwise opaque object.  If this data was uniformly accessible, it would be much less confusing. &lt;br /&gt;
&lt;br /&gt;
===Convenience of Interface===&lt;br /&gt;
Similarly, it is convenient for a user to not have to remember details of an objects implementation to access data within the object.  If the Uniform Access Principal is exercised, the programmer does not need to keep track of which values are computed in methods and which are just attributes.  A user can simply access the data named what they are interested in.&lt;br /&gt;
&lt;br /&gt;
===Maintainability of Interface===&lt;br /&gt;
Utilizing the Uniform Access Principal also aids in maintaining (reads 'not breaking') existing interfaces.  For example, lets say there was a BankAccount class.  That BankAccount class has an attribute called &amp;quot;Balance&amp;quot;, which simply contains the balance value for that account.  But later, the policy of the BankAccount changes, such that the balance is not a stored value, but must be computed by adding multiple values together.  &lt;br /&gt;
&lt;br /&gt;
In implementations that do not support the Uniform Access Principal, the accessing of that data could go from bankAcnt.Balance to bankAcnt.GetBalance(), thus 'breaking' any code that was depending on the balance property.&lt;br /&gt;
&lt;br /&gt;
However, with an implementation that utilizes the Uniform Access Principal, this change will not be a problem.  Be it a stored value, or a value computed in a method call, the accessing of this data could always be done with the same syntax.&lt;br /&gt;
&lt;br /&gt;
==Disadvantages of the Uniform Access Principle==&lt;br /&gt;
Although it is a long-held tenet of good object oriented design, there can be some drawbacks to using the Uniform Access Principal. &lt;br /&gt;
&lt;br /&gt;
===Writing Properties===&lt;br /&gt;
Setter methods are much easier to implement than setting a field that could be an attribute or could be associated with a method. Because of this inherent ambiguity, the language will probably not be able to determine how to handle a field being set on its own. The only good and consistent solution is to enforce the rule that the designer must specify how to handle an assignment for each method that is written. This can be burdensome on the original designer.[http://www.eiffel.com/general/column/2005/Sept_October.html]&lt;br /&gt;
&lt;br /&gt;
===Performance Issues===&lt;br /&gt;
When retrieving data from a class that utilizes the Uniform Access Principal, it could potentially mask or obfuscate a performance hit the user was not anticipating.  Consider a scenario where a piece of code needs to find the highest temperature value from a collection of many years worth of readings.  A non-uniform access implementation might read something like weather.getHighestTempFromAllReadings(). An implementation using the Uniform Access Principal would likely look more like &amp;quot;weather.HighTemp&amp;quot;.  &lt;br /&gt;
&lt;br /&gt;
The second option makes it appear that the highest temperature is just a value kept track of in the object, when in fact the data is off in a massive collection that must be searched.  The user might be surprised that &amp;quot;weather.HighTemp&amp;quot; takes a long time to return a value. However, to a user invoking &amp;quot;weather.getHighestTempFromAllReadings()&amp;quot; it should be apparent that the method call is busy searching through millions of records and will return a value once it is found.&lt;br /&gt;
&lt;br /&gt;
===Class Maintenance===&lt;br /&gt;
Maintaining code using the Uniform Access Principle might be difficult, especially if a different programmer originally designed the module.  It would be unclear to the maintainer which values are computed and which are just stored.  Whereas, in implementations where methods and attributes are clearly different, it would be easier to understand what was what.&lt;br /&gt;
&lt;br /&gt;
===Language Restrictions===&lt;br /&gt;
It is actually impossible to utilize the Uniform Access Principle in some languages.  For example, in Java fields and methods are kept in different namespaces.  This means that fields and methods can have the same names.  And because they are not restricted by these names, a field named myValue is completely independent from a method named myValue().  &lt;br /&gt;
&lt;br /&gt;
==Code Examples==&lt;br /&gt;
&lt;br /&gt;
===Ruby===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class Foo&lt;br /&gt;
  attr_reader :x&lt;br /&gt;
  def initialize(x)&lt;br /&gt;
    @x = x&lt;br /&gt;
  end&lt;br /&gt;
  def squared_x&lt;br /&gt;
    return @x * @x&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
y = Foo.new(2)&lt;br /&gt;
puts y.x&lt;br /&gt;
puts y.squared_x&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
This outputs:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
2&lt;br /&gt;
4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===PHP===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class Foo{&lt;br /&gt;
    private $x;&lt;br /&gt;
&lt;br /&gt;
    function __construct($x){&lt;br /&gt;
        $this-&amp;gt;x = $x;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function x(){&lt;br /&gt;
        return $this-&amp;gt;x;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function squared_x(){&lt;br /&gt;
        return $this-&amp;gt;x * $this-&amp;gt;x;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
$y = new Foo(2);&lt;br /&gt;
echo $y-&amp;gt;x();&lt;br /&gt;
echo $y-&amp;gt;squared_x();&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
This outputs:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
2&lt;br /&gt;
4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''Note that these examples were taken from wikipeda''[http://en.wikipedia.org/wiki/Uniform_access_principle]&lt;br /&gt;
&lt;br /&gt;
==References==&lt;/div&gt;</summary>
		<author><name>Eeled</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_19_ee&amp;diff=29371</id>
		<title>CSC/ECE 517 Fall 2009/wiki3 19 ee</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_19_ee&amp;diff=29371"/>
		<updated>2009-11-19T02:31:59Z</updated>

		<summary type="html">&lt;p&gt;Eeled: /* Code Examples */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Uniform Access Principle=&lt;br /&gt;
&lt;br /&gt;
The '''Uniform Access Principle''' states that any attribute of a module (usually a class) should be accessed with the same syntax, regardless of the nature of the data.  Simply put, when a consumer reads or writes a value, they should not know (or care) weather they accessing a variable or invoking a method.  Thus, no matter how the module internally handles the data, externally the information is always accessed uniformly.&lt;br /&gt;
&lt;br /&gt;
==Origin of the Uniform Access Principle==&lt;br /&gt;
The Uniform Access Principle was created by the French engineer Bertrand Meyer.  Meyer is known to be a strong proponent of object oriented programming, and in fact was one of the earliest and most outspoken champions of OO.  His book ''Object-Oriented Software Construction'', first published in 1988, is considered to be a foundational publication of the object oriented programming movement.[http://en.wikipedia.org/wiki/Bertrand_Meyer]  It was in this book that he put forth the uniform access principal by stating &amp;quot;All services offered by a module should be available through a uniform notation, which does not betray whether they are implemented through storage or through computation.&amp;quot;[http://en.wikipedia.org/wiki/Uniform_access_principle]&lt;br /&gt;
&lt;br /&gt;
==Advantages of the Uniform Access Principle==&lt;br /&gt;
&lt;br /&gt;
There are many advantages associated with using the Uniform Access Principal when writing software.&lt;br /&gt;
&lt;br /&gt;
===Reading Properties===&lt;br /&gt;
Reading values (or getting) from an object is a syntactic cinch in code that uses the Uniform Access Principal.  Just refer to the field that holds the relevant data and the information is accessible.  This is a very simple way of interfacing with an external class. &lt;br /&gt;
&lt;br /&gt;
===Ease of Understanding===&lt;br /&gt;
Accessing data from a class can be confusing if the user does not know how the data is stored.  For example, in C# it is often hard to remember how to access the number of items in a collection - is it collection.Count or collection.Count()?  It turns out that the syntax is collection.Count for a generic collection, but it is collection.Count() for an enumerable collection.[http://dotnetperls.com/count-array]&lt;br /&gt;
&lt;br /&gt;
This difference in syntax can be confusing to a user trying to access the data within an otherwise opaque object.  If this data was uniformly accessible, it would be much less confusing. &lt;br /&gt;
&lt;br /&gt;
===Convenience of Interface===&lt;br /&gt;
Similarly, it is convenient for a user to not have to remember details of an objects implementation to access data within the object.  If the Uniform Access Principal is exercised, the programmer does not need to keep track of which values are computed in methods and which are just attributes.  A user can simply access the data named what they are interested in.&lt;br /&gt;
&lt;br /&gt;
===Maintainability of Interface===&lt;br /&gt;
Utilizing the Uniform Access Principal also aids in maintaining (reads 'not breaking') existing interfaces.  For example, lets say there was a BankAccount class.  That BankAccount class has an attribute called &amp;quot;Balance&amp;quot;, which simply contains the balance value for that account.  But later, the policy of the BankAccount changes, such that the balance is not a stored value, but must be computed by adding multiple values together.  &lt;br /&gt;
&lt;br /&gt;
In implementations that do not support the Uniform Access Principal, the accessing of that data could go from bankAcnt.Balance to bankAcnt.GetBalance(), thus 'breaking' any code that was depending on the balance property.&lt;br /&gt;
&lt;br /&gt;
However, with an implementation that utilizes the Uniform Access Principal, this change will not be a problem.  Be it a stored value, or a value computed in a method call, the accessing of this data could always be done with the same syntax.&lt;br /&gt;
&lt;br /&gt;
==Disadvantages of the Uniform Access Principle==&lt;br /&gt;
Although it is a long-held tenet of good object oriented design, there can be some drawbacks to using the Uniform Access Principal. &lt;br /&gt;
&lt;br /&gt;
===Writing Properties===&lt;br /&gt;
Setter methods are much easier to implement than setting a field that could be an attribute or could be associated with a method. Because of this inherent ambiguity, the language will probably not be able to determine how to handle a field being set on its own. The only good and consistent solution is to enforce the rule that the designer must specify how to handle an assignment for each method that is written. This can be burdensome on the original designer.[http://www.eiffel.com/general/column/2005/Sept_October.html]&lt;br /&gt;
&lt;br /&gt;
===Performance Issues===&lt;br /&gt;
When retrieving data from a class that utilizes the Uniform Access Principal, it could potentially mask or obfuscate a performance hit the user was not anticipating.  Consider a scenario where a piece of code needs to find the highest temperature value from a collection of many years worth of readings.  A non-uniform access implementation might read something like weather.getHighestTempFromAllReadings(). An implementation using the Uniform Access Principal would likely look more like &amp;quot;weather.HighTemp&amp;quot;.  &lt;br /&gt;
&lt;br /&gt;
The second option makes it appear that the highest temperature is just a value kept track of in the object, when in fact the data is off in a massive collection that must be searched.  The user might be surprised that &amp;quot;weather.HighTemp&amp;quot; takes a long time to return a value. However, to a user invoking &amp;quot;weather.getHighestTempFromAllReadings()&amp;quot; it should be apparent that the method call is busy searching through millions of records and will return a value once it is found.&lt;br /&gt;
&lt;br /&gt;
===Class Maintenance===&lt;br /&gt;
Maintaining code using the Uniform Access Principle might be difficult, especially if a different programmer originally designed the module.  It would be unclear to the maintainer which values are computed and which are just stored.  Whereas, in implementations where methods and attributes are clearly different, it would be easier to understand what was what.&lt;br /&gt;
&lt;br /&gt;
===Language Restrictions===&lt;br /&gt;
It is actually impossible to utilize the Uniform Access Principle in some languages.  For example, in Java fields and methods are kept in different namespaces.  This means that fields and methods can have the same names.  And because they are not restricted by these names, a field named myValue is completely independent from a method named myValue().  &lt;br /&gt;
&lt;br /&gt;
==Code Examples==&lt;br /&gt;
&lt;br /&gt;
===Ruby===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class Foo&lt;br /&gt;
  attr_reader :x&lt;br /&gt;
  def initialize(x)&lt;br /&gt;
    @x = x&lt;br /&gt;
  end&lt;br /&gt;
  def squared_x&lt;br /&gt;
    return @x * @x&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
y = Foo.new(2)&lt;br /&gt;
puts y.x&lt;br /&gt;
puts y.squared_x&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
This outputs:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
2&lt;br /&gt;
4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===PHP===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class Foo{&lt;br /&gt;
    private $x;&lt;br /&gt;
&lt;br /&gt;
    function __construct($x){&lt;br /&gt;
        $this-&amp;gt;x = $x;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function x(){&lt;br /&gt;
        return $this-&amp;gt;x;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function squared_x(){&lt;br /&gt;
        return $this-&amp;gt;x * $this-&amp;gt;x;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
$y = new Foo(2);&lt;br /&gt;
echo $y-&amp;gt;x();&lt;br /&gt;
echo $y-&amp;gt;squared_x();&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
This outputs:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
2&lt;br /&gt;
4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==References==&lt;/div&gt;</summary>
		<author><name>Eeled</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_19_ee&amp;diff=29365</id>
		<title>CSC/ECE 517 Fall 2009/wiki3 19 ee</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_19_ee&amp;diff=29365"/>
		<updated>2009-11-19T02:30:50Z</updated>

		<summary type="html">&lt;p&gt;Eeled: /* Code Examples */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Uniform Access Principle=&lt;br /&gt;
&lt;br /&gt;
The '''Uniform Access Principle''' states that any attribute of a module (usually a class) should be accessed with the same syntax, regardless of the nature of the data.  Simply put, when a consumer reads or writes a value, they should not know (or care) weather they accessing a variable or invoking a method.  Thus, no matter how the module internally handles the data, externally the information is always accessed uniformly.&lt;br /&gt;
&lt;br /&gt;
==Origin of the Uniform Access Principle==&lt;br /&gt;
The Uniform Access Principle was created by the French engineer Bertrand Meyer.  Meyer is known to be a strong proponent of object oriented programming, and in fact was one of the earliest and most outspoken champions of OO.  His book ''Object-Oriented Software Construction'', first published in 1988, is considered to be a foundational publication of the object oriented programming movement.[http://en.wikipedia.org/wiki/Bertrand_Meyer]  It was in this book that he put forth the uniform access principal by stating &amp;quot;All services offered by a module should be available through a uniform notation, which does not betray whether they are implemented through storage or through computation.&amp;quot;[http://en.wikipedia.org/wiki/Uniform_access_principle]&lt;br /&gt;
&lt;br /&gt;
==Advantages of the Uniform Access Principle==&lt;br /&gt;
&lt;br /&gt;
There are many advantages associated with using the Uniform Access Principal when writing software.&lt;br /&gt;
&lt;br /&gt;
===Reading Properties===&lt;br /&gt;
Reading values (or getting) from an object is a syntactic cinch in code that uses the Uniform Access Principal.  Just refer to the field that holds the relevant data and the information is accessible.  This is a very simple way of interfacing with an external class. &lt;br /&gt;
&lt;br /&gt;
===Ease of Understanding===&lt;br /&gt;
Accessing data from a class can be confusing if the user does not know how the data is stored.  For example, in C# it is often hard to remember how to access the number of items in a collection - is it collection.Count or collection.Count()?  It turns out that the syntax is collection.Count for a generic collection, but it is collection.Count() for an enumerable collection.[http://dotnetperls.com/count-array]&lt;br /&gt;
&lt;br /&gt;
This difference in syntax can be confusing to a user trying to access the data within an otherwise opaque object.  If this data was uniformly accessible, it would be much less confusing. &lt;br /&gt;
&lt;br /&gt;
===Convenience of Interface===&lt;br /&gt;
Similarly, it is convenient for a user to not have to remember details of an objects implementation to access data within the object.  If the Uniform Access Principal is exercised, the programmer does not need to keep track of which values are computed in methods and which are just attributes.  A user can simply access the data named what they are interested in.&lt;br /&gt;
&lt;br /&gt;
===Maintainability of Interface===&lt;br /&gt;
Utilizing the Uniform Access Principal also aids in maintaining (reads 'not breaking') existing interfaces.  For example, lets say there was a BankAccount class.  That BankAccount class has an attribute called &amp;quot;Balance&amp;quot;, which simply contains the balance value for that account.  But later, the policy of the BankAccount changes, such that the balance is not a stored value, but must be computed by adding multiple values together.  &lt;br /&gt;
&lt;br /&gt;
In implementations that do not support the Uniform Access Principal, the accessing of that data could go from bankAcnt.Balance to bankAcnt.GetBalance(), thus 'breaking' any code that was depending on the balance property.&lt;br /&gt;
&lt;br /&gt;
However, with an implementation that utilizes the Uniform Access Principal, this change will not be a problem.  Be it a stored value, or a value computed in a method call, the accessing of this data could always be done with the same syntax.&lt;br /&gt;
&lt;br /&gt;
==Disadvantages of the Uniform Access Principle==&lt;br /&gt;
Although it is a long-held tenet of good object oriented design, there can be some drawbacks to using the Uniform Access Principal. &lt;br /&gt;
&lt;br /&gt;
===Writing Properties===&lt;br /&gt;
Setter methods are much easier to implement than setting a field that could be an attribute or could be associated with a method. Because of this inherent ambiguity, the language will probably not be able to determine how to handle a field being set on its own. The only good and consistent solution is to enforce the rule that the designer must specify how to handle an assignment for each method that is written. This can be burdensome on the original designer.[http://www.eiffel.com/general/column/2005/Sept_October.html]&lt;br /&gt;
&lt;br /&gt;
===Performance Issues===&lt;br /&gt;
When retrieving data from a class that utilizes the Uniform Access Principal, it could potentially mask or obfuscate a performance hit the user was not anticipating.  Consider a scenario where a piece of code needs to find the highest temperature value from a collection of many years worth of readings.  A non-uniform access implementation might read something like weather.getHighestTempFromAllReadings(). An implementation using the Uniform Access Principal would likely look more like &amp;quot;weather.HighTemp&amp;quot;.  &lt;br /&gt;
&lt;br /&gt;
The second option makes it appear that the highest temperature is just a value kept track of in the object, when in fact the data is off in a massive collection that must be searched.  The user might be surprised that &amp;quot;weather.HighTemp&amp;quot; takes a long time to return a value. However, to a user invoking &amp;quot;weather.getHighestTempFromAllReadings()&amp;quot; it should be apparent that the method call is busy searching through millions of records and will return a value once it is found.&lt;br /&gt;
&lt;br /&gt;
===Class Maintenance===&lt;br /&gt;
Maintaining code using the Uniform Access Principle might be difficult, especially if a different programmer originally designed the module.  It would be unclear to the maintainer which values are computed and which are just stored.  Whereas, in implementations where methods and attributes are clearly different, it would be easier to understand what was what.&lt;br /&gt;
&lt;br /&gt;
===Language Restrictions===&lt;br /&gt;
It is actually impossible to utilize the Uniform Access Principle in some languages.  For example, in Java fields and methods are kept in different namespaces.  This means that fields and methods can have the same names.  And because they are not restricted by these names, a field named myValue is completely independent from a method named myValue().  &lt;br /&gt;
&lt;br /&gt;
==Code Examples==&lt;br /&gt;
&lt;br /&gt;
===Ruby===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class Foo&lt;br /&gt;
  attr_reader :x&lt;br /&gt;
  def initialize(x)&lt;br /&gt;
    @x = x&lt;br /&gt;
  end&lt;br /&gt;
  def squared_x&lt;br /&gt;
    return @x * @x&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
y = Foo.new(2)&lt;br /&gt;
puts y.x&lt;br /&gt;
puts y.squared_x&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This outputs:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
2&lt;br /&gt;
4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==References==&lt;/div&gt;</summary>
		<author><name>Eeled</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_19_ee&amp;diff=29361</id>
		<title>CSC/ECE 517 Fall 2009/wiki3 19 ee</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_19_ee&amp;diff=29361"/>
		<updated>2009-11-19T02:30:08Z</updated>

		<summary type="html">&lt;p&gt;Eeled: /* Code Examples */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Uniform Access Principle=&lt;br /&gt;
&lt;br /&gt;
The '''Uniform Access Principle''' states that any attribute of a module (usually a class) should be accessed with the same syntax, regardless of the nature of the data.  Simply put, when a consumer reads or writes a value, they should not know (or care) weather they accessing a variable or invoking a method.  Thus, no matter how the module internally handles the data, externally the information is always accessed uniformly.&lt;br /&gt;
&lt;br /&gt;
==Origin of the Uniform Access Principle==&lt;br /&gt;
The Uniform Access Principle was created by the French engineer Bertrand Meyer.  Meyer is known to be a strong proponent of object oriented programming, and in fact was one of the earliest and most outspoken champions of OO.  His book ''Object-Oriented Software Construction'', first published in 1988, is considered to be a foundational publication of the object oriented programming movement.[http://en.wikipedia.org/wiki/Bertrand_Meyer]  It was in this book that he put forth the uniform access principal by stating &amp;quot;All services offered by a module should be available through a uniform notation, which does not betray whether they are implemented through storage or through computation.&amp;quot;[http://en.wikipedia.org/wiki/Uniform_access_principle]&lt;br /&gt;
&lt;br /&gt;
==Advantages of the Uniform Access Principle==&lt;br /&gt;
&lt;br /&gt;
There are many advantages associated with using the Uniform Access Principal when writing software.&lt;br /&gt;
&lt;br /&gt;
===Reading Properties===&lt;br /&gt;
Reading values (or getting) from an object is a syntactic cinch in code that uses the Uniform Access Principal.  Just refer to the field that holds the relevant data and the information is accessible.  This is a very simple way of interfacing with an external class. &lt;br /&gt;
&lt;br /&gt;
===Ease of Understanding===&lt;br /&gt;
Accessing data from a class can be confusing if the user does not know how the data is stored.  For example, in C# it is often hard to remember how to access the number of items in a collection - is it collection.Count or collection.Count()?  It turns out that the syntax is collection.Count for a generic collection, but it is collection.Count() for an enumerable collection.[http://dotnetperls.com/count-array]&lt;br /&gt;
&lt;br /&gt;
This difference in syntax can be confusing to a user trying to access the data within an otherwise opaque object.  If this data was uniformly accessible, it would be much less confusing. &lt;br /&gt;
&lt;br /&gt;
===Convenience of Interface===&lt;br /&gt;
Similarly, it is convenient for a user to not have to remember details of an objects implementation to access data within the object.  If the Uniform Access Principal is exercised, the programmer does not need to keep track of which values are computed in methods and which are just attributes.  A user can simply access the data named what they are interested in.&lt;br /&gt;
&lt;br /&gt;
===Maintainability of Interface===&lt;br /&gt;
Utilizing the Uniform Access Principal also aids in maintaining (reads 'not breaking') existing interfaces.  For example, lets say there was a BankAccount class.  That BankAccount class has an attribute called &amp;quot;Balance&amp;quot;, which simply contains the balance value for that account.  But later, the policy of the BankAccount changes, such that the balance is not a stored value, but must be computed by adding multiple values together.  &lt;br /&gt;
&lt;br /&gt;
In implementations that do not support the Uniform Access Principal, the accessing of that data could go from bankAcnt.Balance to bankAcnt.GetBalance(), thus 'breaking' any code that was depending on the balance property.&lt;br /&gt;
&lt;br /&gt;
However, with an implementation that utilizes the Uniform Access Principal, this change will not be a problem.  Be it a stored value, or a value computed in a method call, the accessing of this data could always be done with the same syntax.&lt;br /&gt;
&lt;br /&gt;
==Disadvantages of the Uniform Access Principle==&lt;br /&gt;
Although it is a long-held tenet of good object oriented design, there can be some drawbacks to using the Uniform Access Principal. &lt;br /&gt;
&lt;br /&gt;
===Writing Properties===&lt;br /&gt;
Setter methods are much easier to implement than setting a field that could be an attribute or could be associated with a method. Because of this inherent ambiguity, the language will probably not be able to determine how to handle a field being set on its own. The only good and consistent solution is to enforce the rule that the designer must specify how to handle an assignment for each method that is written. This can be burdensome on the original designer.[http://www.eiffel.com/general/column/2005/Sept_October.html]&lt;br /&gt;
&lt;br /&gt;
===Performance Issues===&lt;br /&gt;
When retrieving data from a class that utilizes the Uniform Access Principal, it could potentially mask or obfuscate a performance hit the user was not anticipating.  Consider a scenario where a piece of code needs to find the highest temperature value from a collection of many years worth of readings.  A non-uniform access implementation might read something like weather.getHighestTempFromAllReadings(). An implementation using the Uniform Access Principal would likely look more like &amp;quot;weather.HighTemp&amp;quot;.  &lt;br /&gt;
&lt;br /&gt;
The second option makes it appear that the highest temperature is just a value kept track of in the object, when in fact the data is off in a massive collection that must be searched.  The user might be surprised that &amp;quot;weather.HighTemp&amp;quot; takes a long time to return a value. However, to a user invoking &amp;quot;weather.getHighestTempFromAllReadings()&amp;quot; it should be apparent that the method call is busy searching through millions of records and will return a value once it is found.&lt;br /&gt;
&lt;br /&gt;
===Class Maintenance===&lt;br /&gt;
Maintaining code using the Uniform Access Principle might be difficult, especially if a different programmer originally designed the module.  It would be unclear to the maintainer which values are computed and which are just stored.  Whereas, in implementations where methods and attributes are clearly different, it would be easier to understand what was what.&lt;br /&gt;
&lt;br /&gt;
===Language Restrictions===&lt;br /&gt;
It is actually impossible to utilize the Uniform Access Principle in some languages.  For example, in Java fields and methods are kept in different namespaces.  This means that fields and methods can have the same names.  And because they are not restricted by these names, a field named myValue is completely independent from a method named myValue().  &lt;br /&gt;
&lt;br /&gt;
==Code Examples==&lt;br /&gt;
&lt;br /&gt;
===Ruby===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class Foo&lt;br /&gt;
  attr_reader :x&lt;br /&gt;
  def initialize(x)&lt;br /&gt;
    @x = x&lt;br /&gt;
  end&lt;br /&gt;
  def squared_x&lt;br /&gt;
    return @x * @x&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
y = Foo.new(2)&lt;br /&gt;
puts y.x&lt;br /&gt;
puts y.squared_x&lt;br /&gt;
&lt;br /&gt;
This outputs:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
2&lt;br /&gt;
4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==References==&lt;/div&gt;</summary>
		<author><name>Eeled</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_19_ee&amp;diff=29354</id>
		<title>CSC/ECE 517 Fall 2009/wiki3 19 ee</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_19_ee&amp;diff=29354"/>
		<updated>2009-11-19T02:28:56Z</updated>

		<summary type="html">&lt;p&gt;Eeled: /* Ruby */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Uniform Access Principle=&lt;br /&gt;
&lt;br /&gt;
The '''Uniform Access Principle''' states that any attribute of a module (usually a class) should be accessed with the same syntax, regardless of the nature of the data.  Simply put, when a consumer reads or writes a value, they should not know (or care) weather they accessing a variable or invoking a method.  Thus, no matter how the module internally handles the data, externally the information is always accessed uniformly.&lt;br /&gt;
&lt;br /&gt;
==Origin of the Uniform Access Principle==&lt;br /&gt;
The Uniform Access Principle was created by the French engineer Bertrand Meyer.  Meyer is known to be a strong proponent of object oriented programming, and in fact was one of the earliest and most outspoken champions of OO.  His book ''Object-Oriented Software Construction'', first published in 1988, is considered to be a foundational publication of the object oriented programming movement.[http://en.wikipedia.org/wiki/Bertrand_Meyer]  It was in this book that he put forth the uniform access principal by stating &amp;quot;All services offered by a module should be available through a uniform notation, which does not betray whether they are implemented through storage or through computation.&amp;quot;[http://en.wikipedia.org/wiki/Uniform_access_principle]&lt;br /&gt;
&lt;br /&gt;
==Advantages of the Uniform Access Principle==&lt;br /&gt;
&lt;br /&gt;
There are many advantages associated with using the Uniform Access Principal when writing software.&lt;br /&gt;
&lt;br /&gt;
===Reading Properties===&lt;br /&gt;
Reading values (or getting) from an object is a syntactic cinch in code that uses the Uniform Access Principal.  Just refer to the field that holds the relevant data and the information is accessible.  This is a very simple way of interfacing with an external class. &lt;br /&gt;
&lt;br /&gt;
===Ease of Understanding===&lt;br /&gt;
Accessing data from a class can be confusing if the user does not know how the data is stored.  For example, in C# it is often hard to remember how to access the number of items in a collection - is it collection.Count or collection.Count()?  It turns out that the syntax is collection.Count for a generic collection, but it is collection.Count() for an enumerable collection.[http://dotnetperls.com/count-array]&lt;br /&gt;
&lt;br /&gt;
This difference in syntax can be confusing to a user trying to access the data within an otherwise opaque object.  If this data was uniformly accessible, it would be much less confusing. &lt;br /&gt;
&lt;br /&gt;
===Convenience of Interface===&lt;br /&gt;
Similarly, it is convenient for a user to not have to remember details of an objects implementation to access data within the object.  If the Uniform Access Principal is exercised, the programmer does not need to keep track of which values are computed in methods and which are just attributes.  A user can simply access the data named what they are interested in.&lt;br /&gt;
&lt;br /&gt;
===Maintainability of Interface===&lt;br /&gt;
Utilizing the Uniform Access Principal also aids in maintaining (reads 'not breaking') existing interfaces.  For example, lets say there was a BankAccount class.  That BankAccount class has an attribute called &amp;quot;Balance&amp;quot;, which simply contains the balance value for that account.  But later, the policy of the BankAccount changes, such that the balance is not a stored value, but must be computed by adding multiple values together.  &lt;br /&gt;
&lt;br /&gt;
In implementations that do not support the Uniform Access Principal, the accessing of that data could go from bankAcnt.Balance to bankAcnt.GetBalance(), thus 'breaking' any code that was depending on the balance property.&lt;br /&gt;
&lt;br /&gt;
However, with an implementation that utilizes the Uniform Access Principal, this change will not be a problem.  Be it a stored value, or a value computed in a method call, the accessing of this data could always be done with the same syntax.&lt;br /&gt;
&lt;br /&gt;
==Disadvantages of the Uniform Access Principle==&lt;br /&gt;
Although it is a long-held tenet of good object oriented design, there can be some drawbacks to using the Uniform Access Principal. &lt;br /&gt;
&lt;br /&gt;
===Writing Properties===&lt;br /&gt;
Setter methods are much easier to implement than setting a field that could be an attribute or could be associated with a method. Because of this inherent ambiguity, the language will probably not be able to determine how to handle a field being set on its own. The only good and consistent solution is to enforce the rule that the designer must specify how to handle an assignment for each method that is written. This can be burdensome on the original designer.[http://www.eiffel.com/general/column/2005/Sept_October.html]&lt;br /&gt;
&lt;br /&gt;
===Performance Issues===&lt;br /&gt;
When retrieving data from a class that utilizes the Uniform Access Principal, it could potentially mask or obfuscate a performance hit the user was not anticipating.  Consider a scenario where a piece of code needs to find the highest temperature value from a collection of many years worth of readings.  A non-uniform access implementation might read something like weather.getHighestTempFromAllReadings(). An implementation using the Uniform Access Principal would likely look more like &amp;quot;weather.HighTemp&amp;quot;.  &lt;br /&gt;
&lt;br /&gt;
The second option makes it appear that the highest temperature is just a value kept track of in the object, when in fact the data is off in a massive collection that must be searched.  The user might be surprised that &amp;quot;weather.HighTemp&amp;quot; takes a long time to return a value. However, to a user invoking &amp;quot;weather.getHighestTempFromAllReadings()&amp;quot; it should be apparent that the method call is busy searching through millions of records and will return a value once it is found.&lt;br /&gt;
&lt;br /&gt;
===Class Maintenance===&lt;br /&gt;
Maintaining code using the Uniform Access Principle might be difficult, especially if a different programmer originally designed the module.  It would be unclear to the maintainer which values are computed and which are just stored.  Whereas, in implementations where methods and attributes are clearly different, it would be easier to understand what was what.&lt;br /&gt;
&lt;br /&gt;
===Language Restrictions===&lt;br /&gt;
It is actually impossible to utilize the Uniform Access Principle in some languages.  For example, in Java fields and methods are kept in different namespaces.  This means that fields and methods can have the same names.  And because they are not restricted by these names, a field named myValue is completely independent from a method named myValue().  &lt;br /&gt;
&lt;br /&gt;
==Code Examples==&lt;br /&gt;
&lt;br /&gt;
===Ruby===&lt;br /&gt;
&lt;br /&gt;
class Foo&lt;br /&gt;
  attr_reader :x&lt;br /&gt;
  def initialize(x)&lt;br /&gt;
    @x = x&lt;br /&gt;
  end&lt;br /&gt;
  def squared_x&lt;br /&gt;
    return @x * @x&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
y = Foo.new(2)&lt;br /&gt;
puts y.x&lt;br /&gt;
puts y.squared_x&lt;br /&gt;
&lt;br /&gt;
This outputs:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
2&lt;br /&gt;
4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==References==&lt;/div&gt;</summary>
		<author><name>Eeled</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_19_ee&amp;diff=29352</id>
		<title>CSC/ECE 517 Fall 2009/wiki3 19 ee</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_19_ee&amp;diff=29352"/>
		<updated>2009-11-19T02:28:23Z</updated>

		<summary type="html">&lt;p&gt;Eeled: /* Uniform Access Principle */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Uniform Access Principle=&lt;br /&gt;
&lt;br /&gt;
The '''Uniform Access Principle''' states that any attribute of a module (usually a class) should be accessed with the same syntax, regardless of the nature of the data.  Simply put, when a consumer reads or writes a value, they should not know (or care) weather they accessing a variable or invoking a method.  Thus, no matter how the module internally handles the data, externally the information is always accessed uniformly.&lt;br /&gt;
&lt;br /&gt;
==Origin of the Uniform Access Principle==&lt;br /&gt;
The Uniform Access Principle was created by the French engineer Bertrand Meyer.  Meyer is known to be a strong proponent of object oriented programming, and in fact was one of the earliest and most outspoken champions of OO.  His book ''Object-Oriented Software Construction'', first published in 1988, is considered to be a foundational publication of the object oriented programming movement.[http://en.wikipedia.org/wiki/Bertrand_Meyer]  It was in this book that he put forth the uniform access principal by stating &amp;quot;All services offered by a module should be available through a uniform notation, which does not betray whether they are implemented through storage or through computation.&amp;quot;[http://en.wikipedia.org/wiki/Uniform_access_principle]&lt;br /&gt;
&lt;br /&gt;
==Advantages of the Uniform Access Principle==&lt;br /&gt;
&lt;br /&gt;
There are many advantages associated with using the Uniform Access Principal when writing software.&lt;br /&gt;
&lt;br /&gt;
===Reading Properties===&lt;br /&gt;
Reading values (or getting) from an object is a syntactic cinch in code that uses the Uniform Access Principal.  Just refer to the field that holds the relevant data and the information is accessible.  This is a very simple way of interfacing with an external class. &lt;br /&gt;
&lt;br /&gt;
===Ease of Understanding===&lt;br /&gt;
Accessing data from a class can be confusing if the user does not know how the data is stored.  For example, in C# it is often hard to remember how to access the number of items in a collection - is it collection.Count or collection.Count()?  It turns out that the syntax is collection.Count for a generic collection, but it is collection.Count() for an enumerable collection.[http://dotnetperls.com/count-array]&lt;br /&gt;
&lt;br /&gt;
This difference in syntax can be confusing to a user trying to access the data within an otherwise opaque object.  If this data was uniformly accessible, it would be much less confusing. &lt;br /&gt;
&lt;br /&gt;
===Convenience of Interface===&lt;br /&gt;
Similarly, it is convenient for a user to not have to remember details of an objects implementation to access data within the object.  If the Uniform Access Principal is exercised, the programmer does not need to keep track of which values are computed in methods and which are just attributes.  A user can simply access the data named what they are interested in.&lt;br /&gt;
&lt;br /&gt;
===Maintainability of Interface===&lt;br /&gt;
Utilizing the Uniform Access Principal also aids in maintaining (reads 'not breaking') existing interfaces.  For example, lets say there was a BankAccount class.  That BankAccount class has an attribute called &amp;quot;Balance&amp;quot;, which simply contains the balance value for that account.  But later, the policy of the BankAccount changes, such that the balance is not a stored value, but must be computed by adding multiple values together.  &lt;br /&gt;
&lt;br /&gt;
In implementations that do not support the Uniform Access Principal, the accessing of that data could go from bankAcnt.Balance to bankAcnt.GetBalance(), thus 'breaking' any code that was depending on the balance property.&lt;br /&gt;
&lt;br /&gt;
However, with an implementation that utilizes the Uniform Access Principal, this change will not be a problem.  Be it a stored value, or a value computed in a method call, the accessing of this data could always be done with the same syntax.&lt;br /&gt;
&lt;br /&gt;
==Disadvantages of the Uniform Access Principle==&lt;br /&gt;
Although it is a long-held tenet of good object oriented design, there can be some drawbacks to using the Uniform Access Principal. &lt;br /&gt;
&lt;br /&gt;
===Writing Properties===&lt;br /&gt;
Setter methods are much easier to implement than setting a field that could be an attribute or could be associated with a method. Because of this inherent ambiguity, the language will probably not be able to determine how to handle a field being set on its own. The only good and consistent solution is to enforce the rule that the designer must specify how to handle an assignment for each method that is written. This can be burdensome on the original designer.[http://www.eiffel.com/general/column/2005/Sept_October.html]&lt;br /&gt;
&lt;br /&gt;
===Performance Issues===&lt;br /&gt;
When retrieving data from a class that utilizes the Uniform Access Principal, it could potentially mask or obfuscate a performance hit the user was not anticipating.  Consider a scenario where a piece of code needs to find the highest temperature value from a collection of many years worth of readings.  A non-uniform access implementation might read something like weather.getHighestTempFromAllReadings(). An implementation using the Uniform Access Principal would likely look more like &amp;quot;weather.HighTemp&amp;quot;.  &lt;br /&gt;
&lt;br /&gt;
The second option makes it appear that the highest temperature is just a value kept track of in the object, when in fact the data is off in a massive collection that must be searched.  The user might be surprised that &amp;quot;weather.HighTemp&amp;quot; takes a long time to return a value. However, to a user invoking &amp;quot;weather.getHighestTempFromAllReadings()&amp;quot; it should be apparent that the method call is busy searching through millions of records and will return a value once it is found.&lt;br /&gt;
&lt;br /&gt;
===Class Maintenance===&lt;br /&gt;
Maintaining code using the Uniform Access Principle might be difficult, especially if a different programmer originally designed the module.  It would be unclear to the maintainer which values are computed and which are just stored.  Whereas, in implementations where methods and attributes are clearly different, it would be easier to understand what was what.&lt;br /&gt;
&lt;br /&gt;
===Language Restrictions===&lt;br /&gt;
It is actually impossible to utilize the Uniform Access Principle in some languages.  For example, in Java fields and methods are kept in different namespaces.  This means that fields and methods can have the same names.  And because they are not restricted by these names, a field named myValue is completely independent from a method named myValue().  &lt;br /&gt;
&lt;br /&gt;
==Code Examples==&lt;br /&gt;
&lt;br /&gt;
===Ruby===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;ruby&amp;quot;&amp;gt;&lt;br /&gt;
class Foo&lt;br /&gt;
  attr_reader :x&lt;br /&gt;
  def initialize(x)&lt;br /&gt;
    @x = x&lt;br /&gt;
  end&lt;br /&gt;
  def squared_x&lt;br /&gt;
    return @x * @x&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
y = Foo.new(2)&lt;br /&gt;
puts y.x&lt;br /&gt;
puts y.squared_x&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
This outputs:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
2&lt;br /&gt;
4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==References==&lt;/div&gt;</summary>
		<author><name>Eeled</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_19_ee&amp;diff=29346</id>
		<title>CSC/ECE 517 Fall 2009/wiki3 19 ee</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_19_ee&amp;diff=29346"/>
		<updated>2009-11-19T02:26:38Z</updated>

		<summary type="html">&lt;p&gt;Eeled: /* Uniform Access Principle */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Uniform Access Principle=&lt;br /&gt;
&lt;br /&gt;
The '''Uniform Access Principle''' states that any attribute of a module (usually a class) should be accessed with the same syntax, regardless of the nature of the data.  Simply put, when a consumer reads or writes a value, they should not know (or care) weather they accessing a variable or invoking a method.  Thus, no matter how the module internally handles the data, externally the information is always accessed uniformly.&lt;br /&gt;
&lt;br /&gt;
==Origin of the Uniform Access Principle==&lt;br /&gt;
The Uniform Access Principle was created by the French engineer Bertrand Meyer.  Meyer is known to be a strong proponent of object oriented programming, and in fact was one of the earliest and most outspoken champions of OO.  His book ''Object-Oriented Software Construction'', first published in 1988, is considered to be a foundational publication of the object oriented programming movement.[http://en.wikipedia.org/wiki/Bertrand_Meyer]  It was in this book that he put forth the uniform access principal by stating &amp;quot;All services offered by a module should be available through a uniform notation, which does not betray whether they are implemented through storage or through computation.&amp;quot;[http://en.wikipedia.org/wiki/Uniform_access_principle]&lt;br /&gt;
&lt;br /&gt;
==Advantages of the Uniform Access Principle==&lt;br /&gt;
&lt;br /&gt;
There are many advantages associated with using the Uniform Access Principal when writing software.&lt;br /&gt;
&lt;br /&gt;
===Reading Properties===&lt;br /&gt;
Reading values (or getting) from an object is a syntactic cinch in code that uses the Uniform Access Principal.  Just refer to the field that holds the relevant data and the information is accessible.  This is a very simple way of interfacing with an external class. &lt;br /&gt;
&lt;br /&gt;
===Ease of Understanding===&lt;br /&gt;
Accessing data from a class can be confusing if the user does not know how the data is stored.  For example, in C# it is often hard to remember how to access the number of items in a collection - is it collection.Count or collection.Count()?  It turns out that the syntax is collection.Count for a generic collection, but it is collection.Count() for an enumerable collection.[http://dotnetperls.com/count-array]&lt;br /&gt;
&lt;br /&gt;
This difference in syntax can be confusing to a user trying to access the data within an otherwise opaque object.  If this data was uniformly accessible, it would be much less confusing. &lt;br /&gt;
&lt;br /&gt;
===Convenience of Interface===&lt;br /&gt;
Similarly, it is convenient for a user to not have to remember details of an objects implementation to access data within the object.  If the Uniform Access Principal is exercised, the programmer does not need to keep track of which values are computed in methods and which are just attributes.  A user can simply access the data named what they are interested in.&lt;br /&gt;
&lt;br /&gt;
===Maintainability of Interface===&lt;br /&gt;
Utilizing the Uniform Access Principal also aids in maintaining (reads 'not breaking') existing interfaces.  For example, lets say there was a BankAccount class.  That BankAccount class has an attribute called &amp;quot;Balance&amp;quot;, which simply contains the balance value for that account.  But later, the policy of the BankAccount changes, such that the balance is not a stored value, but must be computed by adding multiple values together.  &lt;br /&gt;
&lt;br /&gt;
In implementations that do not support the Uniform Access Principal, the accessing of that data could go from bankAcnt.Balance to bankAcnt.GetBalance(), thus 'breaking' any code that was depending on the balance property.&lt;br /&gt;
&lt;br /&gt;
However, with an implementation that utilizes the Uniform Access Principal, this change will not be a problem.  Be it a stored value, or a value computed in a method call, the accessing of this data could always be done with the same syntax.&lt;br /&gt;
&lt;br /&gt;
==Disadvantages of the Uniform Access Principle==&lt;br /&gt;
Although it is a long-held tenet of good object oriented design, there can be some drawbacks to using the Uniform Access Principal. &lt;br /&gt;
&lt;br /&gt;
===Writing Properties===&lt;br /&gt;
Setter methods are much easier to implement than setting a field that could be an attribute or could be associated with a method. Because of this inherent ambiguity, the language will probably not be able to determine how to handle a field being set on its own. The only good and consistent solution is to enforce the rule that the designer must specify how to handle an assignment for each method that is written. This can be burdensome on the original designer.[http://www.eiffel.com/general/column/2005/Sept_October.html]&lt;br /&gt;
&lt;br /&gt;
===Performance Issues===&lt;br /&gt;
When retrieving data from a class that utilizes the Uniform Access Principal, it could potentially mask or obfuscate a performance hit the user was not anticipating.  Consider a scenario where a piece of code needs to find the highest temperature value from a collection of many years worth of readings.  A non-uniform access implementation might read something like weather.getHighestTempFromAllReadings(). An implementation using the Uniform Access Principal would likely look more like &amp;quot;weather.HighTemp&amp;quot;.  &lt;br /&gt;
&lt;br /&gt;
The second option makes it appear that the highest temperature is just a value kept track of in the object, when in fact the data is off in a massive collection that must be searched.  The user might be surprised that &amp;quot;weather.HighTemp&amp;quot; takes a long time to return a value. However, to a user invoking &amp;quot;weather.getHighestTempFromAllReadings()&amp;quot; it should be apparent that the method call is busy searching through millions of records and will return a value once it is found.&lt;br /&gt;
&lt;br /&gt;
===Class Maintenance===&lt;br /&gt;
Maintaining code using the Uniform Access Principle might be difficult, especially if a different programmer originally designed the module.  It would be unclear to the maintainer which values are computed and which are just stored.  Whereas, in implementations where methods and attributes are clearly different, it would be easier to understand what was what.&lt;br /&gt;
&lt;br /&gt;
===Language Restrictions===&lt;br /&gt;
It is actually impossible to utilize the Uniform Access Principle in some languages.  For example, in Java fields and methods are kept in different namespaces.  This means that fields and methods can have the same names.  And because they are not restricted by these names, a field named myValue is completely independent from a method named myValue().  &lt;br /&gt;
&lt;br /&gt;
==Code Examples==&lt;br /&gt;
&lt;br /&gt;
==References==&lt;/div&gt;</summary>
		<author><name>Eeled</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_19_ee&amp;diff=29344</id>
		<title>CSC/ECE 517 Fall 2009/wiki3 19 ee</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_19_ee&amp;diff=29344"/>
		<updated>2009-11-19T02:25:54Z</updated>

		<summary type="html">&lt;p&gt;Eeled: /* Uniform Access Principle */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Uniform Access Principle=&lt;br /&gt;
&lt;br /&gt;
The '''Uniform Access Principle''' states that any attribute of a module (usually a class) should be accessed with the same syntax, regardless of the nature of the data.  Simply put, when a consumer reads or writes a value, they should not know (or care) weather they accessing a variable or invoking a method.  Thus, no matter how the module internally handles the data, externally the information is always accessed uniformly.&lt;br /&gt;
&lt;br /&gt;
==Origin of the Uniform Access Principle==&lt;br /&gt;
The Uniform Access Principle was created by the French engineer Bertrand Meyer.  Meyer is known to be a strong proponent of object oriented programming, and in fact was one of the earliest and most outspoken champions of OO.  His book ''Object-Oriented Software Construction'', first published in 1988, is considered to be a foundational publication of the object oriented programming movement.[http://en.wikipedia.org/wiki/Bertrand_Meyer]  It was in this book that he put forth the uniform access principal by stating &amp;quot;All services offered by a module should be available through a uniform notation, which does not betray whether they are implemented through storage or through computation.&amp;quot;[http://en.wikipedia.org/wiki/Uniform_access_principle]&lt;br /&gt;
&lt;br /&gt;
==Advantages of the Uniform Access Principle==&lt;br /&gt;
&lt;br /&gt;
There are many advantages associated with using the Uniform Access Principal when writing software.&lt;br /&gt;
&lt;br /&gt;
===Reading Properties===&lt;br /&gt;
Reading values (or getting) from an object is a syntactic cinch in code that uses the Uniform Access Principal.  Just refer to the field that holds the relevant data and the information is accessible.  This is a very simple way of interfacing with an external class. &lt;br /&gt;
&lt;br /&gt;
===Ease of Understanding===&lt;br /&gt;
Accessing data from a class can be confusing if the user does not know how the data is stored.  For example, in C# it is often hard to remember how to access the number of items in a collection - is it collection.Count or collection.Count()?  It turns out that the syntax is collection.Count for a generic collection, but it is collection.Count() for an enumerable collection.[http://dotnetperls.com/count-array]&lt;br /&gt;
&lt;br /&gt;
This difference in syntax can be confusing to a user trying to access the data within an otherwise opaque object.  If this data was uniformly accessible, it would be much less confusing. &lt;br /&gt;
&lt;br /&gt;
===Convenience of Interface===&lt;br /&gt;
Similarly, it is convenient for a user to not have to remember details of an objects implementation to access data within the object.  If the Uniform Access Principal is exercised, the programmer does not need to keep track of which values are computed in methods and which are just attributes.  A user can simply access the data named what they are interested in.&lt;br /&gt;
&lt;br /&gt;
===Maintainability of Interface===&lt;br /&gt;
Utilizing the Uniform Access Principal also aids in maintaining (reads 'not breaking') existing interfaces.  For example, lets say there was a BankAccount class.  That BankAccount class has an attribute called &amp;quot;Balance&amp;quot;, which simply contains the balance value for that account.  But later, the policy of the BankAccount changes, such that the balance is not a stored value, but must be computed by adding multiple values together.  &lt;br /&gt;
&lt;br /&gt;
In implementations that do not support the Uniform Access Principal, the accessing of that data could go from bankAcnt.Balance to bankAcnt.GetBalance(), thus 'breaking' any code that was depending on the balance property.&lt;br /&gt;
&lt;br /&gt;
However, with an implementation that utilizes the Uniform Access Principal, this change will not be a problem.  Be it a stored value, or a value computed in a method call, the accessing of this data could always be done with the same syntax.&lt;br /&gt;
&lt;br /&gt;
==Disadvantages of the Uniform Access Principle==&lt;br /&gt;
Although it is a long-held tenet of good object oriented design, there can be some drawbacks to using the Uniform Access Principal. &lt;br /&gt;
&lt;br /&gt;
===Writing Properties===&lt;br /&gt;
 Setter methods are much easier to implement than setting a field that could be an attribute or could be associated with a method. Because of this inherent ambiguity, the language will probably not be able to determine how to handle a field being set on its own. The only good and consistent solution is to enforce the rule that the designer must specify how to handle an assignment for each method that is written. This can be burdensome on the original designer.[http://www.eiffel.com/general/column/2005/Sept_October.html]&lt;br /&gt;
&lt;br /&gt;
===Performance Issues===&lt;br /&gt;
When retrieving data from a class that utilizes the Uniform Access Principal, it could potentially mask or obfuscate a performance hit the user was not anticipating.  Consider a scenario where a piece of code needs to find the highest temperature value from a collection of many years worth of readings.  A non-uniform access implementation might read something like weather.getHighestTempFromAllReadings(). An implementation using the Uniform Access Principal would likely look more like &amp;quot;weather.HighTemp&amp;quot;.  &lt;br /&gt;
&lt;br /&gt;
The second option makes it appear that the highest temperature is just a value kept track of in the object, when in fact the data is off in a massive collection that must be searched.  The user might be surprised that &amp;quot;weather.HighTemp&amp;quot; takes a long time to return a value. However, to a user invoking &amp;quot;weather.getHighestTempFromAllReadings()&amp;quot; it should be apparent that the method call is busy searching through millions of records and will return a value once it is found.&lt;br /&gt;
&lt;br /&gt;
===Class Maintenance===&lt;br /&gt;
Maintaining code using the Uniform Access Principle might be difficult, especially if a different programmer originally designed the module.  It would be unclear to the maintainer which values are computed and which are just stored.  Whereas, in implementations where methods and attributes are clearly different, it would be easier to understand what was what.&lt;br /&gt;
&lt;br /&gt;
===Language Restrictions===&lt;br /&gt;
It is actually impossible to utilize the Uniform Access Principle in some languages.  For example, in Java fields and methods are kept in different namespaces.  This means that fields and methods can have the same names.  And because they are not restricted by these names, a field named myValue is completely independent from a method named myValue().  &lt;br /&gt;
&lt;br /&gt;
==Code Examples==&lt;br /&gt;
&lt;br /&gt;
==References==&lt;/div&gt;</summary>
		<author><name>Eeled</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_19_ee&amp;diff=29316</id>
		<title>CSC/ECE 517 Fall 2009/wiki3 19 ee</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_19_ee&amp;diff=29316"/>
		<updated>2009-11-19T02:18:09Z</updated>

		<summary type="html">&lt;p&gt;Eeled: /* Uniform Access Principle */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Uniform Access Principle=&lt;br /&gt;
&lt;br /&gt;
The '''Uniform Access Principle''' states that any attribute of a module (usually a class) should be accessed with the same syntax, regardless of the nature of the data.  Simply put, when a consumer reads or writes a value, they should not know (or care) weather they accessing a variable or invoking a method.  Thus, no matter how the module internally handles the data, externally the information is always accessed uniformly.&lt;br /&gt;
&lt;br /&gt;
==Origin of the Uniform Access Principle==&lt;br /&gt;
The Uniform Access Principle was created by the French engineer Bertrand Meyer.  Meyer is known to be a strong proponent of object oriented programming, and in fact was one of the earliest and most outspoken champions of OO.  His book ''Object-Oriented Software Construction'', first published in 1988, is considered to be a foundational publication of the object oriented programming movement.[http://en.wikipedia.org/wiki/Bertrand_Meyer]  It was in this book that he put forth the uniform access principal by stating &amp;quot;All services offered by a module should be available through a uniform notation, which does not betray whether they are implemented through storage or through computation.&amp;quot;[http://en.wikipedia.org/wiki/Uniform_access_principle]&lt;br /&gt;
&lt;br /&gt;
==Advantages of the Uniform Access Principle==&lt;br /&gt;
&lt;br /&gt;
There are many advantages associated with using the Uniform Access Principal when writing software.&lt;br /&gt;
&lt;br /&gt;
===Reading Properties===&lt;br /&gt;
Reading values (or getting) from an object is a syntactic cinch in code that uses the Uniform Access Principal.  Just refer to the field that holds the relevant data and the information is accessible.  This is a very simple way of interfacing with an external class. &lt;br /&gt;
&lt;br /&gt;
===Ease of Understanding===&lt;br /&gt;
Accessing data from a class can be confusing if the user does not know how the data is stored.  For example, in C# it is often hard to remember how to access the number of items in a collection - is it collection.Count or collection.Count()?  It turns out that the syntax is collection.Count for a generic collection, but it is collection.Count() for an enumerable collection.[http://dotnetperls.com/count-array]&lt;br /&gt;
&lt;br /&gt;
This difference in syntax can be confusing to a user trying to access the data within an otherwise opaque object.  If this data was uniformly accessible, it would be much less confusing. &lt;br /&gt;
&lt;br /&gt;
===Convenience of Interface===&lt;br /&gt;
Similarly, it is convenient for a user to not have to remember details of an objects implementation to access data within the object.  If the Uniform Access Principal is exercised, the programmer does not need to keep track of which values are computed in methods and which are just attributes.  A user can simply access the data named what they are interested in.&lt;br /&gt;
&lt;br /&gt;
===Maintainability of Interface===&lt;br /&gt;
Utilizing the Uniform Access Principal also aids in maintaining (reads 'not breaking') existing interfaces.  For example, lets say there was a BankAccount class.  That BankAccount class has an attribute called &amp;quot;Balance&amp;quot;, which simply contains the balance value for that account.  But later, the policy of the BankAccount changes, such that the balance is not a stored value, but must be computed by adding multiple values together.  &lt;br /&gt;
&lt;br /&gt;
In implementations that do not support the Uniform Access Principal, the accessing of that data could go from bankAcnt.Balance to bankAcnt.GetBalance(), thus 'breaking' any code that was depending on the balance property.&lt;br /&gt;
&lt;br /&gt;
However, with an implementation that utilizes the Uniform Access Principal, this change will not be a problem.  Be it a stored value, or a value computed in a method call, the accessing of this data could always be done with the same syntax.&lt;br /&gt;
&lt;br /&gt;
==Disadvantages of the Uniform Access Principle==&lt;br /&gt;
Although it is a long-held tenet of good object oriented design, there can be some drawbacks to using the Uniform Access Principal. &lt;br /&gt;
&lt;br /&gt;
===Writing Properties===&lt;br /&gt;
Although the Uniform Access Principle makes reading data easy, writing values (or setting) can be tricky.   Because the language will probably not be able to determine how to interpret an a [http://www.eiffel.com/general/column/2005/Sept_October.html]&lt;br /&gt;
&lt;br /&gt;
===Performance Issues===&lt;br /&gt;
When retrieving data from a class that utilizes the Uniform Access Principal, it could potentially mask or obfuscate a performance hit the user was not anticipating.  Consider a scenario where a piece of code needs to find the highest temperature value from a collection of many years worth of readings.  A non-uniform access implementation might read something like weather.getHighestTempFromAllReadings(). An implementation using the Uniform Access Principal would likely look more like &amp;quot;weather.HighTemp&amp;quot;.  &lt;br /&gt;
&lt;br /&gt;
The second option makes it appear that the highest temperature is just a value kept track of in the object, when in fact the data is off in a massive collection that must be searched.  The user might be surprised that &amp;quot;weather.HighTemp&amp;quot; takes a long time to return a value. However, to a user invoking &amp;quot;weather.getHighestTempFromAllReadings()&amp;quot; it should be apparent that the method call is busy searching through millions of records and will return a value once it is found.&lt;br /&gt;
&lt;br /&gt;
===Class Maintenance===&lt;br /&gt;
Maintaining code using the Uniform Access Principle might be difficult, especially if a different programmer originally designed the module.  It would be unclear to the maintainer which values are computed and which are just stored.  Whereas, in implementations where methods and attributes are clearly different, it would be easier to understand what was what.&lt;br /&gt;
&lt;br /&gt;
===Language Restrictions===&lt;br /&gt;
It is actually impossible to utilize the Uniform Access Principle in some languages.  For example, in Java fields and methods are kept in different namespaces.  This means that fields and methods can have the same names.  And because they are not restricted by these names, a field named myValue is completely independent from a method named myValue().  &lt;br /&gt;
&lt;br /&gt;
==Code Examples==&lt;br /&gt;
&lt;br /&gt;
==References==&lt;/div&gt;</summary>
		<author><name>Eeled</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_19_ee&amp;diff=29217</id>
		<title>CSC/ECE 517 Fall 2009/wiki3 19 ee</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_19_ee&amp;diff=29217"/>
		<updated>2009-11-19T01:52:47Z</updated>

		<summary type="html">&lt;p&gt;Eeled: /* Uniform Access Principle */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Uniform Access Principle=&lt;br /&gt;
&lt;br /&gt;
The '''Uniform Access Principle''' states that any attribute of a module (usually a class) should be accessed with the same syntax, regardless of the nature of the data.  Simply put, when a consumer reads or writes a value, they should not know (or care) weather they accessing a variable or invoking a method.  Thus, no matter how the module internally handles the data, externally the information is always accessed uniformly.&lt;br /&gt;
&lt;br /&gt;
==Origin of the Uniform Access Principle==&lt;br /&gt;
The Uniform Access Principle was created by the French engineer Bertrand Meyer.  Meyer is known to be a strong proponent of object oriented programming, and in fact was one of the earliest and most outspoken champions of OO.  His book ''Object-Oriented Software Construction'', first published in 1988, is considered to be a foundational publication of the object oriented programming movement.[http://en.wikipedia.org/wiki/Bertrand_Meyer]  It was in this book that he put forth the uniform access principal by stating &amp;quot;All services offered by a module should be available through a uniform notation, which does not betray whether they are implemented through storage or through computation.&amp;quot;[http://en.wikipedia.org/wiki/Uniform_access_principle]&lt;br /&gt;
&lt;br /&gt;
==Advantages of the Uniform Access Principle==&lt;br /&gt;
&lt;br /&gt;
There are many advantages associated with using the Uniform Access Principal when writing software.&lt;br /&gt;
&lt;br /&gt;
===Reading Properties===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Ease of Understanding===&lt;br /&gt;
Accessing data from a class can be confusing if the user does not know how the data is stored.  For example, in C# it is often hard to remember how to access the number of items in a collection - is it collection.Count or collection.Count()?  It turns out that the syntax is collection.Count for a generic collection, but it is collection.Count() for an enumerable collection.[http://dotnetperls.com/count-array]&lt;br /&gt;
&lt;br /&gt;
This difference in syntax can be confusing to a user trying to access the data within an otherwise opaque object.  If this data was uniformly accessible, it would be much less confusing. &lt;br /&gt;
&lt;br /&gt;
===Convenience of Interface===&lt;br /&gt;
Similarly, it is convenient for a user to not have to remember details of an objects implementation to access data within the object.  If the Uniform Access Principal is exercised, the programmer does not need to keep track of which values are computed in methods and which are just attributes.  A user can simply access the data named what they are interested in.&lt;br /&gt;
&lt;br /&gt;
===Maintainability of Interface===&lt;br /&gt;
Utilizing the Uniform Access Principal also aids in maintaining (reads 'not breaking') existing interfaces.  For example, lets say there was a BankAccount class.  That BankAccount class has an attribute called &amp;quot;Balance&amp;quot;, which simply contains the balance value for that account.  But later, the policy of the BankAccount changes, such that the balance is not a stored value, but must be computed by adding multiple values together.  &lt;br /&gt;
&lt;br /&gt;
In implementations that do not support the Uniform Access Principal, the accessing of that data could go from bankAcnt.Balance to bankAcnt.GetBalance(), thus 'breaking' any code that was depending on the balance property.&lt;br /&gt;
&lt;br /&gt;
However, with an implementation that utilizes the Uniform Access Principal, this change will not be a problem.  Be it a stored value, or a value computed in a method call, the accessing of this data could always be done with the same syntax.&lt;br /&gt;
&lt;br /&gt;
==Disadvantages of the Uniform Access Principle==&lt;br /&gt;
Although it is a long-held tenet of good object oriented design, there can be some drawbacks to the use of the Uniform Access Principal. &lt;br /&gt;
&lt;br /&gt;
===Writing Properties===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Performance Issues===&lt;br /&gt;
When retrieving data from a class that utilizes the Uniform Access Principal, it could potentially mask or obfuscate a performance hit the user was not anticipating.  Consider a scenario where a piece of code needs to find the highest temperature value from a collection of many years worth of readings.  A non-uniform access implementation might read something like weather.getHighestTempFromAllReadings(). An implementation using the Uniform Access Principal would likely look more like &amp;quot;weather.HighTemp&amp;quot;.  &lt;br /&gt;
&lt;br /&gt;
The second option makes it appear that the highest temperature is just a value kept track of in the object, when in fact the data is off in a massive collection that must be searched.  The user might be surprised that &amp;quot;weather.HighTemp&amp;quot; takes a long time to return a value. However, to a user invoking &amp;quot;weather.getHighestTempFromAllReadings()&amp;quot; it should be apparent that the method call is busy searching through millions of records and will return a value once it is found.&lt;br /&gt;
&lt;br /&gt;
===Class Maintenance===&lt;br /&gt;
===Language Restrictions===&lt;br /&gt;
&lt;br /&gt;
==Code Examples==&lt;br /&gt;
&lt;br /&gt;
==References==&lt;/div&gt;</summary>
		<author><name>Eeled</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_19_ee&amp;diff=29160</id>
		<title>CSC/ECE 517 Fall 2009/wiki3 19 ee</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_19_ee&amp;diff=29160"/>
		<updated>2009-11-19T01:37:07Z</updated>

		<summary type="html">&lt;p&gt;Eeled: /* Uniform Access Principle */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Uniform Access Principle=&lt;br /&gt;
&lt;br /&gt;
The '''Uniform Access Principle''' states that any attribute of a module (usually a class) should be accessed with the same syntax, regardless of the nature of the data.  Simply put, when a consumer reads or writes a value, they should not know (or care) weather they accessing a variable or invoking a method.  Thus, no matter how the module internally handles the data, externally the information is always accessed uniformly.&lt;br /&gt;
&lt;br /&gt;
==Origin of the Uniform Access Principle==&lt;br /&gt;
The Uniform Access Principle was created by the French engineer Bertrand Meyer.  Meyer is known to be a strong proponent of object oriented programming, and in fact was one of the earliest and most outspoken champions of OO.  His book ''Object-Oriented Software Construction'', first published in 1988, is considered to be a foundational publication of the object oriented programming movement.[http://en.wikipedia.org/wiki/Bertrand_Meyer]  It was in this book that he put forth the uniform access principal by stating &amp;quot;All services offered by a module should be available through a uniform notation, which does not betray whether they are implemented through storage or through computation.&amp;quot;[http://en.wikipedia.org/wiki/Uniform_access_principle]&lt;br /&gt;
&lt;br /&gt;
==Advantages of the Uniform Access Principle==&lt;br /&gt;
&lt;br /&gt;
There are many advantages associated with using the Uniform Access Principal when writing software.&lt;br /&gt;
&lt;br /&gt;
===Reading Properties===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Ease of Understanding===&lt;br /&gt;
Accessing data from a class can be confusing if the user does not know how the data is stored.  For example, in C# it is often hard to remember how to access the number of items in a collection - is it collection.Count or collection.Count()?  It turns out that the syntax is collection.Count for a generic collection, but it is collection.Count() for an enumerable collection.[http://dotnetperls.com/count-array]&lt;br /&gt;
&lt;br /&gt;
This difference in syntax can be confusing to a user trying to access the data within an otherwise opaque object.  If this data was uniformly accessible, it would be much less confusing. &lt;br /&gt;
&lt;br /&gt;
===Convenience of Interface===&lt;br /&gt;
Similarly, it is convenient for a user to not have to remember details of an objects implementation to access data within the object.  If the Uniform Access Principal is exercised, the programmer does not need to keep track of which values are computed in methods and which are just attributes.  A user can simply access the data named what they are interested in.&lt;br /&gt;
&lt;br /&gt;
===Maintainability of Interface===&lt;br /&gt;
Utilizing the Uniform Access Principal also aids in maintaining (reads 'not breaking') existing interfaces.  For example, lets say there was a BankAccount class.  That BankAccount class has an attribute called &amp;quot;Balance&amp;quot;, which simply contains the balance value for that account.  But later, the policy of the BankAccount changes, such that the balance is not a stored value, but must be computed by adding multiple values.  &lt;br /&gt;
&lt;br /&gt;
In implementations that do not support the Uniform Access Principal, the accessing of that data could go from bankAcnt.Balance to bankAcnt.GetBalance(), thus 'breaking' any code that was depending on the balance property.&lt;br /&gt;
&lt;br /&gt;
However, with an implementation that utilizes the Uniform Access Principal, this change will not be a problem.  Be it a stored value, or a value computed in a method call, the accessing of this data could always be done with the same syntax.&lt;br /&gt;
&lt;br /&gt;
==Disadvantages of the Uniform Access Principle==&lt;br /&gt;
&lt;br /&gt;
===Writing Properties===&lt;br /&gt;
===Performance Issues===&lt;br /&gt;
===Class Maintenance===&lt;br /&gt;
===Language Restrictions===&lt;br /&gt;
&lt;br /&gt;
==Code Examples==&lt;br /&gt;
&lt;br /&gt;
==References==&lt;/div&gt;</summary>
		<author><name>Eeled</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_19_ee&amp;diff=29104</id>
		<title>CSC/ECE 517 Fall 2009/wiki3 19 ee</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_19_ee&amp;diff=29104"/>
		<updated>2009-11-19T01:16:39Z</updated>

		<summary type="html">&lt;p&gt;Eeled: /* Uniform Access Principle */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Uniform Access Principle=&lt;br /&gt;
&lt;br /&gt;
The '''Uniform Access Principle''' states that any attribute of a module (usually a class) should be accessed with the same syntax, regardless of the nature of the data.  Simply put, when a consumer reads or writes a value, they should not know (or care) weather they accessing a variable or invoking a method.  Thus, no matter how the module internally handles the data, externally the information is always accessed uniformly.&lt;br /&gt;
&lt;br /&gt;
==Origin of the Uniform Access Principle==&lt;br /&gt;
The Uniform Access Principle was created by the French engineer Bertrand Meyer.  Meyer is known to be a strong proponent of object oriented programming, and in fact was one of the earliest and most outspoken champions of OO.  His book ''Object-Oriented Software Construction'', first published in 1988, is considered to be a foundational publication of the object oriented programming movement.[http://en.wikipedia.org/wiki/Bertrand_Meyer]  It was in this book that he put forth the uniform access principal by stating &amp;quot;All services offered by a module should be available through a uniform notation, which does not betray whether they are implemented through storage or through computation.&amp;quot;[http://en.wikipedia.org/wiki/Uniform_access_principle]&lt;br /&gt;
&lt;br /&gt;
==Advantages of the Uniform Access Principle==&lt;br /&gt;
&lt;br /&gt;
There are many advantages associated with using the Uniform Access Principal when writing software.&lt;br /&gt;
&lt;br /&gt;
===Reading Properties===&lt;br /&gt;
===Ease of Understanding===&lt;br /&gt;
===Convenience of Interface===&lt;br /&gt;
===Maintainability of Interface===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Disadvantages of the Uniform Access Principle==&lt;br /&gt;
&lt;br /&gt;
===Writing Properties===&lt;br /&gt;
===Performance Issues===&lt;br /&gt;
===Class Maintenance===&lt;br /&gt;
===Language Restrictions===&lt;br /&gt;
&lt;br /&gt;
==Code Examples==&lt;br /&gt;
&lt;br /&gt;
==References==&lt;/div&gt;</summary>
		<author><name>Eeled</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_19_ee&amp;diff=28908</id>
		<title>CSC/ECE 517 Fall 2009/wiki3 19 ee</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_19_ee&amp;diff=28908"/>
		<updated>2009-11-19T00:04:33Z</updated>

		<summary type="html">&lt;p&gt;Eeled: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Uniform Access Principle=&lt;br /&gt;
&lt;br /&gt;
The '''Uniform Access Principle''' states that...&lt;br /&gt;
&lt;br /&gt;
==Origin of the Uniform Access Principle==&lt;br /&gt;
&lt;br /&gt;
==Advantages of the Uniform Access Principle==&lt;br /&gt;
&lt;br /&gt;
===Ease of Understanding===&lt;br /&gt;
===Convenience of Interface===&lt;br /&gt;
===Maintainability of Interface===&lt;br /&gt;
&lt;br /&gt;
==Disadvantages of the Uniform Access Principle==&lt;br /&gt;
&lt;br /&gt;
===Performance Issues===&lt;br /&gt;
===Class Maintenance===&lt;br /&gt;
===Language Restrictions===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Code Examples==&lt;br /&gt;
&lt;br /&gt;
==References==&lt;/div&gt;</summary>
		<author><name>Eeled</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_6_ee&amp;diff=26295</id>
		<title>CSC/ECE 517 Fall 2009/wiki2 6 ee</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_6_ee&amp;diff=26295"/>
		<updated>2009-10-15T03:05:14Z</updated>

		<summary type="html">&lt;p&gt;Eeled: /* OCaml */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Hybrid Object Oriented Programing Languages=&lt;br /&gt;
&lt;br /&gt;
'''Hybrid Object Oriented Programming Languages''' are object oriented languages that also include one or more additional programing paradigms.  Commonly, hybrid object oriented languages include procedural and functional programing features, in addition to being object oriented.  Having multiple paradigms embraced in one language adds flexibility to the developer, letting them leverage the most appropriate programing methods, without having to switch languages.&lt;br /&gt;
&lt;br /&gt;
==Programing Paradigms==&lt;br /&gt;
Before delving into Hybrid Languages, here is a quick review of the paradigms we will be discussing. &lt;br /&gt;
&lt;br /&gt;
===Object Oriented Programming===&lt;br /&gt;
In Object Oriented Programming, code is grouped together into collections called Objects.  Objects keep track of data and contain methods relevant to the data of the object.  An object is described by a class.  In order for an object to be used, it must be instantiated from a class.  Objects can utilize other objects to help represent their data in meaningful ways (ie a school object can have many student objects).[http://www.codeproject.com/KB/architecture/OOP_Concepts_and_manymore.aspx#OOP]&lt;br /&gt;
&lt;br /&gt;
===Procedural Programming===&lt;br /&gt;
With procedural programming, operations are listed one after another in the order they are to be executed.  Procedural programming also incorporates the notion of functions, which are chucks of code that can be called repeatedly, usually to accomplish one specific task.  Functions take in data to be processed as arguments and output the result of the computation.  However, the output of a function can vary greatly, depending on the state of the program at any given moment.[http://knol.google.com/k/chris/procedural-programming/3qdf5q2hz62mx/93#]&lt;br /&gt;
&lt;br /&gt;
===Functional Programming===&lt;br /&gt;
Functional Programming has strong roots in mathematics and focuses on calculations.  Functions are called only to compute data and do not change the state of the program.  The output of functions in functional programming depend only on the arguments to the function, with no dependency on the state of the system.  Also, all variables are final - that is, once assigned to, they cannot be changed.  All these factors make functional programs very reliable and repeatable.[http://www.defmacro.org/ramblings/fp.html]&lt;br /&gt;
&lt;br /&gt;
==Hybrid Object Oriented Programming Languages==&lt;br /&gt;
The following Languages use Hybrid Object Oriented Programming Paradigms:&lt;br /&gt;
&lt;br /&gt;
===OCaml===&lt;br /&gt;
OCaml was an addition to the Caml programming language, which was itself derived from ML.  ML (Meta-Language) was originally developed as a highly functional programming language. It was used to assist with mathematical proofs. Caml was derived from ML to create a flexible programming language and it began to incorporate more procedural programming aspects.  Finally, OCaml was implemented, which added object oriented features such as multiple inheritance and module hierarchy management.[http://caml.inria.fr/about/history.html]&lt;br /&gt;
&lt;br /&gt;
====Design Considerations====&lt;br /&gt;
*By default, data in OCaml (variables, arrays, ect) are not modifiable, because of its roots in functional programming. However, to allow for more expressive procedural programming, variables are allowed to be declared as modifiable.&lt;br /&gt;
*To ensure safety, OCaml is statically typed and type matching is enforced at compile time.  This prevents many common run time errors, but does require attention to detail by the programmer.  This strong-typing is also true of objects in OCaml.  At compile time, OCaml makes sure that no object will receive a message it is not able to understand.&lt;br /&gt;
*OCaml allows for the definition of new data types using the concept of a data constructor.[http://caml.inria.fr/about/index.en.html]&lt;br /&gt;
&lt;br /&gt;
====Examples====&lt;br /&gt;
Basic class for Hello World program&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class hello_all =&lt;br /&gt;
  object (self)&lt;br /&gt;
    val hello = &amp;quot;Hi there&amp;quot;&lt;br /&gt;
  &lt;br /&gt;
  method greet =&lt;br /&gt;
    print_string hello&lt;br /&gt;
&lt;br /&gt;
  end;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
[http://www.ocaml-tutorial.org/objects]&lt;br /&gt;
&lt;br /&gt;
===Scala===&lt;br /&gt;
Scala was written from the ground up Martin Odersky.  It is completely interoperable with Java and naively compiles to Java byte code.  Because of this, any Scala program can invoke any Java library, which lets developers leverage a multitude of available Java resources, while working within the Scala language.[http://www.artima.com/weblogs/viewpost.jsp?thread=163733]&lt;br /&gt;
&lt;br /&gt;
====Design Considerations====&lt;br /&gt;
*Scala aims to allow programmers to leverage the universal compatibility and extensive library support of the java language, while using a compact, flexible and easy to use syntax&lt;br /&gt;
*For safety of data, Scala is statically typed&lt;br /&gt;
*For convenience, Scala does not require the type of a variable to be declared, the Scala compiler can infer the type&lt;br /&gt;
*Scala is a functional language, in that it allows function passing and nested functions&lt;br /&gt;
*But in order to act as an OO language, Scala also embraces the everything-is-an-object paradigm&lt;br /&gt;
*Scala allows for multiple inheritance using mixins&lt;br /&gt;
*Instead of interfaces, Scala uses the idea of &amp;quot;traits&amp;quot; which are like interfaces, but they ''can'' have fully defined methods[http://www.scala-lang.org/node/25]&lt;br /&gt;
&lt;br /&gt;
====Example====&lt;br /&gt;
&amp;quot;Fancy&amp;quot; Hello world:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Note that the arguments to the constructor are just after the class name&lt;br /&gt;
class FancyGreeter(greeting: String)&lt;br /&gt;
{&lt;br /&gt;
  def greet() = println(greeting)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
val g = new FancyGreeter(&amp;quot;Salutations, world&amp;quot;)&lt;br /&gt;
g.greet&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example using a trait&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
trait Introduction{&lt;br /&gt;
  def intro() = &amp;quot;Hello there&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
trait Excited extends Introduction {&lt;br /&gt;
  override def intro() = super.intro() + &amp;quot;!&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
[http://www.artima.com/scalazine/articles/steps.html]&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
#[http://www.codeproject.com/KB/architecture/OOP_Concepts_and_manymore.aspx#OOP Introduction to Object Oriented Programming Concepts]&lt;br /&gt;
#[http://knol.google.com/k/chris/procedural-programming/3qdf5q2hz62mx/93# Procedural Programming]&lt;br /&gt;
#[http://www.defmacro.org/ramblings/fp.html Functional Programming for the Rest Of Us]&lt;br /&gt;
#[http://caml.inria.fr/about/history.html A History of Caml]&lt;br /&gt;
#[http://caml.inria.fr/about/index.en.html About OCaml]&lt;br /&gt;
#[http://www.artima.com/weblogs/viewpost.jsp?thread=163733 A Brief History of Scala]&lt;br /&gt;
#[http://www.scala-lang.org/node/25 The Scala Programming Language]&lt;br /&gt;
#[http://www.artima.com/scalazine/articles/steps.html First Steps to Scala]&lt;/div&gt;</summary>
		<author><name>Eeled</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_6_ee&amp;diff=26287</id>
		<title>CSC/ECE 517 Fall 2009/wiki2 6 ee</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_6_ee&amp;diff=26287"/>
		<updated>2009-10-15T02:55:15Z</updated>

		<summary type="html">&lt;p&gt;Eeled: /* Hybrid Object Oriented Programming Languages */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Hybrid Object Oriented Programing Languages=&lt;br /&gt;
&lt;br /&gt;
'''Hybrid Object Oriented Programming Languages''' are object oriented languages that also include one or more additional programing paradigms.  Commonly, hybrid object oriented languages include procedural and functional programing features, in addition to being object oriented.  Having multiple paradigms embraced in one language adds flexibility to the developer, letting them leverage the most appropriate programing methods, without having to switch languages.&lt;br /&gt;
&lt;br /&gt;
==Programing Paradigms==&lt;br /&gt;
Before delving into Hybrid Languages, here is a quick review of the paradigms we will be discussing. &lt;br /&gt;
&lt;br /&gt;
===Object Oriented Programming===&lt;br /&gt;
In Object Oriented Programming, code is grouped together into collections called Objects.  Objects keep track of data and contain methods relevant to the data of the object.  An object is described by a class.  In order for an object to be used, it must be instantiated from a class.  Objects can utilize other objects to help represent their data in meaningful ways (ie a school object can have many student objects).[http://www.codeproject.com/KB/architecture/OOP_Concepts_and_manymore.aspx#OOP]&lt;br /&gt;
&lt;br /&gt;
===Procedural Programming===&lt;br /&gt;
With procedural programming, operations are listed one after another in the order they are to be executed.  Procedural programming also incorporates the notion of functions, which are chucks of code that can be called repeatedly, usually to accomplish one specific task.  Functions take in data to be processed as arguments and output the result of the computation.  However, the output of a function can vary greatly, depending on the state of the program at any given moment.[http://knol.google.com/k/chris/procedural-programming/3qdf5q2hz62mx/93#]&lt;br /&gt;
&lt;br /&gt;
===Functional Programming===&lt;br /&gt;
Functional Programming has strong roots in mathematics and focuses on calculations.  Functions are called only to compute data and do not change the state of the program.  The output of functions in functional programming depend only on the arguments to the function, with no dependency on the state of the system.  Also, all variables are final - that is, once assigned to, they cannot be changed.  All these factors make functional programs very reliable and repeatable.[http://www.defmacro.org/ramblings/fp.html]&lt;br /&gt;
&lt;br /&gt;
==Hybrid Object Oriented Programming Languages==&lt;br /&gt;
The following Languages use Hybrid Object Oriented Programming Paradigms:&lt;br /&gt;
&lt;br /&gt;
===OCaml===&lt;br /&gt;
OCaml was an addition to the Caml programming language, which was itself derived from ML.  ML (Meta-Language) was originally developed as a highly functional programming language. It was used to assist with mathematical proofs. Caml was derived from ML to create a flexible programming language and it began to incorporate more procedural programming aspects.  Finally, OCaml was implemented, which added object oriented features such as multiple inheritance and module hierarchy management.[http://caml.inria.fr/about/history.html]&lt;br /&gt;
&lt;br /&gt;
====Design Considerations====&lt;br /&gt;
*By default, data in OCaml (variables, arrays, ect) are not modifiable, because of its roots in functional programming. However, to allow for more expressive procedural programming, variables are allowed to be declared as modifiable.&lt;br /&gt;
*To ensure safety, OCaml is statically typed and type matching is enforced at compile time.  This prevents many common run time errors, but does require attention to detail by the programmer.  This strong-typing is also true of objects in OCaml.  At compile time, OCaml makes sure that no object will receive a message it is not able to understand.&lt;br /&gt;
*OCaml allows for the definition of new data types using the concept of a data constructor.[http://caml.inria.fr/about/index.en.html]&lt;br /&gt;
&lt;br /&gt;
====Examples====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class hello_all =&lt;br /&gt;
  object (self)&lt;br /&gt;
    val hello = &amp;quot;Hi there&amp;quot;&lt;br /&gt;
  &lt;br /&gt;
  method greet =&lt;br /&gt;
    print_string hello&lt;br /&gt;
&lt;br /&gt;
  end;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Scala===&lt;br /&gt;
Scala was written from the ground up Martin Odersky.  It is completely interoperable with Java and naively compiles to Java byte code.  Because of this, any Scala program can invoke any Java library, which lets developers leverage a multitude of available Java resources, while working within the Scala language.[http://www.artima.com/weblogs/viewpost.jsp?thread=163733]&lt;br /&gt;
&lt;br /&gt;
====Design Considerations====&lt;br /&gt;
*Scala aims to allow programmers to leverage the universal compatibility and extensive library support of the java language, while using a compact, flexible and easy to use syntax&lt;br /&gt;
*For safety of data, Scala is statically typed&lt;br /&gt;
*For convenience, Scala does not require the type of a variable to be declared, the Scala compiler can infer the type&lt;br /&gt;
*Scala is a functional language, in that it allows function passing and nested functions&lt;br /&gt;
*But in order to act as an OO language, Scala also embraces the everything-is-an-object paradigm&lt;br /&gt;
*Scala allows for multiple inheritance using mixins&lt;br /&gt;
*Instead of interfaces, Scala uses the idea of &amp;quot;traits&amp;quot; which are like interfaces, but they ''can'' have fully defined methods[http://www.scala-lang.org/node/25]&lt;br /&gt;
&lt;br /&gt;
====Example====&lt;br /&gt;
&amp;quot;Fancy&amp;quot; Hello world:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Note that the arguments to the constructor are just after the class name&lt;br /&gt;
class FancyGreeter(greeting: String)&lt;br /&gt;
{&lt;br /&gt;
  def greet() = println(greeting)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
val g = new FancyGreeter(&amp;quot;Salutations, world&amp;quot;)&lt;br /&gt;
g.greet&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example using a trait&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
trait Introduction{&lt;br /&gt;
  def intro() = &amp;quot;Hello there&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
trait Excited extends Introduction {&lt;br /&gt;
  override def intro() = super.intro() + &amp;quot;!&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
[http://www.artima.com/scalazine/articles/steps.html]&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
#[http://www.codeproject.com/KB/architecture/OOP_Concepts_and_manymore.aspx#OOP Introduction to Object Oriented Programming Concepts]&lt;br /&gt;
#[http://knol.google.com/k/chris/procedural-programming/3qdf5q2hz62mx/93# Procedural Programming]&lt;br /&gt;
#[http://www.defmacro.org/ramblings/fp.html Functional Programming for the Rest Of Us]&lt;br /&gt;
#[http://caml.inria.fr/about/history.html A History of Caml]&lt;br /&gt;
#[http://caml.inria.fr/about/index.en.html About OCaml]&lt;br /&gt;
#[http://www.artima.com/weblogs/viewpost.jsp?thread=163733 A Brief History of Scala]&lt;br /&gt;
#[http://www.scala-lang.org/node/25 The Scala Programming Language]&lt;br /&gt;
#[http://www.artima.com/scalazine/articles/steps.html First Steps to Scala]&lt;/div&gt;</summary>
		<author><name>Eeled</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_6_ee&amp;diff=26269</id>
		<title>CSC/ECE 517 Fall 2009/wiki2 6 ee</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_6_ee&amp;diff=26269"/>
		<updated>2009-10-15T02:32:49Z</updated>

		<summary type="html">&lt;p&gt;Eeled: /* OCaml */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Hybrid Object Oriented Programing Languages=&lt;br /&gt;
&lt;br /&gt;
'''Hybrid Object Oriented Programming Languages''' are object oriented languages that also include one or more additional programing paradigms.  Commonly, hybrid object oriented languages include procedural and functional programing features, in addition to being object oriented.  Having multiple paradigms embraced in one language adds flexibility to the developer, letting them leverage the most appropriate programing methods, without having to switch languages.&lt;br /&gt;
&lt;br /&gt;
==Programing Paradigms==&lt;br /&gt;
Before delving into Hybrid Languages, here is a quick review of the paradigms we will be discussing. &lt;br /&gt;
&lt;br /&gt;
===Object Oriented Programming===&lt;br /&gt;
In Object Oriented Programming, code is grouped together into collections called Objects.  Objects keep track of data and contain methods relevant to the data of the object.  An object is described by a class.  In order for an object to be used, it must be instantiated from a class.  Objects can utilize other objects to help represent their data in meaningful ways (ie a school object can have many student objects).[http://www.codeproject.com/KB/architecture/OOP_Concepts_and_manymore.aspx#OOP]&lt;br /&gt;
&lt;br /&gt;
===Procedural Programming===&lt;br /&gt;
With procedural programming, operations are listed one after another in the order they are to be executed.  Procedural programming also incorporates the notion of functions, which are chucks of code that can be called repeatedly, usually to accomplish one specific task.  Functions take in data to be processed as arguments and output the result of the computation.  However, the output of a function can vary greatly, depending on the state of the program at any given moment.[http://knol.google.com/k/chris/procedural-programming/3qdf5q2hz62mx/93#]&lt;br /&gt;
&lt;br /&gt;
===Functional Programming===&lt;br /&gt;
Functional Programming has strong roots in mathematics and focuses on calculations.  Functions are called only to compute data and do not change the state of the program.  The output of functions in functional programming depend only on the arguments to the function, with no dependency on the state of the system.  Also, all variables are final - that is, once assigned to, they cannot be changed.  All these factors make functional programs very reliable and repeatable.[http://www.defmacro.org/ramblings/fp.html]&lt;br /&gt;
&lt;br /&gt;
==Hybrid Object Oriented Programming Languages==&lt;br /&gt;
The following Languages use Hybrid Object Oriented Programming Paradigms:&lt;br /&gt;
&lt;br /&gt;
===OCaml===&lt;br /&gt;
OCaml was an addition to the Caml programming language, which was itself derived from ML.  ML (Meta-Language) was originally developed as a highly functional programming language. It was used to assist with mathematical proofs. Caml was derived from ML to create a flexible programming language and it began to incorporate more procedural programming aspects.  Finally, OCaml was implemented, which added object oriented features such as multiple inheritance and module hierarchy management.[http://caml.inria.fr/about/history.html]&lt;br /&gt;
&lt;br /&gt;
====Design Considerations====&lt;br /&gt;
*By default, data in OCaml (variables, arrays, ect) are not modifiable, because of its roots in functional programming. However, to allow for more expressive procedural programming, variables are allowed to be declared as modifiable.&lt;br /&gt;
*To ensure safety, OCaml is statically typed and type matching is enforced at compile time.  This prevents many common run time errors, but does require attention to detail by the programmer.  This strong-typing is also true of objects in OCaml.  At compile time, OCaml makes sure that no object will receive a message it is not able to understand.&lt;br /&gt;
*OCaml allows for the definition of new data types using the concept of a data constructor.[http://caml.inria.fr/about/index.en.html]&lt;br /&gt;
&lt;br /&gt;
====Examples====&lt;br /&gt;
&lt;br /&gt;
===Scala===&lt;br /&gt;
Scala was written from the ground up Martin Odersky.  It is completely interoperable with Java and naively compiles to Java byte code.  Because of this, any Scala program can invoke any Java library, which lets developers leverage a multitude of available Java resources, while working within the Scala language.[http://www.artima.com/weblogs/viewpost.jsp?thread=163733]&lt;br /&gt;
&lt;br /&gt;
====Design Considerations====&lt;br /&gt;
*Scala aims to allow programmers to leverage the universal compatibility and extensive library support of the java language, while using a compact, flexible and easy to use syntax&lt;br /&gt;
*For safety of data, Scala is statically typed&lt;br /&gt;
*For convenience, Scala does not require the type of a variable to be declared, the Scala compiler can infer the type&lt;br /&gt;
*Scala is a functional language, in that it allows function passing and nested functions&lt;br /&gt;
*But in order to act as an OO language, Scala also embraces the everything-is-an-object paradigm&lt;br /&gt;
*Scala allows for multiple inheritance using mixins&lt;br /&gt;
*Instead of interfaces, Scala uses the idea of &amp;quot;traits&amp;quot; which are like interfaces, but they ''can'' have fully defined methods[http://www.scala-lang.org/node/25]&lt;br /&gt;
&lt;br /&gt;
====Example====&lt;br /&gt;
&amp;quot;Fancy&amp;quot; Hello world:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Note that the arguments to the constructor are just after the class name&lt;br /&gt;
class FancyGreeter(greeting: String)&lt;br /&gt;
{&lt;br /&gt;
  def greet() = println(greeting)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
val g = new FancyGreeter(&amp;quot;Salutations, world&amp;quot;)&lt;br /&gt;
g.greet&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example using a trait&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
trait Introduction{&lt;br /&gt;
  def intro() = &amp;quot;Hello there&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
trait Excited extends Introduction {&lt;br /&gt;
  override def intro() = super.intro() + &amp;quot;!&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
[http://www.artima.com/scalazine/articles/steps.html]&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
#[http://www.codeproject.com/KB/architecture/OOP_Concepts_and_manymore.aspx#OOP Introduction to Object Oriented Programming Concepts]&lt;br /&gt;
#[http://knol.google.com/k/chris/procedural-programming/3qdf5q2hz62mx/93# Procedural Programming]&lt;br /&gt;
#[http://www.defmacro.org/ramblings/fp.html Functional Programming for the Rest Of Us]&lt;br /&gt;
#[http://caml.inria.fr/about/history.html A History of Caml]&lt;br /&gt;
#[http://caml.inria.fr/about/index.en.html About OCaml]&lt;br /&gt;
#[http://www.artima.com/weblogs/viewpost.jsp?thread=163733 A Brief History of Scala]&lt;br /&gt;
#[http://www.scala-lang.org/node/25 The Scala Programming Language]&lt;br /&gt;
#[http://www.artima.com/scalazine/articles/steps.html First Steps to Scala]&lt;/div&gt;</summary>
		<author><name>Eeled</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_6_ee&amp;diff=26261</id>
		<title>CSC/ECE 517 Fall 2009/wiki2 6 ee</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_6_ee&amp;diff=26261"/>
		<updated>2009-10-15T02:18:34Z</updated>

		<summary type="html">&lt;p&gt;Eeled: /* References */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Hybrid Object Oriented Programing Languages=&lt;br /&gt;
&lt;br /&gt;
'''Hybrid Object Oriented Programming Languages''' are object oriented languages that also include one or more additional programing paradigms.  Commonly, hybrid object oriented languages include procedural and functional programing features, in addition to being object oriented.  Having multiple paradigms embraced in one language adds flexibility to the developer, letting them leverage the most appropriate programing methods, without having to switch languages.&lt;br /&gt;
&lt;br /&gt;
==Programing Paradigms==&lt;br /&gt;
Before delving into Hybrid Languages, here is a quick review of the paradigms we will be discussing. &lt;br /&gt;
&lt;br /&gt;
===Object Oriented Programming===&lt;br /&gt;
In Object Oriented Programming, code is grouped together into collections called Objects.  Objects keep track of data and contain methods relevant to the data of the object.  An object is described by a class.  In order for an object to be used, it must be instantiated from a class.  Objects can utilize other objects to help represent their data in meaningful ways (ie a school object can have many student objects).[http://www.codeproject.com/KB/architecture/OOP_Concepts_and_manymore.aspx#OOP]&lt;br /&gt;
&lt;br /&gt;
===Procedural Programming===&lt;br /&gt;
With procedural programming, operations are listed one after another in the order they are to be executed.  Procedural programming also incorporates the notion of functions, which are chucks of code that can be called repeatedly, usually to accomplish one specific task.  Functions take in data to be processed as arguments and output the result of the computation.  However, the output of a function can vary greatly, depending on the state of the program at any given moment.[http://knol.google.com/k/chris/procedural-programming/3qdf5q2hz62mx/93#]&lt;br /&gt;
&lt;br /&gt;
===Functional Programming===&lt;br /&gt;
Functional Programming has strong roots in mathematics and focuses on calculations.  Functions are called only to compute data and do not change the state of the program.  The output of functions in functional programming depend only on the arguments to the function, with no dependency on the state of the system.  Also, all variables are final - that is, once assigned to, they cannot be changed.  All these factors make functional programs very reliable and repeatable.[http://www.defmacro.org/ramblings/fp.html]&lt;br /&gt;
&lt;br /&gt;
==Hybrid Object Oriented Programming Languages==&lt;br /&gt;
The following Languages use Hybrid Object Oriented Programming Paradigms:&lt;br /&gt;
&lt;br /&gt;
===OCaml===&lt;br /&gt;
OCaml was an addition to the Caml programming language, which was itself derived from ML.  ML (Meta-Language) was originally developed as a highly functional programming language. It was used to assist with mathematical proofs. Caml was derived from ML to create a flexible programming language and it began to incorporate more procedural programming aspects.  Finally, OCaml was implemented, which added object oriented features such as multiple inheritance and module hierarchy management.[http://caml.inria.fr/about/history.html]&lt;br /&gt;
&lt;br /&gt;
====Design Considerations====&lt;br /&gt;
*By default, data in OCaml (variables, arrays, ect) are not modifiable, because of its roots in functional programming. However, to allow for more expressive procedural programming, variables are allowed to be declared as modifiable.&lt;br /&gt;
*To ensure safety, OCaml is statically typed and type matching is enforced at compile time.  This prevents many common run time errors, but does require attention to detail by the programmer.  This strong-typing is also true of objects in OCaml.  At compile time, OCaml makes sure that no object will receive a message it is not able to understand.&lt;br /&gt;
*OCaml allows for the definition of new data types using the concept of a data constructor.[http://caml.inria.fr/about/index.en.html]&lt;br /&gt;
&lt;br /&gt;
===Scala===&lt;br /&gt;
Scala was written from the ground up Martin Odersky.  It is completely interoperable with Java and naively compiles to Java byte code.  Because of this, any Scala program can invoke any Java library, which lets developers leverage a multitude of available Java resources, while working within the Scala language.[http://www.artima.com/weblogs/viewpost.jsp?thread=163733]&lt;br /&gt;
&lt;br /&gt;
====Design Considerations====&lt;br /&gt;
*Scala aims to allow programmers to leverage the universal compatibility and extensive library support of the java language, while using a compact, flexible and easy to use syntax&lt;br /&gt;
*For safety of data, Scala is statically typed&lt;br /&gt;
*For convenience, Scala does not require the type of a variable to be declared, the Scala compiler can infer the type&lt;br /&gt;
*Scala is a functional language, in that it allows function passing and nested functions&lt;br /&gt;
*But in order to act as an OO language, Scala also embraces the everything-is-an-object paradigm&lt;br /&gt;
*Scala allows for multiple inheritance using mixins&lt;br /&gt;
*Instead of interfaces, Scala uses the idea of &amp;quot;traits&amp;quot; which are like interfaces, but they ''can'' have fully defined methods[http://www.scala-lang.org/node/25]&lt;br /&gt;
&lt;br /&gt;
====Example====&lt;br /&gt;
&amp;quot;Fancy&amp;quot; Hello world:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Note that the arguments to the constructor are just after the class name&lt;br /&gt;
class FancyGreeter(greeting: String)&lt;br /&gt;
{&lt;br /&gt;
  def greet() = println(greeting)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
val g = new FancyGreeter(&amp;quot;Salutations, world&amp;quot;)&lt;br /&gt;
g.greet&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example using a trait&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
trait Introduction{&lt;br /&gt;
  def intro() = &amp;quot;Hello there&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
trait Excited extends Introduction {&lt;br /&gt;
  override def intro() = super.intro() + &amp;quot;!&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
[http://www.artima.com/scalazine/articles/steps.html]&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
#[http://www.codeproject.com/KB/architecture/OOP_Concepts_and_manymore.aspx#OOP Introduction to Object Oriented Programming Concepts]&lt;br /&gt;
#[http://knol.google.com/k/chris/procedural-programming/3qdf5q2hz62mx/93# Procedural Programming]&lt;br /&gt;
#[http://www.defmacro.org/ramblings/fp.html Functional Programming for the Rest Of Us]&lt;br /&gt;
#[http://caml.inria.fr/about/history.html A History of Caml]&lt;br /&gt;
#[http://caml.inria.fr/about/index.en.html About OCaml]&lt;br /&gt;
#[http://www.artima.com/weblogs/viewpost.jsp?thread=163733 A Brief History of Scala]&lt;br /&gt;
#[http://www.scala-lang.org/node/25 The Scala Programming Language]&lt;br /&gt;
#[http://www.artima.com/scalazine/articles/steps.html First Steps to Scala]&lt;/div&gt;</summary>
		<author><name>Eeled</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_6_ee&amp;diff=26259</id>
		<title>CSC/ECE 517 Fall 2009/wiki2 6 ee</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_6_ee&amp;diff=26259"/>
		<updated>2009-10-15T02:18:10Z</updated>

		<summary type="html">&lt;p&gt;Eeled: /* Scala */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Hybrid Object Oriented Programing Languages=&lt;br /&gt;
&lt;br /&gt;
'''Hybrid Object Oriented Programming Languages''' are object oriented languages that also include one or more additional programing paradigms.  Commonly, hybrid object oriented languages include procedural and functional programing features, in addition to being object oriented.  Having multiple paradigms embraced in one language adds flexibility to the developer, letting them leverage the most appropriate programing methods, without having to switch languages.&lt;br /&gt;
&lt;br /&gt;
==Programing Paradigms==&lt;br /&gt;
Before delving into Hybrid Languages, here is a quick review of the paradigms we will be discussing. &lt;br /&gt;
&lt;br /&gt;
===Object Oriented Programming===&lt;br /&gt;
In Object Oriented Programming, code is grouped together into collections called Objects.  Objects keep track of data and contain methods relevant to the data of the object.  An object is described by a class.  In order for an object to be used, it must be instantiated from a class.  Objects can utilize other objects to help represent their data in meaningful ways (ie a school object can have many student objects).[http://www.codeproject.com/KB/architecture/OOP_Concepts_and_manymore.aspx#OOP]&lt;br /&gt;
&lt;br /&gt;
===Procedural Programming===&lt;br /&gt;
With procedural programming, operations are listed one after another in the order they are to be executed.  Procedural programming also incorporates the notion of functions, which are chucks of code that can be called repeatedly, usually to accomplish one specific task.  Functions take in data to be processed as arguments and output the result of the computation.  However, the output of a function can vary greatly, depending on the state of the program at any given moment.[http://knol.google.com/k/chris/procedural-programming/3qdf5q2hz62mx/93#]&lt;br /&gt;
&lt;br /&gt;
===Functional Programming===&lt;br /&gt;
Functional Programming has strong roots in mathematics and focuses on calculations.  Functions are called only to compute data and do not change the state of the program.  The output of functions in functional programming depend only on the arguments to the function, with no dependency on the state of the system.  Also, all variables are final - that is, once assigned to, they cannot be changed.  All these factors make functional programs very reliable and repeatable.[http://www.defmacro.org/ramblings/fp.html]&lt;br /&gt;
&lt;br /&gt;
==Hybrid Object Oriented Programming Languages==&lt;br /&gt;
The following Languages use Hybrid Object Oriented Programming Paradigms:&lt;br /&gt;
&lt;br /&gt;
===OCaml===&lt;br /&gt;
OCaml was an addition to the Caml programming language, which was itself derived from ML.  ML (Meta-Language) was originally developed as a highly functional programming language. It was used to assist with mathematical proofs. Caml was derived from ML to create a flexible programming language and it began to incorporate more procedural programming aspects.  Finally, OCaml was implemented, which added object oriented features such as multiple inheritance and module hierarchy management.[http://caml.inria.fr/about/history.html]&lt;br /&gt;
&lt;br /&gt;
====Design Considerations====&lt;br /&gt;
*By default, data in OCaml (variables, arrays, ect) are not modifiable, because of its roots in functional programming. However, to allow for more expressive procedural programming, variables are allowed to be declared as modifiable.&lt;br /&gt;
*To ensure safety, OCaml is statically typed and type matching is enforced at compile time.  This prevents many common run time errors, but does require attention to detail by the programmer.  This strong-typing is also true of objects in OCaml.  At compile time, OCaml makes sure that no object will receive a message it is not able to understand.&lt;br /&gt;
*OCaml allows for the definition of new data types using the concept of a data constructor.[http://caml.inria.fr/about/index.en.html]&lt;br /&gt;
&lt;br /&gt;
===Scala===&lt;br /&gt;
Scala was written from the ground up Martin Odersky.  It is completely interoperable with Java and naively compiles to Java byte code.  Because of this, any Scala program can invoke any Java library, which lets developers leverage a multitude of available Java resources, while working within the Scala language.[http://www.artima.com/weblogs/viewpost.jsp?thread=163733]&lt;br /&gt;
&lt;br /&gt;
====Design Considerations====&lt;br /&gt;
*Scala aims to allow programmers to leverage the universal compatibility and extensive library support of the java language, while using a compact, flexible and easy to use syntax&lt;br /&gt;
*For safety of data, Scala is statically typed&lt;br /&gt;
*For convenience, Scala does not require the type of a variable to be declared, the Scala compiler can infer the type&lt;br /&gt;
*Scala is a functional language, in that it allows function passing and nested functions&lt;br /&gt;
*But in order to act as an OO language, Scala also embraces the everything-is-an-object paradigm&lt;br /&gt;
*Scala allows for multiple inheritance using mixins&lt;br /&gt;
*Instead of interfaces, Scala uses the idea of &amp;quot;traits&amp;quot; which are like interfaces, but they ''can'' have fully defined methods[http://www.scala-lang.org/node/25]&lt;br /&gt;
&lt;br /&gt;
====Example====&lt;br /&gt;
&amp;quot;Fancy&amp;quot; Hello world:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Note that the arguments to the constructor are just after the class name&lt;br /&gt;
class FancyGreeter(greeting: String)&lt;br /&gt;
{&lt;br /&gt;
  def greet() = println(greeting)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
val g = new FancyGreeter(&amp;quot;Salutations, world&amp;quot;)&lt;br /&gt;
g.greet&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example using a trait&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
trait Introduction{&lt;br /&gt;
  def intro() = &amp;quot;Hello there&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
trait Excited extends Introduction {&lt;br /&gt;
  override def intro() = super.intro() + &amp;quot;!&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
[http://www.artima.com/scalazine/articles/steps.html]&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
#[http://www.codeproject.com/KB/architecture/OOP_Concepts_and_manymore.aspx#OOP Introduction to Object Oriented Programming Concepts]&lt;br /&gt;
#[http://knol.google.com/k/chris/procedural-programming/3qdf5q2hz62mx/93# Procedural Programming]&lt;br /&gt;
#[http://www.defmacro.org/ramblings/fp.html Functional Programming for the Rest Of Us]&lt;br /&gt;
#[http://caml.inria.fr/about/history.html A History of Caml]&lt;br /&gt;
#[http://caml.inria.fr/about/index.en.html About OCaml]&lt;br /&gt;
#[http://www.artima.com/weblogs/viewpost.jsp?thread=163733 A Brief History of Scala]&lt;br /&gt;
#[http://www.scala-lang.org/node/25 The Scala Programming Language]&lt;/div&gt;</summary>
		<author><name>Eeled</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_6_ee&amp;diff=26257</id>
		<title>CSC/ECE 517 Fall 2009/wiki2 6 ee</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_6_ee&amp;diff=26257"/>
		<updated>2009-10-15T02:17:09Z</updated>

		<summary type="html">&lt;p&gt;Eeled: /* Scala */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Hybrid Object Oriented Programing Languages=&lt;br /&gt;
&lt;br /&gt;
'''Hybrid Object Oriented Programming Languages''' are object oriented languages that also include one or more additional programing paradigms.  Commonly, hybrid object oriented languages include procedural and functional programing features, in addition to being object oriented.  Having multiple paradigms embraced in one language adds flexibility to the developer, letting them leverage the most appropriate programing methods, without having to switch languages.&lt;br /&gt;
&lt;br /&gt;
==Programing Paradigms==&lt;br /&gt;
Before delving into Hybrid Languages, here is a quick review of the paradigms we will be discussing. &lt;br /&gt;
&lt;br /&gt;
===Object Oriented Programming===&lt;br /&gt;
In Object Oriented Programming, code is grouped together into collections called Objects.  Objects keep track of data and contain methods relevant to the data of the object.  An object is described by a class.  In order for an object to be used, it must be instantiated from a class.  Objects can utilize other objects to help represent their data in meaningful ways (ie a school object can have many student objects).[http://www.codeproject.com/KB/architecture/OOP_Concepts_and_manymore.aspx#OOP]&lt;br /&gt;
&lt;br /&gt;
===Procedural Programming===&lt;br /&gt;
With procedural programming, operations are listed one after another in the order they are to be executed.  Procedural programming also incorporates the notion of functions, which are chucks of code that can be called repeatedly, usually to accomplish one specific task.  Functions take in data to be processed as arguments and output the result of the computation.  However, the output of a function can vary greatly, depending on the state of the program at any given moment.[http://knol.google.com/k/chris/procedural-programming/3qdf5q2hz62mx/93#]&lt;br /&gt;
&lt;br /&gt;
===Functional Programming===&lt;br /&gt;
Functional Programming has strong roots in mathematics and focuses on calculations.  Functions are called only to compute data and do not change the state of the program.  The output of functions in functional programming depend only on the arguments to the function, with no dependency on the state of the system.  Also, all variables are final - that is, once assigned to, they cannot be changed.  All these factors make functional programs very reliable and repeatable.[http://www.defmacro.org/ramblings/fp.html]&lt;br /&gt;
&lt;br /&gt;
==Hybrid Object Oriented Programming Languages==&lt;br /&gt;
The following Languages use Hybrid Object Oriented Programming Paradigms:&lt;br /&gt;
&lt;br /&gt;
===OCaml===&lt;br /&gt;
OCaml was an addition to the Caml programming language, which was itself derived from ML.  ML (Meta-Language) was originally developed as a highly functional programming language. It was used to assist with mathematical proofs. Caml was derived from ML to create a flexible programming language and it began to incorporate more procedural programming aspects.  Finally, OCaml was implemented, which added object oriented features such as multiple inheritance and module hierarchy management.[http://caml.inria.fr/about/history.html]&lt;br /&gt;
&lt;br /&gt;
====Design Considerations====&lt;br /&gt;
*By default, data in OCaml (variables, arrays, ect) are not modifiable, because of its roots in functional programming. However, to allow for more expressive procedural programming, variables are allowed to be declared as modifiable.&lt;br /&gt;
*To ensure safety, OCaml is statically typed and type matching is enforced at compile time.  This prevents many common run time errors, but does require attention to detail by the programmer.  This strong-typing is also true of objects in OCaml.  At compile time, OCaml makes sure that no object will receive a message it is not able to understand.&lt;br /&gt;
*OCaml allows for the definition of new data types using the concept of a data constructor.[http://caml.inria.fr/about/index.en.html]&lt;br /&gt;
&lt;br /&gt;
===Scala===&lt;br /&gt;
Scala was written from the ground up Martin Odersky.  It is completely interoperable with Java and naively compiles to Java byte code.  Because of this, any Scala program can invoke any Java library, which lets developers leverage a multitude of available Java resources, while working within the Scala language.[http://www.artima.com/weblogs/viewpost.jsp?thread=163733]&lt;br /&gt;
&lt;br /&gt;
====Design Considerations====&lt;br /&gt;
*Scala aims to allow programmers to leverage the universal compatibility and extensive library support of the java language, while using a compact, flexible and easy to use syntax&lt;br /&gt;
*For safety of data, Scala is statically typed&lt;br /&gt;
*For convenience, Scala does not require the type of a variable to be declared, the Scala compiler can infer the type&lt;br /&gt;
*Scala is a functional language, in that it allows function passing and nested functions&lt;br /&gt;
*But in order to act as an OO language, Scala also embraces the everything-is-an-object paradigm&lt;br /&gt;
*Scala allows for multiple inheritance using mixins&lt;br /&gt;
*Instead of interfaces, Scala uses the idea of &amp;quot;traits&amp;quot; which are like interfaces, but they ''can'' have fully defined methods&lt;br /&gt;
[http://www.scala-lang.org/node/25]&lt;br /&gt;
&lt;br /&gt;
====Example====&lt;br /&gt;
&amp;quot;Fancy&amp;quot; Hello world:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Note that the arguments to the constructor are just after the class name&lt;br /&gt;
class FancyGreeter(greeting: String)&lt;br /&gt;
{&lt;br /&gt;
  def greet() = println(greeting)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
val g = new FancyGreeter(&amp;quot;Salutations, world&amp;quot;)&lt;br /&gt;
g.greet&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example using a trait&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
trait Introduction{&lt;br /&gt;
  def intro() = &amp;quot;Hello there&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
trait Excited extends Introduction {&lt;br /&gt;
  override def intro() = super.intro() + &amp;quot;!&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
#[http://www.codeproject.com/KB/architecture/OOP_Concepts_and_manymore.aspx#OOP Introduction to Object Oriented Programming Concepts]&lt;br /&gt;
#[http://knol.google.com/k/chris/procedural-programming/3qdf5q2hz62mx/93# Procedural Programming]&lt;br /&gt;
#[http://www.defmacro.org/ramblings/fp.html Functional Programming for the Rest Of Us]&lt;br /&gt;
#[http://caml.inria.fr/about/history.html A History of Caml]&lt;br /&gt;
#[http://caml.inria.fr/about/index.en.html About OCaml]&lt;br /&gt;
#[http://www.artima.com/weblogs/viewpost.jsp?thread=163733 A Brief History of Scala]&lt;br /&gt;
#[http://www.scala-lang.org/node/25 The Scala Programming Language]&lt;/div&gt;</summary>
		<author><name>Eeled</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_6_ee&amp;diff=26255</id>
		<title>CSC/ECE 517 Fall 2009/wiki2 6 ee</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_6_ee&amp;diff=26255"/>
		<updated>2009-10-15T02:14:18Z</updated>

		<summary type="html">&lt;p&gt;Eeled: /* Scala */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Hybrid Object Oriented Programing Languages=&lt;br /&gt;
&lt;br /&gt;
'''Hybrid Object Oriented Programming Languages''' are object oriented languages that also include one or more additional programing paradigms.  Commonly, hybrid object oriented languages include procedural and functional programing features, in addition to being object oriented.  Having multiple paradigms embraced in one language adds flexibility to the developer, letting them leverage the most appropriate programing methods, without having to switch languages.&lt;br /&gt;
&lt;br /&gt;
==Programing Paradigms==&lt;br /&gt;
Before delving into Hybrid Languages, here is a quick review of the paradigms we will be discussing. &lt;br /&gt;
&lt;br /&gt;
===Object Oriented Programming===&lt;br /&gt;
In Object Oriented Programming, code is grouped together into collections called Objects.  Objects keep track of data and contain methods relevant to the data of the object.  An object is described by a class.  In order for an object to be used, it must be instantiated from a class.  Objects can utilize other objects to help represent their data in meaningful ways (ie a school object can have many student objects).[http://www.codeproject.com/KB/architecture/OOP_Concepts_and_manymore.aspx#OOP]&lt;br /&gt;
&lt;br /&gt;
===Procedural Programming===&lt;br /&gt;
With procedural programming, operations are listed one after another in the order they are to be executed.  Procedural programming also incorporates the notion of functions, which are chucks of code that can be called repeatedly, usually to accomplish one specific task.  Functions take in data to be processed as arguments and output the result of the computation.  However, the output of a function can vary greatly, depending on the state of the program at any given moment.[http://knol.google.com/k/chris/procedural-programming/3qdf5q2hz62mx/93#]&lt;br /&gt;
&lt;br /&gt;
===Functional Programming===&lt;br /&gt;
Functional Programming has strong roots in mathematics and focuses on calculations.  Functions are called only to compute data and do not change the state of the program.  The output of functions in functional programming depend only on the arguments to the function, with no dependency on the state of the system.  Also, all variables are final - that is, once assigned to, they cannot be changed.  All these factors make functional programs very reliable and repeatable.[http://www.defmacro.org/ramblings/fp.html]&lt;br /&gt;
&lt;br /&gt;
==Hybrid Object Oriented Programming Languages==&lt;br /&gt;
The following Languages use Hybrid Object Oriented Programming Paradigms:&lt;br /&gt;
&lt;br /&gt;
===OCaml===&lt;br /&gt;
OCaml was an addition to the Caml programming language, which was itself derived from ML.  ML (Meta-Language) was originally developed as a highly functional programming language. It was used to assist with mathematical proofs. Caml was derived from ML to create a flexible programming language and it began to incorporate more procedural programming aspects.  Finally, OCaml was implemented, which added object oriented features such as multiple inheritance and module hierarchy management.[http://caml.inria.fr/about/history.html]&lt;br /&gt;
&lt;br /&gt;
====Design Considerations====&lt;br /&gt;
*By default, data in OCaml (variables, arrays, ect) are not modifiable, because of its roots in functional programming. However, to allow for more expressive procedural programming, variables are allowed to be declared as modifiable.&lt;br /&gt;
*To ensure safety, OCaml is statically typed and type matching is enforced at compile time.  This prevents many common run time errors, but does require attention to detail by the programmer.  This strong-typing is also true of objects in OCaml.  At compile time, OCaml makes sure that no object will receive a message it is not able to understand.&lt;br /&gt;
*OCaml allows for the definition of new data types using the concept of a data constructor.[http://caml.inria.fr/about/index.en.html]&lt;br /&gt;
&lt;br /&gt;
===Scala===&lt;br /&gt;
Scala was written from the ground up Martin Odersky.  It is completely interoperable with Java and naively compiles to Java byte code.  Because of this, any Scala program can invoke any Java library, which lets developers leverage a multitude of available Java resources, while working within the Scala language.[http://www.artima.com/weblogs/viewpost.jsp?thread=163733]&lt;br /&gt;
&lt;br /&gt;
====Design Considerations====&lt;br /&gt;
*Scala aims to allow programmers to leverage the universal compatibility and extensive library support of the java language, while using a compact, flexible and easy to use syntax&lt;br /&gt;
*For safety of data, Scala is statically typed&lt;br /&gt;
*For convenience, Scala does not require the type of a variable to be declared, the Scala compiler can infer the type&lt;br /&gt;
*Scala is a functional language, in that it allows function passing and nested functions&lt;br /&gt;
*But in order to act as an OO language, Scala also embraces the everything-is-an-object paradigm&lt;br /&gt;
*Scala allows for multiple inheritance using mixins&lt;br /&gt;
*Instead of interfaces, Scala uses the idea of &amp;quot;traits&amp;quot; which are like interfaces, but they ''can'' have fully defined methods&lt;br /&gt;
[http://www.scala-lang.org/node/25]&lt;br /&gt;
&lt;br /&gt;
====Example====&lt;br /&gt;
&amp;quot;Fancy&amp;quot; Hello world:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
//Note that the arguments to the constructor are just after the class name&lt;br /&gt;
class FancyGreeter(greeting: String)&lt;br /&gt;
{&lt;br /&gt;
  def greet() = println(greeting)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
val g = new FancyGreeter(&amp;quot;Salutations, world&amp;quot;)&lt;br /&gt;
g.greet&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Using traits&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
trait Introduction{&lt;br /&gt;
  def intro() = &amp;quot;Hello there&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
trait Excited extends Introduction {&lt;br /&gt;
  override def intro() = super.intro() + &amp;quot;!&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
#[http://www.codeproject.com/KB/architecture/OOP_Concepts_and_manymore.aspx#OOP Introduction to Object Oriented Programming Concepts]&lt;br /&gt;
#[http://knol.google.com/k/chris/procedural-programming/3qdf5q2hz62mx/93# Procedural Programming]&lt;br /&gt;
#[http://www.defmacro.org/ramblings/fp.html Functional Programming for the Rest Of Us]&lt;br /&gt;
#[http://caml.inria.fr/about/history.html A History of Caml]&lt;br /&gt;
#[http://caml.inria.fr/about/index.en.html About OCaml]&lt;br /&gt;
#[http://www.artima.com/weblogs/viewpost.jsp?thread=163733 A Brief History of Scala]&lt;br /&gt;
#[http://www.scala-lang.org/node/25 The Scala Programming Language]&lt;/div&gt;</summary>
		<author><name>Eeled</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_6_ee&amp;diff=26241</id>
		<title>CSC/ECE 517 Fall 2009/wiki2 6 ee</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_6_ee&amp;diff=26241"/>
		<updated>2009-10-15T01:55:22Z</updated>

		<summary type="html">&lt;p&gt;Eeled: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Hybrid Object Oriented Programing Languages=&lt;br /&gt;
&lt;br /&gt;
'''Hybrid Object Oriented Programming Languages''' are object oriented languages that also include one or more additional programing paradigms.  Commonly, hybrid object oriented languages include procedural and functional programing features, in addition to being object oriented.  Having multiple paradigms embraced in one language adds flexibility to the developer, letting them leverage the most appropriate programing methods, without having to switch languages.&lt;br /&gt;
&lt;br /&gt;
==Programing Paradigms==&lt;br /&gt;
Before delving into Hybrid Languages, here is a quick review of the paradigms we will be discussing. &lt;br /&gt;
&lt;br /&gt;
===Object Oriented Programming===&lt;br /&gt;
In Object Oriented Programming, code is grouped together into collections called Objects.  Objects keep track of data and contain methods relevant to the data of the object.  An object is described by a class.  In order for an object to be used, it must be instantiated from a class.  Objects can utilize other objects to help represent their data in meaningful ways (ie a school object can have many student objects).[http://www.codeproject.com/KB/architecture/OOP_Concepts_and_manymore.aspx#OOP]&lt;br /&gt;
&lt;br /&gt;
===Procedural Programming===&lt;br /&gt;
With procedural programming, operations are listed one after another in the order they are to be executed.  Procedural programming also incorporates the notion of functions, which are chucks of code that can be called repeatedly, usually to accomplish one specific task.  Functions take in data to be processed as arguments and output the result of the computation.  However, the output of a function can vary greatly, depending on the state of the program at any given moment.[http://knol.google.com/k/chris/procedural-programming/3qdf5q2hz62mx/93#]&lt;br /&gt;
&lt;br /&gt;
===Functional Programming===&lt;br /&gt;
Functional Programming has strong roots in mathematics and focuses on calculations.  Functions are called only to compute data and do not change the state of the program.  The output of functions in functional programming depend only on the arguments to the function, with no dependency on the state of the system.  Also, all variables are final - that is, once assigned to, they cannot be changed.  All these factors make functional programs very reliable and repeatable.[http://www.defmacro.org/ramblings/fp.html]&lt;br /&gt;
&lt;br /&gt;
==Hybrid Object Oriented Programming Languages==&lt;br /&gt;
The following Languages use Hybrid Object Oriented Programming Paradigms:&lt;br /&gt;
&lt;br /&gt;
===OCaml===&lt;br /&gt;
OCaml was an addition to the Caml programming language, which was itself derived from ML.  ML (Meta-Language) was originally developed as a highly functional programming language. It was used to assist with mathematical proofs. Caml was derived from ML to create a flexible programming language and it began to incorporate more procedural programming aspects.  Finally, OCaml was implemented, which added object oriented features such as multiple inheritance and module hierarchy management.[http://caml.inria.fr/about/history.html]&lt;br /&gt;
&lt;br /&gt;
====Design Considerations====&lt;br /&gt;
*By default, data in OCaml (variables, arrays, ect) are not modifiable, because of its roots in functional programming. However, to allow for more expressive procedural programming, variables are allowed to be declared as modifiable.&lt;br /&gt;
*To ensure safety, OCaml is statically typed and type matching is enforced at compile time.  This prevents many common run time errors, but does require attention to detail by the programmer.  This strong-typing is also true of objects in OCaml.  At compile time, OCaml makes sure that no object will receive a message it is not able to understand.&lt;br /&gt;
*OCaml allows for the definition of new data types using the concept of a data constructor.[http://caml.inria.fr/about/index.en.html]&lt;br /&gt;
&lt;br /&gt;
===Scala===&lt;br /&gt;
Scala was written from the ground up Martin Odersky.  It is completely interoperable with Java and naively compiles to Java byte code.  Because of this, any Scala program can invoke any Java library, which lets developers leverage a multitude of available Java resources, while working within the Scala language.[http://www.artima.com/weblogs/viewpost.jsp?thread=163733]&lt;br /&gt;
&lt;br /&gt;
====Design Considerations====&lt;br /&gt;
*Scala aims to allow programmers to leverage the universal compatibility and extensive library support of the java language, while using a compact, flexible and easy to use syntax&lt;br /&gt;
*For safety of data, Scala is statically typed&lt;br /&gt;
*For convenience, Scala does not require the type of a variable to be declared, the Scala compiler can infer the type&lt;br /&gt;
*Scala is a functional language, in that it allows function passing and nested functions&lt;br /&gt;
*But in order to act as an OO language, Scala also embraces the everything-is-an-object paradigm&lt;br /&gt;
*Scala allows for multiple inheritance using mixins&lt;br /&gt;
[http://www.scala-lang.org/node/25]&lt;br /&gt;
&lt;br /&gt;
====Example====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;quot;hello world&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
#[http://www.codeproject.com/KB/architecture/OOP_Concepts_and_manymore.aspx#OOP Introduction to Object Oriented Programming Concepts]&lt;br /&gt;
#[http://knol.google.com/k/chris/procedural-programming/3qdf5q2hz62mx/93# Procedural Programming]&lt;br /&gt;
#[http://www.defmacro.org/ramblings/fp.html Functional Programming for the Rest Of Us]&lt;br /&gt;
#[http://caml.inria.fr/about/history.html A History of Caml]&lt;br /&gt;
#[http://caml.inria.fr/about/index.en.html About OCaml]&lt;br /&gt;
#[http://www.artima.com/weblogs/viewpost.jsp?thread=163733 A Brief History of Scala]&lt;br /&gt;
#[http://www.scala-lang.org/node/25 The Scala Programming Language]&lt;/div&gt;</summary>
		<author><name>Eeled</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_6_ee&amp;diff=26229</id>
		<title>CSC/ECE 517 Fall 2009/wiki2 6 ee</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_6_ee&amp;diff=26229"/>
		<updated>2009-10-15T01:45:34Z</updated>

		<summary type="html">&lt;p&gt;Eeled: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Hybrid Object Oriented Programing Languages=&lt;br /&gt;
&lt;br /&gt;
'''Hybrid Object Oriented Programming Languages''' are object oriented languages that also include one or more additional programing paradigms.  Commonly, hybrid object oriented languages include procedural and functional programing features, in addition to being object oriented.  Having multiple paradigms embraced in one language adds flexibility to the developer, letting them leverage the most appropriate programing methods, without having to switch languages.&lt;br /&gt;
&lt;br /&gt;
==Programing Paradigms==&lt;br /&gt;
Before delving into Hybrid Languages, here is a quick review of the paradigms we will be discussing. &lt;br /&gt;
&lt;br /&gt;
===Object Oriented Programming===&lt;br /&gt;
In Object Oriented Programming, code is grouped together into collections called Objects.  Objects keep track of data and contain methods relevant to the data of the object.  An object is described by a class.  In order for an object to be used, it must be instantiated from a class.  Objects can utilize other objects to help represent their data in meaningful ways (ie a school object can have many student objects).[http://www.codeproject.com/KB/architecture/OOP_Concepts_and_manymore.aspx#OOP]&lt;br /&gt;
&lt;br /&gt;
===Procedural Programming===&lt;br /&gt;
With procedural programming, operations are listed one after another in the order they are to be executed.  Procedural programming also incorporates the notion of functions, which are chucks of code that can be called repeatedly, usually to accomplish one specific task.  Functions take in data to be processed as arguments and output the result of the computation.  However, the output of a function can vary greatly, depending on the state of the program at any given moment.[http://knol.google.com/k/chris/procedural-programming/3qdf5q2hz62mx/93#]&lt;br /&gt;
&lt;br /&gt;
===Functional Programming===&lt;br /&gt;
Functional Programming has strong roots in mathematics and focuses on calculations.  Functions are called only to compute data and do not change the state of the program.  The output of functions in functional programming depend only on the arguments to the function, with no dependency on the state of the system.  Also, all variables are final - that is, once assigned to, they cannot be changed.  All these factors make functional programs very reliable and repeatable.[http://www.defmacro.org/ramblings/fp.html]&lt;br /&gt;
&lt;br /&gt;
==Hybrid Object Oriented Programming Languages==&lt;br /&gt;
The following Languages use Hybrid Object Oriented Programming Paradigms:&lt;br /&gt;
&lt;br /&gt;
===OCaml===&lt;br /&gt;
OCaml was an addition to the Caml programming language, which was itself derived from ML.  ML (Meta-Language) was originally developed as a highly functional programming language. It was used to assist with mathematical proofs. Caml was derived from ML to create a flexible programming language and it began to incorporate more procedural programming aspects.  Finally, OCaml was implemented, which added object oriented features such as multiple inheritance and module hierarchy management.[http://caml.inria.fr/about/history.html]&lt;br /&gt;
&lt;br /&gt;
====Design Considerations====&lt;br /&gt;
*By default, data in OCaml (variables, arrays, ect) are not modifiable, because of its roots in functional programming. However, to allow for more expressive procedural programming, variables are allowed to be declared as modifiable.&lt;br /&gt;
*To ensure safety, OCaml is statically typed and type matching is enforced at compile time.  This prevents many common run time errors, but does require attention to detail by the programmer.  This strong-typing is also true of objects in OCaml.  At compile time, OCaml makes sure that no object will receive a message it is not able to understand.&lt;br /&gt;
*OCaml allows for the definition of new data types using the concept of a data constructor.[http://caml.inria.fr/about/index.en.html]&lt;br /&gt;
&lt;br /&gt;
===Scala===&lt;br /&gt;
Scala was written from the ground up Martin Odersky.  It is completely interoperable with Java and naively compiles to Java byte code.  Because of this, any Scala program can invoke any Java library, which lets developers leverage a multitude of available Java resources, while working within the Scala language.[http://www.artima.com/weblogs/viewpost.jsp?thread=163733]&lt;br /&gt;
&lt;br /&gt;
====Design Considerations====&lt;br /&gt;
*For safety of data, Scala is statically typed&lt;br /&gt;
*Scala is a functional language, in that it allows function passing and nested functions&lt;br /&gt;
*But in order to be functional as an OO language, Scala also embraces the everything-is-an-object paradigm&lt;br /&gt;
*Scala allows for multiple inheritance using mixins &lt;br /&gt;
*Scala aims to allow programmers to leverage the universal compatibility and extensive library support of the java language, while using a compact, flexible and easy to use syntax[http://www.scala-lang.org/node/25]&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
#[http://www.codeproject.com/KB/architecture/OOP_Concepts_and_manymore.aspx#OOP Introduction to Object Oriented Programming Concepts]&lt;br /&gt;
#[http://knol.google.com/k/chris/procedural-programming/3qdf5q2hz62mx/93# Procedural Programming]&lt;br /&gt;
#[http://www.defmacro.org/ramblings/fp.html Functional Programming for the Rest Of Us]&lt;br /&gt;
#[http://caml.inria.fr/about/history.html A History of Caml]&lt;br /&gt;
#[http://caml.inria.fr/about/index.en.html About OCaml]&lt;br /&gt;
#[http://www.artima.com/weblogs/viewpost.jsp?thread=163733 A Brief History of Scala]&lt;br /&gt;
#[http://www.scala-lang.org/node/25 The Scala Programming Language]&lt;/div&gt;</summary>
		<author><name>Eeled</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_6_ee&amp;diff=25543</id>
		<title>CSC/ECE 517 Fall 2009/wiki2 6 ee</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_6_ee&amp;diff=25543"/>
		<updated>2009-10-10T03:30:11Z</updated>

		<summary type="html">&lt;p&gt;Eeled: /* References */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Hybrid Object Oriented Programing Languages=&lt;br /&gt;
&lt;br /&gt;
'''Hybrid Object Oriented Programming Languages''' are object oriented languages that also include one or more additional programing paradigms.  Commonly, hybrid object oriented languages include procedural and functional programing features, in addition to being object oriented.  Having multiple paradigms embraced in one language adds flexibility to the developer, letting them leverage the most appropriate programing methods, without having to switch languages.&lt;br /&gt;
&lt;br /&gt;
==Programing Paradigms==&lt;br /&gt;
Before delving into Hybrid Languages, here is a quick review of the paradigms we will be discussing. &lt;br /&gt;
&lt;br /&gt;
===Object Oriented Programming===&lt;br /&gt;
In Object Oriented Programming, code is grouped together into collections called Objects.  Objects keep track of data and contain methods relevant to the data of the object.  An object is described by a class.  In order for an object to be used, it must be instantiated from a class.  Objects can utilize other objects to help represent their data in meaningful ways (ie a school object can have many student objects).[http://www.codeproject.com/KB/architecture/OOP_Concepts_and_manymore.aspx#OOP]&lt;br /&gt;
&lt;br /&gt;
===Procedural Programming===&lt;br /&gt;
With procedural programming, operations are listed one after another in the order they are to be executed.  Procedural programming also incorporates the notion of functions, which are chucks of code that can be called repeatedly, usually to accomplish one specific task.  Functions take in data to be processed as arguments and output the result of the computation.  However, the output of a function can vary greatly, depending on the state of the program at any given moment.[http://knol.google.com/k/chris/procedural-programming/3qdf5q2hz62mx/93#]&lt;br /&gt;
&lt;br /&gt;
===Functional Programming===&lt;br /&gt;
Functional Programming has strong roots in mathematics and focuses on calculations.  Functions are called only to compute data and do not change the state of the program.  The output of functions in functional programming depend only on the arguments to the function, with no dependency on the state of the system.  Also, all variables are final - that is, once assigned to, they cannot be changed.  All these factors make functional programs very reliable and repeatable.[http://www.defmacro.org/ramblings/fp.html]&lt;br /&gt;
&lt;br /&gt;
==Hybrid Object Oriented Programming Languages==&lt;br /&gt;
The following Languages use Hybrid Object Oriented Programming Paradigms:&lt;br /&gt;
&lt;br /&gt;
===OCaml===&lt;br /&gt;
OCaml was an addition to the Caml programming language, which was itself derived from ML.  ML (Meta-Language) was originally developed as a highly functional programming language. It was used to assist with mathematical proofs. Caml was derived from ML to create a flexible programming language and it began to incorporate more procedural programming aspects.  Finally, OCaml was implemented, which added object oriented features such as multiple inheritance and module hierarchy management.[http://caml.inria.fr/about/history.html]&lt;br /&gt;
&lt;br /&gt;
====Design Considerations====&lt;br /&gt;
*By default, data in OCaml (variables, arrays, ect) are not modifiable, because of its roots in functional programming. However, to allow for more expressive procedural programming, variables are allowed to be declared as modifiable.&lt;br /&gt;
*To ensure safety, OCaml is statically typed and type matching is enforced at compile time.  This prevents many common run time errors, but does require attention to detail by the programmer.  This strong-typing is also true of objects in OCaml.  At compile time, OCaml makes sure that no object will receive a message it is not able to understand.&lt;br /&gt;
*OCaml allows for the definition of new data types using the concept of a data constructor.[http://caml.inria.fr/about/index.en.html]&lt;br /&gt;
&lt;br /&gt;
===Scala===&lt;br /&gt;
Scala was written from the ground up Martin Odersky.  It is completely interoperable with Java and naively compiles to Java byte code.  Because of this, any Scala program can invoke any Java library, which lets developers leverage a multitude of available Java resources, while working within the Scala language.[http://www.artima.com/weblogs/viewpost.jsp?thread=163733]&lt;br /&gt;
&lt;br /&gt;
====Design Considerations====&lt;br /&gt;
*Scala is statically typed to ensure safety&lt;br /&gt;
*Scala is a functional language, in that it allows function passing and nested functions&lt;br /&gt;
*Scala also embraces the everything-is-an-object paradigm&lt;br /&gt;
*Scala allows for multiple inheritance using mixins [http://www.scala-lang.org/node/25]&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
#[http://www.codeproject.com/KB/architecture/OOP_Concepts_and_manymore.aspx#OOP Introduction to Object Oriented Programming Concepts]&lt;br /&gt;
#[http://knol.google.com/k/chris/procedural-programming/3qdf5q2hz62mx/93# Procedural Programming]&lt;br /&gt;
#[http://www.defmacro.org/ramblings/fp.html Functional Programming for the Rest Of Us]&lt;br /&gt;
#[http://caml.inria.fr/about/history.html A History of Caml]&lt;br /&gt;
#[http://caml.inria.fr/about/index.en.html About OCaml]&lt;br /&gt;
#[http://www.artima.com/weblogs/viewpost.jsp?thread=163733 A Brief History of Scala]&lt;br /&gt;
#[http://www.scala-lang.org/node/25 The Scala Programming Language]&lt;/div&gt;</summary>
		<author><name>Eeled</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_6_ee&amp;diff=25540</id>
		<title>CSC/ECE 517 Fall 2009/wiki2 6 ee</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_6_ee&amp;diff=25540"/>
		<updated>2009-10-10T03:29:08Z</updated>

		<summary type="html">&lt;p&gt;Eeled: /* References */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Hybrid Object Oriented Programing Languages=&lt;br /&gt;
&lt;br /&gt;
'''Hybrid Object Oriented Programming Languages''' are object oriented languages that also include one or more additional programing paradigms.  Commonly, hybrid object oriented languages include procedural and functional programing features, in addition to being object oriented.  Having multiple paradigms embraced in one language adds flexibility to the developer, letting them leverage the most appropriate programing methods, without having to switch languages.&lt;br /&gt;
&lt;br /&gt;
==Programing Paradigms==&lt;br /&gt;
Before delving into Hybrid Languages, here is a quick review of the paradigms we will be discussing. &lt;br /&gt;
&lt;br /&gt;
===Object Oriented Programming===&lt;br /&gt;
In Object Oriented Programming, code is grouped together into collections called Objects.  Objects keep track of data and contain methods relevant to the data of the object.  An object is described by a class.  In order for an object to be used, it must be instantiated from a class.  Objects can utilize other objects to help represent their data in meaningful ways (ie a school object can have many student objects).[http://www.codeproject.com/KB/architecture/OOP_Concepts_and_manymore.aspx#OOP]&lt;br /&gt;
&lt;br /&gt;
===Procedural Programming===&lt;br /&gt;
With procedural programming, operations are listed one after another in the order they are to be executed.  Procedural programming also incorporates the notion of functions, which are chucks of code that can be called repeatedly, usually to accomplish one specific task.  Functions take in data to be processed as arguments and output the result of the computation.  However, the output of a function can vary greatly, depending on the state of the program at any given moment.[http://knol.google.com/k/chris/procedural-programming/3qdf5q2hz62mx/93#]&lt;br /&gt;
&lt;br /&gt;
===Functional Programming===&lt;br /&gt;
Functional Programming has strong roots in mathematics and focuses on calculations.  Functions are called only to compute data and do not change the state of the program.  The output of functions in functional programming depend only on the arguments to the function, with no dependency on the state of the system.  Also, all variables are final - that is, once assigned to, they cannot be changed.  All these factors make functional programs very reliable and repeatable.[http://www.defmacro.org/ramblings/fp.html]&lt;br /&gt;
&lt;br /&gt;
==Hybrid Object Oriented Programming Languages==&lt;br /&gt;
The following Languages use Hybrid Object Oriented Programming Paradigms:&lt;br /&gt;
&lt;br /&gt;
===OCaml===&lt;br /&gt;
OCaml was an addition to the Caml programming language, which was itself derived from ML.  ML (Meta-Language) was originally developed as a highly functional programming language. It was used to assist with mathematical proofs. Caml was derived from ML to create a flexible programming language and it began to incorporate more procedural programming aspects.  Finally, OCaml was implemented, which added object oriented features such as multiple inheritance and module hierarchy management.[http://caml.inria.fr/about/history.html]&lt;br /&gt;
&lt;br /&gt;
====Design Considerations====&lt;br /&gt;
*By default, data in OCaml (variables, arrays, ect) are not modifiable, because of its roots in functional programming. However, to allow for more expressive procedural programming, variables are allowed to be declared as modifiable.&lt;br /&gt;
*To ensure safety, OCaml is statically typed and type matching is enforced at compile time.  This prevents many common run time errors, but does require attention to detail by the programmer.  This strong-typing is also true of objects in OCaml.  At compile time, OCaml makes sure that no object will receive a message it is not able to understand.&lt;br /&gt;
*OCaml allows for the definition of new data types using the concept of a data constructor.[http://caml.inria.fr/about/index.en.html]&lt;br /&gt;
&lt;br /&gt;
===Scala===&lt;br /&gt;
Scala was written from the ground up Martin Odersky.  It is completely interoperable with Java and naively compiles to Java byte code.  Because of this, any Scala program can invoke any Java library, which lets developers leverage a multitude of available Java resources, while working within the Scala language.[http://www.artima.com/weblogs/viewpost.jsp?thread=163733]&lt;br /&gt;
&lt;br /&gt;
====Design Considerations====&lt;br /&gt;
*Scala is statically typed to ensure safety&lt;br /&gt;
*Scala is a functional language, in that it allows function passing and nested functions&lt;br /&gt;
*Scala also embraces the everything-is-an-object paradigm&lt;br /&gt;
*Scala allows for multiple inheritance using mixins [http://www.scala-lang.org/node/25]&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
#[http://www.codeproject.com/KB/architecture/OOP_Concepts_and_manymore.aspx#OOP]&lt;br /&gt;
#[http://knol.google.com/k/chris/procedural-programming/3qdf5q2hz62mx/93#]&lt;br /&gt;
#[http://www.defmacro.org/ramblings/fp.html Functional Programming for the Rest Of Us]&lt;br /&gt;
#[http://caml.inria.fr/about/history.html A History of Caml]&lt;br /&gt;
#[http://caml.inria.fr/about/index.en.html About OCaml]&lt;br /&gt;
#[http://www.artima.com/weblogs/viewpost.jsp?thread=163733 A Brief History of Scala]&lt;br /&gt;
#[http://www.scala-lang.org/node/25 The Scala Programming Language]&lt;/div&gt;</summary>
		<author><name>Eeled</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_6_ee&amp;diff=25536</id>
		<title>CSC/ECE 517 Fall 2009/wiki2 6 ee</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_6_ee&amp;diff=25536"/>
		<updated>2009-10-10T03:26:58Z</updated>

		<summary type="html">&lt;p&gt;Eeled: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Hybrid Object Oriented Programing Languages=&lt;br /&gt;
&lt;br /&gt;
'''Hybrid Object Oriented Programming Languages''' are object oriented languages that also include one or more additional programing paradigms.  Commonly, hybrid object oriented languages include procedural and functional programing features, in addition to being object oriented.  Having multiple paradigms embraced in one language adds flexibility to the developer, letting them leverage the most appropriate programing methods, without having to switch languages.&lt;br /&gt;
&lt;br /&gt;
==Programing Paradigms==&lt;br /&gt;
Before delving into Hybrid Languages, here is a quick review of the paradigms we will be discussing. &lt;br /&gt;
&lt;br /&gt;
===Object Oriented Programming===&lt;br /&gt;
In Object Oriented Programming, code is grouped together into collections called Objects.  Objects keep track of data and contain methods relevant to the data of the object.  An object is described by a class.  In order for an object to be used, it must be instantiated from a class.  Objects can utilize other objects to help represent their data in meaningful ways (ie a school object can have many student objects).[http://www.codeproject.com/KB/architecture/OOP_Concepts_and_manymore.aspx#OOP]&lt;br /&gt;
&lt;br /&gt;
===Procedural Programming===&lt;br /&gt;
With procedural programming, operations are listed one after another in the order they are to be executed.  Procedural programming also incorporates the notion of functions, which are chucks of code that can be called repeatedly, usually to accomplish one specific task.  Functions take in data to be processed as arguments and output the result of the computation.  However, the output of a function can vary greatly, depending on the state of the program at any given moment.[http://knol.google.com/k/chris/procedural-programming/3qdf5q2hz62mx/93#]&lt;br /&gt;
&lt;br /&gt;
===Functional Programming===&lt;br /&gt;
Functional Programming has strong roots in mathematics and focuses on calculations.  Functions are called only to compute data and do not change the state of the program.  The output of functions in functional programming depend only on the arguments to the function, with no dependency on the state of the system.  Also, all variables are final - that is, once assigned to, they cannot be changed.  All these factors make functional programs very reliable and repeatable.[http://www.defmacro.org/ramblings/fp.html]&lt;br /&gt;
&lt;br /&gt;
==Hybrid Object Oriented Programming Languages==&lt;br /&gt;
The following Languages use Hybrid Object Oriented Programming Paradigms:&lt;br /&gt;
&lt;br /&gt;
===OCaml===&lt;br /&gt;
OCaml was an addition to the Caml programming language, which was itself derived from ML.  ML (Meta-Language) was originally developed as a highly functional programming language. It was used to assist with mathematical proofs. Caml was derived from ML to create a flexible programming language and it began to incorporate more procedural programming aspects.  Finally, OCaml was implemented, which added object oriented features such as multiple inheritance and module hierarchy management.[http://caml.inria.fr/about/history.html]&lt;br /&gt;
&lt;br /&gt;
====Design Considerations====&lt;br /&gt;
*By default, data in OCaml (variables, arrays, ect) are not modifiable, because of its roots in functional programming. However, to allow for more expressive procedural programming, variables are allowed to be declared as modifiable.&lt;br /&gt;
*To ensure safety, OCaml is statically typed and type matching is enforced at compile time.  This prevents many common run time errors, but does require attention to detail by the programmer.  This strong-typing is also true of objects in OCaml.  At compile time, OCaml makes sure that no object will receive a message it is not able to understand.&lt;br /&gt;
*OCaml allows for the definition of new data types using the concept of a data constructor.[http://caml.inria.fr/about/index.en.html]&lt;br /&gt;
&lt;br /&gt;
===Scala===&lt;br /&gt;
Scala was written from the ground up Martin Odersky.  It is completely interoperable with Java and naively compiles to Java byte code.  Because of this, any Scala program can invoke any Java library, which lets developers leverage a multitude of available Java resources, while working within the Scala language.[http://www.artima.com/weblogs/viewpost.jsp?thread=163733]&lt;br /&gt;
&lt;br /&gt;
====Design Considerations====&lt;br /&gt;
*Scala is statically typed to ensure safety&lt;br /&gt;
*Scala is a functional language, in that it allows function passing and nested functions&lt;br /&gt;
*Scala also embraces the everything-is-an-object paradigm&lt;br /&gt;
*Scala allows for multiple inheritance using mixins [http://www.scala-lang.org/node/25]&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
#[http://www.codeproject.com/KB/architecture/OOP_Concepts_and_manymore.aspx#OOP]&lt;br /&gt;
#[http://knol.google.com/k/chris/procedural-programming/3qdf5q2hz62mx/93#]&lt;br /&gt;
#[http://www.defmacro.org/ramblings/fp.html]&lt;br /&gt;
#[http://caml.inria.fr/about/history.html]&lt;br /&gt;
#[http://caml.inria.fr/about/index.en.html]&lt;br /&gt;
#[http://www.artima.com/weblogs/viewpost.jsp?thread=163733]&lt;br /&gt;
#[http://www.scala-lang.org/node/25]&lt;/div&gt;</summary>
		<author><name>Eeled</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_6_ee&amp;diff=25504</id>
		<title>CSC/ECE 517 Fall 2009/wiki2 6 ee</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_6_ee&amp;diff=25504"/>
		<updated>2009-10-10T03:08:54Z</updated>

		<summary type="html">&lt;p&gt;Eeled: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Hybrid Object Oriented Programing Languages=&lt;br /&gt;
&lt;br /&gt;
'''Hybrid Object Oriented Programming Languages''' are object oriented languages that also include one or more additional programing paradigms.  Commonly, hybrid object oriented languages include procedural and functional programing features, in addition to being object oriented.  Having multiple paradigms embraced in one language adds flexibility to the developer, letting them leverage the most appropriate programing methods, without having to switch languages.&lt;br /&gt;
&lt;br /&gt;
==Programing Paradigms==&lt;br /&gt;
Before delving into Hybrid Languages, here is a quick review of the paradigms we will be discussing. &lt;br /&gt;
&lt;br /&gt;
===Object Oriented Programming===&lt;br /&gt;
In Object Oriented Programming, code is grouped together into collections called Objects.  Objects keep track of data and contain methods relevant to the data of the object.  An object is described by a class.  In order for an object to be used, it must be instantiated from a class.  Objects can utilize other objects to help represent their data in meaningful ways (ie a school object can have many student objects).[http://www.codeproject.com/KB/architecture/OOP_Concepts_and_manymore.aspx#OOP]&lt;br /&gt;
&lt;br /&gt;
===Procedural Programming===&lt;br /&gt;
With procedural programming, operations are listed one after another in the order they are to be executed.  Procedural programming also incorporates the notion of functions, which are chucks of code that can be called repeatedly, usually to accomplish one specific task.  Functions take in data to be processed as arguments and output the result of the computation.  However, the output of a function can vary greatly, depending on the state of the program at any given moment.[http://knol.google.com/k/chris/procedural-programming/3qdf5q2hz62mx/93#]&lt;br /&gt;
&lt;br /&gt;
===Functional Programming===&lt;br /&gt;
Functional Programming has strong roots in mathematics and focuses on calculations.  Functions are called only to compute data and do not change the state of the program.  The output of functions in functional programming depend only on the arguments to the function, with no dependency on the state of the system.  Also, all variables are final - that is, once assigned to, they cannot be changed.  All these factors make functional programs very reliable and repeatable.[http://www.defmacro.org/ramblings/fp.html]&lt;br /&gt;
&lt;br /&gt;
==Hybrid Object Oriented Programming Languages==&lt;br /&gt;
The following Languages use Hybrid Object Oriented Programming Paradigms:&lt;br /&gt;
&lt;br /&gt;
===OCaml===&lt;br /&gt;
OCaml was an addition to the Caml programming language, which was itself derived from ML.  ML (Meta-Language) was originally developed as a highly functional programming language. It was used to assist with mathematical proofs. Caml was derived from ML to create a flexible programming language and it began to incorporate more procedural programming aspects.  Finally, OCaml was implemented, which added object oriented features such as multiple inheritance and module hierarchy management.[http://caml.inria.fr/about/history.html]&lt;br /&gt;
&lt;br /&gt;
====Design Considerations====&lt;br /&gt;
*By default, data in OCaml (variables, arrays, ect) are not modifiable, because of its roots in functional programming. However, to allow for more expressive procedural programming, variables are allowed to be declared as modifiable.&lt;br /&gt;
*To ensure safety, OCaml is statically typed and type matching is enforced at compile time.  This prevents many common run time errors, but does require attention to detail by the programmer.  This strong-typing is also true of objects in OCaml.  At compile time, OCaml makes sure that no object will receive a message it is not able to understand.&lt;br /&gt;
*OCaml allows for the definition of new data types using the concept of a data constructor.[http://caml.inria.fr/about/index.en.html]&lt;br /&gt;
&lt;br /&gt;
===Scala===&lt;br /&gt;
&lt;br /&gt;
===F#===&lt;br /&gt;
&lt;br /&gt;
===Fan===&lt;/div&gt;</summary>
		<author><name>Eeled</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_6_ee&amp;diff=25425</id>
		<title>CSC/ECE 517 Fall 2009/wiki2 6 ee</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_6_ee&amp;diff=25425"/>
		<updated>2009-10-10T02:35:41Z</updated>

		<summary type="html">&lt;p&gt;Eeled: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Hybrid Object Oriented Programing Languages=&lt;br /&gt;
&lt;br /&gt;
'''Hybrid Object Oriented Programming Languages''' are object oriented languages that also include one or more additional programing paradigms.  Commonly, hybrid object oriented languages include procedural and functional programing features, in addition to being object oriented.  Having multiple paradigms embraced in one language adds flexibility to the developer, letting them leverage the most appropriate programing methods, without having to switch languages.&lt;br /&gt;
&lt;br /&gt;
==Programing Paradigms==&lt;br /&gt;
Before delving into Hybrid Languages, here is a quick review of the paradigms we will be discussing. &lt;br /&gt;
&lt;br /&gt;
===Object Oriented Programming===&lt;br /&gt;
In Object Oriented Programming, code is grouped together into collections called Objects.  Objects keep track of data and contain methods relevant to the data of the object.  An object is described by a class.  In order for an object to be used, it must be instantiated from a class.  Objects can utilize other objects to help represent their data in meaningful ways (ie a school object can have many student objects).[http://www.codeproject.com/KB/architecture/OOP_Concepts_and_manymore.aspx#OOP]&lt;br /&gt;
&lt;br /&gt;
===Procedural Programming===&lt;br /&gt;
With procedural programming, operations are listed one after another in the order they are to be executed.  Procedural programming also incorporates the notion of functions, which are chucks of code that can be called repeatedly, usually to accomplish one specific task.  Functions take in data to be processed as arguments and output the result of the computation.  However, the output of a function can vary greatly, depending on the state of the program at any given moment.[http://knol.google.com/k/chris/procedural-programming/3qdf5q2hz62mx/93#]&lt;br /&gt;
&lt;br /&gt;
===Functional Programming===&lt;br /&gt;
Functional Programming has strong roots in mathematics and focuses on calculations.  Functions are called only to compute data and do not change the state of the program.  The output of functions in functional programming depend only on the arguments to the function, with no dependency on the state of the system.  Also, all variables are final - that is, once assigned to, they cannot be changed.  All these factors make functional programs very reliable and repeatable.[http://www.defmacro.org/ramblings/fp.html]&lt;br /&gt;
&lt;br /&gt;
==Hybrid Object Oriented Programming Languages==&lt;br /&gt;
The following Languages use Hybrid Object Oriented Programming Paradigms:&lt;br /&gt;
&lt;br /&gt;
===OCaml===&lt;br /&gt;
OCaml was an addition to the Caml programming language, which was itself derived from ML.  ML (Meta-Language) was originally developed as a highly functional programming language. It was used to assist with mathematical proofs. Caml was derived from ML to create a flexible programming language and it began to incorporate more procedural programming aspects.  Finally, OCaml was implemented, which added object oriented features such as multiple inheritance and module hierarchy management.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Scala===&lt;br /&gt;
&lt;br /&gt;
===F#===&lt;br /&gt;
&lt;br /&gt;
===Fan===&lt;/div&gt;</summary>
		<author><name>Eeled</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_6_ee&amp;diff=25219</id>
		<title>CSC/ECE 517 Fall 2009/wiki2 6 ee</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_6_ee&amp;diff=25219"/>
		<updated>2009-10-10T01:06:39Z</updated>

		<summary type="html">&lt;p&gt;Eeled: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Hybrid Object Oriented Programing Languages=&lt;br /&gt;
&lt;br /&gt;
'''Hybrid Object Oriented Programming Languages''' are object oriented languages that also include one or more additional programing paradigms.  Commonly, hybrid object oriented languages include procedural and functional programing features, in addition to being object oriented.  Having multiple paradigms embraced in one language adds flexibility to the developer, letting them leverage the most appropriate programing methods, without having to switch languages.&lt;br /&gt;
&lt;br /&gt;
==Programing Paradigms==&lt;br /&gt;
Before delving into Hybrid Languages, here is a quick review of the paradigms we will be discussing. &lt;br /&gt;
&lt;br /&gt;
===Object Oriented Programming===&lt;br /&gt;
In Object Oriented Programming, code is grouped together into collections called Objects.  Objects keep track of data and contain methods relevant to the data of the object.  An object is described by a class.  In order for an object to be used, it must be instantiated from a class.  Objects can utilize other objects to help represent their data in meaningful ways (ie a school object can have many student objects).[http://www.codeproject.com/KB/architecture/OOP_Concepts_and_manymore.aspx#OOP]&lt;br /&gt;
&lt;br /&gt;
===Procedural Programming===&lt;br /&gt;
With procedural programming, operations are listed one after another in the order they are to be executed.  Procedural programming also incorporates the notion of functions, which are chucks of code that can be called repeatedly, usually to accomplish one specific task.  Functions take in data to be processed as arguments and output the result of the computation.  However, the output of a function can vary greatly, depending on the state of the program at any given moment.[http://knol.google.com/k/chris/procedural-programming/3qdf5q2hz62mx/93#]&lt;br /&gt;
&lt;br /&gt;
===Functional Programming===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Hybrid Object Oriented Programming Languages==&lt;br /&gt;
&lt;br /&gt;
===OCaml===&lt;br /&gt;
&lt;br /&gt;
===Scala===&lt;br /&gt;
&lt;br /&gt;
===F#===&lt;br /&gt;
&lt;br /&gt;
===Fan===&lt;/div&gt;</summary>
		<author><name>Eeled</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_6_ee&amp;diff=25054</id>
		<title>CSC/ECE 517 Fall 2009/wiki2 6 ee</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_6_ee&amp;diff=25054"/>
		<updated>2009-10-10T00:33:49Z</updated>

		<summary type="html">&lt;p&gt;Eeled: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Hybrid Object Oriented Programing Languages=&lt;br /&gt;
&lt;br /&gt;
'''Hybrid Object Oriented Programming Languages''' are object oriented languages that also include one or more additional programing paradigms.  Commonly, hybrid object oriented languages include procedural and functional programing features, in addition to being object oriented.  Having multiple paradigms embraced in one language adds flexibility to the developer, letting them leverage the most appropriate programing methods, without having to switch languages.&lt;br /&gt;
&lt;br /&gt;
==Programing Paradigms==&lt;br /&gt;
&lt;br /&gt;
===Object Oriented Programming===&lt;br /&gt;
&lt;br /&gt;
===Procedural Programming===&lt;br /&gt;
&lt;br /&gt;
===Functional Programming===&lt;br /&gt;
&lt;br /&gt;
==Hybrid Object Oriented Programming Languages==&lt;br /&gt;
&lt;br /&gt;
===OCaml===&lt;br /&gt;
&lt;br /&gt;
===Scala===&lt;br /&gt;
&lt;br /&gt;
===F#===&lt;br /&gt;
&lt;br /&gt;
===Fan===&lt;/div&gt;</summary>
		<author><name>Eeled</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_6_ee&amp;diff=24949</id>
		<title>CSC/ECE 517 Fall 2009/wiki2 6 ee</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_6_ee&amp;diff=24949"/>
		<updated>2009-10-10T00:11:15Z</updated>

		<summary type="html">&lt;p&gt;Eeled: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Hybrid Object Oriented Programing Languages=&lt;/div&gt;</summary>
		<author><name>Eeled</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_3_ee&amp;diff=21355</id>
		<title>CSC/ECE 517 Fall 2009/wiki1a 3 ee</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_3_ee&amp;diff=21355"/>
		<updated>2009-09-21T21:00:36Z</updated>

		<summary type="html">&lt;p&gt;Eeled: /* References */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Distributed Version Control Systems=&lt;br /&gt;
&lt;br /&gt;
==Overview of Distributed Version Control==&lt;br /&gt;
&lt;br /&gt;
'''Distributed version control''' is a type of [http://betterexplained.com/articles/a-visual-guide-to-version-control/ revision control] system where each user has their own content repository, rather than off in a central location.  This allows for greater flexibility for individual developers within a project, as they can &amp;quot;do what they want&amp;quot; to their own version of the repository, without interference from other developers.  As developers wish to incorporate external changes, they can &amp;quot;pull&amp;quot; a set of changes into their own repository.&lt;br /&gt;
&lt;br /&gt;
Previously, centralized systems have been the only widely used version control systems. But recently, distributed version control systems have become more and more popular for a variety of reasons.&lt;br /&gt;
&lt;br /&gt;
==Definitions==&lt;br /&gt;
*'''Version Control''' - A system for managing changes and history for software source code&lt;br /&gt;
*'''Branching''' - In a version control system, branching is the idea of making a copy of all or part of the code base and making changes separate from the main line.  This allows for developers to develop new features or experiment without &amp;quot;breaking the build&amp;quot; on the main code base&lt;br /&gt;
*'''Merging''' - After branching in a version control system, developers might want to reincorporate changes from a branch back into the main code base.  This process of re-incorporating new changes is called merging&lt;br /&gt;
*'''Repository''' - The location where files under version control are stored.  Repositories can take many forms, depending on the particular version control system.&lt;br /&gt;
&lt;br /&gt;
==Infrastructure==&lt;br /&gt;
One reason distributed version control systems are gaining popularity is that the lack of a central &amp;quot;main&amp;quot; server empowers the individual developer.&lt;br /&gt;
===Repositories===&lt;br /&gt;
Instead of a central project repository, each developer has their own local repository.  This local repository is fully independent and behaves just as one would expect any repository to.  One can commit changes, view change logs and roll back versions.  But since it is fully self-contained on the developers machine, this can be done with no network connection.[http://wincent.com/a/about/wincent/weblog/archives/2007/10/why_distributed.php]&lt;br /&gt;
&lt;br /&gt;
===Sharing Changes===&lt;br /&gt;
When a developer commits a change to their repository, that change set is assigned a [http://en.wikipedia.org/wiki/Globally_Unique_Identifier guid].  If another developer on the project wants to incorporate another users changes, they can pull changes associated with a specific guid from another repository. Because each developer controls their own repository, changes can be incorporated continuously as they are needed, instead of submitting changes and waiting on a &amp;quot;merge-master&amp;quot; to integrate new features.&lt;br /&gt;
&lt;br /&gt;
==Branching and Merging==&lt;br /&gt;
Another reason many projects are moving towards distributed systems is that giving each developer their own repository makes [http://en.wikipedia.org/wiki/Branch_%28software%29 branching] and [http://en.wikipedia.org/wiki/Merge_%28revision_control%29 merging] natural.&lt;br /&gt;
&lt;br /&gt;
===Branching===&lt;br /&gt;
Because every developer has their own separate repository, each of these can be viewed as a branch[http://betterexplained.com/articles/intro-to-distributed-version-control-illustrated/].  Branching becomes natural because just by making the local repository to start work in, the developer has created a branch.  This means creating a branch is incredibly simple. In fact, its possible that on one developers machine, they might have any number of branches for working on different features or phases, each with its own repository.&lt;br /&gt;
&lt;br /&gt;
===Merging===&lt;br /&gt;
Similar to branching, because each developer has their own repository, merging becomes a natural and normal part of collaboration.  In order to incorporate another developers changes, you simply pull their modifications (each identified with a guid) into your local repository[http://betterexplained.com/articles/intro-to-distributed-version-control-illustrated/].  Your repository now has a record that the new guids have been incorporated into the local content and the repository carries that information going forward.  This makes it very easy if you do multiple merges where some content could be duplicated in external repositories.  If your repository already has a change associated with a particular guid, there is no need to incorporate that change.&lt;br /&gt;
&lt;br /&gt;
==List Of Distributed Version Control Systems==&lt;br /&gt;
*[http://git-scm.com/ Git]&lt;br /&gt;
*[http://bazaar-vcs.org/ Bazaar]&lt;br /&gt;
*[http://mercurial.selenic.com/wiki/ Mercurial]&lt;br /&gt;
*[http://www.bitkeeper.com/ BitKeeper]&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
#[http://wincent.com/a/about/wincent/weblog/archives/2007/10/why_distributed.php Why Distributed ]&lt;br /&gt;
#[http://betterexplained.com/articles/intro-to-distributed-version-control-illustrated/ Version Control Illustrated]&lt;/div&gt;</summary>
		<author><name>Eeled</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_3_ee&amp;diff=21353</id>
		<title>CSC/ECE 517 Fall 2009/wiki1a 3 ee</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_3_ee&amp;diff=21353"/>
		<updated>2009-09-21T20:59:42Z</updated>

		<summary type="html">&lt;p&gt;Eeled: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Distributed Version Control Systems=&lt;br /&gt;
&lt;br /&gt;
==Overview of Distributed Version Control==&lt;br /&gt;
&lt;br /&gt;
'''Distributed version control''' is a type of [http://betterexplained.com/articles/a-visual-guide-to-version-control/ revision control] system where each user has their own content repository, rather than off in a central location.  This allows for greater flexibility for individual developers within a project, as they can &amp;quot;do what they want&amp;quot; to their own version of the repository, without interference from other developers.  As developers wish to incorporate external changes, they can &amp;quot;pull&amp;quot; a set of changes into their own repository.&lt;br /&gt;
&lt;br /&gt;
Previously, centralized systems have been the only widely used version control systems. But recently, distributed version control systems have become more and more popular for a variety of reasons.&lt;br /&gt;
&lt;br /&gt;
==Definitions==&lt;br /&gt;
*'''Version Control''' - A system for managing changes and history for software source code&lt;br /&gt;
*'''Branching''' - In a version control system, branching is the idea of making a copy of all or part of the code base and making changes separate from the main line.  This allows for developers to develop new features or experiment without &amp;quot;breaking the build&amp;quot; on the main code base&lt;br /&gt;
*'''Merging''' - After branching in a version control system, developers might want to reincorporate changes from a branch back into the main code base.  This process of re-incorporating new changes is called merging&lt;br /&gt;
*'''Repository''' - The location where files under version control are stored.  Repositories can take many forms, depending on the particular version control system.&lt;br /&gt;
&lt;br /&gt;
==Infrastructure==&lt;br /&gt;
One reason distributed version control systems are gaining popularity is that the lack of a central &amp;quot;main&amp;quot; server empowers the individual developer.&lt;br /&gt;
===Repositories===&lt;br /&gt;
Instead of a central project repository, each developer has their own local repository.  This local repository is fully independent and behaves just as one would expect any repository to.  One can commit changes, view change logs and roll back versions.  But since it is fully self-contained on the developers machine, this can be done with no network connection.[http://wincent.com/a/about/wincent/weblog/archives/2007/10/why_distributed.php]&lt;br /&gt;
&lt;br /&gt;
===Sharing Changes===&lt;br /&gt;
When a developer commits a change to their repository, that change set is assigned a [http://en.wikipedia.org/wiki/Globally_Unique_Identifier guid].  If another developer on the project wants to incorporate another users changes, they can pull changes associated with a specific guid from another repository. Because each developer controls their own repository, changes can be incorporated continuously as they are needed, instead of submitting changes and waiting on a &amp;quot;merge-master&amp;quot; to integrate new features.&lt;br /&gt;
&lt;br /&gt;
==Branching and Merging==&lt;br /&gt;
Another reason many projects are moving towards distributed systems is that giving each developer their own repository makes [http://en.wikipedia.org/wiki/Branch_%28software%29 branching] and [http://en.wikipedia.org/wiki/Merge_%28revision_control%29 merging] natural.&lt;br /&gt;
&lt;br /&gt;
===Branching===&lt;br /&gt;
Because every developer has their own separate repository, each of these can be viewed as a branch[http://betterexplained.com/articles/intro-to-distributed-version-control-illustrated/].  Branching becomes natural because just by making the local repository to start work in, the developer has created a branch.  This means creating a branch is incredibly simple. In fact, its possible that on one developers machine, they might have any number of branches for working on different features or phases, each with its own repository.&lt;br /&gt;
&lt;br /&gt;
===Merging===&lt;br /&gt;
Similar to branching, because each developer has their own repository, merging becomes a natural and normal part of collaboration.  In order to incorporate another developers changes, you simply pull their modifications (each identified with a guid) into your local repository[http://betterexplained.com/articles/intro-to-distributed-version-control-illustrated/].  Your repository now has a record that the new guids have been incorporated into the local content and the repository carries that information going forward.  This makes it very easy if you do multiple merges where some content could be duplicated in external repositories.  If your repository already has a change associated with a particular guid, there is no need to incorporate that change.&lt;br /&gt;
&lt;br /&gt;
==List Of Distributed Version Control Systems==&lt;br /&gt;
*[http://git-scm.com/ Git]&lt;br /&gt;
*[http://bazaar-vcs.org/ Bazaar]&lt;br /&gt;
*[http://mercurial.selenic.com/wiki/ Mercurial]&lt;br /&gt;
*[http://www.bitkeeper.com/ BitKeeper]&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
#[http://wincent.com/a/about/wincent/weblog/archives/2007/10/why_distributed.php]&lt;br /&gt;
#[http://betterexplained.com/articles/intro-to-distributed-version-control-illustrated/]&lt;br /&gt;
#&lt;/div&gt;</summary>
		<author><name>Eeled</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_3_ee&amp;diff=21343</id>
		<title>CSC/ECE 517 Fall 2009/wiki1a 3 ee</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_3_ee&amp;diff=21343"/>
		<updated>2009-09-21T20:51:39Z</updated>

		<summary type="html">&lt;p&gt;Eeled: /* Definitions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Distributed Version Control Systems=&lt;br /&gt;
&lt;br /&gt;
==Overview of Distributed Version Control==&lt;br /&gt;
&lt;br /&gt;
'''Distributed version control''' is a type of [http://betterexplained.com/articles/a-visual-guide-to-version-control/ revision control] system where each user has their own content repository, rather than off in a central location.  This allows for greater flexibility for individual developers within a project, as they can &amp;quot;do what they want&amp;quot; to their own version of the repository, without interference from other developers.  As developers wish to incorporate external changes, they can &amp;quot;pull&amp;quot; a set of changes into their own repository.&lt;br /&gt;
&lt;br /&gt;
Previously, centralized systems have been the only widely used version control systems. But recently, distributed version control systems have become more and more popular for a variety of reasons.&lt;br /&gt;
&lt;br /&gt;
==Definitions==&lt;br /&gt;
*'''Version Control''' - A system for managing changes and history for software source code&lt;br /&gt;
*'''Branching''' - In a version control system, branching is the idea of making a copy of all or part of the code base and making changes separate from the main line.  This allows for developers to develop new features or experiment without &amp;quot;breaking the build&amp;quot; on the main code base&lt;br /&gt;
*'''Merging''' - After branching in a version control system, developers might want to reincorporate changes from a branch back into the main code base.  This process of re-incorporating new changes is called merging&lt;br /&gt;
*'''Repository''' - The location where files under version control are stored.  Repositories can take many forms, depending on the particular version control system.&lt;br /&gt;
&lt;br /&gt;
==Infrastructure==&lt;br /&gt;
One reason distributed version control systems are gaining popularity is that the lack of a central &amp;quot;main&amp;quot; server empowers the individual developer.&lt;br /&gt;
===Repositories===&lt;br /&gt;
Instead of a central project repository, each developer has their own local repository.  This local repository is fully independent and behaves just as one would expect any repository to.  One can commit changes, view change logs and roll back versions.  But since it is fully self-contained on the developers machine, this can be done with no network connection.[http://wincent.com/a/about/wincent/weblog/archives/2007/10/why_distributed.php]&lt;br /&gt;
&lt;br /&gt;
===Sharing Changes===&lt;br /&gt;
When a developer commits a change to their repository, that change set is assigned a [http://en.wikipedia.org/wiki/Globally_Unique_Identifier guid].  If another developer on the project wants to incorporate another users changes, they can pull changes associated with a specific guid from another repository. Because each developer controls their own repository, changes can be incorporated continuously as they are needed, instead of submitting changes and waiting on a &amp;quot;merge-master&amp;quot; to integrate new features.&lt;br /&gt;
&lt;br /&gt;
==Branching and Merging==&lt;br /&gt;
Another reason many projects are moving towards distributed systems is that giving each developer their own repository makes [http://en.wikipedia.org/wiki/Branch_%28software%29 branching] and [http://en.wikipedia.org/wiki/Merge_%28revision_control%29 merging] natural.&lt;br /&gt;
&lt;br /&gt;
===Branching===&lt;br /&gt;
Because every developer has their own separate repository, each of these can be viewed as a branch[http://betterexplained.com/articles/intro-to-distributed-version-control-illustrated/].  Branching becomes natural because just by making the local repository to start work in, the developer has created a branch.  This means creating a branch is incredibly simple. In fact, its possible that on one developers machine, they might have any number of branches for working on different features or phases, each with its own repository.&lt;br /&gt;
&lt;br /&gt;
===Merging===&lt;br /&gt;
Similar to branching, because each developer has their own repository, merging becomes a natural and normal part of collaboration.  In order to incorporate another developers changes, you simply pull their modifications (each identified with a guid) into your local repository[http://betterexplained.com/articles/intro-to-distributed-version-control-illustrated/].  Your repository now has a record that the new guids have been incorporated into the local content and the repository carries that information going forward.  This makes it very easy if you do multiple merges where some content could be duplicated in external repositories.  If your repository already has a change associated with a particular guid, there is no need to incorporate that change.&lt;br /&gt;
&lt;br /&gt;
==List Of Distributed Version Control Systems==&lt;br /&gt;
*[http://git-scm.com/ Git]&lt;br /&gt;
*[http://bazaar-vcs.org/ Bazaar]&lt;br /&gt;
*[http://mercurial.selenic.com/wiki/ Mercurial]&lt;br /&gt;
*[http://www.bitkeeper.com/ BitKeeper]&lt;/div&gt;</summary>
		<author><name>Eeled</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_3_ee&amp;diff=21339</id>
		<title>CSC/ECE 517 Fall 2009/wiki1a 3 ee</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_3_ee&amp;diff=21339"/>
		<updated>2009-09-21T20:49:47Z</updated>

		<summary type="html">&lt;p&gt;Eeled: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Distributed Version Control Systems=&lt;br /&gt;
&lt;br /&gt;
==Overview of Distributed Version Control==&lt;br /&gt;
&lt;br /&gt;
'''Distributed version control''' is a type of [http://betterexplained.com/articles/a-visual-guide-to-version-control/ revision control] system where each user has their own content repository, rather than off in a central location.  This allows for greater flexibility for individual developers within a project, as they can &amp;quot;do what they want&amp;quot; to their own version of the repository, without interference from other developers.  As developers wish to incorporate external changes, they can &amp;quot;pull&amp;quot; a set of changes into their own repository.&lt;br /&gt;
&lt;br /&gt;
Previously, centralized systems have been the only widely used version control systems. But recently, distributed version control systems have become more and more popular for a variety of reasons.&lt;br /&gt;
&lt;br /&gt;
==Definitions==&lt;br /&gt;
*'''Version Control''' - A system for managing changes and history for software source code&lt;br /&gt;
*'''Branching''' - In a version control system, branching is the idea of making a copy of all or part of the code base and making changes separate from the main line.  This allows for developers to develop new features or experiment without &amp;quot;breaking the build&amp;quot; on the main code base&lt;br /&gt;
*'''Merging''' - After branching in a version control system, developers might want to reincorporate changes from a branch back into the main code base.  This process of re-incorporating new changes is called merging&lt;br /&gt;
&lt;br /&gt;
==Infrastructure==&lt;br /&gt;
One reason distributed version control systems are gaining popularity is that the lack of a central &amp;quot;main&amp;quot; server empowers the individual developer.&lt;br /&gt;
===Repositories===&lt;br /&gt;
Instead of a central project repository, each developer has their own local repository.  This local repository is fully independent and behaves just as one would expect any repository to.  One can commit changes, view change logs and roll back versions.  But since it is fully self-contained on the developers machine, this can be done with no network connection.[http://wincent.com/a/about/wincent/weblog/archives/2007/10/why_distributed.php]&lt;br /&gt;
&lt;br /&gt;
===Sharing Changes===&lt;br /&gt;
When a developer commits a change to their repository, that change set is assigned a [http://en.wikipedia.org/wiki/Globally_Unique_Identifier guid].  If another developer on the project wants to incorporate another users changes, they can pull changes associated with a specific guid from another repository. Because each developer controls their own repository, changes can be incorporated continuously as they are needed, instead of submitting changes and waiting on a &amp;quot;merge-master&amp;quot; to integrate new features.&lt;br /&gt;
&lt;br /&gt;
==Branching and Merging==&lt;br /&gt;
Another reason many projects are moving towards distributed systems is that giving each developer their own repository makes [http://en.wikipedia.org/wiki/Branch_%28software%29 branching] and [http://en.wikipedia.org/wiki/Merge_%28revision_control%29 merging] natural.&lt;br /&gt;
&lt;br /&gt;
===Branching===&lt;br /&gt;
Because every developer has their own separate repository, each of these can be viewed as a branch[http://betterexplained.com/articles/intro-to-distributed-version-control-illustrated/].  Branching becomes natural because just by making the local repository to start work in, the developer has created a branch.  This means creating a branch is incredibly simple. In fact, its possible that on one developers machine, they might have any number of branches for working on different features or phases, each with its own repository.&lt;br /&gt;
&lt;br /&gt;
===Merging===&lt;br /&gt;
Similar to branching, because each developer has their own repository, merging becomes a natural and normal part of collaboration.  In order to incorporate another developers changes, you simply pull their modifications (each identified with a guid) into your local repository[http://betterexplained.com/articles/intro-to-distributed-version-control-illustrated/].  Your repository now has a record that the new guids have been incorporated into the local content and the repository carries that information going forward.  This makes it very easy if you do multiple merges where some content could be duplicated in external repositories.  If your repository already has a change associated with a particular guid, there is no need to incorporate that change.&lt;br /&gt;
&lt;br /&gt;
==List Of Distributed Version Control Systems==&lt;br /&gt;
*[http://git-scm.com/ Git]&lt;br /&gt;
*[http://bazaar-vcs.org/ Bazaar]&lt;br /&gt;
*[http://mercurial.selenic.com/wiki/ Mercurial]&lt;br /&gt;
*[http://www.bitkeeper.com/ BitKeeper]&lt;/div&gt;</summary>
		<author><name>Eeled</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_3_ee&amp;diff=19009</id>
		<title>CSC/ECE 517 Fall 2009/wiki1a 3 ee</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_3_ee&amp;diff=19009"/>
		<updated>2009-09-09T05:47:41Z</updated>

		<summary type="html">&lt;p&gt;Eeled: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Distributed Version Control Systems=&lt;br /&gt;
&lt;br /&gt;
==Overview of Distributed Version Control==&lt;br /&gt;
&lt;br /&gt;
'''Distributed version control''' is a type of [http://betterexplained.com/articles/a-visual-guide-to-version-control/ revision control] system where each user has their own content repository, rather than off in a central location.  This allows for greater flexibility for individual developers within a project, as they can &amp;quot;do what they want&amp;quot; to their own version of the repository, without interference from other developers.  As developers wish to incorporate external changes, they can &amp;quot;pull&amp;quot; a set of changes into their own repository.  &lt;br /&gt;
&lt;br /&gt;
Previously, centralized systems have been the only widely used version control systems. But recently, distributed version control systems have become more and more popular for a variety of reasons.&lt;br /&gt;
&lt;br /&gt;
==Infrastructure==&lt;br /&gt;
One reason distributed version control systems are gaining popularity is that the lack of a central &amp;quot;main&amp;quot; server empowers the individual developer.&lt;br /&gt;
===Repositories===&lt;br /&gt;
Instead of a central project repository, each developer has their own local repository.  This local repository is fully independent and behaves just as one would expect any repository to.  One can commit changes, view change logs and roll back versions.  But since it is fully self-contained on the developers machine, this can be done with no network connection.[http://wincent.com/a/about/wincent/weblog/archives/2007/10/why_distributed.php]&lt;br /&gt;
&lt;br /&gt;
===Sharing Changes===&lt;br /&gt;
When a developer commits a change to their repository, that change set is assigned a [http://en.wikipedia.org/wiki/Globally_Unique_Identifier guid].  If another developer on the project wants to incorporate another users changes, they can pull changes associated with a specific guid from another repository. Because each developer controls their own repository, changes can be incorporated continuously as they are needed, instead of submitting changes and waiting on a &amp;quot;merge-master&amp;quot; to integrate new features.&lt;br /&gt;
&lt;br /&gt;
==Branching and Merging==&lt;br /&gt;
Another reason many projects are moving towards distributed systems is that giving each developer their own repository makes [http://en.wikipedia.org/wiki/Branch_%28software%29 branching] and [http://en.wikipedia.org/wiki/Merge_%28revision_control%29 merging] natural.&lt;br /&gt;
&lt;br /&gt;
===Branching===&lt;br /&gt;
Because every developer has their own separate repository, each of these can be viewed as a branch[http://betterexplained.com/articles/intro-to-distributed-version-control-illustrated/].  Branching becomes natural because just by making the local repository to start work in, the developer has created a branch.  This means creating a branch is incredibly simple. In fact, its possible that on one developers machine, they might have any number of branches for working on different features or phases, each with its own repository.&lt;br /&gt;
&lt;br /&gt;
===Merging===&lt;br /&gt;
Similar to branching, because each developer has their own repository, merging becomes a natural and normal part of collaboration.  In order to incorporate another developers changes, you simply pull their modifications (each identified with a guid) into your local repository[http://betterexplained.com/articles/intro-to-distributed-version-control-illustrated/].  Your repository now has a record that the new guids have been incorporated into the local content and the repository carries that information going forward.  This makes it very easy if you do multiple merges where some content could be duplicated in external repositories.  If your repository already has a particular guid, there is no need to incorporate that change.&lt;br /&gt;
&lt;br /&gt;
==List Of Distributed Version Control Systems==&lt;br /&gt;
*[http://git-scm.com/ Git]&lt;br /&gt;
*[http://bazaar-vcs.org/ Bazaar]&lt;br /&gt;
*[http://mercurial.selenic.com/wiki/ Mercurial]&lt;br /&gt;
*[http://www.bitkeeper.com/ BitKeeper]&lt;/div&gt;</summary>
		<author><name>Eeled</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_3_ee&amp;diff=19008</id>
		<title>CSC/ECE 517 Fall 2009/wiki1a 3 ee</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_3_ee&amp;diff=19008"/>
		<updated>2009-09-09T05:41:44Z</updated>

		<summary type="html">&lt;p&gt;Eeled: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Distributed Version Control Systems=&lt;br /&gt;
&lt;br /&gt;
==Overview of Distributed Version Control==&lt;br /&gt;
&lt;br /&gt;
'''Distributed version control''' is a type of [http://betterexplained.com/articles/a-visual-guide-to-version-control/ revision control] system where each user has their own content repository, rather than off in a central location.  This allows for greater flexibility for individual developers within a project, as they can &amp;quot;do what they want&amp;quot; to their own version of the repository, without interference from other developers.  As developers wish to incorporate external changes, they can &amp;quot;pull&amp;quot; a set of changes into their own repository.  &lt;br /&gt;
&lt;br /&gt;
Previously, centralized systems have been the only widely used version control systems. But recently, distributed version control systems have started to take hold in a big way.&lt;br /&gt;
&lt;br /&gt;
==Infrastructure==&lt;br /&gt;
One reason distributed version control systems are gaining popularity is that the lack of a central &amp;quot;main&amp;quot; server empowers the individual developer.&lt;br /&gt;
===Repositories===&lt;br /&gt;
Instead of a central project repository, each developer has their own local repository.  This local repository is fully independent and behaves just as one would expect any repository to.  One can commit changes, view change logs and roll back versions.  But since it is fully self-contained on the developers machine, this can be done with no network connection.[http://wincent.com/a/about/wincent/weblog/archives/2007/10/why_distributed.php]&lt;br /&gt;
&lt;br /&gt;
===Sharing Changes===&lt;br /&gt;
When a developer commits a change to their repository, that change set is assigned a [http://en.wikipedia.org/wiki/Globally_Unique_Identifier guid].  If another developer on the project wants to incorporate another users changes, they can pull changes associated with a specific guid from another repository. Because each developer controls their own repository, changes can be incorporated continuously as they are needed, instead of submitting changes and waiting on a &amp;quot;merge-master&amp;quot; to integrate new features.&lt;br /&gt;
&lt;br /&gt;
==Branching and Merging==&lt;br /&gt;
Another reason many projects are moving towards distributed systems is that giving each developer their own repository makes [http://en.wikipedia.org/wiki/Branch_%28software%29 branching] and [http://en.wikipedia.org/wiki/Merge_%28revision_control%29 merging] natural.&lt;br /&gt;
&lt;br /&gt;
===Branching===&lt;br /&gt;
Because every developer has their own separate repository, each of these can be viewed as a branch[http://betterexplained.com/articles/intro-to-distributed-version-control-illustrated/].  Branching becomes natural because just by making the local repository to start work in, the developer has created a branch.  This means creating a branch is incredibly simple. In fact, its possible that on one developers machine, they might have any number of branches for working on different features or phases, each with its own repository.&lt;br /&gt;
&lt;br /&gt;
===Merging===&lt;br /&gt;
Similar to branching, because each developer has their own repository, merging becomes a natural and normal part of collaboration.  In order to incorporate another developers changes, you simply pull their modifications (each identified with a guid) into your local repository[http://betterexplained.com/articles/intro-to-distributed-version-control-illustrated/].  Your repository now has a record that the new guids have been incorporated into the local content and the repository carries that information going forward.  This makes it very easy if you do multiple merges where some content could be duplicated in external repositories.  If your repository already has a particular guid, there is no need to incorporate that change.&lt;br /&gt;
&lt;br /&gt;
==List Of Distributed Version Control Systems==&lt;br /&gt;
*[http://git-scm.com/ Git]&lt;br /&gt;
*[http://bazaar-vcs.org/ Bazaar]&lt;br /&gt;
*[http://mercurial.selenic.com/wiki/ Mercurial]&lt;br /&gt;
*[http://www.bitkeeper.com/ BitKeeper]&lt;/div&gt;</summary>
		<author><name>Eeled</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_3_ee&amp;diff=19007</id>
		<title>CSC/ECE 517 Fall 2009/wiki1a 3 ee</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_3_ee&amp;diff=19007"/>
		<updated>2009-09-09T05:25:52Z</updated>

		<summary type="html">&lt;p&gt;Eeled: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Distributed Version Control Systems=&lt;br /&gt;
&lt;br /&gt;
==Overview of Distributed Version Control==&lt;br /&gt;
&lt;br /&gt;
'''Distributed version control''' is a type of [http://betterexplained.com/articles/a-visual-guide-to-version-control/ revision control] system where each user has their own content repository, rather than off in a central location.  This allows for greater flexibility for individual developers within a project, as they can &amp;quot;do what they want&amp;quot; to their own version of the repository, without interference from other developers.  As developers wish to incorporate external changes, they can &amp;quot;pull&amp;quot; a set of changes into their own repository.  &lt;br /&gt;
&lt;br /&gt;
Previously, centralized systems have been the only widely used version control systems. But recently, distributed version control systems have started to take hold in a big way.&lt;br /&gt;
&lt;br /&gt;
==Infrastructure==&lt;br /&gt;
One reason distributed version control systems are gaining popularity is that the lack of a central &amp;quot;main&amp;quot; server empowers the individual developer.&lt;br /&gt;
===Repositories===&lt;br /&gt;
Instead of a central project repository, each developer has their own local repository.  This local repository is fully independent and behaves just as one would expect any repository to.  One can commit changes, view change logs and roll back versions.  But since it is fully self-contained on the developers machine, this can be done with no network connection.&lt;br /&gt;
&lt;br /&gt;
===Sharing Changes===&lt;br /&gt;
When a developer commits a change to their repository, that change set is assigned a [http://en.wikipedia.org/wiki/Globally_Unique_Identifier guid].  If another developer on the project wants to incorporate another users changes, they can pull changes associated with a specific guid from another repository. Because each developer controls their own repository, changes can be incorporated continuously as they are needed, instead of submitting changes and waiting on a &amp;quot;merge-master&amp;quot; to integrate new features.&lt;br /&gt;
&lt;br /&gt;
==Branching and Merging==&lt;br /&gt;
Another reason many projects are moving towards distributed systems is that giving each developer their own repository makes branching and merging natural.&lt;br /&gt;
&lt;br /&gt;
===Branching===&lt;br /&gt;
Because every developer has their own separate repository, each of these can be viewed as a [http://en.wikipedia.org/wiki/Branch_%28software%29 branch].  Branching becomes natural because just by making the local repository to start work in, the developer has created a branch.  This means creating a branch is incredibly simple. In fact, its possible that on one developers machine, they might have any number of branches for working on different features or phases, each with its own repository.&lt;br /&gt;
&lt;br /&gt;
===Merging===&lt;br /&gt;
Similar to branching, because each developer has their own repository, merging becomes a natural and normal part of collaboration.  In order to incorporate another developers changes, you simply pull their modifications (each identified with a guid) into your local repository.  Your repository now has a record that the new guids have been incorporated into the local content and the repository carries that information going forward.  This makes it very easy if you do multiple merges where some content could be duplicated in external repositories.  If your repository already has a particular guid, there is no need to incorporate that change.&lt;br /&gt;
&lt;br /&gt;
==Distributed Vs Centralized Version Control==&lt;br /&gt;
&lt;br /&gt;
==List Of Distributed Version Control Systems==&lt;br /&gt;
Git&lt;br /&gt;
Bazaar&lt;br /&gt;
Mercurial&lt;br /&gt;
BitKeeper&lt;/div&gt;</summary>
		<author><name>Eeled</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_3_ee&amp;diff=19006</id>
		<title>CSC/ECE 517 Fall 2009/wiki1a 3 ee</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_3_ee&amp;diff=19006"/>
		<updated>2009-09-09T04:32:45Z</updated>

		<summary type="html">&lt;p&gt;Eeled: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Distributed Version Control Systems=&lt;br /&gt;
&lt;br /&gt;
==Overview of Distributed Version Control==&lt;br /&gt;
&lt;br /&gt;
'''Distributed version control''' is a type of [http://betterexplained.com/articles/a-visual-guide-to-version-control/ revision control] system where each user has their own content repository, rather than off in a central location.  This allows for greater flexibility for individual developers within a project, as they can &amp;quot;do what they want&amp;quot; to their own version of the repository, without interference from other developers.  As developers wish to incorporate external changes, they can &amp;quot;pull&amp;quot; a set of changes into their own repository.  &lt;br /&gt;
&lt;br /&gt;
Previously, centralized systems have been the only widely used version control systems. But recently, distributed version control systems have started to take hold in a big way.&lt;br /&gt;
&lt;br /&gt;
==Infrastructure==&lt;br /&gt;
One reason distributed version control systems are gaining popularity is that the lack of a central &amp;quot;main&amp;quot; server empowers the individual developer.&lt;br /&gt;
===Repositories===&lt;br /&gt;
Instead of a central project repository, each developer has their own local repository.  This local repository is fully independent and behaves just as one would expect any repository to.  One can commit changes, view change logs and roll back versions.  But since it is fully self-contained on the developers machine, this can be done with no network connection.&lt;br /&gt;
&lt;br /&gt;
===Sharing Changes===&lt;br /&gt;
When a developer commits a change to their repository, that change set is assigned a [http://en.wikipedia.org/wiki/Globally_Unique_Identifier guid].  If another developer on the project wants to incorporate another users changes, they can pull changes associated with a specific guid from another repository. Because each developer controls their own repository, changes can be incorporated continuously as they are needed, instead of submitting changes and waiting on a &amp;quot;merge-master&amp;quot; to integrate new features.&lt;br /&gt;
&lt;br /&gt;
==Branching and Merging==&lt;br /&gt;
Another reason many projects are moving towards distributed systems is that giving each developer their own repository makes branching and merging natural.&lt;br /&gt;
&lt;br /&gt;
===Branching===&lt;br /&gt;
Because every developer has their own separate repository, each of these can be treated like a [http://en.wikipedia.org/wiki/Branch_%28software%29 branch].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Distributed Vs Centralized Version Control==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Publishing===&lt;br /&gt;
&lt;br /&gt;
==List Of Distributed Version Control Systems==&lt;/div&gt;</summary>
		<author><name>Eeled</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_3_ee&amp;diff=19005</id>
		<title>CSC/ECE 517 Fall 2009/wiki1a 3 ee</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_3_ee&amp;diff=19005"/>
		<updated>2009-09-09T04:29:30Z</updated>

		<summary type="html">&lt;p&gt;Eeled: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Distributed Version Control Systems=&lt;br /&gt;
&lt;br /&gt;
==Overview of Distributed Version Control==&lt;br /&gt;
&lt;br /&gt;
'''Distributed version control''' is a type of [http://betterexplained.com/articles/a-visual-guide-to-version-control/ revision control] system where each user has their own content repository, rather than off in a central location.  This allows for greater flexibility for individual developers within a project, as they can &amp;quot;do what they want&amp;quot; to their own version of the repository, without interference from other developers.  As developers wish to incorporate external changes, they can &amp;quot;pull&amp;quot; a set of changes into their own repository.  &lt;br /&gt;
&lt;br /&gt;
Previously, centralized systems have been the only widely used version control systems. But recently, distributed version control systems have started to take hold in a big way.&lt;br /&gt;
&lt;br /&gt;
==Infrastructure==&lt;br /&gt;
One reason distributed version control systems are gaining popularity is that the lack of a central &amp;quot;main&amp;quot; server empowers the individual developer.&lt;br /&gt;
===Repositories===&lt;br /&gt;
Instead of a central project repository, each developer has their own local repository.  This local repository is fully independent and behaves just as one would expect any repository to.  One can commit changes, view change logs and roll back versions.  But since it is fully self-contained on the developers machine, this can be done with no network connection.&lt;br /&gt;
===Sharing Changes===&lt;br /&gt;
When a developer commits a change to their repository, that change set is assigned a [http://en.wikipedia.org/wiki/Globally_Unique_Identifier guid].  If another developer on the project wants to incorporate another users changes, they can pull changes associated with a specific guid from another repository. Because each developer controls their own repository, changes can be incorporated continuously as they are needed, instead of submitting changes and waiting on a &amp;quot;merge-master&amp;quot; to integrate new features.&lt;br /&gt;
&lt;br /&gt;
==Branching and Merging==&lt;br /&gt;
Another reason many projects are moving towards distributed systems is that giving each developer their own repository makes branching and merging natural.&lt;br /&gt;
&lt;br /&gt;
==Distributed Vs Centralized Version Control==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Publishing===&lt;br /&gt;
&lt;br /&gt;
==List Of Distributed Version Control Systems==&lt;/div&gt;</summary>
		<author><name>Eeled</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_3_ee&amp;diff=19004</id>
		<title>CSC/ECE 517 Fall 2009/wiki1a 3 ee</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_3_ee&amp;diff=19004"/>
		<updated>2009-09-09T04:28:40Z</updated>

		<summary type="html">&lt;p&gt;Eeled: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Distributed Version Control Systems=&lt;br /&gt;
&lt;br /&gt;
==Overview of Distributed Version Control==&lt;br /&gt;
&lt;br /&gt;
'''Distributed version control''' is a type of [http://betterexplained.com/articles/a-visual-guide-to-version-control/ revision control] system where each user has their own content repository, rather than off in a central location.  This allows for greater flexibility for individual developers within a project, as they can &amp;quot;do what they want&amp;quot; to their own version of the repository, without interference from other developers.  As developers wish to incorporate external changes, they can &amp;quot;pull&amp;quot; a set of changes into their own repository.  &lt;br /&gt;
&lt;br /&gt;
Previously, centralized systems have been the only widely used version control systems. But recently, distributed version control systems have started to take hold in a big way.&lt;br /&gt;
&lt;br /&gt;
==Infrastructure==&lt;br /&gt;
One reason distributed version control systems are gaining popularity is that the lack of a central &amp;quot;main&amp;quot; server empowers the individual developer.&lt;br /&gt;
&lt;br /&gt;
Instead of a central project repository, each developer has their own local repository.  This local repository is fully independent and behaves just as one would expect any repository to.  One can commit changes, view change logs and roll back versions.  But since it is fully self-contained on the developers machine, this can be done with no network connection.&lt;br /&gt;
&lt;br /&gt;
When a developer commits a change to their repository, that change set is assigned a [http://en.wikipedia.org/wiki/Globally_Unique_Identifier guid].  If another developer on the project wants to incorporate another users changes, they can pull changes associated with a specific guid from another repository. Because each developer controls their own repository, changes can be incorporated continuously as they are needed, instead of submitting changes and waiting on a &amp;quot;merge-master&amp;quot; to integrate new features.&lt;br /&gt;
&lt;br /&gt;
==Branching and Merging==&lt;br /&gt;
Another reason many projects are moving towards distributed systems is that giving each developer their own repository makes branching and merging natural.&lt;br /&gt;
&lt;br /&gt;
==Distributed Vs Centralized Version Control==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Publishing===&lt;br /&gt;
&lt;br /&gt;
==List Of Distributed Version Control Systems==&lt;/div&gt;</summary>
		<author><name>Eeled</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_3_ee&amp;diff=19003</id>
		<title>CSC/ECE 517 Fall 2009/wiki1a 3 ee</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_3_ee&amp;diff=19003"/>
		<updated>2009-09-09T04:13:16Z</updated>

		<summary type="html">&lt;p&gt;Eeled: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Distributed Version Control Systems=&lt;br /&gt;
&lt;br /&gt;
==Overview of Distributed Version Control==&lt;br /&gt;
&lt;br /&gt;
'''Distributed version control''' is a type of [http://betterexplained.com/articles/a-visual-guide-to-version-control/ revision control] system where each user has their own content repository, rather than off in a central location.  This allows for greater flexibility for individual developers within a project, as they can &amp;quot;do what they want&amp;quot; to their own version of the repository, without interference from other developers.  As developers wish to incorporate external changes, they can &amp;quot;pull&amp;quot; a set of changes into their own repository.&lt;br /&gt;
&lt;br /&gt;
==Infrastructure==&lt;br /&gt;
Instead of a central project repository, each developer has their own local repository.  This local repository is fully independent and behaves just as one would expect any repository to.  One can commit changes, view change logs and roll back versions.  But since it is fully self-contained on the developers machine, this can be done with no network connection.&lt;br /&gt;
&lt;br /&gt;
When a developer commits a change to their repository, that change set is assigned a [http://en.wikipedia.org/wiki/Globally_Unique_Identifier guid].  If another developer on the project wants to incorporate another users changes, they can connect to their peers repository and get the changes associated with a specific guid. &lt;br /&gt;
Since there is no single authoritative central repository with distributed version control, any one user's repository is just as important as any others.&lt;br /&gt;
&lt;br /&gt;
==Distributed Vs Centralized Version Control==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Branching===&lt;br /&gt;
===Publishing===&lt;br /&gt;
&lt;br /&gt;
==List Of Distributed Version Control Systems==&lt;/div&gt;</summary>
		<author><name>Eeled</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_3_ee&amp;diff=19002</id>
		<title>CSC/ECE 517 Fall 2009/wiki1a 3 ee</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_3_ee&amp;diff=19002"/>
		<updated>2009-09-09T03:47:47Z</updated>

		<summary type="html">&lt;p&gt;Eeled: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Distributed Version Control Systems=&lt;br /&gt;
&lt;br /&gt;
==Overview of Distributed Version Control==&lt;br /&gt;
&lt;br /&gt;
'''Distributed Version Control''' is a type of [http://betterexplained.com/articles/a-visual-guide-to-version-control/ revision control] system where each user has their own content repository, rather than off in a central location.  This allows for greater flexibility for individual developers within a project, as they can &amp;quot;do what they want&amp;quot; to their own version of the repository, without interference from other developers.  As developers wish to incorportate external changes, they can &amp;quot;pull&amp;quot; a set of changes into their own repository.&lt;br /&gt;
==Distributed Vs Centralized Version Control==&lt;br /&gt;
===Infrastructure===&lt;br /&gt;
===Branching===&lt;br /&gt;
===Publishing===&lt;br /&gt;
&lt;br /&gt;
==Distributed Version Control Systems==&lt;/div&gt;</summary>
		<author><name>Eeled</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_3_ee&amp;diff=18998</id>
		<title>CSC/ECE 517 Fall 2009/wiki1a 3 ee</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_3_ee&amp;diff=18998"/>
		<updated>2009-09-09T03:12:03Z</updated>

		<summary type="html">&lt;p&gt;Eeled: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Distributed Version Control Systems=&lt;br /&gt;
&lt;br /&gt;
==Overview of Distributed Version Control==&lt;br /&gt;
&lt;br /&gt;
'''Distributed Version Control''' is a type of [http://betterexplained.com/articles/a-visual-guide-to-version-control/ revision control] system where content is shared across many computers, rather than in a central repository. &lt;br /&gt;
==Distributed Vs Centralized Version Control==&lt;br /&gt;
===Infrastructure===&lt;br /&gt;
===Branching===&lt;br /&gt;
===Publishing===&lt;br /&gt;
&lt;br /&gt;
==Distributed Version Control Systems==&lt;/div&gt;</summary>
		<author><name>Eeled</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_3_ee&amp;diff=18994</id>
		<title>CSC/ECE 517 Fall 2009/wiki1a 3 ee</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_3_ee&amp;diff=18994"/>
		<updated>2009-09-09T02:50:35Z</updated>

		<summary type="html">&lt;p&gt;Eeled: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Distributed Version Control Systems=&lt;br /&gt;
&lt;br /&gt;
==Overview of Distributed Version Control==&lt;br /&gt;
&lt;br /&gt;
==Distributed Vs Centralized Version Control==&lt;br /&gt;
===Infrastructure===&lt;br /&gt;
===Branching===&lt;br /&gt;
===Publishing===&lt;br /&gt;
&lt;br /&gt;
==Distributed Version Control Systems==&lt;/div&gt;</summary>
		<author><name>Eeled</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_3_ee&amp;diff=18969</id>
		<title>CSC/ECE 517 Fall 2009/wiki1a 3 ee</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_3_ee&amp;diff=18969"/>
		<updated>2009-09-09T02:17:30Z</updated>

		<summary type="html">&lt;p&gt;Eeled: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Distributed Version Control Systems&lt;/div&gt;</summary>
		<author><name>Eeled</name></author>
	</entry>
</feed>