Linguaggi di Programmazione II Matricole con le due ultime cifre dispari

Documenti analoghi
public double getlato() restituisce la lunghezza del lato del quadrato che esegue il metodo.

Parola chiave extends

DataSet. ... public BankAccount getmaximum() { return x; }... private BankAccount maximum;... } DataSet

Esempio: il conto bancario

SavingsAccount. BankAccount

Esercizio 6 Realizzare una classe astratta per le Figure piane e due sottoclassi, la sottoclasse Quadrato e la sottoclasse Rettangolo.

E' un meccanismo per estendere classi esistenti, aggiungendo altri metodi e campi.

Programmazione ad oggetti

Esercitazione n 3. Capacità di analisi e di estensione di progetti esistenti Linguaggio Java:

Programmazione orientata agli oggetti Classi astratte e interfacce

public BankAccount() { balance = 0; } public BankAccount(double initialbalance) { balance = initialbalance; }

Programmazione. Cognome... Nome... Matricola... Prova scritta del 11 luglio 2014

La classe java.lang.object

Programmazione. Cognome... Nome... Matricola... Prova scritta del 22 settembre Negli esercizi proposti si utilizzano le seguenti classi:

Classi astratte. Nella gerarchia delle classi, potrebbe essere utile prevedere un supertipo generale per le classi che si usano. Ad esempio: Figura

Riassunto: cos è la OOP? classi astratte, interfacce, classi interne. Scaletta. Figura con area()? Figura senza area()? Stefano Mizzaro 1.

A. Lorenzi, A. Rizzi Java. Programmazione ad oggetti e applicazioni Android Istituto Italiano Edizioni Atlas

Oggetti. Oggetti e classi. Utilizzo di classi. Classe

Gestione di eventi ed interfacce utente grafiche

interfacce ed eventi intercettare il mouse ed altri eventi

3. un metodo che restituisce l elenco delle matricole di tutti gli studenti del corso;

Esercitazione n 3. Obiettivi

Capitolo 6. Uso della gerarchia. c 2005 Pearson Education Italia Capitolo 6-1 / 125

Esempi al calcolatore su: 1) Costruttori ed ereditarietà 2) Subtyping e polimorfismo

Laboratorio di Programmazione 1 [Java]

18 - Classi parzialmente definite: Classi Astratte e Interfacce

Esempi in Java di program.ne O-O

Programmazione a oggetti e JAVA. Prof. B.Buttarazzi A.A. 2011/2012

Programmazione ad Oggetti

sayhello public private protected return public class Greeter { public String sayhello() { String message = Hello, World! ; return message; } }

CLASSI ASTRATTE - ESERCIZIO

Capitolo 3. Realizzare classi. Cay S. Horstmann Concetti di informatica e fondamenti di Java quarta edizione

Polimorfismo dynamic dispatch

14 - Metodi e Costruttori

Livelli di astrazione

Ereditarietà (ultima)

Java: Definire Classi e Creare Oggetti

Laboratorio di Programmazione 1 [Java]

Esercitazione. Docente Ing. Mariateresa Celardo

Programmazione orientata agli oggetti La classe Object, metodi e classi final, this. Object

Subtype Polymorphism. Conversioni di tipo. Conversioni di tipo. Subtyping. Conversioni di tipo. Interfacce e subtype polimorfismo

Programmazione orientata agli oggetti La classe Object, metodi e classi final, this. Object

Riassunto. La programmazione OO. Oggi. Esempio

Algoritmi di Ricerca. Esempi di programmi Java

Interfacce, Polimorfismo, Ereditarietà

Il Linguaggio Java. Le interfacce

Corso sul linguaggio Java

Esempio: Interfacce. Gioco Interfacce

Riflessione: Ordinamento di oggetti

Riflessione: Ordinamento di oggetti

Capitolo 2. Utilizzare oggetti

Esempio: Interfacce. Gioco Interfacce

