CSC/ECE 517 Summer 2008/wiki1 3 jb: Difference between revisions

From Expertiza_Wiki
Jump to navigation Jump to search
No edit summary
No edit summary
Line 1: Line 1:
This wiki will explore how [http://en.wikipedia.org/wiki/Reflection_(computer_science) Reflection] is implemented with both Java and Ruby, with the goal of showing which language's implementation makes it easier to write, easier to understand, and more efficient. Reflection refers to the ability of a program to peer inside itself and observe the components that it is comprised of. Reflection, as supported in Object Oriented languages such Java and Ruby, provides facilities to query about the methods and attributes of a specified class, and to execute methods that are discovered at runtime. These two features of reflection in Java and Ruby will explored in detail below.
This wiki will explore how [http://en.wikipedia.org/wiki/Reflection_(computer_science) reflection] is implemented with both Java and Ruby, with the goal of showing which language's implementation makes it easier to write, easier to understand, and more efficient. Reflection refers to the ability of a program to peer inside itself and observe the components that it is comprised of. Reflection, as supported in Object Oriented languages such Java and Ruby, provides facilities to query about the methods and attributes of a specified class, and to execute methods that are discovered at runtime. These two features of reflection in Java and Ruby will explored in detail below.
<br>
<br>
==Reflection in Java==
==Reflection in Java==

Revision as of 00:16, 4 June 2008

This wiki will explore how reflection is implemented with both Java and Ruby, with the goal of showing which language's implementation makes it easier to write, easier to understand, and more efficient. Reflection refers to the ability of a program to peer inside itself and observe the components that it is comprised of. Reflection, as supported in Object Oriented languages such Java and Ruby, provides facilities to query about the methods and attributes of a specified class, and to execute methods that are discovered at runtime. These two features of reflection in Java and Ruby will explored in detail below.

Reflection in Java

import java.lang.reflect.*;

class DiscBrakes { }

class MountainBike
{
	private DiscBrakes m_discBrakes = null;

	public boolean hasDiscBrakes() { return m_discBrakes != null; }
	public void setDiscBrakes(DiscBrakes discBrakes) { m_discBrakes = discBrakes; }

	public static void main (String argv[])
	{
		Class c = MountainBike.class;

		MountainBike mb = new MountainBike();
		DiscBrakes db = new DiscBrakes();
		Method meth = null;

		System.out.println(mb.hasDiscBrakes());

		try 
		{
			meth = c.getMethod("setDiscBrakes", DiscBrakes.class);
		}
		catch (NoSuchMethodException e) { }

		try
		{
			meth.invoke(mb, db);
		}
		catch (IllegalAccessException e) { }
		catch (InvocationTargetException e) { }
			
		System.out.println(mb.hasDiscBrakes());
	}
}

Reflection in Ruby

class DiscBrakes
end

class MountainBike
  @m_discBrakes = nil
  def hasDiscBrakes 
      return @m_discBrakes != nil
  end
  def setDiscBrakes(discBrakes)
    @m_discBrakes = discBrakes
  end
end

mb =  MountainBike.new

puts mb.hasDiscBrakes

db = DiscBrakes.new
setter = mb.method("setDiscBrakes")
setter.call(db)

puts mb.hasDiscBrakes

Comparison

Conclusions

Java Reflection Links

Pros and cons of reflection, written for Java but pretty generic
Using Java reflection
Javadoc for the java.lang.Class class
Javadoc for the java.lang.reflect package


Ruby Reflection Links

Good overview of reflection in Ruby