✦ Progettazione in XP
✦ Principi di progettazione: Semplicità
✦ Test Driven Development
✦ Self Documenting Code
✦ Once and Only Once
✦ You Ain’t Gonna Need It
✦ Automazione dei test in Java: JUnit
✦ Progettazione in XP
✦ Principi di progettazione: Semplicità
✦ Test Driven Development
✦ Self Documenting Code
✦ Once and Only Once
✦ You Ain’t Gonna Need It
✦ Automazione dei test in Java: JUnit
Slide introduttive al linguaggio Java 8 in preparazione alla certificazione OCA 1Z0-808.
Lezione del 12-10-2017 tenuta da Valerio Radice presso Nextre Engeneering
https://www.nextre.it/corso/corso-java-oca/
Non solo Django: MVC orientato agli oggetti con Plone e Zope ToolkitMaurizio Delmonte
Direzioni fondamentali per entrare rapidamente nella comprensione di Plone e del suo mondo, e costruire il vostro sistema di gestione contenuti in capo a pochi giorni.
Slide quarta lezione al linguaggio Java 8 in preparazione alla certificazione OCA 1Z0-808.
Argomenti:
Design Pattern: Singleton
Classe Astratta
Interfaccia e interfaccia funzionale
Ereditarietà e costruttori
Super e this
Incapsulamento
Polimorfismo
Varargs
Overload e Override
Invocazione virtuale dei metodi
Lezione del 28-11-2017 tenuta da Valerio Radice presso Nextre Engeneering
https://www.nextre.it/corso/corso-java-oca/
Elementi di C# 1.0
Delegati ed eventi. Eccezioni. Enumeratori.
Elementi di C# 2.0
Static Classes. Generics e collezioni generiche.Nullable Types. Partial Types e Partial Classes. Anonymous Methods.Iteratori,
Elementi di C# 3.0
Auto-implemented properties.Object Initializers e Collection Initializers. Implicit Typed Variables. Anonymous Types.Extension Methods. Lambda Expression.
Slide introduttive al linguaggio Java 8 in preparazione alla certificazione OCA 1Z0-808.
Lezione del 12-10-2017 tenuta da Valerio Radice presso Nextre Engeneering
https://www.nextre.it/corso/corso-java-oca/
Non solo Django: MVC orientato agli oggetti con Plone e Zope ToolkitMaurizio Delmonte
Direzioni fondamentali per entrare rapidamente nella comprensione di Plone e del suo mondo, e costruire il vostro sistema di gestione contenuti in capo a pochi giorni.
Slide quarta lezione al linguaggio Java 8 in preparazione alla certificazione OCA 1Z0-808.
Argomenti:
Design Pattern: Singleton
Classe Astratta
Interfaccia e interfaccia funzionale
Ereditarietà e costruttori
Super e this
Incapsulamento
Polimorfismo
Varargs
Overload e Override
Invocazione virtuale dei metodi
Lezione del 28-11-2017 tenuta da Valerio Radice presso Nextre Engeneering
https://www.nextre.it/corso/corso-java-oca/
Elementi di C# 1.0
Delegati ed eventi. Eccezioni. Enumeratori.
Elementi di C# 2.0
Static Classes. Generics e collezioni generiche.Nullable Types. Partial Types e Partial Classes. Anonymous Methods.Iteratori,
Elementi di C# 3.0
Auto-implemented properties.Object Initializers e Collection Initializers. Implicit Typed Variables. Anonymous Types.Extension Methods. Lambda Expression.
La modellazione Object Oriented è una disciplina al confine tra l’arte e la scienza.
Come arte non può prescindere da fattori quali l’inventiva, la bellezza e l’innovazione; come scienza non può ignorare i principi fondamentali sui quali si basa.
L’OOAD è quindi la disciplina che consente di gestire questo mondo di confine, di padroneggiare i principi base e di allenare la mente ad un pensiero Object Oriented.
Il corso Object Oriented Analysis and Design di K-Tech è articolato in cinque moduli:
1. Origini e concetti fondamentali della OOP
2. Qualità del Software e Metodologie di Sviluppo
3. Pensare ad Oggetti e Modellazione
4. GRASP
5. Altri principi della OOD
Programma completo del corso:
http://www.k-tech.it/formazione/corso_object_oriented_analysis_design
Repository Pattern: Un buon design al servizio della testabilità.
Le slides si riferiscono al talk tenuto in Mikamai Milano durante i TDD Meetup di Milano, il 02/05/2017
Quando si scrivono i test, la corretta gestione delle dipendenze (Dependency Injection) è uno degli aspetti più rilevanti e molte volte le best practices per l’utilizzo di un Dependency injector ed una libreria di Mocking sono le stesse.
In questa presentazione si cerca di capire quando un Dependency injector rappresenta un Anti-pattern e quando invece diventa un valido strumento professionale per risparmiare tempo, ridurre gli errori, scrivere meno codice e rendere l’applicazione molto flessibile.
Tutto questo però senza sacrificare il design dei nostri oggetti e legarci in modo indissolubile ad un framework.
The design patterns are recurring solutions to common problems in software design.
The design patterns in computer science were formally described for the first time in the book "Design Patterns: Elements of Reusable Object-Oriented Software", whose authors are often called the Gang of Four, GoF or Go4.
Delphi & Dintorni Webinar - Diventa un mago del TestingMarco Breveglieri
Il Testing è una pratica sempre più preziosa e fondamentale nell'ambito dello sviluppo del software: si tratta di un passaggio fondamentale per ridurre il numero dei bug nel software e abilitare automatismi come la Continuous Integration e la Continuous Delivery. Se utilizzati in modo errato però, i test possono causare più problemi di quanti ne prevengano: è importante quindi conoscere le differenze tra le varie tipologie di test, quali sono le loro caratteristiche ideali e padroneggiarli al meglio. In questo webinar faremo luce sul Testing, chiariremo bene i concetti di Unit e Integration Test, vedremo come scriverli nel modo corretto e quali tool ci vengono in aiuto... alla fine il Testing non avrà più segreti!
Quando, come e perché utilizzare PowerMock. Vengono analizzati i legami tra design delle applicazioni e strumenti di test. Sono presenti esempi di codice semplice ma verosimile con i rispettivi test.
✦ Introduzione
✦ Connessioni TCP lato client: la classe
Socket
✦ Connessioni TCP lato server: la classe
ServerSocket
✦ Struttura di un server multi-threaded
4. Design Pattern Strutturali
✦ Riguardano il modo in cui più oggetti
sono collegati tra di loro per formare
strutture complesse
✦ Usano l’ereditarietà e il polimorfismo per
comporre interfacce diverse o
implementazioni diverse di una stessa
interfaccia
4
5. Adapter (class)
✦ Il problema
• occorre utilizzare una classe già disponibile
(Adaptee) insieme a una libreria di classi
sviluppata in maniera indipendente; la libreria
richiede una particolare interfaccia (Target) che
non è presente nell’Adaptee
5
6. Adapter (class)
✦ Soluzione
• Si crea una nuova classe (Adapter) che
implementa l’interfaccia Target ed eredita
l’implementazione della classe Adaptee
• L’implementazione nell’Adapter dei metodi di
Target richiama i metodi di Adaptee
6
8. Adapter (class)
✦ Conseguenze
• se Target non è un’interfaccia pura (“interface” in
Java), è necessaria l’ereditarietà multipla (non
presente in tutti i linguaggi)
• PROBLEMA: un Adapter adatta un singolo
Adaptee; se c’è una gerarchia di Adaptee occorre
realizzare una gerarchia parallela di Adapter
• viene creato un unico oggetto che funge sia da
Adaptee che da Target (basso overhead a tempo
di esecuzione)
• PROBLEMA: complicata la situazione in cui un
Adaptee deve essere adattato a diversi Target
8
9. Adapter (object)
✦ Il problema
• occorre utilizzare una classe già disponibile
(Adaptee) insieme a una libreria di classi sviluppata
in maniera indipendente; la libreria richiede una
particolare interfaccia (Target) che non è presente
nell’Adaptee
9
10. Adapter (object)
✦ Soluzione
• Si crea una nuova classe (Adapter) che implementa
l’interfaccia Target e contiene un riferimento a un
oggetto della classe Adaptee (tipicamente passato al
costruttore)
• L’implementazione nell’Adapter dei metodi di Target
richiama i metodi dell’oggetto Adaptee
10
12. Adapter (object)
✦ Conseguenze
• l’Adapter può essere utilizzato per oggetti della
classe Adaptee e di tutte le classi derivate
• se necessario, è possibile cambiare a run time
l’oggetto Adaptee associato a un Adapter
• uno stesso oggetto Adaptee può essere associato
a diversi Adapter per Target diversi
• PROBLEMA: l’Adapter e l’Adaptee rimangono due
oggetti distinti; questo comporta un overhead di
memoria
12
14. Adapter (object)
✦ Soluzione (variante)
• in linguaggi come Java, l’Adapter può essere
realizzato come classe interna (eventualmente
anonima) dell’Adaptee
‣ in questo modo l’Adapter ha accesso a tutte le componenti
private della classe Adaptee
‣ potrebbe richiedere una modifica/estensione della classe
Adaptee, quindi si tratta di una soluzione ibrida tra Class
Adapter e Object Adapter
‣ si evita di aggiungere nuove classi visibili all’esterno
14
15. Adapter (object)
✦ Esempio
• Gestione degli eventi in Java 1.1 e successivi (es.
ActionListener, MouseAdapter etc.)
‣ per associare un’azione a un evento, tipicamente si crea un
object adapter (usando una classe anonima) che
implementa i metodi dell’interfaccia Listener appropriata
richiamando metodi dell’oggetto che effettivamente
eseguirà l’azione
15
16. Composite
✦ Il problema
• il sistema deve gestire oggetti (Component) che
possono essere sia oggetti semplici che oggetti
complessi composti da più oggetti semplici
(eventualmente in maniera gerarchica)
• si vuole rendere il client che usa questi oggetti
indipendente dal fatto che stia manipolando un
componente semplice o un oggetto composto
16
17. Composite
✦ Soluzione
• Si definisce una classe Composite che implementa
l’interfaccia di Component, e mantiene al suo
interno una collezione di Component
• il Composite implementa i metodi di Component
invocando a sua volta i metodi dei componenti da
cui è costituito
17
19. Composite
✦ Conseguenze
• semplifica il client (nascondendo la differenza tra
componenti semplici e composti)
• rende più semplice l’aggiunta di nuovi tipi di
componenti
• PROBLEMA: non è facile porre dei vincoli sulla
composizione (es. un oggetto può contenere solo
componenti di un certo tipo)
19
21. Composite
✦ Esempio
• la gerarchia di componenti grafici in AWT
‣ ogni componente grafico deriva da java.awt.Component
‣ la classe java.awt.Container definisce un Component che
può contenere altri componenti (es. Window)
21