Fondamenti di informatica T-1 (A K) Esercitazione 7: metodi, classi, oggetti

Documenti analoghi
I Metodi. Fondamenti di Informatica A-K

Classi ed Oggetti. Fondamenti di Informatica A-K

Fondamenti di informatica T-1 (A K) Esercitazione 8: classi e oggetti

Fondamenti di informatica T-1 (A K) Esercitazione 9: array

Fondamenti di informatica T-1 (A K) Esercitazione 2: Linguaggio Java, basi e controllo del flusso

Fondamenti di informatica T-1 (A K) Esercitazione 4: controllo del flusso

Fondamenti di informatica T-1 (A K) Esercitazione 2 Basi del linguaggio Java

Fondamenti di Informatica

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

14 - Metodi e Costruttori

Fondamenti di Informatica T-1

Fondamenti di informatica T-1 (A K) Esercitazione 6: Eclipse

Le classi in java. Un semplice programma java, formato da una sola classe, assume la seguente struttura:

Stringhe ed Array. Fondamenti di Informatica A-K

Definizione di classi. Walter Didimo

Programmazione I - corso B a.a prof. Viviana Bono

A. Ferrari. informatica. Java basi del linguaggio. Alberto Ferrari Informatica

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

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

Fondamenti di Informatica T-1

ES.1 - Soluzione (Stringhe.java)

Fondamenti di informatica T-1 (A K) Esercitazione 5: controllo del flusso

Modello procedurale versus modello O-O

Fondamenti di Informatica T-1. Variabili, costanti e operazioni Selezione

Corso sul linguaggio Java

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

Java secondo contatto. Nel tunnel una luce

Lezione 2 Primi programmi

Introduzione alla Programmazione in Java attraverso un esempio commentato

Corso sul linguaggio Java

Programmazione a oggetti

Autore: Prof. Agostino Sorbara ITIS "M. M. Milano" Polistena (RC)

Corso di Laurea in Bioinformatica Dipartimento di Informatica - Università di Verona

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

Programmazione Orientata agli Oggetti. Emilio Di Giacomo e Walter Didimo

Oggetti. La programmazione orientata agli oggetti, OOP (Object-Oriented Programming), prende il nome dall elemento su cui si basa, l oggetto.

ESERCIZIO 1 (STRINGHE)

Programmazione M.A. Alberti. Comunicazione digitale AA 2009/ Classi in Java 1. Le classi in Java. Oggetti. Classi. Classi. Visibilità dei dati

Java Gli array. Array

Laboratorio di Programmazione Ottobre. Simone Zaccaria

Fondamenti di informatica T-1 (A K) Esercitazione 3: assegnamento e variabili

Tipi riferimento e stringhe

IL LINGUAGGIO JAVA. Input, Tipi Elementari e Istruzione Condizionale. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica

Fondamenti di Informatica T-1

Java Gli array. Array

Array. Definizione e utilizzo di vettori

IL LINGUAGGIO JAVA Input, Tipi Elementari e Istruzione Condizionale

Informatica Ereditarietà Java. Ereditarietà

Fondamenti di Informatica T-1. Classi & Oggetti

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

Programmazione ad oggetti

Passare argomenti al programma

L oggetto creato. Creazione di Oggetti. Rectangle: il concetto 10. Costruzione. Lo spazio di memoria del linguaggio Java. Rectangle: l oggetto

Fondamenti di Informatica T-1

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

Elementi DI INFORMATICA. Linguaggio C

Java: Definire Classi e Creare Oggetti

18 - Classi parzialmente definite: Classi Astratte e Interfacce

17 - Classi parzialmente definite: Classi Astratte e Interfacce

IL LINGUAGGIO JAVA. Input, Tipi Elementari e Istruzione Condizionale. Primo esempio di un programma Java

INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica

INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA. Fondamenti di Informatica - Programma

COGNOME NOME MATRICOLA DATA

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

Proprietà delle Classi e degli Oggetti in Java

Fondamenti di Informatica T-1

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

Java SE 7. Programmazione ad oggetti (1)

Concetto di Funzione e Procedura METODI in Java

INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA. Struttura di un programma Java

Strutture come parametri di funzioni

