CSC/ECE 517 Fall 2009/wiki2 17 va: Difference between revisions

From Expertiza_Wiki
Jump to navigation Jump to search
(Expanded Reflection, example from Wikipedia)
m (Cleanup)
Line 74: Line 74:
#[http://en.wikipedia.org/wiki/Reflection_(computer_science) Reflection] - Programs that modify their own behavior
#[http://en.wikipedia.org/wiki/Reflection_(computer_science) Reflection] - Programs that modify their own behavior


!!!! Formatting notes appear below, remove these when no longer needed
=='''Appendix'''==
:*'''''Example''': Ruby example of reflection by dynamically adding an instance method
 
  # Define an instance method len of String to return string length
  String.class_eval("def len; size; end")
 
Has the same outcome as
:*'''''Example''': Ruby example of adding an instance method to a class
 
  class String
    def len
      size
    end
  end
 
 
 
 
!!!! How to format
List:
* A
* B
* C
 
Link:
* [http://en.wikipedia.org/wiki/Parametric_polymorphism#Parametric_polymorphism Parametric Polymorphism] (Ruby) - This language feature can handle a wide variety of inputs without crashing, but unexpected inputs may be processed in unexpected ways, causing the need for greater input testing.  Tools have been developed to perform this testing.
 
 
:*'''''Example''': [http://ar.rubyonrails.org/ 15] A detailed examples can be found at [http://dizzy.co.uk/ruby_on_rails/cheatsheets/active-record-validations 34]
 
  class Employee < ActiveRecord::Base
    validates_confirmation_of :password, :email_address, :on => :create
    validates_presence_of :name, :sex, :age, :salary, :address
    validates_inclusion_of :sex, :in => %w(M F), :message => 'must be M or F'
    validates_inclusion_of :age, :within => 1..60
    validates_length_of :salary :allow_nil => false, :within => 50000..120000
    validates_length_of :address, :allow_blank => false, :allow_nil => false, :maximum => 500
  end
 
Ruby and Rails also provides Test Unit which should be used to test for this. Polymorphism in Rails makes it very important to perform these checks.
Rails has a plugin tarantula, a fuzzy spider. It crawls the rails application, fuzzing inputs and analyzing what comes back. [http://github.com/relevance/tarantula 7]
 
 
==== '''CWE-89: Failure to Preserve SQL Query Structure''' (aka [http://en.wikipedia.org/wiki/SQL_injection 'SQL Injection']) ====
 
== Appendix ==


[http://en.wikipedia.org/wiki/Metadata '''Metadata'''] - data that describes the actual data
[http://en.wikipedia.org/wiki/Metadata '''Metadata'''] - data that describes the actual data


== References ==
=='''References'''==
'''
'''
1. http://www.service-architecture.com/web-services/articles/service-oriented_architecture_soa_definition.html - Brief explanation of SOA
1. http://www.service-architecture.com/web-services/articles/service-oriented_architecture_soa_definition.html - Brief explanation of SOA
Line 135: Line 90:
5. http://en.wikipedia.org/wiki/Reflection_(computer_science) - Explanation of Reflection
5. http://en.wikipedia.org/wiki/Reflection_(computer_science) - Explanation of Reflection


!!!! Remove if we do not have any good external links.
!!!! Remove the title below if we do not have any good external links.
== Useful External Links ==
== Useful External Links ==
'''
'''

Revision as of 05:08, 8 October 2009

!!!! I have copied things that help with formatting the page from my prior wiki. Feel free to add in anything that you think may help with formatting from your project.

!!!! Main topic (to keep us on track):

!!!! Note: Delete all the !!!! parts when done. These are notes while developing the wiki.

!!!! SOA provides another view of providing functionality based upon services offered in terms of protocols and a specific API. To provide services, platforms rely upon principles and the power that can be expressed through reflection and meta programming. Research and report how these critical concepts relate to and support SOA.

!!!! Reword the following paragraph to "sound better"

Reflection and metaprogramming relate to and support use of a Service Oriented Architecture 3 (or SOA). The first goal of this article are to provide a simple understanding of reflection, metaprogramming, and SOA's. The next goal is to explain how these concepts are interrelated. The final goal is to examine how reflection and metaprogramming supports SOA's.

Service Oriented Architecture (SOA), Reflection, and Metaprogramming


An overview of the concepts

Service Oriented Architectures

Service Oriented Architecture (or SOA) is a concept in computing that defines the interaction of different software in terms of protocols and functionality. A SOA can be viewed as containing multiple services which may be linked as desired by protocols. SOA is designed so that each functional unit of software in a system is isolated from each other and provides a service without directly making subroutine calls to each other. This may be accomplished with the use of messages 3

!!!! If we can, find a way to make the footnote in brackets, without brackets will probably work though. !!!! Did you intend to say "subroutine calls" above? I changed it from calls to subroutine calls because the topics did not appear to match.

The information being used to communicate between services must contain sufficient detail about the characteristic of the data and the data itself and must remain independent of the underlying platform and programming language. Although SOA does not specify the format to transfer data, programmers have generally used XML for this purpose. However, metadata (data that describes the actual data) in the SOA must: 3

!!!! Here is what I got out of it, that was a hard definition to struggle with :-) See if you agree with this and if so, remove this note.

  • Be easy to configure
  • Provide an easy way to discover services
  • Provide an easy way to incorporate services
  • Remain coherent
  • Preserve data integrity
  • Be easy to manage

A simple example of metadata is a README file that specifies the inputs and outputs to a program. The inputs and outputs of the program would be the data, and the README describes this data.

SOA also does not limit the protocol used to transfer the data and a wide variety of technologies can be used including SOAP, REST and RPC. This is generally left for the programmer of the system.

!!!! It may be a good idea to add a graphical example of a SOA here

Metaprogramming

!!!! Discuss metaprogramming !!!! It may be good to include a programming example here

Reflection

Reflection is a specific type of meta-programming and emphasizes on dynamic program modification. The concept of reflection can be used to extend the service being provided by a system in a Service-oriented Architecture by allowing the transfered data to modify the behavior.

  • Example: 5 Reflection in Perl
 # without reflection
 my $foo = Foo->new();
 $foo->hello();

 # with reflection
 my $class  = "Foo";
 my $method = "hello";
 my $object = $class->new();
 $object->$method();

In the example with reflection, $object and $method can be determined and even changed at run time. This allows the program to change its own behavior.

How it is all related

!!!! Explain

Enhancing SOA

Service-oriented Architecture becomes greatly effective when the underlying programs are able to dynamically adapt to the data received. Two very important concepts support this principles that SOA is build upon:

  1. Metaprogramming - Programs that write and manipulate other programs
  2. Reflection - Programs that modify their own behavior

Appendix

Metadata - data that describes the actual data

References

1. http://www.service-architecture.com/web-services/articles/service-oriented_architecture_soa_definition.html - Brief explanation of SOA

2. Thomas, Dave (2006). Programming Ruby, The Pragmatic Programmers' Guide.

3. http://en.wikipedia.org/wiki/Service_oriented_architecture - A very detailed explanation of SOA

4. http://www.javaworld.com/javaworld/jw-06-2005/jw-0613-soa.html - A more easy to understand explanation of SOA

5. http://en.wikipedia.org/wiki/Reflection_(computer_science) - Explanation of Reflection

!!!! Remove the title below if we do not have any good external links.

Useful External Links