Fondamenti di Informatica

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

Classi ed Oggetti. Fondamenti di Informatica A-K

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

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

Fondamenti di Programmazione Prof.ssa Elisa Tiezzi. Programmazione orientata a oggetti

Java: Definire Classi e Creare Oggetti

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

Fondamenti di Informatica T-1

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

Modello procedurale versus modello O-O

Concetti Base Encapsulation ed Ereditarietà Programmare con l Ereditarietà. Java: Ereditarietà. Damiano Macedonio

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

I Metodi. Fondamenti di Informatica A-K

I costruttori. Il costruttore standard. Esempio di valori di default. Alterare il costruttore standard

Programmazione ad oggetti

Fondamenti di Informatica

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

Fondamenti di Informatica

Concetto di Funzione e Procedura METODI in Java

Programmazione Orientata agli Oggetti. Emilio Di Giacomo e Walter Didimo

Catia Trubiani. Laboratorio di Ingegneria del Software a.a

Definizione di classi. Walter Didimo

Corso di Informatica

Corso di Algoritmi e Strutture dati Programmazione Object- Oriented in Java (Parte I)

Fondamenti di Informatica T-1. Classi & Oggetti

Programmazione Orientata agli Oggetti in Linguaggio Java

Introduzione alla Programmazione in Java attraverso un esempio commentato

Introduzione Programmazione Java

Programmazione a Oggetti Lezione 7. Il linguaggio Java: aspetti generali

FUNZIONI FUNZIONI COME COMPONENTI SW

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

Fondamenti di Informatica

Dichiarazione di una classe. Dichiarazione ereditarietà

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

Alcune info sulle prossime lezioni

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

Esercizi di riepilogo (Fondamenti di Informatica 1 Walter Didimo)

Metodi. Un metodo è una porzione di codice a cui si associa un nome. Un istruzione eseguita da un metodo può essere:

I L IN I GU G AGG G I G O

JAVA IL LINGUAGGIO. Ogni valore nel linguaggio ha un tipo Ogni variabile deve essere dichiarata ed associata ad un tipo:

FUNZIONI FUNZIONI COME COMPONENTI SW

Fondamenti di Informatica T-1. Classi e oggetti

14 - Metodi e Costruttori

Le Funzioni in C. Fondamenti di Informatica Anno Accademico 2010/2011. Corso di Laurea in Ingegneria Civile Politecnico di Bari Sede di Foggia

Corso sul linguaggio Java

NON ABBIAMO ANCORA CORRETTO LE PROVETTE!!!

Corso sul linguaggio Java

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

Il paradigma OO e le Classi

Le basi del linguaggio Java

IL CONCETTO DI CLASSE

Programmazione in Java (I modulo) Lezione 21: Classi derivate e l'operatore instanceof Riscrivere il metodo tostring() Riscrivere il metodo equals()

Programmazione Java Avanzata Programmazione Object- Oriented in Java

Programmazione Orientata agli Oggetti in Linguaggio Java

METODI in Java. Prof.Angela Bonifati. Metodi e Sottoprogrammi

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

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

E7 Esercizi sul Capitolo 7 Realizzazione di Classi

19 - Eccezioni. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

OOP in C++ ha membro (dati membro) e funzioni membro In Java i dati membro sono chiamati attributi e le funzioni membro metodi

18 - Vettori. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

Java Gli array. Array

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

Oggetti. Oggetti e classi. Utilizzo di classi. Classe

Gli oggetti. Ogni oggetto ha un interfaccia e ogni oggetto ha un tipo. Incapsulamento. Oggetti. Contatore. Invio di Messaggi

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

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

Strutture come parametri di funzioni

Proprietà delle Classi e degli Oggetti in Java

Capitolo 5. Array e collezioni. c 2005 Pearson Education Italia Capitolo 5-1 / 61

FUNZIONI COME COMPONENTI SW FUNZIONI COME COMPONENTI SW FUNZIONI MODELLO CLIENTE/SERVITORE

