Infomedia.

 

Ingegneria del Software
Teoria e applicazione delle regole di progettazione Object Oriented

Per informazioni communications@infomedia.it



Design Patterns

Prerequisiti: Esperienze di analisi e disegno di architetture software o comprovata esperienza di sviluppo con linguaggi di programmazione Object Oriented

Livello: Avanzato

Durata: 2 giorni

Negli ultimi due anni si è andato affermando l'uso di soluzioni sperimentate a problemi di design ricorrenti: design pattern. Mentre gran parte delle metodologie sono guidate dai princìpi di progettazione, i pattern nascono dalla pratica e sono effettivamente molto utili per evitare di reinventare la ruota. L'uso dei pattern, tuttavia, oltre ad essere limitato all'impiego di soluzioni già sperimentate, richiede anche una visione molto acuta, che nuovamente si ottiene solo con l'esperienza. I pattern di design propongono soluzioni a macro-problemi che vanno identificati in anticipo: è molto difficile partire con un design semplice e migliorarlo gradualmente attraverso l'uso dei pattern. Infine, proprio perché affrontano macro-problemi, molti pattern sono difficili da capire a fondo: spesso pattern diversi sembrano essere varianti di un unico concetto, e non è affatto facile scegliere "il pattern giusto".

Programma del corso:  

  • Fondamenti
  • Obiettivi del Design ad Oggetti. Nozione di Pattern e Pattern Language. Problema, Contesto e Soluzione. Ruolo dei Pattern nel ciclo di vita del software. Forma canonica dei Pattern (GoF). Notazioni di Design (UML Distilled).

  • Pattern in Action (1)
    Esercizio: un Lettore Multimediale. Discussione dei pattern Observer, Factory   
    Method e Chain of Responsibility.
  • Pattern in Action (2)
    Esercizio: un Editor con Undo. Discussione dei pattern Command e Memento.
  • Altri Pattern (1)
    Pattern Creazionali (Abstract Factory, Prototype). Software Plug-In.
  • Case Study
  • Un Editor Vettoriale totalmente estendibile tramite componenti plug-in.

  • Altri Pattern (2)
    Esercizio: aggiunta di un menu. Un pattern Strutturale: Composite.
  • Oltre i Pattern
  • Systematic OOD. Derivazione di Observer.

  • Guida agli approfondimenti

Bibliografia tradizionale ed on-line.

Torna all'indice

 

Systematic Object Oriented Design

Prerequisiti: esperienze di analisi e disegno di architetture software o comprovata esperienza di sviluppo con linguaggi di programmazione Object Oriented.

Livello: avanzato

Durata: 3 giorni

La tecnologia ad oggetti viene spesso adottata per le sue grandi promesse: classi riusabili, applicazioni estendibili, migliore qualità del prodotto finale. Tuttavia, per ottenere realmente tali benefici è necessaria una notevole esperienza. Non è quindi raro che l'introduzione della tecnologia ad oggetti non sia seguita dai tanto attesi miglioramenti nello sviluppo.
Chi prova ad avvicinarsi alla progettazione attraverso le note metodologie (Coad, Booch, OMT, ecc) si accorge rapidamente che l'enfasi viene posta sul processo di sviluppo (produzione di diagrammi delle classi, degli oggetti, scenari di interazione, diagrammi di stato, ecc) e sui buoni princìpi di progettazione ("gli oggetti devono essere autonomi", "le astrazioni non devono dipendere dai dettagli", ecc). Ben poco viene detto su come ottenere tali risultati. Nel migliore dei casi vengono presentati alcuni esempi, lasciando a chi legge il difficile compito di astrarre le tecniche utilizzate e di applicarle all'interno dei propri progetti. Ancora peggio, spesso gli esempi si riferiscono a classi di infrastruttura (liste, alberi, semplici componenti di interfaccia), non ai più complessi scenari applicativi in cui molte classi cooperano per ottenere un risultato.

Programma del corso:

  • Systematic OOD

  • Dai principi di progettazione alle tecniche di trasformazione.

  • Dipendenze di uso tra classi
    Riusabilità ed estendibilità. Astrazioni e dettagli.
  • Stratificazione del design
    Dipendenze circolari. Tecniche fondamentali di trasformazione. Pattern derivati.
  • Accoppiamenti tra classi concrete
    Vincoli di Estendibilità. Tecniche fondamentali di trasformazione.
  • Dipendenze di istanziazione
    Vincoli di Riusabilità ed estendibilità. Tecniche fondamentali di trasformazione.  Tecniche composte. Pattern derivati.
  • Oggetti come entità autonome
    Manutenibilità e riuso. Legge di Demeter. Tecniche di trasformazione    
    fondamentali. Open/Closed Principle. Tecniche di trasformazione avanzate.
  • Accoppiamento e Coesione nel paradigma ad oggetti
    Metriche sul design. Uso ed abuso. Classi manager. Uso di spettrogrammi.