7 - Programmazione procedurale: Dichiarazione e chiamata di metodi ausiliari

FONDAMENTI DI INFORMATICA T-A. Java parte 3 Ing. Giorgio Villani

Programmazione in Java (I modulo) Lezione 20: Ereditarietà

Proprietà delle Classi e degli Oggetti in Java

Programmazione in Java e gestione della grafica (I modulo) Lezione 2: Prime nozioni di Java

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

Motorino colore velocità tipo antifurto getvelocità accelera antifurto inserisciantifurto antifurto

Le basi del linguaggio Java

Definizione di metodi

Esercitazione. Docente Ing. Mariateresa Celardo

Impariamo a programmare in. Lezione 7

Modulo 2: Strutture fondamentali della programmazione Java

Introduzione agli oggetti

Introduzione Programmazione Java

Fondamenti di Informatica T-1. Guida al LAB4 Introduzione a JDK e Eclipse

Fondamenti di Informatica T-1. Introduzione al linguaggio Java Input/output, variabili, tipi

Esercizi di riepilogo (Fondamenti di Informatica 1 Walter Didimo)

Do...While() Break Continue Concetto di Funzione e Procedura METODI in Java

Fondamenti di Informatica II 3. Funzioni in C++ (parte 1)

Transcript:

Fondamenti di informatica T-1 (A K) Esercitazione 7: metodi, classi, oggetti AA 2018/2019 Tutor lorenzo.rosa@unibo.it

2 Esercitazione 7 Introduzione al calcolatore e Java Linguaggio Java, basi e controllo del flusso Eclipse ed esercizi di consolidamento Stringhe ed array Metodi, classi, oggetti Ereditarietà e polimorfismo Collezioni Java e interfacce Esercizi d esame

3 I metodi Alcune sequenze di istruzioni vanno ripetute più volte all interno di un programma: pertanto, è utile poter scrivere tali sequenze una volta sola e farvi riferimento ogni volta che serve. I metodi assolvono a questa funzione. Un metodo raggruppa una sequenza di istruzioni che realizzano una funzionalità del programma e assegna loro un nome. Quando si usa un metodo, si dice che si invoca (o si chiama) il metodo stesso.

4 Il metodo main Anche il main è un metodo. In particolare, è un metodo statico, ovvero appartiene alla classe in cui è definito, ma non alle sue istanze. Da un metodo statico, si possono chiamare altri metodi soltanto se anch essi sono statici. Una classe può essere usata per raggruppare metodi statici.

