<?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=Varjun2</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=Varjun2"/>
	<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=Special:Contributions/Varjun2"/>
	<updated>2026-05-14T14:44:09Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.41.0</generator>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w33_pv&amp;diff=69402</id>
		<title>CSC/ECE 517 Fall 2012/ch2a 2w33 pv</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w33_pv&amp;diff=69402"/>
		<updated>2012-11-02T18:01:47Z</updated>

		<summary type="html">&lt;p&gt;Varjun2: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;big&amp;gt;'''SaaS - 5.5 - Fixtures and Factories'''&amp;lt;/big&amp;gt; &amp;lt;ref&amp;gt;http://www.youtube.com/watch?v=OG8i9Udqm_s&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
One of the best parts about [http://www.ruby-lang.org/en/ Ruby] community is the degree to which the developers focus on testing. Developers work with 3 types of tests namely, units (for models)&amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Unit_testing&amp;lt;/ref&amp;gt;, functional &amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Functional_testing&amp;lt;/ref&amp;gt; (for controllers) and integration &amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Integration_testing&amp;lt;/ref&amp;gt; tests. Testing requires providing the code with inputs and matching the output generated with the expected outputs. Testing data from the database is however is a little challenging since data should be first stored in the database so that the tests can run on it. These tests may make a few modifications(adding, deleting or updating rows) to the data present in the database. These changes will stay for the next test which is not desirable. Therefore, we need a way to put the database into a known state before the next test begins. This can be achieved using Fixtures and Factories.&amp;lt;ref&amp;gt;http://www.linuxjournal.com/magazine/forge-fixtures-and-factories?page=0,0&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Fixtures=&lt;br /&gt;
Fixtures are sample data on which all the tests run.&lt;br /&gt;
&lt;br /&gt;
There can be 3 types of fixtures&amp;lt;ref&amp;gt;http://ar.rubyonrails.org/classes/Fixtures.html&amp;lt;/ref&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
1. YAML fixtures&lt;br /&gt;
&lt;br /&gt;
2. CSV fixtures&lt;br /&gt;
&lt;br /&gt;
3. Single-file fixtures&lt;br /&gt;
&lt;br /&gt;
==YAML Fixtures==&lt;br /&gt;
YAML is a recursive acronym for &amp;quot;YAML Ain't Markup Language&amp;quot;.&amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/YAML&amp;lt;/ref&amp;gt; YAML is a file format which describes data structures in a non-verbose, human-readable format. YAML consists of name-value pairs within a hierarchy, and indentation indicates where in the hierarchy a particular name-value pair exists. This file ends with .yml extension.&lt;br /&gt;
&lt;br /&gt;
The following example shows the format of a YAML fixture for a post:&lt;br /&gt;
&lt;br /&gt;
 post_one:&lt;br /&gt;
   title: one&lt;br /&gt;
   description: post_one_desc&lt;br /&gt;
   category: category_one&lt;br /&gt;
 &lt;br /&gt;
 post_two:&lt;br /&gt;
   title: two&lt;br /&gt;
   description: post_two_desc&lt;br /&gt;
   category: category_two&lt;br /&gt;
&lt;br /&gt;
==CSV fixtures==&lt;br /&gt;
Comma Separated Value format can be used to store sample data. The files end with &amp;quot;.csv&amp;quot; extension. The first line of the CSV file is a comma-separated list of field names. The rest of the file contains the actual data. CSV fixtures have no fixture names.&lt;br /&gt;
&lt;br /&gt;
The following example shows the format of a CSV fixture: &lt;br /&gt;
 &lt;br /&gt;
 title,description, category&lt;br /&gt;
 one, post_one_desc, category_one&lt;br /&gt;
 two, post_two_desc, category_two&lt;br /&gt;
&lt;br /&gt;
==Single-file fixtures==&lt;br /&gt;
Fixtures for this format are created by placing text files in a sub-directory (with the name of the model) to the directory appointed by ActiveSupport::TestCase.fixture_path=(path). Each text file placed in this directory represents a &amp;quot;record&amp;quot;. Usually these types of fixtures are named without extensions.&lt;br /&gt;
&lt;br /&gt;
The following example shows the format of a single-file fixture: &lt;br /&gt;
 &lt;br /&gt;
 posts/post_one&lt;br /&gt;
 posts/post_two&lt;br /&gt;
&lt;br /&gt;
Fixtures are basically Hash objects&amp;lt;ref&amp;gt;http://guides.rubyonrails.org/testing.html#the-low-down-on-fixtures&amp;lt;/ref&amp;gt;. We can access the hash object directly because it is automatically setup as a local variable of the test case. For example:&lt;br /&gt;
&lt;br /&gt;
 # this will return the Hash for the fixture named post_one&lt;br /&gt;
 posts(:post_one)&lt;br /&gt;
&lt;br /&gt;
=Factories=&lt;br /&gt;
For a small site, fixtures are enough. However, in bigger sites fixtures might get confusing. Factories are alternatives to fixtures in such cases. They have become increasingly popular in the last few years since they allow you to do things that cannot be done using YAML.&lt;br /&gt;
&lt;br /&gt;
A factory is an object used to create other objects. Factory objects are used in [http://en.wikipedia.org/wiki/Test-driven_development test-driven development] to allow the classes to be put under test.&lt;br /&gt;
&lt;br /&gt;
Factory Girl&amp;lt;ref&amp;gt;https://github.com/thoughtbot/factory_girl&amp;lt;/ref&amp;gt; is one of the well known factories which is widely used. It is written by Thoughtbot company and is available as a Ruby gem. Unlike fixtures, Factory Girl allows us to create objects rather than use defaults. &lt;br /&gt;
&lt;br /&gt;
To set up Factory Girl&amp;lt;ref&amp;gt;https://github.com/thoughtbot/factory_girl/blob/master/GETTING_STARTED.md&amp;lt;/ref&amp;gt;, update the GemFile with the following&lt;br /&gt;
 gem &amp;quot;factory_girl_rails&amp;quot;, &amp;quot;~&amp;gt; 4.0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The following example shows how a factory can be defined using Factory Girl:&lt;br /&gt;
&lt;br /&gt;
 Factory.define :post do |p|&lt;br /&gt;
   p.title 'Fixtures and Factories'&lt;br /&gt;
   p.description  'This a wiki for fixtures and factories'&lt;br /&gt;
   p.category 'OOLS'&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
=Fixtures vs. Factories=&lt;br /&gt;
&lt;br /&gt;
Fixtures allow known data to be statically pre-loaded into database tables before testing. Factories create only whatever is needed on a case by case basis.&lt;br /&gt;
&lt;br /&gt;
==Fixtures Advantages==&lt;br /&gt;
&lt;br /&gt;
* Easy to view all the data in one place&lt;br /&gt;
* Data is truly static&lt;br /&gt;
* Simple and clean&lt;br /&gt;
&lt;br /&gt;
==Fixtures Disadvantages==&lt;br /&gt;
&lt;br /&gt;
* Inserting data into the database for each run slows down the testing process&lt;br /&gt;
* Introduces dependency on fixture data&lt;br /&gt;
* Data customization is more complex&lt;br /&gt;
* Fixtures cannot be parameterized&lt;br /&gt;
&lt;br /&gt;
==Factories Advantages==&lt;br /&gt;
&lt;br /&gt;
* Maintains independence of tests&lt;br /&gt;
* Better overall performance since data is created only on a per need basis&lt;br /&gt;
* Tests and data are well isolated&lt;br /&gt;
 &lt;br /&gt;
==Factories Disadvantages==&lt;br /&gt;
&lt;br /&gt;
* Complex relationships might be hard to capture&lt;br /&gt;
* Performance might sometimes be degraded, due to the create operations.&lt;br /&gt;
&lt;br /&gt;
= Conclusion = &lt;br /&gt;
&lt;br /&gt;
The article discusses how fixtures and factories are used with regard to testing. The different types of factories have been enumerated.The Factory Girl example is used to explain how factories are used. Different situations are explained where the use of fixtures and factories are contrasted. The advantages and disadvantages of both the approaches help throw some light on where the user must use fixtures and where the user must opt for factories.&lt;br /&gt;
&lt;br /&gt;
= References = &lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Varjun2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w33_pv&amp;diff=69401</id>
		<title>CSC/ECE 517 Fall 2012/ch2a 2w33 pv</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w33_pv&amp;diff=69401"/>
		<updated>2012-11-02T17:53:22Z</updated>

		<summary type="html">&lt;p&gt;Varjun2: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;big&amp;gt;'''SaaS - 5.5 - Fixtures and Factories'''&amp;lt;/big&amp;gt; &amp;lt;ref&amp;gt;http://www.youtube.com/watch?v=OG8i9Udqm_s&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
One of the best parts about [http://www.ruby-lang.org/en/ Ruby] community is the degree to which the developers focus on testing. Developers work with 3 types of tests namely, units (for models), functional (for controllers) and integration tests. Testing requires providing the code with inputs and matching the output generated with the expected outputs. Testing data from the database is however is a little challenging since data should be first stored in the database so that the tests can run on it. These tests may make a few modifications(adding, deleting or updating rows) to the data present in the database. These changes will stay for the next test which is not desirable. Therefore, we need a way to put the database into a known state before the next test begins. This can be achieved using Fixtures and Factories.&amp;lt;ref&amp;gt;http://www.linuxjournal.com/magazine/forge-fixtures-and-factories?page=0,0&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Fixtures=&lt;br /&gt;
Fixtures are sample data on which all the tests run.&lt;br /&gt;
&lt;br /&gt;
There can be 3 types of fixtures&amp;lt;ref&amp;gt;http://ar.rubyonrails.org/classes/Fixtures.html&amp;lt;/ref&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
1. YAML fixtures&lt;br /&gt;
&lt;br /&gt;
2. CSV fixtures&lt;br /&gt;
&lt;br /&gt;
3. Single-file fixtures&lt;br /&gt;
&lt;br /&gt;
==YAML Fixtures==&lt;br /&gt;
YAML is a recursive acronym for &amp;quot;YAML Ain't Markup Language&amp;quot;.&amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/YAML&amp;lt;/ref&amp;gt; YAML is a file format which describes data structures in a non-verbose, human-readable format. YAML consists of name-value pairs within a hierarchy, and indentation indicates where in the hierarchy a particular name-value pair exists. This file ends with .yml extension.&lt;br /&gt;
&lt;br /&gt;
The following example shows the format of a YAML fixture for a post:&lt;br /&gt;
&lt;br /&gt;
 post_one:&lt;br /&gt;
   title: one&lt;br /&gt;
   description: post_one_desc&lt;br /&gt;
   category: category_one&lt;br /&gt;
 &lt;br /&gt;
 post_two:&lt;br /&gt;
   title: two&lt;br /&gt;
   description: post_two_desc&lt;br /&gt;
   category: category_two&lt;br /&gt;
&lt;br /&gt;
==CSV fixtures==&lt;br /&gt;
Comma Separated Value format can be used to store sample data. The files end with &amp;quot;.csv&amp;quot; extension. The first line of the CSV file is a comma-separated list of field names. The rest of the file contains the actual data. CSV fixtures have no fixture names.&lt;br /&gt;
&lt;br /&gt;
The following example shows the format of a CSV fixture: &lt;br /&gt;
 &lt;br /&gt;
 title,description, category&lt;br /&gt;
 one, post_one_desc, category_one&lt;br /&gt;
 two, post_two_desc, category_two&lt;br /&gt;
&lt;br /&gt;
==Single-file fixtures==&lt;br /&gt;
Fixtures for this format are created by placing text files in a sub-directory (with the name of the model) to the directory appointed by ActiveSupport::TestCase.fixture_path=(path). Each text file placed in this directory represents a &amp;quot;record&amp;quot;. Usually these types of fixtures are named without extensions.&lt;br /&gt;
&lt;br /&gt;
The following example shows the format of a single-file fixture: &lt;br /&gt;
 &lt;br /&gt;
 posts/post_one&lt;br /&gt;
 posts/post_two&lt;br /&gt;
&lt;br /&gt;
Fixtures are basically Hash objects&amp;lt;ref&amp;gt;http://guides.rubyonrails.org/testing.html#the-low-down-on-fixtures&amp;lt;/ref&amp;gt;. We can access the hash object directly because it is automatically setup as a local variable of the test case. For example:&lt;br /&gt;
&lt;br /&gt;
 # this will return the Hash for the fixture named post_one&lt;br /&gt;
 posts(:post_one)&lt;br /&gt;
&lt;br /&gt;
=Factories=&lt;br /&gt;
For a small site, fixtures are enough. However, in bigger sites fixtures might get confusing. Factories are alternatives to fixtures in such cases. They have become increasingly popular in the last few years since they allow you to do things that cannot be done using YAML.&lt;br /&gt;
&lt;br /&gt;
A factory is an object used to create other objects. Factory objects are used in [http://en.wikipedia.org/wiki/Test-driven_development test-driven development] to allow the classes to be put under test.&lt;br /&gt;
&lt;br /&gt;
Factory Girl&amp;lt;ref&amp;gt;https://github.com/thoughtbot/factory_girl&amp;lt;/ref&amp;gt; is one of the well known factories which is widely used. It is written by Thoughtbot company and is available as a Ruby gem. Unlike fixtures, Factory Girl allows us to create objects rather than use defaults. &lt;br /&gt;
&lt;br /&gt;
To set up Factory Girl&amp;lt;ref&amp;gt;https://github.com/thoughtbot/factory_girl/blob/master/GETTING_STARTED.md&amp;lt;/ref&amp;gt;, update the GemFile with the following&lt;br /&gt;
 gem &amp;quot;factory_girl_rails&amp;quot;, &amp;quot;~&amp;gt; 4.0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The following example shows how a factory can be defined using Factory Girl:&lt;br /&gt;
&lt;br /&gt;
 Factory.define :post do |p|&lt;br /&gt;
   p.title 'Fixtures and Factories'&lt;br /&gt;
   p.description  'This a wiki for fixtures and factories'&lt;br /&gt;
   p.category 'OOLS'&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
=Fixtures vs. Factories=&lt;br /&gt;
&lt;br /&gt;
Fixtures allow known data to be statically pre-loaded into database tables before testing. Factories create only whatever is needed on a case by case basis.&lt;br /&gt;
&lt;br /&gt;
==Fixtures Advantages==&lt;br /&gt;
&lt;br /&gt;
* Easy to view all the data in one place&lt;br /&gt;
* Data is truly static&lt;br /&gt;
* Simple and clean&lt;br /&gt;
&lt;br /&gt;
==Fixtures Disadvantages==&lt;br /&gt;
&lt;br /&gt;
* Inserting data into the database for each run slows down the testing process&lt;br /&gt;
* Introduces dependency on fixture data&lt;br /&gt;
* Data customization is more complex&lt;br /&gt;
* Fixtures cannot be parameterized&lt;br /&gt;
&lt;br /&gt;
==Factories Advantages==&lt;br /&gt;
&lt;br /&gt;
* Maintains independence of tests&lt;br /&gt;
* Better overall performance since data is created only on a per need basis&lt;br /&gt;
* Tests and data are well isolated&lt;br /&gt;
 &lt;br /&gt;
==Factories Disadvantages==&lt;br /&gt;
&lt;br /&gt;
* Complex relationships might be hard to capture&lt;br /&gt;
* Performance might sometimes be degraded, due to the create operations.&lt;br /&gt;
&lt;br /&gt;
= Conclusion = &lt;br /&gt;
&lt;br /&gt;
The article discusses how fixtures and factories are used with regard to testing. The different types of factories have been enumerated.The Factory Girl example is used to explain how factories are used. Different situations are explained where the use of fixtures and factories are contrasted. The advantages and disadvantages of both the approaches help throw some light on where the user must use fixtures and where the user must opt for factories.&lt;br /&gt;
&lt;br /&gt;
= References = &lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Varjun2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w33_pv&amp;diff=69400</id>
		<title>CSC/ECE 517 Fall 2012/ch2a 2w33 pv</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w33_pv&amp;diff=69400"/>
		<updated>2012-11-02T17:33:37Z</updated>

		<summary type="html">&lt;p&gt;Varjun2: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;big&amp;gt;'''SaaS - 5.5 - Fixtures and Factories'''&amp;lt;/big&amp;gt; &amp;lt;ref&amp;gt;http://www.youtube.com/watch?v=OG8i9Udqm_s&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
One of the best parts about [http://www.ruby-lang.org/en/ Ruby] community is the degree to which the developers focus on testing. Developers work with 3 types of tests namely, units (for models), functional (for controllers) and integration tests. Testing requires providing the code with inputs and matching the output generated with the expected outputs. Testing data from the database is however is a little challenging since data should be first stored in the database so that the tests can run on it. These tests may make a few modifications(adding, deleting or updating rows) to the data present in the database. These changes will stay for the next test which is not desirable. Therefore, we need a way to put the database into a known state before the next test begins. This can be achieved using Fixtures and Factories.&amp;lt;ref&amp;gt;http://www.linuxjournal.com/magazine/forge-fixtures-and-factories?page=0,0&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Fixtures=&lt;br /&gt;
Fixtures are sample data on which all the tests run.&lt;br /&gt;
&lt;br /&gt;
There can be 3 types of fixtures&amp;lt;ref&amp;gt;http://ar.rubyonrails.org/classes/Fixtures.html&amp;lt;/ref&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
1. YAML fixtures&lt;br /&gt;
&lt;br /&gt;
2. CSV fixtures&lt;br /&gt;
&lt;br /&gt;
3. Single-file fixtures&lt;br /&gt;
&lt;br /&gt;
==YAML Fixtures==&lt;br /&gt;
YAML is a recursive acronym for &amp;quot;YAML Ain't Markup Language&amp;quot;.&amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/YAML&amp;lt;/ref&amp;gt; YAML is a file format which describes data structures in a non-verbose, human-readable format. YAML consists of name-value pairs within a hierarchy, and indentation indicates where in the hierarchy a particular name-value pair exists. This file ends with .yml extension.&lt;br /&gt;
&lt;br /&gt;
The following example shows the format of a YAML fixture for a post:&lt;br /&gt;
&lt;br /&gt;
 post_one:&lt;br /&gt;
   title: one&lt;br /&gt;
   description: post_one_desc&lt;br /&gt;
   category: category_one&lt;br /&gt;
 &lt;br /&gt;
 post_two:&lt;br /&gt;
   title: two&lt;br /&gt;
   description: post_two_desc&lt;br /&gt;
   category: category_two&lt;br /&gt;
&lt;br /&gt;
==CSV fixtures==&lt;br /&gt;
Comma Separated Value format can be used to store sample data. The files end with &amp;quot;.csv&amp;quot; extension. The first line of the CSV file is a comma-separated list of field names. The rest of the file contains the actual data. CSV fixtures have no fixture names.&lt;br /&gt;
&lt;br /&gt;
The following example shows the format of a CSV fixture: &lt;br /&gt;
 &lt;br /&gt;
 title,description, category&lt;br /&gt;
 one, post_one_desc, category_one&lt;br /&gt;
 two, post_two_desc, category_two&lt;br /&gt;
&lt;br /&gt;
==Single-file fixtures==&lt;br /&gt;
Fixtures for this format are created by placing text files in a sub-directory (with the name of the model) to the directory appointed by ActiveSupport::TestCase.fixture_path=(path). Each text file placed in this directory represents a &amp;quot;record&amp;quot;. Usually these types of fixtures are named without extensions.&lt;br /&gt;
&lt;br /&gt;
The following example shows the format of a single-file fixture: &lt;br /&gt;
 &lt;br /&gt;
 posts/post_one&lt;br /&gt;
 posts/post_two&lt;br /&gt;
&lt;br /&gt;
Fixtures are basically Hash objects&amp;lt;ref&amp;gt;http://guides.rubyonrails.org/testing.html#the-low-down-on-fixtures&amp;lt;/ref&amp;gt;. We can access the hash object directly because it is automatically setup as a local variable of the test case. For example:&lt;br /&gt;
&lt;br /&gt;
 # this will return the Hash for the fixture named post_one&lt;br /&gt;
 posts(:post_one)&lt;br /&gt;
&lt;br /&gt;
=Factories=&lt;br /&gt;
For a small site, fixtures are enough. However, in bigger sites fixtures might get confusing. Factories are alternatives to fixtures in such cases. They have become increasingly popular in the last few years since they allow you to do things that cannot be done using YAML.&lt;br /&gt;
&lt;br /&gt;
A factory is an object used to create other objects. Factory objects are used in [http://en.wikipedia.org/wiki/Test-driven_development test-driven development] to allow the classes to be put under test.&lt;br /&gt;
&lt;br /&gt;
Factory Girl&amp;lt;ref&amp;gt;https://github.com/thoughtbot/factory_girl&amp;lt;/ref&amp;gt; is one of the well known factories which is widely used. It is written by Thoughtbot company and is available as a Ruby gem. Unlike fixtures, Factory Girl allows us to create objects rather than use defaults. &lt;br /&gt;
&lt;br /&gt;
To set up Factory Girl&amp;lt;ref&amp;gt;https://github.com/thoughtbot/factory_girl/blob/master/GETTING_STARTED.md&amp;lt;/ref&amp;gt;, update the GemFile with the following&lt;br /&gt;
 gem &amp;quot;factory_girl_rails&amp;quot;, &amp;quot;~&amp;gt; 4.0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The following example shows how a factory can be defined using Factory Girl:&lt;br /&gt;
&lt;br /&gt;
 Factory.define :post do |p|&lt;br /&gt;
   p.title 'Fixtures and Factories'&lt;br /&gt;
   p.description  'This a wiki for fixtures and factories'&lt;br /&gt;
   p.category 'OOLS'&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
=Fixtures vs. Factories=&lt;br /&gt;
&lt;br /&gt;
Fixtures allow known data to be statically pre-loaded into database tables before testing. Factories create only whatever is needed on a case by case basis.&lt;br /&gt;
&lt;br /&gt;
==Fixtures Advantages==&lt;br /&gt;
&lt;br /&gt;
* Easy to view all the data in one place&lt;br /&gt;
* Data is truly static&lt;br /&gt;
* Simple and clean&lt;br /&gt;
&lt;br /&gt;
==Fixtures Disadvantages==&lt;br /&gt;
&lt;br /&gt;
* Inserting data into the database for each run slows down the testing process&lt;br /&gt;
* Introduces dependency on fixture data&lt;br /&gt;
* Data customization is more complex&lt;br /&gt;
* Fixtures cannot be parameterized&lt;br /&gt;
&lt;br /&gt;
==Factories Advantages==&lt;br /&gt;
&lt;br /&gt;
* Maintains independence of tests&lt;br /&gt;
* Better overall performance since data is created only on a per need basis&lt;br /&gt;
* Tests and data are well isolated&lt;br /&gt;
 &lt;br /&gt;
==Factories Disadvantages==&lt;br /&gt;
&lt;br /&gt;
* Complex relationships might be hard to capture&lt;br /&gt;
* Performance might sometimes be degraded, due to the create operations.&lt;br /&gt;
&lt;br /&gt;
= References = &lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Varjun2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w33_pv&amp;diff=68535</id>
		<title>CSC/ECE 517 Fall 2012/ch2a 2w33 pv</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w33_pv&amp;diff=68535"/>
		<updated>2012-10-27T00:05:51Z</updated>

		<summary type="html">&lt;p&gt;Varjun2: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;big&amp;gt;'''SaaS - 5.5 - Fixtures and Factories'''&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
One of the best parts about [http://www.ruby-lang.org/en/ Ruby] community is the degree to which the developers focus on testing. Developers work with 3 types of tests namely, units (for models), functional (for controllers) and integration tests. Testing requires providing the code with inputs and matching the output generated with the expected outputs. Testing data from the database is however is a little challenging since data should be first stored in the database so that the tests can run on it. These tests may make a few modifications(adding, deleting or updating rows) to the data present in the database. These changes will stay for the next test which is not desirable. Therefore, we need a way to put the database into a known state before the next test begins. This can be achieved using Fixtures and Factories.&amp;lt;ref&amp;gt;http://www.linuxjournal.com/magazine/forge-fixtures-and-factories?page=0,0&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Fixtures=&lt;br /&gt;
Fixtures are sample data on which all the tests run.&lt;br /&gt;
&lt;br /&gt;
There can be 3 types of fixtures&amp;lt;ref&amp;gt;http://ar.rubyonrails.org/classes/Fixtures.html&amp;lt;/ref&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
1. YAML fixtures&lt;br /&gt;
&lt;br /&gt;
2. CSV fixtures&lt;br /&gt;
&lt;br /&gt;
3. Single-file fixtures&lt;br /&gt;
&lt;br /&gt;
==YAML Fixtures==&lt;br /&gt;
YAML is a recursive acronym for &amp;quot;YAML Ain't Markup Language&amp;quot;.&amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/YAML&amp;lt;/ref&amp;gt; YAML is a file format which describes data structures in a non-verbose, human-readable format. YAML consists of name-value pairs within a hierarchy, and indentation indicates where in the hierarchy a particular name-value pair exists. This file ends with .yml extension.&lt;br /&gt;
&lt;br /&gt;
The following example shows the format of a YAML fixture for a post:&lt;br /&gt;
&lt;br /&gt;
 post_one:&lt;br /&gt;
   title: one&lt;br /&gt;
   description: post_one_desc&lt;br /&gt;
   category: category_one&lt;br /&gt;
 &lt;br /&gt;
 post_two:&lt;br /&gt;
   title: two&lt;br /&gt;
   description: post_two_desc&lt;br /&gt;
   category: category_two&lt;br /&gt;
&lt;br /&gt;
==CSV fixtures==&lt;br /&gt;
Comma Separated Value format can be used to store sample data. The files end with &amp;quot;.csv&amp;quot; extension. The first line of the CSV file is a comma-separated list of field names. The rest of the file contains the actual data. CSV fixtures have no fixture names.&lt;br /&gt;
&lt;br /&gt;
The following example shows the format of a CSV fixture: &lt;br /&gt;
 &lt;br /&gt;
 title,description, category&lt;br /&gt;
 one, post_one_desc, category_one&lt;br /&gt;
 two, post_two_desc, category_two&lt;br /&gt;
&lt;br /&gt;
==Single-file fixtures==&lt;br /&gt;
Fixtures for this format are created by placing text files in a sub-directory (with the name of the model) to the directory appointed by ActiveSupport::TestCase.fixture_path=(path). Each text file placed in this directory represents a &amp;quot;record&amp;quot;. Usually these types of fixtures are named without extensions.&lt;br /&gt;
&lt;br /&gt;
The following example shows the format of a single-file fixture: &lt;br /&gt;
 &lt;br /&gt;
 posts/post_one&lt;br /&gt;
 posts/post_two&lt;br /&gt;
&lt;br /&gt;
Fixtures are basically Hash objects&amp;lt;ref&amp;gt;http://guides.rubyonrails.org/testing.html#the-low-down-on-fixtures&amp;lt;/ref&amp;gt;. We can access the hash object directly because it is automatically setup as a local variable of the test case. For example:&lt;br /&gt;
&lt;br /&gt;
 # this will return the Hash for the fixture named post_one&lt;br /&gt;
 posts(:post_one)&lt;br /&gt;
&lt;br /&gt;
=Factories=&lt;br /&gt;
For a small site, fixtures are enough. However, in bigger sites fixtures might get confusing. Factories are alternatives to fixtures in such cases. They have become increasingly popular in the last few years since they allow you to do things that cannot be done using YAML.&lt;br /&gt;
&lt;br /&gt;
A factory is an object used to create other objects. Factory objects are used in [http://en.wikipedia.org/wiki/Test-driven_development test-driven development] to allow the classes to be put under test.&lt;br /&gt;
&lt;br /&gt;
Factory Girl&amp;lt;ref&amp;gt;https://github.com/thoughtbot/factory_girl&amp;lt;/ref&amp;gt; is one of the well known factories which is widely used. It is written by Thoughtbot company and is available as a Ruby gem. Unlike fixtures, Factory Girl allows us to create objects rather than use defaults. &lt;br /&gt;
&lt;br /&gt;
To set up Factory Girl&amp;lt;ref&amp;gt;https://github.com/thoughtbot/factory_girl/blob/master/GETTING_STARTED.md&amp;lt;/ref&amp;gt;, update the GemFile with the following&lt;br /&gt;
 gem &amp;quot;factory_girl_rails&amp;quot;, &amp;quot;~&amp;gt; 4.0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The following example shows how a factory can be defined using Factory Girl:&lt;br /&gt;
&lt;br /&gt;
 Factory.define :post do |p|&lt;br /&gt;
   p.title 'Fixtures and Factories'&lt;br /&gt;
   p.description  'This a wiki for fixtures and factories'&lt;br /&gt;
   p.category 'OOLS'&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
=Fixtures vs. Factories=&lt;br /&gt;
&lt;br /&gt;
Fixtures allow known data to be statically pre-loaded into database tables before testing. Factories create only whatever is needed on a case by case basis.&lt;br /&gt;
&lt;br /&gt;
==Fixtures Advantages==&lt;br /&gt;
&lt;br /&gt;
* Easy to view all the data in one place&lt;br /&gt;
* Data is truly static&lt;br /&gt;
* Simple and clean&lt;br /&gt;
&lt;br /&gt;
==Fixtures Disadvantages==&lt;br /&gt;
&lt;br /&gt;
* Inserting data into the database for each run slows down the testing process&lt;br /&gt;
* Introduces dependency on fixture data&lt;br /&gt;
* Data customization is more complex&lt;br /&gt;
* Fixtures cannot be parameterized&lt;br /&gt;
&lt;br /&gt;
==Factories Advantages==&lt;br /&gt;
&lt;br /&gt;
* Maintains independence of tests&lt;br /&gt;
* Better overall performance since data is created only on a per need basis&lt;br /&gt;
* Tests and data are well isolated&lt;br /&gt;
 &lt;br /&gt;
==Factories Disadvantages==&lt;br /&gt;
&lt;br /&gt;
* Complex relationships might be hard to capture&lt;br /&gt;
* Performance might sometimes be degraded, due to the create operations.&lt;br /&gt;
&lt;br /&gt;
=Also see=&lt;br /&gt;
&lt;br /&gt;
= References = &lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Varjun2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w33_pv&amp;diff=68531</id>
		<title>CSC/ECE 517 Fall 2012/ch2a 2w33 pv</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w33_pv&amp;diff=68531"/>
		<updated>2012-10-27T00:05:06Z</updated>

		<summary type="html">&lt;p&gt;Varjun2: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;big&amp;gt;'''SaaS - 5.5 - Fixtures and Factories'''&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
One of the best parts about [http://www.ruby-lang.org/en/ Ruby] community is the degree to which the developers focus on testing. Developers work with 3 types of tests namely, units (for models), functional (for controllers) and integration tests. Testing requires providing the code with inputs and matching the output generated with the expected outputs. Testing data from the database is however is a little challenging since data should be first stored in the database so that the tests can run on it. These tests may make a few modifications(adding, deleting or updating rows) to the data present in the database. These changes will stay for the next test which is not desirable. Therefore, we need a way to put the database into a known state before the next test begins. This can be achieved using Fixtures and Factories.&amp;lt;ref&amp;gt;http://www.linuxjournal.com/magazine/forge-fixtures-and-factories?page=0,0&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Fixtures=&lt;br /&gt;
Fixtures are sample data on which all the tests run.&lt;br /&gt;
&lt;br /&gt;
There can be 3 types of fixtures&amp;lt;ref&amp;gt;http://ar.rubyonrails.org/classes/Fixtures.html&amp;lt;/ref&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
1. YAML fixtures&lt;br /&gt;
&lt;br /&gt;
2. CSV fixtures&lt;br /&gt;
&lt;br /&gt;
3. Single-file fixtures&lt;br /&gt;
&lt;br /&gt;
==YAML Fixtures==&lt;br /&gt;
YAML is a recursive acronym for &amp;quot;YAML Ain't Markup Language&amp;quot;.&amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/YAML&amp;lt;/ref&amp;gt; YAML is a file format which describes data structures in a non-verbose, human-readable format. YAML consists of name-value pairs within a hierarchy, and indentation indicates where in the hierarchy a particular name-value pair exists. This file ends with .yml extension.&lt;br /&gt;
&lt;br /&gt;
The following example shows the format of a YAML fixture for a post:&lt;br /&gt;
&lt;br /&gt;
 post_one:&lt;br /&gt;
   title: one&lt;br /&gt;
   description: post_one_desc&lt;br /&gt;
   category: category_one&lt;br /&gt;
 &lt;br /&gt;
 post_two:&lt;br /&gt;
   title: two&lt;br /&gt;
   description: post_two_desc&lt;br /&gt;
   category: category_two&lt;br /&gt;
&lt;br /&gt;
==CSV fixtures==&lt;br /&gt;
Comma Separated Value format can be used to store sample data. The files end with &amp;quot;.csv&amp;quot; extension. The first line of the CSV file is a comma-separated list of field names. The rest of the file contains the actual data. CSV fixtures have no fixture names.&lt;br /&gt;
&lt;br /&gt;
The following example shows the format of a CSV fixture: &lt;br /&gt;
 &lt;br /&gt;
 title,description, category&lt;br /&gt;
 one, post_one_desc, category_one&lt;br /&gt;
 two, post_two_desc, category_two&lt;br /&gt;
&lt;br /&gt;
==Single-file fixtures==&lt;br /&gt;
Fixtures for this format are created by placing text files in a sub-directory (with the name of the model) to the directory appointed by ActiveSupport::TestCase.fixture_path=(path). Each text file placed in this directory represents a &amp;quot;record&amp;quot;. Usually these types of fixtures are named without extensions.&lt;br /&gt;
&lt;br /&gt;
The following example shows the format of a single-file fixture: &lt;br /&gt;
 &lt;br /&gt;
 posts/post_one&lt;br /&gt;
 posts/post_two&lt;br /&gt;
&lt;br /&gt;
Fixtures are basically Hash objects&amp;lt;ref&amp;gt;http://guides.rubyonrails.org/testing.html#the-low-down-on-fixtures&amp;lt;/ref&amp;gt;. We can access the hash object directly because it is automatically setup as a local variable of the test case. For example:&lt;br /&gt;
&lt;br /&gt;
 # this will return the Hash for the fixture named post_one&lt;br /&gt;
 posts(:post_one)&lt;br /&gt;
&lt;br /&gt;
=Factories=&lt;br /&gt;
For a small site, fixtures are enough. However, in bigger sites fixtures might get confusing. Factories are alternatives to fixtures in such cases. They have become increasingly popular in the last few years since they allow you to do things that cannot be done using YAML.&lt;br /&gt;
&lt;br /&gt;
A factory is an object used to create other objects. Factory objects are used in [http://en.wikipedia.org/wiki/Test-driven_development test-driven development] to allow the classes to be put under test.&lt;br /&gt;
&lt;br /&gt;
Factory Girl&amp;lt;ref&amp;gt;https://github.com/thoughtbot/factory_girl&amp;lt;/ref&amp;gt; is one of the well known factories which is widely used. It is written by Thoughtbot company and is available as a Ruby gem. Unlike fixtures, Factory Girl allows us to create objects rather than use defaults. &lt;br /&gt;
&lt;br /&gt;
To set up Factory Girl&amp;lt;ref&amp;gt;https://github.com/thoughtbot/factory_girl/blob/master/GETTING_STARTED.md&amp;lt;/ref&amp;gt;, update the GemFile with the following&lt;br /&gt;
 gem &amp;quot;factory_girl_rails&amp;quot;, &amp;quot;~&amp;gt; 4.0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The following example shows how a factory can be defined using Factory Girl:&lt;br /&gt;
&lt;br /&gt;
 Factory.define :post do |p|&lt;br /&gt;
   p.title 'Fixtures and Factories'&lt;br /&gt;
   p.description  'This a wiki for fixtures and factories'&lt;br /&gt;
   p.category 'OOLS'&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
=Fixtures vs. Factories=&lt;br /&gt;
&lt;br /&gt;
Fixtures allow known data to be statically pre-loaded into database tables before testing. Factories create only whatever is needed on a case by case basis.&lt;br /&gt;
&lt;br /&gt;
==Fixtures Advantages==&lt;br /&gt;
&lt;br /&gt;
* Easy to view all the data in one place&lt;br /&gt;
* Data is truly static&lt;br /&gt;
* Simple and clean&lt;br /&gt;
&lt;br /&gt;
==Fixtures Disadvantages==&lt;br /&gt;
&lt;br /&gt;
* Inserting data into the database for each run slows down the testing process&lt;br /&gt;
* Introduces dependency on fixture data&lt;br /&gt;
* Data customization is more complex&lt;br /&gt;
* Fixtures cannot be parameterized&lt;br /&gt;
&lt;br /&gt;
==Factories Advantages==&lt;br /&gt;
&lt;br /&gt;
* Maintains independence of tests&lt;br /&gt;
* Better overall performance since data is created only on a per need basis&lt;br /&gt;
* Tests and data are well isolated&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
==Factories Disadvantages==&lt;br /&gt;
&lt;br /&gt;
* Complex relationships might be hard to capture&lt;br /&gt;
* Performance might sometimes be degraded, due to the create operations.&lt;br /&gt;
&lt;br /&gt;
=Also see=&lt;br /&gt;
&lt;br /&gt;
= References = &lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Varjun2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w33_pv&amp;diff=68497</id>
		<title>CSC/ECE 517 Fall 2012/ch2a 2w33 pv</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w33_pv&amp;diff=68497"/>
		<updated>2012-10-26T23:57:49Z</updated>

		<summary type="html">&lt;p&gt;Varjun2: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;big&amp;gt;'''SaaS - 5.5 - Fixtures and Factories'''&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
One of the best parts about [http://www.ruby-lang.org/en/ Ruby] community is the degree to which the developers focus on testing. Developers work with 3 types of tests namely, units (for models), functional (for controllers) and integration tests. Testing requires providing the code with inputs and matching the output generated with the expected outputs. Testing data from the database is however is a little challenging since data should be first stored in the database so that the tests can run on it. These tests may make a few modifications(adding, deleting or updating rows) to the data present in the database. These changes will stay for the next test which is not desirable. Therefore, we need a way to put the database into a known state before the next test begins. This can be achieved using Fixtures and Factories.&amp;lt;ref&amp;gt;http://www.linuxjournal.com/magazine/forge-fixtures-and-factories?page=0,0&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Fixtures=&lt;br /&gt;
Fixtures are sample data on which all the tests run.&lt;br /&gt;
&lt;br /&gt;
There can be 3 types of fixtures&amp;lt;ref&amp;gt;http://ar.rubyonrails.org/classes/Fixtures.html&amp;lt;/ref&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
1. YAML fixtures&lt;br /&gt;
&lt;br /&gt;
2. CSV fixtures&lt;br /&gt;
&lt;br /&gt;
3. Single-file fixtures&lt;br /&gt;
&lt;br /&gt;
==YAML Fixtures==&lt;br /&gt;
YAML is a recursive acronym for &amp;quot;YAML Ain't Markup Language&amp;quot;.&amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/YAML&amp;lt;/ref&amp;gt; YAML is a file format which describes data structures in a non-verbose, human-readable format. YAML consists of name-value pairs within a hierarchy, and indentation indicates where in the hierarchy a particular name-value pair exists. This file ends with .yml extension.&lt;br /&gt;
&lt;br /&gt;
The following example shows the format of a YAML fixture for a post:&lt;br /&gt;
&lt;br /&gt;
 post_one:&lt;br /&gt;
   title: one&lt;br /&gt;
   description: post_one_desc&lt;br /&gt;
   category: category_one&lt;br /&gt;
 &lt;br /&gt;
 post_two:&lt;br /&gt;
   title: two&lt;br /&gt;
   description: post_two_desc&lt;br /&gt;
   category: category_two&lt;br /&gt;
&lt;br /&gt;
==CSV fixtures==&lt;br /&gt;
Comma Separated Value format can be used to store sample data. The files end with &amp;quot;.csv&amp;quot; extension. The first line of the CSV file is a comma-separated list of field names. The rest of the file contains the actual data. CSV fixtures have no fixture names.&lt;br /&gt;
&lt;br /&gt;
The following example shows the format of a CSV fixture: &lt;br /&gt;
 &lt;br /&gt;
 title,description, category&lt;br /&gt;
 one, post_one_desc, category_one&lt;br /&gt;
 two, post_two_desc, category_two&lt;br /&gt;
&lt;br /&gt;
==Single-file fixtures==&lt;br /&gt;
Fixtures for this format are created by placing text files in a sub-directory (with the name of the model) to the directory appointed by ActiveSupport::TestCase.fixture_path=(path). Each text file placed in this directory represents a &amp;quot;record&amp;quot;. Usually these types of fixtures are named without extensions.&lt;br /&gt;
&lt;br /&gt;
The following example shows the format of a single-file fixture: &lt;br /&gt;
 &lt;br /&gt;
 posts/post_one&lt;br /&gt;
 posts/post_two&lt;br /&gt;
&lt;br /&gt;
Fixtures are basically Hash objects&amp;lt;ref&amp;gt;http://guides.rubyonrails.org/testing.html#the-low-down-on-fixtures&amp;lt;/ref&amp;gt;. We can access the hash object directly because it is automatically setup as a local variable of the test case. For example:&lt;br /&gt;
&lt;br /&gt;
 # this will return the Hash for the fixture named post_one&lt;br /&gt;
 posts(:post_one)&lt;br /&gt;
&lt;br /&gt;
=Factories=&lt;br /&gt;
For a small site, fixtures are enough. However, in bigger sites fixtures might get confusing. Factories are alternatives to fixtures in such cases. They have become increasingly popular in the last few years since they allow you to do things that cannot be done using YAML.&lt;br /&gt;
&lt;br /&gt;
A factory is an object used to create other objects. Factory objects are used in [http://en.wikipedia.org/wiki/Test-driven_development test-driven development] to allow the classes to be put under test.&lt;br /&gt;
&lt;br /&gt;
Factory Girl&amp;lt;ref&amp;gt;https://github.com/thoughtbot/factory_girl&amp;lt;/ref&amp;gt; is one of the well known factories which is widely used. It is written by Thoughtbot company and is available as a Ruby gem. Unlike fixtures, Factory Girl allows us to create objects rather than use defaults. &lt;br /&gt;
&lt;br /&gt;
To set up Factory Girl&amp;lt;ref&amp;gt;https://github.com/thoughtbot/factory_girl/blob/master/GETTING_STARTED.md&amp;lt;/ref&amp;gt;, update the GemFile with the following&lt;br /&gt;
 gem &amp;quot;factory_girl_rails&amp;quot;, &amp;quot;~&amp;gt; 4.0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The following example shows how a factory can be defined using Factory Girl:&lt;br /&gt;
&lt;br /&gt;
 Factory.define :post do |p|&lt;br /&gt;
   p.title 'Fixtures and Factories'&lt;br /&gt;
   p.description  'This a wiki for fixtures and factories'&lt;br /&gt;
   p.category 'OOLS'&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
=Fixtures vs. Factories=&lt;br /&gt;
&lt;br /&gt;
Fixtures allow known data to be statically pre-loaded into database tables before testing. Factories create only whatever is needed on a case by case basis.&lt;br /&gt;
&lt;br /&gt;
==Fixtures Advantages==&lt;br /&gt;
&lt;br /&gt;
* Easy to view all the data in one place&lt;br /&gt;
* Data is truly static&lt;br /&gt;
* Simple and clean&lt;br /&gt;
&lt;br /&gt;
==Fixtures Disadvantages==&lt;br /&gt;
&lt;br /&gt;
* Inserting data into the database for each run slows down the testing process&lt;br /&gt;
* Introduces dependency on fixture data&lt;br /&gt;
* Data customization is more complex&lt;br /&gt;
* Fixtures cannot be parameterized&lt;br /&gt;
&lt;br /&gt;
==Factories Advantages==&lt;br /&gt;
&lt;br /&gt;
* Maintains independence of tests&lt;br /&gt;
* Better performance since data is created only on a per need basis&lt;br /&gt;
* Tests and data are well isolated&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
==Factories Disadvantages==&lt;br /&gt;
&lt;br /&gt;
* Complex relationships might be hard to capture&lt;br /&gt;
* &lt;br /&gt;
&lt;br /&gt;
=Also see=&lt;br /&gt;
&lt;br /&gt;
= References = &lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Varjun2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w33_pv&amp;diff=68457</id>
		<title>CSC/ECE 517 Fall 2012/ch2a 2w33 pv</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w33_pv&amp;diff=68457"/>
		<updated>2012-10-26T23:42:26Z</updated>

		<summary type="html">&lt;p&gt;Varjun2: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;big&amp;gt;'''SaaS - 5.5 - Fixtures and Factories'''&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
One of the best parts about [http://www.ruby-lang.org/en/ Ruby] community is the degree to which the developers focus on testing. Developers work with 3 types of tests namely, units (for models), functional (for controllers) and integration tests. Testing requires providing the code with inputs and matching the output generated with the expected outputs. Testing data from the database is however is a little challenging since data should be first stored in the database so that the tests can run on it. These tests may make a few modifications(adding, deleting or updating rows) to the data present in the database. These changes will stay for the next test which is not desirable. Therefore, we need a way to put the database into a known state before the next test begins. This can be achieved using Fixtures and Factories.&amp;lt;ref&amp;gt;http://www.linuxjournal.com/magazine/forge-fixtures-and-factories?page=0,0&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Fixtures=&lt;br /&gt;
Fixtures are sample data on which all the tests run.&lt;br /&gt;
&lt;br /&gt;
There can be 3 types of fixtures&amp;lt;ref&amp;gt;http://ar.rubyonrails.org/classes/Fixtures.html&amp;lt;/ref&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
1. YAML fixtures&lt;br /&gt;
&lt;br /&gt;
2. CSV fixtures&lt;br /&gt;
&lt;br /&gt;
3. Single-file fixtures&lt;br /&gt;
&lt;br /&gt;
==YAML Fixtures==&lt;br /&gt;
YAML is a recursive acronym for &amp;quot;YAML Ain't Markup Language&amp;quot;.&amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/YAML&amp;lt;/ref&amp;gt; YAML is a file format which describes data structures in a non-verbose, human-readable format. YAML consists of name-value pairs within a hierarchy, and indentation indicates where in the hierarchy a particular name-value pair exists. This file ends with .yml extension.&lt;br /&gt;
&lt;br /&gt;
The following example shows the format of a YAML fixture for a post:&lt;br /&gt;
&lt;br /&gt;
 post_one:&lt;br /&gt;
   title: one&lt;br /&gt;
   description: post_one_desc&lt;br /&gt;
   category: category_one&lt;br /&gt;
 &lt;br /&gt;
 post_two:&lt;br /&gt;
   title: two&lt;br /&gt;
   description: post_two_desc&lt;br /&gt;
   category: category_two&lt;br /&gt;
&lt;br /&gt;
==CSV fixtures==&lt;br /&gt;
Comma Separated Value format can be used to store sample data. The files end with &amp;quot;.csv&amp;quot; extension. The first line of the CSV file is a comma-separated list of field names. The rest of the file contains the actual data. CSV fixtures have no fixture names.&lt;br /&gt;
&lt;br /&gt;
The following example shows the format of a CSV fixture: &lt;br /&gt;
 &lt;br /&gt;
 title,description, category&lt;br /&gt;
 one, post_one_desc, category_one&lt;br /&gt;
 two, post_two_desc, category_two&lt;br /&gt;
&lt;br /&gt;
==Single-file fixtures==&lt;br /&gt;
Fixtures for this format are created by placing text files in a sub-directory (with the name of the model) to the directory appointed by ActiveSupport::TestCase.fixture_path=(path). Each text file placed in this directory represents a &amp;quot;record&amp;quot;. Usually these types of fixtures are named without extensions.&lt;br /&gt;
&lt;br /&gt;
The following example shows the format of a single-file fixture: &lt;br /&gt;
 &lt;br /&gt;
 posts/post_one&lt;br /&gt;
 posts/post_two&lt;br /&gt;
&lt;br /&gt;
Fixtures are basically Hash objects&amp;lt;ref&amp;gt;http://guides.rubyonrails.org/testing.html#the-low-down-on-fixtures&amp;lt;/ref&amp;gt;. We can access the hash object directly because it is automatically setup as a local variable of the test case. For example:&lt;br /&gt;
&lt;br /&gt;
 # this will return the Hash for the fixture named post_one&lt;br /&gt;
 posts(:post_one)&lt;br /&gt;
&lt;br /&gt;
=Factories=&lt;br /&gt;
For a small site, fixtures are enough. However, in bigger sites fixtures might get confusing. Factories are alternatives to fixtures in such cases. They have become increasingly popular in the last few years since they allow you to do things that cannot be done using YAML.&lt;br /&gt;
&lt;br /&gt;
A factory is an object used to create other objects. Factory objects are used in [http://en.wikipedia.org/wiki/Test-driven_development test-driven development] to allow the classes to be put under test.&lt;br /&gt;
&lt;br /&gt;
Factory Girl&amp;lt;ref&amp;gt;https://github.com/thoughtbot/factory_girl&amp;lt;/ref&amp;gt; is one of the well known factories which is widely used. It is written by Thoughtbot company and is available as a Ruby gem. Unlike fixtures, Factory Girl allows us to create objects rather than use defaults. &lt;br /&gt;
&lt;br /&gt;
To set up Factory Girl&amp;lt;ref&amp;gt;https://github.com/thoughtbot/factory_girl/blob/master/GETTING_STARTED.md&amp;lt;/ref&amp;gt;, update the GemFile with the following&lt;br /&gt;
 gem &amp;quot;factory_girl_rails&amp;quot;, &amp;quot;~&amp;gt; 4.0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The following example shows how a factory can be defined using Factory Girl:&lt;br /&gt;
&lt;br /&gt;
 Factory.define :post do |p|&lt;br /&gt;
   p.title 'Fixtures and Factories'&lt;br /&gt;
   p.description  'This a wiki for fixtures and factories'&lt;br /&gt;
   p.category 'OOLS'&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
=Fixtures vs. Factories=&lt;br /&gt;
&lt;br /&gt;
Fixtures allow known data to be statically pre-loaded into database tables before testing. Factories create only whatever is needed on a case by case basis.&lt;br /&gt;
&lt;br /&gt;
==Fixtures Advantages==&lt;br /&gt;
&lt;br /&gt;
* Easy to view all the data in one place&lt;br /&gt;
* Data is truly static&lt;br /&gt;
* Simple and clean&lt;br /&gt;
&lt;br /&gt;
==Fixtures Disadvantages==&lt;br /&gt;
&lt;br /&gt;
* Inserting data into the database for each run slows down the testing process&lt;br /&gt;
* Introduces dependency on fixture data&lt;br /&gt;
* Data customization is more complex&lt;br /&gt;
* Fixtures cannot be parameterized&lt;br /&gt;
&lt;br /&gt;
==Factories Advantages==&lt;br /&gt;
&lt;br /&gt;
* Maintains independence of tests&lt;br /&gt;
* &lt;br /&gt;
&lt;br /&gt;
==Factories Disadvantages==&lt;br /&gt;
&lt;br /&gt;
* Complex relationships might be hard to capture&lt;br /&gt;
&lt;br /&gt;
=Also see=&lt;br /&gt;
&lt;br /&gt;
= References = &lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Varjun2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w33_pv&amp;diff=68414</id>
		<title>CSC/ECE 517 Fall 2012/ch2a 2w33 pv</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w33_pv&amp;diff=68414"/>
		<updated>2012-10-26T23:20:54Z</updated>

		<summary type="html">&lt;p&gt;Varjun2: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;big&amp;gt;'''SaaS - 5.5 - Fixtures and Factories'''&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
One of the best parts about [http://www.ruby-lang.org/en/ Ruby] community is the degree to which the developers focus on testing. Developers work with 3 types of tests namely, units (for models), functional (for controllers) and integration tests. Testing requires providing the code with inputs and matching the output generated with the expected outputs. Testing data from the database is however is a little challenging since data should be first stored in the database so that the tests can run on it. These tests may make a few modifications(adding, deleting or updating rows) to the data present in the database. These changes will stay for the next test which is not desirable. Therefore, we need a way to put the database into a known state before the next test begins. This can be achieved using Fixtures and Factories.&amp;lt;ref&amp;gt;http://www.linuxjournal.com/magazine/forge-fixtures-and-factories?page=0,0&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Fixtures=&lt;br /&gt;
Fixtures are sample data on which all the tests run.&lt;br /&gt;
&lt;br /&gt;
There can be 3 types of fixtures&amp;lt;ref&amp;gt;http://ar.rubyonrails.org/classes/Fixtures.html&amp;lt;/ref&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
1. YAML fixtures&lt;br /&gt;
&lt;br /&gt;
2. CSV fixtures&lt;br /&gt;
&lt;br /&gt;
3. Single-file fixtures&lt;br /&gt;
&lt;br /&gt;
==YAML Fixtures==&lt;br /&gt;
YAML is a recursive acronym for &amp;quot;YAML Ain't Markup Language&amp;quot;.&amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/YAML&amp;lt;/ref&amp;gt; YAML is a file format which describes data structures in a non-verbose, human-readable format. YAML consists of name-value pairs within a hierarchy, and indentation indicates where in the hierarchy a particular name-value pair exists. This file ends with .yml extension.&lt;br /&gt;
&lt;br /&gt;
The following example shows the format of a YAML fixture for a post:&lt;br /&gt;
&lt;br /&gt;
 post_one:&lt;br /&gt;
   title: one&lt;br /&gt;
   description: post_one_desc&lt;br /&gt;
   category: category_one&lt;br /&gt;
 &lt;br /&gt;
 post_two:&lt;br /&gt;
   title: two&lt;br /&gt;
   description: post_two_desc&lt;br /&gt;
   category: category_two&lt;br /&gt;
&lt;br /&gt;
==CSV fixtures==&lt;br /&gt;
Comma Separated Value format can be used to store sample data. The files end with &amp;quot;.csv&amp;quot; extension. The first line of the CSV file is a comma-separated list of field names. The rest of the file contains the actual data. CSV fixtures have no fixture names.&lt;br /&gt;
&lt;br /&gt;
The following example shows the format of a CSV fixture: &lt;br /&gt;
 &lt;br /&gt;
 title,description, category&lt;br /&gt;
 one, post_one_desc, category_one&lt;br /&gt;
 two, post_two_desc, category_two&lt;br /&gt;
&lt;br /&gt;
==Single-file fixtures==&lt;br /&gt;
Fixtures for this format are created by placing text files in a sub-directory (with the name of the model) to the directory appointed by ActiveSupport::TestCase.fixture_path=(path). Each text file placed in this directory represents a &amp;quot;record&amp;quot;. Usually these types of fixtures are named without extensions.&lt;br /&gt;
&lt;br /&gt;
The following example shows the format of a single-file fixture: &lt;br /&gt;
 &lt;br /&gt;
 posts/post_one&lt;br /&gt;
 posts/post_two&lt;br /&gt;
&lt;br /&gt;
Fixtures are basically Hash objects&amp;lt;ref&amp;gt;http://guides.rubyonrails.org/testing.html#the-low-down-on-fixtures&amp;lt;/ref&amp;gt;. We can access the hash object directly because it is automatically setup as a local variable of the test case. For example:&lt;br /&gt;
&lt;br /&gt;
 # this will return the Hash for the fixture named post_one&lt;br /&gt;
 posts(:post_one)&lt;br /&gt;
&lt;br /&gt;
=Factories=&lt;br /&gt;
For a small site, fixtures are enough. However, in bigger sites fixtures might get confusing. Factories are alternatives to fixtures in such cases. They have become increasingly popular in the last few years since they allow you to do things that cannot be done using YAML.&lt;br /&gt;
&lt;br /&gt;
A factory is an object used to create other objects. Factory objects are used in [http://en.wikipedia.org/wiki/Test-driven_development test-driven development] to allow the classes to be put under test.&lt;br /&gt;
&lt;br /&gt;
Factory Girl&amp;lt;ref&amp;gt;https://github.com/thoughtbot/factory_girl&amp;lt;/ref&amp;gt; is one of the well known factories which is widely used. It is written by Thoughtbot company and is available as a Ruby gem. Unlike fixtures, Factory Girl allows us to create objects rather than use defaults. &lt;br /&gt;
&lt;br /&gt;
To set up Factory Girl&amp;lt;ref&amp;gt;https://github.com/thoughtbot/factory_girl/blob/master/GETTING_STARTED.md&amp;lt;/ref&amp;gt;, update the GemFile with the following&lt;br /&gt;
 gem &amp;quot;factory_girl_rails&amp;quot;, &amp;quot;~&amp;gt; 4.0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The following example shows how a factory can be defined using Factory Girl:&lt;br /&gt;
&lt;br /&gt;
 Factory.define :post do |p|&lt;br /&gt;
   p.title 'Fixtures and Factories'&lt;br /&gt;
   p.description  'This a wiki for fixtures and factories'&lt;br /&gt;
   p.category 'OOLS'&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
=Fixtures vs. Factories=&lt;br /&gt;
&lt;br /&gt;
Fixtures allow known data to be statically pre-loaded into database tables before testing. Factories only create whatever is needed on a case by case basis.&lt;br /&gt;
&lt;br /&gt;
==Fixtures Advantages==&lt;br /&gt;
&lt;br /&gt;
* Easy to view all the data in one place&lt;br /&gt;
* Data is truly static&lt;br /&gt;
* &lt;br /&gt;
&lt;br /&gt;
==Fixtures Disadvantages==&lt;br /&gt;
&lt;br /&gt;
* Inserting data into the database for each run slows down the testing process&lt;br /&gt;
* Introduces dependency on fixture data&lt;br /&gt;
&lt;br /&gt;
==Factories Advantages==&lt;br /&gt;
&lt;br /&gt;
* Maintains independence of tests&lt;br /&gt;
* &lt;br /&gt;
&lt;br /&gt;
==Factories Disadvantages==&lt;br /&gt;
&lt;br /&gt;
* Complex relationships might be hard to capture&lt;br /&gt;
&lt;br /&gt;
=Also see=&lt;br /&gt;
&lt;br /&gt;
= References = &lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Varjun2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w33_pv&amp;diff=68360</id>
		<title>CSC/ECE 517 Fall 2012/ch2a 2w33 pv</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w33_pv&amp;diff=68360"/>
		<updated>2012-10-26T22:47:39Z</updated>

		<summary type="html">&lt;p&gt;Varjun2: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;big&amp;gt;'''SaaS - 5.5 - Fixtures and Factories'''&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
One of the best parts about [http://www.ruby-lang.org/en/ Ruby] community is the degree to which the developers focus on testing. Developers work with 3 types of tests namely, units (for models), functional (for controllers) and integration tests. Testing requires providing the code with inputs and matching the output generated with the expected outputs. Testing data from the database is however is a little challenging since data should be first stored in the database so that the tests can run on it. These tests may make a few modifications(adding, deleting or updating rows) to the data present in the database. These changes will stay for the next test which is not desirable. Therefore, we need a way to put the database into a known state before the next test begins. This can be achieved using Fixtures and Factories.&amp;lt;ref&amp;gt;http://www.linuxjournal.com/magazine/forge-fixtures-and-factories?page=0,0&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Fixtures=&lt;br /&gt;
Fixtures are sample data on which all the tests run.&lt;br /&gt;
&lt;br /&gt;
There can be 3 types of fixtures&amp;lt;ref&amp;gt;http://ar.rubyonrails.org/classes/Fixtures.html&amp;lt;/ref&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
1. YAML fixtures&lt;br /&gt;
&lt;br /&gt;
2. CSV fixtures&lt;br /&gt;
&lt;br /&gt;
3. Single-file fixtures&lt;br /&gt;
&lt;br /&gt;
==YAML Fixtures==&lt;br /&gt;
YAML is a recursive acronym for &amp;quot;YAML Ain't Markup Language&amp;quot;.&amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/YAML&amp;lt;/ref&amp;gt; YAML is a file format which describes data structures in a non-verbose, human-readable format. YAML consists of name-value pairs within a hierarchy, and indentation indicates where in the hierarchy a particular name-value pair exists. This file ends with .yml extension.&lt;br /&gt;
&lt;br /&gt;
The following example shows the format of a YAML fixture:&lt;br /&gt;
&lt;br /&gt;
 post_one:&lt;br /&gt;
   title: one&lt;br /&gt;
   description: post_one_desc&lt;br /&gt;
   category: category_one&lt;br /&gt;
   user: user_one&lt;br /&gt;
 &lt;br /&gt;
 post_two:&lt;br /&gt;
   title: two&lt;br /&gt;
   description: post_two_desc&lt;br /&gt;
   category: category_two&lt;br /&gt;
   user: user_two&lt;br /&gt;
&lt;br /&gt;
==CSV fixtures==&lt;br /&gt;
Comma Separated Value format can be used to store sample data. The files end with &amp;quot;.csv&amp;quot; extension. The first line of the CSV file is a comma-separated list of field names. The rest of the file contains the actual data. CSV fixtures have no fixture names.&lt;br /&gt;
&lt;br /&gt;
The following example shows the format of a CSV fixture: &lt;br /&gt;
 &lt;br /&gt;
 title,description, category, user&lt;br /&gt;
 one, post_one_desc, category_one, user_one &lt;br /&gt;
 two, post_two_desc, category_two, user_two&lt;br /&gt;
&lt;br /&gt;
==Single-file fixtures==&lt;br /&gt;
Fixtures for this format are created by placing text files in a sub-directory (with the name of the model) to the directory appointed by ActiveSupport::TestCase.fixture_path=(path). Each text file placed in this directory represents a &amp;quot;record&amp;quot;. Usually these types of fixtures are named without extensions.&lt;br /&gt;
&lt;br /&gt;
The following example shows the format of a single-file fixture: &lt;br /&gt;
 &lt;br /&gt;
 posts/post_one&lt;br /&gt;
 posts/post_two&lt;br /&gt;
&lt;br /&gt;
Fixtures are basically Hash objects&amp;lt;ref&amp;gt;http://guides.rubyonrails.org/testing.html#the-low-down-on-fixtures&amp;lt;/ref&amp;gt;. We can access the hash object directly because it is automatically setup as a local variable of the test case. For example:&lt;br /&gt;
&lt;br /&gt;
 # this will return the Hash for the fixture named post_one&lt;br /&gt;
 posts(:post_one)&lt;br /&gt;
&lt;br /&gt;
=Factories=&lt;br /&gt;
For a small site, fixtures are enough. However, in bigger sites fixtures might get confusing. Factories are alternatives to fixtures in such cases. They have become increasingly popular in the last few years since they allow you to do things that cannot be done using YAML.&lt;br /&gt;
&lt;br /&gt;
A factory is an object used to create other objects. Factory objects are used in [http://en.wikipedia.org/wiki/Test-driven_development test-driven development] to allow the classes to be put under test.&lt;br /&gt;
&lt;br /&gt;
Factory Girl&amp;lt;ref&amp;gt;https://github.com/thoughtbot/factory_girl&amp;lt;/ref&amp;gt; is one of the well known factories which is widely used. It is written by Thoughtbot company and is available as a Ruby gem. Unlike fixtures, Factory Girl allows us to create objects rather than use defaults. &lt;br /&gt;
&lt;br /&gt;
To set up Factory Girl, update the GemFile with the following&lt;br /&gt;
 gem &amp;quot;factory_girl_rails&amp;quot;, &amp;quot;~&amp;gt; 4.0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Factory.define :user do |u|&lt;br /&gt;
  u.first_name 'John'&lt;br /&gt;
  u.last_name  'Doe'&lt;br /&gt;
  u.admin false&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
=Fixtures vs. Factories=&lt;br /&gt;
&lt;br /&gt;
==Fixtures Advantages==&lt;br /&gt;
&lt;br /&gt;
==Fixtures Disadvantages==&lt;br /&gt;
&lt;br /&gt;
==Factories Advantages==&lt;br /&gt;
&lt;br /&gt;
==Factories Disadvantages==&lt;br /&gt;
&lt;br /&gt;
=Also see=&lt;br /&gt;
&lt;br /&gt;
= References = &lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Varjun2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w33_pv&amp;diff=68350</id>
		<title>CSC/ECE 517 Fall 2012/ch2a 2w33 pv</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w33_pv&amp;diff=68350"/>
		<updated>2012-10-26T22:42:16Z</updated>

		<summary type="html">&lt;p&gt;Varjun2: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;big&amp;gt;'''SaaS - 5.5 - Fixtures and Factories'''&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
One of the best parts about [http://www.ruby-lang.org/en/ Ruby] community is the degree to which the developers focus on testing. Developers work with 3 types of tests namely, units (for models), functional (for controllers) and integration tests. Testing requires providing the code with inputs and matching the output generated with the expected outputs. Testing data from the database is however is a little challenging since data should be first stored in the database so that the tests can run on it. These tests may make a few modifications(adding, deleting or updating rows) to the data present in the database. These changes will stay for the next test which is not desirable. Therefore, we need a way to put the database into a known state before the next test begins. This can be achieved using Fixtures and Factories.&amp;lt;ref&amp;gt;http://www.linuxjournal.com/magazine/forge-fixtures-and-factories?page=0,0&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Fixtures=&lt;br /&gt;
Fixtures are sample data on which all the tests run.&lt;br /&gt;
&lt;br /&gt;
There can be 3 types of fixtures&amp;lt;ref&amp;gt;http://ar.rubyonrails.org/classes/Fixtures.html&amp;lt;/ref&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
1. YAML fixtures&lt;br /&gt;
&lt;br /&gt;
2. CSV fixtures&lt;br /&gt;
&lt;br /&gt;
3. Single-file fixtures&lt;br /&gt;
&lt;br /&gt;
==YAML Fixtures==&lt;br /&gt;
YAML is a recursive acronym for &amp;quot;YAML Ain't Markup Language&amp;quot;.&amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/YAML&amp;lt;/ref&amp;gt; YAML is a file format which describes data structures in a non-verbose, human-readable format. YAML consists of name-value pairs within a hierarchy, and indentation indicates where in the hierarchy a particular name-value pair exists. This file ends with .yml extension.&lt;br /&gt;
&lt;br /&gt;
The following example shows the format of a YAML fixture:&lt;br /&gt;
&lt;br /&gt;
 post_one:&lt;br /&gt;
   title: one&lt;br /&gt;
   description: post_one_desc&lt;br /&gt;
   category: category_one&lt;br /&gt;
   user: user_one&lt;br /&gt;
 &lt;br /&gt;
 post_two:&lt;br /&gt;
   title: two&lt;br /&gt;
   description: post_two_desc&lt;br /&gt;
   category: category_two&lt;br /&gt;
   user: user_two&lt;br /&gt;
&lt;br /&gt;
==CSV fixtures==&lt;br /&gt;
Comma Separated Value format can be used to store sample data. The files end with &amp;quot;.csv&amp;quot; extension. The first line of the CSV file is a comma-separated list of field names. The rest of the file contains the actual data. CSV fixtures have no fixture names.&lt;br /&gt;
&lt;br /&gt;
The following example shows the format of a CSV fixture: &lt;br /&gt;
 &lt;br /&gt;
 title,description, category, user&lt;br /&gt;
 one, post_one_desc, category_one, user_one &lt;br /&gt;
 two, post_two_desc, category_two, user_two&lt;br /&gt;
&lt;br /&gt;
==Single-file fixtures==&lt;br /&gt;
Fixtures for this format are created by placing text files in a sub-directory (with the name of the model) to the directory appointed by ActiveSupport::TestCase.fixture_path=(path). Each text file placed in this directory represents a &amp;quot;record&amp;quot;. Usually these types of fixtures are named without extensions.&lt;br /&gt;
&lt;br /&gt;
The following example shows the format of a single-file fixture: &lt;br /&gt;
 &lt;br /&gt;
 posts/post_one&lt;br /&gt;
 posts/post_two&lt;br /&gt;
&lt;br /&gt;
Fixtures are basically Hash objects&amp;lt;ref&amp;gt;http://guides.rubyonrails.org/testing.html#the-low-down-on-fixtures&amp;lt;/ref&amp;gt;. We can access the hash object directly because it is automatically setup as a local variable of the test case. For example:&lt;br /&gt;
&lt;br /&gt;
 # this will return the Hash for the fixture named post_one&lt;br /&gt;
 posts(:post_one)&lt;br /&gt;
&lt;br /&gt;
=Factories=&lt;br /&gt;
For a small site, fixtures are enough. However, in bigger sites fixtures might get confusing. Factories are alternatives to fixtures in such cases. They have become increasingly popular in the last few years since they allow you to do things that cannot be done using YAML.&lt;br /&gt;
&lt;br /&gt;
A factory is an object used to create other objects. Factory objects are used in [http://en.wikipedia.org/wiki/Test-driven_development test-driven development] to allow the classes to be put under test.&lt;br /&gt;
&lt;br /&gt;
Factory Girl&amp;lt;ref&amp;gt;https://github.com/thoughtbot/factory_girl&amp;lt;/ref&amp;gt; is one of the well known factories which is widely used. It is written by Thoughtbot company and is available as a Ruby gem. Unlike fixtures, Factory Girl allows us to create objects rather than use defaults. &lt;br /&gt;
&lt;br /&gt;
To set up Factory Girl, update the GemFile with the following&lt;br /&gt;
 gem &amp;quot;factory_girl_rails&amp;quot;, &amp;quot;~&amp;gt; 4.0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Factory.define :user do |u|&lt;br /&gt;
  u.first_name 'John'&lt;br /&gt;
  u.last_name  'Doe'&lt;br /&gt;
  u.admin false&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
=Fixtures vs. Factories=&lt;br /&gt;
&lt;br /&gt;
=Also see=&lt;br /&gt;
&lt;br /&gt;
= References = &lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Varjun2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch1_1w9_av&amp;diff=64834</id>
		<title>CSC/ECE 517 Fall 2012/ch1 1w9 av</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch1_1w9_av&amp;diff=64834"/>
		<updated>2012-09-14T23:44:41Z</updated>

		<summary type="html">&lt;p&gt;Varjun2: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Object-Oriented Domain-Specific Languages (OODSL)'''&lt;br /&gt;
&amp;lt;p&amp;gt;An OODSL&amp;lt;ref&amp;gt;OODSL 1[http://pg-server.csc.ncsu.edu/mediawiki/index.php?title=User:Snateka&amp;amp;printable=yes]&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;OODSL 2[http://expertiza.csc.ncsu.edu/wiki/index.php/CSC/ECE_517_Fall_2010/ch2_S23_GP]&amp;lt;/ref&amp;gt; is a [http://en.wikipedia.org/wiki/Domain-specific_language&amp;lt;code&amp;gt;Domain-specific language&amp;lt;/code&amp;gt;] (DSL) that exhibits characteristics that have traditionally been attributed to [http://en.wikipedia.org/wiki/Object-oriented_programming#OOP_languages&amp;lt;code&amp;gt;Object-Oriented Languages&amp;lt;/code&amp;gt;] &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Although OO languages and Domain specific languages have been around for several years, OODSLs are relatively new.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
OO languages can be either general purpose like C++, Java and Ruby, or domain specific, like Jquery and Kiddo. The following example shows how the two kinds of languages would work if used in the real world.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''The General Purpose Programming way of ordering hash browns at Waffle House'''&amp;lt;ref&amp;gt;Building DSLs [http://www.code-magazine.com/article.aspx?quickid=0902041&amp;amp;page=1]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Harvest the potato, wash it, and chop it into little pieces. Put the pieces in a pan with oil and fry till they turn golden brown, and then drain the oil away and put them on a plate. Now cut some jalapeno peppers and spread on the potatoes. Then add cheese, which you can get by milking a cow and..... &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''The OODSL way of ordering hash browns at Waffle House'''&lt;br /&gt;
&lt;br /&gt;
I would like it Scattered, Smothered, and Peppered please. Thanks!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For a person who works at Waffle House, or goes there regularly to eat, it is a no brainer that the second method is much more efficient. OODSLs take advantage of the context within which communication takes place. By using implicitly understood jargon, the task at hand can be accomplished in a way that is easier to comprehend for a specialized type of user.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
OODSLs can be of 2 types:&lt;br /&gt;
&lt;br /&gt;
* Internal&lt;br /&gt;
* External&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Internal OODSLs are languages that are built on top of existing languages. An internal OODSL makes use of the host language syntax to provide the feel of a domain specific language. It is not universally defined as to when a language/library becomes an OODSL. JQuery is one such example. It is a JavaScript library, which offers an easy way to perform functions like element selection. It can also be argued that JavaScript itself is a domain specific language.&lt;br /&gt;
&lt;br /&gt;
External OODSLs are those that are built from scratch. With the current technology, it is far more easy to churn out several internal OODSLs than to build one from scratch. External OODSLs have their own syntax, as well as their own methods of compilation/interpretation.&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
OODSLs cannot be spoken about without first a brief introduction to Domain Specific Languages and the Object-Oriented programming paradigm. &lt;br /&gt;
&lt;br /&gt;
In a nutshell, DSL&amp;lt;ref&amp;gt;DSL examples[http://www.semanticdesigns.com/products/DMS/DomainSpecificLanguage.html]&amp;lt;/ref&amp;gt; is a language that is specific to a particular domain. DSLs are different from general purpose programming languages like C++ and Java. They take advantage of the fact that there are groups of users who rather than communicating every single thing, are able to implicitly understand certain terms and notations. This makes communication much more efficient for such a group. Eg: 2 basketball fans will talk in basketball jargon. Not everyone will understand what zone defence, 3 pointers and jump ball mean. The jargon serves the specific purpose of easing communication between 2 basketball fans. Some would argue that DSLs have been around for a far longer time dating back to even before the advent of computers. Subway maps, electronics circuit diagrams all demonstrate properties of a DSL. Since then, DSLs have come a long way. Domain Specific Languages (DSLs), as they are spoken about now, have been around since the 1970's and their origin can be traced back to a tool called Draco.  Since Draco, computers have made it possible to design a whole host of other useful DSLs. Some of the more popular ones among them are SQL, Prolog, Verilog, HTML etc.&lt;br /&gt;
&lt;br /&gt;
Object-Oriented Programming (OO) is a programming paradigm that tries to apply real world principles to make programming easier. OO has been around since the 1950's. Starting with Simula and Smalltalk, OO languages have come a long way since then, and has grown to become one of the most popular programming paradigms employed worldwide. Some of the modern object oriented languages include static languages like C++, Java, C#, and dynamic languages like Perl, Ruby etc.&lt;br /&gt;
&lt;br /&gt;
OODSLs, that bring out the features of both DSLs as well as OO languages are a fairly recent invention. OODSLs have been around since the 1980's/1990's. They are now primarily used in the realm of web development, game development, and are also used in certain specialized industries like music.&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
=== PHP ===&lt;br /&gt;
[http://en.wikipedia.org/wiki/PHP&amp;lt;code&amp;gt;PHP&amp;lt;/code&amp;gt;] is an OODSL that is commonly used for web development. It is an open source web development framework that is designed to make web development simpler and easier. The language can be perceived as a general purpose language, but it also has domain specific components designed for the web domain alone. PHP is in general embedded into HTML to perform server side computations before the page is sent to the client.&lt;br /&gt;
&lt;br /&gt;
=== OODSL compiler for FPGA ===&lt;br /&gt;
An object oriented domain specific compiler was developed for programming Field Programmable Gate Arrays.&amp;lt;ref&amp;gt;Object-Oriented Domain Specific Compilers for Programming FPGAs[http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&amp;amp;arnumber=920835&amp;amp;userType=inst&amp;amp;tag=1]&amp;lt;/ref&amp;gt; The compiler allows the hardware programmer to make use of object-oriented style while programming. The research paper claims that this way of programming the hardware brings down the time taken for design by several notches and still results in good optimal performance.&lt;br /&gt;
&lt;br /&gt;
== Tools for Creating OODSL ==&lt;br /&gt;
When creating an OODSL, one can either choose to start from scratch or use a tool that is already available. Creating a language from scratch gives the programmer a certain amount of flexibility to define it the way he wants to, but it takes a lot of time. Therefore, in general, software tools are used to aid in the process of creating Domain Specific Languages. This is because it not only saves time, but also helps to make the language easy to use due to familiarity with the syntax of the underlying language.&lt;br /&gt;
=== Boo ===&lt;br /&gt;
Boo&amp;lt;ref&amp;gt;Boo Home[http://boo.codehaus.org/Home]&amp;lt;/ref&amp;gt; is an open source object oriented language that is used to create Domain Specific languages. Defining basic data structures like array, hash, variables etc are inherently supported in Boo and it makes their creation easier. Although Boo is a statically typed language, these restrictions can be bent once in a while so that the type of objects can be found and manipulated in run time as well ([http://en.wikipedia.org/wiki/Duck_typing &amp;lt;code&amp;gt;Duck typing&amp;lt;/code&amp;gt;]).&lt;br /&gt;
&lt;br /&gt;
=== Visual Studio ===&lt;br /&gt;
Visual Studio has Domain-specific language tools that are designed to help the designer to build a language focusing on the language grammar and characteristics rather than paying much attention to the internal details of the compiler.&amp;lt;ref&amp;gt;Domain specific development[http://www.domainspecificdevelopment.com/]&amp;lt;/ref&amp;gt; Visual tools are used that help focus on the business requirements of the OODSL rather than worrying about how it works internally.&lt;br /&gt;
=== Groovy ===&lt;br /&gt;
Groovy &amp;lt;ref&amp;gt;Groovy Home[http://groovy.codehaus.org/]&amp;lt;/ref&amp;gt; is a dynamic language for the Java Virtual Machine. Also, the syntax is groovy is similar to that of Java, making designing of new OODSLs easier and similar to programming in Java. [http://java.dzone.com/articles/groovy-dsl-simple-example&amp;lt;code&amp;gt;An example for developing an OODSL in Groovy&amp;lt;/code&amp;gt;].&lt;br /&gt;
&lt;br /&gt;
== OODSL vs. non-OODSL ==&lt;br /&gt;
When defining a DSL, choosing whether to go with an OODSL or a non-OODSL depends on several factors like the domain for which it is defined, existing DSLs for that domain etc. Non-OODSLs are domain specific languages that do not necessarily embrace object oriented concepts like abstraction, polymorphism etc. OODSLs can be well suited for some situations whereas in other situations, they might be an overkill. Defining a new OODSL when there is an already widely accepted non-OODSL may not be very useful. For example, HTML is the standard method for displaying web pages and it is non-OODSL. Defining a new non-OODSL that replaces HTML may not prove to be significantly advantageous.&lt;br /&gt;
&lt;br /&gt;
== Advantages and Disadvantages ==&lt;br /&gt;
Some of the advantages of OODSLs would be:&lt;br /&gt;
* Since OODSLs, by their name, are object oriented, they give the developer an easier alternative to model their applications based on business goals and using real world paradigms.&lt;br /&gt;
* Because of their object oriented nature, the code is generally simple to understand and therefore code maintenance would be easier in OODSLs than in non-OODSLs.&lt;br /&gt;
* Object oriented concepts like encapsulation and abstraction give the code better security when they are modified in the future.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Though OODSLs in general have several advantages over other languages, one must also consider their disadvantages:&lt;br /&gt;
* Defining an object oriented language in general takes more time than defining a normal language because we have to properly define it to include OO concepts.&lt;br /&gt;
* They may not be well-suited for all domains and environments. Sometimes there may be a simpler non-OODSL way to achieve the task.&lt;br /&gt;
&lt;br /&gt;
== A Running Example ==&lt;br /&gt;
Given here is a simple example &amp;lt;ref&amp;gt;Example DSL in groovy[http://java.dzone.com/articles/groovy-dsl-simple-example]&amp;lt;/ref&amp;gt; for creating an OODSL. This is defined in [http://en.wikipedia.org/wiki/Groovy_(programming_language)&amp;lt;code&amp;gt;Groovy&amp;lt;/code&amp;gt;].&lt;br /&gt;
&lt;br /&gt;
The definition of our new OODSL is as follows:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
package com.solutionsfit.dsl.memotemplate&lt;br /&gt;
import groovy.xml.MarkupBuilder&lt;br /&gt;
class MemoDsl {&lt;br /&gt;
	String toString&lt;br /&gt;
	String fromString&lt;br /&gt;
	String messageString&lt;br /&gt;
	def sections = []&lt;br /&gt;
	/**&lt;br /&gt;
	* Make a closure. Main definition of the DSL program&lt;br /&gt;
	*/&lt;br /&gt;
	def static make(closure) {&lt;br /&gt;
		MemoDsl memoDsl = new MemoDsl()&lt;br /&gt;
		closure.delegate = memoDsl&lt;br /&gt;
		closure()&lt;br /&gt;
	}&lt;br /&gt;
	/**&lt;br /&gt;
	* Store the values in the local variables&lt;br /&gt;
	*/&lt;br /&gt;
	def to(String toString){&lt;br /&gt;
		this.toString = toString&lt;br /&gt;
	}&lt;br /&gt;
	def from(String fromText){&lt;br /&gt;
		this.fromString = bodyString&lt;br /&gt;
	}&lt;br /&gt;
	def message(String messageString){&lt;br /&gt;
		this.messageString = messageString&lt;br /&gt;
	}&lt;br /&gt;
	/**&lt;br /&gt;
	* The getText method gets called by the DSL by delegation&lt;br /&gt;
	*/&lt;br /&gt;
	def getText(){&lt;br /&gt;
		doText(this)&lt;br /&gt;
	}&lt;br /&gt;
	private static doText(MemoDsl memodsl){&lt;br /&gt;
		String template = &amp;quot;Memo\nTo: ${memoDsl.toText}\nFrom: 	${memoDsl.fromText}\n${memoDsl.body}\n&amp;quot;&lt;br /&gt;
		def sectionStrings =&amp;quot;&amp;quot;&lt;br /&gt;
		for (s in memoDsl.sections) {&lt;br /&gt;
			sectionStrings += s.title.toUpperCase() + &amp;quot;\n&amp;quot; + s.body + &amp;quot;\n&amp;quot;&lt;br /&gt;
		}&lt;br /&gt;
		template += sectionStrings&lt;br /&gt;
		println template&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A sample program in our newly developed OODSL would be:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
package com.solutionsfit.dsl.memotemplate&lt;br /&gt;
&lt;br /&gt;
class MemolDslTest extends GroovyTestCase {&lt;br /&gt;
	void testDslUsage_outputText() {&lt;br /&gt;
		MemoDsl.make {&lt;br /&gt;
			to &amp;quot;Nirav Assar&amp;quot;&lt;br /&gt;
			from &amp;quot;Barack Obama&amp;quot;&lt;br /&gt;
			message &amp;quot;How are things? We are doing well. Take care&amp;quot;&lt;br /&gt;
			text&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The OODSL simply displays the to, from and message values on the screen. This can be extended to perform more computations.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Varjun2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch1_1w9_av&amp;diff=64829</id>
		<title>CSC/ECE 517 Fall 2012/ch1 1w9 av</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch1_1w9_av&amp;diff=64829"/>
		<updated>2012-09-14T23:43:42Z</updated>

		<summary type="html">&lt;p&gt;Varjun2: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Object-Oriented Domain-Specific Languages (OODSL)'''&lt;br /&gt;
&amp;lt;p&amp;gt;An OODSL&amp;lt;ref&amp;gt;OODSL 1[http://pg-server.csc.ncsu.edu/mediawiki/index.php?title=User:Snateka&amp;amp;printable=yes]&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;OODSL 2[http://expertiza.csc.ncsu.edu/wiki/index.php/CSC/ECE_517_Fall_2010/ch2_S23_GP]&amp;lt;/ref&amp;gt; is a [http://en.wikipedia.org/wiki/Domain-specific_language&amp;lt;code&amp;gt;Domain-specific language&amp;lt;/code&amp;gt;] (DSL) that exhibits characteristics that have traditionally been attributed to [http://en.wikipedia.org/wiki/Object-oriented_programming#OOP_languages&amp;lt;code&amp;gt;Object-Oriented Languages&amp;lt;/code&amp;gt;] &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Although OO languages and Domain specific languages have been around for several years, OODSLs are relatively new.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
OO languages can be either general purpose like C++, Java and Ruby, or domain specific, like Jquery and Kiddo. The following example shows how the two kinds of languages would work if used in the real world.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''The General Purpose Programming way of ordering hash browns at Waffle House'''&amp;lt;ref&amp;gt;Building DSLs [http://www.code-magazine.com/article.aspx?quickid=0902041&amp;amp;page=1]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Harvest the potato, wash it, and chop it into little pieces. Put the pieces in a pan with oil and fry till they turn golden brown, and then drain the oil away and put them on a plate. Now cut some jalapeno peppers and spread on the potatoes. Then add cheese, which you can get by milking a cow and..... &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''The OODSL way of ordering hash browns at Waffle House'''&lt;br /&gt;
&lt;br /&gt;
I would like it Scattered, Smothered, and Peppered please. Thanks!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For a person who works at Waffle House, or goes there regularly to eat, it is a no brainer that the second method is much more efficient. OODSLs take advantage of the context within which communication takes place. By using implicitly understood jargon, the task at hand can be accomplished in a way that is easier to comprehend for a specialized type of user.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
OODSLs can be of 2 types:&lt;br /&gt;
&lt;br /&gt;
* Internal&lt;br /&gt;
* External&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Internal OODSLs are languages that are built on top of existing languages. An internal OODSL makes use of the host language syntax to provide the feel of a domain specific language. It is not universally defined as to when a language/library becomes an OODSL. JQuery is one such example. It is a JavaScript library, which offers an easy way to perform functions like element selection. It can also be argued that JavaScript itself is a domain specific language.&lt;br /&gt;
&lt;br /&gt;
External OODSLs are those that are built from scratch. With the current technology, it is far more easy to churn out several internal OODSLs than to build one from scratch. External OODSLs have their own syntax, as well as their own methods of compilation/interpretation.&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
OODSLs cannot be spoken about without first a brief introduction to Domain Specific Languages and the Object-Oriented programming paradigm. &lt;br /&gt;
&lt;br /&gt;
In a nutshell, DSL&amp;lt;ref&amp;gt;DSL examples[http://www.semanticdesigns.com/products/DMS/DomainSpecificLanguage.html]&amp;lt;/ref&amp;gt; is a language that is specific to a particular domain. DSLs are different from general purpose programming languages like C++ and Java. They take advantage of the fact that there are groups of users who rather than communicating every single thing, are able to implicitly understand certain terms and notations. This makes communication much more efficient for such a group. Eg: 2 basketball fans will talk in basketball jargon. Not everyone will understand what zone defence, 3 pointers and jump ball mean. The jargon serves the specific purpose of easing communication between 2 basketball fans. Some would argue that DSLs have been around for a far longer time dating back to even before the advent of computers. Subway maps, electronics circuit diagrams all demonstrate properties of a DSL. Since then, DSLs have come a long way. Domain Specific Languages (DSLs), as they are spoken about now, have been around since the 1970's and their origin can be traced back to a tool called Draco.  Since Draco, computers have made it possible to design a whole host of other useful DSLs. Some of the more popular ones among them are SQL, Prolog, Verilog, HTML etc.&lt;br /&gt;
&lt;br /&gt;
Object-Oriented Programming (OO) is a programming paradigm that tries to apply real world principles to make programming easier. OO has been around since the 1950's. Starting with Simula and Smalltalk, OO languages have come a long way since then, and has grown to become one of the most popular programming paradigms employed worldwide. Some of the modern object oriented languages include static languages like C++, Java, C#, and dynamic languages like Perl, Ruby etc.&lt;br /&gt;
&lt;br /&gt;
OODSLs, that bring out the features of both DSLs as well as OO languages are a fairly recent invention. OODSLs have been around since the 1980's/1990's. They are now primarily used in the realm of web development, game development, and are also used in certain specialized industries like music.&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
=== PHP ===&lt;br /&gt;
[http://en.wikipedia.org/wiki/PHP&amp;lt;code&amp;gt;PHP&amp;lt;/code&amp;gt;] is an OODSL that is commonly used for web development. It is an open source web development framework that is designed to make web development simpler and easier. The language can be perceived as a general purpose language, but it also has domain specific components designed for the web domain alone. PHP is in general embedded into HTML to perform server side computations before the page is sent to the client.&lt;br /&gt;
&lt;br /&gt;
=== OODSL compiler for FPGA ===&lt;br /&gt;
An object oriented domain specific compiler was developed for programming Field Programmable Gate Arrays.&amp;lt;ref&amp;gt;Object-Oriented Domain Specific Compilers for Programming FPGAs[http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&amp;amp;arnumber=920835&amp;amp;userType=inst&amp;amp;tag=1]&amp;lt;/ref&amp;gt; The compiler allows the hardware programmer to make use of object-oriented style while programming. The research paper claims that this way of programming the hardware brings down the time taken for design by several notches and still results in good optimal performance.&lt;br /&gt;
&lt;br /&gt;
== Tools for Creating OODSL ==&lt;br /&gt;
When creating an OODSL, one can either choose to start from scratch or use a tool that is already available. Creating a language from scratch gives the programmer a certain amount of flexibility to define it the way he wants to, but it takes a lot of time. Therefore, in general, software tools are used to aid in the process of creating Domain Specific Languages. This is because it not only saves time, but also helps to make the language easy to use due to familiarity with the syntax of the underlying language.&lt;br /&gt;
=== Boo ===&lt;br /&gt;
Boo&amp;lt;ref&amp;gt;Boo Home[http://boo.codehaus.org/Home]&amp;lt;/ref&amp;gt; is an open source object oriented language that is used to create Domain Specific languages. Defining basic data structures like array, hash, variables etc are inherently supported in Boo and it makes their creation easier. Although Boo is a statically typed language, these restrictions can be bent once in a while so that the type of objects can be found and manipulated in run time as well ([http://en.wikipedia.org/wiki/Duck_typing &amp;lt;code&amp;gt;Duck typing&amp;lt;/code&amp;gt;]).&lt;br /&gt;
&lt;br /&gt;
=== Visual Studio ===&lt;br /&gt;
Visual Studio has Domain-specific language tools that are designed to help the designer to build a language focusing on the language grammar and characteristics rather than paying much attention to the internal details of the compiler.&amp;lt;ref&amp;gt;Domain specific development[http://www.domainspecificdevelopment.com/]&amp;lt;/ref&amp;gt; Visual tools are used that help focus on the business requirements of the OODSL rather than worrying about how it works internally.&lt;br /&gt;
=== Groovy ===&lt;br /&gt;
Groovy &amp;lt;ref&amp;gt;Groovy Home[http://groovy.codehaus.org/]&amp;lt;/ref&amp;gt; is a dynamic language for the Java Virtual Machine. Also, the syntax is groovy is similar to that of Java, making designing of new OODSLs easier and similar to programming in Java. [http://java.dzone.com/articles/groovy-dsl-simple-example&amp;lt;code&amp;gt;An example for developing an OODSL in Groovy&amp;lt;/code&amp;gt;].&lt;br /&gt;
&lt;br /&gt;
== OODSL vs. non-OODSL ==&lt;br /&gt;
When defining a DSL, choosing whether to go with an OODSL or a non-OODSL depends on several factors like the domain for which it is defined, existing DSLs for that domain etc. Non-OODSLs are domain specific languages that do not necessarily embrace object oriented concepts like abstraction, polymorphism etc. OODSLs can be well suited for some situations whereas in other situations, they might be an overkill. Defining a new OODSL when there is an already widely accepted non-OODSL may not be very useful. For example, HTML is the standard method for displaying web pages and it is non-OODSL. Defining a new non-OODSL that replaces HTML may not prove to be significantly advantageous.&lt;br /&gt;
&lt;br /&gt;
== Advantages and Disadvantages ==&lt;br /&gt;
Some of the advantages of OODSLs would be:&lt;br /&gt;
* Since OODSLs, by their name, are object oriented, they give the developer an easier alternative to model their applications based on business goals and using real world paradigms.&lt;br /&gt;
* Because of their object oriented nature, the code is generally simple to understand and therefore code maintenance would be easier in OODSLs than in non-OODSLs.&lt;br /&gt;
* Object oriented concepts like encapsulation and abstraction give the code better security when they are modified in the future.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Though OODSLs in general have several advantages over other languages, one must also consider their disadvantages:&lt;br /&gt;
* Defining an object oriented language in general takes more time than defining a normal language because we have to properly define it to include OO concepts.&lt;br /&gt;
* They may not be well-suited for all domains and environments. Sometimes there may be a simpler non-OODSL way to achieve the task.&lt;br /&gt;
&lt;br /&gt;
== A Running Example ==&lt;br /&gt;
Given here is a simple example &amp;lt;ref&amp;gt;Example DSL in groovy[http://java.dzone.com/articles/groovy-dsl-simple-example]&amp;lt;/ref&amp;gt; for creating an OODSL. This is defined in [http://en.wikipedia.org/wiki/Groovy_(programming_language)&amp;lt;code&amp;gt;Groovy&amp;lt;/code&amp;gt;].&lt;br /&gt;
&lt;br /&gt;
The definition of our new OODSL is as follows:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
package com.solutionsfit.dsl.memotemplate&lt;br /&gt;
import groovy.xml.MarkupBuilder&lt;br /&gt;
class MemoDsl {&lt;br /&gt;
	String toString&lt;br /&gt;
	String fromString&lt;br /&gt;
	String messageString&lt;br /&gt;
	def sections = []&lt;br /&gt;
	/**&lt;br /&gt;
	* Make a closure. Main definition of the DSL program&lt;br /&gt;
	*/&lt;br /&gt;
	def static make(closure) {&lt;br /&gt;
		MemoDsl memoDsl = new MemoDsl()&lt;br /&gt;
		closure.delegate = memoDsl&lt;br /&gt;
		closure()&lt;br /&gt;
	}&lt;br /&gt;
	/**&lt;br /&gt;
	* Store the values in the local variables&lt;br /&gt;
	*/&lt;br /&gt;
	def to(String toString){&lt;br /&gt;
		this.toString = toString&lt;br /&gt;
	}&lt;br /&gt;
	def from(String fromText){&lt;br /&gt;
		this.fromString = bodyString&lt;br /&gt;
	}&lt;br /&gt;
	def message(String messageString){&lt;br /&gt;
		this.messageString = messageString&lt;br /&gt;
	}&lt;br /&gt;
	/**&lt;br /&gt;
	* The getText method gets called by the DSL by delegation&lt;br /&gt;
	*/&lt;br /&gt;
	def getText(){&lt;br /&gt;
		doText(this)&lt;br /&gt;
	}&lt;br /&gt;
	private static doText(MemoDsl memodsl){&lt;br /&gt;
		String template = &amp;quot;Memo\nTo: ${memoDsl.toText}\nFrom: 	${memoDsl.fromText}\n${memoDsl.body}\n&amp;quot;&lt;br /&gt;
		def sectionStrings =&amp;quot;&amp;quot;&lt;br /&gt;
		for (s in memoDsl.sections) {&lt;br /&gt;
			sectionStrings += s.title.toUpperCase() + &amp;quot;\n&amp;quot; + s.body + &amp;quot;\n&amp;quot;&lt;br /&gt;
		}&lt;br /&gt;
		template += sectionStrings&lt;br /&gt;
		println template&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A sample program in our newly developed OODSL would be:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
package com.solutionsfit.dsl.memotemplate&lt;br /&gt;
&lt;br /&gt;
class MemolDslTest extends GroovyTestCase {&lt;br /&gt;
	void testDslUsage_outputText() {&lt;br /&gt;
		MemoDsl.make {&lt;br /&gt;
			to &amp;quot;Nirav Assar&amp;quot;&lt;br /&gt;
			from &amp;quot;Barack Obama&amp;quot;&lt;br /&gt;
			message &amp;quot;How are things? We are doing well. Take care&amp;quot;&lt;br /&gt;
			text&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The OODSL simply displays the to, from and message values on the screen. This can be extended to perform more computations.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[http://expertiza.csc.ncsu.edu/wiki/index.php/CSC/ECE_517_Fall_2010/ch2_S23_GP]]&lt;/div&gt;</summary>
		<author><name>Varjun2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch1_1w9_av&amp;diff=64814</id>
		<title>CSC/ECE 517 Fall 2012/ch1 1w9 av</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch1_1w9_av&amp;diff=64814"/>
		<updated>2012-09-14T23:40:00Z</updated>

		<summary type="html">&lt;p&gt;Varjun2: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Object-Oriented Domain-Specific Languages (OODSL)'''&lt;br /&gt;
&amp;lt;p&amp;gt;An OODSL is a [http://en.wikipedia.org/wiki/Domain-specific_language&amp;lt;code&amp;gt;Domain-specific language&amp;lt;/code&amp;gt;] (DSL) that exhibits characteristics that have traditionally been attributed to [http://en.wikipedia.org/wiki/Object-oriented_programming#OOP_languages&amp;lt;code&amp;gt;Object-Oriented Languages&amp;lt;/code&amp;gt;] &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Although OO languages and Domain specific languages have been around for several years, OODSLs are relatively new.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
OO languages can be either general purpose like C++, Java and Ruby, or domain specific, like Jquery and Kiddo. The following example shows how the two kinds of languages would work if used in the real world.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''The General Purpose Programming way of ordering hash browns at Waffle House'''&amp;lt;ref&amp;gt;Building DSLs [http://www.code-magazine.com/article.aspx?quickid=0902041&amp;amp;page=1]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Harvest the potato, wash it, and chop it into little pieces. Put the pieces in a pan with oil and fry till they turn golden brown, and then drain the oil away and put them on a plate. Now cut some jalapeno peppers and spread on the potatoes. Then add cheese, which you can get by milking a cow and..... &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''The OODSL way of ordering hash browns at Waffle House'''&lt;br /&gt;
&lt;br /&gt;
I would like it Scattered, Smothered, and Peppered please. Thanks!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For a person who works at Waffle House, or goes there regularly to eat, it is a no brainer that the second method is much more efficient. OODSLs take advantage of the context within which communication takes place. By using implicitly understood jargon, the task at hand can be accomplished in a way that is easier to comprehend for a specialized type of user.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
OODSLs can be of 2 types:&lt;br /&gt;
&lt;br /&gt;
* Internal&lt;br /&gt;
* External&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Internal OODSLs are languages that are built on top of existing languages. An internal OODSL makes use of the host language syntax to provide the feel of a domain specific language. It is not universally defined as to when a language/library becomes an OODSL. JQuery is one such example. It is a JavaScript library, which offers an easy way to perform functions like element selection. It can also be argued that JavaScript itself is a domain specific language.&lt;br /&gt;
&lt;br /&gt;
External OODSLs are those that are built from scratch. With the current technology, it is far more easy to churn out several internal OODSLs than to build one from scratch. External OODSLs have their own syntax, as well as their own methods of compilation/interpretation.&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
OODSLs cannot be spoken about without first a brief introduction to Domain Specific Languages and the Object-Oriented programming paradigm. &lt;br /&gt;
&lt;br /&gt;
In a nutshell, DSL&amp;lt;ref&amp;gt;DSL examples[http://www.semanticdesigns.com/products/DMS/DomainSpecificLanguage.html]&amp;lt;/ref&amp;gt; is a language that is specific to a particular domain. DSLs are different from general purpose programming languages like C++ and Java. They take advantage of the fact that there are groups of users who rather than communicating every single thing, are able to implicitly understand certain terms and notations. This makes communication much more efficient for such a group. Eg: 2 basketball fans will talk in basketball jargon. Not everyone will understand what zone defence, 3 pointers and jump ball mean. The jargon serves the specific purpose of easing communication between 2 basketball fans. Some would argue that DSLs have been around for a far longer time dating back to even before the advent of computers. Subway maps, electronics circuit diagrams all demonstrate properties of a DSL. Since then, DSLs have come a long way. Domain Specific Languages (DSLs), as they are spoken about now, have been around since the 1970's and their origin can be traced back to a tool called Draco.  Since Draco, computers have made it possible to design a whole host of other useful DSLs. Some of the more popular ones among them are SQL, Prolog, Verilog, HTML etc.&lt;br /&gt;
&lt;br /&gt;
Object-Oriented Programming (OO) is a programming paradigm that tries to apply real world principles to make programming easier. OO has been around since the 1950's. Starting with Simula and Smalltalk, OO languages have come a long way since then, and has grown to become one of the most popular programming paradigms employed worldwide. Some of the modern object oriented languages include static languages like C++, Java, C#, and dynamic languages like Perl, Ruby etc.&lt;br /&gt;
&lt;br /&gt;
OODSLs, that bring out the features of both DSLs as well as OO languages are a fairly recent invention. OODSLs have been around since the 1980's/1990's. They are now primarily used in the realm of web development, game development, and are also used in certain specialized industries like music.&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
=== PHP ===&lt;br /&gt;
[http://en.wikipedia.org/wiki/PHP&amp;lt;code&amp;gt;PHP&amp;lt;/code&amp;gt;] is an OODSL that is commonly used for web development. It is an open source web development framework that is designed to make web development simpler and easier. The language can be perceived as a general purpose language, but it also has domain specific components designed for the web domain alone. PHP is in general embedded into HTML to perform server side computations before the page is sent to the client.&lt;br /&gt;
&lt;br /&gt;
=== OODSL compiler for FPGA ===&lt;br /&gt;
An object oriented domain specific compiler was developed for programming Field Programmable Gate Arrays.&amp;lt;ref&amp;gt;Object-Oriented Domain Specific Compilers for Programming FPGAs[http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&amp;amp;arnumber=920835&amp;amp;userType=inst&amp;amp;tag=1]&amp;lt;/ref&amp;gt; The compiler allows the hardware programmer to make use of object-oriented style while programming. The research paper claims that this way of programming the hardware brings down the time taken for design by several notches and still results in good optimal performance.&lt;br /&gt;
&lt;br /&gt;
== Tools for Creating OODSL ==&lt;br /&gt;
When creating an OODSL, one can either choose to start from scratch or use a tool that is already available. Creating a language from scratch gives the programmer a certain amount of flexibility to define it the way he wants to, but it takes a lot of time. Therefore, in general, software tools are used to aid in the process of creating Domain Specific Languages. This is because it not only saves time, but also helps to make the language easy to use due to familiarity with the syntax of the underlying language.&lt;br /&gt;
=== Boo ===&lt;br /&gt;
Boo&amp;lt;ref&amp;gt;Boo Home[http://boo.codehaus.org/Home]&amp;lt;/ref&amp;gt; is an open source object oriented language that is used to create Domain Specific languages. Defining basic data structures like array, hash, variables etc are inherently supported in Boo and it makes their creation easier. Although Boo is a statically typed language, these restrictions can be bent once in a while so that the type of objects can be found and manipulated in run time as well ([http://en.wikipedia.org/wiki/Duck_typing &amp;lt;code&amp;gt;Duck typing&amp;lt;/code&amp;gt;]).&lt;br /&gt;
&lt;br /&gt;
=== Visual Studio ===&lt;br /&gt;
Visual Studio has Domain-specific language tools that are designed to help the designer to build a language focusing on the language grammar and characteristics rather than paying much attention to the internal details of the compiler.&amp;lt;ref&amp;gt;Domain specific development[http://www.domainspecificdevelopment.com/]&amp;lt;/ref&amp;gt; Visual tools are used that help focus on the business requirements of the OODSL rather than worrying about how it works internally.&lt;br /&gt;
=== Groovy ===&lt;br /&gt;
Groovy &amp;lt;ref&amp;gt;Groovy Home[http://groovy.codehaus.org/]&amp;lt;/ref&amp;gt; is a dynamic language for the Java Virtual Machine. Also, the syntax is groovy is similar to that of Java, making designing of new OODSLs easier and similar to programming in Java. [http://java.dzone.com/articles/groovy-dsl-simple-example&amp;lt;code&amp;gt;An example for developing an OODSL in Groovy&amp;lt;/code&amp;gt;].&lt;br /&gt;
&lt;br /&gt;
== OODSL vs. non-OODSL ==&lt;br /&gt;
When defining a DSL, choosing whether to go with an OODSL or a non-OODSL depends on several factors like the domain for which it is defined, existing DSLs for that domain etc. Non-OODSLs are domain specific languages that do not necessarily embrace object oriented concepts like abstraction, polymorphism etc. OODSLs can be well suited for some situations whereas in other situations, they might be an overkill. Defining a new OODSL when there is an already widely accepted non-OODSL may not be very useful. For example, HTML is the standard method for displaying web pages and it is non-OODSL. Defining a new non-OODSL that replaces HTML may not prove to be significantly advantageous.&lt;br /&gt;
&lt;br /&gt;
== Advantages and Disadvantages ==&lt;br /&gt;
Some of the advantages of OODSLs would be:&lt;br /&gt;
* Since OODSLs, by their name, are object oriented, they give the developer an easier alternative to model their applications based on business goals and using real world paradigms.&lt;br /&gt;
* Because of their object oriented nature, the code is generally simple to understand and therefore code maintenance would be easier in OODSLs than in non-OODSLs.&lt;br /&gt;
* Object oriented concepts like encapsulation and abstraction give the code better security when they are modified in the future.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Though OODSLs in general have several advantages over other languages, one must also consider their disadvantages:&lt;br /&gt;
* Defining an object oriented language in general takes more time than defining a normal language because we have to properly define it to include OO concepts.&lt;br /&gt;
* They may not be well-suited for all domains and environments. Sometimes there may be a simpler non-OODSL way to achieve the task.&lt;br /&gt;
&lt;br /&gt;
== A Running Example ==&lt;br /&gt;
Given here is a simple example &amp;lt;ref&amp;gt;Example DSL in groovy[http://java.dzone.com/articles/groovy-dsl-simple-example]&amp;lt;/ref&amp;gt; for creating an OODSL. This is defined in [http://en.wikipedia.org/wiki/Groovy_(programming_language)&amp;lt;code&amp;gt;Groovy&amp;lt;/code&amp;gt;].&lt;br /&gt;
&lt;br /&gt;
The definition of our new OODSL is as follows:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
package com.solutionsfit.dsl.memotemplate&lt;br /&gt;
import groovy.xml.MarkupBuilder&lt;br /&gt;
class MemoDsl {&lt;br /&gt;
	String toString&lt;br /&gt;
	String fromString&lt;br /&gt;
	String messageString&lt;br /&gt;
	def sections = []&lt;br /&gt;
	/**&lt;br /&gt;
	* Make a closure. Main definition of the DSL program&lt;br /&gt;
	*/&lt;br /&gt;
	def static make(closure) {&lt;br /&gt;
		MemoDsl memoDsl = new MemoDsl()&lt;br /&gt;
		closure.delegate = memoDsl&lt;br /&gt;
		closure()&lt;br /&gt;
	}&lt;br /&gt;
	/**&lt;br /&gt;
	* Store the values in the local variables&lt;br /&gt;
	*/&lt;br /&gt;
	def to(String toString){&lt;br /&gt;
		this.toString = toString&lt;br /&gt;
	}&lt;br /&gt;
	def from(String fromText){&lt;br /&gt;
		this.fromString = bodyString&lt;br /&gt;
	}&lt;br /&gt;
	def message(String messageString){&lt;br /&gt;
		this.messageString = messageString&lt;br /&gt;
	}&lt;br /&gt;
	/**&lt;br /&gt;
	* The getText method gets called by the DSL by delegation&lt;br /&gt;
	*/&lt;br /&gt;
	def getText(){&lt;br /&gt;
		doText(this)&lt;br /&gt;
	}&lt;br /&gt;
	private static doText(MemoDsl memodsl){&lt;br /&gt;
		String template = &amp;quot;Memo\nTo: ${memoDsl.toText}\nFrom: 	${memoDsl.fromText}\n${memoDsl.body}\n&amp;quot;&lt;br /&gt;
		def sectionStrings =&amp;quot;&amp;quot;&lt;br /&gt;
		for (s in memoDsl.sections) {&lt;br /&gt;
			sectionStrings += s.title.toUpperCase() + &amp;quot;\n&amp;quot; + s.body + &amp;quot;\n&amp;quot;&lt;br /&gt;
		}&lt;br /&gt;
		template += sectionStrings&lt;br /&gt;
		println template&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The program in the newly defined language will be:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
package com.solutionsfit.dsl.memotemplate&lt;br /&gt;
&lt;br /&gt;
class MemolDslTest extends GroovyTestCase {&lt;br /&gt;
	void testDslUsage_outputText() {&lt;br /&gt;
		MemoDsl.make {&lt;br /&gt;
			to &amp;quot;Nirav Assar&amp;quot;&lt;br /&gt;
			from &amp;quot;Barack Obama&amp;quot;&lt;br /&gt;
			message &amp;quot;How are things? We are doing well. Take care&amp;quot;&lt;br /&gt;
			text&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The OODSL simply displays the to, from and message values on the screen. This can be extended to perform more computations.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
[[http://expertiza.csc.ncsu.edu/wiki/index.php/CSC/ECE_517_Fall_2010/ch2_S23_GP]]&lt;/div&gt;</summary>
		<author><name>Varjun2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch1_1w9_av&amp;diff=64773</id>
		<title>CSC/ECE 517 Fall 2012/ch1 1w9 av</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch1_1w9_av&amp;diff=64773"/>
		<updated>2012-09-14T23:31:11Z</updated>

		<summary type="html">&lt;p&gt;Varjun2: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Object-Oriented Domain-Specific Languages (OODSL)'''&lt;br /&gt;
&amp;lt;p&amp;gt;An OODSL is a [http://en.wikipedia.org/wiki/Domain-specific_language&amp;lt;code&amp;gt;Domain-specific language&amp;lt;/code&amp;gt;] (DSL) that exhibits characteristics that have traditionally been attributed to [http://en.wikipedia.org/wiki/Object-oriented_programming#OOP_languages&amp;lt;code&amp;gt;Object-Oriented Languages&amp;lt;/code&amp;gt;] &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Although OO languages and Domain specific languages have been around for several years, OODSLs are relatively new.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
OO languages can be either general purpose like C++, Java and Ruby, or domain specific, like Jquery and Kiddo. The following example shows how the two kinds of languages would work if used in the real world.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''The General Purpose Programming way of ordering hash browns at Waffle House'''&amp;lt;ref&amp;gt;Building DSLs [http://www.code-magazine.com/article.aspx?quickid=0902041&amp;amp;page=1]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Harvest the potato, wash it, and chop it into little pieces. Put the pieces in a pan with oil and fry till they turn golden brown, and then drain the oil away and put them on a plate. Now cut some jalapeno peppers and spread on the potatoes. Then add cheese, which you can get by milking a cow and..... &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''The OODSL way of ordering hash browns at Waffle House'''&lt;br /&gt;
&lt;br /&gt;
I would like it Scattered, Smothered, and Peppered please. Thanks!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For a person who works at Waffle House, or goes there regularly to eat, it is a no brainer that the second method is much more efficient. OODSLs take advantage of the context within which communication takes place. By using implicitly understood jargon, the task at hand can be accomplished in a way that is easier to comprehend for a specialized type of user.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
OODSLs can be of 2 types:&lt;br /&gt;
&lt;br /&gt;
* Internal&lt;br /&gt;
* External&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Internal OODSLs are languages that are built on top of existing languages. An internal OODSL makes use of the host language syntax to provide the feel of a domain specific language. It is not universally defined as to when a language/library becomes an OODSL. JQuery is one such example. It is a JavaScript library, which offers an easy way to perform functions like element selection. It can also be argued that JavaScript itself is a domain specific language.&lt;br /&gt;
&lt;br /&gt;
External OODSLs are those that are built from scratch. With the current technology, it is far more easy to churn out several internal OODSLs than to build one from scratch. External OODSLs have their own syntax, as well as their own methods of compilation/interpretation.&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
OODSLs cannot be spoken about without first a brief introduction to Domain Specific Languages and the Object-Oriented programming paradigm. &lt;br /&gt;
&lt;br /&gt;
In a nutshell, DSL&amp;lt;ref&amp;gt;DSL examples[http://www.semanticdesigns.com/products/DMS/DomainSpecificLanguage.html]&amp;lt;/ref&amp;gt; is a language that is specific to a particular domain. DSLs are different from general purpose programming languages like C++ and Java. They take advantage of the fact that there are groups of users who rather than communicating every single thing, are able to implicitly understand certain terms and notations. This makes communication much more efficient for such a group. Eg: 2 basketball fans will talk in basketball jargon. Not everyone will understand what zone defence, 3 pointers and jump ball mean. The jargon serves the specific purpose of easing communication between 2 basketball fans. Some would argue that DSLs have been around for a far longer time dating back to even before the advent of computers. Subway maps, electronics circuit diagrams all demonstrate properties of a DSL. Since then, DSLs have come a long way. Domain Specific Languages (DSLs), as they are spoken about now, have been around since the 1970's and their origin can be traced back to a tool called Draco.  Since Draco, computers have made it possible to design a whole host of other useful DSLs. Some of the more popular ones among them are SQL, Prolog, Verilog, HTML etc.&lt;br /&gt;
&lt;br /&gt;
Object-Oriented Programming (OO) is a programming paradigm that tries to apply real world principles to make programming easier. OO has been around since the 1950's. Starting with Simula and Smalltalk, OO languages have come a long way since then, and has grown to become one of the most popular programming paradigms employed worldwide. Some of the modern object oriented languages include static languages like C++, Java, C#, and dynamic languages like Perl, Ruby etc.&lt;br /&gt;
&lt;br /&gt;
OODSLs, that bring out the features of both DSLs as well as OO languages are a fairly recent invention. OODSLs have been around since the 1980's/1990's. They are now primarily used in the realm of web development, game development, and are also used in certain specialized industries like music.&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
=== PHP ===&lt;br /&gt;
[http://en.wikipedia.org/wiki/PHP&amp;lt;code&amp;gt;PHP&amp;lt;/code&amp;gt;] is an OODSL that is commonly used for web development. It is an open source web development framework that is designed to make web development simpler and easier. The language can be perceived as a general purpose language, but it also has domain specific components designed for the web domain alone. PHP is in general embedded into HTML to perform server side computations before the page is sent to the client.&lt;br /&gt;
&lt;br /&gt;
=== OODSL compiler for FPGA ===&lt;br /&gt;
An object oriented domain specific compiler was developed for programming Field Programmable Gate Arrays.&amp;lt;ref&amp;gt;Object-Oriented Domain Specific Compilers for Programming FPGAs[http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&amp;amp;arnumber=920835&amp;amp;userType=inst&amp;amp;tag=1]&amp;lt;/ref&amp;gt; The compiler allows the hardware programmer to make use of object-oriented style while programming. The research paper claims that this way of programming the hardware brings down the time taken for design by several notches and still results in good optimal performance.&lt;br /&gt;
&lt;br /&gt;
== Tools for Creating OODSL ==&lt;br /&gt;
When creating an OODSL, one can either choose to start from scratch or use a tool that is already available. Creating a language from scratch gives the programmer a certain amount of flexibility to define it the way he wants to, but it takes a lot of time. Therefore, in general, software tools are used to aid in the process of creating Domain Specific Languages. This is because it not only saves time, but also helps to make the language easy to use due to familiarity with the syntax of the underlying language.&lt;br /&gt;
=== Boo ===&lt;br /&gt;
Boo&amp;lt;ref&amp;gt;Boo Home[http://boo.codehaus.org/Home]&amp;lt;/ref&amp;gt; is an open source object oriented language that is used to create Domain Specific languages. Defining basic data structures like array, hash, variables etc are inherently supported in Boo and it makes their creation easier. Although Boo is a statically typed language, these restrictions can be bent once in a while so that the type of objects can be found and manipulated in run time as well ([http://en.wikipedia.org/wiki/Duck_typing &amp;lt;code&amp;gt;Duck typing&amp;lt;/code&amp;gt;]).&lt;br /&gt;
&lt;br /&gt;
=== Visual Studio ===&lt;br /&gt;
Visual Studio has Domain-specific language tools that are designed to help the designer to build a language focusing on the language grammar and characteristics rather than paying much attention to the internal details of the compiler.&amp;lt;ref&amp;gt;Domain specific development[http://www.domainspecificdevelopment.com/]&amp;lt;/ref&amp;gt; Visual tools are used that help focus on the business requirements of the OODSL rather than worrying about how it works internally.&lt;br /&gt;
=== Groovy ===&lt;br /&gt;
Groovy &amp;lt;ref&amp;gt;Groovy Home[http://groovy.codehaus.org/]&amp;lt;/ref&amp;gt; is a dynamic language for the Java Virtual Machine. Also, the syntax is groovy is similar to that of Java, making designing of new OODSLs easier and similar to programming in Java. [http://java.dzone.com/articles/groovy-dsl-simple-example&amp;lt;code&amp;gt;An example for developing an OODSL in Groovy&amp;lt;/code&amp;gt;].&lt;br /&gt;
&lt;br /&gt;
== OODSL vs. non-OODSL ==&lt;br /&gt;
When defining a DSL, choosing whether to go with an OODSL or a non-OODSL depends on several factors like the domain for which it is defined, existing DSLs for that domain etc. Non-OODSLs are domain specific languages that do not necessarily embrace object oriented concepts like abstraction, polymorphism etc. OODSLs can be well suited for some situations whereas in other situations, they might be an overkill. Defining a new OODSL when there is an already widely accepted non-OODSL may not be very useful. For example, HTML is the standard method for displaying web pages and it is non-OODSL. Defining a new non-OODSL that replaces HTML may not prove to be significantly advantageous.&lt;br /&gt;
&lt;br /&gt;
== Advantages and Disadvantages ==&lt;br /&gt;
Some of the advantages of OODSLs would be:&lt;br /&gt;
* Since OODSLs, by their name, are object oriented, they give the developer an easier alternative to model their applications based on business goals and using real world paradigms.&lt;br /&gt;
* Because of their object oriented nature, the code is generally simple to understand and therefore code maintenance would be easier in OODSLs than in non-OODSLs.&lt;br /&gt;
* Object oriented concepts like encapsulation and abstraction give the code better security when they are modified in the future.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Though OODSLs in general have several advantages over other languages, one must also consider their disadvantages:&lt;br /&gt;
* Defining an object oriented language in general takes more time than defining a normal language because we have to properly define it to include OO concepts.&lt;br /&gt;
* They may not be well-suited for all domains and environments. Sometimes there may be a simpler non-OODSL way to achieve the task.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Varjun2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch1_1w9_av&amp;diff=64771</id>
		<title>CSC/ECE 517 Fall 2012/ch1 1w9 av</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch1_1w9_av&amp;diff=64771"/>
		<updated>2012-09-14T23:30:32Z</updated>

		<summary type="html">&lt;p&gt;Varjun2: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Object-Oriented Domain-Specific Languages (OODSL)'''&lt;br /&gt;
&amp;lt;p&amp;gt;An OODSL is a [http://en.wikipedia.org/wiki/Domain-specific_language&amp;lt;code&amp;gt;Domain-specific language&amp;lt;/code&amp;gt;] (DSL) that exhibits characteristics that have traditionally been attributed to [http://en.wikipedia.org/wiki/Object-oriented_programming#OOP_languages&amp;lt;code&amp;gt;Object-Oriented Languages&amp;lt;/code&amp;gt;] &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Although OO languages and Domain specific languages have been around for several years, OODSLs are relatively new.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
OO languages can be either general purpose like C++, Java and Ruby, or domain specific, like Jquery and Kiddo. The following example shows how the two kinds of languages would work if used in the real world.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''The General Purpose Programming way of ordering hash browns at Waffle House'''&amp;lt;ref&amp;gt;Building DSLs [http://www.code-magazine.com/article.aspx?quickid=0902041&amp;amp;page=1]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Harvest the potato, wash it, and chop it into little pieces. Put the pieces in a pan with oil and fry till they turn golden brown, and then drain the oil away and put them on a plate. Now cut some jalapeno peppers and spread on the potatoes. Then add cheese, which you can get by milking a cow and..... &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''The OODSL way of ordering hash browns at Waffle House'''&lt;br /&gt;
&lt;br /&gt;
I would like it Scattered, Smothered, and Peppered please. Thanks!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For a person who works at Waffle House, or goes there regularly to eat, it is a no brainer that the second method is much more efficient. OODSLs take advantage of the context within which communication takes place. By using implicitly understood jargon, the task at hand can be accomplished in a way that is easier to comprehend for a specialized type of user.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
OODSLs can be of 2 types:&lt;br /&gt;
&lt;br /&gt;
* Internal&lt;br /&gt;
* External&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Internal OODSLs are languages that are built on top of existing languages. An internal OODSL makes use of the host language syntax to provide the feel of a domain specific language. It is not universally defined as to when a language/library becomes an OODSL. JQuery is one such example. It is a JavaScript library, which offers an easy way to perform functions like element selection. It can also be argued that JavaScript itself is a domain specific language.&lt;br /&gt;
&lt;br /&gt;
External OODSLs are those that are built from scratch. With the current technology, it is far more easy to churn out several internal OODSLs than to build one from scratch. External OODSLs have their own syntax, as well as their own methods of compilation/interpretation.&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
OODSLs cannot be spoken about without first a brief introduction to Domain Specific Languages and the Object-Oriented programming paradigm. &lt;br /&gt;
&lt;br /&gt;
In a nutshell, DSL&amp;lt;ref&amp;gt;DSL examples[http://www.semanticdesigns.com/products/DMS/DomainSpecificLanguage.html]&amp;lt;/ref&amp;gt; is a language that is specific to a particular domain. DSLs are different from general purpose programming languages like C++ and Java. They take advantage of the fact that there are groups of users who rather than communicating every single thing, are able to implicitly understand certain terms and notations. This makes communication much more efficient for such a group. Eg: 2 basketball fans will talk in basketball jargon. Not everyone will understand what zone defence, 3 pointers and jump ball mean. The jargon serves the specific purpose of easing communication between 2 basketball fans. Some would argue that DSLs have been around for a far longer time dating back to even before the advent of computers. Subway maps, electronics circuit diagrams all demonstrate properties of a DSL. Since then, DSLs have come a long way. Domain Specific Languages (DSLs), as they are spoken about now, have been around since the 1970's and their origin can be traced back to a tool called Draco.  Since Draco, computers have made it possible to design a whole host of other useful DSLs. Some of the more popular ones among them are SQL, Prolog, Verilog, HTML etc.&lt;br /&gt;
&lt;br /&gt;
Object-Oriented Programming (OO) is a programming paradigm that tries to apply real world principles to make programming easier. OO has been around since the 1950's. Starting with Simula and Smalltalk, OO languages have come a long way since then, and has grown to become one of the most popular programming paradigms employed worldwide. Some of the modern object oriented languages include static languages like C++, Java, C#, and dynamic languages like Perl, Ruby etc.&lt;br /&gt;
&lt;br /&gt;
OODSLs, that bring out the features of both DSLs as well as OO languages are a fairly recent invention. OODSLs have been around since the 1980's/1990's. They are now primarily used in the realm of web development, game development, and are also used in certain specialized industries like music.&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
=== PHP ===&lt;br /&gt;
[http://en.wikipedia.org/wiki/PHP&amp;lt;code&amp;gt;PHP&amp;lt;/code&amp;gt;] is an OODSL that is commonly used for web development. It is an open source web development framework that is designed to make web development simpler and easier. The language can be perceived as a general purpose language, but it also has domain specific components designed for the web domain alone. PHP is in general embedded into HTML to perform server side computations before the page is sent to the client.&lt;br /&gt;
&lt;br /&gt;
=== OODSL compiler for FPGA ===&lt;br /&gt;
An object oriented domain specific compiler was developed for programming Field Programmable Gate Arrays.&amp;lt;ref&amp;gt;Object-Oriented Domain Specific Compilers for Programming FPGAs[http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&amp;amp;arnumber=920835&amp;amp;userType=inst&amp;amp;tag=1]&amp;lt;/ref&amp;gt; The compiler allows the hardware programmer to make use of object-oriented style while programming. The research paper claims that this way of programming the hardware brings down the time taken for design by several notches and still results in good optimal performance.&lt;br /&gt;
&lt;br /&gt;
== Tools for Creating OODSL ==&lt;br /&gt;
When creating an OODSL, one can either choose to start from scratch or use a tool that is already available. Creating a language from scratch gives the programmer a certain amount of flexibility to define it the way he wants to, but it takes a lot of time. Therefore, in general, software tools are used to aid in the process of creating Domain Specific Languages. This is because it not only saves time, but also helps to make the language easy to use due to familiarity with the syntax of the underlying language.&lt;br /&gt;
=== Boo ===&lt;br /&gt;
Boo&amp;lt;ref&amp;gt;Boo Home[http://boo.codehaus.org/Home]&amp;lt;/ref&amp;gt; is an open source object oriented language that is used to create Domain Specific languages. Defining basic data structures like array, hash, variables etc are inherently supported in Boo and it makes their creation easier. Although Boo is a statically typed language, these restrictions can be bent once in a while so that the type of objects can be found and manipulated in run time as well ([http://en.wikipedia.org/wiki/Duck_typing &amp;lt;code&amp;gt;Duck typing&amp;lt;/code&amp;gt;]).&lt;br /&gt;
&lt;br /&gt;
=== Visual Studio ===&lt;br /&gt;
Visual Studio has Domain-specific language tools that are designed to help the designer to build a language focusing on the language grammar and characteristics rather than paying much attention to the internal details of the compiler.&amp;lt;ref&amp;gt;Domain specific development[http://www.domainspecificdevelopment.com/]&amp;lt;/ref&amp;gt; Visual tools are used that help focus on the business requirements of the OODSL rather than worrying about how it works internally.&lt;br /&gt;
=== Groovy ===&lt;br /&gt;
Groovy &amp;lt;ref&amp;gt;Groovy Home[http://groovy.codehaus.org/]&amp;lt;/ref&amp;gt; is a dynamic language for the Java Virtual Machine. Also, the syntax is groovy is similar to that of Java, making designing of new OODSLs easier and similar to programming in Java. [http://java.dzone.com/articles/groovy-dsl-simple-example&amp;lt;code&amp;gt;An example for developing an OODSL in Groovy&amp;lt;/code&amp;gt;].&lt;br /&gt;
&lt;br /&gt;
== OODSL vs. non-OODSL ==&lt;br /&gt;
When defining a DSL, choosing whether to go with an OODSL or a non-OODSL depends on several factors like the domain for which it is defined, existing DSLs for that domain etc. Non-OODSLs are domain specific languages that do not necessarily embrace object oriented concepts like abstraction, polymorphism etc. OODSLs can be well suited for some situations whereas in other situations, they might be an overkill. Defining a new OODSL when there is an already widely accepted non-OODSL may not be very useful. For example, HTML is the standard method for displaying web pages and it is non-OODSL. Defining a new non-OODSL that replaces HTML may not prove to be significantly advantageous.&lt;br /&gt;
&lt;br /&gt;
== Advantages and Disadvantages ==&lt;br /&gt;
Some of the advantages of OODSLs would be:&lt;br /&gt;
* Since OODSLs, by their name, are object oriented, they give the developer an easier alternative to model their applications based on business goals and using real world paradigms.&lt;br /&gt;
* Because of their object oriented nature, the code is generally simple to understand and therefore code maintenance would be easier in OODSLs than in non-OODSLs.&lt;br /&gt;
* Object oriented concepts like encapsulation and abstraction give the code better security when they are modified in the future.&lt;br /&gt;
&lt;br /&gt;
Though OODSLs in general have several advantages over other languages, one must also consider their disadvantages:&lt;br /&gt;
* Defining an object oriented language in general takes more time than defining a normal language because we have to properly define it to include OO concepts.&lt;br /&gt;
* They may not be well-suited for all domains and environments. Sometimes there may be a simpler non-OODSL way to achieve the task.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Varjun2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch1_1w9_av&amp;diff=64765</id>
		<title>CSC/ECE 517 Fall 2012/ch1 1w9 av</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch1_1w9_av&amp;diff=64765"/>
		<updated>2012-09-14T23:28:55Z</updated>

		<summary type="html">&lt;p&gt;Varjun2: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Object-Oriented Domain-Specific Languages (OODSL)'''&lt;br /&gt;
&amp;lt;p&amp;gt;An OODSL is a [http://en.wikipedia.org/wiki/Domain-specific_language&amp;lt;code&amp;gt;Domain-specific language&amp;lt;/code&amp;gt;] (DSL) that exhibits characteristics that have traditionally been attributed to [http://en.wikipedia.org/wiki/Object-oriented_programming#OOP_languages&amp;lt;code&amp;gt;Object-Oriented Languages&amp;lt;/code&amp;gt;] &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Although OO languages and Domain specific languages have been around for several years, OODSLs are relatively new.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
OO languages can be either general purpose like C++, Java and Ruby, or domain specific, like Jquery and Kiddo. The following example shows how the two kinds of languages would work if used in the real world.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''The General Purpose Programming way of ordering hash browns at Waffle House'''&amp;lt;ref&amp;gt;Home[http://www.code-magazine.com/article.aspx?quickid=0902041&amp;amp;page=1]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Harvest the potato, wash it, and chop it into little pieces. Put the pieces in a pan with oil and fry till they turn golden brown, and then drain the oil away and put them on a plate. Now cut some jalapeno peppers and spread on the potatoes. Then add cheese, which you can get by milking a cow and..... &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''The OODSL way of ordering hash browns at Waffle House'''&lt;br /&gt;
&lt;br /&gt;
I would like it Scattered, Smothered, and Peppered please. Thanks!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For a person who works at Waffle House, or goes there regularly to eat, it is a no brainer that the second method is much more efficient. OODSLs take advantage of the context within which communication takes place. By using implicitly understood jargon, the task at hand can be accomplished in a way that is easier to comprehend for a specialized type of user.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
OODSLs can be of 2 types:&lt;br /&gt;
&lt;br /&gt;
* Internal&lt;br /&gt;
* External&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Internal OODSLs are languages that are built on top of existing languages. An internal OODSL makes use of the host language syntax to provide the feel of a domain specific language. It is not universally defined as to when a language/library becomes an OODSL. JQuery is one such example. It is a JavaScript library, which offers an easy way to perform functions like element selection. It can also be argued that JavaScript itself is a domain specific language.&lt;br /&gt;
&lt;br /&gt;
External OODSLs are those that are built from scratch. With the current technology, it is far more easy to churn out several internal OODSLs than to build one from scratch. External OODSLs have their own syntax, as well as their own methods of compilation/interpretation.&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
OODSLs cannot be spoken about without first a brief introduction to Domain Specific Languages and the Object-Oriented programming paradigm. &lt;br /&gt;
&lt;br /&gt;
In a nutshell, DSL&amp;lt;ref&amp;gt;DSL Home[http://www.semanticdesigns.com/products/DMS/DomainSpecificLanguage.html]&amp;lt;/ref&amp;gt; is a language that is specific to a particular domain. DSLs are different from general purpose programming languages like C++ and Java. They take advantage of the fact that there are groups of users who rather than communicating every single thing, are able to implicitly understand certain terms and notations. This makes communication much more efficient for such a group. Eg: 2 basketball fans will talk in basketball jargon. Not everyone will understand what zone defence, 3 pointers and jump ball mean. The jargon serves the specific purpose of easing communication between 2 basketball fans. Some would argue that DSLs have been around for a far longer time dating back to even before the advent of computers. Subway maps, electronics circuit diagrams all demonstrate properties of a DSL. Since then, DSLs have come a long way. Domain Specific Languages (DSLs), as they are spoken about now, have been around since the 1970's and their origin can be traced back to a tool called Draco.  Since Draco, computers have made it possible to design a whole host of other useful DSLs. Some of the more popular ones among them are SQL, Prolog, Verilog, HTML etc.&lt;br /&gt;
&lt;br /&gt;
Object-Oriented Programming (OO) is a programming paradigm that tries to apply real world principles to make programming easier. OO has been around since the 1950's. Starting with Simula and Smalltalk, OO languages have come a long way since then, and has grown to become one of the most popular programming paradigms employed worldwide. Some of the modern object oriented languages include static languages like C++, Java, C#, and dynamic languages like Perl, Ruby etc.&lt;br /&gt;
&lt;br /&gt;
OODSLs, that bring out the features of both DSLs as well as OO languages are a fairly recent invention. OODSLs have been around since the 1980's/1990's. They are now primarily used in the realm of web development, game development, and are also used in certain specialized industries like music.&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
=== PHP ===&lt;br /&gt;
[http://en.wikipedia.org/wiki/PHP&amp;lt;code&amp;gt;PHP&amp;lt;/code&amp;gt;] is an OODSL that is commonly used for web development. It is an open source web development framework that is designed to make web development simpler and easier. The language can be perceived as a general purpose language, but it also has domain specific components designed for the web domain alone. PHP is in general embedded into HTML to perform server side computations before the page is sent to the client.&lt;br /&gt;
&lt;br /&gt;
=== OODSL compiler for FPGA ===&lt;br /&gt;
An object oriented domain specific compiler was developed for programming Field Programmable Gate Arrays.&amp;lt;ref&amp;gt;Object-Oriented Domain Specific Compilers for Programming FPGAs[http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&amp;amp;arnumber=920835&amp;amp;userType=inst&amp;amp;tag=1]&amp;lt;/ref&amp;gt; The compiler allows the hardware programmer to make use of object-oriented style while programming. The research paper claims that this way of programming the hardware brings down the time taken for design by several notches and still results in good optimal performance.&lt;br /&gt;
&lt;br /&gt;
== Tools for Creating OODSL ==&lt;br /&gt;
When creating an OODSL, one can either choose to start from scratch or use a tool that is already available. Creating a language from scratch gives the programmer a certain amount of flexibility to define it the way he wants to, but it takes a lot of time. Therefore, in general, software tools are used to aid in the process of creating Domain Specific Languages. This is because it not only saves time, but also helps to make the language easy to use due to familiarity with the syntax of the underlying language.&lt;br /&gt;
=== Boo ===&lt;br /&gt;
Boo&amp;lt;ref&amp;gt;Boo Home[http://boo.codehaus.org/Home]&amp;lt;/ref&amp;gt; is an open source object oriented language that is used to create Domain Specific languages. Defining basic data structures like array, hash, variables etc are inherently supported in Boo and it makes their creation easier. Although Boo is a statically typed language, these restrictions can be bent once in a while so that the type of objects can be found and manipulated in run time as well ([http://en.wikipedia.org/wiki/Duck_typing &amp;lt;code&amp;gt;Duck typing&amp;lt;/code&amp;gt;]).&lt;br /&gt;
&lt;br /&gt;
=== Visual Studio ===&lt;br /&gt;
Visual Studio has Domain-specific language tools that are designed to help the designer to build a language focusing on the language grammar and characteristics rather than paying much attention to the internal details of the compiler.&amp;lt;ref&amp;gt;Domain specific development[http://www.domainspecificdevelopment.com/]&amp;lt;/ref&amp;gt; Visual tools are used that help focus on the business requirements of the OODSL rather than worrying about how it works internally.&lt;br /&gt;
=== Groovy ===&lt;br /&gt;
Groovy &amp;lt;ref&amp;gt;Groovy Home[http://groovy.codehaus.org/]&amp;lt;/ref&amp;gt; is a dynamic language for the Java Virtual Machine. Also, the syntax is groovy is similar to that of Java, making designing of new OODSLs easier and similar to programming in Java. [http://java.dzone.com/articles/groovy-dsl-simple-example&amp;lt;code&amp;gt;An example for developing an OODSL in Groovy&amp;lt;/code&amp;gt;].&lt;br /&gt;
&lt;br /&gt;
== OODSL vs. non-OODSL ==&lt;br /&gt;
When defining a DSL, choosing whether to go with an OODSL or a non-OODSL depends on several factors like the domain for which it is defined, existing DSLs for that domain etc. Non-OODSLs are domain specific languages that do not necessarily embrace object oriented concepts like abstraction, polymorphism etc. OODSLs can be well suited for some situations whereas in other situations, they might be an overkill. Defining a new OODSL when there is an already widely accepted non-OODSL may not be very useful. For example, HTML is the standard method for displaying web pages and it is non-OODSL. Defining a new non-OODSL that replaces HTML may not prove to be significantly advantageous.&lt;br /&gt;
&lt;br /&gt;
== Advantages and Disadvantages ==&lt;br /&gt;
Some of the advantages of OODSLs would be:&lt;br /&gt;
* Since OODSLs, by their name, are object oriented, they give the developer an easier alternative to model their applications based on business goals and using real world paradigms.&lt;br /&gt;
* Because of their object oriented nature, the code is generally simple to understand and therefore code maintenance would be easier in OODSLs than in non-OODSLs.&lt;br /&gt;
* Object oriented concepts like encapsulation and abstraction give the code better security when they are modified in the future.&lt;br /&gt;
&lt;br /&gt;
Though OODSLs in general have several advantages over other languages, one must also consider their disadvantages:&lt;br /&gt;
* Defining an object oriented language in general takes more time than defining a normal language because we have to properly define it to include OO concepts.&lt;br /&gt;
* They may not be well-suited for all domains and environments. Sometimes there may be a simpler non-OODSL way to achieve the task.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Varjun2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch1_1w9_av&amp;diff=64748</id>
		<title>CSC/ECE 517 Fall 2012/ch1 1w9 av</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch1_1w9_av&amp;diff=64748"/>
		<updated>2012-09-14T23:23:55Z</updated>

		<summary type="html">&lt;p&gt;Varjun2: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Object-Oriented Domain-Specific Languages (OODSL)'''&lt;br /&gt;
&amp;lt;p&amp;gt;An OODSL is a [http://en.wikipedia.org/wiki/Domain-specific_language&amp;lt;code&amp;gt;Domain-specific language&amp;lt;/code&amp;gt;] (DSL) that exhibits characteristics that have traditionally been attributed to [http://en.wikipedia.org/wiki/Object-oriented_programming#OOP_languages&amp;lt;code&amp;gt;Object-Oriented Languages&amp;lt;/code&amp;gt;] &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Although OO languages and Domain specific languages have been around for several years, OODSLs are relatively new.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
OO languages can be either general purpose like C++, Java and Ruby, or domain specific, like Jquery and Kiddo. The following example shows how the two kinds of languages would work if used in the real world.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''The General Purpose Programming way of ordering hash browns at Waffle House'''&lt;br /&gt;
&lt;br /&gt;
Harvest the potato, wash it, and chop it into little pieces. Put the pieces in a pan with oil and fry till they turn golden brown, and then drain the oil away and put them on a plate. Now cut some jalapeno peppers and spread on the potatoes. Then add cheese, which you can get by milking a cow and..... &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''The OODSL way of ordering hash browns at Waffle House'''&lt;br /&gt;
&lt;br /&gt;
I would like it Scattered, Smothered, and Peppered please. Thanks!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For a person who works at Waffle House, or goes there regularly to eat, it is a no brainer that the second method is much more efficient. OODSLs take advantage of the context within which communication takes place. By using implicitly understood jargon, the task at hand can be accomplished in a way that is easier to comprehend for a specialized type of user.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
OODSLs can be of 2 types:&lt;br /&gt;
&lt;br /&gt;
* Internal&lt;br /&gt;
* External&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Internal OODSLs are languages that are built on top of existing languages. An internal OODSL makes use of the host language syntax to provide the feel of a domain specific language. It is not universally defined as to when a language/library becomes an OODSL. JQuery is one such example. It is a JavaScript library, which offers an easy way to perform functions like element selection. It can also be argued that JavaScript itself is a domain specific language.&lt;br /&gt;
&lt;br /&gt;
External OODSLs are those that are built from scratch. With the current technology, it is far more easy to churn out several internal OODSLs than to build one from scratch. External OODSLs have their own syntax, as well as their own methods of compilation/interpretation.&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
OODSLs cannot be spoken about without first a brief introduction to Domain Specific Languages and the Object-Oriented programming paradigm. &lt;br /&gt;
&lt;br /&gt;
In a nutshell, DSL is a language that is specific to a particular domain. DSLs are different from general purpose programming languages like C++ and Java. They take advantage of the fact that there are groups of users who rather than communicating every single thing, are able to implicitly understand certain terms and notations. This makes communication much more efficient for such a group. Eg: 2 basketball fans will talk in basketball jargon. Not everyone will understand what zone defence, 3 pointers and jump ball mean. The jargon serves the specific purpose of easing communication between 2 basketball fans. Some would argue that DSLs have been around for a far longer time dating back to even before the advent of computers. Subway maps, electronics circuit diagrams all demonstrate properties of a DSL. Since then, DSLs have come a long way. Domain Specific Languages (DSLs), as they are spoken about now, have been around since the 1970's and their origin can be traced back to a tool called Draco.  Since Draco, computers have made it possible to design a whole host of other useful DSLs. Some of the more popular ones among them are SQL, Prolog, Verilog, HTML etc.&lt;br /&gt;
&lt;br /&gt;
Object-Oriented Programming (OO) is a programming paradigm that tries to apply real world principles to make programming easier. OO has been around since the 1950's. Starting with Simula and Smalltalk, OO languages have come a long way since then, and has grown to become one of the most popular programming paradigms employed worldwide. Some of the modern object oriented languages include static languages like C++, Java, C#, and dynamic languages like Perl, Ruby etc.&lt;br /&gt;
&lt;br /&gt;
OODSLs, that bring out the features of both DSLs as well as OO languages are a fairly recent invention. OODSLs have been around since the 1980's/1990's. They are now primarily used in the realm of web development, game development, and are also used in certain specialized industries like music.&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
=== PHP ===&lt;br /&gt;
[http://en.wikipedia.org/wiki/PHP&amp;lt;code&amp;gt;PHP&amp;lt;/code&amp;gt;] is an OODSL that is commonly used for web development. It is an open source web development framework that is designed to make web development simpler and easier. The language can be perceived as a general purpose language, but it also has domain specific components designed for the web domain alone. PHP is in general embedded into HTML to perform server side computations before the page is sent to the client.&lt;br /&gt;
&lt;br /&gt;
=== OODSL compiler for FPGA ===&lt;br /&gt;
An object oriented domain specific compiler was developed for programming Field Programmable Gate Arrays.&amp;lt;ref&amp;gt;Object-Oriented Domain Specific Compilers for Programming FPGAs[http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&amp;amp;arnumber=920835&amp;amp;userType=inst&amp;amp;tag=1]&amp;lt;/ref&amp;gt; The compiler allows the hardware programmer to make use of object-oriented style while programming. The research paper claims that this way of programming the hardware brings down the time taken for design by several notches and still results in good optimal performance.&lt;br /&gt;
&lt;br /&gt;
== Tools for Creating OODSL ==&lt;br /&gt;
When creating an OODSL, one can either choose to start from scratch or use a tool that is already available. Creating a language from scratch gives the programmer a certain amount of flexibility to define it the way he wants to, but it takes a lot of time. Therefore, in general, software tools are used to aid in the process of creating Domain Specific Languages. This is because it not only saves time, but also helps to make the language easy to use due to familiarity with the syntax of the underlying language.&lt;br /&gt;
=== Boo ===&lt;br /&gt;
Boo&amp;lt;ref&amp;gt;Boo Home[http://boo.codehaus.org/Home]&amp;lt;/ref&amp;gt; is an open source object oriented language that is used to create Domain Specific languages. Defining basic data structures like array, hash, variables etc are inherently supported in Boo and it makes their creation easier. Although Boo is a statically typed language, these restrictions can be bent once in a while so that the type of objects can be found and manipulated in run time as well ([http://en.wikipedia.org/wiki/Duck_typing &amp;lt;code&amp;gt;Duck typing&amp;lt;/code&amp;gt;]).&lt;br /&gt;
&lt;br /&gt;
=== Visual Studio ===&lt;br /&gt;
Visual Studio has Domain-specific language tools that are designed to help the designer to build a language focusing on the language grammar and characteristics rather than paying much attention to the internal details of the compiler.&amp;lt;ref&amp;gt;Domain specific development[http://www.domainspecificdevelopment.com/]&amp;lt;/ref&amp;gt; Visual tools are used that help focus on the business requirements of the OODSL rather than worrying about how it works internally.&lt;br /&gt;
=== Groovy ===&lt;br /&gt;
Groovy &amp;lt;ref&amp;gt;Groovy Home[http://groovy.codehaus.org/]&amp;lt;/ref&amp;gt; is a dynamic language for the Java Virtual Machine. Also, the syntax is groovy is similar to that of Java, making designing of new OODSLs easier and similar to programming in Java. [http://java.dzone.com/articles/groovy-dsl-simple-example&amp;lt;code&amp;gt;An example for developing an OODSL in Groovy&amp;lt;/code&amp;gt;].&lt;br /&gt;
&lt;br /&gt;
== OODSL vs. non-OODSL ==&lt;br /&gt;
When defining a DSL, choosing whether to go with an OODSL or a non-OODSL depends on several factors like the domain for which it is defined, existing DSLs for that domain etc. Non-OODSLs are domain specific languages that do not necessarily embrace object oriented concepts like abstraction, polymorphism etc. OODSLs can be well suited for some situations whereas in other situations, they might be an overkill. Defining a new OODSL when there is an already widely accepted non-OODSL may not be very useful. For example, HTML is the standard method for displaying web pages and it is non-OODSL. Defining a new non-OODSL that replaces HTML may not prove to be significantly advantageous.&lt;br /&gt;
&lt;br /&gt;
== Advantages and Disadvantages ==&lt;br /&gt;
Some of the advantages of OODSLs would be:&lt;br /&gt;
* Since OODSLs, by their name, are object oriented, they give the developer an easier alternative to model their applications based on business goals and using real world paradigms.&lt;br /&gt;
* Because of their object oriented nature, the code is generally simple to understand and therefore code maintenance would be easier in OODSLs than in non-OODSLs.&lt;br /&gt;
* Object oriented concepts like encapsulation and abstraction give the code better security when they are modified in the future.&lt;br /&gt;
&lt;br /&gt;
Though OODSLs in general have several advantages over other languages, one must also consider their disadvantages:&lt;br /&gt;
* Defining an object oriented language in general takes more time than defining a normal language because we have to properly define it to include OO concepts.&lt;br /&gt;
* They may not be well-suited for all domains and environments. Sometimes there may be a simpler non-OODSL way to achieve the task.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Varjun2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch1_1w9_av&amp;diff=64695</id>
		<title>CSC/ECE 517 Fall 2012/ch1 1w9 av</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch1_1w9_av&amp;diff=64695"/>
		<updated>2012-09-14T23:10:08Z</updated>

		<summary type="html">&lt;p&gt;Varjun2: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Object-Oriented Domain-Specific Languages (OODSL)'''&lt;br /&gt;
&amp;lt;p&amp;gt;An OODSL is a [http://en.wikipedia.org/wiki/Domain-specific_language&amp;lt;code&amp;gt;Domain-specific language&amp;lt;/code&amp;gt;] (DSL) that exhibits characteristics that have traditionally been attributed to [http://en.wikipedia.org/wiki/Object-oriented_programming#OOP_languages&amp;lt;code&amp;gt;Object-Oriented Languages&amp;lt;/code&amp;gt;] &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Although OO languages and Domain specific languages have been around for several years, OODSLs are relatively new.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
OO languages can be either general purpose like C++, Java and Ruby, or domain specific, like Jquery and Kiddo. The following example shows how the two kinds of languages would work if used in the real world.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''The General Purpose Programming way of ordering hash browns at Waffle House'''&lt;br /&gt;
&lt;br /&gt;
Harvest the potato, wash it, and chop it into little pieces. Put the pieces in a pan with oil and fry till they turn golden brown, and then drain the oil away and put them on a plate. Now cut some jalapeno peppers and spread on the potatoes. Then add cheese, which you can get by milking a cow and..... &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''The OODSL way of ordering hash browns at Waffle House'''&lt;br /&gt;
&lt;br /&gt;
I would like it Scattered, Smothered, and Peppered please. Thanks!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For a person who works at Waffle House, or goes there regularly to eat, it is a no brainer that the second method is much more efficient. OODSLs take advantage of the context within which communication takes place. By using implicitly understood jargon, the task at hand can be accomplished in a way that is easier to comprehend for a specialized type of user.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
OODSLs can be of 2 types:&lt;br /&gt;
&lt;br /&gt;
* Internal&lt;br /&gt;
* External&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Internal OODSLs are languages that are built on top of existing languages. An internal OODSL makes use of the host language syntax to provide the feel of a domain specific language. It is not universally defined as to when a language/library becomes an OODSL. JQuery is one such example. It is a JavaScript library, which offers an easy way to perform functions like element selection. It can also be argued that JavaScript itself is a domain specific language.&lt;br /&gt;
&lt;br /&gt;
External OODSLs are those that are built from scratch. With the current technology, it is far more easy to churn out several internal OODSLs than to build one from scratch. External OODSLs have their own syntax, as well as their own methods of compilation/interpretation.&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
OODSLs cannot be spoken about without first a brief introduction to Domain Specific Languages and the Object-Oriented programming paradigm. &lt;br /&gt;
&lt;br /&gt;
In a nutshell, DSL is a language that is specific to a particular domain. DSLs are different from general purpose programming languages like C++ and Java. They take advantage of the fact that there are groups of users who rather than communicating every single thing, are able to implicitly understand certain terms and notations. This makes communication much more efficient for such a group. Eg: 2 basketball fans will talk in basketball jargon. Not everyone will understand what zone defence, 3 pointers and jump ball mean. The jargon serves the specific purpose of easing communication between 2 basketball fans. Some would argue that DSLs have been around for a far longer time dating back to even before the advent of computers. Subway maps, electronics circuit diagrams all demonstrate properties of a DSL. Since then, DSLs have come a long way. Domain Specific Languages (DSLs), as they are spoken about now, have been around since the 1970's and their origin can be traced back to a tool called Draco.  Since Draco, computers have made it possible to design a whole host of other useful DSLs. Some of the more popular ones among them are SQL, Prolog, Verilog, HTML etc.&lt;br /&gt;
&lt;br /&gt;
Object-Oriented Programming (OO) is a programming paradigm that tries to apply real world principles to make programming easier. OO has been around since the 1950's. Starting with Simula and Smalltalk, OO languages have come a long way since then, and has grown to become one of the most popular programming paradigms employed worldwide. Some of the modern object oriented languages include static languages like C++, Java, C#, and dynamic languages like Perl, Ruby etc.&lt;br /&gt;
&lt;br /&gt;
OODSLs, that bring out the features of both DSLs as well as OO languages are a fairly recent invention. OODSLs have been around since the 1980's/1990's. They are now primarily used in the realm of web development, game development, and are also used in certain specialized industries like music.&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
=== PHP ===&lt;br /&gt;
[http://en.wikipedia.org/wiki/PHP&amp;lt;code&amp;gt;PHP&amp;lt;/code&amp;gt;] is an OODSL that is commonly used for web development. It is an open source web development framework that is designed to make web development simpler and easier. The language can also be perceived as a general purpose language, but it also has domain specific components designed for the web domain alone. PHP is in general embedded into HTML to perform server side computations before the page is being sent to the client.&lt;br /&gt;
&lt;br /&gt;
=== OODSL compiler for FPGA ===&lt;br /&gt;
An object oriented domain specific compiler was developed for programming Field Programmable Gate Arrays.&amp;lt;ref&amp;gt;Object-Oriented Domain Specific Compilers for Programming FPGAs[http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&amp;amp;arnumber=920835&amp;amp;userType=inst&amp;amp;tag=1]&amp;lt;/ref&amp;gt; The compiler allows the hardware programmer to make use of object-oriented style while programming. The research paper claims that this way of programming the hardware reduces the design time several times and still result in an optimal performance.&lt;br /&gt;
&lt;br /&gt;
== Tools for Creating OODSL ==&lt;br /&gt;
When creating an OODSL, one can either choose to start from the scratch or use a tool that is already available to create the language. Creating a language from the scratch gives flexibility to the programmer to define it the way he wants to but it takes a lot of time. In general, some tools are used to create Domain Specific Languages. This is because it not only saves time but also helps to make the language easy to use.&lt;br /&gt;
=== Boo ===&lt;br /&gt;
Boo&amp;lt;ref&amp;gt;Boo Home[http://boo.codehaus.org/Home]&amp;lt;/ref&amp;gt; is an open source object oriented language to create Domain Specific languages. Defining basic data structures like array, hash, variables etc are inherently supported in Boo and it makes creation of them easier. Although Boo is a statically typed language, these restrictions can be bent once in a while so that the type of objects can be found and manipulated in run time as well ([http://en.wikipedia.org/wiki/Duck_typing &amp;lt;code&amp;gt;Duck typing&amp;lt;/code&amp;gt;]).&lt;br /&gt;
&lt;br /&gt;
=== Visual Studio ===&lt;br /&gt;
Visual Studio has Domain-specific language tools that are designed to help the designer to build a language focusing on the language grammar and characteristics rather than internal details of the compiler.&amp;lt;ref&amp;gt;Domain specific development[http://www.domainspecificdevelopment.com/]&amp;lt;/ref&amp;gt; The tool shows visual tools that helps focus on the business requirements of the OODSL rather than worrying about the internals of its working.&lt;br /&gt;
=== Groovy ===&lt;br /&gt;
Groovy &amp;lt;ref&amp;gt;Groovy Home[http://groovy.codehaus.org/]&amp;lt;/ref&amp;gt; is a dynamic language for the Java Virtual Machine. Also, the syntax is groovy is similar to that of Java making designing of new DSLs easier and similar to programming in Java. [http://java.dzone.com/articles/groovy-dsl-simple-example&amp;lt;code&amp;gt;An example for developing an OODSL in Groovy&amp;lt;/code&amp;gt;].&lt;br /&gt;
&lt;br /&gt;
== OODSL vs. non-OODSL ==&lt;br /&gt;
When defining a DSL, choosing whether to go with a OODSL or a non-OODSL depends on several factors like the domain for which it is defined, existing DSLs for that domain etc. Non-OODSLs are domain specific languages that do not necessarily embrace object oriented concepts like abstraction, polymorphism etc. OODSLs can be suited well for some situations whereas other situations, it might be an overkill. Defining a new OODSL when there is an already widely accepted non-OODSL may not be very useful. For example, HTML is the standard method for displaying web pages and it is non-OODSL. Defining a new non-OODSL that replaces HTML may not prove to be significantly advantageous.&lt;br /&gt;
&lt;br /&gt;
== Advantages and Disadvantages ==&lt;br /&gt;
Some of the advantages of OODSLs would be:&lt;br /&gt;
* Since OODSLs, by their name, are object oriented, they give the developer an easier alternative to model their applications based on business goals and real world.&lt;br /&gt;
* Because of their object oriented nature, the code is generally simple to understand and therefore code maintenance would be easier in OODSLs than non-OODSLs.&lt;br /&gt;
* Object oriented concepts like encapsulation and abstraction give the code better security when they are modified in the future.&lt;br /&gt;
&lt;br /&gt;
Though OODSLs in general have several advantages over other languages, one can also consider their disadvantages:&lt;br /&gt;
* Defining an object oriented language in general takes more time than defining a normal language because we have to properly define it to include OO concepts.&lt;br /&gt;
* They may not be well-suited for all domains and environments. Sometimes there may be a simpler non-OODSL way to achieve the task.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Varjun2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch1_1w9_av&amp;diff=64684</id>
		<title>CSC/ECE 517 Fall 2012/ch1 1w9 av</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch1_1w9_av&amp;diff=64684"/>
		<updated>2012-09-14T23:07:34Z</updated>

		<summary type="html">&lt;p&gt;Varjun2: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Object-Oriented Domain-Specific Languages (OODSL)'''&lt;br /&gt;
&amp;lt;p&amp;gt;An OODSL is a [http://en.wikipedia.org/wiki/Domain-specific_language&amp;lt;code&amp;gt;Domain-specific language&amp;lt;/code&amp;gt;] (DSL) that exhibits characteristics that have traditionally been attributed to [http://en.wikipedia.org/wiki/Object-oriented_programming#OOP_languages&amp;lt;code&amp;gt;Object-Oriented Languages&amp;lt;/code&amp;gt;] &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Although OO languages and Domain specific languages have been around for several years, OODSLs are relatively new.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
OO languages can be either general purpose like C++, Java and Ruby, or domain specific, like Jquery and Kiddo. The following example shows how the two kinds of languages would work if used in the real world.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''The General Purpose Programming way of ordering hash browns at Waffle House'''&lt;br /&gt;
&lt;br /&gt;
Harvest the potato, wash it, and chop it into little pieces. Put the pieces in a pan with oil and fry till they turn golden brown, and then drain the oil away and put them on a plate. Now cut some jalapeno peppers and spread on the potatoes. Then add cheese, which you can get by milking a cow and..... &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''The OODSL way of ordering hash browns at Waffle House'''&lt;br /&gt;
&lt;br /&gt;
I would like it Scattered, Smothered, and Peppered please. Thanks!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For a person who works at Waffle House, or goes there regularly to eat, it is a no brainer that the second method is much more efficient. OODSLs take advantage of the context within which communication takes place. By using implicitly understood jargon, the task at hand can be accomplished in a way that is easier to comprehend for a specialized type of user.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
OODSLs can be of 2 types:&lt;br /&gt;
&lt;br /&gt;
* Internal&lt;br /&gt;
* External&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Internal OODSLs are languages that are built on top of existing languages. An internal OODSL makes use of the host language syntax to provide the feel of a domain specific language. It is not universally defined as to when a language/library becomes an OODSL. JQuery is one such example. It is a JavaScript library, which offers an easy way to perform functions like element selection. It can also be argued that JavaScript itself is a domain specific language. This page is more an attempt to bring out the shades of grey that accompany OODSLs than it is to define it.&lt;br /&gt;
&lt;br /&gt;
External OODSLs are those that are built from scratch. With the current technology, it is far more easy to churn out several internal OODSLs than to build one from scratch. External OODSLs have their own syntax, as well as their own methods of compilation/interpretation.&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
OODSLs cannot be spoken about without first a brief introduction to Domain Specific Languages and the Object-Oriented programming paradigm. &lt;br /&gt;
&lt;br /&gt;
In a nutshell, DSL is a language that is specific to a particular domain. DSLs are different from general purpose programming languages like C++ and Java. They take advantage of the fact that there are groups of users who rather than communicating every single thing, are able to implicitly understand certain terms and notations. This makes communication much more efficient for such a group. Eg: 2 basketball fans will talk in basketball jargon. Not everyone will understand what zone defence, 3 pointers and jump ball mean. The jargon serves the specific purpose of easing communication between 2 basketball fans. Some would argue that DSLs have been around for a far longer time dating back to even before the advent of computers. Subway maps, electronics circuit diagrams all demonstrate properties of a DSL. Since then, DSLs have come a long way. Domain Specific Languages (DSLs), as they are spoken about now, have been around since the 1970's and their origin can be traced back to a tool called Draco.  Since Draco, computers have made it possible to design a whole host of other useful DSLs. Some of the more popular ones among them are SQL, Prolog, Verilog, HTML etc.&lt;br /&gt;
&lt;br /&gt;
Object-Oriented Programming (OO) is a programming paradigm that tries to apply real world principles to make programming easier. OO has been around since the 1950's. Starting with Simula and Smalltalk, OO languages have come a long way since then, and has grown to become one of the most popular programming paradigms employed worldwide. Some of the modern object oriented languages include static languages like C++, Java, C#, and dynamic languages like Perl, Ruby etc.&lt;br /&gt;
&lt;br /&gt;
OODSLs, that bring out the features of both DSLs as well as OO languages are a fairly recent invention. OODSLs have been around since the 1980's/1990's. They are now primarily used in the realm of web development, game development, and are also used in certain specialized industries like music.&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
=== PHP ===&lt;br /&gt;
[http://en.wikipedia.org/wiki/PHP&amp;lt;code&amp;gt;PHP&amp;lt;/code&amp;gt;] is an OODSL that is commonly used for web development. It is an open source web development framework that is designed to make web development simpler and easier. The language can also be perceived as a general purpose language, but it also has domain specific components designed for the web domain alone. PHP is in general embedded into HTML to perform server side computations before the page is being sent to the client.&lt;br /&gt;
&lt;br /&gt;
=== OODSL compiler for FPGA ===&lt;br /&gt;
An object oriented domain specific compiler was developed for programming Field Programmable Gate Arrays.&amp;lt;ref&amp;gt;Object-Oriented Domain Specific Compilers for Programming FPGAs[http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&amp;amp;arnumber=920835&amp;amp;userType=inst&amp;amp;tag=1]&amp;lt;/ref&amp;gt; The compiler allows the hardware programmer to make use of object-oriented style while programming. The research paper claims that this way of programming the hardware reduces the design time several times and still result in an optimal performance.&lt;br /&gt;
&lt;br /&gt;
== Tools for Creating OODSL ==&lt;br /&gt;
When creating an OODSL, one can either choose to start from the scratch or use a tool that is already available to create the language. Creating a language from the scratch gives flexibility to the programmer to define it the way he wants to but it takes a lot of time. In general, some tools are used to create Domain Specific Languages. This is because it not only saves time but also helps to make the language easy to use.&lt;br /&gt;
=== Boo ===&lt;br /&gt;
Boo&amp;lt;ref&amp;gt;Boo Home[http://boo.codehaus.org/Home]&amp;lt;/ref&amp;gt; is an open source object oriented language to create Domain Specific languages. Defining basic data structures like array, hash, variables etc are inherently supported in Boo and it makes creation of them easier. Although Boo is a statically typed language, these restrictions can be bent once in a while so that the type of objects can be found and manipulated in run time as well ([http://en.wikipedia.org/wiki/Duck_typing &amp;lt;code&amp;gt;Duck typing&amp;lt;/code&amp;gt;]).&lt;br /&gt;
&lt;br /&gt;
=== Visual Studio ===&lt;br /&gt;
Visual Studio has Domain-specific language tools that are designed to help the designer to build a language focusing on the language grammar and characteristics rather than internal details of the compiler.&amp;lt;ref&amp;gt;Domain specific development[http://www.domainspecificdevelopment.com/]&amp;lt;/ref&amp;gt; The tool shows visual tools that helps focus on the business requirements of the OODSL rather than worrying about the internals of its working.&lt;br /&gt;
=== Groovy ===&lt;br /&gt;
Groovy &amp;lt;ref&amp;gt;Groovy Home[http://groovy.codehaus.org/]&amp;lt;/ref&amp;gt; is a dynamic language for the Java Virtual Machine. Also, the syntax is groovy is similar to that of Java making designing of new DSLs easier and similar to programming in Java.&lt;br /&gt;
&lt;br /&gt;
== OODSL vs. non-OODSL ==&lt;br /&gt;
When defining a DSL, choosing whether to go with a OODSL or a non-OODSL depends on several factors like the domain for which it is defined, existing DSLs for that domain etc. Non-OODSLs are domain specific languages that do not necessarily embrace object oriented concepts like abstraction, polymorphism etc. OODSLs can be suited well for some situations whereas other situations, it might be an overkill. Defining a new OODSL when there is an already widely accepted non-OODSL may not be very useful. For example, HTML is the standard method for displaying web pages and it is non-OODSL. Defining a new non-OODSL that replaces HTML may not prove to be significantly advantageous.&lt;br /&gt;
&lt;br /&gt;
== Advantages and Disadvantages ==&lt;br /&gt;
Some of the advantages of OODSLs would be:&lt;br /&gt;
* Since OODSLs, by their name, are object oriented, they give the developer an easier alternative to model their applications based on business goals and real world.&lt;br /&gt;
* Because of their object oriented nature, the code is generally simple to understand and therefore code maintenance would be easier in OODSLs than non-OODSLs.&lt;br /&gt;
* Object oriented concepts like encapsulation and abstraction give the code better security when they are modified in the future.&lt;br /&gt;
&lt;br /&gt;
Though OODSLs in general have several advantages over other languages, one can also consider their disadvantages:&lt;br /&gt;
* Defining an object oriented language in general takes more time than defining a normal language because we have to properly define it to include OO concepts.&lt;br /&gt;
* They may not be well-suited for all domains and environments. Sometimes there may be a simpler non-OODSL way to achieve the task.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Varjun2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch1_1w9_av&amp;diff=64661</id>
		<title>CSC/ECE 517 Fall 2012/ch1 1w9 av</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch1_1w9_av&amp;diff=64661"/>
		<updated>2012-09-14T22:58:31Z</updated>

		<summary type="html">&lt;p&gt;Varjun2: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;p&amp;gt;An OODSL is a [http://en.wikipedia.org/wiki/Domain-specific_language&amp;lt;code&amp;gt;Domain-specific language&amp;lt;/code&amp;gt;] (DSL) that exhibits characteristics that have traditionally been attributed to [http://en.wikipedia.org/wiki/Object-oriented_programming#OOP_languages&amp;lt;code&amp;gt;Object-Oriented Languages&amp;lt;/code&amp;gt;] &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Although OOP languages and Domain specific languages have been around for several years, OODSLs are relatively new.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
OO languages can be either general purpose like C++, Java and Ruby, or domain specific, like Jquery and Kiddo. The following example shows how the two kinds of languages would work if used in the real world.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''The General Purpose Programming way of ordering hash browns at Waffle House'''&lt;br /&gt;
&lt;br /&gt;
Harvest the potato, wash it, and chop it into little pieces. Put the pieces in a pan with oil and fry till they turn golden brown, and then drain the oil away and put them on a plate. Now cut some jalapeno peppers and spread on the potatoes. Then add cheese, which you can get by milking a cow and..... &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''The OODSL way of ordering hash browns at Waffle House'''&lt;br /&gt;
&lt;br /&gt;
I would like it Scattered, Smothered, and Peppered please. Thanks!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For a person who works at Waffle House, or goes there regularly to eat, it is a no brainer that the second method is much more efficient. OODSLs take advantage of the context within which communication takes place. By using implicitly understood jargon, the task at hand can be accomplished in a way that is easier to comprehend for a specialized type of user.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
OODSLs can be of 2 types:&lt;br /&gt;
&lt;br /&gt;
* Internal&lt;br /&gt;
* External&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Internal OODSLs are languages that are built on top of existing languages. An internal OODSL makes use of the host language syntax to provide the feel of a domain specific language. It is not universally defined as to when a language/library becomes an OODSL. JQuery is one such example. It is a JavaScript library, which offers an easy way to perform functions like element selection. It can also be argued that JavaScript itself is a domain specific language. This page is more an attempt to bring out the shades of grey that accompany OODSLs than it is to define it.&lt;br /&gt;
&lt;br /&gt;
External OODSLs are those that are built from scratch. With the current technology, it is far more easy to churn out several internal OODSLs than to build one from scratch. External OODSLs have their own syntax, as well as their own methods of compilation/interpretation.&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
OODSLs cannot be spoken about without first a brief introduction to Domain Specific Languages and the Object-Oriented programming paradigm. &lt;br /&gt;
&lt;br /&gt;
In a nutshell, DSL is a language that is specific to a particular domain. DSLs are different from general purpose programming languages like C++ and Java. They take advantage of the fact that there are groups of users who rather than communicating every single thing, are able to implicitly understand certain terms and notations. This makes communication much more efficient for such a group. Eg: 2 basketball fans will talk in basketball jargon. Not everyone will understand what zone defence, 3 pointers and jump ball mean. The jargon serves the specific purpose of easing communication between 2 basketball fans. Some would argue that DSLs have been around for a far longer time dating back to even before the advent of computers. Subway maps, electronics circuit diagrams all demonstrate properties of a DSL. Since then, DSLs have come a long way. Domain Specific Languages (DSLs), as they are spoken about now, have been around since the 1970's and their origin can be traced back to a tool called Draco.  Since Draco, computers have made it possible to design a whole host of other useful DSLs. Some of the more popular ones among them are SQL, Prolog, Verilog, HTML etc.&lt;br /&gt;
&lt;br /&gt;
Object-Oriented Programming (OOP) is a programming paradigm that tries to apply real world principles to make programming easier. OOP has been around since the 1950's. Starting with Simula and Smalltalk, OOP languages have come a long way since then, and has grown to become one of the most popular programming paradigms employed worldwide. Some of the modern object oriented languages include static languages like C++, Java, C#, and dynamic languages like Perl, Ruby etc.&lt;br /&gt;
&lt;br /&gt;
OODSLs, that bring out the features of both DSLs as well as OOP languages are a fairly recent invention. OODSLs have been around since the 1980's/1990's. They are now primarily used in the realm of web development, game development, and are also used in certain specialized industries like music.&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
=== PHP ===&lt;br /&gt;
[http://en.wikipedia.org/wiki/PHP&amp;lt;code&amp;gt;PHP&amp;lt;/code&amp;gt;] is an OODSL that is commonly used for web development. It is an open source web development framework that is designed to make web development simpler and easier. The language can also be perceived as a general purpose language, but it also has domain specific components designed for the web domain alone. PHP is in general embedded into HTML to perform server side computations before the page is being sent to the client.&lt;br /&gt;
&lt;br /&gt;
=== OODSL compiler for FPGA ===&lt;br /&gt;
An object oriented domain specific compiler was developed for programming Field Programmable Gate Arrays.&amp;lt;ref&amp;gt;Object-Oriented Domain Specific Compilers for Programming FPGAs[http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&amp;amp;arnumber=920835&amp;amp;userType=inst&amp;amp;tag=1]&amp;lt;/ref&amp;gt; The compiler allows the hardware programmer to make use of object-oriented style while programming. The research paper claims that this way of programming the hardware reduces the design time several times and still result in an optimal performance.&lt;br /&gt;
&lt;br /&gt;
== Tools for Creating OODSL ==&lt;br /&gt;
When creating an OODSL, one can either choose to start from the scratch or use a tool that is already available to create the language. Creating a language from the scratch gives flexibility to the programmer to define it the way he wants to but it takes a lot of time. In general, some tools are used to create Domain Specific Languages. This is because it not only saves time but also helps to make the language easy to use.&lt;br /&gt;
=== Boo ===&lt;br /&gt;
Boo&amp;lt;ref&amp;gt;Boo Home[http://boo.codehaus.org/Home]&amp;lt;/ref&amp;gt; is an open source object oriented language to create Domain Specific languages. Defining basic data structures like array, hash, variables etc are inherently supported in Boo and it makes creation of them easier. Although Boo is a statically typed language, these restrictions can be bent once in a while so that the type of objects can be found and manipulated in run time as well ([http://en.wikipedia.org/wiki/Duck_typing &amp;lt;code&amp;gt;Duck typing&amp;lt;/code&amp;gt;]).&lt;br /&gt;
&lt;br /&gt;
=== Visual Studio ===&lt;br /&gt;
Visual Studio has Domain-specific language tools that are designed to help the designer to build a language focusing on the language grammar and characteristics rather than internal details of the compiler.&amp;lt;ref&amp;gt;Domain specific development[http://www.domainspecificdevelopment.com/]&amp;lt;/ref&amp;gt; The tool shows visual tools that helps focus on the business requirements of the OODSL rather than worrying about the internals of its working.&lt;br /&gt;
=== Groovy ===&lt;br /&gt;
Groovy &amp;lt;ref&amp;gt;Groovy Home[http://groovy.codehaus.org/]&amp;lt;/ref&amp;gt; is a dynamic language for the Java Virtual Machine. Also, the syntax is groovy is similar to that of Java making designing of new DSLs easier and similar to programming in Java.&lt;br /&gt;
&lt;br /&gt;
== OODSL vs. non-OODSL ==&lt;br /&gt;
When defining a DSL, choosing whether to go with a OODSL or a non-OODSL depends on several factors like the domain for which it is defined, existing DSLs for that domain etc. Non-OODSLs are domain specific languages that do not necessarily embrace object oriented concepts like abstraction, polymorphism etc. OODSLs can be suited well for some situations whereas other situations, it might be an overkill. Defining a new OODSL when there is an already widely accepted non-OODSL may not be very useful. For example, HTML is the standard method for displaying web pages and it is non-OODSL. Defining a new non-OODSL that replaces HTML may not prove to be significantly advantageous.&lt;br /&gt;
&lt;br /&gt;
== Advantages and Disadvantages ==&lt;br /&gt;
Some of the advantages of OODSLs would be:&lt;br /&gt;
* Since OODSLs, by their name, are object oriented, they give the developer an easier alternative to model their applications based on business goals and real world.&lt;br /&gt;
* Because of their object oriented nature, the code is generally simple to understand and therefore code maintenance would be easier in OODSLs than non-OODSLs.&lt;br /&gt;
* Object oriented concepts like encapsulation and abstraction give the code better security when they are modified in the future.&lt;br /&gt;
&lt;br /&gt;
Though OODSLs in general have several advantages over other languages, one can also consider their disadvantages:&lt;br /&gt;
* Defining an object oriented language in general takes more time than defining a normal language because we have to properly define it to include OO concepts.&lt;br /&gt;
* They may not be well-suited for all domains and environments. Sometimes there may be a simpler non-OODSL way to achieve the task.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Varjun2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch1_1w9_av&amp;diff=64652</id>
		<title>CSC/ECE 517 Fall 2012/ch1 1w9 av</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch1_1w9_av&amp;diff=64652"/>
		<updated>2012-09-14T22:51:13Z</updated>

		<summary type="html">&lt;p&gt;Varjun2: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;p&amp;gt;An OODSL is a [http://en.wikipedia.org/wiki/Domain-specific_language&amp;lt;code&amp;gt;Domain-specific language&amp;lt;/code&amp;gt;] (DSL) that exhibits characteristics that have traditionally been attributed to [http://en.wikipedia.org/wiki/Object-oriented_programming#OOP_languages&amp;lt;code&amp;gt;Object-Oriented Languages&amp;lt;/code&amp;gt;] &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Although OOP languages and Domain specific languages have been around for several years, OODSLs are relatively new.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
OO languages can be either general purpose like C++, Java and Ruby, or domain specific, like Jquery and Kiddo. The following example shows how the two kinds of languages would work if used in the real world.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''The General Purpose Programming way of ordering hash browns at Waffle House'''&lt;br /&gt;
&lt;br /&gt;
Harvest the potato, wash it, and chop it into little pieces. Put the pieces in a pan with oil and fry till they turn golden brown, and then drain the oil away and put them on a plate. Now cut some jalapeno peppers and spread on the potatoes. Then add cheese, which you can get by milking a cow and..... &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''The OODSL way of ordering hash browns at Waffle House'''&lt;br /&gt;
&lt;br /&gt;
I would like it Scattered, Smothered, and Peppered please. Thanks!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For a person who works at Waffle House, or goes there regularly to eat, it is a no brainer that the second method is much more efficient. OODSLs take advantage of the context within which communication takes place. By using implicitly understood jargon, the task at hand can be accomplished in a way that is easier to comprehend for a specialized type of user.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
OODSLs can be of 2 types:&lt;br /&gt;
&lt;br /&gt;
* Internal&lt;br /&gt;
* External&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Internal OODSLs are languages that are built on top of existing languages. An internal OODSL makes use of the host language syntax to provide the feel of a domain specific language. It is not universally defined as to when a language/library becomes an OODSL. JQuery is one such example. It is a JavaScript library, which offers an easy way to perform functions like element selection. It can also be argued that JavaScript itself is a domain specific language. This page is more an attempt to bring out the shades of grey that accompany OODSLs than it is to define it.&lt;br /&gt;
&lt;br /&gt;
External OODSLs are those that are built from scratch. With the current technology, it is far more easy to churn out several internal OODSLs than to build one from scratch. External OODSLs have their own syntax, as well as their own methods of compilation/interpretation.&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
OODSLs cannot be spoken about without first a brief introduction to Domain Specific Languages and the Object-Oriented programming paradigm. &lt;br /&gt;
&lt;br /&gt;
In a nutshell, DSL is a language that is specific to a particular domain. DSLs are different from general purpose programming languages like C++ and Java. They take advantage of the fact that there are groups of users who rather than communicating every single thing, are able to implicitly understand certain terms and notations. This makes communication much more efficient for such a group. Eg: 2 basketball fans will talk in basketball jargon. Not everyone will understand what zone defence, 3 pointers and jump ball mean. The jargon serves the specific purpose of easing communication between 2 basketball fans. Some would argue that DSLs have been around for a far longer time dating back to even before the advent of computers. Subway maps, electronics circuit diagrams all demonstrate properties of a DSL. Since then, DSLs have come a long way. Domain Specific Languages (DSLs), as they are spoken about now, have been around since the 1970's and their origin can be traced back to a tool called Draco.  Since Draco, computers have made it possible to design a whole host of other useful DSLs. Some of the more popular ones among them are SQL, Prolog, Verilog, HTML etc.&lt;br /&gt;
&lt;br /&gt;
Object-Oriented Programming (OOP) is a programming paradigm that tries to apply real world principles to make programming easier. OOP has been around since the 1950's. Starting with Simula and Smalltalk, OOP languages have come a long way since then, and has grown to become one of the most popular programming paradigms employed worldwide. Some of the modern object oriented languages include static languages like C++, Java, C#, and dynamic languages like Perl, Ruby etc.&lt;br /&gt;
&lt;br /&gt;
OODSLs, that bring out the features of both DSLs as well as OOP languages are a fairly recent invention. OODSLs have been around since the 1980's/1990's. They are now primarily used in the realm of web development, game development, and are also used in certain specialized industries like music.&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
=== PHP ===&lt;br /&gt;
[http://en.wikipedia.org/wiki/PHP&amp;lt;code&amp;gt;PHP&amp;lt;/code&amp;gt;] is an OODSL that is commonly used for web development. It is an open source web development framework that is designed to make web development simpler and easier. The language can also be perceived as a general purpose language, but it also has domain specific components designed for the web domain alone. PHP is in general embedded into HTML to perform server side computations before the page is being sent to the client.&lt;br /&gt;
&lt;br /&gt;
=== OODSL compiler for FPGA ===&lt;br /&gt;
An object oriented domain specific compiler was developed for programming Field Programmable Gate Arrays.&amp;lt;ref&amp;gt;Object-Oriented Domain Specific Compilers for Programming FPGAs[http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&amp;amp;arnumber=920835&amp;amp;userType=inst&amp;amp;tag=1]&amp;lt;/ref&amp;gt; The compiler allows the hardware programmer to make use of object-oriented style while programming. The research paper claims that this way of programming the hardware reduces the design time several times and still result in an optimal performance.&lt;br /&gt;
&lt;br /&gt;
== Tools for Creating OODSL ==&lt;br /&gt;
When creating an OODSL, one can either choose to start from the scratch or use a tool that is already available to create the language. Creating a language from the scratch gives flexibility to the programmer to define it the way he wants to but it takes a lot of time. In general, some tools are used to create Domain Specific Languages. This is because it not only saves time but also helps to make the language easy to use.&lt;br /&gt;
=== Boo ===&lt;br /&gt;
Boo&amp;lt;ref&amp;gt;Boo Home[http://boo.codehaus.org/Home]&amp;lt;/ref&amp;gt; is an open source object oriented language to create Domain Specific languages. Defining basic data structures like array, hash, variables etc are inherently supported in Boo and it makes creation of them easier. Although Boo is a statically typed language, these restrictions can be bent once in a while so that the type of objects can be found and manipulated in run time as well ([http://en.wikipedia.org/wiki/Duck_typing &amp;lt;code&amp;gt;Duck typing&amp;lt;/code&amp;gt;]).&lt;br /&gt;
&lt;br /&gt;
=== Visual Studio ===&lt;br /&gt;
Visual Studio has Domain-specific language tools that are designed to help the designer to build a language focusing on the language grammar and characteristics rather than internal details of the compiler.&amp;lt;ref&amp;gt;Domain specific development[http://www.domainspecificdevelopment.com/]&amp;lt;/ref&amp;gt; The tool shows visual tools that helps focus on the business requirements of the OODSL rather than worrying about the internals of its working.&lt;br /&gt;
=== Groovy ===&lt;br /&gt;
Groovy &amp;lt;ref&amp;gt;Groovy Home[http://groovy.codehaus.org/]&amp;lt;/ref&amp;gt; is a dynamic language for the Java Virtual Machine. Also, the syntax is groovy is similar to that of Java making designing of new DSLs easier and similar to programming in Java.&lt;br /&gt;
&lt;br /&gt;
== OODSL vs. non-OODSL ==&lt;br /&gt;
When defining a DSL, choosing whether to go with a OODSL or a non-OODSL depends on several factors like the domain for which it is defined, existing DSLs for that domain etc. OODSLs can be suited well for some situations whereas on some situations, it may be an overkill. Defining a new OODSL when there is an already widely accepted non-OODSL may not be very useful. For example, HTML is the standard method for displaying web pages and it is a non-OODSL. Defining a new non-OODSL that replaces HTML may not prove to be significantly advantageous.&lt;br /&gt;
&lt;br /&gt;
== Advantages and Disadvantages ==&lt;br /&gt;
Some of the advantages of OODSLs would be:&lt;br /&gt;
* Since OODSLs, by their name, are object oriented, they give the developer an easier alternative to model their applications based on business goals and real world.&lt;br /&gt;
* Because of their object oriented nature, the code is generally simple to understand and therefore code maintenance would be easier in OODSLs than non-OODSLs.&lt;br /&gt;
* &lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Varjun2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch1_1w9_av&amp;diff=64641</id>
		<title>CSC/ECE 517 Fall 2012/ch1 1w9 av</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch1_1w9_av&amp;diff=64641"/>
		<updated>2012-09-14T22:41:15Z</updated>

		<summary type="html">&lt;p&gt;Varjun2: /* Overview */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;p&amp;gt;An OODSL is a [http://en.wikipedia.org/wiki/Domain-specific_language&amp;lt;code&amp;gt;Domain-specific language&amp;lt;/code&amp;gt;] (DSL) that exhibits characteristics that have traditionally been attributed to [http://en.wikipedia.org/wiki/Object-oriented_programming#OOP_languages&amp;lt;code&amp;gt;Object-Oriented Languages&amp;lt;/code&amp;gt;] &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Although OOP languages and Domain specific languages have been around for several years, OODSLs are relatively new.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
'''The General Purpose Programming way of ordering hash browns at Waffle House'''&lt;br /&gt;
&lt;br /&gt;
Harvest the potato, wash it, and chop it into little pieces. Put the pieces in a pan with oil and fry till they turn golden brown, and then drain the oil away and put them on a plate. Now cut some jalapeno peppers and spread on the potatoes. Then add cheese, which you can get by milking a cow and..... &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''The OODSL way of ordering hash browns at Waffle House'''&lt;br /&gt;
&lt;br /&gt;
I would like it Scattered, Smothered, and Peppered please. Thanks!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For a person who works at Waffle House, or goes there regularly to eat, it is a no brainer that the second method is much more efficient. OODSLs take advantage of the context within which communication takes place. By using implicitly understood jargon, the task at hand can be accomplished in a way that is easier to comprehend for a specialized type of user.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
OODSLs can be of 2 types:&lt;br /&gt;
&lt;br /&gt;
* Internal&lt;br /&gt;
* External&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Internal OODSLs are languages that are built on top of existing languages. An internal OODSL makes use of the host language syntax to provide the feel of a domain specific language. It is not universally defined as to when a language/library becomes an OODSL. JQuery is one such example. It is a JavaScript library, which offers an easy way to perform functions like element selection. It can also be argued that JavaScript itself is a domain specific language. This page is more an attempt to bring out the shades of grey that accompany OODSLs than it is to define it.&lt;br /&gt;
&lt;br /&gt;
External OODSLs are those that are built from scratch. With the current technology, it is far more easy to churn out several internal OODSLs than to build one from scratch. External OODSLs have their own syntax, as well as their own methods of compilation/interpretation.&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
OODSLs cannot be spoken about without first a brief introduction to Domain Specific Languages and the Object-Oriented programming paradigm. &lt;br /&gt;
&lt;br /&gt;
In a nutshell, DSL is a language that is specific to a particular domain. DSLs are different from general purpose programming languages like C++ and Java. They take advantage of the fact that there are groups of users who rather than communicating every single thing, are able to implicitly understand certain terms and notations. This makes communication much more efficient for such a group. Eg: 2 basketball fans will talk in basketball jargon. Not everyone will understand what zone defence, 3 pointers and jump ball mean. The jargon serves the specific purpose of easing communication between 2 basketball fans. Some would argue that DSLs have been around for a far longer time dating back to even before the advent of computers. Subway maps, electronics circuit diagrams all demonstrate properties of a DSL. Since then, DSLs have come a long way. Domain Specific Languages (DSLs), as they are spoken about now, have been around since the 1970's and their origin can be traced back to a tool called Draco.  Since Draco, computers have made it possible to design a whole host of other useful DSLs. Some of the more popular ones among them are SQL, Prolog, Verilog, HTML etc.&lt;br /&gt;
&lt;br /&gt;
Object-Oriented Programming (OOP) is a programming paradigm that tries to apply real world principles to make programming easier. OOP has been around since the 1950's. Starting with Simula and Smalltalk, OOP languages have come a long way since then, and has grown to become one of the most popular programming paradigms employed worldwide. Some of the modern object oriented languages include static languages like C++, Java, C#, and dynamic languages like Perl, Ruby etc.&lt;br /&gt;
&lt;br /&gt;
OODSLs, that bring out the features of both DSLs as well as OOP languages are a fairly recent invention. OODSLs have been around since the 1980's/1990's. They are now primarily used in the realm of web development, game development, and are also used in certain specialized industries like music.&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
=== PHP ===&lt;br /&gt;
[http://en.wikipedia.org/wiki/PHP&amp;lt;code&amp;gt;PHP&amp;lt;/code&amp;gt;] is an OODSL that is commonly used for web development. It is an open source web development framework that is designed to make web development simpler and easier. The language can also be perceived as a general purpose language, but it also has domain specific components designed for the web domain alone. PHP is in general embedded into HTML to perform server side computations before the page is being sent to the client.&lt;br /&gt;
&lt;br /&gt;
=== OODSL compiler for FPGA ===&lt;br /&gt;
An object oriented domain specific compiler was developed for programming Field Programmable Gate Arrays.&amp;lt;ref&amp;gt;Object-Oriented Domain Specific Compilers for Programming FPGAs[http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&amp;amp;arnumber=920835&amp;amp;userType=inst&amp;amp;tag=1]&amp;lt;/ref&amp;gt; The compiler allows the hardware programmer to make use of object-oriented style while programming. The research paper claims that this way of programming the hardware reduces the design time several times and still result in an optimal performance.&lt;br /&gt;
&lt;br /&gt;
== Tools for Creating OODSL ==&lt;br /&gt;
When creating an OODSL, one can either choose to scratch from the scratch or use a tool that is already available to create the language. Creating a language from the scratch gives flexibility to the programmer to define it the way he wants to but it takes a lot of time. In general, some tools are used to create Domain Specific Languages. This is because it not only saves time but also helps to make the language easy to use.&lt;br /&gt;
=== Boo ===&lt;br /&gt;
Boo&amp;lt;ref&amp;gt;Boo Home[http://boo.codehaus.org/Home]&amp;lt;/ref&amp;gt; is an open source object oriented language to create Domain Specific languages. Defining basic data structures like array, hash, variables etc are inherently supported in Boo and it makes creation of them easier. Although Boo is a statically typed language, these restrictions can be bent once in a while so that the type of objects can be found and manipulated in run time as well ([http://en.wikipedia.org/wiki/Duck_typing &amp;lt;code&amp;gt;Duck typing&amp;lt;/code&amp;gt;]).&lt;br /&gt;
&lt;br /&gt;
=== Visual Studio ===&lt;br /&gt;
Visual Studio has Domain-specific language tools that are designed to help the designer to build a language focusing on the language grammar and characteristics rather than internal details of the compiler.&amp;lt;ref&amp;gt;Domain specific development[http://www.domainspecificdevelopment.com/]&amp;lt;/ref&amp;gt; The tool shows visual tools that helps focus on the business requirements of the OODSL rather than worrying about the internals of its working.&lt;br /&gt;
=== Groovy ===&lt;br /&gt;
Groovy &amp;lt;ref&amp;gt;Groovy Home[http://groovy.codehaus.org/]&amp;lt;/ref&amp;gt; is a dynamic language for the Java Virtual Machine. Also, the syntax is groovy is similar to that of Java making designing of new DSLs easier and similar to programming in Java.&lt;br /&gt;
&lt;br /&gt;
== OODSL vs. non-OODSL ==&lt;br /&gt;
When defining a DSL, choosing whether to go with a OODSL or a non-OODSL depends on several factors like the domain for which it is defined, existing DSLs for that domain etc. OODSLs can be suited well for some situations whereas on some situations, it may be an overkill. Defining a new OODSL when there is an already widely accepted non-OODSL may not be very useful. For example, HTML is the standard method for displaying web pages and it is a non-OODSL. Defining a new non-OODSL that replaces HTML may not prove to be significantly advantageous.&lt;br /&gt;
&lt;br /&gt;
== Advantages and Disadvantages ==&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Varjun2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch1_1w9_av&amp;diff=64629</id>
		<title>CSC/ECE 517 Fall 2012/ch1 1w9 av</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch1_1w9_av&amp;diff=64629"/>
		<updated>2012-09-14T22:36:29Z</updated>

		<summary type="html">&lt;p&gt;Varjun2: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;p&amp;gt;An OODSL is a [http://en.wikipedia.org/wiki/Domain-specific_language&amp;lt;code&amp;gt;Domain-specific language&amp;lt;/code&amp;gt;] (DSL) that exhibits characteristics that have traditionally been attributed to [http://en.wikipedia.org/wiki/Object-oriented_programming#OOP_languages&amp;lt;code&amp;gt;Object-Oriented Languages&amp;lt;/code&amp;gt;] &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Although OOP languages and Domain specific languages have been around for several years, OODSLs are relatively new.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
'''The General Purpose Programming way of ordering hash browns at Waffle House'''&lt;br /&gt;
&lt;br /&gt;
Harvest the potato, wash it, and chop it into little pieces. Put the pieces in a pan with oil and fry till they turn golden brown, and then drain the oil away and put them on a plate. Then add cheese, which you can get by milking a cow and..... &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''The OODSL way of ordering hash browns at Waffle House'''&lt;br /&gt;
&lt;br /&gt;
Scattered, Smothered, and Covered&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For a person who works at Waffle House, or goes there regularly to eat, it is a no brainer that the second method is much more efficient. OODSLs take advantage of the context within which communication takes place. By using implicitly understood jargon, the task at hand can be accomplished in a way that is easier to comprehend for a specialized type of user.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
OODSLs can be of 2 types:&lt;br /&gt;
&lt;br /&gt;
* Internal&lt;br /&gt;
* External&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Internal OODSLs are languages that are built on top of existing languages. An internal OODSL makes use of the host language syntax to provide the feel of a domain specific language. It is not universally defined as to when a language/library becomes an OODSL. JQuery is one such example. It is a JavaScript library, which offers an easy way to perform functions like element selection. It can also be argued that JavaScript itself is a domain specific language. This page is more an attempt to bring out the shades of grey that accompany OODSLs than it is to define it.&lt;br /&gt;
&lt;br /&gt;
External OODSLs are those that are built from scratch. With the current technology, it is far more easy to churn out several internal OODSLs than to build one from scratch. External OODSLs have their own syntax, as well as their own methods of compilation/interpretation. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
OODSLs cannot be spoken about without first a brief introduction to Domain Specific Languages and the Object-Oriented programming paradigm. &lt;br /&gt;
&lt;br /&gt;
In a nutshell, DSL is a language that is specific to a particular domain. DSLs are different from general purpose programming languages like C++ and Java. They take advantage of the fact that there are groups of users who rather than communicating every single thing, are able to implicitly understand certain terms and notations. This makes communication much more efficient for such a group. Eg: 2 basketball fans will talk in basketball jargon. Not everyone will understand what zone defence, 3 pointers and jump ball mean. The jargon serves the specific purpose of easing communication between 2 basketball fans. Some would argue that DSLs have been around for a far longer time dating back to even before the advent of computers. Subway maps, electronics circuit diagrams all demonstrate properties of a DSL. Since then, DSLs have come a long way. Domain Specific Languages (DSLs), as they are spoken about now, have been around since the 1970's and their origin can be traced back to a tool called Draco.  Since Draco, computers have made it possible to design a whole host of other useful DSLs. Some of the more popular ones among them are SQL, Prolog, Verilog, HTML etc.&lt;br /&gt;
&lt;br /&gt;
Object-Oriented Programming (OOP) is a programming paradigm that tries to apply real world principles to make programming easier. OOP has been around since the 1950's. Starting with Simula and Smalltalk, OOP languages have come a long way since then, and has grown to become one of the most popular programming paradigms employed worldwide. Some of the modern object oriented languages include static languages like C++, Java, C#, and dynamic languages like Perl, Ruby etc.&lt;br /&gt;
&lt;br /&gt;
OODSLs, that bring out the features of both DSLs as well as OOP languages are a fairly recent invention. OODSLs have been around since the 1980's/1990's. They are now primarily used in the realm of web development, game development, and are also used in certain specialized industries like music.&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
=== PHP ===&lt;br /&gt;
[http://en.wikipedia.org/wiki/PHP&amp;lt;code&amp;gt;PHP&amp;lt;/code&amp;gt;] is an OODSL that is commonly used for web development. It is an open source web development framework that is designed to make web development simpler and easier. The language can also be perceived as a general purpose language, but it also has domain specific components designed for the web domain alone. PHP is in general embedded into HTML to perform server side computations before the page is being sent to the client.&lt;br /&gt;
&lt;br /&gt;
=== OODSL compiler for FPGA ===&lt;br /&gt;
An object oriented domain specific compiler was developed for programming Field Programmable Gate Arrays.&amp;lt;ref&amp;gt;Object-Oriented Domain Specific Compilers for Programming FPGAs[http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&amp;amp;arnumber=920835&amp;amp;userType=inst&amp;amp;tag=1]&amp;lt;/ref&amp;gt; The compiler allows the hardware programmer to make use of object-oriented style while programming. The research paper claims that this way of programming the hardware reduces the design time several times and still result in an optimal performance.&lt;br /&gt;
&lt;br /&gt;
== Tools for Creating OODSL ==&lt;br /&gt;
When creating an OODSL, one can either choose to scratch from the scratch or use a tool that is already available to create the language. Creating a language from the scratch gives flexibility to the programmer to define it the way he wants to but it takes a lot of time. In general, some tools are used to create Domain Specific Languages. This is because it not only saves time but also helps to make the language easy to use.&lt;br /&gt;
=== Boo ===&lt;br /&gt;
Boo&amp;lt;ref&amp;gt;Boo Home[http://boo.codehaus.org/Home]&amp;lt;/ref&amp;gt; is an open source object oriented language to create Domain Specific languages. Defining basic data structures like array, hash, variables etc are inherently supported in Boo and it makes creation of them easier. Although Boo is a statically typed language, these restrictions can be bent once in a while so that the type of objects can be found and manipulated in run time as well ([http://en.wikipedia.org/wiki/Duck_typing &amp;lt;code&amp;gt;Duck typing&amp;lt;/code&amp;gt;]).&lt;br /&gt;
&lt;br /&gt;
=== Visual Studio ===&lt;br /&gt;
Visual Studio has Domain-specific language tools that are designed to help the designer to build a language focusing on the language grammar and characteristics rather than internal details of the compiler.&amp;lt;ref&amp;gt;Domain specific development[http://www.domainspecificdevelopment.com/]&amp;lt;/ref&amp;gt; The tool shows visual tools that helps focus on the business requirements of the OODSL rather than worrying about the internals of its working.&lt;br /&gt;
=== Groovy ===&lt;br /&gt;
Groovy &amp;lt;ref&amp;gt;Groovy Home[http://groovy.codehaus.org/]&amp;lt;/ref&amp;gt; is a dynamic language for the Java Virtual Machine. Also, the syntax is groovy is similar to that of Java making designing of new DSLs easier and similar to programming in Java.&lt;br /&gt;
&lt;br /&gt;
== OODSL vs. non-OODSL ==&lt;br /&gt;
When defining a DSL, choosing whether to go with a OODSL or a non-OODSL depends on several factors like the domain for which it is defined, existing DSLs for that domain etc. OODSLs can be suited well for some situations whereas on some situations, it may be an overkill. Defining a new OODSL when there is an already widely accepted non-OODSL may not be very useful. For example, HTML is the standard method for displaying web pages and it is a non-OODSL. Defining a new non-OODSL that replaces HTML may not prove to be significantly advantageous.&lt;br /&gt;
&lt;br /&gt;
== Advantages and Disadvantages ==&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Varjun2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch1_1w9_av&amp;diff=64612</id>
		<title>CSC/ECE 517 Fall 2012/ch1 1w9 av</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch1_1w9_av&amp;diff=64612"/>
		<updated>2012-09-14T22:29:02Z</updated>

		<summary type="html">&lt;p&gt;Varjun2: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;p&amp;gt;An OODSL is a [http://en.wikipedia.org/wiki/Domain-specific_language&amp;lt;code&amp;gt;Domain-specific language&amp;lt;/code&amp;gt;] (DSL) that exhibits characteristics that have traditionally been attributed to [http://en.wikipedia.org/wiki/Object-oriented_programming#OOP_languages&amp;lt;code&amp;gt;Object-Oriented Languages&amp;lt;/code&amp;gt;] &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Although OOP languages and Domain specific languages have been around for several years, OODSLs are relatively new.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
'''The General Purpose Programming way of ordering hash browns at Waffle House'''&lt;br /&gt;
&lt;br /&gt;
Harvest the potato, wash it, and chop it into little pieces. Put the pieces in a pan with oil and fry till they turn golden brown, and then drain the oil away and put them on a plate. Then add cheese, which you can get by milking a cow and..... &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''The OODSL way of ordering hash browns at Waffle House'''&lt;br /&gt;
&lt;br /&gt;
Scattered, smothered, and covered&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For a person who works at Waffle House, or goes there regularly to eat, it is a no brainer that the second method is much more efficient. OODSLs take advantage of the context within which communication takes place. By using implicitly understood jargon, the task at hand can be accomplished in a way that is easier to comprehend for a specialized type of user.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
OODSLs can be of 2 types:&lt;br /&gt;
&lt;br /&gt;
* Internal&lt;br /&gt;
* External&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Internal OODSLs are languages that are built on top of existing languages. An internal OODSL makes use of the host language syntax to provide the feel of a domain specific language. It is not universally defined as to when a language/library becomes an OODSL. JQuery is one such example. It is a JavaScript library, which offers an easy way to perform functions like element selection. It can also be argued that JavaScript itself is a domain specific language. This page is more an attempt to bring out the shades of grey that accompany OODSLs than it is to define it.&lt;br /&gt;
&lt;br /&gt;
External OODSLs are those that are built from scratch. With the current technology, it is far more easy to churn out several internal OODSLs than to build one from scratch. External OODSLs have their own syntax, as well as their own methods of compilation/interpretation. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
OODSLs cannot be spoken about without first a brief introduction to Domain Specific Languages and the Object-Oriented programming paradigm. &lt;br /&gt;
&lt;br /&gt;
In a nutshell, DSL is a language that is specific to a particular domain. DSLs are different from general purpose programming languages like C++ and Java. They take advantage of the fact that there are groups of users who rather than communicating every single thing, are able to implicitly understand certain terms and notations. This makes communication much more efficient for such a group. Eg: 2 basketball fans will talk in basketball jargon. Not everyone will understand what zone defence, 3 pointers and jump ball mean. The jargon serves the specific purpose of easing communication between 2 basketball fans. Some would argue that DSLs have been around for a far longer time dating back to even before the advent of computers. Subway maps, electronics circuit diagrams all demonstrate properties of a DSL. Since then, DSLs have come a long way. Domain Specific Languages (DSLs), as they are spoken about now, have been around since the 1970's and their origin can be traced back to a tool called Draco.  Since Draco, computers have made it possible to design a whole host of other useful DSLs. Some of the more popular ones among them are SQL, Prolog, Verilog, HTML etc.&lt;br /&gt;
&lt;br /&gt;
Object-Oriented Programming (OOP) is a programming paradigm that tries to apply real world principles to make programming easier. OOP has been around since the 1950's. Starting with Simula and Smalltalk, OOP languages have come a long way since then, and has grown to become one of the most popular programming paradigms employed worldwide. Some of the modern object oriented languages include static languages like C++, Java, C#, and dynamic languages like Perl, Ruby etc.&lt;br /&gt;
&lt;br /&gt;
OODSLs, that bring out the features of both DSLs as well as OOP languages are a fairly recent invention. OODSLs have been around since the 1980's/1990's. They are now primarily used in the realm of web development, game development, and are also used in certain specialized industries like music.&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
=== PHP ===&lt;br /&gt;
[http://en.wikipedia.org/wiki/PHP&amp;lt;code&amp;gt;PHP&amp;lt;/code&amp;gt;] is an OODSL that is commonly used for web development. It is an open source web development framework that is designed to make web development simpler and easier. The language can also be perceived as a general purpose language, but it also has domain specific components designed for the web domain alone. PHP is in general embedded into HTML to perform server side computations before the page is being sent to the client.&lt;br /&gt;
&lt;br /&gt;
=== OODSL compiler for FPGA ===&lt;br /&gt;
An object oriented domain specific compiler was developed for programming Field Programmable Gate Arrays.&amp;lt;ref&amp;gt;Object-Oriented Domain Specific Compilers for Programming FPGAs[http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&amp;amp;arnumber=920835&amp;amp;userType=inst&amp;amp;tag=1]&amp;lt;/ref&amp;gt; The compiler allows the hardware programmer to make use of object-oriented style while programming. The research paper claims that this way of programming the hardware reduces the design time several times and still result in an optimal performance.&lt;br /&gt;
&lt;br /&gt;
== Tools for Creating OODSL ==&lt;br /&gt;
When creating an OODSL, one can either choose to scratch from the scratch or use a tool that is already available to create the language. Creating a language from the scratch gives flexibility to the programmer to define it the way he wants to but it takes a lot of time. In general, some tools are used to create Domain Specific Languages. This is because it not only saves time but also helps to make the language easy to use.&lt;br /&gt;
=== Boo ===&lt;br /&gt;
Boo&amp;lt;ref&amp;gt;Boo Home[http://boo.codehaus.org/Home]&amp;lt;/ref&amp;gt; is an open source object oriented language to create Domain Specific languages. Defining basic data structures like array, hash, variables etc are inherently supported in Boo and it makes creation of them easier. Although Boo is a statically typed language, these restrictions can be bent once in a while so that the type of objects can be found and manipulated in run time as well ([http://en.wikipedia.org/wiki/Duck_typing &amp;lt;code&amp;gt;Duck typing&amp;lt;/code&amp;gt;]).&lt;br /&gt;
&lt;br /&gt;
=== Visual Studio ===&lt;br /&gt;
Visual Studio has Domain-specific language tools that are designed to help the designer to build a language focusing on the language grammar and characteristics rather than internal details of the compiler.&amp;lt;ref&amp;gt;Domain specific development[http://www.domainspecificdevelopment.com/]&amp;lt;/ref&amp;gt; The tool shows visual tools that helps focus on the business requirements of the OODSL rather than worrying about the internals of its working.&lt;br /&gt;
=== Groovy ===&lt;br /&gt;
Groovy &amp;lt;ref&amp;gt;Groovy Home[http://groovy.codehaus.org/]&amp;lt;/ref&amp;gt; is a dynamic language for the Java Virtual Machine. Also, the syntax is groovy is similar to that of Java making designing of new DSLs easier and similar to programming in Java.&lt;br /&gt;
&lt;br /&gt;
== OODSL vs. non-OODSL ==&lt;br /&gt;
When defining a DSL, choosing whether to go with a OODSL or a non-OODSL depends on several factors like the domain for which it is defined, existing DSLs for that domain etc. OODSLs can be suited well for some situations whereas on some situations, it may be an overkill. Defining a new OODSL when there is an already widely accepted non-OODSL may not be very useful. For example, HTML is the standard method for displaying web pages and it is a non-OODSL. Defining a new non-OODSL that replaces HTML may not prove to be significantly advantageous.&lt;br /&gt;
&lt;br /&gt;
== Advantages and Disadvantages ==&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Varjun2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch1_1w9_av&amp;diff=64607</id>
		<title>CSC/ECE 517 Fall 2012/ch1 1w9 av</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch1_1w9_av&amp;diff=64607"/>
		<updated>2012-09-14T22:28:07Z</updated>

		<summary type="html">&lt;p&gt;Varjun2: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;p&amp;gt;An OODSL is a [http://en.wikipedia.org/wiki/Domain-specific_language&amp;lt;code&amp;gt;Domain-specific language&amp;lt;/code&amp;gt;] (DSL) that exhibits characteristics that have traditionally been attributed to [http://en.wikipedia.org/wiki/Object-oriented_programming#OOP_languages&amp;lt;code&amp;gt;Object-Oriented Languages&amp;lt;/code&amp;gt;] &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Although OOP languages and Domain specific languages have been around for several years, OODSLs are relatively new.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
'''The General Purpose Programming way of ordering hash browns at Waffle House'''&lt;br /&gt;
&lt;br /&gt;
Harvest the potato, wash it, and chop it into little pieces. Put the pieces in a pan with oil and fry till they turn golden brown, and then drain the oil away and put them on a plate. Then add cheese, which you can get by milking a cow and..... &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''The OODSL way of ordering hash browns at Waffle House'''&lt;br /&gt;
&lt;br /&gt;
Scattered, smothered, and covered&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For a person who works at Waffle House, or goes there regularly to eat, it is a no brainer that the second method is much more efficient. OODSLs take advantage of the context within which communication takes place. By using implicitly understood jargon, the task at hand can be accomplished in a way that is easier to comprehend for a specialized type of user.&lt;br /&gt;
&lt;br /&gt;
OODSLs can be of 2 types:&lt;br /&gt;
&lt;br /&gt;
* Internal&lt;br /&gt;
* External&lt;br /&gt;
&lt;br /&gt;
Internal OODSLs are languages that are built on top of existing languages. An internal OODSL makes use of the host language syntax to provide the feel of a domain specific language. It is not universally defined as to when a language/library becomes an OODSL. JQuery is one such example. It is a JavaScript library, which offers an easy way to perform functions like element selection. It can also be argued that JavaScript itself is a domain specific language. This page is more an attempt to bring out the shades of grey that accompany OODSLs than it is to define it.&lt;br /&gt;
&lt;br /&gt;
External OODSLs are those that are built from scratch. With the current technology, it is far more easy to churn out several internal OODSLs than to build one from scratch. External OODSLs have their own syntax, as well as their own methods of compilation/interpretation. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
OODSLs cannot be spoken about without first a brief introduction to Domain Specific Languages and the Object-Oriented programming paradigm. &lt;br /&gt;
&lt;br /&gt;
In a nutshell, DSL is a language that is specific to a particular domain. DSLs are different from general purpose programming languages like C++ and Java. They take advantage of the fact that there are groups of users who rather than communicating every single thing, are able to implicitly understand certain terms and notations. This makes communication much more efficient for such a group. Eg: 2 basketball fans will talk in basketball jargon. Not everyone will understand what zone defence, 3 pointers and jump ball mean. The jargon serves the specific purpose of easing communication between 2 basketball fans. Some would argue that DSLs have been around for a far longer time dating back to even before the advent of computers. Subway maps, electronics circuit diagrams all demonstrate properties of a DSL. Since then, DSLs have come a long way. Domain Specific Languages (DSLs), as they are spoken about now, have been around since the 1970's and their origin can be traced back to a tool called Draco.  Since Draco, computers have made it possible to design a whole host of other useful DSLs. Some of the more popular ones among them are SQL, Prolog, Verilog, HTML etc.&lt;br /&gt;
&lt;br /&gt;
Object-Oriented Programming (OOP) is a programming paradigm that tries to apply real world principles to make programming easier. OOP has been around since the 1950's. Starting with Simula and Smalltalk, OOP languages have come a long way since then, and has grown to become one of the most popular programming paradigms employed worldwide. Some of the modern object oriented languages include static languages like C++, Java, C#, and dynamic languages like Perl, Ruby etc.&lt;br /&gt;
&lt;br /&gt;
OODSLs, that bring out the features of both DSLs as well as OOP languages are a fairly recent invention. OODSLs have been around since the 1980's/1990's. They are now primarily used in the realm of web development, game development, and are also used in certain specialized industries like music.&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
=== PHP ===&lt;br /&gt;
[http://en.wikipedia.org/wiki/PHP&amp;lt;code&amp;gt;PHP&amp;lt;/code&amp;gt;] is an OODSL that is commonly used for web development. It is an open source web development framework that is designed to make web development simpler and easier. The language can also be perceived as a general purpose language, but it also has domain specific components designed for the web domain alone. PHP is in general embedded into HTML to perform server side computations before the page is being sent to the client.&lt;br /&gt;
&lt;br /&gt;
=== OODSL compiler for FPGA ===&lt;br /&gt;
An object oriented domain specific compiler was developed for programming Field Programmable Gate Arrays.&amp;lt;ref&amp;gt;Object-Oriented Domain Specific Compilers for Programming FPGAs[http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&amp;amp;arnumber=920835&amp;amp;userType=inst&amp;amp;tag=1]&amp;lt;/ref&amp;gt; The compiler allows the hardware programmer to make use of object-oriented style while programming. The research paper claims that this way of programming the hardware reduces the design time several times and still result in an optimal performance.&lt;br /&gt;
&lt;br /&gt;
== Tools for Creating OODSL ==&lt;br /&gt;
When creating an OODSL, one can either choose to scratch from the scratch or use a tool that is already available to create the language. Creating a language from the scratch gives flexibility to the programmer to define it the way he wants to but it takes a lot of time. In general, some tools are used to create Domain Specific Languages. This is because it not only saves time but also helps to make the language easy to use.&lt;br /&gt;
=== Boo ===&lt;br /&gt;
Boo&amp;lt;ref&amp;gt;Boo Home[http://boo.codehaus.org/Home]&amp;lt;/ref&amp;gt; is an open source object oriented language to create Domain Specific languages. Defining basic data structures like array, hash, variables etc are inherently supported in Boo and it makes creation of them easier. Although Boo is a statically typed language, these restrictions can be bent once in a while so that the type of objects can be found and manipulated in run time as well ([http://en.wikipedia.org/wiki/Duck_typing &amp;lt;code&amp;gt;Duck typing&amp;lt;/code&amp;gt;]).&lt;br /&gt;
&lt;br /&gt;
=== Visual Studio ===&lt;br /&gt;
Visual Studio has Domain-specific language tools that are designed to help the designer to build a language focusing on the language grammar and characteristics rather than internal details of the compiler.&amp;lt;ref&amp;gt;Domain specific development[http://www.domainspecificdevelopment.com/]&amp;lt;/ref&amp;gt; The tool shows visual tools that helps focus on the business requirements of the OODSL rather than worrying about the internals of its working.&lt;br /&gt;
=== Groovy ===&lt;br /&gt;
Groovy &amp;lt;ref&amp;gt;Groovy Home[http://groovy.codehaus.org/]&amp;lt;/ref&amp;gt; is a dynamic language for the Java Virtual Machine. Also, the syntax is groovy is similar to that of Java making designing of new DSLs easier and similar to programming in Java.&lt;br /&gt;
&lt;br /&gt;
== OODSL vs. non-OODSL ==&lt;br /&gt;
When defining a DSL, choosing whether to go with a OODSL or a non-OODSL depends on several factors like the domain for which it is defined, existing DSLs for that domain etc.&lt;br /&gt;
&lt;br /&gt;
== Advantages and Disadvantages ==&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Varjun2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch1_1w9_av&amp;diff=64591</id>
		<title>CSC/ECE 517 Fall 2012/ch1 1w9 av</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch1_1w9_av&amp;diff=64591"/>
		<updated>2012-09-14T22:22:46Z</updated>

		<summary type="html">&lt;p&gt;Varjun2: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;p&amp;gt;An OODSL is a [http://en.wikipedia.org/wiki/Domain-specific_language&amp;lt;code&amp;gt;Domain-specific language&amp;lt;/code&amp;gt;] (DSL) that exhibits characteristics that have traditionally been attributed to [http://en.wikipedia.org/wiki/Object-oriented_programming#OOP_languages&amp;lt;code&amp;gt;Object-Oriented Languages&amp;lt;/code&amp;gt;] &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Although OOP languages and Domain specific languages have been around for several years, OODSLs are relatively new.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
'''The general purpose programming way of ordering hash browns at Waffle House'''&lt;br /&gt;
&lt;br /&gt;
There is a plant called a potato, which is a tuber, a root plant. Take the potato, harvest it, wash it off, and chop it into little cubes. Put those in a pan with oil and fry them until they are just turning brown, and then drain the grease away and put them on a plate. OK, next I want cheese. There’s an animal called a cow...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''The OODSL way of ordering hash browns at Waffle House'''&lt;br /&gt;
&lt;br /&gt;
Scattered, smothered, and covered&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For a person who works at Waffle House, or goes there regularly to eat, it is a no brainer that the second method is much more efficient. OODSLs take advantage of the context within which communication takes place. By using implicitly understood jargon, the task at hand can be accomplished in a way that is easier to comprehend for a specialized type of user.&lt;br /&gt;
&lt;br /&gt;
OODSLs can be of 2 types:&lt;br /&gt;
&lt;br /&gt;
Internal&lt;br /&gt;
External&lt;br /&gt;
&lt;br /&gt;
Internal OODSLs are languages that are built on top of existing languages. An internal OODSL makes use of the host language syntax to provide the feel of a domain specific language. It is not universally defined as to when a language/library becomes an OODSL. JQuery is one such example. It is a JavaScript library, which offers an easy way to perform functions like element selection. It can also be argued that JavaScript itself is a domain specific language. This page is more an attempt to bring out the shades of grey that accompany OODSLs than it is to define it.&lt;br /&gt;
&lt;br /&gt;
External OODSLs are those that are built from scratch. With the current technology, it is far more easy to churn out several internal OODSLs than to build one from scratch. External OODSLs have their own syntax, as well as their own methods of compilation/interpretation. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
OODSLs cannot be spoken about without first a brief introduction to Domain Specific Languages and the Object-Oriented programming paradigm. &lt;br /&gt;
&lt;br /&gt;
In a nutshell, DSL is a language that is specific to a particular domain. DSLs are different from general purpose programming languages like C++ and Java. They take advantage of the fact that there are groups of users who rather than communicating every single thing, are able to implicitly understand certain terms and notations. This makes communication much more efficient for such a group. Eg: 2 basketball fans will talk in basketball jargon. Not everyone will understand what zone defence, 3 pointers and jump ball mean. The jargon serves the specific purpose of easing communication between 2 basketball fans. Some would argue that DSLs have been around for a far longer time dating back to even before the advent of computers. Subway maps, electronics circuit diagrams all demonstrate properties of a DSL. Since then, DSLs have come a long way. Domain Specific Languages (DSLs), as they are spoken about now, have been around since the 1970's and their origin can be traced back to a tool called Draco.  Since Draco, computers have made it possible to design a whole host of other useful DSLs. Some of the more popular ones among them are SQL, Prolog, Verilog, HTML etc.&lt;br /&gt;
&lt;br /&gt;
Object-Oriented Programming (OOP) is a programming paradigm that tries to apply real world principles to make programming easier. OOP has been around since the 1950's. Starting with Simula and Smalltalk, OOP languages have come a long way since then, and has grown to become one of the most popular programming paradigms employed worldwide. Some of the modern object oriented languages include static languages like C++, Java, C#, and dynamic languages like Perl, Ruby etc.&lt;br /&gt;
&lt;br /&gt;
OODSLs, that bring out the features of both DSLs as well as OOP languages are a fairly recent invention. OODSLs have been around since the 1980's/1990's. They are now primarily used in the realm of web development, game development, and are also used in certain specialized industries like music.&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
=== PHP ===&lt;br /&gt;
[http://en.wikipedia.org/wiki/PHP&amp;lt;code&amp;gt;PHP&amp;lt;/code&amp;gt;] is an OODSL that is commonly used for web development. It is an open source web development framework that is designed to make web development simpler and easier. The language can also be perceived as a general purpose language, but it also has domain specific components designed for the web domain alone. PHP is in general embedded into HTML to perform server side computations before the page is being sent to the client.&lt;br /&gt;
&lt;br /&gt;
=== OODSL compiler for FPGA ===&lt;br /&gt;
An object oriented domain specific compiler was developed for programming Field Programmable Gate Arrays.&amp;lt;ref&amp;gt;Object-Oriented Domain Specific Compilers for Programming FPGAs[http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&amp;amp;arnumber=920835&amp;amp;userType=inst&amp;amp;tag=1]&amp;lt;/ref&amp;gt; The compiler allows the hardware programmer to make use of object-oriented style while programming. The research paper claims that this way of programming the hardware reduces the design time several times and still result in an optimal performance.&lt;br /&gt;
&lt;br /&gt;
== Tools for Creating OODSL ==&lt;br /&gt;
When creating an OODSL, one can either choose to scratch from the scratch or use a tool that is already available to create the language. Creating a language from the scratch gives flexibility to the programmer to define it the way he wants to but it takes a lot of time. In general, some tools are used to create Domain Specific Languages. This is because it not only saves time but also helps to make the language easy to use.&lt;br /&gt;
=== Boo ===&lt;br /&gt;
Boo&amp;lt;ref&amp;gt;Boo Home[http://boo.codehaus.org/Home]&amp;lt;/ref&amp;gt; is an open source object oriented language to create Domain Specific languages. Defining basic data structures like array, hash, variables etc are inherently supported in Boo and it makes creation of them easier. Although Boo is a statically typed language, these restrictions can be bent once in a while so that the type of objects can be found and manipulated in run time as well ([http://en.wikipedia.org/wiki/Duck_typing &amp;lt;code&amp;gt;Duck typing&amp;lt;/code&amp;gt;]).&lt;br /&gt;
&lt;br /&gt;
=== Visual Studio ===&lt;br /&gt;
Visual Studio has Domain-specific language tools that are designed to help the designer to build a language focusing on the language grammar and characteristics rather than internal details of the compiler.&amp;lt;ref&amp;gt;Domain specific development[http://www.domainspecificdevelopment.com/]&amp;lt;/ref&amp;gt; The tool shows visual tools that helps focus on the business requirements of the OODSL rather than worrying about the internals of its working.&lt;br /&gt;
=== Groovy ===&lt;br /&gt;
Groovy &amp;lt;ref&amp;gt;Groovy Home[http://groovy.codehaus.org/]&amp;lt;/ref&amp;gt; is a dynamic language for the Java Virtual Machine. Also, the syntax is groovy is similar to that of Java making designing of new DSLs easier and similar to programming in Java.&lt;br /&gt;
&lt;br /&gt;
== OODSL vs. non-OODSL ==&lt;br /&gt;
When defining a DSL, choosing whether to go with a OODSL or a non-OODSL depends on several factors like the domain for which it is defined, existing DSLs for that domain etc.&lt;br /&gt;
&lt;br /&gt;
== Advantages and Disadvantages ==&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Varjun2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch1_1w9_av&amp;diff=64589</id>
		<title>CSC/ECE 517 Fall 2012/ch1 1w9 av</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch1_1w9_av&amp;diff=64589"/>
		<updated>2012-09-14T22:22:14Z</updated>

		<summary type="html">&lt;p&gt;Varjun2: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;p&amp;gt;An OODSL is a [http://en.wikipedia.org/wiki/Domain-specific_language&amp;lt;code&amp;gt;Domain-specific language&amp;lt;/code&amp;gt;] (DSL) that exhibits characteristics that have traditionally been attributed to [http://en.wikipedia.org/wiki/Object-oriented_programming#OOP_languages&amp;lt;code&amp;gt;Object-Oriented Languages&amp;lt;/code&amp;gt;] &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Although OOP languages and Domain specific languages have been around for several years, OODSLs are relatively new.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
'''The general purpose programming way of ordering hash browns at Waffle House'''&lt;br /&gt;
&lt;br /&gt;
There is a plant called a potato, which is a tuber, a root plant. Take the potato, harvest it, wash it off, and chop it into little cubes. Put those in a pan with oil and fry them until they are just turning brown, and then drain the grease away and put them on a plate. OK, next I want cheese. There’s an animal called a cow...&lt;br /&gt;
&lt;br /&gt;
'''The OODSL way of ordering hash browns at Waffle House'''&lt;br /&gt;
&lt;br /&gt;
Scattered, smothered, and covered&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For a person who works at Waffle House, or goes there regularly to eat, it is a no brainer that the second method is much more efficient. OODSLs take advantage of the context within which communication takes place. By using implicitly understood jargon, the task at hand can be accomplished in a way that is easier to comprehend for a specialized type of user.&lt;br /&gt;
&lt;br /&gt;
OODSLs can be of 2 types:&lt;br /&gt;
&lt;br /&gt;
Internal&lt;br /&gt;
External&lt;br /&gt;
&lt;br /&gt;
Internal OODSLs are languages that are built on top of existing languages. An internal OODSL makes use of the host language syntax to provide the feel of a domain specific language. It is not universally defined as to when a language/library becomes an OODSL. JQuery is one such example. It is a JavaScript library, which offers an easy way to perform functions like element selection. It can also be argued that JavaScript itself is a domain specific language. This page is more an attempt to bring out the shades of grey that accompany OODSLs than it is to define it.&lt;br /&gt;
&lt;br /&gt;
External OODSLs are those that are built from scratch. With the current technology, it is far more easy to churn out several internal OODSLs than to build one from scratch. External OODSLs have their own syntax, as well as their own methods of compilation/interpretation. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
OODSLs cannot be spoken about without first a brief introduction to Domain Specific Languages and the Object-Oriented programming paradigm. &lt;br /&gt;
&lt;br /&gt;
In a nutshell, DSL is a language that is specific to a particular domain. DSLs are different from general purpose programming languages like C++ and Java. They take advantage of the fact that there are groups of users who rather than communicating every single thing, are able to implicitly understand certain terms and notations. This makes communication much more efficient for such a group. Eg: 2 basketball fans will talk in basketball jargon. Not everyone will understand what zone defence, 3 pointers and jump ball mean. The jargon serves the specific purpose of easing communication between 2 basketball fans. Some would argue that DSLs have been around for a far longer time dating back to even before the advent of computers. Subway maps, electronics circuit diagrams all demonstrate properties of a DSL. Since then, DSLs have come a long way. Domain Specific Languages (DSLs), as they are spoken about now, have been around since the 1970's and their origin can be traced back to a tool called Draco.  Since Draco, computers have made it possible to design a whole host of other useful DSLs. Some of the more popular ones among them are SQL, Prolog, Verilog, HTML etc.&lt;br /&gt;
&lt;br /&gt;
Object-Oriented Programming (OOP) is a programming paradigm that tries to apply real world principles to make programming easier. OOP has been around since the 1950's. Starting with Simula and Smalltalk, OOP languages have come a long way since then, and has grown to become one of the most popular programming paradigms employed worldwide. Some of the modern object oriented languages include static languages like C++, Java, C#, and dynamic languages like Perl, Ruby etc.&lt;br /&gt;
&lt;br /&gt;
OODSLs, that bring out the features of both DSLs as well as OOP languages are a fairly recent invention. OODSLs have been around since the 1980's/1990's. They are now primarily used in the realm of web development, game development, and are also used in certain specialized industries like music.&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
=== PHP ===&lt;br /&gt;
[http://en.wikipedia.org/wiki/PHP&amp;lt;code&amp;gt;PHP&amp;lt;/code&amp;gt;] is an OODSL that is commonly used for web development. It is an open source web development framework that is designed to make web development simpler and easier. The language can also be perceived as a general purpose language, but it also has domain specific components designed for the web domain alone. PHP is in general embedded into HTML to perform server side computations before the page is being sent to the client.&lt;br /&gt;
&lt;br /&gt;
=== OODSL compiler for FPGA ===&lt;br /&gt;
An object oriented domain specific compiler was developed for programming Field Programmable Gate Arrays.&amp;lt;ref&amp;gt;Object-Oriented Domain Specific Compilers for Programming FPGAs[http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&amp;amp;arnumber=920835&amp;amp;userType=inst&amp;amp;tag=1]&amp;lt;/ref&amp;gt; The compiler allows the hardware programmer to make use of object-oriented style while programming. The research paper claims that this way of programming the hardware reduces the design time several times and still result in an optimal performance.&lt;br /&gt;
&lt;br /&gt;
== Tools for Creating OODSL ==&lt;br /&gt;
When creating an OODSL, one can either choose to scratch from the scratch or use a tool that is already available to create the language. Creating a language from the scratch gives flexibility to the programmer to define it the way he wants to but it takes a lot of time. In general, some tools are used to create Domain Specific Languages. This is because it not only saves time but also helps to make the language easy to use.&lt;br /&gt;
=== Boo ===&lt;br /&gt;
Boo&amp;lt;ref&amp;gt;Boo Home[http://boo.codehaus.org/Home]&amp;lt;/ref&amp;gt; is an open source object oriented language to create Domain Specific languages. Defining basic data structures like array, hash, variables etc are inherently supported in Boo and it makes creation of them easier. Although Boo is a statically typed language, these restrictions can be bent once in a while so that the type of objects can be found and manipulated in run time as well ([http://en.wikipedia.org/wiki/Duck_typing &amp;lt;code&amp;gt;Duck typing&amp;lt;/code&amp;gt;]).&lt;br /&gt;
&lt;br /&gt;
=== Visual Studio ===&lt;br /&gt;
Visual Studio has Domain-specific language tools that are designed to help the designer to build a language focusing on the language grammar and characteristics rather than internal details of the compiler.&amp;lt;ref&amp;gt;Domain specific development[http://www.domainspecificdevelopment.com/]&amp;lt;/ref&amp;gt; The tool shows visual tools that helps focus on the business requirements of the OODSL rather than worrying about the internals of its working.&lt;br /&gt;
=== Groovy ===&lt;br /&gt;
Groovy &amp;lt;ref&amp;gt;Groovy Home[http://groovy.codehaus.org/]&amp;lt;/ref&amp;gt; is a dynamic language for the Java Virtual Machine. Also, the syntax is groovy is similar to that of Java making designing of new DSLs easier and similar to programming in Java.&lt;br /&gt;
&lt;br /&gt;
== OODSL vs. non-OODSL ==&lt;br /&gt;
When defining a DSL, choosing whether to go with a OODSL or a non-OODSL depends on several factors like the domain for which it is defined, existing DSLs for that domain etc.&lt;br /&gt;
&lt;br /&gt;
== Advantages and Disadvantages ==&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Varjun2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch1_1w9_av&amp;diff=64519</id>
		<title>CSC/ECE 517 Fall 2012/ch1 1w9 av</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch1_1w9_av&amp;diff=64519"/>
		<updated>2012-09-14T22:01:15Z</updated>

		<summary type="html">&lt;p&gt;Varjun2: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;p&amp;gt;An OODSL is a [http://en.wikipedia.org/wiki/Domain-specific_language&amp;lt;code&amp;gt;Domain-specific language&amp;lt;/code&amp;gt;] (DSL) that exhibits characteristics that have traditionally been attributed to [http://en.wikipedia.org/wiki/Object-oriented_programming#OOP_languages&amp;lt;code&amp;gt;Object-Oriented Languages&amp;lt;/code&amp;gt;] &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Although OOP languages and Domain specific languages have been around for several years, OODSLs are relatively new.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
'''The general purpose programming way of ordering hash browns at Waffle House'''&lt;br /&gt;
&lt;br /&gt;
There is a plant called a potato, which is a tuber, a root plant. Take the potato, harvest it, wash it off, and chop it into little cubes. Put those in a pan with oil and fry them until they are just turning brown, and then drain the grease away and put them on a plate. OK, next I want cheese. There’s an animal called a cow...&lt;br /&gt;
&lt;br /&gt;
'''The OODSL way of ordering hash browns at Waffle House'''&lt;br /&gt;
&lt;br /&gt;
Scattered, smothered, and covered&lt;br /&gt;
&lt;br /&gt;
For a person who works at Waffle House, or goes there regularly to eat, it is a no brainer that the second method is much more efficient. There is no absolute rule that determines when an application becomes an OODSL. Example: it can be ba&lt;br /&gt;
&lt;br /&gt;
OODSL can be of 2 types:&lt;br /&gt;
&lt;br /&gt;
Internal&lt;br /&gt;
External&lt;br /&gt;
&lt;br /&gt;
OODSLs take advantage of the context within which communication takes place. By using implicitly understood jargon, &lt;br /&gt;
&lt;br /&gt;
internal, external&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
OODSLs cannot be spoken about without first a brief introduction to Domain Specific Languages and the Object-Oriented programming paradigm. &lt;br /&gt;
&lt;br /&gt;
In a nutshell, DSL is a language that is specific to a particular domain. DSLs are different from general purpose programming languages like C++ and Java. They take advantage of the fact that there are groups of users who rather than communicating every single thing, are able to implicitly understand certain terms and notations. This makes communication much more efficient for such a group. Eg: 2 basketball fans will talk in basketball jargon. Not everyone will understand what zone defence, 3 pointers and jump ball mean. The jargon serves the specific purpose of easing communication between 2 basketball fans. Some would argue that DSLs have been around for a far longer time dating back to even before the advent of computers. Subway maps, electronics circuit diagrams all demonstrate properties of a DSL. Since then, DSLs have come a long way. Domain Specific Languages (DSLs), as they are spoken about now, have been around since the 1970's and their origin can be traced back to a tool called Draco.  Since Draco, computers have made it possible to design a whole host of other useful DSLs. Some of the more popular ones among them are SQL, Prolog, Verilog, HTML etc.&lt;br /&gt;
&lt;br /&gt;
Object-Oriented Programming (OOP) is a programming paradigm that tries to apply real world principles to make programming easier. OOP has been around since the 1950's. Starting with Simula and Smalltalk, OOP languages have come a long way since then, and has grown to become one of the most popular programming paradigms employed worldwide. Some of the modern object oriented languages include static languages like C++, Java, C#, and dynamic languages like Perl, Ruby etc.&lt;br /&gt;
&lt;br /&gt;
OODSLs, that bring out the features of both DSLs as well as OOP languages are a fairly recent invention. OODSLs have been around since the 1980's/1990's. They are now primarily used in the realm of web development, game development, and are also used in certain specialized industries like music.&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
=== OODSL compiler for FPGA ===&lt;br /&gt;
An object oriented domain specific compiler was developed for programming Field Programmable Gate Arrays.&amp;lt;ref&amp;gt;Object-Oriented Domain Specific Compilers for Programming FPGAs[http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&amp;amp;arnumber=920835&amp;amp;userType=inst&amp;amp;tag=1]&amp;lt;/ref&amp;gt; The compiler allows the hardware programmer to make use of object-oriented style while programming. The research paper claims that this way of programming the hardware reduces the design time several times and still result in an optimal performance.&lt;br /&gt;
&lt;br /&gt;
== Creating OODSL ==&lt;br /&gt;
When creating an OODSL, one can either choose to scratch from the scratch or use a tool that is already available to create the language. Creating a language from the scratch gives flexibility to the programmer to define it the way he wants to but it takes a lot of time. In general, some tools are used to create Domain Specific Languages. This is because it not only saves time but also helps to make the language easy to use.&lt;br /&gt;
=== Boo ===&lt;br /&gt;
Boo&amp;lt;ref&amp;gt;Boo Home[http://boo.codehaus.org/Home]&amp;lt;/ref&amp;gt; is an open source object oriented language to create Domain Specific languages. Defining basic data structures like array, hash, variables etc are inherently supported in Boo and it makes creation of them easier. Although Boo is a statically typed language, these restrictions can be bent once in a while so that the type of objects can be found and manipulated in run time as well ([http://en.wikipedia.org/wiki/Duck_typing &amp;lt;code&amp;gt;Duck typing&amp;lt;/code&amp;gt;]).&lt;br /&gt;
&lt;br /&gt;
=== Visual Studio ===&lt;br /&gt;
Visual Studio has Domain-specific language tools that are designed to help the designer to build a language focusing on the language grammar and characteristics rather than internal details of the compiler.&amp;lt;ref&amp;gt;Domain specific development[http://www.domainspecificdevelopment.com/]&amp;lt;/ref&amp;gt; The tool shows visual tools that helps focus on the business requirements of the OODSL rather than worrying about the internals of its working.&lt;br /&gt;
=== Groovy ===&lt;br /&gt;
Groovy &amp;lt;ref&amp;gt;Groovy Home[http://groovy.codehaus.org/]&amp;lt;/ref&amp;gt; is a dynamic language for the Java Virtual Machine. Also, the syntax is groovy is similar to that of Java making designing of new DSLs easier and similar to programming in Java.&lt;br /&gt;
&lt;br /&gt;
== OODSL vs. non-OODSL ==&lt;br /&gt;
When defining a DSL, choosing whether to go with a OODSL or a non-OODSL depends on several factors like the domain for which it is defined, existing DSLs for that domain etc.&lt;br /&gt;
&lt;br /&gt;
== Advantages and Disadvantages ==&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Varjun2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch1_1w9_av&amp;diff=64489</id>
		<title>CSC/ECE 517 Fall 2012/ch1 1w9 av</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch1_1w9_av&amp;diff=64489"/>
		<updated>2012-09-14T21:53:29Z</updated>

		<summary type="html">&lt;p&gt;Varjun2: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;p&amp;gt;An OODSL is a [http://en.wikipedia.org/wiki/Domain-specific_language&amp;lt;code&amp;gt;Domain-specific language&amp;lt;/code&amp;gt;] (DSL) that exhibits characteristics that have traditionally been attributed to [http://en.wikipedia.org/wiki/Object-oriented_programming#OOP_languages&amp;lt;code&amp;gt;Object-Oriented Languages&amp;lt;/code&amp;gt;] &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Although OOP languages and Domain specific languages have been around for several years, OODSLs are relatively new.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
'''The general purpose programming way of ordering hash browns at Waffle House'''&lt;br /&gt;
&lt;br /&gt;
There is a plant called a potato, which is a tuber, a root plant. Take the potato, harvest it, wash it off, and chop it into little cubes. Put those in a pan with oil and fry them until they are just turning brown, and then drain the grease away and put them on a plate. OK, next I want cheese. There’s an animal called a cow...&lt;br /&gt;
&lt;br /&gt;
'''The OODSL way of ordering hash browns at Waffle House'''&lt;br /&gt;
&lt;br /&gt;
Scattered, smothered, and covered&lt;br /&gt;
&lt;br /&gt;
For a person who works at Waffle House, or goes there regularly to eat, it is a no brainer that the second method is much more efficient. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
internal, external&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
OODSLs cannot be spoken about without first a brief introduction to Domain Specific Languages and the Object-Oriented programming paradigm. &lt;br /&gt;
&lt;br /&gt;
In a nutshell, DSL is a language that is specific to a particular domain. DSLs are different from general purpose programming languages like C++ and Java. They take advantage of the fact that there are groups of users who rather than communicating every single thing, are able to implicitly understand certain terms and notations. This makes communication much more efficient for such a group. Eg: 2 basketball fans will talk in basketball jargon. Not everyone will understand what zone defence, 3 pointers and jump ball mean. The jargon serves the specific purpose of easing communication between 2 basketball fans. Some would argue that DSLs have been around for a far longer time dating back to even before the advent of computers. Subway maps, electronics circuit diagrams all demonstrate properties of a DSL. Since then, DSLs have come a long way. Domain Specific Languages (DSLs), as they are spoken about now, have been around since the 1970's and their origin can be traced back to a tool called Draco.  Since Draco, computers have made it possible to design a whole host of other useful DSLs. Some of the more popular ones among them are SQL, Prolog, Verilog, HTML etc.&lt;br /&gt;
&lt;br /&gt;
Object-Oriented Programming (OOP) is a programming paradigm that tries to apply real world principles to make programming easier. OOP has been around since the 1950's. Starting with Simula and Smalltalk, OOP languages have come a long way since then, and has grown to become one of the most popular programming paradigms employed worldwide. Some of the modern object oriented languages include static languages like C++, Java, C#, and dynamic languages like Perl, Ruby etc.&lt;br /&gt;
&lt;br /&gt;
OODSLs, that bring out the features of both DSLs as well as OOP languages are a fairly recent invention. OODSLs have been around since the 1980's/1990's. They are now primarily used in the realm of web development, game development, and are also used in certain specialized industries like music.&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
=== OODSL compiler for FPGA ===&lt;br /&gt;
An object oriented domain specific compiler was developed for programming Field Programmable Gate Arrays.&amp;lt;ref&amp;gt;Object-Oriented Domain Specific Compilers for Programming FPGAs[http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&amp;amp;arnumber=920835&amp;amp;userType=inst&amp;amp;tag=1]&amp;lt;/ref&amp;gt; The compiler allows the hardware programmer to make use of object-oriented style while programming. The research paper claims that this way of programming the hardware reduces the design time several times and still result in an optimal performance.&lt;br /&gt;
&lt;br /&gt;
== Creating OODSL ==&lt;br /&gt;
When creating an OODSL, one can either choose to scratch from the scratch or use a tool that is already available to create the language. Creating a language from the scratch gives flexibility to the programmer to define it the way he wants to but it takes a lot of time. In general, some tools are used to create Domain Specific Languages. This is because it not only saves time but also helps to make the language easy to use.&lt;br /&gt;
=== Boo ===&lt;br /&gt;
Boo&amp;lt;ref&amp;gt;http://boo.codehaus.org/Home&amp;lt;/ref&amp;gt; is an open source object oriented language to create Domain Specific languages. Defining basic data structures like array, hash, variables etc are inherently supported in Boo and it makes creation of them easier. Although Boo is a statically typed language, these restrictions can be bent once in a while so that the type of objects can be found and manipulated in run time as well ([http://en.wikipedia.org/wiki/Duck_typing &amp;lt;code&amp;gt;Duck typing&amp;lt;/code&amp;gt;]).&lt;br /&gt;
&lt;br /&gt;
=== Visual Studio ===&lt;br /&gt;
Visual Studio has Domain-specific language tools that are designed to help the designer to build a language focusing on the language grammar and characteristics rather than internal details of the compiler.&amp;lt;ref&amp;gt;Domain specific development[http://www.domainspecificdevelopment.com/]&amp;lt;/ref&amp;gt; The tool shows visual tools that helps focus on the business requirements of the OODSL rather than worrying about the internals of its working.&lt;br /&gt;
&lt;br /&gt;
== OODSL vs. non-OODSL ==&lt;br /&gt;
When defining a DSL, choosing whether to go with a OODSL or a non-OODSL depends on several factors like the domain for which it is defined, existing DSLs for that domain etc.&lt;br /&gt;
&lt;br /&gt;
== Advantages and Disadvantages ==&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Varjun2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch1_1w9_av&amp;diff=64487</id>
		<title>CSC/ECE 517 Fall 2012/ch1 1w9 av</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch1_1w9_av&amp;diff=64487"/>
		<updated>2012-09-14T21:53:04Z</updated>

		<summary type="html">&lt;p&gt;Varjun2: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;p&amp;gt;An OODSL is a [http://en.wikipedia.org/wiki/Domain-specific_language&amp;lt;code&amp;gt;Domain-specific language&amp;lt;/code&amp;gt;] (DSL) that exhibits characteristics that have traditionally been attributed to [http://en.wikipedia.org/wiki/Object-oriented_programming#OOP_languages&amp;lt;code&amp;gt;Object-Oriented Languages&amp;lt;/code&amp;gt;] &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Although OOP languages and Domain specific languages have been around for several years, OODSLs are relatively new.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
'''The general purpose programming way of ordering hash browns at Waffle House'''&lt;br /&gt;
There is a plant called a potato, which is a tuber, a root plant. Take the potato, harvest it, wash it off, and chop it into little cubes. Put those in a pan with oil and fry them until they are just turning brown, and then drain the grease away and put them on a plate. OK, next I want cheese. There’s an animal called a cow...&lt;br /&gt;
&lt;br /&gt;
'''The OODSL way of ordering hash browns at Waffle House'''&lt;br /&gt;
Scattered, smothered, and covered&lt;br /&gt;
&lt;br /&gt;
For a person who works at Waffle House, or goes there regularly to eat, it is a no brainer that the second method is much more efficient. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
internal, external&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
OODSLs cannot be spoken about without first a brief introduction to Domain Specific Languages and the Object-Oriented programming paradigm. &lt;br /&gt;
&lt;br /&gt;
In a nutshell, DSL is a language that is specific to a particular domain. DSLs are different from general purpose programming languages like C++ and Java. They take advantage of the fact that there are groups of users who rather than communicating every single thing, are able to implicitly understand certain terms and notations. This makes communication much more efficient for such a group. Eg: 2 basketball fans will talk in basketball jargon. Not everyone will understand what zone defence, 3 pointers and jump ball mean. The jargon serves the specific purpose of easing communication between 2 basketball fans. Some would argue that DSLs have been around for a far longer time dating back to even before the advent of computers. Subway maps, electronics circuit diagrams all demonstrate properties of a DSL. Since then, DSLs have come a long way. Domain Specific Languages (DSLs), as they are spoken about now, have been around since the 1970's and their origin can be traced back to a tool called Draco.  Since Draco, computers have made it possible to design a whole host of other useful DSLs. Some of the more popular ones among them are SQL, Prolog, Verilog, HTML etc.&lt;br /&gt;
&lt;br /&gt;
Object-Oriented Programming (OOP) is a programming paradigm that tries to apply real world principles to make programming easier. OOP has been around since the 1950's. Starting with Simula and Smalltalk, OOP languages have come a long way since then, and has grown to become one of the most popular programming paradigms employed worldwide. Some of the modern object oriented languages include static languages like C++, Java, C#, and dynamic languages like Perl, Ruby etc.&lt;br /&gt;
&lt;br /&gt;
OODSLs, that bring out the features of both DSLs as well as OOP languages are a fairly recent invention. OODSLs have been around since the 1980's/1990's. They are now primarily used in the realm of web development, game development, and are also used in certain specialized industries like music.&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
=== OODSL compiler for FPGA ===&lt;br /&gt;
An object oriented domain specific compiler was developed for programming Field Programmable Gate Arrays.&amp;lt;ref&amp;gt;Object-Oriented Domain Specific Compilers for Programming FPGAs[http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&amp;amp;arnumber=920835&amp;amp;userType=inst&amp;amp;tag=1]&amp;lt;/ref&amp;gt; The compiler allows the hardware programmer to make use of object-oriented style while programming. The research paper claims that this way of programming the hardware reduces the design time several times and still result in an optimal performance.&lt;br /&gt;
&lt;br /&gt;
== Creating OODSL ==&lt;br /&gt;
When creating an OODSL, one can either choose to scratch from the scratch or use a tool that is already available to create the language. Creating a language from the scratch gives flexibility to the programmer to define it the way he wants to but it takes a lot of time. In general, some tools are used to create Domain Specific Languages. This is because it not only saves time but also helps to make the language easy to use.&lt;br /&gt;
=== Boo ===&lt;br /&gt;
Boo&amp;lt;ref&amp;gt;http://boo.codehaus.org/Home&amp;lt;/ref&amp;gt; is an open source object oriented language to create Domain Specific languages. Defining basic data structures like array, hash, variables etc are inherently supported in Boo and it makes creation of them easier. Although Boo is a statically typed language, these restrictions can be bent once in a while so that the type of objects can be found and manipulated in run time as well ([http://en.wikipedia.org/wiki/Duck_typing &amp;lt;code&amp;gt;Duck typing&amp;lt;/code&amp;gt;]).&lt;br /&gt;
&lt;br /&gt;
=== Visual Studio ===&lt;br /&gt;
Visual Studio has Domain-specific language tools that are designed to help the designer to build a language focusing on the language grammar and characteristics rather than internal details of the compiler.&amp;lt;ref&amp;gt;Domain specific development[http://www.domainspecificdevelopment.com/]&amp;lt;/ref&amp;gt; The tool shows visual tools that helps focus on the business requirements of the OODSL rather than worrying about the internals of its working.&lt;br /&gt;
&lt;br /&gt;
== OODSL vs. non-OODSL ==&lt;br /&gt;
When defining a DSL, choosing whether to go with a OODSL or a non-OODSL depends on several factors like the domain for which it is defined, existing DSLs for that domain etc.&lt;br /&gt;
&lt;br /&gt;
== Advantages and Disadvantages ==&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Varjun2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch1_1w9_av&amp;diff=64481</id>
		<title>CSC/ECE 517 Fall 2012/ch1 1w9 av</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch1_1w9_av&amp;diff=64481"/>
		<updated>2012-09-14T21:49:52Z</updated>

		<summary type="html">&lt;p&gt;Varjun2: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;p&amp;gt;An OODSL is a [http://en.wikipedia.org/wiki/Domain-specific_language&amp;lt;code&amp;gt;Domain-specific language&amp;lt;/code&amp;gt;] (DSL) that exhibits characteristics that have traditionally been attributed to [http://en.wikipedia.org/wiki/Object-oriented_programming#OOP_languages&amp;lt;code&amp;gt;Object-Oriented Languages&amp;lt;/code&amp;gt;] &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Although OOP languages and Domain specific languages have been around for several years, OODSLs are relatively new.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
'''General purpose programming way of ordering hash browns at Waffle House'''&lt;br /&gt;
internal, external&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
OODSLs cannot be spoken about without first a brief introduction to Domain Specific Languages and the Object-Oriented programming paradigm. &lt;br /&gt;
&lt;br /&gt;
In a nutshell, DSL is a language that is specific to a particular domain. DSLs are different from general purpose programming languages like C++ and Java. They take advantage of the fact that there are groups of users who rather than communicating every single thing, are able to implicitly understand certain terms and notations. This makes communication much more efficient for such a group. Eg: 2 basketball fans will talk in basketball jargon. Not everyone will understand what zone defence, 3 pointers and jump ball mean. The jargon serves the specific purpose of easing communication between 2 basketball fans. Some would argue that DSLs have been around for a far longer time dating back to even before the advent of computers. Subway maps, electronics circuit diagrams all demonstrate properties of a DSL. Since then, DSLs have come a long way. Domain Specific Languages (DSLs), as they are spoken about now, have been around since the 1970's and their origin can be traced back to a tool called Draco.  Since Draco, computers have made it possible to design a whole host of other useful DSLs. Some of the more popular ones among them are SQL, Prolog, Verilog, HTML etc.&lt;br /&gt;
&lt;br /&gt;
Object-Oriented Programming (OOP) is a programming paradigm that tries to apply real world principles to make programming easier. OOP has been around since the 1950's. Starting with Simula and Smalltalk, OOP languages have come a long way since then, and has grown to become one of the most popular programming paradigms employed worldwide. Some of the modern object oriented languages include static languages like C++, Java, C#, and dynamic languages like Perl, Ruby etc.&lt;br /&gt;
&lt;br /&gt;
OODSLs, that bring out the features of both DSLs as well as OOP languages are a fairly recent invention. OODSLs have been around since the 1980's/1990's. They are now primarily used in the realm of web development, game development, and are also used in certain specialized industries like music.&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
=== OODSL compiler for FPGA ===&lt;br /&gt;
An object oriented domain specific compiler was developed for programming Field Programmable Gate Arrays.&amp;lt;ref&amp;gt;Object-Oriented Domain Specific Compilers for Programming FPGAs[http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&amp;amp;arnumber=920835&amp;amp;userType=inst&amp;amp;tag=1]&amp;lt;/ref&amp;gt; The compiler allows the hardware programmer to make use of object-oriented style while programming. The research paper claims that this way of programming the hardware reduces the design time several times and still result in an optimal performance.&lt;br /&gt;
&lt;br /&gt;
== Creating OODSL ==&lt;br /&gt;
When creating an OODSL, one can either choose to scratch from the scratch or use a tool that is already available to create the language. Creating a language from the scratch gives flexibility to the programmer to define it the way he wants to but it takes a lot of time. In general, some tools are used to create Domain Specific Languages. This is because it not only saves time but also helps to make the language easy to use.&lt;br /&gt;
=== Boo ===&lt;br /&gt;
Boo&amp;lt;ref&amp;gt;http://boo.codehaus.org/Home&amp;lt;/ref&amp;gt; is an open source object oriented language to create Domain Specific languages. Defining basic data structures like array, hash, variables etc are inherently supported in Boo and it makes creation of them easier. Although Boo is a statically typed language, these restrictions can be bent once in a while so that the type of objects can be found and manipulated in run time as well ([http://en.wikipedia.org/wiki/Duck_typing &amp;lt;code&amp;gt;Duck typing&amp;lt;/code&amp;gt;]).&lt;br /&gt;
&lt;br /&gt;
=== Visual Studio ===&lt;br /&gt;
Visual Studio has Domain-specific language tools that are designed to help the designer to build a language focusing on the language grammar and characteristics rather than internal details of the compiler.&amp;lt;ref&amp;gt;Domain specific development[http://www.domainspecificdevelopment.com/]&amp;lt;/ref&amp;gt; The tool shows visual tools that helps focus on the business requirements of the OODSL rather than worrying about the internals of its working.&lt;br /&gt;
&lt;br /&gt;
== OODSL vs. non-OODSL ==&lt;br /&gt;
When defining a DSL, choosing whether to go with a OODSL or a non-OODSL depends on several factors like the domain for which it is defined, existing DSLs for that domain etc.&lt;br /&gt;
&lt;br /&gt;
== Advantages and Disadvantages ==&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Varjun2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch1_1w9_av&amp;diff=64479</id>
		<title>CSC/ECE 517 Fall 2012/ch1 1w9 av</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch1_1w9_av&amp;diff=64479"/>
		<updated>2012-09-14T21:49:33Z</updated>

		<summary type="html">&lt;p&gt;Varjun2: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;p&amp;gt;An OODSL is a [http://en.wikipedia.org/wiki/Domain-specific_language&amp;lt;code&amp;gt;Domain-specific language&amp;lt;/code&amp;gt;] (DSL) language that exhibits characteristics that have traditionally been attributed to [http://en.wikipedia.org/wiki/Object-oriented_programming#OOP_languages&amp;lt;code&amp;gt;Object-Oriented Languages&amp;lt;/code&amp;gt;] &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Although OOP languages and Domain specific languages have been around for several years, OODSLs are relatively new.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
'''General purpose programming way of ordering hash browns at Waffle House'''&lt;br /&gt;
internal, external&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
OODSLs cannot be spoken about without first a brief introduction to Domain Specific Languages and the Object-Oriented programming paradigm. &lt;br /&gt;
&lt;br /&gt;
In a nutshell, DSL is a language that is specific to a particular domain. DSLs are different from general purpose programming languages like C++ and Java. They take advantage of the fact that there are groups of users who rather than communicating every single thing, are able to implicitly understand certain terms and notations. This makes communication much more efficient for such a group. Eg: 2 basketball fans will talk in basketball jargon. Not everyone will understand what zone defence, 3 pointers and jump ball mean. The jargon serves the specific purpose of easing communication between 2 basketball fans. Some would argue that DSLs have been around for a far longer time dating back to even before the advent of computers. Subway maps, electronics circuit diagrams all demonstrate properties of a DSL. Since then, DSLs have come a long way. Domain Specific Languages (DSLs), as they are spoken about now, have been around since the 1970's and their origin can be traced back to a tool called Draco.  Since Draco, computers have made it possible to design a whole host of other useful DSLs. Some of the more popular ones among them are SQL, Prolog, Verilog, HTML etc.&lt;br /&gt;
&lt;br /&gt;
Object-Oriented Programming (OOP) is a programming paradigm that tries to apply real world principles to make programming easier. OOP has been around since the 1950's. Starting with Simula and Smalltalk, OOP languages have come a long way since then, and has grown to become one of the most popular programming paradigms employed worldwide. Some of the modern object oriented languages include static languages like C++, Java, C#, and dynamic languages like Perl, Ruby etc.&lt;br /&gt;
&lt;br /&gt;
OODSLs, that bring out the features of both DSLs as well as OOP languages are a fairly recent invention. OODSLs have been around since the 1980's/1990's. They are now primarily used in the realm of web development, game development, and are also used in certain specialized industries like music.&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
=== OODSL compiler for FPGA ===&lt;br /&gt;
An object oriented domain specific compiler was developed for programming Field Programmable Gate Arrays.&amp;lt;ref&amp;gt;Object-Oriented Domain Specific Compilers for Programming FPGAs[http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&amp;amp;arnumber=920835&amp;amp;userType=inst&amp;amp;tag=1]&amp;lt;/ref&amp;gt; The compiler allows the hardware programmer to make use of object-oriented style while programming. The research paper claims that this way of programming the hardware reduces the design time several times and still result in an optimal performance.&lt;br /&gt;
&lt;br /&gt;
== Creating OODSL ==&lt;br /&gt;
When creating an OODSL, one can either choose to scratch from the scratch or use a tool that is already available to create the language. Creating a language from the scratch gives flexibility to the programmer to define it the way he wants to but it takes a lot of time. In general, some tools are used to create Domain Specific Languages. This is because it not only saves time but also helps to make the language easy to use.&lt;br /&gt;
=== Boo ===&lt;br /&gt;
Boo&amp;lt;ref&amp;gt;http://boo.codehaus.org/Home&amp;lt;/ref&amp;gt; is an open source object oriented language to create Domain Specific languages. Defining basic data structures like array, hash, variables etc are inherently supported in Boo and it makes creation of them easier. Although Boo is a statically typed language, these restrictions can be bent once in a while so that the type of objects can be found and manipulated in run time as well ([http://en.wikipedia.org/wiki/Duck_typing &amp;lt;code&amp;gt;Duck typing&amp;lt;/code&amp;gt;]).&lt;br /&gt;
&lt;br /&gt;
=== Visual Studio ===&lt;br /&gt;
Visual Studio has Domain-specific language tools that are designed to help the designer to build a language focusing on the language grammar and characteristics rather than internal details of the compiler.&amp;lt;ref&amp;gt;Domain specific development[http://www.domainspecificdevelopment.com/]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== OODSL vs. non-OODSL ==&lt;br /&gt;
When defining a DSL, choosing whether to go with a OODSL or a non-OODSL depends on several factors like the domain for which it is defined, existing DSLs for that domain etc.&lt;br /&gt;
&lt;br /&gt;
== Advantages and Disadvantages ==&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Varjun2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch1_1w9_av&amp;diff=64477</id>
		<title>CSC/ECE 517 Fall 2012/ch1 1w9 av</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch1_1w9_av&amp;diff=64477"/>
		<updated>2012-09-14T21:48:07Z</updated>

		<summary type="html">&lt;p&gt;Varjun2: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;p&amp;gt;An OODSL is a '''[[http://en.wikipedia.org/wiki/Domain-specific_language&amp;lt;code&amp;gt;Domain-specific language&amp;lt;/code&amp;gt;]]''' '''(DSL)''' language that exhibits characteristics that have traditionally been attributed to '''[[http://en.wikipedia.org/wiki/Object-oriented_programming#OOP_languages&amp;lt;code&amp;gt;Object-Oriented Languages&amp;lt;/code&amp;gt;]]''' &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Although OOP languages and Domain specific languages have been around for several years, OODSLs are relatively new.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
'''General purpose programming way of ordering hash browns at Waffle House'''&lt;br /&gt;
internal, external&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
OODSLs cannot be spoken about without first a brief introduction to Domain Specific Languages and the Object-Oriented programming paradigm. &lt;br /&gt;
&lt;br /&gt;
In a nutshell, DSL is a language that is specific to a particular domain. DSLs are different from general purpose programming languages like C++ and Java. They take advantage of the fact that there are groups of users who rather than communicating every single thing, are able to implicitly understand certain terms and notations. This makes communication much more efficient for such a group. Eg: 2 basketball fans will talk in basketball jargon. Not everyone will understand what zone defence, 3 pointers and jump ball mean. The jargon serves the specific purpose of easing communication between 2 basketball fans. Some would argue that DSLs have been around for a far longer time dating back to even before the advent of computers. Subway maps, electronics circuit diagrams all demonstrate properties of a DSL. Since then, DSLs have come a long way. Domain Specific Languages (DSLs), as they are spoken about now, have been around since the 1970's and their origin can be traced back to a tool called Draco.  Since Draco, computers have made it possible to design a whole host of other useful DSLs. Some of the more popular ones among them are SQL, Prolog, Verilog, HTML etc.&lt;br /&gt;
&lt;br /&gt;
Object-Oriented Programming (OOP) is a programming paradigm that tries to apply real world principles to make programming easier. OOP has been around since the 1950's. Starting with Simula and Smalltalk, OOP languages have come a long way since then, and has grown to become one of the most popular programming paradigms employed worldwide. Some of the modern object oriented languages include static languages like C++, Java, C#, and dynamic languages like Perl, Ruby etc.&lt;br /&gt;
&lt;br /&gt;
OODSLs, that bring out the features of both DSLs as well as OOP languages are a fairly recent invention. OODSLs have been around since the 1980's/1990's. They are now primarily used in the realm of web development, game development, and are also used in certain specialized industries like music.&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
=== OODSL compiler for FPGA ===&lt;br /&gt;
An object oriented domain specific compiler was developed for programming Field Programmable Gate Arrays.&amp;lt;ref&amp;gt;Object-Oriented Domain Specific Compilers for Programming FPGAs[http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&amp;amp;arnumber=920835&amp;amp;userType=inst&amp;amp;tag=1]&amp;lt;/ref&amp;gt; The compiler allows the hardware programmer to make use of object-oriented style while programming. The research paper claims that this way of programming the hardware reduces the design time several times and still result in an optimal performance.&lt;br /&gt;
&lt;br /&gt;
== Creating OODSL ==&lt;br /&gt;
When creating an OODSL, one can either choose to scratch from the scratch or use a tool that is already available to create the language. Creating a language from the scratch gives flexibility to the programmer to define it the way he wants to but it takes a lot of time. In general, some tools are used to create Domain Specific Languages. This is because it not only saves time but also helps to make the language easy to use.&lt;br /&gt;
=== Boo ===&lt;br /&gt;
Boo&amp;lt;ref&amp;gt;http://boo.codehaus.org/Home&amp;lt;/ref&amp;gt; is an open source object oriented language to create Domain Specific languages. Defining basic data structures like array, hash, variables etc are inherently supported in Boo and it makes creation of them easier. Although Boo is a statically typed language, these restrictions can be bent once in a while so that the type of objects can be found and manipulated in run time as well ([http://en.wikipedia.org/wiki/Duck_typing &amp;lt;code&amp;gt;Duck typing&amp;lt;/code&amp;gt;]).&lt;br /&gt;
&lt;br /&gt;
=== Visual Studio ===&lt;br /&gt;
Visual Studio has Domain-specific language tools that are designed to help the designer to build a language focusing on the language grammar and characteristics rather than internal details of the compiler.&amp;lt;ref&amp;gt;Domain specific development[http://www.domainspecificdevelopment.com/]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== OODSL vs. non-OODSL ==&lt;br /&gt;
When defining a DSL, choosing whether to go with a OODSL or a non-OODSL depends on several factors like the domain for which it is defined, existing DSLs for that domain etc.&lt;br /&gt;
&lt;br /&gt;
== Advantages and Disadvantages ==&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Varjun2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch1_1w9_av&amp;diff=64454</id>
		<title>CSC/ECE 517 Fall 2012/ch1 1w9 av</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch1_1w9_av&amp;diff=64454"/>
		<updated>2012-09-14T21:36:36Z</updated>

		<summary type="html">&lt;p&gt;Varjun2: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;p&amp;gt;An OODSL is a '''[[Domain-specific language]]''' '''(DSL)''' language that exhibits characteristics that have traditionally been attributed to '''[[Object-Oriented Languages]]''' &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Although OOP languages and Domain specific languages have been around for several years, OODSLs are relatively new.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
internal, external&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
OODSLs cannot be spoken about without first a brief introduction to Domain Specific Languages and the Object-Oriented programming paradigm. &lt;br /&gt;
&lt;br /&gt;
In a nutshell, DSL is a language that is specific to a particular domain. DSLs are different from general purpose programming languages like C++ and Java. They take advantage of the fact that there are groups of users who rather than communicating every single thing, are able to implicitly understand certain terms and notations. This makes communication much more efficient for such a group. Eg: 2 basketball fans will talk in basketball jargon. Not everyone will understand what zone defence, 3 pointers and jump ball mean. The jargon serves the specific purpose of easing communication between 2 basketball fans. Some would argue that DSLs have been around for a far longer time dating back to even before the advent of computers. Subway maps, electronics circuit diagrams all demonstrate properties of a DSL. Since then, DSLs have come a long way. Domain Specific Languages (DSLs), as they are spoken about now, have been around since the 1970's and their origin can be traced back to a tool called Draco.  Since Draco, computers have made it possible to design a whole host of other useful DSLs. Some of the more popular ones among them are SQL, Prolog, Verilog, HTML etc.&lt;br /&gt;
&lt;br /&gt;
Object-Oriented Programming (OOP) is a programming paradigm that tries to apply real world principles to make programming easier. OOP has been around since the 1950's. Starting with Simula and Smalltalk, OOP languages have come a long way since then, and has grown to become one of the most popular programming paradigms employed worldwide. Some of the modern object oriented languages include static languages like C++, Java, C#, and dynamic languages like Perl, Ruby etc.&lt;br /&gt;
&lt;br /&gt;
OODSLs, that bring out the features of both DSLs as well as OOP languages are a fairly recent invention. OODSLs have been around since the 1980's/1990's. They are now primarily used in the realm of web development, game development, and are also used in certain specialized industries like music.&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
=== OODSL compiler for FPGA ===&lt;br /&gt;
An object oriented domain specific compiler was developed for programming Field Programmable Gate Arrays.&amp;lt;ref&amp;gt;http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&amp;amp;arnumber=920835&amp;amp;userType=inst&amp;amp;tag=1&amp;lt;/ref&amp;gt; The compiler allows the hardware programmer to make use of object-oriented style while programming. The research paper claims that this way of programming the hardware reduces the design time several times and still result in an optimal performance.&lt;br /&gt;
&lt;br /&gt;
== Creating OODSL ==&lt;br /&gt;
When creating an OODSL, one can either choose to scratch from the scratch or use a tool that is already available to create the language. Creating a language from the scratch gives flexibility to the programmer to define it the way he wants to but it takes a lot of time. In general, some tools are used to create Domain Specific Languages. This is because it not only saves time but also helps to make the language easy to use.&lt;br /&gt;
=== Boo ===&lt;br /&gt;
Boo&amp;lt;ref&amp;gt;http://boo.codehaus.org/Home&amp;lt;/ref&amp;gt; is an open source object oriented language to create Domain Specific languages. Defining basic data structures like array, hash, variables etc are inherently supported in Boo and it makes creation of them easier. Although Boo is a statically typed language, these restrictions can be bent once in a while so that the type of objects can be found and manipulated in run time as well ([http://en.wikipedia.org/wiki/Duck_typing &amp;lt;code&amp;gt;Duck typing&amp;lt;/code&amp;gt;]).&lt;br /&gt;
&lt;br /&gt;
== OODSL vs. non-OODSL ==&lt;br /&gt;
When defining a DSL, choosing whether to go with a OODSL or a non-OODSL depends on several factors like the domain for which it is defined, existing DSLs for that domain etc.&lt;br /&gt;
&lt;br /&gt;
== Advantages and Disadvantages ==&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Varjun2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch1_1w9_av&amp;diff=64444</id>
		<title>CSC/ECE 517 Fall 2012/ch1 1w9 av</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch1_1w9_av&amp;diff=64444"/>
		<updated>2012-09-14T21:29:25Z</updated>

		<summary type="html">&lt;p&gt;Varjun2: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;p&amp;gt;An OODSL is a '''[[Domain-specific language]]''' '''(DSL)''' language that exhibits characteristics that have traditionally been attributed to '''[[Object-Oriented Languages]]''' &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Although OOP languages and Domain specific languages have been around for several years, OODSLs are relatively new.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
OODSLs cannot be spoken about without first a brief introduction to Domain Specific Languages and the Object-Oriented programming paradigm. &lt;br /&gt;
&lt;br /&gt;
In a nutshell, DSL is a language that is specific to a particular domain. DSLs are different from general purpose programming languages like C++ and Java. They take advantage of the fact that there are groups of users who rather than communicating every single thing, are able to implicitly understand certain terms and notations. This makes communication much more efficient for such a group. Eg: 2 basketball fans will talk in basketball jargon. Not everyone will understand what zone defence, 3 pointers and jump ball mean. The jargon serves the specific purpose of easing communication between 2 basketball fans. Some would argue that DSLs have been around for a far longer time dating back to even before the advent of computers. Subway maps, electronics circuit diagrams all demonstrate properties of a DSL. Since then, DSLs have come a long way. Domain Specific Languages (DSLs), as they are spoken about now, have been around since the 1970's and their origin can be traced back to a tool called Draco.  Since Draco, computers have made it possible to design a whole host of other useful DSLs. Some of the more popular ones among them are SQL, Prolog, Verilog, HTML etc.&lt;br /&gt;
&lt;br /&gt;
Object-Oriented Programming (OOP) is a programming paradigm that tries to apply real world principles to make programming easier. OOP has been around since the 1950's. Starting with Simula and Smalltalk, OOP languages have come a long way since then, and has grown to become one of the most popular programming paradigms employed worldwide. Some of the modern object oriented languages include static languages like C++, Java, C#, and dynamic languages like Perl, Ruby etc.&lt;br /&gt;
&lt;br /&gt;
OODSLs, that bring out the features of both DSLs as well as OOP languages are a fairly recent invention. OODSLs have been around since the 1980's/1990's. They are now primarily used in the realm of web development, game development, and are also used in certain specialized industries like music.&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
=== OODSL compiler for FPGA ===&lt;br /&gt;
An object oriented domain specific compiler was developed for programming Field Programmable Gate Arrays. The compiler allows the hardware programmer to make use of object-oriented style while programming. The research paper claims that this way of programming the hardware reduces the design time several times and still result in an optimal performance.&lt;br /&gt;
&lt;br /&gt;
== Creating OODSL ==&lt;br /&gt;
When creating an OODSL, one can either choose to scratch from the scratch or use a tool that is already available to create the language. Creating a language from the scratch gives flexibility to the programmer to define it the way he wants to but it takes a lot of time. In general, some tools are used to create Domain Specific Languages. This is because it not only saves time but also helps to make the language easy to use.&lt;br /&gt;
=== Boo ===&lt;br /&gt;
Boo is an open source object oriented language to create Domain Specific languages. Defining basic data structures like array, hash, variables etc are inherently supported in Boo and it makes creation of them easier. Although Boo is a statically typed language, these restrictions can be bent once in a while so that the type of objects can be found and manipulated in run time as well ([http://en.wikipedia.org/wiki/Duck_typing &amp;lt;code&amp;gt;Duck typing&amp;lt;/code&amp;gt;]).&lt;br /&gt;
&lt;br /&gt;
== OODSL vs. non-OODSL ==&lt;br /&gt;
When defining a DSL, choosing whether to go with a OODSL or a non-OODSL depends on several factors like the domain for which it is defined, existing DSLs for that domain etc.&lt;br /&gt;
&lt;br /&gt;
== Advantages and Disadvantages ==&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
* Object-Oriented Domain Specific Compilers for Programming FPGAs[http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&amp;amp;arnumber=920835&amp;amp;userType=inst&amp;amp;tag=1]&lt;/div&gt;</summary>
		<author><name>Varjun2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch1_1w9_av&amp;diff=64413</id>
		<title>CSC/ECE 517 Fall 2012/ch1 1w9 av</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch1_1w9_av&amp;diff=64413"/>
		<updated>2012-09-14T21:16:22Z</updated>

		<summary type="html">&lt;p&gt;Varjun2: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;p&amp;gt;An OODSL is a '''[[Domain-specific language]]''' '''(DSL)''' language that exhibits characteristics that have traditionally been attributed to '''[[Object-Oriented Languages]]''' &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Although OOP languages and Domain specific languages have been around for several years, OODSLs are relatively new.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
OODSLs cannot be spoken about without first a brief introduction to Domain Specific Languages and the Object-Oriented programming paradigm. &lt;br /&gt;
&lt;br /&gt;
In a nutshell, DSL is a language that is specific to a particular domain. DSLs are different from general purpose programming languages like C++ and Java. They take advantage of the fact that there are groups of users who rather than communicating every single thing, are able to implicitly understand certain terms and notations. This makes communication much more efficient for such a group. Eg: 2 basketball fans will talk in basketball jargon. Not everyone will understand what zone defence, 3 pointers and jump ball mean. The jargon serves the specific purpose of easing communication between 2 basketball fans. Some would argue that DSLs have been around for a far longer time dating back to even before the advent of computers. Subway maps, electronics circuit diagrams all demonstrate properties of a DSL. Since then, DSLs have come a long way. Domain Specific Languages (DSLs), as they are spoken about now, have been around since the 1970's and their origin can be traced back to a tool called Draco.  Since Draco, computers have made it possible to design a whole host of other useful DSLs. Some of the more popular ones among them are SQL, Prolog, Verilog, HTML etc.&lt;br /&gt;
&lt;br /&gt;
Object-Oriented Programming (OOP) is a programming paradigm that tries to apply real world principles to make programming easier. OOP has been around since the 1950's. &lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
=== OODSL compiler for FPGA ===&lt;br /&gt;
An object oriented domain specific compiler was developed for programming Field Programmable Gate Arrays. The compiler allows the hardware programmer to make use of object-oriented style while programming. The research paper claims that this way of programming the hardware reduces the design time several times and still result in an optimal performance.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== OODSL vs. non-OODSL ==&lt;br /&gt;
When defining a DSL, choosing whether to go with a OODSL or a non-OODSL depends on several factors like the domain for which it is defined, existing DSLs for that domain etc.&lt;br /&gt;
&lt;br /&gt;
== Advantages and Disadvantages ==&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
* [http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&amp;amp;arnumber=920835&amp;amp;userType=inst&amp;amp;tag=1]&lt;/div&gt;</summary>
		<author><name>Varjun2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch1_1w9_av&amp;diff=64377</id>
		<title>CSC/ECE 517 Fall 2012/ch1 1w9 av</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch1_1w9_av&amp;diff=64377"/>
		<updated>2012-09-14T20:51:25Z</updated>

		<summary type="html">&lt;p&gt;Varjun2: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;p&amp;gt;An OODSL is a '''[[Domain-specific language]]''' '''(DSL)''' language that exhibits characteristics that have traditionally been attributed to '''[[Object-Oriented Languages]]''' &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Although OOP languages and Domain specific languages have been around for several years, OODSLs are relatively new.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
=== OODSL compiler for FPGA ===&lt;br /&gt;
An object oriented domain specific compiler was developed for programming Field Programmable Gate Arrays. The compiler allows the hardware programmer to make use of object-oriented style while programming. The research paper claims that this way of programming the hardware reduces the design time several times and still result in an optimal performance.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== OODSL vs. non-OODSL ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Advantages and Disadvantages ==&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
* [http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&amp;amp;arnumber=920835&amp;amp;userType=inst&amp;amp;tag=1]&lt;/div&gt;</summary>
		<author><name>Varjun2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch1_1w9_av&amp;diff=64371</id>
		<title>CSC/ECE 517 Fall 2012/ch1 1w9 av</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch1_1w9_av&amp;diff=64371"/>
		<updated>2012-09-14T20:49:40Z</updated>

		<summary type="html">&lt;p&gt;Varjun2: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;p&amp;gt;'''[Domain-specific object-oriented languages (OODSLs)]''' &lt;br /&gt;
&lt;br /&gt;
An OODSL is a '''[[Domain-specific language]]''' '''(DSL)'''[http://en.wikipedia.org/wiki/Domain-specific_language] language that exhibits characteristics that have traditionally been attributed to '''[[Object-Oriented Languages]]''' &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
=== OODSL compiler for FPGA ===&lt;br /&gt;
&lt;br /&gt;
== OODSL vs. non-OODSL ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Advantages and Disadvantages ==&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;/div&gt;</summary>
		<author><name>Varjun2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch1_1w9_av&amp;diff=64370</id>
		<title>CSC/ECE 517 Fall 2012/ch1 1w9 av</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch1_1w9_av&amp;diff=64370"/>
		<updated>2012-09-14T20:47:34Z</updated>

		<summary type="html">&lt;p&gt;Varjun2: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[http://en.wikipedia.org/wiki/Domain-specific_language]&amp;lt;p&amp;gt;'''Domain-specific object-oriented languages (OODSLs)''' &lt;br /&gt;
&lt;br /&gt;
An OODSL is a '''[[Domain-specific language]]''' '''(DSL)''' language that exhibits characteristics that have traditionally been attributed to '''[[Object-Oriented Languages]]''' &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
=== OODSL compiler for FPGA ===&lt;br /&gt;
&lt;br /&gt;
== OODSL vs. non-OODSL ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Advantages and Disadvantages ==&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;/div&gt;</summary>
		<author><name>Varjun2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch1_1w9_av&amp;diff=64369</id>
		<title>CSC/ECE 517 Fall 2012/ch1 1w9 av</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch1_1w9_av&amp;diff=64369"/>
		<updated>2012-09-14T20:46:54Z</updated>

		<summary type="html">&lt;p&gt;Varjun2: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;p&amp;gt;'''Domain-specific object-oriented languages (OODSLs)''' &lt;br /&gt;
&lt;br /&gt;
An OODSL is a '''[[Domain-specific language]]''' '''(DSL)''' language that exhibits characteristics that have traditionally been attributed to '''[[Object-Oriented Languages]]''' &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
=== OODSL compiler for FPGA ===&lt;br /&gt;
&lt;br /&gt;
== OODSL vs. non-OODSL ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Advantages and Disadvantages ==&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;/div&gt;</summary>
		<author><name>Varjun2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch1_1w9_av&amp;diff=64361</id>
		<title>CSC/ECE 517 Fall 2012/ch1 1w9 av</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch1_1w9_av&amp;diff=64361"/>
		<updated>2012-09-14T20:38:00Z</updated>

		<summary type="html">&lt;p&gt;Varjun2: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;p&amp;gt;'''Domain-specific object-oriented languages''' - This page describes the domain specific object oriented languages, what languages are currently in use and how useful they are.&lt;br /&gt;
Object oriented domain specific languages are programming languages that are specific to some particular domain incorporating object oriented concepts. They differ from traditional languages in that they can be used only in the domain they are defined for and not for other general purposes.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&lt;br /&gt;
== OODSL vs. non-OODSL ==&lt;br /&gt;
hey ssup?&lt;br /&gt;
&lt;br /&gt;
== Advantages and Disadvantages ==&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;/div&gt;</summary>
		<author><name>Varjun2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012&amp;diff=64348</id>
		<title>CSC/ECE 517 Fall 2012</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012&amp;diff=64348"/>
		<updated>2012-09-14T20:20:50Z</updated>

		<summary type="html">&lt;p&gt;Varjun2: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;*[[CSC/ECE 517 Fall 2012/ch1 n xx]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch1 1w1 rk]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch1 1w20 pp]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch1 1w5 su]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch1 1w6 pp]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch1 1w7 am]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch1 1w8 aa]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch1 1w9 av]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch1 1w10 pk]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch1 1w14 gv]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch1 1w17 ir]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch1 1w18 as]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch1 1w22 an]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch1 1w21 aa]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch1 1w21 wi]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch1 1w31 sa]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch1a 1w16 br]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch1 1w23 as]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch1 1w24 nr]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch1 1w15 rt]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch1 1w3 pl]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch1 1w32 cm]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch1 1w27 ms]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch1 1w29 sa]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch1 1w33 op]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch1 1w19 sa]]&lt;/div&gt;</summary>
		<author><name>Varjun2</name></author>
	</entry>
</feed>