Note:
L'approccio del corso e' decisamente hands-on, impostato su esempi concreti e problematiche reali di progettazione. I temi trattati sono particolarmente importanti per chi utilizza linguaggi di programmazione con type checking statico (C++, Java, Eiffel, Ada95), anche se molti argomenti sono di indubbio interesse anche per chi utilizzi linguaggi con controllo dinamico come Smalltalk. Non solo, anche chi utilizza abitualmente strumenti RAD con un buon supporto per la programmazione ad oggetti (come Delphi) puo' sicuramente ricavare informazioni utili per il lavoro di ogni giorno.

Torna all'indice

 

UML: Analisi e Design ad Oggetti

Prerequisiti: E' richiesta una buona familiarità con i concetti della programmazione ad oggetti. Per seguire al meglio gli argomenti, è consigliata una certa esperienza di programmazione in un linguaggio object oriented (C++, Java, Delphi, Eiffel, Ada95, ecc) o in alternativa la conoscenza di base dell'analisi o del design ad oggetti.

Durata: 3 giorni

Con la ratifica da parte di OMG, UML si appresta a diventare lo standard di riferimento per la rappresentazione dei modelli di analisi e design ad oggetti. Supportato dai principali produttori (Microsoft, IBM, Oracle, ecc), in grado di interfacciarsi con i più diffusi linguaggi (C++, Java, Smalltalk, ecc) e di integrarsi con i diversi object model (CORBA, COM, ecc.), UML è un elemento stategico importante per ogni azienda che realizzi progetti non banali. La potenza di UML si riflette, tuttavia, nella sua complessità.
Adottare UML significa andare oltre il semplice apprendimento di una notazione grafica. Significa determinare, nell'ottica del proprio ciclo produttivo, il ruolo di ogni diagramma e di ogni elemento di modellazione. Significa acquisire gli elementi per decidere quali costrutti possono apportare reali vantaggi ai propri progetti, e quali parti possono o devono essere escluse. Questi sono dunque i reali obiettivi del corso: al di là della notazione, che (come da programma) viene comunque analizzata in ogni dettaglio, il valore maggiore sta proprio nel continuo riferimento a situazioni reali di utilizzo, ad esperienze concrete in diversi settori (business, automazione, scientifico, ecc) e nella possibilità di discutere a fondo i propri interrogativi e problemi. Un corso indipendente da ogni fornitore di tool, che si può quindi permettere di affrontare anche gli immancabili aspetti negativi o rischiosi di UML. Come sempre, l'obiettivo è unire immediatamente la pratica alla teoria. Tutti i partecipanti affronteranno quindi esercizi non banali, tratti da problemi reali, come parte integrante del corso. Questo non solo garantisce una più rapida assimilazione dei concetti, ma permette anche di verificare sul campo l'impatto dei vari aspetti di UML nel ciclo di sviluppo del software.

Programma del corso:

  • UML e Processo di Sviluppo
  • Genesi di UML. Rapporto tra linguaggi e metodologie. Ruolo di UML nello sviluppo del software. Legami tra diagrammi e fasi di sviluppo.

  • Use Case e Analisi dei Requisiti
  • Formulazione di Use Case. Use Case Diagram. Uses ed Extends. Use Case vs. System Interaction. Use Case in pratica. Use Case e OOP.

  • Class Diagram: Problem Domain
  • Domain Analysis vs. Requirements Analysis. Elementi fondamentali nei Class Diagram. Trovare classi ed associazioni. Aspetti approfonditi: dynamic classification, composition, constraint, ecc.

  • Class Diagram: Solution Domain
  • Associazioni e responsabilità. Navigabilità ed accoppiamenti. Stereotipi. Interfacce e Abstract class. Refinement. Dipendenze generiche. Qualified Associations. Classi parametriche.

  • Interaction Diagram
  • Aspetti dinamici: Collaboration e Sequence Diagram. Lifetime, condizioni e iterazioni. Validazione e Verifica tra aspetti statici e dinamici. Modelli Concorrenti e oggetti attivi.

  • State Diagram
  • Stati, eventi, transizioni, guardie e attività. Super-stati. Stati Concorrenti ed ereditarietà. Quando usare uno state diagram.

  • Activity Diagram
  • Sequenze e gradi di libertà. Parallelismo e sincronizzazione. Condizionale. Rapporto con Use Case. Swimlanes.

  • Package Diagram
  • Programming in the large ed organizzazione di librerie. Relazioni con costrutti language-level.

  • Deployment e Component Diagram
  • Componenti hardware e software. Aspetti fisici di distribuzione.

    Torna all'indice


Copyright © Gruppo Editoriale Infomedia, S.r.l.