Programmazione ad Oggetti Modulo A (Esame del 11/9/2015)



Похожие документы
Realizzazione di una classe con un associazione

UML Diagrammi delle classi. UML Diagramma classi 1

Tipi primitivi. Ad esempio, il codice seguente dichiara una variabile di tipo intero, le assegna il valore 5 e stampa a schermo il suo contenuto:

Esercitazioni di Progettazione del Software. Esercitazione (Prova al calcolatore del 17 settembre 2010)

Test di unità con JUnit4

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2

Progettazione : Design Pattern Creazionali

Main System Monitor Keyboard

Esercizi della lezione 5 di Java

Esercitazione n 4. Obiettivi

12 - Introduzione alla Programmazione Orientata agli Oggetti (Object Oriented Programming OOP)

SAPIENZA Università di Roma, Facoltà di Ingegneria

Corso di Laurea in Ingegneria Gestionale Esame di Informatica a.a settembre 2011

Corso di Laurea in Ingegneria Gestionale Esame di Informatica - a.a luglio 2013

MOBILE WEB DESIGN TUTORIAL ANDROID METAIO AUGMENTED REALITY

Tricks & Tips. [Access] Tutorial - ActiveX - Controllo Tree View. - Michele de Nittis - Versione: 1 Data Versione: venerdì 30 agosto 2002

Programmazione a Oggetti Lezione 10. Ereditarieta

Linguaggi Corso M-Z - Laurea in Ingegneria Informatica A.A Esercitazione. Programmazione Object Oriented in Java

Prova d Esame Compito A

Uso di JUnit. Fondamenti di informatica Oggetti e Java. JUnit. Luca Cabibbo. ottobre 2012

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2

Programmazione Orientata agli Oggetti in Linguaggio Java

COMPITO DI LABORATORIO DI PROGRAMMAZIONE Luglio Soluzione degli Esercizi

La struttura dati ad albero binario

Uno dei pregi di Java è quello di integrare la documentazione con il codice stesso Formato dei commenti:

Programmazione a Oggetti Modulo B

Corso di Laurea in Ingegneria Gestionale Esame di Informatica a.a giugno 2013

Corso Linguaggi di programmazione II - Unina Esercitazione (prova intercorso)

GESTIONE DEI PROCESSI

15 - Packages. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

Reflection in Java. Linguaggi Corso M-Z - Laurea in Ingegneria Informatica A.A

Supermarket Progetto di Programmazione Febbraio 2010

FONDAMENTI di INFORMATICA L. Mezzalira

Fondamenti di Informatica C Esercitazioni di Laboratorio / 3 Outline

Esercitazione 6. Tutor: Ing. Diego Rughetti. Anno Accademico 2007/2008

Politecnico di Milano. Ingegneria del Software a.a. 2006/07. Appello del 14 settembre 2007 Cognome Nome Matricola

Metodologie di progetto Estensione di classi Implementazione di interfacce Composizione

Studente (Cognome Nome): Corso di Informatica Corso di Laurea in Ingegneria Gestionale a.a Primo scritto 11 Gennaio 2008

14 - Packages. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

Fondamenti di Informatica 1. Prof. B.Buttarazzi A.A. 2010/2011

Relazioni tra oggetti e classi : Composizione. Relazioni tra oggetti e classi : esempio di Aggregazione. classe contenitore

Programmazione a Oggetti e JAVA. Prof. B.Buttarazzi A.A. 2012/2013

Tener traccia del client

Ottava Esercitazione. introduzione ai thread java mutua esclusione

RMI Remote Method Invocation

Prova d Esame Compito B

Un esercizio d esame. Flavio De Paoli

RMI. Java RMI RMI. G. Prencipe

Specifica i tipi di oggetti a creare, utilizzando un istanza prototipo, e crea nuove istanze tramite la copia di questo prototipo.

Moduli (schede compilabili) in Word Esempio: scheda di alimentazione per un degente

Java threads (2) Programmazione Concorrente

Modulo 4: Ereditarietà, interfacce e clonazione

SOMMARIO Coda (queue): QUEUE. QUEUE : specifica QUEUE

