• Save
GR8Conf 2011: GContracts
Upcoming SlideShare
Loading in...5
×
 

GR8Conf 2011: GContracts

on

  • 927 views

 

Statistics

Views

Total Views
927
Slideshare-icon Views on SlideShare
927
Embed Views
0

Actions

Likes
0
Downloads
0
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    GR8Conf 2011: GContracts GR8Conf 2011: GContracts Presentation Transcript

    • GContractsAndre Steingress @sternegross/@gcontracts
    • LINZ, AUSTRIA
    • www.ejug.at
    • ABOUTGCONTRACTS.
    • GCONTRACTSDESIGN BY CONTRACT (tm) FOR GROOVY Groovy 1.7+ (was 1.6 loooong time ago)BSD LICENSEhttps://github.com/andresteingress/gcontracts
    • JUMP START.
    • LET‘S REVIEW THIS ACCOUNT CLASS.Googled, found at javacoffeebreak.com
    • PREREQUISITES.
    • @Grab( group=org.gcontracts, module=gcontracts-core, version=[1.2.3,)) no additional dependencies...
    • import org.gcontracts.annotations.*
    • 3 ANNOTATIONS.
    • Commonalities• special assertion types • specifying boolean expressions• closure instances as annotation parameters @MyAnnotation({ param?.size() > 0 })
    • @Requires• precondition• a method‘s bouncer
    • @Ensures• postcondition• a method‘s mother
    • @Invariant• class-invariant• an object‘s god.
    • LET‘S REVIEW THIS ACCOUNT CLASS.Googled, found at javacoffeebreak.com
    • INTERNALS.
    • @Ensures({ count() == old.count + 1 }) { count() == old.count + 1 } { result, old -> assert count() == old.count + 1 }compile-time class $_gc_closure1 extends Closure { def doCall(...) { // ... assert count() == old.count + 1 // ... } } @Requires($_gc_213123123123.class)
    • JVM Arguments: -ea -da if ($GCONTRACTS_ENABLED) { ... } org.gcontracts.ViolationTracker.init() $_gc_result = Putable$_gc_closure1.newInstance(this,run-time this).call(element, key) if (org.gcontracts.ViolationTracker.violationsOccured()) org.gcontracts.ViolationTracker.rethrowFirst()
    • Officially Supported since Groovy 1.8!
    • Works since Groovy 1.6http://pniederw.wordpress.com/2010/03/04/3/
    • MORE FEATURES.
    • LABELING
    • INTERFACE CONTRACTS
    • INTERFACE CONTRACTS
    • INHERITANCE✓INTERFACE CONTRACTS✓ABSTRACT CLASSES✓CONCRETE CLASSES✓MIXED
    • INHERITANCE✓ACROSS COMPILATION UNITS
    • MICRO CONTRACTS REUSABLE CONTRACT PART
    • MICRO CONTRACTS
    • Grails Integration• Container extends object construction time• @Service stereotype causes CI validation in @PostConstruct
    • GroovyDoc Integration
    • https://github.com/andresteingress/gcontracts/wiki
    • ABOUTCONTRACTS.
    • MR.„DESIGN BY CONTRACT“
    • WHY CONTRACTS?
    • SPOCK, JUNIT, et. al. ARE„THE CHINAMAN ISNOT THE ISSUE HERE, DUDE.“
    • External API Changes New Programmers Changing Requirements Assumptions Additional Libraries New Use-Cases More Clients New Knowledge Code Conventions
    • External API Changes New Programmers Changing Requirements Assumptions Additional Libraries New Use-Cases More Clients New Knowledge Code Conventions
    • WHAT DID YOU PROGRAM LAST WEEK?CAN YOU RECALL YOUR THOUGHTS, MODELS?WHY SHOULD ANYONE ELSE KNOW ABOUT THEM?
    • BUILD YOUR PLAYGROUND.
    • http://about.me/asteingress
    • Thank you!
    • "Design by Contract" is a trademark of Interactive Software Engineering.