11 febbraio 2008

Ricevimento studenti

Il ricevimento studenti di oggi, lunedì 11 febbraio, è annullato.

24 gennaio 2008

Appello del 7 febbraio: iscrizioni

Si prega di iscriversi all'esame mediante un commento a questo post.

L'ISCRIZIONE VA FATTA ENTRO GIOVEDì SERA 1 FEBBRAIO.

Indicare i cognomi dei componenti del gruppo. Se dovete sostenere lo scritto, indicatelo.

L'esame si terrà giovedì 7 febbraio in aula riunioni alle 15:00.

QUESTO APPELLO E' APERTO SOLO AD ALCUNI STUDENTI (IMMATRICOLATI NEGLI ANNI PRECEDENTI). Vedi regole in un post precedente o sul sito del dipartimento www.di.uniroma1.it

14 gennaio 2008

Iscrizione all'esame

Si prega di iscriversi all'esame mediante un commento a questo post o un'email diretta al mio indirizzo.

L'ISCRIZIONE VA FATTA ENTRO MERCOLEDì SERA 16 GENNAIO.

Indicare i cognomi dei componenti del gruppo. Se dovete sostenere lo scritto, indicatelo.

L'esame si terrà mercoledì 23 gennaio in aula riunioni alle 10:00.

07 gennaio 2008

Aggiornamento incontri di gennaio

Gli incontri che potremo fare in questo mese sono al massimo 4, poiché il periodo di preparazione agli esami va dall'8 gennaio al 18 compresi.

Quindi le uniche date utili per il nostro corso sono il 10, il 14 e il 17. Più l'incontro di oggi (che abbiamo fatto considerando erroneamente l'inizio del periodo il 7 anziché l'8) fanno 4.

Ho pertanto rimosso il post relativo al 21 gennaio.

31 dicembre 2007

Buon 2008!

Cari studenti,
auguri di buon anno a tutti!
Emanuele Panizzi

30 dicembre 2007

Specifiche dell'esercizio per il progetto di Programmazione a oggetti

L'esercizio consiste nella progettazione di una serie di classi per modellare un sito web che ospita diversi blog e che avverta gli utenti della pubblicazione di nuovi post nei blog ai quali sono abbonati.

La progettazione deve seguire il design pattern Observer spiegato a lezione.

Durante l'esecuzione del programma saranno rappresentati da opportuni oggetti:
- i blog
- i post
- gli utenti abbonati (subscriber)

L'esercizio deve essere svolto in C++ e nel secondo linguaggio ad oggetti scelto dal gruppo; le specifiche indicate nel seguito devono essere seguite esattamente nella versione C++ e il più fedelmente possibile nel secondo linguaggio, adattandole dove le caratteristiche del linguaggio non permettano di seguirle alla lettera.

Specifiche

1) la classe Blog sarà derivata dalla classe subject descritta nel design pattern. Ogni oggetto della classe Blog sarà caratterizzato da un nome e da un elenco di post; per la versione C++ utilizzare un contenitore della standard library per l'elenco dei post.
2) la classe Blog metterà a disposizione un metodo pubblico NewPost() che permetterà di pubblicare un nuovo post specificandone autore, titolo e testo. Ogni volta che viene pubblicato un nuovo post, sarà invocato il metodo Notify() per permettere agli observer di aggiornare il proprio stato corrispondentemente alla variazione dello stato del blog.
3) lo stato del blog, costituito sostanzialmente dall'elenco dei post pubblicati, sarà rappresentato opportunamente nell'oggetto e sarà osservabile dagli observer invocando uno o più dei seguenti metodi pubblici della classe Blog:
GetName() che restituisce il nome del blog
GetTitle() che restituisce il titolo dell'ultimo post pubblicato
GetText() che restituisce il testo integrale dell'ultimo post pubblicato
GetLine() che restituisce i primi 10 caratteri del testo dell'ultimo post pubblicato
GetAuthor() che restituisce il nome dell'autore dell'ultimo post pubblicato
4) la classe Post sarà caratterizzata da tutti i dati relativi a un post, cioè: autore, titolo, testo. Si tratta di stringhe in tutti e tre i casi.
5) la classe Subscriber è una classe derivata dalla classe observer descritta nel design pattern; ogni oggetto della classe rappresenta un utente che si abbona ad uno o più blog per essere avvisato della pubblicazione di nuovi post; il subscriber è caratterizzato dall'indirizzo di posta elettronica; per effettuare l'abbonamento, si userà il metodo Attach() come descritto nel design pattern
6) poiché esistono subscriber generici e subscriber specifici, è opportuno derivare altre due classi dalla classe Subscriber: le chiamiamo SubsriberG e SubscriberS rispettivamente. Un subscriberG è interessato a tutti i post dei blog ai quali è abbonato, mentre un subscriberS è interessato solamente ai post scritti da un particolare autore;
6a) quando viene invocata la funzione Update() per un SubscriberG è necessario recuperare dal blog:
- il nome del blog stesso
- il titolo del post
- i primi 10 caratteri del testo
- il nome dell'autore
e stampare a schermo il subject e il body di una ipotetica email nella quale si informa l'utente della nuova pubblicazione, riportandone i dati sopra indicati;
6b) quando viene invocata la Update() per un SubscriberS è necessario:
- recuperare dal blog l'autore del post, e, se coincidente con l'autore scelto alla creazione del subscriber:
-recuperare nome blog, titolo post, testo integrale e mostrare a schermo il subject e body della mail ipotetica con questi tre dati
7) Nel main() vanno dichiarati un certo numero di blog e di subscriber generici e specifici, indicando per questi ultimi il nome dell'autore al quale sono interessati; vanno poi abbonati i subscriber ai vari blog; vanno infine creati alcuni post per verificare che i subscriber siano avvisati con le email opportune.