Testo Esercizio. Un modello è ragionevole quando contiene queste tre caratteristiche.

Integrazione InfiniteCRM - MailUp

Gestione delle Eccezioni

ARRAY BIDIMENSIONALI float [][] mx = new float[3][4]; (float []) [] mx = new float[3][4];

7 Esercitazione (svolta): Callback. Polling. Java RMI: callback. Server. Server. Client. Client. due possibilità:

Gestione degli eventi in Java

Registratori di Cassa

Java. Linguaggi di Programmazione Linguaggi Speciali & Tecnologie dei Linguaggi di Programmazione: Scritto del 30 Giugno 2006

Programmazione ad Oggetti: JAVA. Esercitazione

Java Virtual Machine

Esercizi sulla definizione di classi (Fondamenti di Informatica 1 Walter Didimo) Soluzioni

Registri RMI. Massimo Merro Univ. Verona Programmazione di Rete 90 / 247

Introduzione a Dev-C++

Siti web centrati sui dati Architettura MVC-2: i JavaBeans

Fondamenti di Informatica T-1, 2009/2010 Modulo 2 Prova d Esame 5 di Giovedì 15 Luglio 2010 tempo a disposizione 2h30'

Esercizi Capitolo 6 - Alberi binari di ricerca

GAUDI SSPC: Tracciato XSD flussi G01-G03 Gestore di rete GAUDI-SSPC GESTIONE FLUSSI G01 G03. Descrizione Tracciati File XSD Terna per Gestore di rete

Portale tirocini. Manuale utente Per la gestione del Progetto Formativo

Programmazione CORBA in Java

LA GESTIONE DELLE VISITE CLIENTI VIA WEB

Studente (Cognome Nome): Corso di Informatica Corso di Laurea in Ingegneria Gestionale a.a Secondo Compitino 21 Dicembre 2006

Luca Mari, Sistemi informativi applicati (reti di calcolatori) appunti delle lezioni. Architetture client/server: applicazioni server

Architettura MVC-2: i JavaBeans

Parcheggio.rtf 1/8 6 gennaio Prova di programmazione: parcheggio a pagamento

ARCHIVIA PLUS - ARCHIFILE

Parola chiave extends

Definizione di classi con array di oggetti

Corso di Programmazione ad Oggetti

Programmazione funzionale

19. Introduzione al multi-threading

La selezione binaria

Corso sul linguaggio Java

3. La sintassi di Java

Chat. Si ha un server in ascolto sulla porta Quando un client richiede la connessione, il server risponde con: Connessione accettata.

INFORMATICA 1 L. Mezzalira

SAPIENZA Università di Roma Facoltà di Ingegneria dell Informazione, Informatica e Statistica

Istruzioni per l installazione del software per gli esami ICoNExam (Aggiornate al 15/01/2014)

Mobilità di Codice. Massimo Merro Programmazione di Rete 128 / 144

(Esercizi Tratti da Temi d esame degli ordinamenti precedenti)

Nascita di Java. Che cos e Java? Caratteristiche di Java. Java: linguaggio a oggetti

GESTIONE INFORMATICA DEI DATI AZIENDALI

Транскрипт:

