<?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=SteelerNation</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=SteelerNation"/>
	<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=Special:Contributions/SteelerNation"/>
	<updated>2026-05-22T01:19:52Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.41.0</generator>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_22_SN&amp;diff=29775</id>
		<title>CSC/ECE 517 Fall 2009/wiki3 22 SN</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_22_SN&amp;diff=29775"/>
		<updated>2009-11-19T19:56:29Z</updated>

		<summary type="html">&lt;p&gt;SteelerNation: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Clone Detection and Clone Manipulation&lt;br /&gt;
The DRY principle says that a particular code fragment should not be repeated more than once in a program. But it happens. And when it does, it is good to be able to find the multiple code &amp;quot;clones.&amp;quot; A variety of tools have been designed for this, and some of them even allow joint editing of the clones. Survey the techniques for dealing with the problem, and compare the effectiveness with refactoring (e.g., Extract Method).&lt;br /&gt;
&lt;br /&gt;
'''Template'''&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>SteelerNation</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_9_SN&amp;diff=26076</id>
		<title>CSC/ECE 517 Fall 2009/wiki2 9 SN</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_9_SN&amp;diff=26076"/>
		<updated>2009-10-14T20:38:47Z</updated>

		<summary type="html">&lt;p&gt;SteelerNation: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Aspect-Oriented Programming==&lt;br /&gt;