Programmazione orientata agli oggetti Ereditarietà

FUNZIONI. Esempi (pseudo-c): dare un nome a una espressione rendere tale espressione parametrica. float f(){ * sin(0.75); } float f1(int x) {

Progettazione del Software Anno Accademico 2007/08

7 - Programmazione procedurale: Dichiarazione e chiamata di metodi ausiliari

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

FUNZIONI COME COMPONENTI SW FUNZIONI COME COMPONENTI SW FUNZIONI MODELLO CLIENTE/SERVITORE

Proprietà delle Classi e degli Oggetti in Java

Progettazione Object-Oriented

Ereditarietà: concetti di base

Esercitazione n 2. Obiettivi

Programmazione Java Struttura di una classe, Costruttore, Riferimento this

Paradigmi della PO. Incapsulamento. Ereditarietà. Polimorfismo. Software per TLC - AA 2008/2009 1

Lezione 5 Namespace e JavaDoc

Programmazione orientata agli oggetti Ereditarietà

Funzioni, Stack e Visibilità delle Variabili in C

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

Programmazione orientata agli oggetti Ereditarietà

STRINGHE IN JAVA In Java, le stringhe non sono pezzi di memo-ria con dentro dei caratteri, come in C: sono oggetti appartenenti alla classe

Ancora sulle Classi in C++ e Java. this

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

Programmazione orientata agli oggetti. Ivan Lanese

E18 Esercizi su ereditarietà e polimorfismo

Riuso di classi. Ereditarietà. Ereditarietà. Spesso si ha bisogno di classi simili

La programmazione ad oggetti (OOP)

Transcript:

Fondamenti di Informatica (L-Z) Corso di Laurea in Ingegneria Gestionale Object Oriented Programming: Fondamenti Prof. Stefano Mariani Dott. Alket Cecaj

Indice Introduzione all OOP Classi vs. oggetti Campi e metodi Encapsulation 2

INTRODUZIONE ALL OOP 3

Ricordate? Per ora una classe è l astrazione di un concetto, un tipo di dato che rappresenta uno stato, descritto da una serie di attributi, e un comportamento, descritto da una serie di metodi - e.g. la classe docente un oggetto è una specifica istanza di una classe, con un preciso stato e un preciso comportamento - e.g. lo specifico docente Stefano Mariani [e, parlando dei tipi composti] in generale, qualunque classe Java - ogni classe Java definisce infatti un tipo di dato - gli oggetti di una stessa classe sono dunque tutti dello stesso tipo 4

Flashback: Raffiniamo la definizione Riassumendo classe = modello per definire oggetti - stato = insieme di attributi - comportamento = insieme di metodi oggetto = particolare istanza di una certa classe 5

Object-Oriented Programming 1. Everything is an object un oggetto è un entità che fornisce operazioni per essere manipolata 2. Un programma è un set di oggetti che si comunicano cosa fare invocando metodi (le operazioni) 3. Un oggetto può essere fatto di altri oggetti 4. Ogni oggetto è istanza di una classe una classe (o, tipo) descrive il comportamento dei suoi oggetti 5. Tutti gli oggetti di una classe hanno gli stessi metodi la classe indica esattamente le operazioni fornite, quindi per usare un oggetto basta sapere qual è la sua classe 6

Object-Oriented Programming Supporta la modellazione software degli oggetti del mondo reale o astratto da riprodurre al giusto livello di astrazione il problema ha a che fare con studenti ed esami? implemento le classi Studente ed Esame occorre calcolare la media voto di uno studente? si ordina all'oggetto studente di calcolarla L organizzazione del codice sotto forma di classi favorisce il riuso gli oggetti possono essere composti in altri oggetti più complessi i metodi evitano la duplicazione del codice 7

Il concetto di interfaccia L insieme dei metodi prende il nome di interfaccia* ogni operazione ha effetto sullo stato e sul comportamento dell oggetto Tipica struttura di una classe interfaccia: la sola visibile ad altri oggetti membri (o campi) della classe: gli oggetti di cui è costituita implementazione metodi: cosa succede all oggetto - come cambia lo stato (i membri dell oggetto) - quali metodi invoca su altri oggetti - quale risultato fornisce (il valore di ritorno del metodo) *In Java è un vero e proprio elemento del linguaggio, che vedremo se avremo tempo 8

CLASSI vs. OGGETTI 9

Struttura di una classe Nome della classe è anche il nome del tipo (di dato) che essa definisce deve essere uguale al nome del file.java* Campi descrivono la struttura e lo stato dell oggetto ogni oggetto/istanza della classe ha una propria copia delle variabili con propri valori Metodi descrivono le operazioni disponibili e il comportamento corrispondente *Non è sempre vero, tecnicamente, ma per noi sarà sempre così. 10

Struttura di una classe class Studente { String nome; String cognome; int età; String matricola; Esame[] carriera; double calcolamedia() { } void registravoto(string materia, int voto) { } } Nome definisce un nuovo tipo, Studente Campi struttura: l entità studente è fatta di un nome, un cognome, etc. stato: lo specifico studente ha una specifica carriera, che cambia nel tempo Metodi (interfaccia) operazioni: l entità studente è in grado di fare cose, fornire servizi comportamento: a fronte dello specifico servizio richiesto, lo stato dello specifico oggetto può cambiare 11

La keyword this Java fornisce una variabile speciale denotata con this che contiene il riferimento all'oggetto corrente può essere usata per accedere ai campi dell oggetto dal corpo dei suoi metodi - notazione puntata: this.campo può essere usata per invocare metodi dell oggetto dal corpo dei suoi stessi metodi - notazione puntata: this.metodo( ) Evita ambiguità tra campi, variabili, e parametri double calcolamedia() { double sum = this.sommavoti(this.carriera); return sum / this.carriera.length; Studente(String nome, String cognome){ } this.nome = nome; this.cognome = cognome; } 12

L operatore new Crea un oggetto invocandone uno dei costruttori, ossia metodi speciali che hanno lo stesso nome della classe non hanno alcun tipo di ritorno possono avere degli argomenti Il costruttore di default (a zero argomenti) è implicitamente definito solo fintantoché non ce ne sono altri Solitamente, nel corpo del costruttore si inizializzano i campi dell oggetto Studente(String nome, String cognome, int età) { this.nome = nome; this.cognome = cognome; this.età = età; this.matricola = this.generamatricola(); this.carriera = new Esame[30]; } 13

CAMPI e METODI 14

Campi Ognuno è una sorta di variabile (nome + tipo) Lo stato di un oggetto in un dato istante è il valore dei suoi campi in quell istante possono essere valori primitivi o altri oggetti Accessibile con la notazione oggetto.campo void registravoto(string materia, int voto) { Esame esame = new Esame(); esame.materia = materia; esame.voto = voto; this.carriera[this.next] = esame; } 15

Metodi Ognuno ha una intestazione (o signature) e un corpo (il codice tra { } ) a sua volta l'intestazione ha - nome - tipo di ritorno - argomenti Definiscono il comportamento dell oggetto Invocabili con la notazione oggetto.metodo(argomenti) il comportamento conseguente è dato dall esecuzione del corpo che può leggere e scrivere il valore dei campi double registraecalcolamedia(string m, int v) { this.registravoto(m, v); return this.calcolamedia(); } 16

La keyword static Campi e metodi possono essere dichiarati static i campi System.out e System.in il main() dal quale parte un programma Java il metodo Arrays.toString() (package java.util) Tali campi e metodi sono considerati proprietà della classe, non del singolo specifico oggetto Classe.metodo(argomenti) Classe.campo this.matricola = Studente.generaMatricola(); static String generamatricola(){ } 17

Le keyword void e null Può essere opportuno che un metodo non abbia alcun valore di ritorno come nel caso del main() la keyword void permette di specificare che nessun tipo di ritorno è atteso da un metodo Per specificare invece il concetto di nessun valore, si usa la keyword null le variabili che per tipo hanno un qualunque oggetto (compresi Array e String) vengono inizializzate a null this.carriera = null; void registravoto(string materia, int voto) { } 18

Il metodo main È un metodo speciale che rappresenta l inizio del programma viene invocato automaticamente dalla JVM i suoi argomenti* sono presi da linea di comando signature: public* static void main(string[] args) Possono essercene tanti in un programma Java ma uno solo per classe *Pazienza, a breve 19

Gli argomenti \ I metodi possono avere degli argomenti (o parametri formali) variabili che forniscono input al metodo visibilità limitata al corpo del metodo L atto dell invocazione passa al metodo gli argomenti (parametri attuali, questa volta) su cui il metodo lavorerà Il passaggio dei parametri avviene sempre per copia, ma copia del valore (valido per tutti i tipi primitivi + String) - il valore in input al metodo è una copia del valore della variabile passata riferimento (valido per tutto il resto, ossia gli oggetti) - il valore in input al metodo è una copia del riferimento alla variabile passata 20

Gli argomenti q void registravoto(string materia, int voto) { Esame esame = new Esame(); esame.materia = materia; esame.voto = voto; this.carriera[this.next] = esame; } Passaggio per copia dei valori materia e voto String materia = FONDINF ; int voto = 30; studente.registravoto(materia, voto); nel corpo del metodo, non ci sono le variabili materia e voto, ma delle loro copie totalmente scorrelate Passaggio per copia del riferimento esame nel corpo del metodo, c è la copia del riferimento esame void registravoto(esame esame) { this.carriera[this.next] = esame; } Esame esame = new Esame( ); studente.registravoto(esame); 21

Passaggio per copia q di riferimento public double registraecalcolamedia(esameslide25 esame) { this.registravoto(esame); return this.calcolamedia(); } public void registravoto(esameslide25 esame) { this.carriera[this.next] = esame; this.next++; } esame2 esame1 Fisica Tecnica 18 Varie ed eve 29 EsameSlide25 esame2 = new EsameSlide25(); esame2.setmateria("fisica Tecnica"); esame2.setvoto(18); s1.registraecalcolamedia(esame2); esame2 = esame1; EsameSlide25 esame3 = new EsameSlide25(); esame3.setmateria("basta ti prego"); esame3.setvoto(20); EsameSlide25 esame4 = esame3; s1.registraecalcolamedia(esame3); esame4.setmateria("l'ultimo giuro"); esame4.setvoto(21); s1.carriera[next] esame3 esame4 Basta L ultimo prego giuro 20 21 22

La keyword return I metodi possono ritornare un valore all istruzione chiamante (che li ha invocati) il tipo di questo valore è stabilito dalla signature del metodo La keyword return indica la terminazione del metodo l eventuale valore ritornato In caso il metodo dichiari void come tipo di ritorno, non serve il return il metodo termina alla chiusura della parentesi graffa corrispondente double calcolamedia() { return sum / this.carriera.length; } double media = studente.calcolamedia(); 23

ENCAPSULATION 24

Encapsulation e information hiding L information hiding è il principio teorico su cui si basa la tecnica dell incapsulamento Information hiding i dettagli implementativi di una classe sono nascosti all utente (= chi utilizza quella classe, anche un altro oggetto dunque) dunque parte di un programma può nascondere informazioni incapsulandole in un costrutto dotato di interfaccia 25

Visibilità: public vs. private Keyword da anteporre a classe metodo (anche costruttori) campo public : visibilità a tutte le classi (e dunque oggetti) private : visibilità solo alla classe corrente consente di gestire a piacimento il concetto di information hiding - e dunque l incapsulamento impedisce l uso della notazione oggetto.campo! - opportuni metodi public (chiamati comunemente getter e setter ) stabiliscono quali campi sono accessibili e/o modificabili 26

Fondamenti di Informatica (L-Z) Corso di Laurea in Ingegneria Gestionale Object Oriented Programming: Fondamenti Prof. Stefano Mariani Dott. Alket Cecaj