Alberto Pravato, Ph.D

DIDATTICA: REGISTRO DELLE LEZIONI DI Programmazione a Componenti

Anno Accademico 2008 - 2009

 

       
Lezione 1 del 26/2/2009 (2 ore)
   

Introduzione al corso e sue finalità.
Presentazione delle modalità di esame.

 
       
Lezione 2 del 2/3/2009 (2 ore)
   

Richiamo della definizione di Processo. Dal sorgente all'eseguibile: cenni al rapporto tra libreria e componente. Ciclo di funzionamento di una CPU: registri PC e PS, gestione interruzioni e RTI. Process Control Block (PCB). Commutazione di contesto. Il codice eseguibile: la macchina di esecuzione. Macchine a Stack. Code Segment e Data Segment. Record di attivazione. Stack di attivazione. Funzioni ricorsive. Funzioni ricorsive di coda. Il caso Fortran. Parametri formali e parametri attuali. Chiamate by-name, by-value e by-reference.

 
       
Lezione 3 del 5/3/2009 (2 ore)
   

La Heap memory e le differenze tra il by-value Java e il by-value C (puntatori all'interno dello stack). Il modificatore out del C#. Static chain e dynamic chain: il dynamic binding. Static chain e closure. Differenze tra linguaggi fortemente tipizzati e linguaggi prototype based. I Thread e le commutazioni di contesto leggere. Thread a livello di linguaggio di programmazione e thread a livello di sistema. Processi Distribuiti. Cooperazione e Interoperabilitą. Il Modello Client/Server: cooperazione transazionale.

 
       
Lezione 4 del 9/3/2009 (2 ore)
   

Ruolo del client e del server: proattivitą e reattivitą. Altri tipi di processi distribuiti: processi peer e processi filtro. Applicazioni Client/Server. Individuazione della relazione client server a diversi livelli: hw, sistema o applicativo. Applicazioni con database server. Applicazioni basate su database in modalitą file sharing. L'illusione dell'X-Server: display server. Applicazioni mainframe ed emultaori di terminale: processi filtro. Host-server, Desktop-server e Intrasystem C/S.

 
       
Lezione 5 del 12/3/2009 (2 ore)
   

Relazione C/S a livello di sistema nel caso Browser/Web Server. Navigazione Web e applicazioni Web. Applicazioni C/S sul Web. Cenni sulle Applet, Applet Certificate e su AJAX. Tecnologia CGI. Librerie a collegamento dinamico. Unitą di computazione in UML. Estensioni al Web Server (chiamate in-process): API ISAPI e NSAPI. Java Application Server. Le Servlet: condisioni di un oggetto: le variabili d'istanza. Componenti in UML. Uso delle variabili statiche e implicazioni sul Load Balancing (meccanismi garantiti dall'infrastruttura J2EE).

 
       
Lezione 6 del 16/3/2009 (2 ore)
   

Sfruttamento del Display Server nell'architettura Access Server. Macro Categorizzazione delle Attivitą computazionali: accesso ai dati, logica di business, logica applicativa e logica di presentazione. Cenni al pattern MVC. Ripartizione delle attivitą tra Client e Server. Fat Client e Host Centric. Il modello C/S come modello pił efficiente. Trasformazione di un'applicazione da Mainframe a C/S. Allontanamento dal Fat Client grazie alle Stored Procedure.

 
       
Lezione 7 del 19/3/2009 (2 ore)
   

Bilanciamento del carico di lavoro e riduzione del traffico di rete: varie tecniche. Spostare computazioni nei client. Attivitą single-user e multi-user. Compressione. Tecnica Push Style Vs. Pull Style. Look Ahead Vs. Bite size. Caching. Interrogazioni ai DB seguendo la logica delle intenzioni dell'utente invece che quella dei tecnici di DB. Streaming (definizioni intensionali Vs. estensionali).

 
       
Lezione 8 del 23/3/2009 (2 ore)
   