Esercizi Java. class somma2 { static int somma(int a,int b) {return a+b; }

Esempio 2: Subtyping

Classi, Ereditarietà e Polimorfismo. Lezione 7

Introduzione al linguaggio C Puntatori

Il linguaggio Java: aggiunte in Java 1.5

Programmazione II Compitino (Vers. B)

Definizione di classi. Walter Didimo

Laboratorio di Programmazione Lezione 4. Cristian Del Fabbro

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

Oggetti e classi. Cos è un oggetto

Corso sul linguaggio Java

Esercitazione n 2. Obiettivi

Programmazione II Compitino (Vers. B)

Programmazione a oggetti

COMPITO DI LABORATORIO DI PROGRAMMAZIONE Dicembre 2001

Classi e array. Viene ora affrontato un problema di definizione di una classe in cui una variabile d istanza è di tipo array

IL LINGUAGGIO JAVA Input, Tipi Elementari e Istruzione Condizionale

16 - Ereditarietà, tipi e gerarchie

16 - Ereditarietà, tipi e gerarchie

Ereditarietà. Ereditarietà. Ereditarietà. Ereditarietà

Introduzione alla Programmazione in Java attraverso un esempio commentato

OCA JAVA 7 SE PROGRAMMER I DOCENTE: DOTT. FAUSTO DELL ANNO

9 - Array. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

Programmazione in Java

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

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

Programmazione orientata agli oggetti. Ivan Lanese

In Java esistono tre tipi di programmi

Gestione dell interattività: gli eventi

R. Focardi 2002 Laboratorio di Ingegneria del Software Slide 1. Applicazioni = programmi stand-alone

Fondamenti di Informatica T-1

Oggetti Composti (1) Oggetti Composti (2)

Esercizi della lezione 5 di Java

OCA JAVA 8 SE PROGRAMMER I DOCENTE: DOTT. FAUSTO DELL ANNO

Laboratorio di Programmazione Ottobre. Simone Zaccaria

Laboratorio di Programmazione Lezione 2. Cristian Del Fabbro

Esempi di programmazione

Le basi del linguaggio Java

Programmazione 1 A.A. 2015/2016

Uso di classi e oggetti. Prof. Francesco Acarino IIS Altiero Spinelli Via Leopardi 132 Sesto San Giovanni

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:

Programmazione con Java

Realizzare classi. Cosa abbiamo fatto finora. Realizzare classi. Realizzare classi. Realizzare classi. Realizzare classi

ESERCIZI JAVA. Esercizi sulle Interfacce. Esercizio 1:

Modificatori di visibilità

Semplici applicazioni grafiche in Java

Ereditarietà e Polimorfismo

Programmazione I. 11 gennaio Considerate la seguente gerarchia di classi (rappresentata mediante un diagramma UML): +f(double x):

Transcript:

Cognome e Nome: Numero di Matricola: Spazio riservato alla correzione 1 2 3 4 5 6 totale /5 /10 /10 /30 /25 /20 /100 Non usare altri fogli, usare solo lo spazio sottostante. Fogli differenti da questo non saranno presi in considerazione per la correzione. Non è consentito usare libri o appunti! 1. [5 punti] Considerate il frammento di codice seguente: public class T public void m(final int x, int y) int a; final int b; class C implements I public void f( ) int c; private int t; Indicate a quali variabili può accedere il metodo f e giustificate la risposta. Soluzione: la classe interna C può accedere alle variabili istanza definite nell ambito di visibilità della classe T senza alcuna restrizione, ma può accedere a variabili locali solo se sono state dichiarate final. Quindi il metodo f può accedere alle variabili x, b e t. Pag. 1

2. [10 punti] Sia B una classe e sia A una classe che implementa l interfaccia I. Indicare quali dei seguenti assegnamenti sono leciti e giustificare la risposta. A a = new A(); B b = new B(); I i1 = a; //primo assegnamento I i2 = b; //secondo assegnamento a = (I)b; //terzo assegnamento a = i1; //quarto assegnamento a = (A)i1; //quinto assegnamento Soluzione: Gli assegnamenti corretti sono il primo e il quinto. Infatti la classe A implementa l interfaccia I, quindi la conversione dal tipo A al tipo dell interfaccia nel primo assegnamento è lecita. Nell assegnamento 5, il tipo interfaccia viene convertito al tipo originario mediante un cast. L assegnamento 2 è scorretto perché la classe B non implementa l interfaccia I. L assegnamento 3 è scorretto perché non è possibile usare il cast per convertire dal tipo B al tipo dell interfaccia. L assegnamento 4 è scorretto: per convertire dal tipo interfaccia al tipo originario A è necessario un cast, come avviene nell assegnamento 5. Pag. 2

3. [10 punti] Descrivere a cosa serve la parola chiave super e mostrarne l utilizzo con un breve esempio di codice. Soluzione: La parola chiave super viene utilizzata per: invocare il costruttore della superclasse, e.g.,. super(initialbalance); invocare un metodo della superclasse, e.g. super.deposit(amount); /** Un conto corrente che addebita commissioni per ogni transazione. */ public class CheckingAccount extends BankAccount /** Costruisce un conto corrente con un saldo assegnato. @param initialbalance il saldo iniziale */ public CheckingAccount(double initialbalance) // chiama il costruttore della superclasse super(initialbalance); // inizializza il conteggio delle transazioni transactioncount = 0; //metodo sovrascritto public void deposit(double amount) transactioncount++; //chiama il metodo deposit della superclasse super.deposit(amount); //metodo sovrascritto public void withdraw(double amount) transactioncount++; // chiama il metodo withdraw della superclasse super.withdraw(amount); //metodo nuovo public void deductfees() if (transactioncount > FREE_TRANSACTIONS) double fees = TRANSACTION_FEE * (transactioncount FREE_TRANSACTIONS); //chiama il metodo withdraw della superclasse super.withdraw(fees); transactioncount = 0; private int transactioncount; private static final int FREE_TRANSACTIONS = 3; private static final double TRANSACTION_FEE = 2.0; Pag. 3

4. [30 punti] Scrivere un applet che consenta all utente di specificare un cerchio con due pressioni del pulsante del mouse, la prima per indicare la posizione del centro e la seconda per indicare un punto sulla circonferenza. Quando l utente preme per la prima volta, disegnate un cerchietto per indicare il centro, quando preme per la seconda volta, disegnate il cerchio. Suggerimento: nel gestore degli eventi del mouse dovete tenere traccia del fatto che sia già stato ricevuto il punto che rappresenta il centro in un evento precedente. I punti devono essere istanze della classe Point2D.Double import java.awt.graphics2d; import java.awt.geom.ellipse2d; import java.awt.geom.point2d; public class Cerchio /** Costruisce un oggetto Cerchio @param duepunti l array di punti specificati dall utente */ public Cerchio(Point2D.Double[] duepunti) punti = duepunti; /** Disegna il cerchio, dati due punti Il primo punto è il centro, il secondo è un qualsiasi punto sulla circonferenza. @param g2 il contesto grafico */ public void disegna(graphics2d g2) // Calcola il centro del cerchio double x = punti[0].getx(); double y = punti[0].gety(); Point2D.Double centro = new Point2D.Double(x, y); // Calcola il raggio del cerchio double raggio = Math.sqrt(Math.pow(centro.getX() - punti[1].getx(), 2) + Math.pow(centro.getY() - punti[1].gety(), 2)); // Costruisce il cerchio e lo disegna Ellipse2D.Double cerchio = new Ellipse2D.Double(centro.getX() - raggio, centro.gety() - raggio, 2 * raggio, 2 * raggio); g2.draw(cerchio); private Point2D.Double[] punti; Pag. 4

import java.applet.applet; import java.awt.graphics; import java.awt.graphics2d; import java.awt.event.mouseadapter; import java.awt.event.mouseevent; import java.awt.geom.ellipse2d; import java.awt.geom.point2d; public class CerchioApplet extends Applet public CerchioApplet() clicks = 0; punti = new Point2D.Double[MAX_CLICKS]; // classe interna per l ascoltatore class MousePressListener extends MouseAdapter public void mousepressed(mouseevent event) if (clicks >= MAX_CLICKS) return; int mousex = event.getx(); int mousey = event.gety(); punti[clicks] = new Point2D.Double(mouseX, mousey); clicks++; repaint(); // aggiunge l ascoltatore di eventi alla finestra dell applet MousePressListener listener = new MousePressListener(); addmouselistener(listener); public void paint(graphics g) Graphics2D g2 = (Graphics2D)g; if (clicks < MAX_CLICKS) for (int i = 0; i < clicks; i++) double x = punti[i].getx(); double y = punti[i].gety(); Ellipse2D.Double cerchietto = new Ellipse2D.Double(x - RADIUS, y - RADIUS, 2 * RADIUS, 2 * RADIUS); g2.draw(cerchietto); else Cerchio c = new Cerchio(punti); c.disegna(g2); private int clicks; private Point2D.Double[] punti; private final int MAX_CLICKS = 2; final double RADIUS = 2; Pag. 5

5. [25 punti] Definire una superclasse astratta FigureGeometriche e tre sottoclassi Cerchio, Rettangolo e TriangoloIsoscele. Per ciascuna classe, definire le variabili istanza per le dimensioni che caratterizzano il tipo di figura, il costruttore per la creazione di un istanza di ciascuna figura date le dimensioni, e due metodi getarea() e getperimetro(), che restituiscono rispettivamente l area e il perimetro della figura. public abstract class FigureGeometriche public abstract double getarea(); public abstract double getperimetro(); public class TriangoloIsoscele extends FigureGeometriche public TriangoloIsoscele(double b, double h) base = b; altezza = h; public double getarea() return base * altezza /2 ; public double getperimetro() double mezzabase = base/2; double lato = Math.sqrt(mezzabase * mezzabase + altezza * altezza); return 2*lato + base; private double base; private double altezza; public class Cerchio extends FigureGeometriche public Cerchio(double r) raggio = r; public double getarea() return raggio * raggio * Math.PI; public double getperimetro() return 2 * raggio * Math.PI; private double raggio; Pag. 6

public class Rettangolo extends FigureGeometriche public Rettangolo(double b, double h) base = b; altezza = h; public double getarea() return base * altezza; public double getperimetro() return 2 * base + 2 * altezza; private double base; private double altezza; Pag. 7

6. [20 punti] Scrivere un programma di Test per le classi create nell esercizio precedente. Creare un array di figure geometriche, contenente cinque oggetti per ognuna delle classi create, assegnando a ciascuna dimensione un valore casuale. Stampare la somma delle aree e dei perimetri di tutte le figure presenti nell array..public class Test public static void main(string [] args) FigureGeometriche [] fg = new FigureGeometriche[15]; for (int i = 0; i < 15; i++) if( i<5) fg[i] = new Cerchio(Math.random()*10); else if (i < 10) fg[i] = new TriangoloIsoscele(Math.random()*10,Math.random()*10); else fg[i] = new Rettangolo(Math.random()*10, Math.random()*10); double areatotale = 0; double perimetrototale = 0; for (int i = 0; i < 15; i++) areatotale += fg[i].getarea(); perimetrototale += fg[i].getperimetro(); System.out.println( Area totale: + areatotale); System.out.println( Perimetro totale: + perimetrototale); Pag. 8