Programmazione ad Oggetti Modulo A (Esame del 11/9/2015) Esercizio 1 Considerate la seguente gerarchia di classi: class A { public void print(string s) { System.out.println(s); public void m1() { print("a.m1"); m2(); public void m2() { print("a.m2"); class B extends A { public void m2() { print("b.m2"); public void m3() { print("b.m3"); class C extends A { public void m1() { print("c.m1"); public void m2() { print("c.m2"); m1(); class D extends C { public void m1() { super.m1(); print("d.m1"); public void m3() { print("d.m3"); siano inoltre date le seguenti definizioni: A var1 = new B(); B var3 = new B(); C var5 = new D(); A var2 = new D(); C var4 = new C(); Object var6 = new C(); Quale è il risultato della compilazione e della (eventuale, nel caso la compilazione non dia errori) esecuzione dei seguenti frammenti? 1. var1.m1(); 2. var2.m1(); 3. var3.m1(); 4. var4.m1(); 5. var5.m1(); 6. var6.m1(); 7. ((B)var1).m3(); 8. ((B)var2).m3(); 9. (D)var5).m3(); 10. ((D)var6).m3(); Soluzione Esercizio 1 1. var1.m1(); A.m1 / B.m2 2. var2.m1(); C.m1 / D.m1 3. var3.m1(); A.m1 / B.m2 4. var4.m1(); C.m1 5. var5.m1(); C.m1 / D.m1 6. var6.m1(); compiler error 7. ((B)var1).m3(); B.m3 8. ((B)var2).m3(); runtime error 9. (D)var5).m3(); D.m3 10. ((D)var6).m3(); runtime error

Esercizio 2 Vogliamo costruire un sistema di classi per gestire le operazioni di un file system. La seguente classe astratta descrive la struttura comune degli elementi del file system. abstract class FSItem { private String nome; // diritti public class Permessi { public boolean rr; public boolean ww; protected Permessi permessi = new Permessi(); protected FSItem(String s) {nome = s; permessi.rr = true; permessi.ww = true; public String name() { return nome; public void chmod (boolean r, boolean w) { permessi.rr = r; permessi.ww = w; Un FSItem ha un nome, due booleani che definiscono i diritti di lettura e scrittura, ed il metodo chmod() per modificarli. Le diverse componenti del filesystem sono descritte dalle classi specificate qui di seguito. class Directory extends FSItem { // OVERVIEW: una directory e un FSItem che puo contenere // un insieme di sotto-directories, files o links public string ls() throws IllegalOperation // Se this permette la lettura, restituisce una stringa che // contiene i nomi di tutti gli FSItems contenuti nella // directory; altrimenti lancia leccezione public void add(fsitem i) // Aggiunge i a this se this permette la scrittura; // Altrimenti lancia leccezione class File extends FSItem { // OVERVIEW: un File e un FSItem con un contenuto di tipo string public void set(string s) throws IllegalOperation // Se l operazione di scrittura e permessa setta ad s il // contenuto del file; altrimenti lancia leccezione public string get() // Se l operazione di lettura e permessa restituisce il // contenuto del file; altrimenti lancia leccezione abstract class Link extends FSItem { // OVERVIEW: un Link e un FSItem con associato un altro FSItem, // detto il "target". Implementa tutte le operazioni del target, // e ciascuna operazione viene implementata mediante // linvocazione della stessa operazione sul target. class FileLink extends Link { // OVERVIEW: un FileLink rappresenta il link ad un File // e implementa tutte le operazioni del File "target". class DirectoryLink extends Link { // OVERVIEW: un DirectoryLink rappresenta il link ad una directory // e implementa tutte le operazioni della Directory "target".

Fornite l implementazione completa delle classi Directory, File, Link, FileLink e DirectoryLink. Soluzione Esercizio 2 class Directory extends FSItem { private ArrayList<FSItem> items = new ArrayList<FSItem>(); public Directory(String name) { super(name); public String ls() throws IllegalOperation { if (!permessi.rr) throw new IllegalOperation(); String result = ""; for (FSItem i : items) { result = result + i.name() + "\n"; return result; public void add(fsitem i)throws IllegalOperation { if (!permessi.ww) throw new IllegalOperation(); items.add(i); class File extends FSItem { private String content; public File(String name) { super(name); public void set(string s) throws IllegalOperation { if (!permessi.ww) throw new IllegalOperation(); content=s; public String get() throws IllegalOperation { if (!permessi.rr) throw new IllegalOperation(); return content; abstract class Link extends FSItem { protected FSItem target; public Link(FSItem t, String nome) { super(nome); target=t; permessi=t.permessi; class FileLink extends Link { protected File target; public FileLink(File f, String nome) { super(f,nome); target=f; public void set(string s) throws IllegalOperation {

target.set(s); public String get() throws IllegalOperation { return target.get(); class DirectoryLink extends Link { protected Directory target; public DirectoryLink(Directory f, String nome) { super(f,nome); target=f; public String ls() throws IllegalOperation { return target.ls(); public void add(fsitem i) throws IllegalOperation { target.add(i); Esercizio 3 Considerate linterfaccia la seguente interfaccia che descrive una generica lista di T. public interface List<T> { boolean empty(); List<T> zip(list<t> l); Definite il codice di due classi MTList<T> (la lista sempre vuota) e NEList<T> (una lista sempre non vuota) che implementano linterfaccia List<T> e realizzando i metodi empty() e zip(). In particolare, empty() restituisce true se la lista è vuota, false altrimenti, mentre zip() è definito come segue: se l1:mtlist<t>, oppure l2:mtlist<t>, allora l1.zip(l2) restituisce la lista la vuota; altrimenti, l1.zip(l2) costruisce la lista il cui i primi due elementi sono rispettivamente il primo emento di l1 e il primo elemento di l2, e il resto è ottenuto dallo zip del resto di l1 con il resto di l2. Chiariamo il comportamento del metodo zip() con due esempi: se l1 = [1,5,3] e l2 = [4,2], allora l1.zip(l2) = [1, 4, 5, 2]. se l1 = [] allora l1.zip(l2) = [] per qualunque l2. Soluzione Esercizio 3 class MTList<T> implements List<T> { public boolean empty() { return true; List<T> zip(list<t> l) { return new MTList<T>(); class NEList<T> implements List<T> { protected T head; protected List<T> tail; public NEList(T head, List<T> tail) { this.head=head; this.tail=tail;

public boolean empty() { return false; List<T> zip(list<t> l) { List<T> result; if (l.empty()) { result=new MTList<T>(); else { NEList<T> ll=(nelist<t>)l; result = new NEList<T>(head, new NEList(ll.head, tail.zip(ll.tail))); return result; Esercizio 4 Si scriva una gerarchia di classi che rappresenti una composizione arbitraria di resistenze in un circuito elettrico in termini di resistenze atomiche e composizioni in serie ed in parallelo di resistenze. La gerarchia dovrà offire un metodo polimorfico double calcola() che restituisce il valore della resistenza effettiva del circuito. Si ricordi che la resistenza effettiva R e di due composizioni di resistenze messe in serie tra di loro e aventi resistenze effettive R 1 ed R 2, è R e = R 1 + R 2. Per due composizioni di resistenze messe in paralleo vale 1 R e = 1 R 1 + 1 R 2. Soluzione Esercizio 4 interface Resistenza { double calcola(); class ResistenzaSingola implements Resistenza { private double valore; public ResistenzaSingola( double v ) { valore=v; public double calcola() { return valore; class ResistenzeInSerie implements Resistenza { private Resistenza prima, dopo; public ResistenzeInSerie( Resistenza p, Resistenza d ) { prima=p; dopo=d; public double calcola() { return prima.calcola() + dopo.calcola(); class ResistenzeInParallelo implements Resistenza { private Resistenza destra, sinistra; public ResistenzeInSerie( Resistenza dx, Resistenza sx ) { destra=dx; sinistra=sx; public double calcola() { return 1.0/(1.0/destra.calcola() + 1.0/sinistra.calcola()); Esercizio 5 State scrivendo un programma gestionale e dovete gestire l anagrafe delle persone legali con cui la ditta ha rapporti. Una persona legale è idetificata da una partita iva (una stringa) e nei confronti della ditta possono essere clienti o fornitori. Per i clienti possiamo ottenere lo storico delle vendite (nella forma di un Iterator<Vendite>), mentre dai fornitori possiamo ordinare nuovi prodotti ( void ordina(prodotto p, int quantita) ). La stessa persona legale può essere sia cliente che fornitore e può essere registrato nel sistema con un ruolo, mentre il secondo ruolo può essere aggiunto sucessivamente. Cioè una persona legale può essere registrata nel sistema come cliente e sucessivamente diventare anche fornitore, o essere registrato come fornitore e sucessivamente diventare cliente. Una volta che una persona legale ha assunto un ruolo lo mantiene per sempre. Scrivete il codice Java per implementare le entià ed il loro comportamento (lasciando in bianco l implementazione dei metodi). Motivate le scelte nella strutturazione delle classi ed interfacce utilizzate, indicandone vantaggi e limiti.