Separazione tra Contenuto, Struttura e Layout nelle pagine Web. Dalle origini dell'HTML, layout via tabelle. L'introduzione dei CSS. Il tag TABLE va utilizzato per le tabelle! Utilizzo del CSS come particolare tecnica di Streaming. Lo Streaming via javascript (intensionalitą per fattorizzare aspetti ripetitivi in una pagina) come modifica del DOM. Catene di responsabilitą nella propagazione degli errori. La parola "errore" va messa al bando!

 
       
Lezione 9 del 2/4/2009 (2 ore)
   

Client e Provider: definizione di un contratto. Late Binding. Differenza tra late binding nella programmazione orientata agli oggetti e late binding nella programmazione a componenti. Interfacce. Firma e denotazione di un'operazione. Inclusione tra interfacce. Definizione di Tipo. Sottotipo. Sostituibilitą. Sottotipo Funzionale: co-varianza e contro-varianza.

 
       
Lezione 10 del 6/4/2009 (2 ore)
   

Differenza tra Tipo e Classe. Interfacce e classi che implementano un'interfaccia. Ereditarietą multipla d'interfaccia. Ereditarietą multipla d'implementazione: il diamond inheritance problem. Mixin Approach. Semantica denotazionale e insufficienza nella definizione di una signature: l'esigenza di una contrattualizzazione pił dettagliata. Pre-condizioni e Post-condizioni. Invarianti ed equazioni definitorie (digressione sui tipi di dati astratti - TDA - e un esempio di equazioni definitorie per il TDA Pila). Un utile ausilio: funzione ASSERT. Signature estese: dichiarazione di riporto di eccezione. Flusso normale (post-condizione garantita) e flusso eccezionale. Responsabilitą di chi solleva l'eccezione e di chi la assorbe.

 
       
Lezione 11 del 16/4/2009 (2 ore)
   

Post-condizioni eccezionali: garanzia tramite la "finally" del costrutto "try-catch-finally". Le Continuazioni. Polimorfismo: le diverse accezioni (diverse forme dello stesso oggetto, diversi oggetti che presentano la stessa forma). Subtyping Polymorphism o Sostituzione. Ad-hoc Ploymorphism od Overloading. Bounded Polymorphism. Composizione di un team di sviluppo: la degenerazione delle ripartizioni di ruolo. Utilizzo errato dell'UML: analisi condotta attraverso i sequence diagram. Impatti negativi delle gerarchie aziendali nei team di sviluppo: corrispondenza tra analisti e sviluppatori in base allo stipendio. Paradossi: la legge di Peter.

 
       
Lezione 12 del 20/4/2009 (2 ore)
   

