mopping up with groovy

Post on 10-May-2015

3.045 Views

Category:

Technology

3 Downloads

Preview:

Click to see full reader

DESCRIPTION

An introduction to using the Meta Object Protocol within Groovy

TRANSCRIPT

Mopping Up With Groovy*

Brent Snookbrent@fuglylogic.com *obligatory lame pun

What is a MOP?

Duck Typing

• POJ (Plain Old Java) – you can interact with an object based on what it is (Class)

• Groovy – you can interact based on which properties and methods are available on the object (MetaClass)

Modifying Class Behaviour at Runtime

• AKA Monkey Patching

• AKA Duck Punching

• see whytheluckystiff's My Complete List Of Substitute Names For The Maneuver We Now Know To Be Monkeypatching

Why Do It?

• it has an amusing name

• it makes you more attractive to the opposite (or same) sex

• it allows you to write more succinct, expressive code

But I Feel Dirty …

• you may need to change how you think about things

• the laws are different in the duck typing universe

• question old attitudes and conventions

How Does Groovy Implement a MOP?

The MetaClass

• every Groovy object has one

• richer introspection and invocation interface than Java Class

• you can set the MetaClass for an object to change the rules for how it can behave

The Final Shape of an Object

Added Methods + Properties+ = MetaClassClass

The ExpandoMetaClass

• core of Groovy metaprogramming

• allows you to customise behaviour on the fly

• when you ask a newly created GroovyObject for its metaClass, this is what you get back

ExpandoMetaClass<<interface>>MetaClassGroovyObject

What Can You Do With It?

• borrow methods from other classes

• add or override constructors

• dynamically create method names

• add methods to interfaces

• add or override instance methods

• add or override properties

• add or override static methods

http://groovy.codehaus.org/ExpandoMetaClass

Adding a Class Method

Adding a Property

Overriding an Instance Method

The Same In Ruby

Invocation/Access Hooks

• invokeMethod

• getProperty

• setProperty

• propertyMissing

• methodMissing

AOP with invokeMethod

Flexible Methods with methodMissing

MOP!!...huh! What is it Good For?

Syntactic Sugar

Mocking/Stubbing Behaviour

DSL - The Original Class

Adding Some MOP Trickery

Icecream Time

Replacing/Simplifying Frameworks and Patterns

• Spring, EasyMock/JMock

• circumvent the rigidity of the Java language

• patterns like Builder

• Dependency Injection

• with Groovy these can be simplified or disappear altogether

Finally

The Pros and Cons

Pros

• flexibility

• extensibility

• power

Cons• sometimes clunky

syntax• slower performance

With Great Power…

• don’t get wowed by the coolness factor

• remember to KISS

• the end result should be more understandable, not less

• keep pushing the boundaries but exercise judgment

Further Reading and References

• http://www.gnu.org/software/guile/docs/goops/Metaobjects-and-the-Metaobject-Protocol.html#Metaobjects%20and%20the%20Metaobject%20Protocol

• http://en.wikipedia.org/wiki/Meta-object_protocol• http://www.grails-exchange.com/files/GraemeRocher%20-

%20Keynote-DynamicGroovyMetaMagic.pdf• http://groovy.codehaus.org/ExpandoMetaClass• http://whytheluckystiff.net/articles/

seeingMetaclassesClearly.html• http://groovy.codehaus.org/ExpandoMetaClass• http://hackety.org/2007/08/10/

myCompleteListOfSubstitutePhrasesForTheActWeNowKnowToBeMonkeypatching.html

• Groovy In Action

top related