&lt;br /&gt;
Traditional [http://en.wikipedia.org/wiki/Software_development software development] has focused on developing systems into units of primary functionality, while recognizing that there are other issues of concern that do not fit well into the primary [http://www.merriam-webster.com/dictionary/decomposition decomposition]. This process leaves it to the programmers to code [http://en.wikipedia.org/wiki/Modular_programming modules] corresponding to the primary functionality and to make sure that all other issues of concern are addressed in the code wherever appropriate. Programmers need to keep in mind all the things that need to be done, how to deal with each issue, the problems associated with the possible interactions, and the execution of the right behavior at the right time. When all these things are taken into account, this often results in serious issues being raised during the development and maintenance of a large software system.&lt;br /&gt;
&lt;br /&gt;
Aspect-Oriented programming focuses on the identification, specification, and representation of crosscutting concerns and their modularization into separate functional units as well as their automated composition into a working system.&lt;br /&gt;
&lt;br /&gt;
==So What exactly is AOP?==&lt;br /&gt;
&lt;br /&gt;
===Introduction===&lt;br /&gt;
&lt;br /&gt;
Software design processes and programming languages exist in a mutually supporting relationship. [http://en.wikipedia.org/wiki/Engineering_design_process Design processes] break a system down into smaller and smaller units. [http://en.wikipedia.org/wiki/Programming_language Programming languages] provide mechanisms that allow the programmer to define abstractions of system sub-units, and then compose those abstractions in different ways to produce the overall system. A design process and a programming language work well together when the programming language provides abstraction and composition mechanisms that cleanly support the kinds of units the design process breaks the system into. From this perspective, many existing programming languages, including object-oriented languages, procedural languages, and functional languages, can be seen as having a common root in that their key abstraction and composition mechanisms are all rooted in some form of generalized procedure.&lt;br /&gt;
&lt;br /&gt;
Aspect-oriented programming is a programming process that entails breaking down a program into distinct parts or what are called 'concerns.' This process is called [http://en.wikipedia.org/wiki/Separation_of_concerns separation of concerns]. Often times these concerns overlap and this is called [http://en.wikipedia.org/wiki/Cross-cutting_concern crosscutting concerns]. All AOP implementations have some crosscutting expressions that encapsulate each concern in one place. The difference between implementations lies in the power, safety, and usability of the constructs provided.&lt;br /&gt;
&lt;br /&gt;
===Terminology===&lt;br /&gt;
&lt;br /&gt;
====Cross-cutting concerns ====&lt;br /&gt;
&lt;br /&gt;
Even though most classes in an OO model will perform a single, specific function, they often share common, secondary requirements with other classes. Even though the primary functionality of each class is very different, the code needed to perform the secondary functionality is often identical.&lt;br /&gt;
&lt;br /&gt;
====Advice====&lt;br /&gt;
&lt;br /&gt;
This is the additional code that you want to apply to your existing model.&lt;br /&gt;
&lt;br /&gt;
====Point-cut====&lt;br /&gt;
&lt;br /&gt;
This is the term given to the point of execution in the application at which cross-cutting concern needs to be applied.&lt;br /&gt;
&lt;br /&gt;
====Aspect====&lt;br /&gt;
&lt;br /&gt;
The combination of the point-cut and the advice is termed an aspect. &lt;br /&gt;
&lt;br /&gt;
===Overview===&lt;br /&gt;
&lt;br /&gt;
AOP encapsulates crosscutting concerns into a single program module called an aspect, which can add behavior to a program and verify or change its static structure. The aspect specifies join points in the running program using point-cuts, and permits advice code to run around the join point, to join the advice behavior to the program semantics. The aspect can also declare members and super-types of other classes if the declarations are type-safe, binary-compatible and respect access rules. The combination of advice and inter-type declarations enables one to implement the correct associations and behaviors for many objects in one aspect.&lt;br /&gt;
&lt;br /&gt;
Mechanisms for defining and composing abstractions are essential elements of programming languages. The design style supported by the abstraction mechanisms of most current languages is one of breaking a system down into parametrized components that can be called upon to perform a function.&lt;br /&gt;
But many systems have properties that don't necessarily align with the system's functional components, such as failure handling, persistence, communication, replication, coordination, memory management, or real-time constraints, and tend to cut across groups of functional components.&lt;br /&gt;
&lt;br /&gt;
While they can be thought about and analyzed relatively separately from the basic functionality, programming them using current component-oriented languages tends to result in these aspects being spread throughout the code. The source code becomes a tangled mess of instructions for different purposes.&lt;br /&gt;
&lt;br /&gt;
This phenomenon is at the heart of much needless complexity in existing software systems. A number of researchers have begun working on approaches to this problem that allow programmers to express each of a system's aspects of concern in a separate and natural form, and then automatically combine those separate descriptions into a final executable form. These approaches have been called aspect-oriented programming.&lt;br /&gt;
&lt;br /&gt;
==OOP and AOP at a Glance==&lt;br /&gt;
[http://en.wikipedia.org/wiki/Object-oriented_programming Object-oriented programming] has become the mainstream programming paradigm where real world problems are decomposed into objects that abstract behavior and data in a single unit.&lt;br /&gt;
&lt;br /&gt;
OOP encourages software re-use by providing design and language constructs for modularity, encapsulation, inheritance, and polymorphism. Although OOP has met great success in modeling and implementing complex software systems, it has its problems. Practical experience with large projects has shown that programmers may face some problems with maintaining their code because it becomes increasingly difficult to cleanly separate concerns into modules. An attempt to do a minor change in the program design may require several updates to a large number of unrelated modules.&lt;br /&gt;
&lt;br /&gt;
AOP is a way to modularize code that is typically repeated and sandwiched all over in an object-oriented system. AOP is used for separating crosscutting concerns into single units called aspects. With AOP, we start by implementing our project using our OO language , and then we deal separately with crosscutting concerns in our code by implementing aspects. Finally, both the code and aspects are combined into a final executable form using an aspect weaver. As a result, a single aspect can contribute to the implementation of a number of methods, modules, or objects, increasing both re-usability and maintainability of the code.&lt;br /&gt;
[[Image:Aop.jpg]]&lt;br /&gt;
&lt;br /&gt;
==AspectJ==&lt;br /&gt;
&lt;br /&gt;
AspectJ is a seamless aspect-oriented extension to the Java programming language that enables clean modularization of these 'crosscutting concerns'. Some aspects of system implementation, such as logging, error handling, standards enforcement and feature variations are notoriously difficult to implement in a modular way. The result is that code is tangled across a system and leads to quality, productivity and maintenance problems.&lt;br /&gt;
&lt;br /&gt;
AspectJ is a simple, practical, and compatible aspect-oriented extension to Java.&lt;br /&gt;
&lt;br /&gt;
*Upward compatibility — all legal Java programs must be legal AspectJ programs.&lt;br /&gt;
&lt;br /&gt;
*Platform compatibility — all legal AspectJ programs must run on standard Java virtual machines.&lt;br /&gt;
&lt;br /&gt;
*Tool compatibility — it must be possible to extend existing tools to support AspectJ in a natural way; this includes IDEs, documentation tools, and design tools.&lt;br /&gt;
&lt;br /&gt;
*Programmer compatibility — Programming with AspectJ must feel like a natural extension of programming with Java.&lt;br /&gt;
&lt;br /&gt;
'''Example'''&lt;br /&gt;
&lt;br /&gt;
The best way to understand AspectJ is through example. Lets say we have a simple Hello World program.&lt;br /&gt;
&lt;br /&gt;
  public class TestClass &lt;br /&gt;
  {&lt;br /&gt;
    public void sayHello () &lt;br /&gt;
    {&lt;br /&gt;
      System.out.println (&amp;quot;Hello, AOP&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    public void sayAnyThing (String s) &lt;br /&gt;
    {&lt;br /&gt;
      System.out.println (s);&lt;br /&gt;
    }&lt;br /&gt;
    public static void main (String[] args) &lt;br /&gt;
    {&lt;br /&gt;
      sayHello ();&lt;br /&gt;
      sayAnyThing (&amp;quot;ok&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
Let's assume that we want to use aspects to do the following modifications:&lt;br /&gt;
&lt;br /&gt;
1. We would like to print a message before and after any call to the TestClass.sayHello() method.&lt;br /&gt;
&lt;br /&gt;
2. We need to test that the argument of the TestClass.sayAnyThing() method is at least three characters.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  public aspect MyAspect &lt;br /&gt;
  {&lt;br /&gt;
   public pointcut sayMethodCall (): call (public void TestClass.say*() );&lt;br /&gt;
   public pointcut sayMethodCallArg (String str): call&lt;br /&gt;
                     (public void TestClass.sayAnyThing (String)) &amp;amp;&amp;amp; args(str);&lt;br /&gt;
   before(): sayMethodCall() &lt;br /&gt;
   {&lt;br /&gt;
     System.out.println(&amp;quot;\n TestClass.&amp;quot; +&lt;br /&gt;
       thisJoinPointStaticPart.getSignature().getName() + &amp;quot;start...&amp;quot; );&lt;br /&gt;
   }&lt;br /&gt;
   after(): sayMethodCall() &lt;br /&gt;
   {&lt;br /&gt;
     System.out.println(&amp;quot;\n TestClass.&amp;quot; +&lt;br /&gt;
       thisJoinPointStaticPart.getSignature().getName() + &amp;quot; end...&amp;quot;);&lt;br /&gt;
   }&lt;br /&gt;
   before(String str): sayMethodCallArg(str) &lt;br /&gt;
   {&lt;br /&gt;
     if (str .length() &amp;lt; 3) &lt;br /&gt;
     {&lt;br /&gt;
       System.out.println (&amp;quot;Error: I can't say words less than 3 characters&amp;quot;);&lt;br /&gt;
       return;&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
==AspectR==&lt;br /&gt;
&lt;br /&gt;
AspectR is the AOP Language for Ruby. It was modeled after and resembles a lot like AspectJ.&lt;br /&gt;
&lt;br /&gt;
There are some differences which AspectR does not have that AspectJ does:&lt;br /&gt;
&lt;br /&gt;
*Join points: method/constructor called, method/constructor executes (?), exception handler executes&lt;br /&gt;
&lt;br /&gt;
*Most of the point-cut designator primitives&lt;br /&gt;
&lt;br /&gt;
*Composition of point-cut designators&lt;br /&gt;
&lt;br /&gt;
*'around' advices&lt;br /&gt;
&lt;br /&gt;
*precedence/specificity among advices/aspects&lt;br /&gt;
&lt;br /&gt;
*reflection by sending join-point object to advices with context of join point etc &lt;br /&gt;
&lt;br /&gt;
*control-flow based crosscutting&lt;br /&gt;
&lt;br /&gt;
AspectR lets a module wrap any number of methods in other classes  with the advice methods of the module.&lt;br /&gt;
&lt;br /&gt;
'''Example'''&lt;br /&gt;
&lt;br /&gt;
  require 'aspectr'&lt;br /&gt;
  include AspectR&lt;br /&gt;
  class MyAspect &amp;lt; Aspect&lt;br /&gt;
        def someAdviceMethod(method, object, exitstatus, *args)&lt;br /&gt;
             ...&lt;br /&gt;
        end&lt;br /&gt;
        ... some other advice methods ...&lt;br /&gt;
  end&lt;br /&gt;
  ma = MyAspect.new&lt;br /&gt;
  ma.wrap(someClassorObject, :preAdvice, :postAdvice, ... methods to wrap...) or&lt;br /&gt;
  ma.wrap(someClassorObject, :preAdvice, :postAdvice, /patternToWrap/) or&lt;br /&gt;
  AspectR.wrap_classes(ma, :preAdvice, :postAdvice,&lt;br /&gt;
  [Class1, Class2], ...methods to wrap...)&lt;br /&gt;
&lt;br /&gt;
Advice methods are passed a variable number of parameters.&lt;br /&gt;
&lt;br /&gt;
The first parameter is the name of the method currently being wrapped.&lt;br /&gt;
&lt;br /&gt;
The second parameter is the object receiving the method call.&lt;br /&gt;
&lt;br /&gt;
The third parameter is the exit/return status:&lt;br /&gt;
*Array with return value(s) if the method exited normally&lt;br /&gt;
*True if the method exited with an exception&lt;br /&gt;
*Nil if the method hasn't yet exited&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
Aspect-Oriented Programming an emerging software development technology that seeks new modularization of software systems. The technology allows for a more robust and sound software system. Not only has the benefits and clarity of Object-Oriented programming, but AOP provides an easier way to correlate different aspects of a software system into one single solution. Often too many programs and software systems are incomplete or not ideal because one aspect is treated greater than the other. AOP attempts to balance the aspects in such a way that the software system has a much more functional and reusable architecture. &lt;br /&gt;
&lt;br /&gt;
==Links==&lt;br /&gt;
&lt;br /&gt;
1. [http://www.developer.com/design/article.php/3308941/Aspect-Oriented-Programming.htm AOP Developer]&lt;br /&gt;
&lt;br /&gt;
2. [http://www.ccs.neu.edu/home/lieber/AOP.html AOP and Adaptive Programming]&lt;br /&gt;
&lt;br /&gt;
3. [http://wiki.java.net/bin/view/Javapedia/AspectOrientedProgramming Java AOP]&lt;br /&gt;
&lt;br /&gt;
4. [http://www.aspectprogramming.com/ Aspect Programming]&lt;br /&gt;
&lt;br /&gt;
5. [http://oreilly.com/catalog/9780596006549 AspectJ]&lt;br /&gt;
&lt;br /&gt;
6. [http://aspectr.sourceforge.net/ AspectR]&lt;br /&gt;
&lt;br /&gt;
7. [http://www.objectmentor.com/resources/articles/AOP_in_Ruby.pdf AOP in Ruby]&lt;/div&gt;</summary>
		<author><name>SteelerNation</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_9_SN&amp;diff=26075</id>
		<title>CSC/ECE 517 Fall 2009/wiki2 9 SN</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_9_SN&amp;diff=26075"/>
		<updated>2009-10-14T20:30:41Z</updated>

		<summary type="html">&lt;p&gt;SteelerNation: /* AspectR */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Aspect-Oriented Programming==&lt;br /&gt;
&lt;br /&gt;
Traditional [http://en.wikipedia.org/wiki/Software_development software development] has focused on developing systems into units of primary functionality, while recognizing that there are other issues of concern that do not fit well into the primary [http://www.merriam-webster.com/dictionary/decomposition decomposition]. This process leaves it to the programmers to code [http://en.wikipedia.org/wiki/Modular_programming modules] corresponding to the primary functionality and to make sure that all other issues of concern are addressed in the code wherever appropriate. Programmers need to keep in mind all the things that need to be done, how to deal with each issue, the problems associated with the possible interactions, and the execution of the right behavior at the right time. When all these things are taken into account, this often results in serious issues being raised during the development and maintenance of a large software system.&lt;br /&gt;
&lt;br /&gt;
Aspect-Oriented programming focuses on the identification, specification, and representation of crosscutting concerns and their modularization into separate functional units as well as their automated composition into a working system.&lt;br /&gt;
&lt;br /&gt;
==So What exactly is AOP?==&lt;br /&gt;
&lt;br /&gt;
===Introduction===&lt;br /&gt;
&lt;br /&gt;
Software design processes and programming languages exist in a mutually supporting relationship. [http://en.wikipedia.org/wiki/Engineering_design_process Design processes] break a system down into smaller and smaller units. [http://en.wikipedia.org/wiki/Programming_language Programming languages] provide mechanisms that allow the programmer to define abstractions of system sub-units, and then compose those abstractions in different ways to produce the overall system. A design process and a programming language work well together when the programming language provides abstraction and composition mechanisms that cleanly support the kinds of units the design process breaks the system into. From this perspective, many existing programming languages, including object-oriented languages, procedural languages, and functional languages, can be seen as having a common root in that their key abstraction and composition mechanisms are all rooted in some form of generalized procedure.&lt;br /&gt;
&lt;br /&gt;
Aspect-oriented programming is a programming process that entails breaking down a program into distinct parts or what are called 'concerns.' This process is called [http://en.wikipedia.org/wiki/Separation_of_concerns separation of concerns]. Often times these concerns overlap and this is called [http://en.wikipedia.org/wiki/Cross-cutting_concern crosscutting concerns]. All AOP implementations have some crosscutting expressions that encapsulate each concern in one place. The difference between implementations lies in the power, safety, and usability of the constructs provided.&lt;br /&gt;
&lt;br /&gt;
===Terminology===&lt;br /&gt;
&lt;br /&gt;
====Cross-cutting concerns ====&lt;br /&gt;
&lt;br /&gt;
Even though most classes in an OO model will perform a single, specific function, they often share common, secondary requirements with other classes. Even though the primary functionality of each class is very different, the code needed to perform the secondary functionality is often identical.&lt;br /&gt;
&lt;br /&gt;
====Advice====&lt;br /&gt;
&lt;br /&gt;
This is the additional code that you want to apply to your existing model.&lt;br /&gt;
&lt;br /&gt;
====Point-cut====&lt;br /&gt;
&lt;br /&gt;
This is the term given to the point of execution in the application at which cross-cutting concern needs to be applied.&lt;br /&gt;
&lt;br /&gt;
====Aspect====&lt;br /&gt;
&lt;br /&gt;
The combination of the point-cut and the advice is termed an aspect. &lt;br /&gt;
&lt;br /&gt;
===Overview===&lt;br /&gt;
&lt;br /&gt;
AOP encapsulates crosscutting concerns into a single program module called an aspect, which can add behavior to a program and verify or change its static structure. The aspect specifies join points in the running program using point-cuts, and permits advice code to run around the join point, to join the advice behavior to the program semantics. The aspect can also declare members and super-types of other classes if the declarations are type-safe, binary-compatible and respect access rules. The combination of advice and inter-type declarations enables one to implement the correct associations and behaviors for many objects in one aspect.&lt;br /&gt;
&lt;br /&gt;
Mechanisms for defining and composing abstractions are essential elements of programming languages. The design style supported by the abstraction mechanisms of most current languages is one of breaking a system down into parametrized components that can be called upon to perform a function.&lt;br /&gt;
But many systems have properties that don't necessarily align with the system's functional components, such as failure handling, persistence, communication, replication, coordination, memory management, or real-time constraints, and tend to cut across groups of functional components.&lt;br /&gt;
&lt;br /&gt;
While they can be thought about and analyzed relatively separately from the basic functionality, programming them using current component-oriented languages tends to result in these aspects being spread throughout the code. The source code becomes a tangled mess of instructions for different purposes.&lt;br /&gt;
&lt;br /&gt;
This phenomenon is at the heart of much needless complexity in existing software systems. A number of researchers have begun working on approaches to this problem that allow programmers to express each of a system's aspects of concern in a separate and natural form, and then automatically combine those separate descriptions into a final executable form. These approaches have been called aspect-oriented programming.&lt;br /&gt;
&lt;br /&gt;
==OOP and AOP at a Glance==&lt;br /&gt;
Object-oriented programming has become the mainstream programming paradigm where real world problems are decomposed into objects that abstract behavior and data in a single unit.&lt;br /&gt;
&lt;br /&gt;
OOP encourages software re-use by providing design and language constructs for modularity, encapsulation, inheritance, and polymorphism. Although OOP has met great success in modeling and implementing complex software systems, it has its problems. Practical experience with large projects has shown that programmers may face some problems with maintaining their code because it becomes increasingly difficult to cleanly separate concerns into modules. An attempt to do a minor change in the program design may require several updates to a large number of unrelated modules.&lt;br /&gt;
&lt;br /&gt;
AOP is a way to modularize code that is typically repeated and sandwiched all over in an object-oriented system. AOP is used for separating crosscutting concerns into single units called aspects. With AOP, we start by implementing our project using our OO language , and then we deal separately with crosscutting concerns in our code by implementing aspects. Finally, both the code and aspects are combined into a final executable form using an aspect weaver. As a result, a single aspect can contribute to the implementation of a number of methods, modules, or objects, increasing both reusability and maintainability of the code.&lt;br /&gt;
[[Image:Aop.jpg]]&lt;br /&gt;
&lt;br /&gt;
==AspectJ==&lt;br /&gt;
&lt;br /&gt;
AspectJ is a seamless aspect-oriented extension to the Java programming language that enables clean modularization of these 'crosscutting concerns'. Some aspects of system implementation, such as logging, error handling, standards enforcement and feature variations are notoriously difficult to implement in a modular way. The result is that code is tangled across a system and leads to quality, productivity and maintenance problems.&lt;br /&gt;
&lt;br /&gt;
AspectJ is a simple, practical, and compatible aspect-oriented extension to Java.&lt;br /&gt;
&lt;br /&gt;
*Upward compatibility — all legal Java programs must be legal AspectJ programs.&lt;br /&gt;
&lt;br /&gt;
*Platform compatibility — all legal AspectJ programs must run on standard Java virtual machines.&lt;br /&gt;
&lt;br /&gt;
*Tool compatibility — it must be possible to extend existing tools to support AspectJ in a natural way; this includes IDEs, documentation tools, and design tools.&lt;br /&gt;
&lt;br /&gt;
*Programmer compatibility — Programming with AspectJ must feel like a natural extension of programming with Java.&lt;br /&gt;
&lt;br /&gt;
'''Example'''&lt;br /&gt;
&lt;br /&gt;
The best way to understand AspectJ is through example. Lets say we have a simple Hello World program.&lt;br /&gt;
&lt;br /&gt;
  public class TestClass &lt;br /&gt;
  {&lt;br /&gt;
    public void sayHello () &lt;br /&gt;
    {&lt;br /&gt;
      System.out.println (&amp;quot;Hello, AOP&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    public void sayAnyThing (String s) &lt;br /&gt;
    {&lt;br /&gt;
      System.out.println (s);&lt;br /&gt;
    }&lt;br /&gt;
    public static void main (String[] args) &lt;br /&gt;
    {&lt;br /&gt;
      sayHello ();&lt;br /&gt;
      sayAnyThing (&amp;quot;ok&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
Let's assume that we want to use aspects to do the following modifications:&lt;br /&gt;
&lt;br /&gt;
1. We would like to print a message before and after any call to the TestClass.sayHello() method.&lt;br /&gt;
&lt;br /&gt;
2. We need to test that the argument of the TestClass.sayAnyThing() method is at least three characters.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  public aspect MyAspect &lt;br /&gt;
  {&lt;br /&gt;
   public pointcut sayMethodCall (): call (public void TestClass.say*() );&lt;br /&gt;
   public pointcut sayMethodCallArg (String str): call&lt;br /&gt;
                     (public void TestClass.sayAnyThing (String)) &amp;amp;&amp;amp; args(str);&lt;br /&gt;
   before(): sayMethodCall() &lt;br /&gt;
   {&lt;br /&gt;
     System.out.println(&amp;quot;\n TestClass.&amp;quot; +&lt;br /&gt;
       thisJoinPointStaticPart.getSignature().getName() +&lt;br /&gt;
       &amp;quot;start...&amp;quot; );&lt;br /&gt;
   }&lt;br /&gt;
   after(): sayMethodCall() &lt;br /&gt;
   {&lt;br /&gt;
     System.out.println(&amp;quot;\n TestClass.&amp;quot; +&lt;br /&gt;
       thisJoinPointStaticPart.getSignature().getName() +&lt;br /&gt;
       &amp;quot; end...&amp;quot;);&lt;br /&gt;
   }&lt;br /&gt;
   before(String str): sayMethodCallArg(str) &lt;br /&gt;
   {&lt;br /&gt;
     if (str .length() &amp;lt; 3) &lt;br /&gt;
     {&lt;br /&gt;
       System.out.println (&amp;quot;Error: I can't say words less than 3 characters&amp;quot;);&lt;br /&gt;
       return;&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
==AspectR==&lt;br /&gt;
&lt;br /&gt;
AspectR is the AOP Language for Ruby. It was modeled after and resembles a lot like AspectJ.&lt;br /&gt;
&lt;br /&gt;
There are some differences which AspectR does not have that AspectJ does:&lt;br /&gt;
&lt;br /&gt;
*Join points: method/constructor called, method/constructor executes (?), exception handler executes&lt;br /&gt;
&lt;br /&gt;
*Most of the point-cut designator primitives&lt;br /&gt;
&lt;br /&gt;
*Composition of point-cut designators&lt;br /&gt;
&lt;br /&gt;
*'around' advices&lt;br /&gt;
&lt;br /&gt;
*precedence/specificity among advices/aspects&lt;br /&gt;
&lt;br /&gt;
*reflection by sending join-point object to advices with context of join point etc &lt;br /&gt;
&lt;br /&gt;
*control-flow based crosscutting&lt;br /&gt;
&lt;br /&gt;
AspectR lets a module wrap any number of methods in other classes  with the advice methods of the module.&lt;br /&gt;
&lt;br /&gt;
'''Example'''&lt;br /&gt;
&lt;br /&gt;
  require 'aspectr'&lt;br /&gt;
  include AspectR&lt;br /&gt;
  class MyAspect &amp;lt; Aspect&lt;br /&gt;
        def someAdviceMethod(method, object, exitstatus, *args)&lt;br /&gt;
             ...&lt;br /&gt;
        end&lt;br /&gt;
        ... some other advice methods ...&lt;br /&gt;
  end&lt;br /&gt;
  ma = MyAspect.new&lt;br /&gt;
  ma.wrap(someClassorObject, :preAdvice, :postAdvice, ... methods to wrap...) or&lt;br /&gt;
  ma.wrap(someClassorObject, :preAdvice, :postAdvice, /patternToWrap/) or&lt;br /&gt;
  AspectR.wrap_classes(ma, :preAdvice, :postAdvice,&lt;br /&gt;
  [Class1, Class2], ...methods to wrap...)&lt;br /&gt;
&lt;br /&gt;
Advice methods are passed a variable number of parameters.&lt;br /&gt;
&lt;br /&gt;
The first parameter is the name of the method currently being wrapped.&lt;br /&gt;
&lt;br /&gt;
The second parameter is the object receiving the method call.&lt;br /&gt;
&lt;br /&gt;
The third parameter is the exit/return status:&lt;br /&gt;
*Array with return value(s) if the method exited normally&lt;br /&gt;
*True if the method exited with an exception&lt;br /&gt;
*Nil if the method hasn't yet exited&lt;br /&gt;
&lt;br /&gt;
==Links==&lt;br /&gt;
&lt;br /&gt;
1. [http://www.developer.com/design/article.php/3308941/Aspect-Oriented-Programming.htm AOP Developer]&lt;br /&gt;
&lt;br /&gt;
2. [http://www.ccs.neu.edu/home/lieber/AOP.html AOP and Adaptive Programming]&lt;br /&gt;
&lt;br /&gt;
3. [http://wiki.java.net/bin/view/Javapedia/AspectOrientedProgramming Java AOP]&lt;br /&gt;
&lt;br /&gt;
4. [http://www.aspectprogramming.com/ Aspect Programming]&lt;br /&gt;
&lt;br /&gt;
5. [http://oreilly.com/catalog/9780596006549 AspectJ]&lt;br /&gt;
&lt;br /&gt;
6. [http://aspectr.sourceforge.net/ AspectR]&lt;br /&gt;
&lt;br /&gt;
7. [http://www.objectmentor.com/resources/articles/AOP_in_Ruby.pdf AOP in Ruby]&lt;/div&gt;</summary>
		<author><name>SteelerNation</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_9_SN&amp;diff=26074</id>
		<title>CSC/ECE 517 Fall 2009/wiki2 9 SN</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_9_SN&amp;diff=26074"/>
		<updated>2009-10-14T20:24:03Z</updated>

		<summary type="html">&lt;p&gt;SteelerNation: /* Links */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Aspect-Oriented Programming==&lt;br /&gt;
&lt;br /&gt;
Traditional [http://en.wikipedia.org/wiki/Software_development software development] has focused on developing systems into units of primary functionality, while recognizing that there are other issues of concern that do not fit well into the primary [http://www.merriam-webster.com/dictionary/decomposition decomposition]. This process leaves it to the programmers to code [http://en.wikipedia.org/wiki/Modular_programming modules] corresponding to the primary functionality and to make sure that all other issues of concern are addressed in the code wherever appropriate. Programmers need to keep in mind all the things that need to be done, how to deal with each issue, the problems associated with the possible interactions, and the execution of the right behavior at the right time. When all these things are taken into account, this often results in serious issues being raised during the development and maintenance of a large software system.&lt;br /&gt;
&lt;br /&gt;
Aspect-Oriented programming focuses on the identification, specification, and representation of crosscutting concerns and their modularization into separate functional units as well as their automated composition into a working system.&lt;br /&gt;
&lt;br /&gt;
==So What exactly is AOP?==&lt;br /&gt;
&lt;br /&gt;
===Introduction===&lt;br /&gt;
&lt;br /&gt;
Software design processes and programming languages exist in a mutually supporting relationship. [http://en.wikipedia.org/wiki/Engineering_design_process Design processes] break a system down into smaller and smaller units. [http://en.wikipedia.org/wiki/Programming_language Programming languages] provide mechanisms that allow the programmer to define abstractions of system sub-units, and then compose those abstractions in different ways to produce the overall system. A design process and a programming language work well together when the programming language provides abstraction and composition mechanisms that cleanly support the kinds of units the design process breaks the system into. From this perspective, many existing programming languages, including object-oriented languages, procedural languages, and functional languages, can be seen as having a common root in that their key abstraction and composition mechanisms are all rooted in some form of generalized procedure.&lt;br /&gt;
&lt;br /&gt;
Aspect-oriented programming is a programming process that entails breaking down a program into distinct parts or what are called 'concerns.' This process is called [http://en.wikipedia.org/wiki/Separation_of_concerns separation of concerns]. Often times these concerns overlap and this is called [http://en.wikipedia.org/wiki/Cross-cutting_concern crosscutting concerns]. All AOP implementations have some crosscutting expressions that encapsulate each concern in one place. The difference between implementations lies in the power, safety, and usability of the constructs provided.&lt;br /&gt;
&lt;br /&gt;
===Terminology===&lt;br /&gt;
&lt;br /&gt;
====Cross-cutting concerns ====&lt;br /&gt;
&lt;br /&gt;
Even though most classes in an OO model will perform a single, specific function, they often share common, secondary requirements with other classes. Even though the primary functionality of each class is very different, the code needed to perform the secondary functionality is often identical.&lt;br /&gt;
&lt;br /&gt;
====Advice====&lt;br /&gt;
&lt;br /&gt;
This is the additional code that you want to apply to your existing model.&lt;br /&gt;
&lt;br /&gt;
====Point-cut====&lt;br /&gt;
&lt;br /&gt;
This is the term given to the point of execution in the application at which cross-cutting concern needs to be applied.&lt;br /&gt;
&lt;br /&gt;
====Aspect====&lt;br /&gt;
&lt;br /&gt;
The combination of the point-cut and the advice is termed an aspect. &lt;br /&gt;
&lt;br /&gt;
===Overview===&lt;br /&gt;
&lt;br /&gt;
AOP encapsulates crosscutting concerns into a single program module called an aspect, which can add behavior to a program and verify or change its static structure. The aspect specifies join points in the running program using point-cuts, and permits advice code to run around the join point, to join the advice behavior to the program semantics. The aspect can also declare members and super-types of other classes if the declarations are type-safe, binary-compatible and respect access rules. The combination of advice and inter-type declarations enables one to implement the correct associations and behaviors for many objects in one aspect.&lt;br /&gt;
&lt;br /&gt;
Mechanisms for defining and composing abstractions are essential elements of programming languages. The design style supported by the abstraction mechanisms of most current languages is one of breaking a system down into parametrized components that can be called upon to perform a function.&lt;br /&gt;
But many systems have properties that don't necessarily align with the system's functional components, such as failure handling, persistence, communication, replication, coordination, memory management, or real-time constraints, and tend to cut across groups of functional components.&lt;br /&gt;
&lt;br /&gt;
While they can be thought about and analyzed relatively separately from the basic functionality, programming them using current component-oriented languages tends to result in these aspects being spread throughout the code. The source code becomes a tangled mess of instructions for different purposes.&lt;br /&gt;
&lt;br /&gt;
This phenomenon is at the heart of much needless complexity in existing software systems. A number of researchers have begun working on approaches to this problem that allow programmers to express each of a system's aspects of concern in a separate and natural form, and then automatically combine those separate descriptions into a final executable form. These approaches have been called aspect-oriented programming.&lt;br /&gt;
&lt;br /&gt;
==OOP and AOP at a Glance==&lt;br /&gt;
Object-oriented programming has become the mainstream programming paradigm where real world problems are decomposed into objects that abstract behavior and data in a single unit.&lt;br /&gt;
&lt;br /&gt;
OOP encourages software re-use by providing design and language constructs for modularity, encapsulation, inheritance, and polymorphism. Although OOP has met great success in modeling and implementing complex software systems, it has its problems. Practical experience with large projects has shown that programmers may face some problems with maintaining their code because it becomes increasingly difficult to cleanly separate concerns into modules. An attempt to do a minor change in the program design may require several updates to a large number of unrelated modules.&lt;br /&gt;
&lt;br /&gt;
AOP is a way to modularize code that is typically repeated and sandwiched all over in an object-oriented system. AOP is used for separating crosscutting concerns into single units called aspects. With AOP, we start by implementing our project using our OO language , and then we deal separately with crosscutting concerns in our code by implementing aspects. Finally, both the code and aspects are combined into a final executable form using an aspect weaver. As a result, a single aspect can contribute to the implementation of a number of methods, modules, or objects, increasing both reusability and maintainability of the code.&lt;br /&gt;
[[Image:Aop.jpg]]&lt;br /&gt;
&lt;br /&gt;
==AspectJ==&lt;br /&gt;
&lt;br /&gt;
AspectJ is a seamless aspect-oriented extension to the Java programming language that enables clean modularization of these 'crosscutting concerns'. Some aspects of system implementation, such as logging, error handling, standards enforcement and feature variations are notoriously difficult to implement in a modular way. The result is that code is tangled across a system and leads to quality, productivity and maintenance problems.&lt;br /&gt;
&lt;br /&gt;
AspectJ is a simple, practical, and compatible aspect-oriented extension to Java.&lt;br /&gt;
&lt;br /&gt;
*Upward compatibility — all legal Java programs must be legal AspectJ programs.&lt;br /&gt;
&lt;br /&gt;
*Platform compatibility — all legal AspectJ programs must run on standard Java virtual machines.&lt;br /&gt;
&lt;br /&gt;
*Tool compatibility — it must be possible to extend existing tools to support AspectJ in a natural way; this includes IDEs, documentation tools, and design tools.&lt;br /&gt;
&lt;br /&gt;
*Programmer compatibility — Programming with AspectJ must feel like a natural extension of programming with Java.&lt;br /&gt;
&lt;br /&gt;
'''Example'''&lt;br /&gt;
&lt;br /&gt;
The best way to understand AspectJ is through example. Lets say we have a simple Hello World program.&lt;br /&gt;
&lt;br /&gt;
  public class TestClass &lt;br /&gt;
  {&lt;br /&gt;
    public void sayHello () &lt;br /&gt;
    {&lt;br /&gt;
      System.out.println (&amp;quot;Hello, AOP&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    public void sayAnyThing (String s) &lt;br /&gt;
    {&lt;br /&gt;
      System.out.println (s);&lt;br /&gt;
    }&lt;br /&gt;
    public static void main (String[] args) &lt;br /&gt;
    {&lt;br /&gt;
      sayHello ();&lt;br /&gt;
      sayAnyThing (&amp;quot;ok&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
Let's assume that we want to use aspects to do the following modifications:&lt;br /&gt;
&lt;br /&gt;
1. We would like to print a message before and after any call to the TestClass.sayHello() method.&lt;br /&gt;
&lt;br /&gt;
2. We need to test that the argument of the TestClass.sayAnyThing() method is at least three characters.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  public aspect MyAspect &lt;br /&gt;
  {&lt;br /&gt;
   public pointcut sayMethodCall (): call (public void TestClass.say*() );&lt;br /&gt;
   public pointcut sayMethodCallArg (String str): call&lt;br /&gt;
                     (public void TestClass.sayAnyThing (String)) &amp;amp;&amp;amp; args(str);&lt;br /&gt;
   before(): sayMethodCall() &lt;br /&gt;
   {&lt;br /&gt;
     System.out.println(&amp;quot;\n TestClass.&amp;quot; +&lt;br /&gt;
       thisJoinPointStaticPart.getSignature().getName() +&lt;br /&gt;
       &amp;quot;start...&amp;quot; );&lt;br /&gt;
   }&lt;br /&gt;
   after(): sayMethodCall() &lt;br /&gt;
   {&lt;br /&gt;
     System.out.println(&amp;quot;\n TestClass.&amp;quot; +&lt;br /&gt;
       thisJoinPointStaticPart.getSignature().getName() +&lt;br /&gt;
       &amp;quot; end...&amp;quot;);&lt;br /&gt;
   }&lt;br /&gt;
   before(String str): sayMethodCallArg(str) &lt;br /&gt;
   {&lt;br /&gt;
     if (str .length() &amp;lt; 3) &lt;br /&gt;
     {&lt;br /&gt;
       System.out.println (&amp;quot;Error: I can't say words less than 3 characters&amp;quot;);&lt;br /&gt;
       return;&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
==AspectR==&lt;br /&gt;
&lt;br /&gt;
AspectR is the AOP Language for Ruby. It was modeled after and resembles a lot like AspectJ.&lt;br /&gt;
&lt;br /&gt;
There are some differences which AspectR does not have that AspectJ does:&lt;br /&gt;
&lt;br /&gt;
*Join points: method/constructor called, method/constructor executes (?), exception handler executes&lt;br /&gt;
&lt;br /&gt;
*Most of the point-cut designator primitives&lt;br /&gt;
&lt;br /&gt;
*Composition of point-cut designators&lt;br /&gt;
&lt;br /&gt;
*'around' advices&lt;br /&gt;
&lt;br /&gt;
*precedence/specificity among advices/aspects&lt;br /&gt;
&lt;br /&gt;
*reflection by sending join-point object to advices with context of join point etc &lt;br /&gt;
&lt;br /&gt;
*control-flow based crosscutting&lt;br /&gt;
&lt;br /&gt;
===EXAMPLE CODE of ASPECTR – (Not Done Yet)===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Links==&lt;br /&gt;
&lt;br /&gt;
1. [http://www.developer.com/design/article.php/3308941/Aspect-Oriented-Programming.htm AOP Developer]&lt;br /&gt;
&lt;br /&gt;
2. [http://www.ccs.neu.edu/home/lieber/AOP.html AOP and Adaptive Programming]&lt;br /&gt;
&lt;br /&gt;
3. [http://wiki.java.net/bin/view/Javapedia/AspectOrientedProgramming Java AOP]&lt;br /&gt;
&lt;br /&gt;
4. [http://www.aspectprogramming.com/ Aspect Programming]&lt;br /&gt;
&lt;br /&gt;
5. [http://oreilly.com/catalog/9780596006549 AspectJ]&lt;br /&gt;
&lt;br /&gt;
6. [http://aspectr.sourceforge.net/ AspectR]&lt;br /&gt;
&lt;br /&gt;
7. [http://www.objectmentor.com/resources/articles/AOP_in_Ruby.pdf AOP in Ruby]&lt;/div&gt;</summary>
		<author><name>SteelerNation</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_9_SN&amp;diff=26073</id>
		<title>CSC/ECE 517 Fall 2009/wiki2 9 SN</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_9_SN&amp;diff=26073"/>
		<updated>2009-10-14T20:20:48Z</updated>

		<summary type="html">&lt;p&gt;SteelerNation: /* AspectJ */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Aspect-Oriented Programming==&lt;br /&gt;
&lt;br /&gt;
Traditional [http://en.wikipedia.org/wiki/Software_development software development] has focused on developing systems into units of primary functionality, while recognizing that there are other issues of concern that do not fit well into the primary [http://www.merriam-webster.com/dictionary/decomposition decomposition]. This process leaves it to the programmers to code [http://en.wikipedia.org/wiki/Modular_programming modules] corresponding to the primary functionality and to make sure that all other issues of concern are addressed in the code wherever appropriate. Programmers need to keep in mind all the things that need to be done, how to deal with each issue, the problems associated with the possible interactions, and the execution of the right behavior at the right time. When all these things are taken into account, this often results in serious issues being raised during the development and maintenance of a large software system.&lt;br /&gt;
&lt;br /&gt;
Aspect-Oriented programming focuses on the identification, specification, and representation of crosscutting concerns and their modularization into separate functional units as well as their automated composition into a working system.&lt;br /&gt;
&lt;br /&gt;
==So What exactly is AOP?==&lt;br /&gt;
&lt;br /&gt;
===Introduction===&lt;br /&gt;
&lt;br /&gt;
Software design processes and programming languages exist in a mutually supporting relationship. [http://en.wikipedia.org/wiki/Engineering_design_process Design processes] break a system down into smaller and smaller units. [http://en.wikipedia.org/wiki/Programming_language Programming languages] provide mechanisms that allow the programmer to define abstractions of system sub-units, and then compose those abstractions in different ways to produce the overall system. A design process and a programming language work well together when the programming language provides abstraction and composition mechanisms that cleanly support the kinds of units the design process breaks the system into. From this perspective, many existing programming languages, including object-oriented languages, procedural languages, and functional languages, can be seen as having a common root in that their key abstraction and composition mechanisms are all rooted in some form of generalized procedure.&lt;br /&gt;
&lt;br /&gt;
Aspect-oriented programming is a programming process that entails breaking down a program into distinct parts or what are called 'concerns.' This process is called [http://en.wikipedia.org/wiki/Separation_of_concerns separation of concerns]. Often times these concerns overlap and this is called [http://en.wikipedia.org/wiki/Cross-cutting_concern crosscutting concerns]. All AOP implementations have some crosscutting expressions that encapsulate each concern in one place. The difference between implementations lies in the power, safety, and usability of the constructs provided.&lt;br /&gt;
&lt;br /&gt;
===Terminology===&lt;br /&gt;
&lt;br /&gt;
====Cross-cutting concerns ====&lt;br /&gt;
&lt;br /&gt;
Even though most classes in an OO model will perform a single, specific function, they often share common, secondary requirements with other classes. Even though the primary functionality of each class is very different, the code needed to perform the secondary functionality is often identical.&lt;br /&gt;
&lt;br /&gt;
====Advice====&lt;br /&gt;
&lt;br /&gt;
This is the additional code that you want to apply to your existing model.&lt;br /&gt;
&lt;br /&gt;
====Point-cut====&lt;br /&gt;
&lt;br /&gt;
This is the term given to the point of execution in the application at which cross-cutting concern needs to be applied.&lt;br /&gt;
&lt;br /&gt;
====Aspect====&lt;br /&gt;
&lt;br /&gt;
The combination of the point-cut and the advice is termed an aspect. &lt;br /&gt;
&lt;br /&gt;
===Overview===&lt;br /&gt;
&lt;br /&gt;
AOP encapsulates crosscutting concerns into a single program module called an aspect, which can add behavior to a program and verify or change its static structure. The aspect specifies join points in the running program using point-cuts, and permits advice code to run around the join point, to join the advice behavior to the program semantics. The aspect can also declare members and super-types of other classes if the declarations are type-safe, binary-compatible and respect access rules. The combination of advice and inter-type declarations enables one to implement the correct associations and behaviors for many objects in one aspect.&lt;br /&gt;
&lt;br /&gt;
Mechanisms for defining and composing abstractions are essential elements of programming languages. The design style supported by the abstraction mechanisms of most current languages is one of breaking a system down into parametrized components that can be called upon to perform a function.&lt;br /&gt;
But many systems have properties that don't necessarily align with the system's functional components, such as failure handling, persistence, communication, replication, coordination, memory management, or real-time constraints, and tend to cut across groups of functional components.&lt;br /&gt;
&lt;br /&gt;
While they can be thought about and analyzed relatively separately from the basic functionality, programming them using current component-oriented languages tends to result in these aspects being spread throughout the code. The source code becomes a tangled mess of instructions for different purposes.&lt;br /&gt;
&lt;br /&gt;
This phenomenon is at the heart of much needless complexity in existing software systems. A number of researchers have begun working on approaches to this problem that allow programmers to express each of a system's aspects of concern in a separate and natural form, and then automatically combine those separate descriptions into a final executable form. These approaches have been called aspect-oriented programming.&lt;br /&gt;
&lt;br /&gt;
==OOP and AOP at a Glance==&lt;br /&gt;
Object-oriented programming has become the mainstream programming paradigm where real world problems are decomposed into objects that abstract behavior and data in a single unit.&lt;br /&gt;
&lt;br /&gt;
OOP encourages software re-use by providing design and language constructs for modularity, encapsulation, inheritance, and polymorphism. Although OOP has met great success in modeling and implementing complex software systems, it has its problems. Practical experience with large projects has shown that programmers may face some problems with maintaining their code because it becomes increasingly difficult to cleanly separate concerns into modules. An attempt to do a minor change in the program design may require several updates to a large number of unrelated modules.&lt;br /&gt;
&lt;br /&gt;
AOP is a way to modularize code that is typically repeated and sandwiched all over in an object-oriented system. AOP is used for separating crosscutting concerns into single units called aspects. With AOP, we start by implementing our project using our OO language , and then we deal separately with crosscutting concerns in our code by implementing aspects. Finally, both the code and aspects are combined into a final executable form using an aspect weaver. As a result, a single aspect can contribute to the implementation of a number of methods, modules, or objects, increasing both reusability and maintainability of the code.&lt;br /&gt;
[[Image:Aop.jpg]]&lt;br /&gt;
&lt;br /&gt;
==AspectJ==&lt;br /&gt;
&lt;br /&gt;
AspectJ is a seamless aspect-oriented extension to the Java programming language that enables clean modularization of these 'crosscutting concerns'. Some aspects of system implementation, such as logging, error handling, standards enforcement and feature variations are notoriously difficult to implement in a modular way. The result is that code is tangled across a system and leads to quality, productivity and maintenance problems.&lt;br /&gt;
&lt;br /&gt;
AspectJ is a simple, practical, and compatible aspect-oriented extension to Java.&lt;br /&gt;
&lt;br /&gt;
*Upward compatibility — all legal Java programs must be legal AspectJ programs.&lt;br /&gt;
&lt;br /&gt;
*Platform compatibility — all legal AspectJ programs must run on standard Java virtual machines.&lt;br /&gt;
&lt;br /&gt;
*Tool compatibility — it must be possible to extend existing tools to support AspectJ in a natural way; this includes IDEs, documentation tools, and design tools.&lt;br /&gt;
&lt;br /&gt;
*Programmer compatibility — Programming with AspectJ must feel like a natural extension of programming with Java.&lt;br /&gt;
&lt;br /&gt;
'''Example'''&lt;br /&gt;
&lt;br /&gt;
The best way to understand AspectJ is through example. Lets say we have a simple Hello World program.&lt;br /&gt;
&lt;br /&gt;
  public class TestClass &lt;br /&gt;
  {&lt;br /&gt;
    public void sayHello () &lt;br /&gt;
    {&lt;br /&gt;
      System.out.println (&amp;quot;Hello, AOP&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    public void sayAnyThing (String s) &lt;br /&gt;
    {&lt;br /&gt;
      System.out.println (s);&lt;br /&gt;
    }&lt;br /&gt;
    public static void main (String[] args) &lt;br /&gt;
    {&lt;br /&gt;
      sayHello ();&lt;br /&gt;
      sayAnyThing (&amp;quot;ok&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
Let's assume that we want to use aspects to do the following modifications:&lt;br /&gt;
&lt;br /&gt;
1. We would like to print a message before and after any call to the TestClass.sayHello() method.&lt;br /&gt;
&lt;br /&gt;
2. We need to test that the argument of the TestClass.sayAnyThing() method is at least three characters.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  public aspect MyAspect &lt;br /&gt;
  {&lt;br /&gt;
   public pointcut sayMethodCall (): call (public void TestClass.say*() );&lt;br /&gt;
   public pointcut sayMethodCallArg (String str): call&lt;br /&gt;
                     (public void TestClass.sayAnyThing (String)) &amp;amp;&amp;amp; args(str);&lt;br /&gt;
   before(): sayMethodCall() &lt;br /&gt;
   {&lt;br /&gt;
     System.out.println(&amp;quot;\n TestClass.&amp;quot; +&lt;br /&gt;
       thisJoinPointStaticPart.getSignature().getName() +&lt;br /&gt;
       &amp;quot;start...&amp;quot; );&lt;br /&gt;
   }&lt;br /&gt;
   after(): sayMethodCall() &lt;br /&gt;
   {&lt;br /&gt;
     System.out.println(&amp;quot;\n TestClass.&amp;quot; +&lt;br /&gt;
       thisJoinPointStaticPart.getSignature().getName() +&lt;br /&gt;
       &amp;quot; end...&amp;quot;);&lt;br /&gt;
   }&lt;br /&gt;
   before(String str): sayMethodCallArg(str) &lt;br /&gt;
   {&lt;br /&gt;
     if (str .length() &amp;lt; 3) &lt;br /&gt;
     {&lt;br /&gt;
       System.out.println (&amp;quot;Error: I can't say words less than 3 characters&amp;quot;);&lt;br /&gt;
       return;&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
==AspectR==&lt;br /&gt;
&lt;br /&gt;
AspectR is the AOP Language for Ruby. It was modeled after and resembles a lot like AspectJ.&lt;br /&gt;
&lt;br /&gt;
There are some differences which AspectR does not have that AspectJ does:&lt;br /&gt;
&lt;br /&gt;
*Join points: method/constructor called, method/constructor executes (?), exception handler executes&lt;br /&gt;
&lt;br /&gt;
*Most of the point-cut designator primitives&lt;br /&gt;
&lt;br /&gt;
*Composition of point-cut designators&lt;br /&gt;
&lt;br /&gt;
*'around' advices&lt;br /&gt;
&lt;br /&gt;
*precedence/specificity among advices/aspects&lt;br /&gt;
&lt;br /&gt;
*reflection by sending join-point object to advices with context of join point etc &lt;br /&gt;
&lt;br /&gt;
*control-flow based crosscutting&lt;br /&gt;
&lt;br /&gt;
===EXAMPLE CODE of ASPECTR – (Not Done Yet)===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Links==&lt;br /&gt;
&lt;br /&gt;
1. [http://www.developer.com/design/article.php/3308941/Aspect-Oriented-Programming.htm AOP Developer]&lt;br /&gt;
&lt;br /&gt;
2. [http://www.ccs.neu.edu/home/lieber/AOP.html AOP and Adaptive Programming]&lt;br /&gt;
&lt;br /&gt;
3. [http://wiki.java.net/bin/view/Javapedia/AspectOrientedProgramming Java AOP]&lt;br /&gt;
&lt;br /&gt;
4. [http://www.aspectprogramming.com/ Aspect Programming]&lt;br /&gt;
&lt;br /&gt;
5. [http://oreilly.com/catalog/9780596006549 AspectJ]&lt;br /&gt;
&lt;br /&gt;
6. [http://aspectr.sourceforge.net/ AspectR]&lt;/div&gt;</summary>
		<author><name>SteelerNation</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_9_SN&amp;diff=26072</id>
		<title>CSC/ECE 517 Fall 2009/wiki2 9 SN</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_9_SN&amp;diff=26072"/>
		<updated>2009-10-14T20:11:19Z</updated>

		<summary type="html">&lt;p&gt;SteelerNation: /* Links */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Aspect-Oriented Programming==&lt;br /&gt;
&lt;br /&gt;
Traditional [http://en.wikipedia.org/wiki/Software_development software development] has focused on developing systems into units of primary functionality, while recognizing that there are other issues of concern that do not fit well into the primary [http://www.merriam-webster.com/dictionary/decomposition decomposition]. This process leaves it to the programmers to code [http://en.wikipedia.org/wiki/Modular_programming modules] corresponding to the primary functionality and to make sure that all other issues of concern are addressed in the code wherever appropriate. Programmers need to keep in mind all the things that need to be done, how to deal with each issue, the problems associated with the possible interactions, and the execution of the right behavior at the right time. When all these things are taken into account, this often results in serious issues being raised during the development and maintenance of a large software system.&lt;br /&gt;
&lt;br /&gt;
Aspect-Oriented programming focuses on the identification, specification, and representation of crosscutting concerns and their modularization into separate functional units as well as their automated composition into a working system.&lt;br /&gt;
&lt;br /&gt;
==So What exactly is AOP?==&lt;br /&gt;
&lt;br /&gt;
===Introduction===&lt;br /&gt;
&lt;br /&gt;
Software design processes and programming languages exist in a mutually supporting relationship. [http://en.wikipedia.org/wiki/Engineering_design_process Design processes] break a system down into smaller and smaller units. [http://en.wikipedia.org/wiki/Programming_language Programming languages] provide mechanisms that allow the programmer to define abstractions of system sub-units, and then compose those abstractions in different ways to produce the overall system. A design process and a programming language work well together when the programming language provides abstraction and composition mechanisms that cleanly support the kinds of units the design process breaks the system into. From this perspective, many existing programming languages, including object-oriented languages, procedural languages, and functional languages, can be seen as having a common root in that their key abstraction and composition mechanisms are all rooted in some form of generalized procedure.&lt;br /&gt;
&lt;br /&gt;
Aspect-oriented programming is a programming process that entails breaking down a program into distinct parts or what are called 'concerns.' This process is called [http://en.wikipedia.org/wiki/Separation_of_concerns separation of concerns]. Often times these concerns overlap and this is called [http://en.wikipedia.org/wiki/Cross-cutting_concern crosscutting concerns]. All AOP implementations have some crosscutting expressions that encapsulate each concern in one place. The difference between implementations lies in the power, safety, and usability of the constructs provided.&lt;br /&gt;
&lt;br /&gt;
===Terminology===&lt;br /&gt;
&lt;br /&gt;
====Cross-cutting concerns ====&lt;br /&gt;
&lt;br /&gt;
Even though most classes in an OO model will perform a single, specific function, they often share common, secondary requirements with other classes. Even though the primary functionality of each class is very different, the code needed to perform the secondary functionality is often identical.&lt;br /&gt;
&lt;br /&gt;
====Advice====&lt;br /&gt;
&lt;br /&gt;
This is the additional code that you want to apply to your existing model.&lt;br /&gt;
&lt;br /&gt;
====Point-cut====&lt;br /&gt;
&lt;br /&gt;
This is the term given to the point of execution in the application at which cross-cutting concern needs to be applied.&lt;br /&gt;
&lt;br /&gt;
====Aspect====&lt;br /&gt;
&lt;br /&gt;
The combination of the point-cut and the advice is termed an aspect. &lt;br /&gt;
&lt;br /&gt;
===Overview===&lt;br /&gt;
&lt;br /&gt;
AOP encapsulates crosscutting concerns into a single program module called an aspect, which can add behavior to a program and verify or change its static structure. The aspect specifies join points in the running program using point-cuts, and permits advice code to run around the join point, to join the advice behavior to the program semantics. The aspect can also declare members and super-types of other classes if the declarations are type-safe, binary-compatible and respect access rules. The combination of advice and inter-type declarations enables one to implement the correct associations and behaviors for many objects in one aspect.&lt;br /&gt;
&lt;br /&gt;
Mechanisms for defining and composing abstractions are essential elements of programming languages. The design style supported by the abstraction mechanisms of most current languages is one of breaking a system down into parametrized components that can be called upon to perform a function.&lt;br /&gt;
But many systems have properties that don't necessarily align with the system's functional components, such as failure handling, persistence, communication, replication, coordination, memory management, or real-time constraints, and tend to cut across groups of functional components.&lt;br /&gt;
&lt;br /&gt;
While they can be thought about and analyzed relatively separately from the basic functionality, programming them using current component-oriented languages tends to result in these aspects being spread throughout the code. The source code becomes a tangled mess of instructions for different purposes.&lt;br /&gt;
&lt;br /&gt;
This phenomenon is at the heart of much needless complexity in existing software systems. A number of researchers have begun working on approaches to this problem that allow programmers to express each of a system's aspects of concern in a separate and natural form, and then automatically combine those separate descriptions into a final executable form. These approaches have been called aspect-oriented programming.&lt;br /&gt;
&lt;br /&gt;
==OOP and AOP at a Glance==&lt;br /&gt;
Object-oriented programming has become the mainstream programming paradigm where real world problems are decomposed into objects that abstract behavior and data in a single unit.&lt;br /&gt;
&lt;br /&gt;
OOP encourages software re-use by providing design and language constructs for modularity, encapsulation, inheritance, and polymorphism. Although OOP has met great success in modeling and implementing complex software systems, it has its problems. Practical experience with large projects has shown that programmers may face some problems with maintaining their code because it becomes increasingly difficult to cleanly separate concerns into modules. An attempt to do a minor change in the program design may require several updates to a large number of unrelated modules.&lt;br /&gt;
&lt;br /&gt;
AOP is a way to modularize code that is typically repeated and sandwiched all over in an object-oriented system. AOP is used for separating crosscutting concerns into single units called aspects. With AOP, we start by implementing our project using our OO language , and then we deal separately with crosscutting concerns in our code by implementing aspects. Finally, both the code and aspects are combined into a final executable form using an aspect weaver. As a result, a single aspect can contribute to the implementation of a number of methods, modules, or objects, increasing both reusability and maintainability of the code.&lt;br /&gt;
[[Image:Aop.jpg]]&lt;br /&gt;
&lt;br /&gt;
==AspectJ==&lt;br /&gt;
&lt;br /&gt;
AspectJ is a seamless aspect-oriented extension to the Java programming language that enables clean modularization of these 'crosscutting concerns'. Some aspects of system implementation, such as logging, error handling, standards enforcement and feature variations are notoriously difficult to implement in a modular way. The result is that code is tangled across a system and leads to quality, productivity and maintenance problems.&lt;br /&gt;
&lt;br /&gt;
AspectJ is a simple, practical, and compatible aspect-oriented extension to Java.&lt;br /&gt;
&lt;br /&gt;
*Upward compatibility — all legal Java programs must be legal AspectJ programs.&lt;br /&gt;
&lt;br /&gt;
*Platform compatibility — all legal AspectJ programs must run on standard Java virtual machines.&lt;br /&gt;
&lt;br /&gt;
*Tool compatibility — it must be possible to extend existing tools to support AspectJ in a natural way; this includes IDEs, documentation tools, and design tools.&lt;br /&gt;
&lt;br /&gt;
*Programmer compatibility — Programming with AspectJ must feel like a natural extension of programming with Java.&lt;br /&gt;
&lt;br /&gt;
===EXAMPLE CODE of ASPECTJ – (Not Done Yet)===&lt;br /&gt;
&lt;br /&gt;
==AspectR==&lt;br /&gt;
&lt;br /&gt;
AspectR is the AOP Language for Ruby. It was modeled after and resembles a lot like AspectJ.&lt;br /&gt;
&lt;br /&gt;
There are some differences which AspectR does not have that AspectJ does:&lt;br /&gt;
&lt;br /&gt;
*Join points: method/constructor called, method/constructor executes (?), exception handler executes&lt;br /&gt;
&lt;br /&gt;
*Most of the point-cut designator primitives&lt;br /&gt;
&lt;br /&gt;
*Composition of point-cut designators&lt;br /&gt;
&lt;br /&gt;
*'around' advices&lt;br /&gt;
&lt;br /&gt;
*precedence/specificity among advices/aspects&lt;br /&gt;
&lt;br /&gt;
*reflection by sending join-point object to advices with context of join point etc &lt;br /&gt;
&lt;br /&gt;
*control-flow based crosscutting&lt;br /&gt;
&lt;br /&gt;
===EXAMPLE CODE of ASPECTR – (Not Done Yet)===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Links==&lt;br /&gt;
&lt;br /&gt;
1. [http://www.developer.com/design/article.php/3308941/Aspect-Oriented-Programming.htm AOP Developer]&lt;br /&gt;
&lt;br /&gt;
2. [http://www.ccs.neu.edu/home/lieber/AOP.html AOP and Adaptive Programming]&lt;br /&gt;
&lt;br /&gt;
3. [http://wiki.java.net/bin/view/Javapedia/AspectOrientedProgramming Java AOP]&lt;br /&gt;
&lt;br /&gt;
4. [http://www.aspectprogramming.com/ Aspect Programming]&lt;br /&gt;
&lt;br /&gt;
5. [http://oreilly.com/catalog/9780596006549 AspectJ]&lt;br /&gt;
&lt;br /&gt;
6. [http://aspectr.sourceforge.net/ AspectR]&lt;/div&gt;</summary>
		<author><name>SteelerNation</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_9_SN&amp;diff=26071</id>
		<title>CSC/ECE 517 Fall 2009/wiki2 9 SN</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_9_SN&amp;diff=26071"/>
		<updated>2009-10-14T20:10:23Z</updated>

		<summary type="html">&lt;p&gt;SteelerNation: /* OOP and AOP at a Glance */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Aspect-Oriented Programming==&lt;br /&gt;
&lt;br /&gt;
Traditional [http://en.wikipedia.org/wiki/Software_development software development] has focused on developing systems into units of primary functionality, while recognizing that there are other issues of concern that do not fit well into the primary [http://www.merriam-webster.com/dictionary/decomposition decomposition]. This process leaves it to the programmers to code [http://en.wikipedia.org/wiki/Modular_programming modules] corresponding to the primary functionality and to make sure that all other issues of concern are addressed in the code wherever appropriate. Programmers need to keep in mind all the things that need to be done, how to deal with each issue, the problems associated with the possible interactions, and the execution of the right behavior at the right time. When all these things are taken into account, this often results in serious issues being raised during the development and maintenance of a large software system.&lt;br /&gt;
&lt;br /&gt;
Aspect-Oriented programming focuses on the identification, specification, and representation of crosscutting concerns and their modularization into separate functional units as well as their automated composition into a working system.&lt;br /&gt;
&lt;br /&gt;
==So What exactly is AOP?==&lt;br /&gt;
&lt;br /&gt;
===Introduction===&lt;br /&gt;
&lt;br /&gt;
Software design processes and programming languages exist in a mutually supporting relationship. [http://en.wikipedia.org/wiki/Engineering_design_process Design processes] break a system down into smaller and smaller units. [http://en.wikipedia.org/wiki/Programming_language Programming languages] provide mechanisms that allow the programmer to define abstractions of system sub-units, and then compose those abstractions in different ways to produce the overall system. A design process and a programming language work well together when the programming language provides abstraction and composition mechanisms that cleanly support the kinds of units the design process breaks the system into. From this perspective, many existing programming languages, including object-oriented languages, procedural languages, and functional languages, can be seen as having a common root in that their key abstraction and composition mechanisms are all rooted in some form of generalized procedure.&lt;br /&gt;
&lt;br /&gt;
Aspect-oriented programming is a programming process that entails breaking down a program into distinct parts or what are called 'concerns.' This process is called [http://en.wikipedia.org/wiki/Separation_of_concerns separation of concerns]. Often times these concerns overlap and this is called [http://en.wikipedia.org/wiki/Cross-cutting_concern crosscutting concerns]. All AOP implementations have some crosscutting expressions that encapsulate each concern in one place. The difference between implementations lies in the power, safety, and usability of the constructs provided.&lt;br /&gt;
&lt;br /&gt;
===Terminology===&lt;br /&gt;
&lt;br /&gt;
====Cross-cutting concerns ====&lt;br /&gt;
&lt;br /&gt;
Even though most classes in an OO model will perform a single, specific function, they often share common, secondary requirements with other classes. Even though the primary functionality of each class is very different, the code needed to perform the secondary functionality is often identical.&lt;br /&gt;
&lt;br /&gt;
====Advice====&lt;br /&gt;
&lt;br /&gt;
This is the additional code that you want to apply to your existing model.&lt;br /&gt;
&lt;br /&gt;
====Point-cut====&lt;br /&gt;
&lt;br /&gt;
This is the term given to the point of execution in the application at which cross-cutting concern needs to be applied.&lt;br /&gt;
&lt;br /&gt;
====Aspect====&lt;br /&gt;
&lt;br /&gt;
The combination of the point-cut and the advice is termed an aspect. &lt;br /&gt;
&lt;br /&gt;
===Overview===&lt;br /&gt;
&lt;br /&gt;
AOP encapsulates crosscutting concerns into a single program module called an aspect, which can add behavior to a program and verify or change its static structure. The aspect specifies join points in the running program using point-cuts, and permits advice code to run around the join point, to join the advice behavior to the program semantics. The aspect can also declare members and super-types of other classes if the declarations are type-safe, binary-compatible and respect access rules. The combination of advice and inter-type declarations enables one to implement the correct associations and behaviors for many objects in one aspect.&lt;br /&gt;
&lt;br /&gt;
Mechanisms for defining and composing abstractions are essential elements of programming languages. The design style supported by the abstraction mechanisms of most current languages is one of breaking a system down into parametrized components that can be called upon to perform a function.&lt;br /&gt;
But many systems have properties that don't necessarily align with the system's functional components, such as failure handling, persistence, communication, replication, coordination, memory management, or real-time constraints, and tend to cut across groups of functional components.&lt;br /&gt;
&lt;br /&gt;
While they can be thought about and analyzed relatively separately from the basic functionality, programming them using current component-oriented languages tends to result in these aspects being spread throughout the code. The source code becomes a tangled mess of instructions for different purposes.&lt;br /&gt;
&lt;br /&gt;
This phenomenon is at the heart of much needless complexity in existing software systems. A number of researchers have begun working on approaches to this problem that allow programmers to express each of a system's aspects of concern in a separate and natural form, and then automatically combine those separate descriptions into a final executable form. These approaches have been called aspect-oriented programming.&lt;br /&gt;
&lt;br /&gt;
==OOP and AOP at a Glance==&lt;br /&gt;
Object-oriented programming has become the mainstream programming paradigm where real world problems are decomposed into objects that abstract behavior and data in a single unit.&lt;br /&gt;
&lt;br /&gt;
OOP encourages software re-use by providing design and language constructs for modularity, encapsulation, inheritance, and polymorphism. Although OOP has met great success in modeling and implementing complex software systems, it has its problems. Practical experience with large projects has shown that programmers may face some problems with maintaining their code because it becomes increasingly difficult to cleanly separate concerns into modules. An attempt to do a minor change in the program design may require several updates to a large number of unrelated modules.&lt;br /&gt;
&lt;br /&gt;
AOP is a way to modularize code that is typically repeated and sandwiched all over in an object-oriented system. AOP is used for separating crosscutting concerns into single units called aspects. With AOP, we start by implementing our project using our OO language , and then we deal separately with crosscutting concerns in our code by implementing aspects. Finally, both the code and aspects are combined into a final executable form using an aspect weaver. As a result, a single aspect can contribute to the implementation of a number of methods, modules, or objects, increasing both reusability and maintainability of the code.&lt;br /&gt;
[[Image:Aop.jpg]]&lt;br /&gt;
&lt;br /&gt;
==AspectJ==&lt;br /&gt;
&lt;br /&gt;
AspectJ is a seamless aspect-oriented extension to the Java programming language that enables clean modularization of these 'crosscutting concerns'. Some aspects of system implementation, such as logging, error handling, standards enforcement and feature variations are notoriously difficult to implement in a modular way. The result is that code is tangled across a system and leads to quality, productivity and maintenance problems.&lt;br /&gt;
&lt;br /&gt;
AspectJ is a simple, practical, and compatible aspect-oriented extension to Java.&lt;br /&gt;
&lt;br /&gt;
*Upward compatibility — all legal Java programs must be legal AspectJ programs.&lt;br /&gt;
&lt;br /&gt;
*Platform compatibility — all legal AspectJ programs must run on standard Java virtual machines.&lt;br /&gt;
&lt;br /&gt;
*Tool compatibility — it must be possible to extend existing tools to support AspectJ in a natural way; this includes IDEs, documentation tools, and design tools.&lt;br /&gt;
&lt;br /&gt;
*Programmer compatibility — Programming with AspectJ must feel like a natural extension of programming with Java.&lt;br /&gt;
&lt;br /&gt;
===EXAMPLE CODE of ASPECTJ – (Not Done Yet)===&lt;br /&gt;
&lt;br /&gt;
==AspectR==&lt;br /&gt;
&lt;br /&gt;
AspectR is the AOP Language for Ruby. It was modeled after and resembles a lot like AspectJ.&lt;br /&gt;
&lt;br /&gt;
There are some differences which AspectR does not have that AspectJ does:&lt;br /&gt;
&lt;br /&gt;
*Join points: method/constructor called, method/constructor executes (?), exception handler executes&lt;br /&gt;
&lt;br /&gt;
*Most of the point-cut designator primitives&lt;br /&gt;
&lt;br /&gt;
*Composition of point-cut designators&lt;br /&gt;
&lt;br /&gt;
*'around' advices&lt;br /&gt;
&lt;br /&gt;
*precedence/specificity among advices/aspects&lt;br /&gt;
&lt;br /&gt;
*reflection by sending join-point object to advices with context of join point etc &lt;br /&gt;
&lt;br /&gt;
*control-flow based crosscutting&lt;br /&gt;
&lt;br /&gt;
===EXAMPLE CODE of ASPECTR – (Not Done Yet)===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Links==&lt;br /&gt;
&lt;br /&gt;
1. [http://www.developer.com/design/article.php/3308941/Aspect-Oriented-Programming.htm AOP Developer]&lt;br /&gt;
&lt;br /&gt;
2. [http://www.ccs.neu.edu/home/lieber/AOP.html AOP and Adaptive Programming]&lt;br /&gt;
&lt;br /&gt;
3. [http://wiki.java.net/bin/view/Javapedia/AspectOrientedProgramming - Java AOP]&lt;br /&gt;
&lt;br /&gt;
4. [http://www.aspectprogramming.com/ Aspect Programming]&lt;br /&gt;
&lt;br /&gt;
5. [http://oreilly.com/catalog/9780596006549 AspectJ]&lt;br /&gt;
&lt;br /&gt;
6. [http://aspectr.sourceforge.net/ AspectR]&lt;/div&gt;</summary>
		<author><name>SteelerNation</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Aop.jpg&amp;diff=26070</id>
		<title>File:Aop.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Aop.jpg&amp;diff=26070"/>
		<updated>2009-10-14T20:09:44Z</updated>

		<summary type="html">&lt;p&gt;SteelerNation: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>SteelerNation</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_9_SN&amp;diff=26069</id>
		<title>CSC/ECE 517 Fall 2009/wiki2 9 SN</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_9_SN&amp;diff=26069"/>
		<updated>2009-10-14T19:56:02Z</updated>

		<summary type="html">&lt;p&gt;SteelerNation: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Aspect-Oriented Programming==&lt;br /&gt;
&lt;br /&gt;
Traditional [http://en.wikipedia.org/wiki/Software_development software development] has focused on developing systems into units of primary functionality, while recognizing that there are other issues of concern that do not fit well into the primary [http://www.merriam-webster.com/dictionary/decomposition decomposition]. This process leaves it to the programmers to code [http://en.wikipedia.org/wiki/Modular_programming modules] corresponding to the primary functionality and to make sure that all other issues of concern are addressed in the code wherever appropriate. Programmers need to keep in mind all the things that need to be done, how to deal with each issue, the problems associated with the possible interactions, and the execution of the right behavior at the right time. When all these things are taken into account, this often results in serious issues being raised during the development and maintenance of a large software system.&lt;br /&gt;
&lt;br /&gt;
Aspect-Oriented programming focuses on the identification, specification, and representation of crosscutting concerns and their modularization into separate functional units as well as their automated composition into a working system.&lt;br /&gt;
&lt;br /&gt;
==So What exactly is AOP?==&lt;br /&gt;
&lt;br /&gt;
===Introduction===&lt;br /&gt;
&lt;br /&gt;
Software design processes and programming languages exist in a mutually supporting relationship. [http://en.wikipedia.org/wiki/Engineering_design_process Design processes] break a system down into smaller and smaller units. [http://en.wikipedia.org/wiki/Programming_language Programming languages] provide mechanisms that allow the programmer to define abstractions of system sub-units, and then compose those abstractions in different ways to produce the overall system. A design process and a programming language work well together when the programming language provides abstraction and composition mechanisms that cleanly support the kinds of units the design process breaks the system into. From this perspective, many existing programming languages, including object-oriented languages, procedural languages, and functional languages, can be seen as having a common root in that their key abstraction and composition mechanisms are all rooted in some form of generalized procedure.&lt;br /&gt;
&lt;br /&gt;
Aspect-oriented programming is a programming process that entails breaking down a program into distinct parts or what are called 'concerns.' This process is called [http://en.wikipedia.org/wiki/Separation_of_concerns separation of concerns]. Often times these concerns overlap and this is called [http://en.wikipedia.org/wiki/Cross-cutting_concern crosscutting concerns]. All AOP implementations have some crosscutting expressions that encapsulate each concern in one place. The difference between implementations lies in the power, safety, and usability of the constructs provided.&lt;br /&gt;
&lt;br /&gt;
===Terminology===&lt;br /&gt;
&lt;br /&gt;
====Cross-cutting concerns ====&lt;br /&gt;
&lt;br /&gt;
Even though most classes in an OO model will perform a single, specific function, they often share common, secondary requirements with other classes. Even though the primary functionality of each class is very different, the code needed to perform the secondary functionality is often identical.&lt;br /&gt;
&lt;br /&gt;
====Advice====&lt;br /&gt;
&lt;br /&gt;
This is the additional code that you want to apply to your existing model.&lt;br /&gt;
&lt;br /&gt;
====Point-cut====&lt;br /&gt;
&lt;br /&gt;
This is the term given to the point of execution in the application at which cross-cutting concern needs to be applied.&lt;br /&gt;
&lt;br /&gt;
====Aspect====&lt;br /&gt;
&lt;br /&gt;
The combination of the point-cut and the advice is termed an aspect. &lt;br /&gt;
&lt;br /&gt;
===Overview===&lt;br /&gt;
&lt;br /&gt;
AOP encapsulates crosscutting concerns into a single program module called an aspect, which can add behavior to a program and verify or change its static structure. The aspect specifies join points in the running program using point-cuts, and permits advice code to run around the join point, to join the advice behavior to the program semantics. The aspect can also declare members and super-types of other classes if the declarations are type-safe, binary-compatible and respect access rules. The combination of advice and inter-type declarations enables one to implement the correct associations and behaviors for many objects in one aspect.&lt;br /&gt;
&lt;br /&gt;
Mechanisms for defining and composing abstractions are essential elements of programming languages. The design style supported by the abstraction mechanisms of most current languages is one of breaking a system down into parametrized components that can be called upon to perform a function.&lt;br /&gt;
But many systems have properties that don't necessarily align with the system's functional components, such as failure handling, persistence, communication, replication, coordination, memory management, or real-time constraints, and tend to cut across groups of functional components.&lt;br /&gt;
&lt;br /&gt;
While they can be thought about and analyzed relatively separately from the basic functionality, programming them using current component-oriented languages tends to result in these aspects being spread throughout the code. The source code becomes a tangled mess of instructions for different purposes.&lt;br /&gt;
&lt;br /&gt;
This phenomenon is at the heart of much needless complexity in existing software systems. A number of researchers have begun working on approaches to this problem that allow programmers to express each of a system's aspects of concern in a separate and natural form, and then automatically combine those separate descriptions into a final executable form. These approaches have been called aspect-oriented programming.&lt;br /&gt;
&lt;br /&gt;
==OOP and AOP at a Glance==&lt;br /&gt;
Object-oriented programming has become the mainstream programming paradigm where real world problems are decomposed into objects that abstract behavior and data in a single unit.&lt;br /&gt;
&lt;br /&gt;
OOP encourages software re-use by providing design and language constructs for modularity, encapsulation, inheritance, and polymorphism. Although OOP has met great success in modeling and implementing complex software systems, it has its problems. Practical experience with large projects has shown that programmers may face some problems with maintaining their code because it becomes increasingly difficult to cleanly separate concerns into modules. An attempt to do a minor change in the program design may require several updates to a large number of unrelated modules.&lt;br /&gt;
&lt;br /&gt;
AOP is a way to modularize code that is typically repeated and sandwiched all over in an object-oriented system. AOP is used for separating crosscutting concerns into single units called aspects. With AOP, we start by implementing our project using our OO language , and then we deal separately with crosscutting concerns in our code by implementing aspects. Finally, both the code and aspects are combined into a final executable form using an aspect weaver. As a result, a single aspect can contribute to the implementation of a number of methods, modules, or objects, increasing both reusability and maintainability of the code. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==AspectJ==&lt;br /&gt;
&lt;br /&gt;
AspectJ is a seamless aspect-oriented extension to the Java programming language that enables clean modularization of these 'crosscutting concerns'. Some aspects of system implementation, such as logging, error handling, standards enforcement and feature variations are notoriously difficult to implement in a modular way. The result is that code is tangled across a system and leads to quality, productivity and maintenance problems.&lt;br /&gt;
&lt;br /&gt;
AspectJ is a simple, practical, and compatible aspect-oriented extension to Java.&lt;br /&gt;
&lt;br /&gt;
*Upward compatibility — all legal Java programs must be legal AspectJ programs.&lt;br /&gt;
&lt;br /&gt;
*Platform compatibility — all legal AspectJ programs must run on standard Java virtual machines.&lt;br /&gt;
&lt;br /&gt;
*Tool compatibility — it must be possible to extend existing tools to support AspectJ in a natural way; this includes IDEs, documentation tools, and design tools.&lt;br /&gt;
&lt;br /&gt;
*Programmer compatibility — Programming with AspectJ must feel like a natural extension of programming with Java.&lt;br /&gt;
&lt;br /&gt;
===EXAMPLE CODE of ASPECTJ – (Not Done Yet)===&lt;br /&gt;
&lt;br /&gt;
==AspectR==&lt;br /&gt;
&lt;br /&gt;
AspectR is the AOP Language for Ruby. It was modeled after and resembles a lot like AspectJ.&lt;br /&gt;
&lt;br /&gt;
There are some differences which AspectR does not have that AspectJ does:&lt;br /&gt;
&lt;br /&gt;
*Join points: method/constructor called, method/constructor executes (?), exception handler executes&lt;br /&gt;
&lt;br /&gt;
*Most of the point-cut designator primitives&lt;br /&gt;
&lt;br /&gt;
*Composition of point-cut designators&lt;br /&gt;
&lt;br /&gt;
*'around' advices&lt;br /&gt;
&lt;br /&gt;
*precedence/specificity among advices/aspects&lt;br /&gt;
&lt;br /&gt;
*reflection by sending join-point object to advices with context of join point etc &lt;br /&gt;
&lt;br /&gt;
*control-flow based crosscutting&lt;br /&gt;
&lt;br /&gt;
===EXAMPLE CODE of ASPECTR – (Not Done Yet)===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Links==&lt;br /&gt;
&lt;br /&gt;
1. [http://www.developer.com/design/article.php/3308941/Aspect-Oriented-Programming.htm AOP Developer]&lt;br /&gt;
&lt;br /&gt;
2. [http://www.ccs.neu.edu/home/lieber/AOP.html AOP and Adaptive Programming]&lt;br /&gt;
&lt;br /&gt;
3. [http://wiki.java.net/bin/view/Javapedia/AspectOrientedProgramming - Java AOP]&lt;br /&gt;
&lt;br /&gt;
4. [http://www.aspectprogramming.com/ Aspect Programming]&lt;br /&gt;
&lt;br /&gt;
5. [http://oreilly.com/catalog/9780596006549 AspectJ]&lt;br /&gt;
&lt;br /&gt;
6. [http://aspectr.sourceforge.net/ AspectR]&lt;/div&gt;</summary>
		<author><name>SteelerNation</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_9_SN&amp;diff=26068</id>
		<title>CSC/ECE 517 Fall 2009/wiki2 9 SN</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_9_SN&amp;diff=26068"/>
		<updated>2009-10-14T19:54:02Z</updated>

		<summary type="html">&lt;p&gt;SteelerNation: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Aspect-Oriented Programming==&lt;br /&gt;
&lt;br /&gt;
Traditional [http://en.wikipedia.org/wiki/Software_development software development] has focused on developing systems into units of primary functionality, while recognizing that there are other issues of concern that do not fit well into the primary [http://www.merriam-webster.com/dictionary/decomposition decomposition]. This process leaves it to the programmers to code [http://en.wikipedia.org/wiki/Modular_programming modules] corresponding to the primary functionality and to make sure that all other issues of concern are addressed in the code wherever appropriate. Programmers need to keep in mind all the things that need to be done, how to deal with each issue, the problems associated with the possible interactions, and the execution of the right behavior at the right time. When all these things are taken into account, this often results in serious issues being raised during the development and maintenance of a large software system.&lt;br /&gt;
&lt;br /&gt;
Aspect-Oriented programming focuses on the identification, specification, and representation of crosscutting concerns and their modularization into separate functional units as well as their automated composition into a working system.&lt;br /&gt;
&lt;br /&gt;
==So What exactly is AOP?==&lt;br /&gt;
&lt;br /&gt;
===Introduction===&lt;br /&gt;
&lt;br /&gt;
Software design processes and programming languages exist in a mutually supporting relationship. [http://en.wikipedia.org/wiki/Engineering_design_process Design processes] break a system down into smaller and smaller units. [http://en.wikipedia.org/wiki/Programming_language Programming languages] provide mechanisms that allow the programmer to define abstractions of system sub-units, and then compose those abstractions in different ways to produce the overall system. A design process and a programming language work well together when the programming language provides abstraction and composition mechanisms that cleanly support the kinds of units the design process breaks the system into. From this perspective, many existing programming languages, including object-oriented languages, procedural languages, and functional languages, can be seen as having a common root in that their key abstraction and composition mechanisms are all rooted in some form of generalized procedure.&lt;br /&gt;
&lt;br /&gt;
Aspect-oriented programming is a programming process that entails breaking down a program into distinct parts or what are called 'concerns.' This process is called http://en.wikipedia.org/wiki/Separation_of_concerns separation of concerns]. Often times these concerns overlap and this is called [http://en.wikipedia.org/wiki/Cross-cutting_concern crosscutting concerns]. All AOP implementations have some crosscutting expressions that encapsulate each concern in one place. The difference between implementations lies in the power, safety, and usability of the constructs provided.&lt;br /&gt;
&lt;br /&gt;
===Terminology===&lt;br /&gt;
&lt;br /&gt;
====Cross-cutting concerns ====&lt;br /&gt;
&lt;br /&gt;
Even though most classes in an OO model will perform a single, specific function, they often share common, secondary requirements with other classes. Even though the primary functionality of each class is very different, the code needed to perform the secondary functionality is often identical.&lt;br /&gt;
&lt;br /&gt;
====Advice====&lt;br /&gt;
&lt;br /&gt;
This is the additional code that you want to apply to your existing model.&lt;br /&gt;
&lt;br /&gt;
====Point-cut====&lt;br /&gt;
&lt;br /&gt;
This is the term given to the point of execution in the application at which cross-cutting concern needs to be applied.&lt;br /&gt;
&lt;br /&gt;
====Aspect====&lt;br /&gt;
&lt;br /&gt;
The combination of the point-cut and the advice is termed an aspect. &lt;br /&gt;
&lt;br /&gt;
===Overview===&lt;br /&gt;
&lt;br /&gt;
AOP encapsulates crosscutting concerns into a single program module called an aspect, which can add behavior to a program and verify or change its static structure. The aspect specifies join points in the running program using point-cuts, and permits advice code to run around the join point, to join the advice behavior to the program semantics. The aspect can also declare members and super-types of other classes if the declarations are type-safe, binary-compatible and respect access rules. The combination of advice and inter-type declarations enables one to implement the correct associations and behaviors for many objects in one aspect.&lt;br /&gt;
&lt;br /&gt;
Mechanisms for defining and composing abstractions are essential elements of programming languages. The design style supported by the abstraction mechanisms of most current languages is one of breaking a system down into parametrized components that can be called upon to perform a function.&lt;br /&gt;
But many systems have properties that don't necessarily align with the system's functional components, such as failure handling, persistence, communication, replication, coordination, memory management, or real-time constraints, and tend to cut across groups of functional components.&lt;br /&gt;
&lt;br /&gt;
While they can be thought about and analyzed relatively separately from the basic functionality, programming them using current component-oriented languages tends to result in these aspects being spread throughout the code. The source code becomes a tangled mess of instructions for different purposes.&lt;br /&gt;
&lt;br /&gt;
This phenomenon is at the heart of much needless complexity in existing software systems. A number of researchers have begun working on approaches to this problem that allow programmers to express each of a system's aspects of concern in a separate and natural form, and then automatically combine those separate descriptions into a final executable form. These approaches have been called aspect-oriented programming.&lt;br /&gt;
&lt;br /&gt;
==Example of Aspect==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==AspectJ==&lt;br /&gt;
&lt;br /&gt;
AspectJ is a seamless aspect-oriented extension to the Java programming language that enables clean modularization of these 'crosscutting concerns'. Some aspects of system implementation, such as logging, error handling, standards enforcement and feature variations are notoriously difficult to implement in a modular way. The result is that code is tangled across a system and leads to quality, productivity and maintenance problems.&lt;br /&gt;
&lt;br /&gt;
AspectJ is a simple, practical, and compatible aspect-oriented extension to Java.&lt;br /&gt;
&lt;br /&gt;
*Upward compatibility — all legal Java programs must be legal AspectJ programs.&lt;br /&gt;
&lt;br /&gt;
*Platform compatibility — all legal AspectJ programs must run on standard Java virtual machines.&lt;br /&gt;
&lt;br /&gt;
*Tool compatibility — it must be possible to extend existing tools to support AspectJ in a natural way; this includes IDEs, documentation tools, and design tools.&lt;br /&gt;
&lt;br /&gt;
*Programmer compatibility — Programming with AspectJ must feel like a natural extension of programming with Java.&lt;br /&gt;
&lt;br /&gt;
===EXAMPLE CODE of ASPECTJ – (Not Done Yet)===&lt;br /&gt;
&lt;br /&gt;
==AspectR==&lt;br /&gt;
&lt;br /&gt;
AspectR is the AOP Language for Ruby. It was modeled after and resembles a lot like AspectJ.&lt;br /&gt;
&lt;br /&gt;
There are some differences which AspectR does not have that AspectJ does:&lt;br /&gt;
&lt;br /&gt;
*Join points: method/constructor called, method/constructor executes (?), exception handler executes&lt;br /&gt;
&lt;br /&gt;
*Most of the point-cut designator primitives&lt;br /&gt;
&lt;br /&gt;
*Composition of point-cut designators&lt;br /&gt;
&lt;br /&gt;
*'around' advices&lt;br /&gt;
&lt;br /&gt;
*precedence/specificity among advices/aspects&lt;br /&gt;
&lt;br /&gt;
*reflection by sending join-point object to advices with context of join point etc &lt;br /&gt;
&lt;br /&gt;
*control-flow based crosscutting&lt;br /&gt;
&lt;br /&gt;
===EXAMPLE CODE of ASPECTR – (Not Done Yet)===&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
Object-oriented programming has become the mainstream programming paradigm where real world problems are decomposed into objects that abstract behavior and data in a single unit.&lt;br /&gt;
&lt;br /&gt;
OOP encourages software re-use by providing design and language constructs for modularity, encapsulation, inheritance, and polymorphism. Although OOP has met great success in modeling and implementing complex software systems, it has its problems. Practical experience with large projects has shown that programmers may face some problems with maintaining their code because it becomes increasingly difficult to cleanly separate concerns into modules. An attempt to do a minor change in the program design may require several updates to a large number of unrelated modules.&lt;br /&gt;
&lt;br /&gt;
AOP is a way to modularize code that is typically repeated and sandwiched all over in an object-oriented system. AOP is used for separating crosscutting concerns into single units called aspects. With AOP, we start by implementing our project using our OO language , and then we deal separately with crosscutting concerns in our code by implementing aspects. Finally, both the code and aspects are combined into a final executable form using an aspect weaver. As a result, a single aspect can contribute to the implementation of a number of methods, modules, or objects, increasing both reusability and maintainability of the code. &lt;br /&gt;
&lt;br /&gt;
==Links==&lt;br /&gt;
&lt;br /&gt;
1. [http://www.developer.com/design/article.php/3308941/Aspect-Oriented-Programming.htm AOP Developer]&lt;br /&gt;
&lt;br /&gt;
2. [http://www.ccs.neu.edu/home/lieber/AOP.html AOP and Adaptive Programming]&lt;br /&gt;
&lt;br /&gt;
3. [http://wiki.java.net/bin/view/Javapedia/AspectOrientedProgramming - Java AOP]&lt;br /&gt;
&lt;br /&gt;
4. [http://www.aspectprogramming.com/ Aspect Programming]&lt;br /&gt;
&lt;br /&gt;
5. [http://oreilly.com/catalog/9780596006549 AspectJ]&lt;br /&gt;
&lt;br /&gt;
6. [http://aspectr.sourceforge.net/ AspectR]&lt;/div&gt;</summary>
		<author><name>SteelerNation</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_9_SN&amp;diff=26067</id>
		<title>CSC/ECE 517 Fall 2009/wiki2 9 SN</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_9_SN&amp;diff=26067"/>
		<updated>2009-10-14T19:47:24Z</updated>

		<summary type="html">&lt;p&gt;SteelerNation: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Aspect-Oriented Programming==&lt;br /&gt;
&lt;br /&gt;
Traditional [http://en.wikipedia.org/wiki/Software_development software development] has focused on developing systems into units of primary functionality, while recognizing that there are other issues of concern that do not fit well into the primary [http://www.merriam-webster.com/dictionary/decomposition decomposition]. This process leaves it to the programmers to code [http://en.wikipedia.org/wiki/Modular_programming modules] corresponding to the primary functionality and to make sure that all other issues of concern are addressed in the code wherever appropriate. Programmers need to keep in mind all the things that need to be done, how to deal with each issue, the problems associated with the possible interactions, and the execution of the right behavior at the right time. When all these things are taken into account, this often results in serious issues being raised during the development and maintenance of a large software system.&lt;br /&gt;
&lt;br /&gt;
Aspect-Oriented programming focuses on the identification, specification, and representation of crosscutting concerns and their modularization into separate functional units as well as their automated composition into a working system.&lt;br /&gt;
&lt;br /&gt;
==So What exactly is AOP?==&lt;br /&gt;
&lt;br /&gt;
===Introduction===&lt;br /&gt;
&lt;br /&gt;
Software design processes and programming languages exist in a mutually supporting relationship. [http://en.wikipedia.org/wiki/Engineering_design_process Design processes] break a system down into smaller and smaller units. [http://en.wikipedia.org/wiki/Programming_language Programming languages] provide mechanisms that allow the programmer to define abstractions of system sub-units, and then compose those abstractions in different ways to produce the overall system. A design process and a programming language work well together when the programming language provides abstraction and composition mechanisms that cleanly support the kinds of units the design process breaks the system into. From this perspective, many existing programming languages, including object-oriented languages, procedural languages, and functional languages, can be seen as having a common root in that their key abstraction and composition mechanisms are all rooted in some form of generalized procedure.&lt;br /&gt;
&lt;br /&gt;
Aspect-oriented programming is a programming process that entails breaking down a program into distinct parts or what are called 'concerns.' This process is called http://en.wikipedia.org/wiki/Separation_of_concerns separation of concerns]. Often times these concerns overlap and this is called [http://en.wikipedia.org/wiki/Cross-cutting_concern crosscutting concerns]. All AOP implementations have some crosscutting expressions that encapsulate each concern in one place. The difference between implementations lies in the power, safety, and usability of the constructs provided.&lt;br /&gt;
&lt;br /&gt;
===Terminology===&lt;br /&gt;
&lt;br /&gt;
====Cross-cutting concerns ====&lt;br /&gt;
&lt;br /&gt;
Even though most classes in an OO model will perform a single, specific function, they often share common, secondary requirements with other classes. Even though the primary functionality of each class is very different, the code needed to perform the secondary functionality is often identical.&lt;br /&gt;
&lt;br /&gt;
====Advice====&lt;br /&gt;
&lt;br /&gt;
This is the additional code that you want to apply to your existing model.&lt;br /&gt;
&lt;br /&gt;
====Point-cut====&lt;br /&gt;
&lt;br /&gt;
This is the term given to the point of execution in the application at which cross-cutting concern needs to be applied.&lt;br /&gt;
&lt;br /&gt;
====Aspect====&lt;br /&gt;
&lt;br /&gt;
The combination of the point-cut and the advice is termed an aspect. &lt;br /&gt;
&lt;br /&gt;
===Overview===&lt;br /&gt;
&lt;br /&gt;
AOP encapsulates crosscutting concerns into a single program module called an aspect, which can add behavior to a program and verify or change its static structure. The aspect specifies join points in the running program using point-cuts, and permits advice code to run around the join point, to join the advice behavior to the program semantics. The aspect can also declare members and super-types of other classes if the declarations are type-safe, binary-compatible and respect access rules. The combination of advice and inter-type declarations enables one to implement the correct associations and behaviors for many objects in one aspect.&lt;br /&gt;
&lt;br /&gt;
Mechanisms for defining and composing abstractions are essential elements of programming languages. The design style supported by the abstraction mechanisms of most current languages is one of breaking a system down into parametrized components that can be called upon to perform a function.&lt;br /&gt;
But many systems have properties that don't necessarily align with the system's functional components, such as failure handling, persistence, communication, replication, coordination, memory management, or real-time constraints, and tend to cut across groups of functional components.&lt;br /&gt;
&lt;br /&gt;
While they can be thought about and analyzed relatively separately from the basic functionality, programming them using current component-oriented languages tends to result in these aspects being spread throughout the code. The source code becomes a tangled mess of instructions for different purposes.&lt;br /&gt;
&lt;br /&gt;
This phenomenon is at the heart of much needless complexity in existing software systems. A number of researchers have begun working on approaches to this problem that allow programmers to express each of a system's aspects of concern in a separate and natural form, and then automatically combine those separate descriptions into a final executable form. These approaches have been called aspect-oriented programming.&lt;br /&gt;
&lt;br /&gt;
==Example of Aspect==&lt;br /&gt;
&lt;br /&gt;
HERE IS WHERE AN EXAMPLE IS GOING (Not Done Yet)&lt;br /&gt;
&lt;br /&gt;
==AspectJ==&lt;br /&gt;
&lt;br /&gt;
AspectJ is a seamless aspect-oriented extension to the Java programming language that enables clean modularization of these 'crosscutting concerns'. Some aspects of system implementation, such as logging, error handling, standards enforcement and feature variations are notoriously difficult to implement in a modular way. The result is that code is tangled across a system and leads to quality, productivity and maintenance problems.&lt;br /&gt;
&lt;br /&gt;
AspectJ is a simple, practical, and compatible aspect-oriented extension to Java.&lt;br /&gt;
&lt;br /&gt;
*Upward compatibility — all legal Java programs must be legal AspectJ programs.&lt;br /&gt;
&lt;br /&gt;
*Platform compatibility — all legal AspectJ programs must run on standard Java virtual machines.&lt;br /&gt;
&lt;br /&gt;
*Tool compatibility — it must be possible to extend existing tools to support AspectJ in a natural way; this includes IDEs, documentation tools, and design tools.&lt;br /&gt;
&lt;br /&gt;
*Programmer compatibility — Programming with AspectJ must feel like a natural extension of programming with Java.&lt;br /&gt;
&lt;br /&gt;
===EXAMPLE CODE of ASPECTJ – (Not Done Yet)===&lt;br /&gt;
&lt;br /&gt;
==AspectR==&lt;br /&gt;
&lt;br /&gt;
AspectR is the AOP Language for Ruby. It was modeled after and resembles a lot like AspectJ.&lt;br /&gt;
&lt;br /&gt;
There are some differences which AspectR does not have that AspectJ does:&lt;br /&gt;
&lt;br /&gt;
*Join points: method/constructor called, method/constructor executes (?), exception handler executes&lt;br /&gt;
&lt;br /&gt;
*Most of the point-cut designator primitives&lt;br /&gt;
&lt;br /&gt;
*Composition of point-cut designators&lt;br /&gt;
&lt;br /&gt;
*'around' advices&lt;br /&gt;
&lt;br /&gt;
*precedence/specificity among advices/aspects&lt;br /&gt;
&lt;br /&gt;
*reflection by sending join-point object to advices with context of join point etc &lt;br /&gt;
&lt;br /&gt;
*control-flow based crosscutting&lt;br /&gt;
&lt;br /&gt;
===EXAMPLE CODE of ASPECTR – (Not Done Yet)===&lt;br /&gt;
&lt;br /&gt;
==Links==&lt;br /&gt;
&lt;br /&gt;
1. [http://www.developer.com/design/article.php/3308941/Aspect-Oriented-Programming.htm AOP Developer]&lt;br /&gt;
&lt;br /&gt;
2. [http://www.ccs.neu.edu/home/lieber/AOP.html AOP and Adaptive Programming]&lt;br /&gt;
&lt;br /&gt;
3. [http://wiki.java.net/bin/view/Javapedia/AspectOrientedProgramming - Java AOP]&lt;br /&gt;
&lt;br /&gt;
4. [http://www.aspectprogramming.com/ Aspect Programming]&lt;br /&gt;
&lt;br /&gt;
5. [http://oreilly.com/catalog/9780596006549 AspectJ]&lt;br /&gt;
&lt;br /&gt;
6. [http://aspectr.sourceforge.net/ AspectR]&lt;/div&gt;</summary>
		<author><name>SteelerNation</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_9_SN&amp;diff=23904</id>
		<title>CSC/ECE 517 Fall 2009/wiki2 9 SN</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_9_SN&amp;diff=23904"/>
		<updated>2009-10-09T15:19:22Z</updated>

		<summary type="html">&lt;p&gt;SteelerNation: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Aspect-Oriented Programming==&lt;br /&gt;
'''THIS WILL BE TAKEN OUT'''&lt;br /&gt;
In writing a program, you must handle the many concerns of the system. A *concern* is a requirement of, or action that must be performed by, the system. For example, concerns for a banking system include making deposits, making withdrawals, handling account inquiries, transferring funds between accounts, authenticating and authorizing the user, and synchronizing and logging all transactions. The concerns at the end of the list are secondary, and are required across many of the core modules. For this reason they are referred to in AOP as cross-cutting concerns. Discuss AOP in general, and touch briefly on AspectJ and AspectR, which facilitate it in Java and Ruby, respectively&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Aspect Oriented Programming'''&lt;br /&gt;
&lt;br /&gt;
Traditional software development has focused on developing systems into units of primary functionality, while recognizing that there are other issues of concern that do not fit well into the primary decomposition. This process leaves it to the programmers to code modules corresponding to the primary functionality and to make sure that all other issues of concern are addressed in the code wherever appropriate. Programmers need to keep in mind all the things that need to be done, how to deal with each issue, the problems associated with the possible interactions, and the execution of the right behavior at the right time. When all these things are taken into account, this often results in serious issues being raised during the development and maintenance of a large software system.&lt;br /&gt;
&lt;br /&gt;
Aspect-Oriented programming focuses on the identification, specification and representation of crosscutting concerns and their modularization into separate functional units as well as their automated composition into a working system.&lt;br /&gt;
&lt;br /&gt;
==What is AOP?==&lt;br /&gt;
&lt;br /&gt;
===Introduction===&lt;br /&gt;
&lt;br /&gt;
Software design processes and programming languages exist in a mutually supporting relationship. Design processes break a system down into smaller and smaller units. Programming languages provide mechanisms that allow the programmer to define abstractions of system sub-units, and then compose those abstractions in different ways to produce the overall system. A design process and a programming language work well together when the programming language provides abstraction and composition mechanisms that cleanly support the kinds of units the design process breaks the system into. From this perspective, many existing programming languages, including object-oriented languages, procedural languages and functional languages, can be seen as having a common root in that their key abstraction and composition mechanisms are all rooted in some form of generalized procedure.&lt;br /&gt;
&lt;br /&gt;
===Terminology===&lt;br /&gt;
&lt;br /&gt;
====Cross-cutting concerns ====&lt;br /&gt;
&lt;br /&gt;
Even though most classes in an OO model will perform a single, specific function, they often share common, secondary requirements with other classes. Even though the primary functionality of each class is very different, the code needed to perform the secondary functionality is often identical.&lt;br /&gt;
&lt;br /&gt;
====Advice====&lt;br /&gt;
&lt;br /&gt;
This is the additional code that you want to apply to your existing model.&lt;br /&gt;
&lt;br /&gt;
====Point-cut====&lt;br /&gt;
&lt;br /&gt;
This is the term given to the point of execution in the application at which cross-cutting concern needs to be applied.&lt;br /&gt;
&lt;br /&gt;
====Aspect====&lt;br /&gt;
&lt;br /&gt;
The combination of the point-cut and the advice is termed an aspect. &lt;br /&gt;
&lt;br /&gt;
===Overview===&lt;br /&gt;
&lt;br /&gt;
AOP encapsulates crosscutting concerns into a single program module called an aspect, which can add behavior to a program and verify or change its static structure. The aspect specifies join points in the running program using point-cuts, and permits advice code to run around the join point, to join the advice behavior to the program semantics. The aspect can also declare members and supertypes of other classes if the declarations are type-safe, binary-compatible and respect access rules. The combination of advice and inter-type declarations enables one to implement the correct associations and behaviors for many objects in one aspect.&lt;br /&gt;
&lt;br /&gt;
Mechanisms for defining and composing abstractions are essential elements of programming languages. The design style supported by the abstraction mechanisms of most current languages is one of breaking a system down into parameterized components that can be called upon to perform a function.&lt;br /&gt;
But many systems have properties that don't necessarily align with the system's functional components, such as failure handling, persistence, communication, replication, coordination, memory management, or real-time constraints, and tend to cut across groups of functional components.&lt;br /&gt;
&lt;br /&gt;
While they can be thought about and analyzed relatively separately from the basic functionality, programming them using current component-oriented languages tends to result in these aspects being spread throughout the code. The source code becomes a tangled mess of instructions for different purposes.&lt;br /&gt;
&lt;br /&gt;
This phenomenon is at the heart of much needless complexity in existing software systems. A number of researchers have begun working on approaches to this problem that allow programmers to express each of a system's aspects of concern in a separate and natural form, and then automatically combine those separate descriptions into a final executable form. These approaches have been called aspect-oriented programming.&lt;br /&gt;
&lt;br /&gt;
==Example of Aspect==&lt;br /&gt;
&lt;br /&gt;
HERE IS WHERE AN EXAMPLE IS GOING (Not Done Yet)&lt;br /&gt;
&lt;br /&gt;
==AspectJ==&lt;br /&gt;
&lt;br /&gt;
AspectJ is a seamless aspect-oriented extension to the Java programming language that enables clean modularization of these 'crosscutting concerns'. Some aspects of system implementation, such as logging, error handling, standards enforcement and feature variations are notoriously difficult to implement in a modular way. The result is that code is tangled across a system and leads to quality, productivity and maintenance problems.&lt;br /&gt;
&lt;br /&gt;
AspectJ is a simple, practical, and compatible aspect-oriented extension to Java.&lt;br /&gt;
&lt;br /&gt;
*Upward compatibility — all legal Java programs must be legal AspectJ programs.&lt;br /&gt;
&lt;br /&gt;
*Platform compatibility — all legal AspectJ programs must run on standard Java virtual machines.&lt;br /&gt;
&lt;br /&gt;
*Tool compatibility — it must be possible to extend existing tools to support AspectJ in a natural way; this includes IDEs, documentation tools, and design tools.&lt;br /&gt;
&lt;br /&gt;
*Programmer compatibility — Programming with AspectJ must feel like a natural extension of programming with Java.&lt;br /&gt;
&lt;br /&gt;
===EXAMPLE CODE of ASPECTJ – (Not Done Yet)===&lt;br /&gt;
&lt;br /&gt;
==AspectR==&lt;br /&gt;
&lt;br /&gt;
AspectR is the AOP Language for Ruby. It was modeled after and resembles a lot like AspectJ.&lt;br /&gt;
&lt;br /&gt;
There are some differences which AspectR does not have that AspectJ does:&lt;br /&gt;
&lt;br /&gt;
*Join points: method/constructor called, method/constructor executes (?), exception handler executes&lt;br /&gt;
&lt;br /&gt;
*Most of the point-cut designator primitives&lt;br /&gt;
&lt;br /&gt;
*Composition of point-cut designators&lt;br /&gt;
&lt;br /&gt;
*'around' advices&lt;br /&gt;
&lt;br /&gt;
*precedence/specificity among advices/aspects&lt;br /&gt;
&lt;br /&gt;
*reflection by sending join-point object to advices with context of join point etc &lt;br /&gt;
&lt;br /&gt;
*control-flow based crosscutting&lt;br /&gt;
&lt;br /&gt;
===EXAMPLE CODE of ASPECTR – (Not Done Yet)===&lt;br /&gt;
&lt;br /&gt;
==Links==&lt;br /&gt;
&lt;br /&gt;
1. [http://www.developer.com/design/article.php/3308941/Aspect-Oriented-Programming.htm AOP Developer]&lt;br /&gt;
&lt;br /&gt;
2. [http://www.ccs.neu.edu/home/lieber/AOP.html AOP and Adaptive Programming]&lt;br /&gt;
&lt;br /&gt;
3. [http://wiki.java.net/bin/view/Javapedia/AspectOrientedProgramming - Java AOP]&lt;br /&gt;
&lt;br /&gt;
4. [http://www.aspectprogramming.com/ Aspect Programming]&lt;br /&gt;
&lt;br /&gt;
5. [http://oreilly.com/catalog/9780596006549 AspectJ]&lt;br /&gt;
&lt;br /&gt;
6. [http://aspectr.sourceforge.net/ AspectR]&lt;/div&gt;</summary>
		<author><name>SteelerNation</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_9_SN&amp;diff=23903</id>
		<title>CSC/ECE 517 Fall 2009/wiki2 9 SN</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_9_SN&amp;diff=23903"/>
		<updated>2009-10-09T15:19:10Z</updated>

		<summary type="html">&lt;p&gt;SteelerNation: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Aspect-Oriented Programming==&lt;br /&gt;
'''THIS WILL BE TAKEN OUT'''&lt;br /&gt;
In writing a program, you must handle the many concerns of the system. A *concern* is a requirement of, or action that must be performed by, the system. For example, concerns for a banking system include making deposits, making withdrawals, handling account inquiries, transferring funds between accounts, authenticating and authorizing the user, and synchronizing and logging all transactions. The concerns at the end of the list are secondary, and are required across many of the core modules. For this reason they are referred to in AOP as cross-cutting concerns. Discuss AOP in general, and touch briefly on AspectJ and AspectR, which facilitate it in Java and Ruby, respectively&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Aspect Oriented Programming'''&lt;br /&gt;
&lt;br /&gt;
Traditional software development has focused on developing systems into units of primary functionality, while recognizing that there are other issues of concern that do not fit well into the primary decomposition. This process leaves it to the programmers to code modules corresponding to the primary functionality and to make sure that all other issues of concern are addressed in the code wherever appropriate. Programmers need to keep in mind all the things that need to be done, how to deal with each issue, the problems associated with the possible interactions, and the execution of the right behavior at the right time. When all these things are taken into account, this often results in serious issues being raised during the development and maintenance of a large software system.&lt;br /&gt;
&lt;br /&gt;
Aspect-Oriented programming focuses on the identification, specification and representation of crosscutting concerns and their modularization into separate functional units as well as their automated composition into a working system.&lt;br /&gt;
&lt;br /&gt;
==What is AOP?==&lt;br /&gt;
&lt;br /&gt;
===Introduction===&lt;br /&gt;
&lt;br /&gt;
Software design processes and programming languages exist in a mutually supporting relationship. Design processes break a system down into smaller and smaller units. Programming languages provide mechanisms that allow the programmer to define abstractions of system sub-units, and then compose those abstractions in different ways to produce the overall system. A design process and a programming language work well together when the programming language provides abstraction and composition mechanisms that cleanly support the kinds of units the design process breaks the system into. From this perspective, many existing programming languages, including object-oriented languages, procedural languages and functional languages, can be seen as having a common root in that their key abstraction and composition mechanisms are all rooted in some form of generalized procedure.&lt;br /&gt;
&lt;br /&gt;
===Terminology===&lt;br /&gt;
&lt;br /&gt;
====Cross-cutting concerns ====&lt;br /&gt;
&lt;br /&gt;
Even though most classes in an OO model will perform a single, specific function, they often share common, secondary requirements with other classes. Even though the primary functionality of each class is very different, the code needed to perform the secondary functionality is often identical.&lt;br /&gt;
&lt;br /&gt;
====Advice====&lt;br /&gt;
&lt;br /&gt;
This is the additional code that you want to apply to your existing model.&lt;br /&gt;
&lt;br /&gt;
====Point-cut====&lt;br /&gt;
&lt;br /&gt;
This is the term given to the point of execution in the application at which cross-cutting concern needs to be applied.&lt;br /&gt;
&lt;br /&gt;
====Aspect====&lt;br /&gt;
&lt;br /&gt;
The combination of the point-cut and the advice is termed an aspect. &lt;br /&gt;
&lt;br /&gt;
===Overview===&lt;br /&gt;
&lt;br /&gt;
AOP encapsulates crosscutting concerns into a single program module called an aspect, which can add behavior to a program and verify or change its static structure. The aspect specifies join points in the running program using point-cuts, and permits advice code to run around the join point, to join the advice behavior to the program semantics. The aspect can also declare members and supertypes of other classes if the declarations are type-safe, binary-compatible and respect access rules. The combination of advice and inter-type declarations enables one to implement the correct associations and behaviors for many objects in one aspect.&lt;br /&gt;
&lt;br /&gt;
Mechanisms for defining and composing abstractions are essential elements of programming languages. The design style supported by the abstraction mechanisms of most current languages is one of breaking a system down into parameterized components that can be called upon to perform a function.&lt;br /&gt;
But many systems have properties that don't necessarily align with the system's functional components, such as failure handling, persistence, communication, replication, coordination, memory management, or real-time constraints, and tend to cut across groups of functional components.&lt;br /&gt;
&lt;br /&gt;
While they can be thought about and analyzed relatively separately from the basic functionality, programming them using current component-oriented languages tends to result in these aspects being spread throughout the code. The source code becomes a tangled mess of instructions for different purposes.&lt;br /&gt;
&lt;br /&gt;
This phenomenon is at the heart of much needless complexity in existing software systems. A number of researchers have begun working on approaches to this problem that allow programmers to express each of a system's aspects of concern in a separate and natural form, and then automatically combine those separate descriptions into a final executable form. These approaches have been called aspect-oriented programming.&lt;br /&gt;
&lt;br /&gt;
==Example of Aspect==&lt;br /&gt;
&lt;br /&gt;
HERE IS WHERE AN EXAMPLE IS GOING (Not Done Yet)&lt;br /&gt;
&lt;br /&gt;
==AspectJ==&lt;br /&gt;
&lt;br /&gt;
AspectJ is a seamless aspect-oriented extension to the Java programming language that enables clean modularization of these 'crosscutting concerns'. Some aspects of system implementation, such as logging, error handling, standards enforcement and feature variations are notoriously difficult to implement in a modular way. The result is that code is tangled across a system and leads to quality, productivity and maintenance problems.&lt;br /&gt;
&lt;br /&gt;
AspectJ is a simple, practical, and compatible aspect-oriented extension to Java.&lt;br /&gt;
&lt;br /&gt;
*Upward compatibility — all legal Java programs must be legal AspectJ programs.&lt;br /&gt;
&lt;br /&gt;
*Platform compatibility — all legal AspectJ programs must run on standard Java virtual machines.&lt;br /&gt;
&lt;br /&gt;
*Tool compatibility — it must be possible to extend existing tools to support AspectJ in a natural way; this includes IDEs, documentation tools, and design tools.&lt;br /&gt;
&lt;br /&gt;
*Programmer compatibility — Programming with AspectJ must feel like a natural extension of programming with Java.&lt;br /&gt;
&lt;br /&gt;
===EXAMPLE CODE of ASPECTJ – (Not Done Yet)===&lt;br /&gt;
&lt;br /&gt;
==AspectR==&lt;br /&gt;
&lt;br /&gt;
AspectR is the AOP Language for Ruby. It was modeled after and resembles a lot like AspectJ.&lt;br /&gt;
&lt;br /&gt;
There are some differences which AspectR does not have that AspectJ does:&lt;br /&gt;
&lt;br /&gt;
*Join points: method/constructor called, method/constructor executes (?), exception handler executes&lt;br /&gt;
&lt;br /&gt;
*Most of the point-cut designator primitives&lt;br /&gt;
&lt;br /&gt;
*Composition of point-cut designators&lt;br /&gt;
&lt;br /&gt;
*'around' advices&lt;br /&gt;
&lt;br /&gt;
*precedence/specificity among advices/aspects&lt;br /&gt;
&lt;br /&gt;
*reflection by sending join-point object to advices with context of join point etc &lt;br /&gt;
&lt;br /&gt;
*control-flow based crosscutting&lt;br /&gt;
&lt;br /&gt;
===EXAMPLE CODE of ASPECTR – (Not Done Yet)===&lt;br /&gt;
&lt;br /&gt;
==LINKS==&lt;br /&gt;
&lt;br /&gt;
1. [http://www.developer.com/design/article.php/3308941/Aspect-Oriented-Programming.htm AOP Developer]&lt;br /&gt;
&lt;br /&gt;
2. [http://www.ccs.neu.edu/home/lieber/AOP.html AOP and Adaptive Programming]&lt;br /&gt;
&lt;br /&gt;
3. [http://wiki.java.net/bin/view/Javapedia/AspectOrientedProgramming - Java AOP]&lt;br /&gt;
&lt;br /&gt;
4. [http://www.aspectprogramming.com/ Aspect Programming]&lt;br /&gt;
&lt;br /&gt;
5. [http://oreilly.com/catalog/9780596006549 AspectJ]&lt;br /&gt;
&lt;br /&gt;
6. [http://aspectr.sourceforge.net/ AspectR]&lt;/div&gt;</summary>
		<author><name>SteelerNation</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_9_SN&amp;diff=23896</id>
		<title>CSC/ECE 517 Fall 2009/wiki2 9 SN</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_9_SN&amp;diff=23896"/>
		<updated>2009-10-09T15:14:54Z</updated>

		<summary type="html">&lt;p&gt;SteelerNation: /* Aspect-Oriented Programming */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Aspect-Oriented Programming==&lt;br /&gt;
'''THIS WILL BE TAKEN OUT'''&lt;br /&gt;
In writing a program, you must handle the many concerns of the system. A *concern* is a requirement of, or action that must be performed by, the system. For example, concerns for a banking system include making deposits, making withdrawals, handling account inquiries, transferring funds between accounts, authenticating and authorizing the user, and synchronizing and logging all transactions. The concerns at the end of the list are secondary, and are required across many of the core modules. For this reason they are referred to in AOP as cross-cutting concerns. Discuss AOP in general, and touch briefly on AspectJ and AspectR, which facilitate it in Java and Ruby, respectively&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Aspect Oriented Programming'''&lt;br /&gt;
&lt;br /&gt;
Traditional software development has focused on developing systems into units of primary functionality, while recognizing that there are other issues of concern that do not fit well into the primary decomposition. This process leaves it to the programmers to code modules corresponding to the primary functionality and to make sure that all other issues of concern are addressed in the code wherever appropriate. Programmers need to keep in mind all the things that need to be done, how to deal with each issue, the problems associated with the possible interactions, and the execution of the right behavior at the right time. When all these things are taken into account, this often results in serious issues being raised during the development and maintenance of a large software system.&lt;br /&gt;
&lt;br /&gt;
Aspect-Oriented programming focuses on the identification, specification and representation of crosscutting concerns and their modularization into separate functional units as well as their automated composition into a working system.&lt;br /&gt;
&lt;br /&gt;
==What is AOP?==&lt;br /&gt;
&lt;br /&gt;
===Introduction===&lt;br /&gt;
&lt;br /&gt;
Software design processes and programming languages exist in a mutually supporting relationship. Design processes break a system down into smaller and smaller units. Programming languages provide mechanisms that allow the programmer to define abstractions of system sub-units, and then compose those abstractions in different ways to produce the overall system. A design process and a programming language work well together when the programming language provides abstraction and composition mechanisms that cleanly support the kinds of units the design process breaks the system into. From this perspective, many existing programming languages, including object-oriented languages, procedural languages and functional languages, can be seen as having a common root in that their key abstraction and composition mechanisms are all rooted in some form of generalized procedure.&lt;br /&gt;
&lt;br /&gt;
===Terminology===&lt;br /&gt;
&lt;br /&gt;
====Cross-cutting concerns ====&lt;br /&gt;
&lt;br /&gt;
Even though most classes in an OO model will perform a single, specific function, they often share common, secondary requirements with other classes. Even though the primary functionality of each class is very different, the code needed to perform the secondary functionality is often identical.&lt;br /&gt;
&lt;br /&gt;
====Advice====&lt;br /&gt;
&lt;br /&gt;
This is the additional code that you want to apply to your existing model.&lt;br /&gt;
&lt;br /&gt;
====Point-cut====&lt;br /&gt;
&lt;br /&gt;
This is the term given to the point of execution in the application at which cross-cutting concern needs to be applied.&lt;br /&gt;
&lt;br /&gt;
====Aspect====&lt;br /&gt;
&lt;br /&gt;
The combination of the point-cut and the advice is termed an aspect. &lt;br /&gt;
&lt;br /&gt;
===Overview===&lt;br /&gt;
&lt;br /&gt;
AOP encapsulates crosscutting concerns into a single program module called an aspect, which can add behavior to a program and verify or change its static structure. The aspect specifies join points in the running program using point-cuts, and permits advice code to run around the join point, to join the advice behavior to the program semantics. The aspect can also declare members and supertypes of other classes if the declarations are type-safe, binary-compatible and respect access rules. The combination of advice and inter-type declarations enables one to implement the correct associations and behaviors for many objects in one aspect.&lt;br /&gt;
&lt;br /&gt;
Mechanisms for defining and composing abstractions are essential elements of programming languages. The design style supported by the abstraction mechanisms of most current languages is one of breaking a system down into parameterized components that can be called upon to perform a function.&lt;br /&gt;
But many systems have properties that don't necessarily align with the system's functional components, such as failure handling, persistence, communication, replication, coordination, memory management, or real-time constraints, and tend to cut across groups of functional components.&lt;br /&gt;
&lt;br /&gt;
While they can be thought about and analyzed relatively separately from the basic functionality, programming them using current component-oriented languages tends to result in these aspects being spread throughout the code. The source code becomes a tangled mess of instructions for different purposes.&lt;br /&gt;
&lt;br /&gt;
This phenomenon is at the heart of much needless complexity in existing software systems. A number of researchers have begun working on approaches to this problem that allow programmers to express each of a system's aspects of concern in a separate and natural form, and then automatically combine those separate descriptions into a final executable form. These approaches have been called aspect-oriented programming.&lt;br /&gt;
&lt;br /&gt;
==Example of Aspect==&lt;br /&gt;
&lt;br /&gt;
HERE IS WHERE AN EXAMPLE IS GOING (Not Done Yet)&lt;br /&gt;
&lt;br /&gt;
==AspectJ==&lt;br /&gt;
&lt;br /&gt;
AspectJ is a seamless aspect-oriented extension to the Java programming language that enables clean modularization of these 'crosscutting concerns'. Some aspects of system implementation, such as logging, error handling, standards enforcement and feature variations are notoriously difficult to implement in a modular way. The result is that code is tangled across a system and leads to quality, productivity and maintenance problems.&lt;br /&gt;
&lt;br /&gt;
AspectJ is a simple, practical, and compatible aspect-oriented extension to Java.&lt;br /&gt;
&lt;br /&gt;
*Upward compatibility — all legal Java programs must be legal AspectJ programs.&lt;br /&gt;
&lt;br /&gt;
*Platform compatibility — all legal AspectJ programs must run on standard Java virtual machines.&lt;br /&gt;
&lt;br /&gt;
*Tool compatibility — it must be possible to extend existing tools to support AspectJ in a natural way; this includes IDEs, documentation tools, and design tools.&lt;br /&gt;
&lt;br /&gt;
*Programmer compatibility — Programming with AspectJ must feel like a natural extension of programming with Java.&lt;br /&gt;
&lt;br /&gt;
===EXAMPLE CODE of ASPECTJ – (Not Done Yet)===&lt;br /&gt;
&lt;br /&gt;
==AspectR==&lt;br /&gt;
&lt;br /&gt;
AspectR is the AOP Language for Ruby. It was modeled after and resembles a lot like AspectJ.&lt;br /&gt;
&lt;br /&gt;
There are some differences which AspectR does not have that AspectJ does:&lt;br /&gt;
&lt;br /&gt;
*Join points: method/constructor called, method/constructor executes (?), exception handler executes&lt;br /&gt;
&lt;br /&gt;
*Most of the point-cut designator primitives&lt;br /&gt;
&lt;br /&gt;
*Composition of point-cut designators&lt;br /&gt;
&lt;br /&gt;
*'around' advices&lt;br /&gt;
&lt;br /&gt;
*precedence/specificity among advices/aspects&lt;br /&gt;
&lt;br /&gt;
*reflection by sending join-point object to advices with context of join point etc &lt;br /&gt;
&lt;br /&gt;
*control-flow based crosscutting&lt;br /&gt;
&lt;br /&gt;
==LINKS==&lt;/div&gt;</summary>
		<author><name>SteelerNation</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_9_SN&amp;diff=23895</id>
		<title>CSC/ECE 517 Fall 2009/wiki2 9 SN</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_9_SN&amp;diff=23895"/>
		<updated>2009-10-09T15:14:19Z</updated>

		<summary type="html">&lt;p&gt;SteelerNation: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Aspect-Oriented Programming==&lt;br /&gt;
'''THIS WILL BE TAKEN OUT'''&lt;br /&gt;
In writing a program, you must handle the many concerns of the system. A *concern* is a requirement of, or action that must be performed by, the system. For example, concerns for a banking system include making deposits, making withdrawals, handling account inquiries, transferring funds between accounts, authenticating and authorizing the user, and synchronizing and logging all transactions. The concerns at the end of the list are secondary, and are required across many of the core modules. For this reason they are referred to in AOP as cross-cutting concerns. Discuss AOP in general, and touch briefly on AspectJ and AspectR, which facilitate it in Java and Ruby, respectively&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Aspect Oriented Programming&lt;br /&gt;
&lt;br /&gt;
Traditional software development has focused on developing systems into units of primary functionality, while recognizing that there are other issues of concern that do not fit well into the primary decomposition. This process leaves it to the programmers to code modules corresponding to the primary functionality and to make sure that all other issues of concern are addressed in the code wherever appropriate. Programmers need to keep in mind all the things that need to be done, how to deal with each issue, the problems associated with the possible interactions, and the execution of the right behavior at the right time. When all these things are taken into account, this often results in serious issues being raised during the development and maintenance of a large software system.&lt;br /&gt;
&lt;br /&gt;
Aspect-Oriented programming focuses on the identification, specification and representation of crosscutting concerns and their modularization into separate functional units as well as their automated composition into a working system.&lt;br /&gt;
&lt;br /&gt;
==What is AOP?==&lt;br /&gt;
&lt;br /&gt;
===Introduction===&lt;br /&gt;
&lt;br /&gt;
Software design processes and programming languages exist in a mutually supporting relationship. Design processes break a system down into smaller and smaller units. Programming languages provide mechanisms that allow the programmer to define abstractions of system sub-units, and then compose those abstractions in different ways to produce the overall system. A design process and a programming language work well together when the programming language provides abstraction and composition mechanisms that cleanly support the kinds of units the design process breaks the system into. From this perspective, many existing programming languages, including object-oriented languages, procedural languages and functional languages, can be seen as having a common root in that their key abstraction and composition mechanisms are all rooted in some form of generalized procedure.&lt;br /&gt;
&lt;br /&gt;
===Terminology===&lt;br /&gt;
&lt;br /&gt;
====Cross-cutting concerns ====&lt;br /&gt;
&lt;br /&gt;
Even though most classes in an OO model will perform a single, specific function, they often share common, secondary requirements with other classes. Even though the primary functionality of each class is very different, the code needed to perform the secondary functionality is often identical.&lt;br /&gt;
&lt;br /&gt;
====Advice====&lt;br /&gt;
&lt;br /&gt;
This is the additional code that you want to apply to your existing model.&lt;br /&gt;
&lt;br /&gt;
====Point-cut====&lt;br /&gt;
&lt;br /&gt;
This is the term given to the point of execution in the application at which cross-cutting concern needs to be applied.&lt;br /&gt;
&lt;br /&gt;
====Aspect====&lt;br /&gt;
&lt;br /&gt;
The combination of the point-cut and the advice is termed an aspect. &lt;br /&gt;
&lt;br /&gt;
===Overview===&lt;br /&gt;
&lt;br /&gt;
AOP encapsulates crosscutting concerns into a single program module called an aspect, which can add behavior to a program and verify or change its static structure. The aspect specifies join points in the running program using point-cuts, and permits advice code to run around the join point, to join the advice behavior to the program semantics. The aspect can also declare members and supertypes of other classes if the declarations are type-safe, binary-compatible and respect access rules. The combination of advice and inter-type declarations enables one to implement the correct associations and behaviors for many objects in one aspect.&lt;br /&gt;
&lt;br /&gt;
Mechanisms for defining and composing abstractions are essential elements of programming languages. The design style supported by the abstraction mechanisms of most current languages is one of breaking a system down into parameterized components that can be called upon to perform a function.&lt;br /&gt;
But many systems have properties that don't necessarily align with the system's functional components, such as failure handling, persistence, communication, replication, coordination, memory management, or real-time constraints, and tend to cut across groups of functional components.&lt;br /&gt;
&lt;br /&gt;
While they can be thought about and analyzed relatively separately from the basic functionality, programming them using current component-oriented languages tends to result in these aspects being spread throughout the code. The source code becomes a tangled mess of instructions for different purposes.&lt;br /&gt;
&lt;br /&gt;
This phenomenon is at the heart of much needless complexity in existing software systems. A number of researchers have begun working on approaches to this problem that allow programmers to express each of a system's aspects of concern in a separate and natural form, and then automatically combine those separate descriptions into a final executable form. These approaches have been called aspect-oriented programming.&lt;br /&gt;
&lt;br /&gt;
==Example of Aspect==&lt;br /&gt;
&lt;br /&gt;
HERE IS WHERE AN EXAMPLE IS GOING (Not Done Yet)&lt;br /&gt;
&lt;br /&gt;
==AspectJ==&lt;br /&gt;
&lt;br /&gt;
AspectJ is a seamless aspect-oriented extension to the Java programming language that enables clean modularization of these 'crosscutting concerns'. Some aspects of system implementation, such as logging, error handling, standards enforcement and feature variations are notoriously difficult to implement in a modular way. The result is that code is tangled across a system and leads to quality, productivity and maintenance problems.&lt;br /&gt;
&lt;br /&gt;
AspectJ is a simple, practical, and compatible aspect-oriented extension to Java.&lt;br /&gt;
&lt;br /&gt;
*Upward compatibility — all legal Java programs must be legal AspectJ programs.&lt;br /&gt;
&lt;br /&gt;
*Platform compatibility — all legal AspectJ programs must run on standard Java virtual machines.&lt;br /&gt;
&lt;br /&gt;
*Tool compatibility — it must be possible to extend existing tools to support AspectJ in a natural way; this includes IDEs, documentation tools, and design tools.&lt;br /&gt;
&lt;br /&gt;
*Programmer compatibility — Programming with AspectJ must feel like a natural extension of programming with Java.&lt;br /&gt;
&lt;br /&gt;
===EXAMPLE CODE of ASPECTJ – (Not Done Yet)===&lt;br /&gt;
&lt;br /&gt;
==AspectR==&lt;br /&gt;
&lt;br /&gt;
AspectR is the AOP Language for Ruby. It was modeled after and resembles a lot like AspectJ.&lt;br /&gt;
&lt;br /&gt;
There are some differences which AspectR does not have that AspectJ does:&lt;br /&gt;
&lt;br /&gt;
*Join points: method/constructor called, method/constructor executes (?), exception handler executes&lt;br /&gt;
&lt;br /&gt;
*Most of the point-cut designator primitives&lt;br /&gt;
&lt;br /&gt;
*Composition of point-cut designators&lt;br /&gt;
&lt;br /&gt;
*'around' advices&lt;br /&gt;
&lt;br /&gt;
*precedence/specificity among advices/aspects&lt;br /&gt;
&lt;br /&gt;
*reflection by sending join-point object to advices with context of join point etc &lt;br /&gt;
&lt;br /&gt;
*control-flow based crosscutting&lt;br /&gt;
&lt;br /&gt;
==LINKS==&lt;/div&gt;</summary>
		<author><name>SteelerNation</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_9_SN&amp;diff=23893</id>
		<title>CSC/ECE 517 Fall 2009/wiki2 9 SN</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_9_SN&amp;diff=23893"/>
		<updated>2009-10-09T15:11:27Z</updated>

		<summary type="html">&lt;p&gt;SteelerNation: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Aspect-Oriented Programming==&lt;br /&gt;
'''THIS WILL BE TAKEN OUT'''&lt;br /&gt;
In writing a program, you must handle the many concerns of the system. A *concern* is a requirement of, or action that must be performed by, the system. For example, concerns for a banking system include making deposits, making withdrawals, handling account inquiries, transferring funds between accounts, authenticating and authorizing the user, and synchronizing and logging all transactions. The concerns at the end of the list are secondary, and are required across many of the core modules. For this reason they are referred to in AOP as cross-cutting concerns. Discuss AOP in general, and touch briefly on AspectJ and AspectR, which facilitate it in Java and Ruby, respectively&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Aspect Oriented Programming&lt;br /&gt;
&lt;br /&gt;
Traditional software development has focused on developing systems into units of primary functionality, while recognizing that there are other issues of concern that do not fit well into the primary decomposition. This process leaves it to the programmers to code modules corresponding to the primary functionality and to make sure that all other issues of concern are addressed in the code wherever appropriate. Programmers need to keep in mind all the things that need to be done, how to deal with each issue, the problems associated with the possible interactions, and the execution of the right behavior at the right time. When all these things are taken into account, this often results in serious issues being raised during the development and maintenance of a large software system.&lt;br /&gt;
&lt;br /&gt;
Aspect-Oriented programming focuses on the identification, specification and representation of crosscutting concerns and their modularization into separate functional units as well as their automated composition into a working system.&lt;br /&gt;
&lt;br /&gt;
==What is AOP?==&lt;br /&gt;
&lt;br /&gt;
===Introduction===&lt;br /&gt;
&lt;br /&gt;
Software design processes and programming languages exist in a mutually supporting relationship. Design processes break a system down into smaller and smaller units. Programming languages provide mechanisms that allow the programmer to define abstractions of system sub-units, and then compose those abstractions in different ways to produce the overall system. A design process and a programming language work well together when the programming language provides abstraction and composition mechanisms that cleanly support the kinds of units the design process breaks the system into. From this perspective, many existing programming languages, including object-oriented languages, procedural languages and functional languages, can be seen as having a common root in that their key abstraction and composition mechanisms are all rooted in some form of generalized procedure.&lt;br /&gt;
&lt;br /&gt;
===Terminology===&lt;br /&gt;
&lt;br /&gt;
====Cross-cutting concerns ====&lt;br /&gt;
&lt;br /&gt;
Even though most classes in an OO model will perform a single, specific function, they often share common, secondary requirements with other classes. Even though the primary functionality of each class is very different, the code needed to perform the secondary functionality is often identical.&lt;br /&gt;
&lt;br /&gt;
====Advice====&lt;br /&gt;
&lt;br /&gt;
This is the additional code that you want to apply to your existing model.&lt;br /&gt;
&lt;br /&gt;
====Point-cut====&lt;br /&gt;
&lt;br /&gt;
This is the term given to the point of execution in the application at which cross-cutting concern needs to be applied.&lt;br /&gt;
&lt;br /&gt;
====Aspect====&lt;br /&gt;
&lt;br /&gt;
The combination of the point-cut and the advice is termed an aspect. &lt;br /&gt;
&lt;br /&gt;
===Overview===&lt;br /&gt;
&lt;br /&gt;
AOP encapsulates crosscutting concerns into a single program module called an aspect, which can add behavior to a program and verify or change its static structure. The aspect specifies join points in the running program using point-cuts, and permits advice code to run around the join point, to join the advice behavior to the program semantics. The aspect can also declare members and supertypes of other classes if the declarations are type-safe, binary-compatible and respect access rules. The combination of advice and inter-type declarations enables one to implement the correct associations and behaviors for many objects in one aspect.&lt;br /&gt;
&lt;br /&gt;
Mechanisms for defining and composing abstractions are essential elements of programming languages. The design style supported by the abstraction mechanisms of most current languages is one of breaking a system down into parameterized components that can be called upon to perform a function.&lt;br /&gt;
But many systems have properties that don't necessarily align with the system's functional components, such as failure handling, persistence, communication, replication, coordination, memory management, or real-time constraints, and tend to cut across groups of functional components.&lt;br /&gt;
&lt;br /&gt;
While they can be thought about and analyzed relatively separately from the basic functionality, programming them using current component-oriented languages tends to result in these aspects being spread throughout the code. The source code becomes a tangled mess of instructions for different purposes.&lt;br /&gt;
&lt;br /&gt;
This phenomenon is at the heart of much needless complexity in existing software systems. A number of researchers have begun working on approaches to this problem that allow programmers to express each of a system's aspects of concern in a separate and natural form, and then automatically combine those separate descriptions into a final executable form. These approaches have been called aspect-oriented programming.&lt;br /&gt;
&lt;br /&gt;
==Example of Aspect==&lt;br /&gt;
&lt;br /&gt;
HERE IS WHERE AN EXAMPLE IS GOING (Not Done Yet)&lt;br /&gt;
&lt;br /&gt;
==AspectJ==&lt;br /&gt;
&lt;br /&gt;
AspectJ is a seamless aspect-oriented extension to the Java programming language that enables clean modularization of these 'crosscutting concerns'. Some aspects of system implementation, such as logging, error handling, standards enforcement and feature variations are notoriously difficult to implement in a modular way. The result is that code is tangled across a system and leads to quality, productivity and maintenance problems.&lt;br /&gt;
&lt;br /&gt;
AspectJ is a simple, practical, and compatible aspect-oriented extension to Java.&lt;br /&gt;
&lt;br /&gt;
• Upward compatibility — all legal Java programs must be legal AspectJ programs.&lt;br /&gt;
• Platform compatibility — all legal AspectJ programs must run on standard Java virtual machines.&lt;br /&gt;
• Tool compatibility — it must be possible to extend existing tools to support AspectJ in a natural way; this includes IDEs, documentation tools, and design tools.&lt;br /&gt;
• Programmer compatibility — Programming with AspectJ must feel like a natural extension of programming with Java.&lt;br /&gt;
&lt;br /&gt;
===EXAMPLE CODE of ASPECTJ – (Not Done Yet)===&lt;br /&gt;
&lt;br /&gt;
==AspectR==&lt;br /&gt;
&lt;br /&gt;
AspectR is the AOP Language for Ruby. It was modeled after and resembles a lot like AspectJ.&lt;br /&gt;
&lt;br /&gt;
There are some differences which AspectR does not have that AspectJ does:&lt;br /&gt;
    * Join points: method/constructor called, method/constructor executes (?), exception handler executes&lt;br /&gt;
    * Most of the point-cut designator primitives&lt;br /&gt;
    * Composition of point-cut designators&lt;br /&gt;
    * 'around' advices&lt;br /&gt;
    * precedence/specificity among advices/aspects&lt;br /&gt;
    * reflection by sending join-point object to advices with context of join point etc &lt;br /&gt;
    * control-flow based crosscutting&lt;/div&gt;</summary>
		<author><name>SteelerNation</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_9_SN&amp;diff=23887</id>
		<title>CSC/ECE 517 Fall 2009/wiki2 9 SN</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_9_SN&amp;diff=23887"/>
		<updated>2009-10-09T15:05:41Z</updated>

		<summary type="html">&lt;p&gt;SteelerNation: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Aspect-Oriented Programming&lt;br /&gt;
&lt;br /&gt;
In writing a program, you must handle the many concerns of the system. A *concern* is a requirement of, or action that must be performed by, the system. For example, concerns for a banking system include making deposits, making withdrawals, handling account inquiries, transferring funds between accounts, authenticating and authorizing the user, and synchronizing and logging all transactions. The concerns at the end of the list are secondary, and are required across many of the core modules. For this reason they are referred to in AOP as cross-cutting concerns. Discuss AOP in general, and touch briefly on AspectJ and AspectR, which facilitate it in Java and Ruby, respectively&lt;br /&gt;
&lt;br /&gt;
Aspect Oriented Programming&lt;br /&gt;
Traditional software development has focused on developing systems into units of primary functionality, while recognizing that there are other issues of concern that do not fit well into the primary decomposition. This process leaves it to the programmers to code modules corresponding to the primary functionality and to make sure that all other issues of concern are addressed in the code wherever appropriate. Programmers need to keep in mind all the things that need to be done, how to deal with each issue, the problems associated with the possible interactions, and the execution of the right behavior at the right time. When all these things are taken into account, this often results in serious issues being raised during the development and maintenance of a large software system.&lt;br /&gt;
Aspect-Oriented programming focuses on the identification, specification and representation of crosscutting concerns and their modularization into separate functional units as well as their automated composition into a working system.&lt;br /&gt;
What is AOP?&lt;br /&gt;
Introduction&lt;br /&gt;
Software design processes and programming languages exist in a mutually supporting relationship. Design processes break a system down into smaller and smaller units. Programming languages provide mechanisms that allow the programmer to define abstractions of system sub-units, and then compose those abstractions in different ways to produce the overall system. A design process and a programming language work well together when the programming language provides abstraction and composition mechanisms that cleanly support the kinds of units the design process breaks the system into. From this perspective, many existing programming languages, including object-oriented languages, procedural languages and functional languages, can be seen as having a common root in that their key abstraction and composition mechanisms are all rooted in some form of generalized procedure.&lt;br /&gt;
Terminology&lt;br /&gt;
Cross-cutting concerns –&lt;br /&gt;
Even though most classes in an OO model will perform a single, specific function, they often share common, secondary requirements with other classes. Even though the primary functionality of each class is very different, the code needed to perform the secondary functionality is often identical.&lt;br /&gt;
Advice – &lt;br /&gt;
 This is the additional code that you want to apply to your existing model.&lt;br /&gt;
Point-cut – &lt;br /&gt;
This is the term given to the point of execution in the application at which cross-cutting concern needs to be applied.&lt;br /&gt;
Aspect – &lt;br /&gt;
The combination of the point-cut and the advice is termed an aspect. &lt;br /&gt;
Overview&lt;br /&gt;
AOP encapsulates crosscutting concerns into a single program module called an aspect, which can add behavior to a program and verify or change its static structure. The aspect specifies join points in the running program using point-cuts, and permits advice code to run around the join point, to join the advice behavior to the program semantics. The aspect can also declare members and supertypes of other classes if the declarations are type-safe, binary-compatible and respect access rules. The combination of advice and inter-type declarations enables one to implement the correct associations and behaviors for many objects in one aspect.&lt;br /&gt;
Mechanisms for defining and composing abstractions are essential elements of programming languages. The design style supported by the abstraction mechanisms of most current languages is one of breaking a system down into parameterized components that can be called upon to perform a function.&lt;br /&gt;
But many systems have properties that don't necessarily align with the system's functional components, such as failure handling, persistence, communication, replication, coordination, memory management, or real-time constraints, and tend to cut across groups of functional components.&lt;br /&gt;
&lt;br /&gt;
While they can be thought about and analyzed relatively separately from the basic functionality, programming them using current component-oriented languages tends to result in these aspects being spread throughout the code. The source code becomes a tangled mess of instructions for different purposes.&lt;br /&gt;
This phenomenon is at the heart of much needless complexity in existing software systems. A number of researchers have begun working on approaches to this problem that allow programmers to express each of a system's aspects of concern in a separate and natural form, and then automatically combine those separate descriptions into a final executable form. These approaches have been called aspect-oriented programming.&lt;br /&gt;
Example:&lt;br /&gt;
HERE IS WHERE AN EXAMPLE IS GOING (Not Done Yet)&lt;br /&gt;
AspectJ&lt;br /&gt;
AspectJ is a seamless aspect-oriented extension to the Java programming language that enables clean modularization of these 'crosscutting concerns'. Some aspects of system implementation, such as logging, error handling, standards enforcement and feature variations are notoriously difficult to implement in a modular way. The result is that code is tangled across a system and leads to quality, productivity and maintenance problems.&lt;br /&gt;
AspectJ is a simple, practical, and compatible aspect-oriented extension to Java.&lt;br /&gt;
• Upward compatibility — all legal Java programs must be legal AspectJ programs.&lt;br /&gt;
• Platform compatibility — all legal AspectJ programs must run on standard Java virtual machines.&lt;br /&gt;
• Tool compatibility — it must be possible to extend existing tools to support AspectJ in a natural way; this includes IDEs, documentation tools, and design tools.&lt;br /&gt;
• Programmer compatibility — Programming with AspectJ must feel like a natural extension of programming with Java.&lt;br /&gt;
&lt;br /&gt;
EXAMPLE CODE of ASPECTJ – (Not Done Yet)&lt;br /&gt;
&lt;br /&gt;
AspectR&lt;br /&gt;
AspectR is the AOP Language for Ruby. It was modeled after and resembles a lot like AspectJ.&lt;br /&gt;
There are some differences which AspectR does not have that AspectJ does:&lt;br /&gt;
    * Join points: method/constructor called, method/constructor executes (?), exception handler executes&lt;br /&gt;
    * Most of the point-cut designator primitives&lt;br /&gt;
    * Composition of point-cut designators&lt;br /&gt;
    * 'around' advices&lt;br /&gt;
    * precedence/specificity among advices/aspects&lt;br /&gt;
    * reflection by sending join-point object to advices with context of join point etc &lt;br /&gt;
    * control-flow based crosscutting&lt;/div&gt;</summary>
		<author><name>SteelerNation</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_2_sn&amp;diff=19045</id>
		<title>CSC/ECE 517 Fall 2009/wiki1a 2 sn</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_2_sn&amp;diff=19045"/>
		<updated>2009-09-11T15:17:15Z</updated>

		<summary type="html">&lt;p&gt;SteelerNation: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Comparison of Mock Frameworks ==&lt;br /&gt;
'''NOTE:''' THIS SECTION WILL BE REMOVED FOR FINAL VERSION&lt;br /&gt;
&lt;br /&gt;
Assignment:&lt;br /&gt;
Mock objects and mock frameworks.  When performing tests, it's convenient to have the objects be in a particular configuration, so that boundary cases can be tested.  Setting up the objects can sometimes be complicated.  The Wikipedia article for mock objects lists several, but does not compare them.  Compare different systems for mock objects, and mock frameworks (which are used to set up mock objects).&lt;br /&gt;
&lt;br /&gt;
== Definition ==&lt;br /&gt;
In object-oriented programming, mock objects are simulated objects that mimic the behavior of real objects in controlled ways. A computer programmer typically creates a mock object to test the behavior of some other object, in much the same way that a car designer uses a crash test dummy to simulate the dynamic behavior of a human in vehicle impacts. [FROM http://en.wikipedia.org/wiki/Mock_object ]&lt;br /&gt;
&lt;br /&gt;
Mock Frameworks are the environments that are available to create these mock objects and mock tests. &lt;br /&gt;
There are many different types of frameworks for different platforms. They are a set of programmable APIs that allow creation of mock and stub objects in relative easy fashion. Mock frameworks save the developer from the need to write repetitive code to test or simulate object interactions.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Concepts ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==='''Why Mock?'''===&lt;br /&gt;
&lt;br /&gt;
*The concept behind mock objects is that there is a need to create an object that will take the place of the real object. This mock object will expect a certain method to be called with certain parameters and when that happens, it will return an expected result. When writing units tests for a class that would normally use the real object, we can instead supply it with a mock object. This allows us a new level of flexibility in testing.&lt;br /&gt;
&lt;br /&gt;
*Ease of modifying the mock object during separate tests to get it to get it to return a range of different data. Test can pass in valid, invalid, and extreme ranges to test how the code calling it handles such situations.&lt;br /&gt;
&lt;br /&gt;
*Simulation of failures, such as the inability to connect to a database, to test the failure mode of classes.&lt;br /&gt;
&lt;br /&gt;
*Encourages better structured tests and, more importantly, improved domain code by preserving encapsulation, reducing dependencies and clarifying the interactions between classes. A running Object-Oriented program is a web of objects that collaborate by calling methods on each other. There sometimes can be many dependencies that have to be met in order to call certain objects. To make the complex dependencies be easily testable, mock objects are created in order to “mock” the stages that the object needs to be in, in order to call upon another object.&lt;br /&gt;
&lt;br /&gt;
*Often times in programming, only the changes in state of an object are tested. This would be acceptable only if there was one object. However, many real world applications contain hundreds upon hundreds of different objects. Mock objects have changed the focus of test from thinking about the changes in state of an object to thinking about its interactions with other objects.&lt;br /&gt;
&lt;br /&gt;
==='''Different Types'''===&lt;br /&gt;
&lt;br /&gt;
====Proxy====&lt;br /&gt;
A proxy object is an object that is used to take the place of a real object. This is the original concept for all mock frameworks. In the case of mock objects, a proxy object is used to imitate the real object your code is dependent on. The proxy object is created with the mocking framework, and then set it on the object using either a setter or constructor. One has to be able to set the dependency up through an external means. This is one of the reasons Dependency Injection frameworks like Java Spring have increase in popularity because they allow the ability to inject the proxy objects without modifying code.&lt;br /&gt;
&lt;br /&gt;
====Class Remapping====&lt;br /&gt;
The second form of mocking is to remap the class file in the class loader. The concept is relatively new and is provided by the new java.lang.Instrument class. The basic idea is that the framework tells the class loader to remap the reference to another class file it will load which will be the mocked class. This allows one to be able to mock objects that are created by using the new operator much like other Object Oriented languages. Although this approach provides more functionality than the proxy object approach, it is much more complex and harder to write and fully understand.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Comparison of Different Systems ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==='''EasyMock'''===&lt;br /&gt;
*EasyMock has been the first dynamic Mock Object generator, relieving users of hand-writing Mock Objects, or generating code for them.&lt;br /&gt;
*Dynamic creation of Mock Objects&lt;br /&gt;
*Supports re-factoring-safe Mock Objects&lt;br /&gt;
*Ability to return values and exceptions.&lt;br /&gt;
*Method order checking&lt;br /&gt;
http://easymock.org/&lt;br /&gt;
&lt;br /&gt;
==='''MOQ'''===&lt;br /&gt;
*Moq is the only mocking library for .NET developed from scratch to take full advantage of .NET 3.5 and C# 3.0 features.&lt;br /&gt;
*Supports mocking interfaces as well as classes. &lt;br /&gt;
*Supports the overriding of expectations where the test can set default expectations in a fixture setup, and override as needed on certain tests&lt;br /&gt;
*Intercept and raise events on mocks&lt;br /&gt;
http://code.google.com/p/moq/.&lt;br /&gt;
&lt;br /&gt;
==='''NMock'''===&lt;br /&gt;
*NMock is a dynamic mock object library for .NET. &lt;br /&gt;
*Dynamic creation of Mock Objects&lt;br /&gt;
*Allows expectations to be defined and fails the test if any expectations are violated&lt;br /&gt;
*Expectations are specified beforehand and verified on the fly as the code under test is being executed, rather than afterward using assertions&lt;br /&gt;
*Implementations of interfaces are generate on the fly at runtime&lt;br /&gt;
http://www.nmock.org/index.html&lt;br /&gt;
&lt;br /&gt;
==='''Rhino Mocks'''===&lt;br /&gt;
*Only supports mocks of interfaces, delegates and classes, including those with parametrized constructors.&lt;br /&gt;
*Expectations on the called methods by using strongly typed mocks instead of strings.&lt;br /&gt;
*Recursive mocking&lt;br /&gt;
http://ayende.com/projects/rhino-mocks.aspx&lt;br /&gt;
&lt;br /&gt;
==='''jMock'''===&lt;br /&gt;
*Forces test to be explicit about the argument values that will be passed to the expected methods&lt;br /&gt;
*Ability to write custom stubs, constraints, and Invocation Matchers&lt;br /&gt;
*Works well with the auto completion and refactoring features of your IDE&lt;br /&gt;
http://www.jmock.org/index.html&lt;br /&gt;
&lt;br /&gt;
==='''Mocha'''===&lt;br /&gt;
*Similar to jMock only for Ruby &lt;br /&gt;
*Supports testing frameworks: Test::Unit, RSpec, test/spec, expectations, Dust, MiniTest and JtestR.&lt;br /&gt;
http://mocha.rubyforge.org/&lt;br /&gt;
&lt;br /&gt;
==='''Test::MockObject'''===&lt;br /&gt;
*Similar to jMock only for Perl&lt;br /&gt;
*Simple testing techniques&lt;br /&gt;
http://search.cpan.org/dist/Test-MockObject/lib/Test/MockObject.pm&lt;br /&gt;
&lt;br /&gt;
==='''JMockit'''===&lt;br /&gt;
&lt;br /&gt;
*Simpler and more succinct APIs for writing tests with behavior verification or state verification&lt;br /&gt;
*Provides other tools for supporting the creation of large test suites&lt;br /&gt;
*Uses class remapping instead of the original proxy dependencies&lt;br /&gt;
https://jmockit.dev.java.net/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
A mock object framework can make sure that the method under test, when executed, will in fact call certain functions on the mock object  and that the method under test will react in an appropriate way to whatever the mock objects do. Most parts of a software system do not work in isolation, but collaborate with other parts to get their job done. Writing tests provides a framework to think about functionality, Mock Objects provides a framework for making assertions about those relationships and for simulating responses. Mock Objects also allows programmers to make their tests only as precise as they need to be.&lt;br /&gt;
&lt;br /&gt;
The different frameworks provide a myriad of options for software developers to produce the correct mock tests for their software. The more complex the system, the more important it is when selecting the mock framework. Support for the framework is essential as well. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
1. [http://www.sizovpoint.com/2009/03/java-mock-frameworks-comparison.html Java Mock Framework Comparisons]&lt;br /&gt;
&lt;br /&gt;
2. [http://msdn.microsoft.com/en-us/magazine/dd882516.aspx Using Mocks And Tests To Design Role-Based Objects]&lt;br /&gt;
&lt;br /&gt;
3. [http://en.wikipedia.org/wiki/Mock_object Wikipedia - Mock object]&lt;/div&gt;</summary>
		<author><name>SteelerNation</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_2_sn&amp;diff=18742</id>
		<title>CSC/ECE 517 Fall 2009/wiki1a 2 sn</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_2_sn&amp;diff=18742"/>
		<updated>2009-09-08T18:35:58Z</updated>

		<summary type="html">&lt;p&gt;SteelerNation: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Comparison of Mock Frameworks ==&lt;br /&gt;
'''NOTE:''' THIS SECTION WILL BE REMOVED FOR FINAL VERSION&lt;br /&gt;
&lt;br /&gt;
Assignment:&lt;br /&gt;
Mock objects and mock frameworks.  When performing tests, it's convenient to have the objects be in a particular configuration, so that boundary cases can be tested.  Setting up the objects can sometimes be complicated.  The Wikipedia article for mock objects lists several, but does not compare them.  Compare different systems for mock objects, and mock frameworks (which are used to set up mock objects).&lt;br /&gt;
&lt;br /&gt;
== Definition ==&lt;br /&gt;
In object-oriented programming, mock objects are simulated objects that mimic the behavior of real objects in controlled ways. A computer programmer typically creates a mock object to test the behavior of some other object, in much the same way that a car designer uses a crash test dummy to simulate the dynamic behavior of a human in vehicle impacts. [FROM http://en.wikipedia.org/wiki/Mock_object ]&lt;br /&gt;
&lt;br /&gt;
Mock Frameworks are the environments that are available to create these mock objects and mock tests. &lt;br /&gt;
There are many different types of frameworks for different platforms. They are a set of programmable APIs that allow creation of mock and stub objects in relative easy fashion. Mock frameworks save the developer from the need to write repetitive code to test or simulate object interactions.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Concepts ==&lt;br /&gt;
&lt;br /&gt;
==='''Why Mock?'''===&lt;br /&gt;
&lt;br /&gt;
*The concept behind mock objects is that there is a need to create an object that will take the place of the real object. This mock object will expect a certain method to be called with certain parameters and when that happens, it will return an expected result. When writing units tests for a class that would normally use the real object, we can instead supply it with a mock object. This allows us a new level of flexibility in testing.&lt;br /&gt;
&lt;br /&gt;
*Ease of modifying the mock object during separate tests to get it to get it to return a range of different data. Test can pass in valid, invalid, and extreme ranges to test how the code calling it handles such situations.&lt;br /&gt;
&lt;br /&gt;
*Simulation of failures, such as the inability to connect to a database, to test the failure mode of classes.&lt;br /&gt;
&lt;br /&gt;
*Encourages better structured tests and, more importantly, improved domain code by preserving encapsulation, reducing dependencies and clarifying the interactions between classes. A running Object-Oriented program is a web of objects that collaborate by calling methods on each other. There sometimes can be many dependencies that have to be met in order to call certain objects. To make the complex dependencies be easily testable, mock objects are created in order to “mock” the stages that the object needs to be in, in order to call upon another object.&lt;br /&gt;
&lt;br /&gt;
*Often times in programming, only the changes in state of an object are tested. This would be acceptable only if there was one object. However, many real world applications contain hundreds upon hundreds of different objects. Mock objects have changed the focus of test from thinking about the changes in state of an object to thinking about its interactions with other objects.&lt;br /&gt;
&lt;br /&gt;
==='''Different Types'''===&lt;br /&gt;
&lt;br /&gt;
====Proxy====&lt;br /&gt;
A proxy object is an object that is used to take the place of a real object. This is the original concept for all mock frameworks. In the case of mock objects, a proxy object is used to imitate the real object your code is dependent on. The proxy object is created with the mocking framework, and then set it on the object using either a setter or constructor. One has to be able to set the dependency up through an external means. This is one of the reasons Dependency Injection frameworks like Java Spring have increase in popularity because they allow the ability to inject the proxy objects without modifying code.&lt;br /&gt;
&lt;br /&gt;
====Class Remapping====&lt;br /&gt;
The second form of mocking is to remap the class file in the class loader. The concept is relatively new and is provided by the new java.lang.Instrument class. The basic idea is that the framework tells the class loader to remap the reference to another class file it will load which will be the mocked class. This allows one to be able to mock objects that are created by using the new operator much like other Object Oriented languages. Although this approach provides more functionality than the proxy object approach, it is much more complex and harder to write and fully understand.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Comparison of Different Systems ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==='''EasyMock'''===&lt;br /&gt;
*EasyMock has been the first dynamic Mock Object generator, relieving users of hand-writing Mock Objects, or generating code for them.&lt;br /&gt;
*Dynamic creation of Mock Objects&lt;br /&gt;
*Supports re-factoring-safe Mock Objects&lt;br /&gt;
*Ability to return values and exceptions.&lt;br /&gt;
*Method order checking&lt;br /&gt;
http://easymock.org/&lt;br /&gt;
&lt;br /&gt;
==='''MOQ'''===&lt;br /&gt;
*Moq is the only mocking library for .NET developed from scratch to take full advantage of .NET 3.5 and C# 3.0 features.&lt;br /&gt;
*Supports mocking interfaces as well as classes. &lt;br /&gt;
*Supports the overriding of expectations where the test can set default expectations in a fixture setup, and override as needed on certain tests&lt;br /&gt;
*Intercept and raise events on mocks&lt;br /&gt;
http://code.google.com/p/moq/.&lt;br /&gt;
&lt;br /&gt;
==='''NMock'''===&lt;br /&gt;
*NMock is a dynamic mock object library for .NET. &lt;br /&gt;
*Dynamic creation of Mock Objects&lt;br /&gt;
*Allows expectations to be defined and fails the test if any expectations are violated&lt;br /&gt;
*Expectations are specified beforehand and verified on the fly as the code under test is being executed, rather than afterward using assertions&lt;br /&gt;
*Implementations of interfaces are generate on the fly at runtime&lt;br /&gt;
http://www.nmock.org/index.html&lt;br /&gt;
&lt;br /&gt;
==='''Rhino Mocks'''===&lt;br /&gt;
*Only supports mocks of interfaces, delegates and classes, including those with parametrized constructors.&lt;br /&gt;
*Expectations on the called methods by using strongly typed mocks instead of strings.&lt;br /&gt;
*Recursive mocking&lt;br /&gt;
http://ayende.com/projects/rhino-mocks.aspx&lt;br /&gt;
&lt;br /&gt;
==='''jMock'''===&lt;br /&gt;
*Forces test to be explicit about the argument values that will be passed to the expected methods&lt;br /&gt;
*Ability to write custom stubs, constraints, and Invocation Matchers&lt;br /&gt;
*Works well with the auto completion and refactoring features of your IDE&lt;br /&gt;
http://www.jmock.org/index.html&lt;br /&gt;
&lt;br /&gt;
==='''Mocha'''===&lt;br /&gt;
*Similar to jMock only for Ruby &lt;br /&gt;
*Supports testing frameworks: Test::Unit, RSpec, test/spec, expectations, Dust, MiniTest and JtestR.&lt;br /&gt;
http://mocha.rubyforge.org/&lt;br /&gt;
&lt;br /&gt;
==='''Test::MockObject'''===&lt;br /&gt;
*Similar to jMock only for Perl&lt;br /&gt;
*Simple testing techniques&lt;br /&gt;
http://search.cpan.org/dist/Test-MockObject/lib/Test/MockObject.pm&lt;br /&gt;
&lt;br /&gt;
==='''JMockit'''===&lt;br /&gt;
&lt;br /&gt;
*Simpler and more succinct APIs for writing tests with behavior verification or state verification&lt;br /&gt;
*Provides other tools for supporting the creation of large test suites&lt;br /&gt;
*Uses class remapping instead of the original proxy dependencies&lt;br /&gt;
https://jmockit.dev.java.net/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
A mock object framework can make sure that the method under test, when executed, will in fact call certain functions on the mock object  and that the method under test will react in an appropriate way to whatever the mock objects do. Most parts of a software system do not work in isolation, but collaborate with other parts to get their job done. Writing tests provides a framework to think about functionality, Mock Objects provides a framework for making assertions about those relationships and for simulating responses. Mock Objects also allows programmers to make their tests only as precise as they need to be.&lt;br /&gt;
&lt;br /&gt;
The different frameworks provide a myriad of options for software developers to produce the correct mock tests for their software. The more complex the system, the more important it is when selecting the mock framework. Support for the framework is essential as well. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
1. [http://www.sizovpoint.com/2009/03/java-mock-frameworks-comparison.html Java Mock Framework Comparisons]&lt;br /&gt;
&lt;br /&gt;
2. [http://msdn.microsoft.com/en-us/magazine/dd882516.aspx Using Mocks And Tests To Design Role-Based Objects]&lt;br /&gt;
&lt;br /&gt;
3. [http://en.wikipedia.org/wiki/Mock_object Wikipedia - Mock object]&lt;/div&gt;</summary>
		<author><name>SteelerNation</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a/2_sc&amp;diff=18740</id>
		<title>CSC/ECE 517 Fall 2009/wiki1a/2 sc</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a/2_sc&amp;diff=18740"/>
		<updated>2009-09-08T18:32:04Z</updated>

		<summary type="html">&lt;p&gt;SteelerNation: /* Comparison of Mock Frameworks */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Comparison of Mock Frameworks ==&lt;br /&gt;
'''NOTE:''' THIS SECTION WILL BE REMOVED FOR FINAL VERSION&lt;br /&gt;
&lt;br /&gt;
Assignment:&lt;br /&gt;
Mock objects and mock frameworks.  When performing tests, it's convenient to have the objects be in a particular configuration, so that boundary cases can be tested.  Setting up the objects can sometimes be complicated.  The Wikipedia article for mock objects lists several, but does not compare them.  Compare different systems for mock objects, and mock frameworks (which are used to set up mock objects).&lt;br /&gt;
&lt;br /&gt;
== Definition ==&lt;br /&gt;
In object-oriented programming, mock objects are simulated objects that mimic the behavior of real objects in controlled ways. A computer programmer typically creates a mock object to test the behavior of some other object, in much the same way that a car designer uses a crash test dummy to simulate the dynamic behavior of a human in vehicle impacts. [FROM http://en.wikipedia.org/wiki/Mock_object ]&lt;br /&gt;
&lt;br /&gt;
Mock Frameworks are the environments that are available to create these mock objects and mock tests. &lt;br /&gt;
There are many different types of frameworks for different platforms. They are a set of programmable APIs that allow creation of mock and stub objects in relative easy fashion. Mock frameworks save the developer from the need to write repetitive code to test or simulate object interactions.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Concepts ==&lt;br /&gt;
&lt;br /&gt;
==='''Why Mock?'''===&lt;br /&gt;
&lt;br /&gt;
*The concept behind mock objects is that there is a need to create an object that will take the place of the real object. This mock object will expect a certain method to be called with certain parameters and when that happens, it will return an expected result. When writing units tests for a class that would normally use the real object, we can instead supply it with a mock object. This allows us a new level of flexibility in testing.&lt;br /&gt;
&lt;br /&gt;
*Ease of modifying the mock object during separate tests to get it to get it to return a range of different data. Test can pass in valid, invalid, and extreme ranges to test how the code calling it handles such situations.&lt;br /&gt;
&lt;br /&gt;
*Simulation of failures, such as the inability to connect to a database, to test the failure mode of classes.&lt;br /&gt;
&lt;br /&gt;
*Encourages better structured tests and, more importantly, improved domain code by preserving encapsulation, reducing dependencies and clarifying the interactions between classes. A running Object-Oriented program is a web of objects that collaborate by calling methods on each other. There sometimes can be many dependencies that have to be met in order to call certain objects. To make the complex dependencies be easily testable, mock objects are created in order to “mock” the stages that the object needs to be in, in order to call upon another object.&lt;br /&gt;
&lt;br /&gt;
*Often times in programming, only the changes in state of an object are tested. This would be acceptable only if there was one object. However, many real world applications contain hundreds upon hundreds of different objects. Mock objects have changed the focus of test from thinking about the changes in state of an object to thinking about its interactions with other objects.&lt;br /&gt;
&lt;br /&gt;
==='''Different Types'''===&lt;br /&gt;
&lt;br /&gt;
====Proxy====&lt;br /&gt;
A proxy object is an object that is used to take the place of a real object. This is the original concept for all mock frameworks. In the case of mock objects, a proxy object is used to imitate the real object your code is dependent on. The proxy object is created with the mocking framework, and then set it on the object using either a setter or constructor. One has to be able to set the dependency up through an external means. This is one of the reasons Dependency Injection frameworks like Java Spring have increase in popularity because they allow the ability to inject the proxy objects without modifying code.&lt;br /&gt;
&lt;br /&gt;
====Class Remapping====&lt;br /&gt;
The second form of mocking is to remap the class file in the class loader. The concept is relatively new and is provided by the new java.lang.Instrument class. The basic idea is that the framework tells the class loader to remap the reference to another class file it will load which will be the mocked class. This allows one to be able to mock objects that are created by using the new operator much like other Object Oriented languages. Although this approach provides more functionality than the proxy object approach, it is much more complex and harder to write and fully understand.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Comparison of Different Systems ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==='''EasyMock'''===&lt;br /&gt;
*EasyMock has been the first dynamic Mock Object generator, relieving users of hand-writing Mock Objects, or generating code for them.&lt;br /&gt;
*Dynamic creation of Mock Objects&lt;br /&gt;
*Supports re-factoring-safe Mock Objects&lt;br /&gt;
*Ability to return values and exceptions.&lt;br /&gt;
*Method order checking&lt;br /&gt;
http://easymock.org/&lt;br /&gt;
&lt;br /&gt;
==='''MOQ'''===&lt;br /&gt;
*Moq is the only mocking library for .NET developed from scratch to take full advantage of .NET 3.5 and C# 3.0 features.&lt;br /&gt;
*Supports mocking interfaces as well as classes. &lt;br /&gt;
*Supports the overriding of expectations where the test can set default expectations in a fixture setup, and override as needed on certain tests&lt;br /&gt;
*Intercept and raise events on mocks&lt;br /&gt;
http://code.google.com/p/moq/.&lt;br /&gt;
&lt;br /&gt;
==='''NMock'''===&lt;br /&gt;
*NMock is a dynamic mock object library for .NET. &lt;br /&gt;
*Dynamic creation of Mock Objects&lt;br /&gt;
*Allows expectations to be defined and fails the test if any expectations are violated&lt;br /&gt;
*Expectations are specified beforehand and verified on the fly as the code under test is being executed, rather than afterward using assertions&lt;br /&gt;
*Implementations of interfaces are generate on the fly at runtime&lt;br /&gt;
http://www.nmock.org/index.html&lt;br /&gt;
&lt;br /&gt;
==='''Rhino Mocks'''===&lt;br /&gt;
*Only supports mocks of interfaces, delegates and classes, including those with parametrized constructors.&lt;br /&gt;
*Expectations on the called methods by using strongly typed mocks instead of strings.&lt;br /&gt;
*Recursive mocking&lt;br /&gt;
http://ayende.com/projects/rhino-mocks.aspx&lt;br /&gt;
&lt;br /&gt;
==='''jMock'''===&lt;br /&gt;
*Forces test to be explicit about the argument values that will be passed to the expected methods&lt;br /&gt;
*Ability to write custom stubs, constraints, and Invocation Matchers&lt;br /&gt;
*Works well with the auto completion and refactoring features of your IDE&lt;br /&gt;
http://www.jmock.org/index.html&lt;br /&gt;
&lt;br /&gt;
==='''Mocha'''===&lt;br /&gt;
*Similar to jMock only for Ruby &lt;br /&gt;
*Supports testing frameworks: Test::Unit, RSpec, test/spec, expectations, Dust, MiniTest and JtestR.&lt;br /&gt;
http://mocha.rubyforge.org/&lt;br /&gt;
&lt;br /&gt;
==='''Test::MockObject'''===&lt;br /&gt;
*Similar to jMock only for Perl&lt;br /&gt;
*Simple testing techniques&lt;br /&gt;
http://search.cpan.org/dist/Test-MockObject/lib/Test/MockObject.pm&lt;br /&gt;
&lt;br /&gt;
==='''JMockit'''===&lt;br /&gt;
&lt;br /&gt;
*Simpler and more succinct APIs for writing tests with behavior verification or state verification&lt;br /&gt;
*Provides other tools for supporting the creation of large test suites&lt;br /&gt;
*Uses class remapping instead of the original proxy dependencies&lt;br /&gt;
https://jmockit.dev.java.net/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
A mock object framework can make sure that the method under test, when executed, will in fact call certain functions on the mock object  and that the method under test will react in an appropriate way to whatever the mock objects do. Most parts of a software system do not work in isolation, but collaborate with other parts to get their job done. Writing tests provides a framework to think about functionality, Mock Objects provides a framework for making assertions about those relationships and for simulating responses. Mock Objects also allows programmers to make their tests only as precise as they need to be.&lt;br /&gt;
&lt;br /&gt;
The different frameworks provide a myriad of options for software developers to produce the correct mock tests for their software. The more complex the system, the more important it is when selecting the mock framework. Support for the framework is essential as well. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
1. [http://www.sizovpoint.com/2009/03/java-mock-frameworks-comparison.html Java Mock Framework Comparisons]&lt;br /&gt;
&lt;br /&gt;
2. [http://msdn.microsoft.com/en-us/magazine/dd882516.aspx Using Mocks And Tests To Design Role-Based Objects]&lt;br /&gt;
&lt;br /&gt;
3. [http://en.wikipedia.org/wiki/Mock_object Wikipedia - Mock object]&lt;/div&gt;</summary>
		<author><name>SteelerNation</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a/2_sc&amp;diff=18737</id>
		<title>CSC/ECE 517 Fall 2009/wiki1a/2 sc</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a/2_sc&amp;diff=18737"/>
		<updated>2009-09-08T18:28:33Z</updated>

		<summary type="html">&lt;p&gt;SteelerNation: /* Links */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Comparison of Mock Frameworks ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Definition ==&lt;br /&gt;
In object-oriented programming, mock objects are simulated objects that mimic the behavior of real objects in controlled ways. A computer programmer typically creates a mock object to test the behavior of some other object, in much the same way that a car designer uses a crash test dummy to simulate the dynamic behavior of a human in vehicle impacts. [FROM http://en.wikipedia.org/wiki/Mock_object ]&lt;br /&gt;
&lt;br /&gt;
Mock Frameworks are the environments that are available to create these mock objects and mock tests. &lt;br /&gt;
There are many different types of frameworks for different platforms. They are a set of programmable APIs that allow creation of mock and stub objects in relative easy fashion. Mock frameworks save the developer from the need to write repetitive code to test or simulate object interactions.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Concepts ==&lt;br /&gt;
&lt;br /&gt;
==='''Why Mock?'''===&lt;br /&gt;
&lt;br /&gt;
*The concept behind mock objects is that there is a need to create an object that will take the place of the real object. This mock object will expect a certain method to be called with certain parameters and when that happens, it will return an expected result. When writing units tests for a class that would normally use the real object, we can instead supply it with a mock object. This allows us a new level of flexibility in testing.&lt;br /&gt;
&lt;br /&gt;
*Ease of modifying the mock object during separate tests to get it to get it to return a range of different data. Test can pass in valid, invalid, and extreme ranges to test how the code calling it handles such situations.&lt;br /&gt;
&lt;br /&gt;
*Simulation of failures, such as the inability to connect to a database, to test the failure mode of classes.&lt;br /&gt;
&lt;br /&gt;
*Encourages better structured tests and, more importantly, improved domain code by preserving encapsulation, reducing dependencies and clarifying the interactions between classes. A running Object-Oriented program is a web of objects that collaborate by calling methods on each other. There sometimes can be many dependencies that have to be met in order to call certain objects. To make the complex dependencies be easily testable, mock objects are created in order to “mock” the stages that the object needs to be in, in order to call upon another object.&lt;br /&gt;
&lt;br /&gt;
*Often times in programming, only the changes in state of an object are tested. This would be acceptable only if there was one object. However, many real world applications contain hundreds upon hundreds of different objects. Mock objects have changed the focus of test from thinking about the changes in state of an object to thinking about its interactions with other objects.&lt;br /&gt;
&lt;br /&gt;
==='''Different Types'''===&lt;br /&gt;
&lt;br /&gt;
====Proxy====&lt;br /&gt;
A proxy object is an object that is used to take the place of a real object. This is the original concept for all mock frameworks. In the case of mock objects, a proxy object is used to imitate the real object your code is dependent on. The proxy object is created with the mocking framework, and then set it on the object using either a setter or constructor. One has to be able to set the dependency up through an external means. This is one of the reasons Dependency Injection frameworks like Java Spring have increase in popularity because they allow the ability to inject the proxy objects without modifying code.&lt;br /&gt;
&lt;br /&gt;
====Class Remapping====&lt;br /&gt;
The second form of mocking is to remap the class file in the class loader. The concept is relatively new and is provided by the new java.lang.Instrument class. The basic idea is that the framework tells the class loader to remap the reference to another class file it will load which will be the mocked class. This allows one to be able to mock objects that are created by using the new operator much like other Object Oriented languages. Although this approach provides more functionality than the proxy object approach, it is much more complex and harder to write and fully understand.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Comparison of Different Systems ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==='''EasyMock'''===&lt;br /&gt;
*EasyMock has been the first dynamic Mock Object generator, relieving users of hand-writing Mock Objects, or generating code for them.&lt;br /&gt;
*Dynamic creation of Mock Objects&lt;br /&gt;
*Supports re-factoring-safe Mock Objects&lt;br /&gt;
*Ability to return values and exceptions.&lt;br /&gt;
*Method order checking&lt;br /&gt;
http://easymock.org/&lt;br /&gt;
&lt;br /&gt;
==='''MOQ'''===&lt;br /&gt;
*Moq is the only mocking library for .NET developed from scratch to take full advantage of .NET 3.5 and C# 3.0 features.&lt;br /&gt;
*Supports mocking interfaces as well as classes. &lt;br /&gt;
*Supports the overriding of expectations where the test can set default expectations in a fixture setup, and override as needed on certain tests&lt;br /&gt;
*Intercept and raise events on mocks&lt;br /&gt;
http://code.google.com/p/moq/.&lt;br /&gt;
&lt;br /&gt;
==='''NMock'''===&lt;br /&gt;
*NMock is a dynamic mock object library for .NET. &lt;br /&gt;
*Dynamic creation of Mock Objects&lt;br /&gt;
*Allows expectations to be defined and fails the test if any expectations are violated&lt;br /&gt;
*Expectations are specified beforehand and verified on the fly as the code under test is being executed, rather than afterward using assertions&lt;br /&gt;
*Implementations of interfaces are generate on the fly at runtime&lt;br /&gt;
http://www.nmock.org/index.html&lt;br /&gt;
&lt;br /&gt;
==='''Rhino Mocks'''===&lt;br /&gt;
*Only supports mocks of interfaces, delegates and classes, including those with parametrized constructors.&lt;br /&gt;
*Expectations on the called methods by using strongly typed mocks instead of strings.&lt;br /&gt;
*Recursive mocking&lt;br /&gt;
http://ayende.com/projects/rhino-mocks.aspx&lt;br /&gt;
&lt;br /&gt;
==='''jMock'''===&lt;br /&gt;
*Forces test to be explicit about the argument values that will be passed to the expected methods&lt;br /&gt;
*Ability to write custom stubs, constraints, and Invocation Matchers&lt;br /&gt;
*Works well with the auto completion and refactoring features of your IDE&lt;br /&gt;
http://www.jmock.org/index.html&lt;br /&gt;
&lt;br /&gt;
==='''Mocha'''===&lt;br /&gt;
*Similar to jMock only for Ruby &lt;br /&gt;
*Supports testing frameworks: Test::Unit, RSpec, test/spec, expectations, Dust, MiniTest and JtestR.&lt;br /&gt;
http://mocha.rubyforge.org/&lt;br /&gt;
&lt;br /&gt;
==='''Test::MockObject'''===&lt;br /&gt;
*Similar to jMock only for Perl&lt;br /&gt;
*Simple testing techniques&lt;br /&gt;
http://search.cpan.org/dist/Test-MockObject/lib/Test/MockObject.pm&lt;br /&gt;
&lt;br /&gt;
==='''JMockit'''===&lt;br /&gt;
&lt;br /&gt;
*Simpler and more succinct APIs for writing tests with behavior verification or state verification&lt;br /&gt;
*Provides other tools for supporting the creation of large test suites&lt;br /&gt;
*Uses class remapping instead of the original proxy dependencies&lt;br /&gt;
https://jmockit.dev.java.net/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
A mock object framework can make sure that the method under test, when executed, will in fact call certain functions on the mock object  and that the method under test will react in an appropriate way to whatever the mock objects do. Most parts of a software system do not work in isolation, but collaborate with other parts to get their job done. Writing tests provides a framework to think about functionality, Mock Objects provides a framework for making assertions about those relationships and for simulating responses. Mock Objects also allows programmers to make their tests only as precise as they need to be.&lt;br /&gt;
&lt;br /&gt;
The different frameworks provide a myriad of options for software developers to produce the correct mock tests for their software. The more complex the system, the more important it is when selecting the mock framework. Support for the framework is essential as well. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
1. [http://www.sizovpoint.com/2009/03/java-mock-frameworks-comparison.html Java Mock Framework Comparisons]&lt;br /&gt;
&lt;br /&gt;
2. [http://msdn.microsoft.com/en-us/magazine/dd882516.aspx Using Mocks And Tests To Design Role-Based Objects]&lt;br /&gt;
&lt;br /&gt;
3. [http://en.wikipedia.org/wiki/Mock_object Wikipedia - Mock object]&lt;/div&gt;</summary>
		<author><name>SteelerNation</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a/2_sc&amp;diff=18736</id>
		<title>CSC/ECE 517 Fall 2009/wiki1a/2 sc</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a/2_sc&amp;diff=18736"/>
		<updated>2009-09-08T18:28:08Z</updated>

		<summary type="html">&lt;p&gt;SteelerNation: /* Links */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Comparison of Mock Frameworks ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Definition ==&lt;br /&gt;
In object-oriented programming, mock objects are simulated objects that mimic the behavior of real objects in controlled ways. A computer programmer typically creates a mock object to test the behavior of some other object, in much the same way that a car designer uses a crash test dummy to simulate the dynamic behavior of a human in vehicle impacts. [FROM http://en.wikipedia.org/wiki/Mock_object ]&lt;br /&gt;
&lt;br /&gt;
Mock Frameworks are the environments that are available to create these mock objects and mock tests. &lt;br /&gt;
There are many different types of frameworks for different platforms. They are a set of programmable APIs that allow creation of mock and stub objects in relative easy fashion. Mock frameworks save the developer from the need to write repetitive code to test or simulate object interactions.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Concepts ==&lt;br /&gt;
&lt;br /&gt;
==='''Why Mock?'''===&lt;br /&gt;
&lt;br /&gt;
*The concept behind mock objects is that there is a need to create an object that will take the place of the real object. This mock object will expect a certain method to be called with certain parameters and when that happens, it will return an expected result. When writing units tests for a class that would normally use the real object, we can instead supply it with a mock object. This allows us a new level of flexibility in testing.&lt;br /&gt;
&lt;br /&gt;
*Ease of modifying the mock object during separate tests to get it to get it to return a range of different data. Test can pass in valid, invalid, and extreme ranges to test how the code calling it handles such situations.&lt;br /&gt;
&lt;br /&gt;
*Simulation of failures, such as the inability to connect to a database, to test the failure mode of classes.&lt;br /&gt;
&lt;br /&gt;
*Encourages better structured tests and, more importantly, improved domain code by preserving encapsulation, reducing dependencies and clarifying the interactions between classes. A running Object-Oriented program is a web of objects that collaborate by calling methods on each other. There sometimes can be many dependencies that have to be met in order to call certain objects. To make the complex dependencies be easily testable, mock objects are created in order to “mock” the stages that the object needs to be in, in order to call upon another object.&lt;br /&gt;
&lt;br /&gt;
*Often times in programming, only the changes in state of an object are tested. This would be acceptable only if there was one object. However, many real world applications contain hundreds upon hundreds of different objects. Mock objects have changed the focus of test from thinking about the changes in state of an object to thinking about its interactions with other objects.&lt;br /&gt;
&lt;br /&gt;
==='''Different Types'''===&lt;br /&gt;
&lt;br /&gt;
====Proxy====&lt;br /&gt;
A proxy object is an object that is used to take the place of a real object. This is the original concept for all mock frameworks. In the case of mock objects, a proxy object is used to imitate the real object your code is dependent on. The proxy object is created with the mocking framework, and then set it on the object using either a setter or constructor. One has to be able to set the dependency up through an external means. This is one of the reasons Dependency Injection frameworks like Java Spring have increase in popularity because they allow the ability to inject the proxy objects without modifying code.&lt;br /&gt;
&lt;br /&gt;
====Class Remapping====&lt;br /&gt;
The second form of mocking is to remap the class file in the class loader. The concept is relatively new and is provided by the new java.lang.Instrument class. The basic idea is that the framework tells the class loader to remap the reference to another class file it will load which will be the mocked class. This allows one to be able to mock objects that are created by using the new operator much like other Object Oriented languages. Although this approach provides more functionality than the proxy object approach, it is much more complex and harder to write and fully understand.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Comparison of Different Systems ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==='''EasyMock'''===&lt;br /&gt;
*EasyMock has been the first dynamic Mock Object generator, relieving users of hand-writing Mock Objects, or generating code for them.&lt;br /&gt;
*Dynamic creation of Mock Objects&lt;br /&gt;
*Supports re-factoring-safe Mock Objects&lt;br /&gt;
*Ability to return values and exceptions.&lt;br /&gt;
*Method order checking&lt;br /&gt;
http://easymock.org/&lt;br /&gt;
&lt;br /&gt;
==='''MOQ'''===&lt;br /&gt;
*Moq is the only mocking library for .NET developed from scratch to take full advantage of .NET 3.5 and C# 3.0 features.&lt;br /&gt;
*Supports mocking interfaces as well as classes. &lt;br /&gt;
*Supports the overriding of expectations where the test can set default expectations in a fixture setup, and override as needed on certain tests&lt;br /&gt;
*Intercept and raise events on mocks&lt;br /&gt;
http://code.google.com/p/moq/.&lt;br /&gt;
&lt;br /&gt;
==='''NMock'''===&lt;br /&gt;
*NMock is a dynamic mock object library for .NET. &lt;br /&gt;
*Dynamic creation of Mock Objects&lt;br /&gt;
*Allows expectations to be defined and fails the test if any expectations are violated&lt;br /&gt;
*Expectations are specified beforehand and verified on the fly as the code under test is being executed, rather than afterward using assertions&lt;br /&gt;
*Implementations of interfaces are generate on the fly at runtime&lt;br /&gt;
http://www.nmock.org/index.html&lt;br /&gt;
&lt;br /&gt;
==='''Rhino Mocks'''===&lt;br /&gt;
*Only supports mocks of interfaces, delegates and classes, including those with parametrized constructors.&lt;br /&gt;
*Expectations on the called methods by using strongly typed mocks instead of strings.&lt;br /&gt;
*Recursive mocking&lt;br /&gt;
http://ayende.com/projects/rhino-mocks.aspx&lt;br /&gt;
&lt;br /&gt;
==='''jMock'''===&lt;br /&gt;
*Forces test to be explicit about the argument values that will be passed to the expected methods&lt;br /&gt;
*Ability to write custom stubs, constraints, and Invocation Matchers&lt;br /&gt;
*Works well with the auto completion and refactoring features of your IDE&lt;br /&gt;
http://www.jmock.org/index.html&lt;br /&gt;
&lt;br /&gt;
==='''Mocha'''===&lt;br /&gt;
*Similar to jMock only for Ruby &lt;br /&gt;
*Supports testing frameworks: Test::Unit, RSpec, test/spec, expectations, Dust, MiniTest and JtestR.&lt;br /&gt;
http://mocha.rubyforge.org/&lt;br /&gt;
&lt;br /&gt;
==='''Test::MockObject'''===&lt;br /&gt;
*Similar to jMock only for Perl&lt;br /&gt;
*Simple testing techniques&lt;br /&gt;
http://search.cpan.org/dist/Test-MockObject/lib/Test/MockObject.pm&lt;br /&gt;
&lt;br /&gt;
==='''JMockit'''===&lt;br /&gt;
&lt;br /&gt;
*Simpler and more succinct APIs for writing tests with behavior verification or state verification&lt;br /&gt;
*Provides other tools for supporting the creation of large test suites&lt;br /&gt;
*Uses class remapping instead of the original proxy dependencies&lt;br /&gt;
https://jmockit.dev.java.net/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
A mock object framework can make sure that the method under test, when executed, will in fact call certain functions on the mock object  and that the method under test will react in an appropriate way to whatever the mock objects do. Most parts of a software system do not work in isolation, but collaborate with other parts to get their job done. Writing tests provides a framework to think about functionality, Mock Objects provides a framework for making assertions about those relationships and for simulating responses. Mock Objects also allows programmers to make their tests only as precise as they need to be.&lt;br /&gt;
&lt;br /&gt;
The different frameworks provide a myriad of options for software developers to produce the correct mock tests for their software. The more complex the system, the more important it is when selecting the mock framework. Support for the framework is essential as well. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
1. [http://www.sizovpoint.com/2009/03/java-mock-frameworks-comparison.html Java Mock Framework Comparisons]&lt;br /&gt;
&lt;br /&gt;
2. [http://msdn.microsoft.com/en-us/magazine/dd882516.aspx Using Mocks And Tests To Design Role-Based Objects]&lt;/div&gt;</summary>
		<author><name>SteelerNation</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a/2_sc&amp;diff=18733</id>
		<title>CSC/ECE 517 Fall 2009/wiki1a/2 sc</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a/2_sc&amp;diff=18733"/>
		<updated>2009-09-08T18:23:27Z</updated>

		<summary type="html">&lt;p&gt;SteelerNation: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Comparison of Mock Frameworks ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Definition ==&lt;br /&gt;
In object-oriented programming, mock objects are simulated objects that mimic the behavior of real objects in controlled ways. A computer programmer typically creates a mock object to test the behavior of some other object, in much the same way that a car designer uses a crash test dummy to simulate the dynamic behavior of a human in vehicle impacts. [FROM http://en.wikipedia.org/wiki/Mock_object ]&lt;br /&gt;
&lt;br /&gt;
Mock Frameworks are the environments that are available to create these mock objects and mock tests. &lt;br /&gt;
There are many different types of frameworks for different platforms. They are a set of programmable APIs that allow creation of mock and stub objects in relative easy fashion. Mock frameworks save the developer from the need to write repetitive code to test or simulate object interactions.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Concepts ==&lt;br /&gt;
&lt;br /&gt;
==='''Why Mock?'''===&lt;br /&gt;
&lt;br /&gt;
*The concept behind mock objects is that there is a need to create an object that will take the place of the real object. This mock object will expect a certain method to be called with certain parameters and when that happens, it will return an expected result. When writing units tests for a class that would normally use the real object, we can instead supply it with a mock object. This allows us a new level of flexibility in testing.&lt;br /&gt;
&lt;br /&gt;
*Ease of modifying the mock object during separate tests to get it to get it to return a range of different data. Test can pass in valid, invalid, and extreme ranges to test how the code calling it handles such situations.&lt;br /&gt;
&lt;br /&gt;
*Simulation of failures, such as the inability to connect to a database, to test the failure mode of classes.&lt;br /&gt;
&lt;br /&gt;
*Encourages better structured tests and, more importantly, improved domain code by preserving encapsulation, reducing dependencies and clarifying the interactions between classes. A running Object-Oriented program is a web of objects that collaborate by calling methods on each other. There sometimes can be many dependencies that have to be met in order to call certain objects. To make the complex dependencies be easily testable, mock objects are created in order to “mock” the stages that the object needs to be in, in order to call upon another object.&lt;br /&gt;
&lt;br /&gt;
*Often times in programming, only the changes in state of an object are tested. This would be acceptable only if there was one object. However, many real world applications contain hundreds upon hundreds of different objects. Mock objects have changed the focus of test from thinking about the changes in state of an object to thinking about its interactions with other objects.&lt;br /&gt;
&lt;br /&gt;
==='''Different Types'''===&lt;br /&gt;
&lt;br /&gt;
====Proxy====&lt;br /&gt;
A proxy object is an object that is used to take the place of a real object. This is the original concept for all mock frameworks. In the case of mock objects, a proxy object is used to imitate the real object your code is dependent on. The proxy object is created with the mocking framework, and then set it on the object using either a setter or constructor. One has to be able to set the dependency up through an external means. This is one of the reasons Dependency Injection frameworks like Java Spring have increase in popularity because they allow the ability to inject the proxy objects without modifying code.&lt;br /&gt;
&lt;br /&gt;
====Class Remapping====&lt;br /&gt;
The second form of mocking is to remap the class file in the class loader. The concept is relatively new and is provided by the new java.lang.Instrument class. The basic idea is that the framework tells the class loader to remap the reference to another class file it will load which will be the mocked class. This allows one to be able to mock objects that are created by using the new operator much like other Object Oriented languages. Although this approach provides more functionality than the proxy object approach, it is much more complex and harder to write and fully understand.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Comparison of Different Systems ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==='''EasyMock'''===&lt;br /&gt;
*EasyMock has been the first dynamic Mock Object generator, relieving users of hand-writing Mock Objects, or generating code for them.&lt;br /&gt;
*Dynamic creation of Mock Objects&lt;br /&gt;
*Supports re-factoring-safe Mock Objects&lt;br /&gt;
*Ability to return values and exceptions.&lt;br /&gt;
*Method order checking&lt;br /&gt;
http://easymock.org/&lt;br /&gt;
&lt;br /&gt;
==='''MOQ'''===&lt;br /&gt;
*Moq is the only mocking library for .NET developed from scratch to take full advantage of .NET 3.5 and C# 3.0 features.&lt;br /&gt;
*Supports mocking interfaces as well as classes. &lt;br /&gt;
*Supports the overriding of expectations where the test can set default expectations in a fixture setup, and override as needed on certain tests&lt;br /&gt;
*Intercept and raise events on mocks&lt;br /&gt;
http://code.google.com/p/moq/.&lt;br /&gt;
&lt;br /&gt;
==='''NMock'''===&lt;br /&gt;
*NMock is a dynamic mock object library for .NET. &lt;br /&gt;
*Dynamic creation of Mock Objects&lt;br /&gt;
*Allows expectations to be defined and fails the test if any expectations are violated&lt;br /&gt;
*Expectations are specified beforehand and verified on the fly as the code under test is being executed, rather than afterward using assertions&lt;br /&gt;
*Implementations of interfaces are generate on the fly at runtime&lt;br /&gt;
http://www.nmock.org/index.html&lt;br /&gt;
&lt;br /&gt;
==='''Rhino Mocks'''===&lt;br /&gt;
*Only supports mocks of interfaces, delegates and classes, including those with parametrized constructors.&lt;br /&gt;
*Expectations on the called methods by using strongly typed mocks instead of strings.&lt;br /&gt;
*Recursive mocking&lt;br /&gt;
http://ayende.com/projects/rhino-mocks.aspx&lt;br /&gt;
&lt;br /&gt;
==='''jMock'''===&lt;br /&gt;
*Forces test to be explicit about the argument values that will be passed to the expected methods&lt;br /&gt;
*Ability to write custom stubs, constraints, and Invocation Matchers&lt;br /&gt;
*Works well with the auto completion and refactoring features of your IDE&lt;br /&gt;
http://www.jmock.org/index.html&lt;br /&gt;
&lt;br /&gt;
==='''Mocha'''===&lt;br /&gt;
*Similar to jMock only for Ruby &lt;br /&gt;
*Supports testing frameworks: Test::Unit, RSpec, test/spec, expectations, Dust, MiniTest and JtestR.&lt;br /&gt;
http://mocha.rubyforge.org/&lt;br /&gt;
&lt;br /&gt;
==='''Test::MockObject'''===&lt;br /&gt;
*Similar to jMock only for Perl&lt;br /&gt;
*Simple testing techniques&lt;br /&gt;
http://search.cpan.org/dist/Test-MockObject/lib/Test/MockObject.pm&lt;br /&gt;
&lt;br /&gt;
==='''JMockit'''===&lt;br /&gt;
&lt;br /&gt;
*Simpler and more succinct APIs for writing tests with behavior verification or state verification&lt;br /&gt;
*Provides other tools for supporting the creation of large test suites&lt;br /&gt;
*Uses class remapping instead of the original proxy dependencies&lt;br /&gt;
https://jmockit.dev.java.net/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
A mock object framework can make sure that the method under test, when executed, will in fact call certain functions on the mock object  and that the method under test will react in an appropriate way to whatever the mock objects do. Most parts of a software system do not work in isolation, but collaborate with other parts to get their job done. Writing tests provides a framework to think about functionality, Mock Objects provides a framework for making assertions about those relationships and for simulating responses. Mock Objects also allows programmers to make their tests only as precise as they need to be.&lt;br /&gt;
&lt;br /&gt;
The different frameworks provide a myriad of options for software developers to produce the correct mock tests for their software. The more complex the system, the more important it is when selecting the mock framework. Support for the framework is essential as well. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
http://www.sizovpoint.com/2009/03/java-mock-frameworks-comparison.html&lt;/div&gt;</summary>
		<author><name>SteelerNation</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a/2_sc&amp;diff=18730</id>
		<title>CSC/ECE 517 Fall 2009/wiki1a/2 sc</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a/2_sc&amp;diff=18730"/>
		<updated>2009-09-08T18:16:28Z</updated>

		<summary type="html">&lt;p&gt;SteelerNation: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Comparison of Mock Frameworks ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Definition ==&lt;br /&gt;
In object-oriented programming, mock objects are simulated objects that mimic the behavior of real objects in controlled ways. A computer programmer typically creates a mock object to test the behavior of some other object, in much the same way that a car designer uses a crash test dummy to simulate the dynamic behavior of a human in vehicle impacts. [FROM http://en.wikipedia.org/wiki/Mock_object ]&lt;br /&gt;
&lt;br /&gt;
Mock Frameworks are the environments that are available to create these mock objects and mock tests. &lt;br /&gt;
There are many different types of frameworks for different platforms. They are a set of programmable APIs that allow creation of mock and stub objects in relative easy fashion. Mock frameworks save the developer from the need to write repetitive code to test or simulate object interactions.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Concepts ==&lt;br /&gt;
&lt;br /&gt;
==='''Why Mock?'''===&lt;br /&gt;
&lt;br /&gt;
The concept behind mock objects is that there is a need to create an object that will take the place of the real object. This mock object will expect a certain method to be called with certain parameters and when that happens, it will return an expected result. When writing units tests for a class that would normally use the real object, we can instead supply it with a mock object. This allows us a new level of flexibility in testing.&lt;br /&gt;
&lt;br /&gt;
Ease of modifying the mock object during separate tests to get it to get it to return a range of different data. Test can pass in valid, invalid, and extreme ranges to test how the code calling it handles such situations.&lt;br /&gt;
&lt;br /&gt;
Simulation of failures, such as the inability to connect to a database, to test the failure mode of classes.&lt;br /&gt;
&lt;br /&gt;
Encourages better structured tests and, more importantly, improved domain code by preserving encapsulation, reducing dependencies and clarifying the interactions between classes. A running Object-&lt;br /&gt;
Oriented program is a web of objects that collaborate by calling methods on each other. There sometimes can be many dependencies that have to be met in order to call certain objects. To make the complex dependencies be easily testable, mock objects are created in order to “mock” the stages that the object needs to be in, in order to call upon another object.&lt;br /&gt;
&lt;br /&gt;
Often times in programming, only the changes in state of an object are tested. This would be acceptable only if there was one object. However, many real world applications contain hundreds upon hundreds of different objects. Mock objects have changed the focus of test from thinking about the changes in state of an object to thinking about its interactions with other objects.&lt;br /&gt;
&lt;br /&gt;
==='''Different Types'''===&lt;br /&gt;
&lt;br /&gt;
====Proxy====&lt;br /&gt;
A proxy object is an object that is used to take the place of a real object. This is the original concept for all mock frameworks. In the case of mock objects, a proxy object is used to imitate the real object your code is dependent on. The proxy object is created with the mocking framework, and then set it on the object using either a setter or constructor. One has to be able to set the dependency up through an external means. This is one of the reasons Dependency Injection frameworks like Java Spring have increase in popularity because they allow the ability to inject the proxy objects without modifying code.&lt;br /&gt;
&lt;br /&gt;
====Class Remapping====&lt;br /&gt;
The second form of mocking is to remap the class file in the class loader. The concept is relatively new and is provided by the new java.lang.Insturment class. The basic idea is that the framework tells the class loader to remap the reference to another class file it will load which will be the mocked class. This allows one to be able to mock objects that are created by using the new operator much like other Object Oriented languages. Although this approach provides more functionality than the proxy object approach, it is much more complex and harder to write and fully understand.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Comparison of Different Systems ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==='''EasyMock'''===&lt;br /&gt;
EasyMock has been the first dynamic Mock Object generator, relieving users of hand-writing Mock Objects, or generating code for them.&lt;br /&gt;
-Dynamic creation of Mock Objects&lt;br /&gt;
-Supports refactoring-safe Mock Objects&lt;br /&gt;
-Ability to return values and exceptions.&lt;br /&gt;
-Method order checking&lt;br /&gt;
http://easymock.org/&lt;br /&gt;
&lt;br /&gt;
==='''MOQ'''===&lt;br /&gt;
Moq is the only mocking library for .NET developed from scratch to take full advantage of .NET 3.5 and C# 3.0 features.&lt;br /&gt;
-Supports mocking interfaces as well as classes. &lt;br /&gt;
-Supports the overriding of expectations where the test can set default expectations in a fixture setup, and override as needed on certain tests&lt;br /&gt;
- Intercept and raise events on mocks&lt;br /&gt;
http://code.google.com/p/moq/.&lt;br /&gt;
&lt;br /&gt;
==='''NMock'''===&lt;br /&gt;
NMock is a dynamic mock object library for .NET. &lt;br /&gt;
-Dynamic creation of Mock Objects&lt;br /&gt;
-Allows expectations to be defined and fails the test if any expectations are violated&lt;br /&gt;
-Expectations are specified beforehand and verified on the fly as the code under test is being executed, rather than afterwards using assertions&lt;br /&gt;
-Implementations of interfaces are generate on the fly at runtime&lt;br /&gt;
http://www.nmock.org/index.html&lt;br /&gt;
&lt;br /&gt;
==='''Rhino Mocks'''===&lt;br /&gt;
-Only supports mocks of interfaces, delegates and classes, including those with parameterized constructors.&lt;br /&gt;
-Expectations on the called methods by using strongly typed mocks instead of strings.&lt;br /&gt;
-Recursive mocking&lt;br /&gt;
http://ayende.com/projects/rhino-mocks.aspx&lt;br /&gt;
&lt;br /&gt;
==='''jMock'''===&lt;br /&gt;
- Forces test to be explicit about the argument values that will be passed to the expected methods&lt;br /&gt;
-Ability to write custom stubs, constraints, and Invocation Matchers&lt;br /&gt;
	-Works well with the auto completion and refactoring features of your IDE&lt;br /&gt;
http://www.jmock.org/index.html&lt;br /&gt;
&lt;br /&gt;
==='''Mocha'''===&lt;br /&gt;
	-Similar to jMock only for Ruby &lt;br /&gt;
	- Supports testing frameworks: Test::Unit, RSpec, test/spec, expectations, Dust, MiniTest and JtestR.&lt;br /&gt;
http://mocha.rubyforge.org/&lt;br /&gt;
&lt;br /&gt;
==='''Test::MockObject'''===&lt;br /&gt;
	-Similar to jMock only for Perl&lt;br /&gt;
	-Simple testing techniques&lt;br /&gt;
http://search.cpan.org/dist/Test-MockObject/lib/Test/MockObject.pm&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==='''JMockit'''===&lt;br /&gt;
&lt;br /&gt;
-Simpler and more succinct APIs for writing tests with behavior verification or state verification&lt;br /&gt;
-Provides other tools for supporting the creation of large test suites&lt;br /&gt;
-Uses class remapping instead of the original proxy dependencies&lt;br /&gt;
https://jmockit.dev.java.net/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
A mock object framework can make sure that the method under test, when executed, will in fact call certain functions on the mock object  and that the method under test will react in an appropriate way to whatever the mock objects do. Most parts of a software system do not work in isolation, but collaborate with other parts to get their job done. Writing tests provides a framework to think about functionality, Mock Objects provides a framework for making assertions about those relationships and for simulating responses. Mock Objects also allows programmers to make their tests only as precise as they need to be.&lt;br /&gt;
&lt;br /&gt;
The different frameworks provide a myriad of options for software developers to produce the correct mock tests for their software. The more complex the system, the more important it is when selecting the mock framework. Support for the framework is essential as well. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
http://www.sizovpoint.com/2009/03/java-mock-frameworks-comparison.html&lt;/div&gt;</summary>
		<author><name>SteelerNation</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a/2_sc&amp;diff=18724</id>
		<title>CSC/ECE 517 Fall 2009/wiki1a/2 sc</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a/2_sc&amp;diff=18724"/>
		<updated>2009-09-08T18:03:07Z</updated>

		<summary type="html">&lt;p&gt;SteelerNation: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Comparison of Mock Frameworks ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Definition ==&lt;br /&gt;
In object-oriented programming, mock objects are simulated objects that mimic the behavior of real objects in controlled ways. A computer programmer typically creates a mock object to test the behavior of some other object, in much the same way that a car designer uses a crash test dummy to simulate the dynamic behavior of a human in vehicle impacts. [FROM http://en.wikipedia.org/wiki/Mock_object ]&lt;br /&gt;
&lt;br /&gt;
Mock Frameworks are the environments that are available to create these mock objects and mock tests. &lt;br /&gt;
There are many different types of frameworks for different platforms. They are a set of programmable APIs that allow creation of mock and stub objects in relative easy fashion. Mock frameworks save the developer from the need to write repetitive code to test or simulate object interactions.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Concepts ==&lt;br /&gt;
&lt;br /&gt;
'''Why Mock?'''&lt;br /&gt;
&lt;br /&gt;
The concept behind mock objects is that there is a need to create an object that will take the place of the real object. This mock object will expect a certain method to be called with certain parameters and when that happens, it will return an expected result. When writing units tests for a class that would normally use the real object, we can instead supply it with a mock object. This allows us a new level of flexibility in testing.&lt;br /&gt;
&lt;br /&gt;
Ease of modifying the mock object during separate tests to get it to get it to return a range of different data. Test can pass in valid, invalid, and extreme ranges to test how the code calling it handles such situations.&lt;br /&gt;
&lt;br /&gt;
Simulation of failures, such as the inability to connect to a database, to test the failure mode of classes.&lt;br /&gt;
&lt;br /&gt;
Encourages better structured tests and, more importantly, improved domain code by preserving encapsulation, reducing dependencies and clarifying the interactions between classes. A running Object-&lt;br /&gt;
Oriented program is a web of objects that collaborate by calling methods on each other. There sometimes can be many dependencies that have to be met in order to call certain objects. To make the complex dependencies be easily testable, mock objects are created in order to “mock” the stages that the object needs to be in, in order to call upon another object.&lt;br /&gt;
&lt;br /&gt;
Often times in programming, only the changes in state of an object are tested. This would be acceptable only if there was one object. However, many real world applications contain hundreds upon hundreds of different objects. Mock objects have changed the focus of test from thinking about the changes in state of an object to thinking about its interactions with other objects.&lt;br /&gt;
&lt;br /&gt;
'''Different Types:'''&lt;br /&gt;
&lt;br /&gt;
Proxy:&lt;br /&gt;
A proxy object is an object that is used to take the place of a real object. This is the original concept for all mock frameworks. In the case of mock objects, a proxy object is used to imitate the real object your code is dependent on. The proxy object is created with the mocking framework, and then set it on the object using either a setter or constructor. One has to be able to set the dependency up through an external means. This is one of the reasons Dependency Injection frameworks like Java Spring have increase in popularity because they allow the ability to inject the proxy objects without modifying code.&lt;br /&gt;
&lt;br /&gt;
Class Remapping:&lt;br /&gt;
The second form of mocking is to remap the class file in the class loader. The concept is relatively new and is provided by the new java.lang.Insturment class. The basic idea is that the framework tells the class loader to remap the reference to another class file it will load which will be the mocked class. This allows one to be able to mock objects that are created by using the new operator much like other Object Oriented languages. Although this approach provides more functionality than the proxy object approach, it is much more complex and harder to write and fully understand.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Comparison of Different Systems ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''EasyMock-''' &lt;br /&gt;
EasyMock has been the first dynamic Mock Object generator, relieving users of hand-writing Mock Objects, or generating code for them.&lt;br /&gt;
-Dynamic creation of Mock Objects&lt;br /&gt;
-Supports refactoring-safe Mock Objects&lt;br /&gt;
-Ability to return values and exceptions.&lt;br /&gt;
-Method order checking&lt;br /&gt;
http://easymock.org/&lt;br /&gt;
&lt;br /&gt;
'''MOQ'''&lt;br /&gt;
Moq is the only mocking library for .NET developed from scratch to take full advantage of .NET 3.5 and C# 3.0 features.&lt;br /&gt;
-Supports mocking interfaces as well as classes. &lt;br /&gt;
-Supports the overriding of expectations where the test can set default expectations in a fixture setup, and override as needed on certain tests&lt;br /&gt;
- Intercept and raise events on mocks&lt;br /&gt;
http://code.google.com/p/moq/.&lt;br /&gt;
&lt;br /&gt;
'''NMock'''&lt;br /&gt;
NMock is a dynamic mock object library for .NET. &lt;br /&gt;
-Dynamic creation of Mock Objects&lt;br /&gt;
-Allows expectations to be defined and fails the test if any expectations are violated&lt;br /&gt;
-Expectations are specified beforehand and verified on the fly as the code under test is being executed, rather than afterwards using assertions&lt;br /&gt;
-Implementations of interfaces are generate on the fly at runtime&lt;br /&gt;
http://www.nmock.org/index.html&lt;br /&gt;
&lt;br /&gt;
'''Rhino Mocks'''&lt;br /&gt;
-Only supports mocks of interfaces, delegates and classes, including those with parameterized constructors.&lt;br /&gt;
-Expectations on the called methods by using strongly typed mocks instead of strings.&lt;br /&gt;
-Recursive mocking&lt;br /&gt;
http://ayende.com/projects/rhino-mocks.aspx&lt;br /&gt;
&lt;br /&gt;
'''jMock'''&lt;br /&gt;
- Forces test to be explicit about the argument values that will be passed to the expected methods&lt;br /&gt;
-Ability to write custom stubs, constraints, and Invocation Matchers&lt;br /&gt;
	-Works well with the auto completion and refactoring features of your IDE&lt;br /&gt;
http://www.jmock.org/index.html&lt;br /&gt;
&lt;br /&gt;
'''Mocha'''&lt;br /&gt;
	-Similar to jMock only for Ruby &lt;br /&gt;
	- Supports testing frameworks: Test::Unit, RSpec, test/spec, expectations, Dust, MiniTest and JtestR.&lt;br /&gt;
http://mocha.rubyforge.org/&lt;br /&gt;
&lt;br /&gt;
'''Test::MockObject'''&lt;br /&gt;
	-Similar to jMock only for Perl&lt;br /&gt;
	-Simple testing techniques&lt;br /&gt;
http://search.cpan.org/dist/Test-MockObject/lib/Test/MockObject.pm&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''JMockit'''&lt;br /&gt;
&lt;br /&gt;
-Simpler and more succinct APIs for writing tests with behavior verification or state verification&lt;br /&gt;
-Provides other tools for supporting the creation of large test suites&lt;br /&gt;
-Uses class remapping instead of the original proxy dependencies&lt;br /&gt;
https://jmockit.dev.java.net/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
A mock object framework can make sure that the method under test, when executed, will in fact call certain functions on the mock object  and that the method under test will react in an appropriate way to whatever the mock objects do. Most parts of a software system do not work in isolation, but collaborate with other parts to get their job done. Writing tests provides a framework to think about functionality, Mock Objects provides a framework for making assertions about those relationships and for simulating responses. Mock Objects also allows programmers to make their tests only as precise as they need to be.&lt;br /&gt;
&lt;br /&gt;
The different frameworks provide a myriad of options for software developers to produce the correct mock tests for their software. The more complex the system, the more important it is when selecting the mock framework. Support for the framework is essential as well. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
http://www.sizovpoint.com/2009/03/java-mock-frameworks-comparison.html&lt;/div&gt;</summary>
		<author><name>SteelerNation</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a/2_sc&amp;diff=18723</id>
		<title>CSC/ECE 517 Fall 2009/wiki1a/2 sc</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a/2_sc&amp;diff=18723"/>
		<updated>2009-09-08T17:59:24Z</updated>

		<summary type="html">&lt;p&gt;SteelerNation: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Comparison of Mock Frameworks ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Definition: ==&lt;br /&gt;
In object-oriented programming, mock objects are simulated objects that mimic the behavior of real objects in controlled ways. A computer programmer typically creates a mock object to test the behavior of some other object, in much the same way that a car designer uses a crash test dummy to simulate the dynamic behavior of a human in vehicle impacts. [FROM http://en.wikipedia.org/wiki/Mock_object ]&lt;br /&gt;
&lt;br /&gt;
Mock Frameworks are the environments that are available to create these mock objects and mock tests. &lt;br /&gt;
There are many different types of frameworks for different platforms. They are a set of programmable APIs that allow creation of mock and stub objects in relative easy fashion. Mock frameworks save the developer from the need to write repetitive code to test or simulate object interactions.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Concepts: ==&lt;br /&gt;
&lt;br /&gt;
'''Why Mock?'''&lt;br /&gt;
&lt;br /&gt;
The concept behind mock objects is that there is a need to create an object that will take the place of the real object. This mock object will expect a certain method to be called with certain parameters and when that happens, it will return an expected result. When writing units tests for a class that would normally use the real object, we can instead supply it with a mock object. This allows us a new level of flexibility in testing.&lt;br /&gt;
&lt;br /&gt;
Ease of modifying the mock object during separate tests to get it to get it to return a range of different data. Test can pass in valid, invalid, and extreme ranges to test how the code calling it handles such situations.&lt;br /&gt;
&lt;br /&gt;
Simulation of failures, such as the inability to connect to a database, to test the failure mode of classes.&lt;br /&gt;
&lt;br /&gt;
Encourages better structured tests and, more importantly, improved domain code by preserving encapsulation, reducing dependencies and clarifying the interactions between classes. A running Object-&lt;br /&gt;
Oriented program is a web of objects that collaborate by calling methods on each other. There sometimes can be many dependencies that have to be met in order to call certain objects. To make the complex dependencies be easily testable, mock objects are created in order to “mock” the stages that the object needs to be in, in order to call upon another object.&lt;br /&gt;
&lt;br /&gt;
Often times in programming, only the changes in state of an object are tested. This would be acceptable only if there was one object. However, many real world applications contain hundreds upon hundreds of different objects. Mock objects have changed the focus of test from thinking about the changes in state of an object to thinking about its interactions with other objects.&lt;br /&gt;
&lt;br /&gt;
'''Different Types:'''&lt;br /&gt;
&lt;br /&gt;
Proxy:&lt;br /&gt;
A proxy object is an object that is used to take the place of a real object. This is the original concept for all mock frameworks. In the case of mock objects, a proxy object is used to imitate the real object your code is dependent on. The proxy object is created with the mocking framework, and then set it on the object using either a setter or constructor. One has to be able to set the dependency up through an external means. This is one of the reasons Dependency Injection frameworks like Java Spring have increase in popularity because they allow the ability to inject the proxy objects without modifying code.&lt;br /&gt;
&lt;br /&gt;
Class Remapping:&lt;br /&gt;
The second form of mocking is to remap the class file in the class loader. The concept is relatively new and is provided by the new java.lang.Insturment class. The basic idea is that the framework tells the class loader to remap the reference to another class file it will load which will be the mocked class. This allows one to be able to mock objects that are created by using the new operator much like other Object Oriented languages. Although this approach provides more functionality than the proxy object approach, it is much more complex and harder to write and fully understand.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Comparison of Different Systems: ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''EasyMock-''' &lt;br /&gt;
EasyMock has been the first dynamic Mock Object generator, relieving users of hand-writing Mock Objects, or generating code for them.&lt;br /&gt;
-Dynamic creation of Mock Objects&lt;br /&gt;
-Supports refactoring-safe Mock Objects&lt;br /&gt;
-Ability to return values and exceptions.&lt;br /&gt;
-Method order checking&lt;br /&gt;
http://easymock.org/&lt;br /&gt;
&lt;br /&gt;
'''MOQ'''&lt;br /&gt;
Moq is the only mocking library for .NET developed from scratch to take full advantage of .NET 3.5 and C# 3.0 features.&lt;br /&gt;
-Supports mocking interfaces as well as classes. &lt;br /&gt;
-Supports the overriding of expectations where the test can set default expectations in a fixture setup, and override as needed on certain tests&lt;br /&gt;
- Intercept and raise events on mocks&lt;br /&gt;
http://code.google.com/p/moq/.&lt;br /&gt;
&lt;br /&gt;
'''NMock'''&lt;br /&gt;
NMock is a dynamic mock object library for .NET. &lt;br /&gt;
-Dynamic creation of Mock Objects&lt;br /&gt;
-Allows expectations to be defined and fails the test if any expectations are violated&lt;br /&gt;
-Expectations are specified beforehand and verified on the fly as the code under test is being executed, rather than afterwards using assertions&lt;br /&gt;
-Implementations of interfaces are generate on the fly at runtime&lt;br /&gt;
http://www.nmock.org/index.html&lt;br /&gt;
&lt;br /&gt;
'''Rhino Mocks'''&lt;br /&gt;
-Only supports mocks of interfaces, delegates and classes, including those with parameterized constructors.&lt;br /&gt;
-Expectations on the called methods by using strongly typed mocks instead of strings.&lt;br /&gt;
-Recursive mocking&lt;br /&gt;
http://ayende.com/projects/rhino-mocks.aspx&lt;br /&gt;
&lt;br /&gt;
'''jMock'''&lt;br /&gt;
- Forces test to be explicit about the argument values that will be passed to the expected methods&lt;br /&gt;
-Ability to write custom stubs, constraints, and Invocation Matchers&lt;br /&gt;
	-Works well with the auto completion and refactoring features of your IDE&lt;br /&gt;
http://www.jmock.org/index.html&lt;br /&gt;
&lt;br /&gt;
'''Mocha'''&lt;br /&gt;
	-Similar to jMock only for Ruby &lt;br /&gt;
	- Supports testing frameworks: Test::Unit, RSpec, test/spec, expectations, Dust, MiniTest and JtestR.&lt;br /&gt;
http://mocha.rubyforge.org/&lt;br /&gt;
&lt;br /&gt;
'''Test::MockObject'''&lt;br /&gt;
	-Similar to jMock only for Perl&lt;br /&gt;
	-Simple testing techniques&lt;br /&gt;
http://search.cpan.org/dist/Test-MockObject/lib/Test/MockObject.pm&lt;br /&gt;
&lt;br /&gt;
'''JMockit'''&lt;br /&gt;
-Simpler and more succinct APIs for writing tests with behavior verification or state verification&lt;br /&gt;
-Provides other tools for supporting the creation of large test suites&lt;br /&gt;
-Uses class remapping instead of the original proxy dependencies&lt;br /&gt;
https://jmockit.dev.java.net/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Conclusion: ==&lt;br /&gt;
&lt;br /&gt;
A mock object framework can make sure that the method under test, when executed, will in fact call certain functions on the mock object  and that the method under test will react in an appropriate way to whatever the mock objects do. Most parts of a software system do not work in isolation, but collaborate with other parts to get their job done. Writing tests provides a framework to think about functionality, Mock Objects provides a framework for making assertions about those relationships and for simulating responses. Mock Objects also allows programmers to make their tests only as precise as they need to be.&lt;br /&gt;
&lt;br /&gt;
The different frameworks provide a myriad of options for software developers to produce the correct mock tests for their software. The more complex the system, the more important it is when selecting the mock framework. Support for the framework is essential as well. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Links: ==&lt;br /&gt;
http://www.sizovpoint.com/2009/03/java-mock-frameworks-comparison.html&lt;/div&gt;</summary>
		<author><name>SteelerNation</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a/2_sc&amp;diff=18714</id>
		<title>CSC/ECE 517 Fall 2009/wiki1a/2 sc</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a/2_sc&amp;diff=18714"/>
		<updated>2009-09-08T17:28:12Z</updated>

		<summary type="html">&lt;p&gt;SteelerNation: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Mock objects and mock frameworks.  When performing tests, it's convenient to have the objects be in a particular configuration, so that boundary cases can be tested.  Setting up the objects can sometimes be complicated.  The Wikipedia article for mock objects lists several, but does not compare them.  Compare different systems for mock objects, and mock frameworks (which are used to set up mock objects).&lt;br /&gt;
&lt;br /&gt;
Title:  Comparison of Mock Objects and Mock Frameworks&lt;br /&gt;
Definition:&lt;br /&gt;
In object-oriented programming, mock objects are simulated objects that mimic the behavior of real objects in controlled ways. A computer programmer typically creates a mock object to test the behavior of some other object, in much the same way that a car designer uses a crash test dummy to simulate the dynamic behavior of a human in vehicle impacts. [FROM http://en.wikipedia.org/wiki/Mock_object ]&lt;br /&gt;
Mock Frameworks are the environments that are available to create these mock objects and mock tests. There are many different types of frameworks for different platforms. They are a set of programmable APIs that allow creation of mock and stub objects in relative easy fashion. Mock frameworks save the developer from the need to write repetitive code to test or simulate object interactions.  &lt;br /&gt;
Concepts:&lt;br /&gt;
Why Mock?&lt;br /&gt;
The concept behind mock objects is that there is a need to create an object that will take the place of the real object. This mock object will expect a certain method to be called with certain parameters and when that happens, it will return an expected result. When writing units tests for a class that would normally use the real object, we can instead supply it with a mock object. This allows us a new level of flexibility in testing.&lt;br /&gt;
 Ease of modifying the mock object during separate tests to get it to get it to return a range of different data. Test can pass in valid, invalid, and extreme ranges to test how the code calling it handles such situations.&lt;br /&gt;
Simulation of failures, such as the inability to connect to a database, to test the failure mode of classes.&lt;br /&gt;
Encourages better structured tests and, more importantly, improved domain code by preserving encapsulation, reducing dependencies and clarifying the interactions between classes. A running Object-Oriented program is a web of objects that collaborate by calling methods on each other. There sometimes can be many dependencies that have to be met in order to call certain objects. To make the complex dependencies be easily testable, mock objects are created in order to “mock” the stages that the object needs to be in, in order to call upon another object.&lt;br /&gt;
Often times in programming, only the changes in state of an object are tested. This would be acceptable only if there was one object. However, many real world applications contain hundreds upon hundreds of different objects. Mock objects have changed the focus of test from thinking about the changes in state of an object to thinking about its interactions with other objects.&lt;br /&gt;
Different Types:&lt;br /&gt;
Proxy:&lt;br /&gt;
A proxy object is an object that is used to take the place of a real object. This is the orginal concept for all mock frameworks. In the case of mock objects, a proxy object is used to imitate the real object your code is dependent on. The proxy object is created with the mocking framework, and then set it on the object using either a setter or constructor. One has to be able to set the dependency up thru an external means. This is one of the reasons Dependency Injection frameworks like Java Spring have increase in popularity because they allow the ability to inject the proxy objects without modifying code.&lt;br /&gt;
Class Remapping:&lt;br /&gt;
The second form of mocking is to remap the class file in the class loader. The concept is relatively new and is provided by the new java.lang.Insturment class. The basic idea is that the framework tells the class loader to remap the reference to another class file it will load which will be the mocked class. This allows one to be able to mock objects that are created by using the new operator much like other Object Oriented languages. Although this approach provides more functionality than the proxy object approach, it is much more complex and harder to write and fully understand.&lt;br /&gt;
Comparison of Different Systems:&lt;br /&gt;
EasyMock- .NET and Java&lt;br /&gt;
EasyMock has been the first dynamic Mock Object generator, relieving users of hand-writing Mock Objects, or generating code for them.&lt;br /&gt;
-Dynamic creation of Mock Objects&lt;br /&gt;
-Supports refactoring-safe Mock Objects&lt;br /&gt;
-Ability to return values and exceptions.&lt;br /&gt;
-Method order checking&lt;br /&gt;
http://easymock.org/&lt;br /&gt;
&lt;br /&gt;
MOQ -.NET&lt;br /&gt;
Moq is the only mocking library for .NET developed from scratch to take full advantage of .NET 3.5 and C# 3.0 features.&lt;br /&gt;
-Supports mocking interfaces as well as classes. &lt;br /&gt;
-Supports the overriding of expectations where the test can set default expectations in a fixture setup, and override as needed on certain tests&lt;br /&gt;
- Intercept and raise events on mocks&lt;br /&gt;
http://code.google.com/p/moq/.&lt;br /&gt;
&lt;br /&gt;
NMock&lt;br /&gt;
NMock is a dynamic mock object library for .NET. &lt;br /&gt;
-Dynamic creation of Mock Objects&lt;br /&gt;
-Allows expectations to be defined and fails the test if any expectations are violated&lt;br /&gt;
-Expectations are specified beforehand and verified on the fly as the code under test is being executed, rather than afterwards using assertions&lt;br /&gt;
-Implementations of interfaces are generate on the fly at runtime&lt;br /&gt;
http://www.nmock.org/index.html&lt;br /&gt;
&lt;br /&gt;
Rhino Mocks&lt;br /&gt;
-Only supports mocks of interfaces, delegates and classes, including those with parameterized constructors.&lt;br /&gt;
-Expectations on the called methods by using strongly typed mocks instead of strings.&lt;br /&gt;
-Recursive mocking&lt;br /&gt;
http://ayende.com/projects/rhino-mocks.aspx&lt;br /&gt;
&lt;br /&gt;
jMock&lt;br /&gt;
- Forces test to be explicit about the argument values that will be passed to the expected methods&lt;br /&gt;
-Ability to write custom stubs, constraints, and Invocation Matchers&lt;br /&gt;
	-Works well with the auto completion and refactoring features of your IDE&lt;br /&gt;
http://www.jmock.org/index.html&lt;br /&gt;
&lt;br /&gt;
Mocha&lt;br /&gt;
	-Similar to jMock only for Ruby &lt;br /&gt;
	- Supports testing frameworks: Test::Unit, RSpec, test/spec, expectations, Dust, MiniTest and JtestR.&lt;br /&gt;
http://mocha.rubyforge.org/&lt;br /&gt;
&lt;br /&gt;
Test::MockObject&lt;br /&gt;
	-Similar to jMock only for Perl&lt;br /&gt;
	-Simple testing techniques&lt;br /&gt;
http://search.cpan.org/dist/Test-MockObject/lib/Test/MockObject.pm&lt;br /&gt;
&lt;br /&gt;
JMockit&lt;br /&gt;
-Simpler and more succinct APIs for writing tests with behavior verification or state verification&lt;br /&gt;
-Provides other tools for supporting the creation of large test suites&lt;br /&gt;
-Uses class remapping instead of the original proxy dependencies&lt;br /&gt;
&lt;br /&gt;
https://jmockit.dev.java.net/&lt;br /&gt;
&lt;br /&gt;
Conclusion:&lt;br /&gt;
A mock object framework can make sure that the method under test, when executed, will in fact call certain functions on the mock object  and that the method under test will react in an appropriate way to whatever the mock objects do. Most parts of a software system do not work in isolation, but collaborate with other parts to get their job done. Writing tests provides a framework to think about functionality, Mock Objects provides a framework for making assertions about those relationships and for simulating responses. Mock Objects also allows programmers to make their tests only as precise as they need to be.&lt;br /&gt;
The different frameworks provide a myriad of options for software developers to produce the correct mock tests for their software. The more complex the system, the more important it is when selecting the mock framework. Support for the framework is essential as well. &lt;br /&gt;
Links:&lt;br /&gt;
http://www.sizovpoint.com/2009/03/java-mock-frameworks-comparison.html&lt;/div&gt;</summary>
		<author><name>SteelerNation</name></author>
	</entry>
</feed>