Gerarchie piramidali. Stravolgimenti degeneri: la piramide invertita! Limiti delle organizzazioni gerarchiche (anche quelle reticolari, ma a ragno). Evoluzione nelle organizzazioni: analisi dei casi Apache, Al Quaeda, Napsters. Le organizzazioni Starfish (a stella marina). Team come microcelle (cenno all'Extreme Programming): alta specializzazione e sostituibilitą. Implicita attitudine all'inutilitą dei diagrammi di Gantt: la metodologia Waterfall. Unified Software Process (USP) e gli approcci iterativi. La fase di Inception: concepimento del progetto, fattibilitą e ipotesi di costo. Le gare d'appalto: aggiudicazione per qualitą (rapporti tecnico-economici e algoritmi di valutazione).

 
       
Lezione 13 del 23/4/2009 (2 ore)
   

USP: la fase di Elaboration. Digressione sul recupero dei costi di Elaboration in fase di preparazione di offerte (estensione della Inception). Rischi Politici (equilibri e compromessi). Rischi sui requisiti: interviste, analisi dei casi d'uso. Differenza tra casi d'uso e casi d'uso essential: le intenzioni dell'utente. Attori e ruoli: ruoli aziendali e ruoli applicativi. Relazioni include e extend.

 
       
Lezione 14 del 27/4/2009 (2 ore)
   

Evitare include ed extend per aumentare la comprensione e la produttivitą: un esempio di use case diagram. Caso d'uso "autenticazione": controsenso, applicabile solo per "Utente generico". Meccanismi di autenticazione unificata: Single Sign On (SSO). Meccanismo SSO Password Management. Tecniche con screen scraping, auto-learning. SSO anche per autenticazione al sistema: il caso GINA per Winsows.

 
       
Lezione 15 del 30/4/2009 (2 ore)
   

Applicazioni SSO aware. Il meccanismo SSO intrinseco tra applicazioni mono-vendor (il caso outlook). Paragone tra lettori di badge e SSO. Web Applicazioni SSO aware. Identication & Access Management (SSO) abbinato allo User Provisioning (UP). UP nella definizione dei ruoli aziendali: associazioni applicative, ruoli applicativi e meccanismo automatico della gestione del ciclo di vita degli utenti. UP e directory. Protocollo LDAP. object class. Tipi con sintassi specifiche. Gerarchia, Common Name, Distinguish Name, ricerche, re-indirizzamenti. Sicurezza Applicativa di Primo livello e sicurezza Applicativa di Secondo livello. Gestione della sicurezza applicativa fuori dalla responsabilitą degli sviluppatori.

 
       
Lezione 16 del 4/5/2009 (2 ore)
   

Gestione della sicurezza applicativa fuori dalla responsabilitą degli sviluppatori: Pool di Connessioni al DB: il problema della getConnection, diverse credenziali applicative, parametrizzazione indiretta della getConnection: una tecnica basata sulla sicurezza integrata di JBoss. Tracing delle chiamate, metodi controllori, procedure di controllo accesso: cenni all'XACML. Activity Diagram: attivitą e azioni.

 
       
Lezione 17 del 7/5/2009 (2 ore)
   

Activity Diagram nella definizione dei flussi aziendale. Activity Diagram: flussi e messaggi; decisioni e merge; swim line (soprattutto all'interno di un'attivitą); activity parameter e action pin; send e receive; fork e join. Relazione tra gli activity diagram e i diagrammi di flusso. La programmazione strutturata: costrutti base e il teorema di Bohm e Jacopini.

 
       
Lezione 18 del'11/5/2009 (2 ore)
   

Definizione, in fase Elaboration, della modalitą d'interazione con l'utente. Interfacce Induttive e Interfacce Deduttive. Tipologie di utenti: esperti e inesperti. Coerenza interna, esterna, task specific.

 
       
Lezione 19 del 14/5/2009 (2 ore)
   

Progettazioni errate: interfaccia utente direttamente legata al database. Rapporto 80/20. Legge di Fitts. Multiple e Single Document Interface (MDI e SDI): problemi e soluzioni peggiorative.

 
       
Lezione 20 del 18/5/2009 (2 ore)
   

Riduzione dei rischi tecnologici. I diagrammi di deployment. Componenti e relazioni. Caratterizzazione di un componente VS caratterizzazione di un oggetto. Ambienti di composizione. Il caso DLL. Il caso JNI. Il caso CORBA: ORB, IIOP, Corba Compiler, IDL, Stub e Skeleton. Paradigma SOA. Il caso SOAP e il WSDL come IDL.

 
       
Lezione 21 del 21/5/2009 (1 ora)
   

Performance Test: scenari di utilizzo, thinking-time, utenti simultanei e utenti concorrenti. Sistema two-tier: server read only. Organizzazione delle risorse: replicazione (commit manager e commit a due fasi annidato), partizionamento (information broker), riorganizzazione (architettura multi-tier).

 
       
Lezione 22 del 25/5/2009 (1 ora)
   

Caching: write-through e lazy-write.
Relazione tra programma e DB: impedance mismatch. Binding e Cursori. L'embedded SQL: precompilatori e librerie CLI. Standard CL: ODBC e JDBC. Confronto di performance tra standard e CLI proprietaria. SQL dinamico. Preparazione del piano d'accesso. I marker e la classe Java PreparedStatement. Connection pooling con piani d'accesso pre-caricati.

 
       
Lezione 23 del 4/6/2009 (1 ora)
   

Completamento argomenti tralasciati:
Object Composition: come simulare il late binding: forwarding e delegation. Progettazione interfacce utente: coerenza metaforica ed esempi negativi.

J2EE: introduzione alla tecnologia (come vedere applicati i principali concetti del corso in un'unica tecnologia).

 
       

 

Ultimo aggiornamento: 5 Giugno 2009