Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License Francesco Cirillo – MetodiAgili.it Javaday Roma - 01/12/2007.

Slides:



Advertisements
Similar presentations
Uguaglianza equals() e clone(). Fondamenti di Java Uguali o identici?
Advertisements

Uguaglianza equals() e clone(). Fondamenti di Java Uguali o identici?
Uguaglianza equals() e clone(). Fondamenti di Java Uguali o identici?
Consideriamo un pentaedro di Sylvester con i 5 piani che formano un tronco di piramide menu principale menu principale.
Ancora su repaint… Quando si modifica la composizione di un container, per mostrare le variazioni NON BASTA chiamare la repaint(), prima occorre chiamare.
Clonazione La clonazione... Ovvero: come costruire una copia (probabilmente che ritorni true su equals?)
Esempio: Tombola!.
Fondamenti di Java Introduzione alla costruzione di GUI (graphic user interface)
J0 1 Marco Ronchetti - Web architectures – Laurea Specialistica in Informatica – Università di Trento Java XML parsing.
J0 1 Marco Ronchetti - Basi di Dati Web e Distribuite – Laurea Specialitica in Informatica – Università di Trento.
J0 1 Marco Ronchetti - Basi di Dati Web e Distribuite – Laurea Specialistica in Informatica – Università di Trento.
Layouts and Graphics. component - container - layout Un Container contiene [0 o +] Components Il Layout specifica come i Components sono disposti nel.
Inner Classes Ancora eventi. 2 Design considerations The most important rule to keep in mind about event listeners that they should execute very quickly.
Laboratorio di Linguaggi lezione X Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea in.
2000 Prentice Hall, Inc. All rights reserved. 1 Capitolo 8 – Overloading di operatori 1.Introduzione 2.Fondamenti sulloverloading di operatori 3.Restrizioni.
1 Classes and Objects in Java Basics of Classes in Java.
Basic Java Constructs and Data Types – Nuts and Bolts
1 Arrays, Strings and Collections [1] Rajkumar Buyya Grid Computing and Distributed Systems (GRIDS) Laboratory Dept. of Computer Science and Software Engineering.
Slide 1 Introduction to Information Literacy. Slide 2 Case study Meet Jane! Jane is a parliamentary researcher who has been asked by an MP to write a.
Transparency No. 1 Java Collection API : Built-in Data Structures for Java.
11 aprile 2002 Avvisi: 1 o Esonero: mercoledi 17 aprile ore 11:30 – 14:00 consulta la pag. WEB alla voce esoneri si raccomanda la puntualita!
TDD by example Why shall we test ? What is TDD (Test Driven Development) ? Lets practice it together doing a kata... Why shall we test ? What is TDD (Test.
1 Traversing a List Iteration. Idiom for traversing a null-terminated linked list. for (Node x = first; x != null; x = x.next) { StdOut.println(x.item);
Building Java Programs Chapter 10
Linked List A linked list consists of a number of links, each of which has a reference to the next link. Adding and removing elements in the middle of.
Review Generics and the ArrayList Class
Data Structures ADT List
John Hurley Cal State LA
Eiffel: Analysis, Design and Programming Bertrand Meyer (Nadia Polikarpova) Chair of Software Engineering.
June 22, 2007 CMPE588 Term Project Presentation Discovery of Composable Web Services Presented by: Vassilya Abdulova.
Sequence of characters Generalized form Expresses Pattern of strings in a Generalized notation.
New features in JDK 1.5 Can these new and complex features simplify Java development?
Classes and Objects. What is Design? The parts of the software including – what information each part holds – what things each part can do – how the various.
1 Lists A List ADT Types of Lists Lists in Java Collections API Using ordered lists – Tournament Maker Using indexed lists – Josephus Problem Implementing.
Java
JDBC. Eseguire una query String query = "SELECT * FROM COFFEES"; Statement stmt = con.createStatement(); ResultSet rs = stmt.executeQuery(query); while.
Introduction to Computer Science Robert Sedgewick and Kevin Wayne Recursive Factorial Demo pubic class Factorial {
The List ADT Textbook Sections
1 Arrays An array is a special kind of object that is used to store a collection of data. The data stored in an array must all be of the same type, whether.
Phil Campbell London South Bank University Java 1 First Steps.
1 CSC 427: Data Structures and Algorithm Analysis Fall 2008 Inheritance and efficiency  ArrayList  SortedArrayList  tradeoffs with adding/searching.
CS18000: Problem Solving and Object-Oriented Programming.
Problem Solving 5 Using Java API for Searching and Sorting Applications ICS-201 Introduction to Computing II Semester 071.
©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter Chapter 10 Using arrays to create collections.
Make Sure You Know All This!. Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling 2 Objects and Classes.
©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter Chapter 10 Using arrays to create collections.
©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter Chapter 10 Using arrays to create collections.
Information and Computer Sciences University of Hawaii, Manoa
JAVA COLLECTIONS M. TAIMOOR KHAN (ADAPTED FROM SWINBURNE NOTES)
2014-T2 Lecture 19 School of Engineering and Computer Science, Victoria University of Wellington  Marcus Frean, Lindsay Groves, Peter Andreae, and John.
2013-T2 Lecture 18 School of Engineering and Computer Science, Victoria University of Wellington  Marcus Frean, Lindsay Groves, Peter Andreae, and John.
Objects First With Java A Practical Introduction Using BlueJ Grouping objects Collections and iterators 1.0.
Computer Science 209 Software Development Inheritance and Composition.
Iterators, Iterator, and Iterable 2015-T2 Lecture 8 School of Engineering and Computer Science, Victoria University of Wellington COMP 103 Thomas Kuehne.
Topic 13 Iterators. 9-2 Motivation We often want to access every item in a data structure or collection in turn We call this traversing or iterating over.
2015-T2 Lecture 19 School of Engineering and Computer Science, Victoria University of Wellington  Marcus Frean, Lindsay Groves, Peter Andreae, and John.
12-CRS-0106 REVISED 8 FEB 2013 CSG2H3 Object Oriented Programming.
Iterators. Iterator  An iterator is any object that allows one to step through each element in a list (or, more generally, some collection).
What is your name?Come si chiama? Click for answer This work is licensed under Creative Commons Attribution Non Commercial License
Iterators.
Comparative and superlative adjectives
OOP Course - Virtual Trip
Il Tasto Chiama. Guida sul Tasto di Chiamata sul sito web da mobile
.NET and .NET Core 9. Towards Higher Order Pan Wuming 2017.
"First things first, but not necessarily in that order " -Dr. Who
Conditional Statements
Iterator.
Photo by fortinbras - Creative Commons Attribution-NonCommercial-ShareAlike License Created with Haiku Deck.
Clonazione La clonazione... Ovvero: come costruire una copia
Web Design & Development Lecture 6
Presentation transcript:

Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License Francesco Cirillo – MetodiAgili.it Javaday Roma - 01/12/2007 Campagna Anti-IF: Java e i linguaggi dinamici, incrementare le potenzialità espressive di Java [Eliminare i FOR]

Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License Francesco Cirillo – MetodiAgili.it Javaday Roma - 01/12/2007 Campagna Anti-IF

Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License Francesco Cirillo – MetodiAgili.it Javaday Roma - 01/12/2007 Obiettivo Più potere a Java senza i FOR Paper su come eliminare i FOR Esperienza di design evolutivo Attraverso il refactoring Usando i principi di design Far vincere qualche maglietta :)

Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License Francesco Cirillo – MetodiAgili.it Javaday Roma - 01/12/2007 Sviluppo Java Web: lento! News … > E poi detta tutta java a sviluppo web non è così tanto veloce in una > giornata non si riesce. su questo no :-) Direi che una prima iterazione con tutte le funzionalita' di base in una giornata con 2 coppie si riesce a fare. > Con Rails in mezza o 1/4 :) ma non entriamo in guerre di religione. Se non si riesce probabilmente le storie non sono state spezzate in modo iterativo-incrementale/verticale ;-) … … > E poi detta tutta java a sviluppo web non è così tanto veloce in una > giornata non si riesce. su questo no :-) Direi che una prima iterazione con tutte le funzionalita' di base in una giornata con 2 coppie si riesce a fare. > Con Rails in mezza o 1/4 :) ma non entriamo in guerre di religione. Se non si riesce probabilmente le storie non sono state spezzate in modo iterativo-incrementale/verticale ;-) …

Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License Francesco Cirillo – MetodiAgili.it Javaday Roma - 01/12/2007 // class Department public void printSlips() { Resource resource = null; for(int i=0; i < _resources.size();i++) { resource = (Resource)_resources.get(i); if(resource.lastContract().deadline().after(new Date())) { System.out.println(resource.name()); System.out.println(resource.salary()); } // class Department public void printSlips() { Resource resource = null; for(int i=0; i < _resources.size();i++) { resource = (Resource)_resources.get(i); if(resource.lastContract().deadline().after(new Date())) { System.out.println(resource.name()); System.out.println(resource.salary()); } Il problema public void printSlips() { for (Resource eachResource: _resources) { if(eachResource.lastContract().deadline().after(new Date()) ) { System.out.println(eachResource.name()); System.out.println(eachResource.salary()); } public void printSlips() { for (Resource eachResource: _resources) { if(eachResource.lastContract().deadline().after(new Date()) ) { System.out.println(eachResource.name()); System.out.println(eachResource.salary()); } Our job is to solve problems, not spoonfeed compilers (…) We need clarity so we can communicate using our code. We value conciseness and the ability to express a requirement in code accurately and efficiently. --Dave Thomas Our job is to solve problems, not spoonfeed compilers (…) We need clarity so we can communicate using our code. We value conciseness and the ability to express a requirement in code accurately and efficiently. --Dave Thomas (resources select: inForce) do: printSlip.

Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License Francesco Cirillo – MetodiAgili.it Javaday Roma - 01/12/2007 // class Department public void printSlips() { Resource resource = null; for(int i=0; i < _resources.size();i++) { resource = (Resource)_resources.get(i); if(resource.lastContract().deadline().after(new Date())) { System.out.println(resource.name()); System.out.println(resource.salary()); } // class Department public void printSlips() { Resource resource = null; for(int i=0; i < _resources.size();i++) { resource = (Resource)_resources.get(i); if(resource.lastContract().deadline().after(new Date())) { System.out.println(resource.name()); System.out.println(resource.salary()); } Parliamo di design

Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License Francesco Cirillo – MetodiAgili.it Javaday Roma - 01/12/2007 // class Department public void printSlips() { Resource resource = null; for(int i=0; i < _resources.size();i++) { resource = (Resource)_resources.get(i); if(resource.lastContract().deadline().after(new Date())) { System.out.println(resource.name()); System.out.println(resource.salary()); } // class Department public void printSlips() { Resource resource = null; for(int i=0; i < _resources.size();i++) { resource = (Resource)_resources.get(i); if(resource.lastContract().deadline().after(new Date())) { System.out.println(resource.name()); System.out.println(resource.salary()); } Parliamo di design public void printSlipForEach() { for (Resource eachResource: _resources) { if(eachResource.lastContract().deadline().after(new Date()) ) { System.out.println(eachResource.name()); System.out.println(eachResource.salary()); } public void printSlipForEach() { for (Resource eachResource: _resources) { if(eachResource.lastContract().deadline().after(new Date()) ) { System.out.println(eachResource.name()); System.out.println(eachResource.salary()); } Layout?Layout? Selezione?Selezione? Media?Media? Contenuti?Contenuti? Ciclo?+Navigazione?Ciclo?+Navigazione? Ciclo?Ciclo?

Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License Francesco Cirillo – MetodiAgili.it Javaday Roma - 01/12/2007 Il Refactoring: Aumentare la capacità del codice di rivelare le intenzioni di design, a qualsiasi membro del team, alla prima occhiata Migliorare la struttura interna del sistema, consentendo alle necessarie astrazioni di emergere LightweightLightweight Our job is to solve problems, not spoonfeed compilers (…) We need clarity so we can communicate using our code. We value conciseness and the ability to express a requirement in code accurately and efficiently. --Dave Thomas Our job is to solve problems, not spoonfeed compilers (…) We need clarity so we can communicate using our code. We value conciseness and the ability to express a requirement in code accurately and efficiently. --Dave Thomas Abbassare la complessità

Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License Francesco Cirillo – MetodiAgili.it Javaday Roma - 01/12/2007 // class Department public void printSlips() { Resource resource = null; for(int i=0; i < _resources.size();i++) { resource = (Resource)_resources.get(i); if(resource.lastContract().deadline().after(new Date())) { System.out.println(resource.name()); System.out.println(resource.salary()); } // class Department public void printSlips() { Resource resource = null; for(int i=0; i < _resources.size();i++) { resource = (Resource)_resources.get(i); if(resource.lastContract().deadline().after(new Date())) { System.out.println(resource.name()); System.out.println(resource.salary()); } Step 1: Separare le logiche Selezione?Selezione? Stampa busta? // class Department public void printSlips() { Resource eachResource = null; List inforces = new ArrayList(); for(int i=0; i < _resources.size();i++) { eachResource = (Resource)_resources.get(i); if(eachResource.lastContract().deadline().after(new Date()) ) { inforces.add(eachResource); } Resource eachInForce = null; for(int i=0; i < inforces.size();i++) { eachInForce = (Resource)inforces.get(i); System.out.println(eachInForce.name()); System.out.println(eachInForce.salary()); } // class Department public void printSlips() { Resource eachResource = null; List inforces = new ArrayList(); for(int i=0; i < _resources.size();i++) { eachResource = (Resource)_resources.get(i); if(eachResource.lastContract().deadline().after(new Date()) ) { inforces.add(eachResource); } Resource eachInForce = null; for(int i=0; i < inforces.size();i++) { eachInForce = (Resource)inforces.get(i); System.out.println(eachInForce.name()); System.out.println(eachInForce.salary()); }

Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License Francesco Cirillo – MetodiAgili.it Javaday Roma - 01/12/2007 Step 2: Semplificare il FOR // class Department public void printSlips() { … Resource eachInForce = null; for(int i=0; i < inforces.size();i++) { eachInForce = (Resource)inforces.get(i); System.out.println(eachInForce.name()); System.out.println(eachInForce.salary()); } // class Department public void printSlips() { … Resource eachInForce = null; for(int i=0; i < inforces.size();i++) { eachInForce = (Resource)inforces.get(i); System.out.println(eachInForce.name()); System.out.println(eachInForce.salary()); } // class Department public void printSlips() { … Resource eachInForce = null; for(int i=0; i < inforces.size();i++) { eachInForce = (Resource)inforces.get(i); System.out.println(eachInForce.name()); System.out.println(eachInForce.salary()); } // class Department public void printSlips() { … Resource eachInForce = null; for(int i=0; i < inforces.size();i++) { eachInForce = (Resource)inforces.get(i); System.out.println(eachInForce.name()); System.out.println(eachInForce.salary()); } Logica i-esima Ciclo + navigazione new Block() { public void evaluate(Resource each) { System.out.println(each.name()); System.out.println(each.salary()); }}.evaluate(eachInForce); new Block() { public void evaluate(Resource each) { System.out.println(each.name()); System.out.println(each.salary()); }}.evaluate(eachInForce);

Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License Francesco Cirillo – MetodiAgili.it Javaday Roma - 01/12/2007 Step 2: Semplificare il FOR // class Department public void printSlips() { … Resource eachInForce = null; for(int i=0; i < inforces.size();i++) { eachInForce = (Resource)inforces.get(i); new Block() { public void evaluate(Resource each) { System.out.println(each.name()); System.out.println(each.salary()); }}.evaluate(eachInForce); } // class Department public void printSlips() { … Resource eachInForce = null; for(int i=0; i < inforces.size();i++) { eachInForce = (Resource)inforces.get(i); new Block() { public void evaluate(Resource each) { System.out.println(each.name()); System.out.println(each.salary()); }}.evaluate(eachInForce); } Logica i-esima Ciclo + navigazione

Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License Francesco Cirillo – MetodiAgili.it Javaday Roma - 01/12/2007 Step 2: Semplificare il FOR // class Department public void printSlips() { … Resource eachInForce = null; for(int i=0; i < inforces.size();i++) { eachInForce = (Resource)inforces.get(i); new PrintSlip().evaluate(eachInForce); } // class Department public void printSlips() { … Resource eachInForce = null; for(int i=0; i < inforces.size();i++) { eachInForce = (Resource)inforces.get(i); new PrintSlip().evaluate(eachInForce); } Logica i-esima Ciclo + navigazione public class PrintSlip implements Block { public void evaluate(Resource aResource) { System.out.println(aResource.name()); System.out.println(aResource.salary()); } public class PrintSlip implements Block { public void evaluate(Resource aResource) { System.out.println(aResource.name()); System.out.println(aResource.salary()); }

Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License Francesco Cirillo – MetodiAgili.it Javaday Roma - 01/12/2007 public class PrintSlip implements Block { public void evaluate(Resource aResource) { System.out.println(aResource.name()); System.out.println(aResource.salary()); } public class PrintSlip implements Block { public void evaluate(Resource aResource) { System.out.println(aResource.name()); System.out.println(aResource.salary()); } Step 3: Eliminare il FOR // class Department public void printSlips() { … Resource eachInForce = null; for(int i=0; i < inforces.size();i++) { eachInForce = (Resource)inforces.get(i); new PrintSlip().evaluate(eachInForce); } // class Department public void printSlips() { … Resource eachInForce = null; for(int i=0; i < inforces.size();i++) { eachInForce = (Resource)inforces.get(i); new PrintSlip().evaluate(eachInForce); } Logica i-esima Ciclo + navigazione

Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License Francesco Cirillo – MetodiAgili.it Javaday Roma - 01/12/2007 public class PrintSlip implements Block { public void evaluate(Resource aResource) { System.out.println(aResource.name()); System.out.println(aResource.salary()); } public class PrintSlip implements Block { public void evaluate(Resource aResource) { System.out.println(aResource.name()); System.out.println(aResource.salary()); } Step 3: Eliminare il FOR // class Department public void printSlips() { … Iterator iterator = inforces.iterator(); while(iterator.hasNext()) { new PrintSlip().evaluate(iterator.next()); } // class Department public void printSlips() { … Iterator iterator = inforces.iterator(); while(iterator.hasNext()) { new PrintSlip().evaluate(iterator.next()); } Logica i-esima CicloCiclo

Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License Francesco Cirillo – MetodiAgili.it Javaday Roma - 01/12/2007 public class PrintSlip implements Block { public void evaluate(Resource aResource) { System.out.println(aResource.name()); System.out.println(aResource.salary()); } public class PrintSlip implements Block { public void evaluate(Resource aResource) { System.out.println(aResource.name()); System.out.println(aResource.salary()); } Step 3: Eliminare il FOR // class Department public void printSlips(…) { … Iterator iterator = inforces.iterator(); while(iterator.hasNext()) { aBlock.evaluate(iterator.next()); } // class Department public void printSlips(…) { … Iterator iterator = inforces.iterator(); while(iterator.hasNext()) { aBlock.evaluate(iterator.next()); } Logica i-esima CicloCiclo

Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License Francesco Cirillo – MetodiAgili.it Javaday Roma - 01/12/2007 Step 3: Eliminare il FOR public class ResourceOrderedCollection { private Collection _items; public ResourceOrderedCollection(Collection items) { _items = items; } public void forEachDo(Block aBlock) { Iterator iterator = _items.iterator(); while(iterator.hasNext()) { aBlock.evaluate((Resource)iterator.next()); } public class ResourceOrderedCollection { private Collection _items; public ResourceOrderedCollection(Collection items) { _items = items; } public void forEachDo(Block aBlock) { Iterator iterator = _items.iterator(); while(iterator.hasNext()) { aBlock.evaluate((Resource)iterator.next()); } public void printSlips() { Resource eachResource = null; List inforces = new ArrayList(); for(int i=0; i < _resources.size();i++) { eachResource = (Resource)_resources.get(i); if(eachResource.lastContract().deadline().after(new Date()) ) { inforces.add(eachResource); } new ResourceOrderedCollection(inforces).forEachDo(new PrintSlip()); } public void printSlips() { Resource eachResource = null; List inforces = new ArrayList(); for(int i=0; i < _resources.size();i++) { eachResource = (Resource)_resources.get(i); if(eachResource.lastContract().deadline().after(new Date()) ) { inforces.add(eachResource); } new ResourceOrderedCollection(inforces).forEachDo(new PrintSlip()); } NavigazioneNavigazione CicloCiclo

Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License Francesco Cirillo – MetodiAgili.it Javaday Roma - 01/12/2007 public void printSlips() { Resource eachResource = null; List inforces = new ArrayList(); for(int i=0; i < _resources.size();i++) { eachResource = (Resource)_resources.get(i); if(eachResource.lastContract().deadline().after(new Date()) ) { inforces.add(eachResource); } new ResourceOrderedCollection(inforces).forEachDo(new PrintSlip()); } public void printSlips() { Resource eachResource = null; List inforces = new ArrayList(); for(int i=0; i < _resources.size();i++) { eachResource = (Resource)_resources.get(i); if(eachResource.lastContract().deadline().after(new Date()) ) { inforces.add(eachResource); } new ResourceOrderedCollection(inforces).forEachDo(new PrintSlip()); } Step 4: E la selezione public void printSlips() { Resource eachResource = null; List inforces = new ArrayList(); for(int i=0; i < _resources.size();i++) { eachResource = (Resource)_resources.get(i); if(eachResource.lastContract().deadline().after(new Date()) ) { inforces.add(eachResource); } new ResourceOrderedCollection(inforces).forEachDo(new PrintSlip()); } public void printSlips() { Resource eachResource = null; List inforces = new ArrayList(); for(int i=0; i < _resources.size();i++) { eachResource = (Resource)_resources.get(i); if(eachResource.lastContract().deadline().after(new Date()) ) { inforces.add(eachResource); } new ResourceOrderedCollection(inforces).forEachDo(new PrintSlip()); } public void printSlips() { Resource eachResource = null; List inforces = new ArrayList(); for(int i=0; i < _resources.size();i++) { eachResource = (Resource)_resources.get(i); if(new PredicateBlock() { public boolean is(Resource each) { return each.lastContract().deadline().after(new Date()); }}.is(eachResource) { inforces.add(eachResource); } new ResourceOrderedCollection(inforces).forEachDo(new PrintSlip()); } public void printSlips() { Resource eachResource = null; List inforces = new ArrayList(); for(int i=0; i < _resources.size();i++) { eachResource = (Resource)_resources.get(i); if(new PredicateBlock() { public boolean is(Resource each) { return each.lastContract().deadline().after(new Date()); }}.is(eachResource) { inforces.add(eachResource); } new ResourceOrderedCollection(inforces).forEachDo(new PrintSlip()); } Ciclo + navigazione SelezioneSelezione AddizioneAddizione Logica i-esima

Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License Francesco Cirillo – MetodiAgili.it Javaday Roma - 01/12/2007 Step 4: E la selezione public void printSlips() { Resource eachResource = null; List inforces = new ArrayList(); for(int i=0; i < _resources.size();i++) { eachResource = (Resource)_resources.get(i); if(new InForcePredicate().is(eachResource)) { inforces.add(eachResource); } new ResourceOrderedCollection(inforces).forEachDo(new PrintSlip()); } public void printSlips() { Resource eachResource = null; List inforces = new ArrayList(); for(int i=0; i < _resources.size();i++) { eachResource = (Resource)_resources.get(i); if(new InForcePredicate().is(eachResource)) { inforces.add(eachResource); } new ResourceOrderedCollection(inforces).forEachDo(new PrintSlip()); } public class InForcePredicate implements PredicateBlock { public boolean is(Resource each) { return each.lastContract().deadline().after(new Date()); } public class InForcePredicate implements PredicateBlock { public boolean is(Resource each) { return each.lastContract().deadline().after(new Date()); } SelezioneSelezione Ciclo + navigazione AddizioneAddizione

Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License Francesco Cirillo – MetodiAgili.it Javaday Roma - 01/12/2007 Step 4: E la selezione public void printSlips() { Collection inforces = new ResourceOrderedCollection(_resources).select(new InForce()); new ResourceOrderedCollection(inforces).forEachDo(new PrintSlip()); } public void printSlips() { Collection inforces = new ResourceOrderedCollection(_resources).select(new InForce()); new ResourceOrderedCollection(inforces).forEachDo(new PrintSlip()); } public Collection select(PredicateBlock aBlock) { Collection result = new ArrayList(); Iterator iterator = _items.iterator(); while(iterator.hasNext()) { Resource resource = (Resource)iterator.next(); if (aBlock.is(resource)) result.add(resource); } return result; } public Collection select(PredicateBlock aBlock) { Collection result = new ArrayList(); Iterator iterator = _items.iterator(); while(iterator.hasNext()) { Resource resource = (Resource)iterator.next(); if (aBlock.is(resource)) result.add(resource); } return result; } public class InForcePredicate implements PredicateBlock { public boolean is(Resource each) { return each.lastContract().deadline().after(new Date()); } public class InForcePredicate implements PredicateBlock { public boolean is(Resource each) { return each.lastContract().deadline().after(new Date()); } CicloCiclo AddizioneAddizione SelezioneSelezione NavigazioneNavigazione

Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License Francesco Cirillo – MetodiAgili.it Javaday Roma - 01/12/2007 Step 5: Per leggere meglio public void printSlips() { Collection inforces = new ResourceOrderedCollection(_resources).select(new InForce()); new ResourceOrderedCollection(inforces).forEachDo(new PrintSlip()); } public void printSlips() { Collection inforces = new ResourceOrderedCollection(_resources).select(new InForce()); new ResourceOrderedCollection(inforces).forEachDo(new PrintSlip()); } public void printSlips() { (new ResourceOrderedCollection(_resources).select(new InForce()).forEachDo(new PrintSlip()); } public void printSlips() { (new ResourceOrderedCollection(_resources).select(new InForce()).forEachDo(new PrintSlip()); } public ResourceOrderedCollection select(PredicateBlock aBlock) { ResourceOrderedCollection result = new ResourceOrderedCollection(); Iterator iterator = _items.iterator(); while(iterator.hasNext()) { Resource resource = (Resource)iterator.next(); if (aBlock.is(resource)) result.add(resource); } return result; } public ResourceOrderedCollection select(PredicateBlock aBlock) { ResourceOrderedCollection result = new ResourceOrderedCollection(); Iterator iterator = _items.iterator(); while(iterator.hasNext()) { Resource resource = (Resource)iterator.next(); if (aBlock.is(resource)) result.add(resource); } return result; } public void printSlips() { Predicate isInForce = new InForce(); Block printSlip = new PrintSlip(); ResourceOrderedCollection resources = new ResourceOrderedCollection(_resources); resources.select(isInForce).forEachDo(printSlip); } public void printSlips() { Predicate isInForce = new InForce(); Block printSlip = new PrintSlip(); ResourceOrderedCollection resources = new ResourceOrderedCollection(_resources); resources.select(isInForce).forEachDo(printSlip); }

Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License Francesco Cirillo – MetodiAgili.it Javaday Roma - 01/12/2007 Step 5: Per leggere meglio public void printSlips() { Predicate isInForce = new InForce(); Block printSlip = new PrintSlip(); ResourceOrderedCollection resources = new ResourceOrderedCollection(_resources); resources.select(isInForce).forEachDo(printSlip); } public void printSlips() { Predicate isInForce = new InForce(); Block printSlip = new PrintSlip(); ResourceOrderedCollection resources = new ResourceOrderedCollection(_resources); resources.select(isInForce).forEachDo(printSlip); } public void printSlipsUsing(Predicate aCriterium, Block anAction) { _resources.select(aCriterium).forEachDo(anAction); } public void printSlipsUsing(Predicate aCriterium, Block anAction) { _resources.select(aCriterium).forEachDo(anAction); } private ResourceOrderedCollection _resources; public void printSlips() { printSlipsUsing(new InForce(),new PrintSlip()); } public void printSlips() { printSlipsUsing(new InForce(),new PrintSlip()); } private void printSlipsUsing(Predicate aCriterium, Block anAction) { new ResourceOrderedCollection(_resources).select(aCriterium).forEachDo(anAction); } private void printSlipsUsing(Predicate aCriterium, Block anAction) { new ResourceOrderedCollection(_resources).select(aCriterium).forEachDo(anAction); }

Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License Francesco Cirillo – MetodiAgili.it Javaday Roma - 01/12/2007 Step 6: Generalizzare new ResourceOrderedCollection(resources).select(isInForce).forEachDo(printSlip); public class ResourceOrderedCollection { … public void forEachDo(Block aBlock) { Iterator iterator = _items.iterator(); while(iterator.hasNext()) { aBlock.evaluate((Resource)iterator.next()); } public ResourceOrderedCollection select(Predicate aBlock) { ResourceOrderedCollection result = new ResourceOrderedCollection(); Iterator iterator = _items.iterator(); while(iterator.hasNext()) { Resource resource = (Resource)iterator.next(); if (aBlock.is(resource)) result.add(resource); } return result; } public class ResourceOrderedCollection { … public void forEachDo(Block aBlock) { Iterator iterator = _items.iterator(); while(iterator.hasNext()) { aBlock.evaluate((Resource)iterator.next()); } public ResourceOrderedCollection select(Predicate aBlock) { ResourceOrderedCollection result = new ResourceOrderedCollection(); Iterator iterator = _items.iterator(); while(iterator.hasNext()) { Resource resource = (Resource)iterator.next(); if (aBlock.is(resource)) result.add(resource); } return result; } public class PrintSlip implements Block { public void evaluate(Resource aResource) { System.out.println(aResource.name()); System.out.println(aResource.salary()); } public class PrintSlip implements Block { public void evaluate(Resource aResource) { System.out.println(aResource.name()); System.out.println(aResource.salary()); } public class InForcePredicate implements PredicateBlock { public boolean is(Resource each) { return each.lastContract().deadline().after(new Date()); } public class InForcePredicate implements PredicateBlock { public boolean is(Resource each) { return each.lastContract().deadline().after(new Date()); }

Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License Francesco Cirillo – MetodiAgili.it Javaday Roma - 01/12/2007 Step 6: Generalizzare new ResourceOrderedCollection(resources).select(isInForce).forEachDo(printSlip); public class ResourceOrderedCollection { … public void forEachDo(Block aBlock) { Iterator iterator = _items.iterator(); while(iterator.hasNext()) { aBlock.evaluate((Resource)iterator.next()); } public ResourceOrderedCollection select(Predicate aBlock) { ResourceOrderedCollection result = new ResourceOrderedCollection(); Iterator iterator = _items.iterator(); while(iterator.hasNext()) { Resource resource = (Resource)iterator.next(); if (aBlock.is(resource)) result.add(resource); } return result; } public class ResourceOrderedCollection { … public void forEachDo(Block aBlock) { Iterator iterator = _items.iterator(); while(iterator.hasNext()) { aBlock.evaluate((Resource)iterator.next()); } public ResourceOrderedCollection select(Predicate aBlock) { ResourceOrderedCollection result = new ResourceOrderedCollection(); Iterator iterator = _items.iterator(); while(iterator.hasNext()) { Resource resource = (Resource)iterator.next(); if (aBlock.is(resource)) result.add(resource); } return result; } public class OrderedCollection { … public void forEachDo(Block aBlock) { Iterator iterator = _items.iterator(); while(iterator.hasNext()) { aBlock.evaluate(iterator.next()); } public OrderedCollection select(Predicate aBlock) { OrderedCollection result = new OrderedCollection(); Iterator iterator = _items.iterator(); while(iterator.hasNext()) { Object object = iterator.next(); if (aBlock.is(object)) result.add(object); } return result; } public class OrderedCollection { … public void forEachDo(Block aBlock) { Iterator iterator = _items.iterator(); while(iterator.hasNext()) { aBlock.evaluate(iterator.next()); } public OrderedCollection select(Predicate aBlock) { OrderedCollection result = new OrderedCollection(); Iterator iterator = _items.iterator(); while(iterator.hasNext()) { Object object = iterator.next(); if (aBlock.is(object)) result.add(object); } return result; } public class PrintSlip implements Block { public void evaluate(Resource aResource) { System.out.println(aResource.name()); System.out.println(aResource.salary()); } public class PrintSlip implements Block { public void evaluate(Resource aResource) { System.out.println(aResource.name()); System.out.println(aResource.salary()); } public class InForcePredicate implements PredicateBlock { public boolean is(Resource each) { return each.lastContract().deadline().after(new Date()); } public class InForcePredicate implements PredicateBlock { public boolean is(Resource each) { return each.lastContract().deadline().after(new Date()); } public class PrintSlip implements Block { public void evaluate(Object anObject) { System.out.println(((Resource)anObject).name()); System.out.println(((Resource)anObject).salary());} } public class PrintSlip implements Block { public void evaluate(Object anObject) { System.out.println(((Resource)anObject).name()); System.out.println(((Resource)anObject).salary());} } public class InForcePredicate implements Predicate { public boolean is(Object anObject) { return ((Resource)anObject).lastContract().deadline().after(new Date()); } public class InForcePredicate implements Predicate { public boolean is(Object anObject) { return ((Resource)anObject).lastContract().deadline().after(new Date()); }

Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License Francesco Cirillo – MetodiAgili.it Javaday Roma - 01/12/2007 Dove siamo // class Department public void printSlips() { Resource resource = null; for(int i=0; i < _resources.size();i++) { resource = (Resource)_resources.get(i); if(resource.lastContract().deadline().after(new Date())) { System.out.println(resource.name()); System.out.println(resource.salary()); } // class Department public void printSlips() { Resource resource = null; for(int i=0; i < _resources.size();i++) { resource = (Resource)_resources.get(i); if(resource.lastContract().deadline().after(new Date())) { System.out.println(resource.name()); System.out.println(resource.salary()); } Layout?Layout? Contenuti?Contenuti? Navigazione?Navigazione? Selezione?Selezione? Media?Media? NavigazioneNavigazione SelezioneSelezione Contenuti+ Media+ Layout Contenuti+ _resources.select(isInForce).forEachDo(printSlip); _resources.select(onlyWomen).forEachDo(printReport);

Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License Francesco Cirillo – MetodiAgili.it Javaday Roma - 01/12/2007 Review & ToDoList :Department Andrea:Employee Federica:Manager 10/01-10/11/2007:Contract 1/9/ /10/2008:Contract Federica:String Andrea:String // class Department public void printSlips() { Resource resource = null; for(int i=0; i < _resources.size();i++) { resource = (Resource)_resources.get(i); if(resource.lastContract().deadline().after(new Date())) { System.out.println(resource.name()); System.out.println(resource.salary()); } // class Department public void printSlips() { Resource resource = null; for(int i=0; i < _resources.size();i++) { resource = (Resource)_resources.get(i); if(resource.lastContract().deadline().after(new Date())) { System.out.println(resource.name()); System.out.println(resource.salary()); } Layout?Layout? Contenuti?Contenuti? Navigazione?Navigazione? Selezione?Selezione? Media?Media? System.out:PrintStream

Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License Francesco Cirillo – MetodiAgili.it Javaday Roma - 01/12/2007 Review & ToDoList resources:OrderedCollection :Department Andrea:Employee Federica:Manager 10/01-10/11/2007:Contract 1/9/ /10/2008:Contract :InForce :PrintSlip Federica:String System.out:PrintStream inForce:OrderedCollection Andrea:String _resources.select(isInForce).forEachDo(printSlip); public OrderedCollection select(Predicate aBlock) { OrderedCollection result = new OrderedCollection(); Iterator iterator = _items.iterator(); while(iterator.hasNext()) { Object object = iterator.next(); if (aBlock.is(object)) result.add(object); } return result; } public OrderedCollection select(Predicate aBlock) { OrderedCollection result = new OrderedCollection(); Iterator iterator = _items.iterator(); while(iterator.hasNext()) { Object object = iterator.next(); if (aBlock.is(object)) result.add(object); } return result; } public boolean is(Object each) { return ((Resource)each).lastContract().deadline().after(new Date()); } public boolean is(Object each) { return ((Resource)each).lastContract().deadline().after(new Date()); }

Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License Francesco Cirillo – MetodiAgili.it Javaday Roma - 01/12/2007 Review & ToDoList resources:OrderedCollection :Department Andrea:Employee Federica:Manager 10/01-10/11/2007:Contract 1/9/ /10/2008:Contract :InForce :PrintSlip Federica:String System.out:PrintStream inForce:OrderedCollection Andrea:String public void forEachDo(Block aBlock) { Iterator iterator = _items.iterator(); while(iterator.hasNext()) { aBlock.evaluate(iterator.next()); } public void forEachDo(Block aBlock) { Iterator iterator = _items.iterator(); while(iterator.hasNext()) { aBlock.evaluate(iterator.next()); } public OrderedCollection select(Predicate aBlock) { OrderedCollection result = new OrderedCollection(); Iterator iterator = _items.iterator(); while(iterator.hasNext()) { Object object = iterator.next(); if (aBlock.is(object)) result.add(object); } return result; } public OrderedCollection select(Predicate aBlock) { OrderedCollection result = new OrderedCollection(); Iterator iterator = _items.iterator(); while(iterator.hasNext()) { Object object = iterator.next(); if (aBlock.is(object)) result.add(object); } return result; } public class PrintSlip implements Block { public void evaluate(Object anObject) { System.out.println(((Resource)anObject).name()); System.out.println(((Resource)anObject).salary()); } public class PrintSlip implements Block { public void evaluate(Object anObject) { System.out.println(((Resource)anObject).name()); System.out.println(((Resource)anObject).salary()); }

Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License Francesco Cirillo – MetodiAgili.it Javaday Roma - 01/12/2007 Riferimenti blocchi e chiusure Blocchi in Java Blocchi e chiusure in Ruby Chiusure nel linguaggio Java Esempi di librerie

Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License Francesco Cirillo – MetodiAgili.it Javaday Roma - 01/12/2007 Segui la Campagna Anti-IF

Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License Francesco Cirillo – MetodiAgili.it Javaday Roma - 01/12/2007 Risorse: Tecnica del Pomodoro: EasyTracking: Gruppo XPLabs Friends- Italia: Extreme Programming User Group – Italia: Domande