Note:
- la pubblicazione effettiva delle pagine web dei blog non va trattata
- sfruttare il polimorfismo per differenziare il comportamento del subscriber generico da quello del subscriber specifico.
- nomi degli autori, titoli e testi dei post sono da scegliere arbitrariamente ai soli fini dell'esecuzione del programma


Eventuali dettagli non specificati qui possono essere proposti in commenti a questo post. Inserire altresì nei commenti eventuali domande di chiarimento. Risponderò direttamente, ma invito anche gli studenti a rispondere ai commenti dei loro colleghi.

28 dicembre 2007

Riferimenti volume GoF

Ecco i riferimenti del volume sui design pattern:


Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides

Design Patterns
Elements of Reusable Object-Oriented Software

ADDISON-WESLEY, 1995 (19-ma ristampa, Gennaio 2000)
ISBN: 0201633612



Nota: GoF

Lezione di giovedì 17 gennaio

Lasciare un commento specificando se si è interessati a partecipare a questa lezione o a presentare il lavoro del proprio gruppo.

Lezione di lunedì 14 gennaio

Lasciare un commento specificando se si è interessati a partecipare a questa lezione o a presentare il lavoro del proprio gruppo.

Aggiornamento di lunedì pomeriggio:

La lezione si è tenuta. Un gruppo ha descritto la realizzazione della parte C++ del progetto. Si è discusso sull'implementazione e sulle soluzioni adottate.
Un altro gruppo ha accennato al lavoro che stanno facendo con il linguaggio PHP, alle strutture del linguaggio utilizzate per realizzare l'esercizio e alle differenze con l'implementazione C++.

Non è stato possibile registrare l'audio della lezione.

Lezione di giovedì 10 gennaio 2008

Lasciare un commento specificando se si è interessati a partecipare a questa lezione o a presentare il lavoro del proprio gruppo.

Lezione del 7 gennaio 2008

Lasciare un commento specificando se si è interessati a partecipare a questa lezione o a presentare il lavoro del proprio gruppo.

Aggiornamento (5 gennaio 2008): ALLORA LUNEDI' FACCIAMO L'INCONTRO PER DISCUTERE DELLE DOMANDE CHE AVETE SUL PROGETTO. SI TERRA' REGOLARMENTE ALLE 14 NELLA SOLITA AULA.

Aggiornamento (7 gennaio):
[24 presenti]

Argomenti
:

  • domande e risposte sulla implementazione del pattern in C++
  • uso di oggetti o di puntatori nei contenitori
Podcast:
registrazione audio dell'incontro

21 dicembre 2007

Esercizio del progetto

Lezione del 20 dicembre 2007 - Ultima lezione del corso
[41 presenti]


Argomenti:

  • pattern observer: approfondimento e considerazioni
  • requisiti dell'esercizio da svolgere nei due linguaggi scelti per il progetto
  • organizzazione per il mese di gennaio (incontri aggiuntivi ed esami):
    • nel mese di gennaio è possibile fare 5 incontri nello stesso orario delle lezioni;
    • lo scopo degli incontri è quello di approfondire gli argomenti del corso in relazione al progetto assegnato;
    • negli incontri, i gruppi di studenti che stanno svolgendo il progetto, su base volontaria, presenteranno il lavoro svolto fino a quel momento; tale presentazione consentirà di effettuare una discussione utile a tutti gli studenti del corso; consentirà anche ai gruppi più attivi di avere una valutazione preventiva del proprio lavoro;
    • inserirò nel blog 5 post, uno per ogni incontro; per poter svolgere la presentazione, o per partecipare come uditori, inserire un commento su uno dei post;
    • gli incontri si terranno se e solo se ci sarà un numero sufficiente di uditori e almeno un gruppo presentatore; con un commento finale almeno 24 prima annuncierò se l'incontro si terrà o no;
    • L'esame si terrà il 23 gennaio, mercoledì, alle 10:00 in aula riunioni a via salaria. Lo svolgimento è il seguente: chi non è esonerato dovrà fare uno scritto a risposta multipla (test) della durata di 20 minuti (15 domande), simile a quello della prova d'esonero; Poi iniziano le discussioni con i gruppi; la correzione dei test dei membri del gruppo non esonerati avverrà contestualmente alla discussione di ogni gruppo.
    • Lo svolgimento del test e la discussione del progetto sono due cose distinte; un voto positivo in una delle due cose verrà 'salvato' per un anno nei miei file; chi non supera una delle due parti in questo appello potrà tornare a risostenerla nel prossimo appello; la discussione deve però essere svolta congiuntamente da tutti i componenti del gruppo in prima istanza: solo chi è eventualmente 'respinto' dovrà risostenere la discussione autonomamente in un appello successivo

Podcast della lezione:
registrazione audio della lezione

18 dicembre 2007

Formazione dei gruppi

Coloro che cercano persone con cui formare un gruppo per il progetto possono lasciare un commento a questo post indicando:

  1. un proprio riferimento (es. email)
  2. se cercano un gruppo in cui inserirsi o se sono già in 2/3 e cercano un'altra persona
  3. se hanno già scelto un linguaggio (lasciando il commento nel post precedente) o se vorrebbero entrare nel gruppo che ha scelto un particolare linguaggio
Ricordo che i gruppi sono formati almeno da 3 persone e al massimo da 4. Non si può sostenere l'esame singolarmente né in due.

Ogni linguaggio può essere scelto da uno e un solo gruppo.

17 dicembre 2007

Design pattern

Lezione di lunedì 17 dicembre

[35 presenti]


Argomenti:

  • assegnazione del progetto: spiegazione del post "Progetto"
  • design pattern, accenni
  • pattern: Observer

Podcast:

registrazione audio di questa lezione, in formato wav