5 I metodi Ogni metodo ha: 2 - un tipo di ritorno 1 - un nome 3 zero o più argomenti public static void main(string[] args) { System.out.println( Hello World! ); 4 una visibilità Un metodo appartiene sempre a una classe. Può appartenervi come metodo statico o come metodo di istanza.

6 Esercizio 1 Creare un programma Java (classe Prova) in cui dal metodo main si chieda all utente di inserire un intero N. Si definisca un metodo stampa() che stampi a video la stringa Hello world! e lo si invochi N volte.

7 Esercizio 1 - Soluzione import java.util.scanner; public class Prova { public static void stampa() { System.out.println("Hello world!"); public static void main(string[] args) { Scanner tastiera = new Scanner(System.in); System.out.print("Inserire un numero intero: "); int num = tastiera.nextint(); //Controllo sia positivo if(num < 0) { System.out.print("Il valore deve essere positivo!"); System.exit(0); for(int i=0; i< num; i++) stampa();

8 Tipo di ritorno - void L intestazione dei metodi che non restituiscono alcun valore, come visto nell esercizio precedente, vanno preceduti dalla parola void. public static void stampa() { System.out.println("Hello world!");

9 Metodi che restituiscono un valore 1. L intestazione di un metodo che restituisce un valore è simile, ma al posto della parola chiave void bisogna indicare il tipo di ritorno. 2. Il corpo della definizione di un metodo che restituisce un valore è simile a quello di un metodo void, ma al suo interno deve contenere almeno un istruzione return.

10 Metodi che restituiscono un valore public static int zero() { int v = 0; return v; public static void main {... int n = zero(); System.out.println(n); // Stampa 0...

11 Metodi con parametri Ad un metodo è possibile anche passare dei parametri, utilizzandolo come una funzione matematica. Nella definizione di un metodo, è necessario specificare quali sono i parametri che gli dovranno essere passati nell intestazione, fra parentesi e dopo il nome del metodo. public static void stampa(int i) { System.out.println( Valore: + i);

12 Metodi con parametri public static void stampa(int i) { System.out.println( Valore: + i); i viene detto parametro formale. Il valore che assumerà è quello passato dal chiamante e viene detto parametro attuale. La visibilità della variabile (scope) è il corpo del metodo.

13 Metodi con parametri Quando viene chiamato un metodo, ogni suo parametro viene inizializzato con il valore dell argomento corrispondente nell invocazione del metodo. public static void main(string[] args) {... int num = 3; for(int i=0; i< num; i++) stampa(i); Utilizzando il metodo della slide precedente, questo programma stampa: Valore: 0 Valore: 1

14 Metodi con parametri Nel caso in cui il metodo accetti più parametri, questi devono essere passati nell ordine in cui il metodo li aspetta. public static void stampa(int i, String s) { System.out.println(i + + s); public static void main {... int n = 0; String g = ciao ; stampa(n, g);... 1. nome 2. tipo di ritorno 3. tipo e l ordine dei parametri formano la firma (signature) del metodo.

15 Esempio public class Esempio { tipo di ritorno public static double pigrecopern(int n) { double var = 3.14159 * n; return var; parametro formale public static void main(string[] args) { double perdue = pigrecopern(2); double pertre = pigrecopern(3); parametro attuale

16 Variabili locali ai metodi Ricordare sempre: Una variabile definita all interno di un metodo o più in generale in un blocco (parentesi graffe) è detta locale di tale metodo o blocco. Le variabili locali possono essere usate esclusivamente all interno del metodo o blocco in cui sono state definite. Se due metodi o blocchi hanno variabili locali con lo stesso nome, si tratta comunque di due variabili distinte.

17 Esercizio 2 Creare un programma Java (classe Aree) per il calcolo dell area di tre forme geometriche: triangolo, rettangolo, cerchio. 1. Il programma dovrà chiedere all utente di inserire: t se vuole calcolare l area di un triangolo; r se vuole calcolare l area di un rettangolo; c se vuole calcolare l area di un cerchio; f per terminare l esecuzione. 2. In base alla scelta fatta, il programma dovrà chiedere all utente i dati di input necessari, calcolare il risultato, stamparlo a video e tornare al punto 1 (se non ha scelto di terminare). Per il calcolo delle aree, definire un metodo per ciascuna forma e invocarlo opportunamente.

18 Esercizio 2 Soluzione (1/4) import java.util.scanner; public class Aree { public static double calcolaareatriangolo (double base, double altezza) { return (base * altezza)/2; public static double calcolaarearettangolo(double base, double altezza) { return base * altezza; public static double calcolaareacerchio(double raggio) { return 3.14 * raggio * raggio;

19 Esercizio 2 Soluzione (2/4) public static void main(string[] args) { Scanner tastiera = new Scanner(System.in); String scelta; do { System.out.println("Inserire: "); System.out.println("t per l'area di un triangolo"); System.out.println("r per l'area di un rettangolo"); System.out.println("c per l'area di un cerchio"); System.out.println("f per uscire"); scelta = tastiera.nextline(); double result;

20 Esercizio 2 Soluzione (3/4) if(scelta.equalsignorecase("t")) { double base, altezza; System.out.print("Inserire base: "); base = tastiera.nextdouble(); System.out.print("Inserire altezza: "); altezza = tastiera.nextdouble(); result = calcolaareatriangolo(base, altezza); System.out.println("Area Triangolo: " + result); else if(scelta.equalsignorecase("r")) { double base, altezza; System.out.print("Inserire base: "); base = tastiera.nextdouble(); System.out.print("Inserire altezza: "); altezza = tastiera.nextdouble(); result = calcolaarearettangolo(base, altezza); System.out.println("Area Rettangolo: " + result);

21 Esercizio 2 Soluzione (4/4) else if(scelta.equalsignorecase( c")) { double raggio; System.out.print("Inserire raggio: "); raggio = tastiera.nextdouble(); result = calcolaareacerchio(raggio); System.out.println("Area Cerchio: " + result); while(!scelta.equalsignorecase("f"));

28 Classi e oggetti Una classe rappresenta l astrazione di un entità del mondo reale. Le istanze di una classe sono dette oggetti. Una classe è la definizione di un tipo di oggetto. È come uno stampo per la costruzione di oggetti di un certo tipo. A prescindere dall oggetto che si vuole modellare una classe sarà sempre costituita da: dati (chiamati attributi) metodi che operano su di essi metodi statici: appartengono alla classe, non alle sue istanze. metodi di istanza: appartengono a ciascun oggetto.

29 Esempio di classe Classe Automobile: modella il concetto di automobile attraverso una serie di attributi e operazioni distintivi. Attributi: Targa Livello carburante Velocità In Java 1 classe = 1 file Metodi: Accelera Accendi Spegni.

30 Implementazione in Java public class Automobile { private double carburante; private double velocita; private String targa; definita nel file Automobile.java public void settarga(string nuova_targa){ targa = nuova_targa; public void cambiavelocita(double delta){ velocita += delta; public void cambiacarburante(double delta){ carburante += delta;

31 Implementazione in Java public class Automobile { private double carburante; private double velocita; private String targa; Attributi public void settarga(string nuova_targa){ targa = nuova_targa; public void cambiavelocita(double delta){ velocita += delta; public void cambiacarburante(double delta){ carburante += delta;

32 Implementazione in Java public class Automobile { private double carburante; private double velocita; private String targa; Metodi di istanza public void settarga(string nuova_targa){ targa = nuova_targa; public void cambiavelocita(double delta){ velocita += delta; public void cambiacarburante(double delta){ carburante += delta;

33 Implementazione in Java public class Automobile { private double carburante; private double velocita; private String targa; Quale valore assumono all inizio? public void settarga(string nuova_targa){ targa = nuova_targa; public void cambiavelocita(double delta){ velocita += delta; public void cambiacarburante(double delta){ carburante += delta;

34 I costruttori, un caso speciale di metodo Si chiama costruttore uno speciale metodo che non ha tipo di ritorno ed il cui nome coincide con quello della classe. Il costruttore permette di creare un oggetto, inizializzando i campi di quella istanza della classe. Un costruttore viene sempre automaticamente invocato quando una classe viene istanziata Se non si definisce un costruttore esplicitamente, ne viene creato uno di default. Es: public Automobile(){ Un costruttore può avere dei parametri e utilizzarli per inizializzare i campi dell oggetto.

35 Costruttore per Automobile Un possibile costruttore per Automobile potrebbe essere: public Automobile(String targa){ this.targa = targa; carburante = 0; velocita = 0; La keyword this si utilizza quando il parametro formale del costruttore ha lo stesso nome del campo privato della classe. public Automobile(String targa){ this.targa = targa; parametro formale del costruttore campo privato: this ci fa capire che è il campo targa di Automobile

36 Implementazione in Java public class Automobile { private double carburante; private double velocita; private String targa; Costruttore public Automobile(String targa){ this.targa = targa; carburante = 0; velocita = 0; public void settarga(string nuova_targa){ targa = nuova_targa;... altri metodi...

37 Istanziare un oggetto Per poter usare un oggetto Automobile, è necessario creare un istanza della classe Automobile, invocando il costruttore attraverso la keyword new. public class Esercizio { public static void main(string[] args){ Automobile auto = new Automobile( AF345BD ); //poi usare l oggetto auto.cambiavelocita(30.3);... Il codice Java deve sempre stare in un metodo, e un metodo in una classe. Quindi abbiamo bisogno di una classe anche per il main.

38 Istanziare un oggetto public class Esercizio { public static void main(string[] args){ Automobile a1 = new Automobile( AF345BD ); Automobile a2 = new Automobile( AF345BC );... a1 e a2 sono due istanze della stessa classe: condividono la stessa struttura (hanno entrambe una velocita, una targa, ecc.) ma sono oggetti distinti, perché i valori dei campi interni (stato dell oggetto) possono essere diversi.

39 Istanziare un oggetto A differenza di quanto abbiamo sempre fatto durante le esercitazioni precedenti, ora (e all esame) è quindi necessario creare: una classe che contiene solo il main, in un file.java; zero o più classi, ciascuna in un diverso file.java. In questo caso: un file EsercizioAutomobile.java contiene il main; un file Automobile.java contiene la classe Automobile.

40 Utilizzare i metodi Per accedere a metodi ed attributi pubblici di un oggetto basta utilizzare la notazione puntata: public class Esercizio { public static void main(string[] args){ Automobile auto = new Automobile( AF345BD ); //poi usare l oggetto auto.cambiavelocita(30.3);... Possiamo accedere a questo metodo dall esterno della classe Automobile perché il metodo è public. Non possiamo invece accedere agli attributi, che abbiamo dichiarato come privati.

41 Esercizio 4 Creare la classe Variabile dotata di un campo privato intero chiamato valore ; un costruttore senza argomenti che inizializzi a zero valore ; Un metodo getvalore() che restituisca il valore il valore ; Un metodo setvalore(int) che imposti il valore di valore ; Un metodo resetvalore() che azzeri il valore di valore ; Creare la classe Esercizio4 che Definisca il metodo main Crei un'istanza della classe Variabile Chiami il metodo setvalore(8) sull'istanza Stampi a video il valore attuale di "valore" utilizzando il metodo getvalore(); Chiami il metodo resetvalore() sull'istanza; Stampi a video il valore attuale di "valore" utilizzando il metodo getvalore();

42 Esercizio 4 soluzione (1/2) La classe Variabile: public class Variabile { private int valore; public Variabile() { this. valore = 0; public int getvalore() { return valore; FILE: Variabile.java getter/setter per l attributo valore public void setvalore(int valore) { this.valore = value; public void resetvalore() { valore = 0;

43 Esercizio 4 soluzione (2/2) La classe Esercizio4: public class Esercizio4 { public static void main(string args[]) { //Creo l'istanza Variabile var = new Variabile(); FILE: Esercizio4.java //Imposto il valore 8 var.setvalore(8); System.out.println("Valore variabile: " + var.getvalore()); //Reset del valore var.resetvalore(); System.out.println("Valore variabile: " + var.getvalore());

44 Visibilità I metodi che abbiamo inserito nella classe Variabile sono davvero necessari? Sì, perché l'attributo "valore" contenuto nella classe Variabile è dichiarato come private, quindi non è visibile esternamente alla classe. I metodi invece, dichiarati come pubblici, lo sono. Provate ad accedere al campo "valore" dal main, tramite la notazione puntata. Il compilatore ve lo consente? Perché? Provate a modificare la visibilità della variabile "valore" da private in public. Ora i metodi inseriti sono ancora necessari?

45 Esercizio 5 Vogliamo creare un oggetto che mantenga lo stato di un contatore. Modelliamo il concetto di contatore con una classe, che chiameremo Contatore: Un campo intero che rappresenta il valore del contatore; Un costruttore che prende come argomento un valore intero, a cui inizializzare il valore interno; Un metodo incrementa() che incrementa di una unità il valore; Un metodo reset() che azzera il contatore; Un metodo getvalore() che ritorna il valore del contatore;

46 Soluzione «Contatore» public class Contatore { private int valore; public Contatore(int valiniziale) { valore = valiniziale; public void incrementa() { valore = valore+ 1; public void reset() { valore = 0; public int getvalore() { return valore;

47 Esercizio 6/1 (tipo esame) L agenzia di viaggi Sedano ha deciso di informatizzare la gestione degli itinerari proposti ai turisti che si recano a visitare lo stato caraibico di St. Marquez. Innanzitutto, vanno memorizzati i dati relativi ad ogni località turistica, ovvero il nome della località e la durata (in giorni) ed il costo (in euro) di una visita. Si scriva una classe Localita per l agenzia Sedano che: 1. Possieda un opportuno costruttore con parametri. 2. Presenti opportuni metodi che permettano di accedere alle variabili di istanza dell oggetto. 3. Presenti il metodo tostring che fornisca la descrizione della località.

48 Esercizio 6/2 (tipo esame) Si scriva un applicazione (classe Applicazione) per l agenzia Sedano che: 1. crei un oggetto Localita, chiedendo all utente da tastiera le informazioni necessarie. 2. Stampi a video la descrizione della località appena creata.