Informatica. Prof. A. Longheu. Introduzione ai Linguaggi Object-Oriented

Похожие документы
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:

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

Modulo 4: Ereditarietà, interfacce e clonazione

Programmazione a Oggetti Modulo B

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

Informatica 3. LEZIONE 7: Fondamenti di programmazione orientata agli oggetti (1)

Object Oriented Programming

Concetto di Funzione e Procedura METODI in Java

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

Architettura MVC-2: i JavaBeans

Teoria delle code. Sistemi stazionari: M/M/1 M/M/1/K M/M/S

Progettazione : Design Pattern Creazionali

Corso di Informatica

Funzioni in C. Violetta Lonati

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

Realizzazione di una classe con un associazione

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

Introduzione a Classi e Oggetti

Creare una nuova spedizione personalizzata.

Corso di Informatica Corso di Laurea in Ingegneria Gestionale a.a Secondo Compitino 17 Dicembre 2005

Java: Compilatore e Interprete

Programmazione a Oggetti Lezione 10. Ereditarieta

Oggetti Lezione 3. aspetti generali e definizione di classi I

Introduzione. Java. Composizione. Esempio -- composizione. G. Prencipe È qualcosa che abbiamo già visto varie volte

3 - Variabili. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

PROCEDURA INVENTARIO DI MAGAZZINO di FINE ESERCIZIO (dalla versione 3.2.0)


Esercizi su. Funzioni

Soluzione dell esercizio del 2 Febbraio 2004

Capitolo 3. L applicazione Java Diagrammi ER. 3.1 La finestra iniziale, il menu e la barra pulsanti

Inizializzazione, Assegnamento e Distruzione di Classi

Organizzazione degli archivi

CONTROLLO IN TENSIONE DI LED

Automazione Industriale (scheduling+mms) scheduling+mms.

Le variabili. Olga Scotti

Java:Struttura di Programma. Fabio Scanu a.s. 2014/2015

Introduzione a Dev-C++

dall argomento argomento della malloc()

Ottava Esercitazione. introduzione ai thread java mutua esclusione

Sommario. Definizione di informatica. Definizione di un calcolatore come esecutore. Gli algoritmi.

Protezione. Protezione. Protezione. Obiettivi della protezione

Guida all uso di Java Diagrammi ER

Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica. Programmazione I - corso B a.a prof.

Università degli Studi di L Aquila. Facoltà di Ingegneria. Corso di Laurea in Ingegneria Elettronica Corso di Sistemi Informativi

Siamo così arrivati all aritmetica modulare, ma anche a individuare alcuni aspetti di come funziona l aritmetica del calcolatore come vedremo.

Introduzione alla programmazione in C

Programmazione A.A Programmazione Orientata agli Oggetti: Lavorare con gli oggetti ( Lezione XXVII)

Visibilità dei Membri di una Classe

Gli attributi di STUDENTE saranno: Matricola (chiave primaria), Cognome, Nome.

Gestione Risorse Umane Web

Struttura di un programma Java

Registratori di Cassa

Eredità in C++ Corso di Linguaggi di Programmazione ad Oggetti 1. a cura di Giancarlo Cherchi

Programmazione I - Laboratorio

Corso di Informatica

E naturale chiedersi alcune cose sulla media campionaria x n

CALCOLO COMBINATORIO

Algebra di Boole: Concetti di base. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica

Per scrivere una procedura che non deve restituire nessun valore e deve solo contenere le informazioni per le modalità delle porte e controlli

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

Simulazione traffico urbano

Database 1 biblioteca universitaria. Testo del quesito

Esercizio 1: trading on-line

LE SUCCESSIONI 1. COS E UNA SUCCESSIONE

Esercitazione n 4. Obiettivi

!"#$%&&'()#*%+%+!"#$"',,'()#*%+ -")%*&'&'+'$.)+-$$%&&) !"#$%&&'(%)'*+%",#-%"#.'%&'#/0)-+#12"+3,)4+56#7+#.')8'9

Complemento al corso di Fondamenti di Informatica I corsi di laurea in ingegneria, settore dell informazione Università la Sapienza Consorzio Nettuno

Supermarket Progetto di Programmazione Febbraio 2010

Sistema operativo: Gestione della memoria

INSERIMENTO DATI BASILARI

Object Oriented Software Design

Lezioni di Matematica 1 - I modulo

4 3 4 = 4 x x x 10 0 aaa

La prima applicazione Java. Creazione di oggetti - 1. La prima applicazione Java: schema di esecuzione. Gianpaolo Cugola - Sistemi Informativi in Rete

Statistica e biometria. D. Bertacchi. Variabili aleatorie. V.a. discrete e continue. La densità di una v.a. discreta. Esempi.

Prova di Laboratorio di Programmazione

Il principio di induzione e i numeri naturali.

Il Modello Relazionale

Strutture. Strutture e Unioni. Definizione di strutture (2) Definizione di strutture (1)

Proteggiamo il PC con il Firewall di Windows Vista

Il database management system Access

Ai fini economici i costi di un impresa sono distinti principalmente in due gruppi: costi fissi e costi variabili. Vale ovviamente la relazione:

Appunti sulla Macchina di Turing. Macchina di Turing

Tale attività non è descritta in questa dispensa

UML Diagrammi delle classi. UML Diagramma classi 1

lo PERSONALIZZARE LA FINESTRA DI WORD 2000

Versione 7.0 Taglie e Colori. Negozio Facile

Il software ideale per la gestione delle prenotazioni GUIDA UTENTE

Esercizio data base "Biblioteca"

Esercizi della lezione 5 di Java

Progettaz. e sviluppo Data Base

LUdeS Informatica 2 EXCEL. Seconda parte AA 2013/2014

APPUNTI DI MATEMATICA ALGEBRA \ INSIEMISTICA \ TEORIA DEGLI INSIEMI (1)

Gli array. Gli array. Gli array. Classi di memorizzazione per array. Inizializzazione esplicita degli array. Array e puntatori

SCUOLANEXT GUIDA APP DIDUP DEL 28/02/2015

Un modello matematico di investimento ottimale

GESTIONE DEI PROCESSI

Транскрипт:

Informatica Prof. A. Longheu Introduzione ai Linguaggi Object-Oriented 1

Generalità programmazione OO La programmazione ad oggetti è un particolare modo di scrivere il programma. Si prevede che: 1) si parta dal problema reale, ad esempio ho bisogno di un software per gestire un agenzia viaggi 2) si individuano gli attori del problema (le entità), che possono essere persone (cliente), cose reali (biglietto), cose astratte (prenotazione) 3) Queste entità sono viste tutte come oggetti del programma, e porteranno alla stesura di N pezzi di codice per N entità Entità 1 Oggetto 1 Problema Entità 2... Entità n Oggetto 2... Oggetto n 2

Oggetti Gli Oggetti sono persone, cose, possono essere semplici o complessi, reali o immaginari Qualsiasi cosa può essere considerata un oggetto. Generalmente si considerano come oggetti tutte quelle entità dotate di una propria identità (un cliente, un biglietto ). Non tutte le entità di un problema è detto che debbano essere modellate come oggetti, dipende dalla natura del problema, che può consentire o richiedere di trascurare o meno certe entità perché non significative per il problema stesso, ad esempio un cliente con le sue prenotazioni può richiedere solo un oggetto (il cliente, che contiene le prenotazioni), oppure un oggetto (il cliente) che ne contiene altri (le prenotazioni), a seconda che la prenotazione si decida o meno di vederla come oggetto a sè. 3

Oggetti: attributi e metodi Nella realta da modellare, alcune entità non sono assimilabili ad oggetti ma sono attributi, valori o caratteristiche di oggetti (velocità, dimensioni, ecc.). A seconda della natura del problema, una stessa entità può dover essere rappresentata talora come oggetto, talora come attributo di un oggetto, ad esempio la prenotazione di un cliente potrebbe essere un semplice attributo del cliente oppure un oggetto a sé stante, se occorre dargli un ruolo più importante. Un entità non può essere contemporaneamente attributo ed oggetto. oggetto automobile Esempio attributi Velocità, colore, prezzo, dimensioni 4

Oggetti: attributi e metodi Oltre gli attributi, un oggetto è caratterizzato dalle azioni che nel mondo reale esso può fare e/o subire. Tali azioni si realizzano mediante funzioni (note anche con il nome di metodi), che spesso effettuano al loro interno operazioni che coinvolgono gli attributi dell oggetto stesso. Esempio oggetto automobile metodi Girare, muoversi, fermarsi, tamponare 5

Classi Una classe rappresenta l insieme di tutti quegli oggetti che condividono le stesse caratteristiche in termini di struttura (non di valore posseduto). Classe BMW serie 7 BMW serie 7 Autovettura blu rossa due autovetture aventi lo stesso attributo ma con diversi colori (valori) Due oggetti della stessa classe possono anche avere valori identici degli attributi; restano sempre e comunque distinti (occuperanno zone diverse della memoria) 6

Classi Una classe viene creata prima dei suoi oggetti. L approccio NON è quello di creare in qualche modo i vari oggetti e successivamente raggrupparli nelle classi, ma piuttosto dal problema reale emerge l esigenza di certi oggetti e per ogni tipo di oggetto (ad esempio, il cliente) si deve creare la classe (che magari si chiamerà proprio cliente ) che sarà usata come stampo per generare tutti gli oggetti dello stesso tipo (nell esempio, per generare tutti i clienti, ognuno con il suo nome, cognome ecc.) La creazione di un oggetto di una data classe viene denominata istanziazione, ad esempio Cliente c = new Cliente(); (corrisponde, nei linguaggi procedurali, a creare una variabile di un certo tipo, ad esempio int x = 3; ). 7

Classi Ogni istanza di una classe è un oggetto distinto ed indipendente dagli altri oggetti della stessa classe (diverse zone di memoria), quindi l esecuzione di un metodo, o l alterazione del valore di un qualche attributo, pur essendo metodi ed attributi specificati entro la classe, sono azioni che hanno effetto solo sulla singola istanza su cui sono invocati, infatti se ad esempio abbiamo 2 clienti: Cliente c1=new Cliente(); Cliente c2=new Cliente(); c1.nome= Ugo ; c1.cognome= Pappalardo ; c1.eta=22; c2.nome= iano ; c2.eta=34; Il nome e definito una volta sola dentro la classe cliente, ma di nomi qui ne abbiamo 2, uno per ogni cliente, e sono acceduti separatamente tramite la notazione puntata c1.nome 8

Classi Qualche consiglio operativo: Quando si deve creare una classe, si devono scrivere prima i suoi attributi seguendo lo schema <TIPO><NOME>, ad esempio se la classe persona ha un attributo nominativo si scriverà: Class persona { String nominativo; } Quindi <TIPO> qui è String, <NOME> è nominativo 9

Classi Dopo avere scritto gli attributi, scrivere i metodi richiesti; a tale scopo, i metodi assomigliano alle funzioni, ossia hanno lo schema <TIPO><NOME>(<PARAMETRI>) { <ISTRUZIONI> }, in particolare: <TIPO> di ritorno (int, float, void se non torna niente) <NOME> al solito, a piacere <PARAMETRI> se il metodo può fare il suo lavoro solo con gli attributi della classe (che per lui sono interni ) non ha bisogno di parametri (quindi avremo () ), altrimenti si deve capire cosa gli serve, come per le funzioni 10

Classi Una classe rappresenta uno stampo per gli oggetti; essa in genere non ha il main, quindi è uno stampo che non può partire come programma a se stante per fare funzionare una classe allora occorre un main(). Il main puo'': stare nella stessa classe che scrivo, come ultimo dei metodi della classe stessa; questa soluzione si adotta quando la classe rappresenta un'' entita'' "attiva" nel mondo reale stare da solo in una classe fatta apposta per lui. Questa soluzione si usa quando le classi sono tutte "passive" cioe'' rappresentano entita' del mondo reale che non prendono l'iniziativa 11

Costruttori Il costruttore è un metodo particolare che serve per inizializzare l oggetto è un metodo ha un nome fisso, uguale al nome della classe non ha tipo di ritorno, neppure void; il suo scopo infatti non è calcolare qualcosa, ma inizializzare un oggetto può non essere unico; spesso vi sono più costruttori (overloading), con diverse liste di parametri e servono a inizializzare l oggetto a partire da situazioni diverse Non è indispensabile, quindi non c e una serie di azioni specifiche che un costruttore deve fare; volendo, potrebbe non fare nulla (quindi {}) o non esserci 12

Costruttori Esempio: public class Elettrodomestico { // CINQUE ATTRIBUTI: public float altezza; public float larghezza; public float profondita; public int tensione; public int potenza; // COSTRUTTORE PER INIZIALIZZARE SOLO I PRIMI TRE public Elettrodomestico () { altezza=0; larghezza=0; profondita=0;} // COSTRUTTORE PER INIZIALIZZARE LA TENSIONE CON UN VALORE ESTERNO public Elettrodomestico (int t) { tensione=t ;} // COSTRUTTORE PER INIZIALIZZARE TENSIONE E POTENZA CON VALORI ESTERNI public Elettrodomestico (int t, int p) { tensione=t; potenza=p; } // COSTRUTTORE PER INIZIALIZZARE TUTTI GLI ATTRIBUTI public Elettrodomestico (float a, float l, float p, int t, int p) { altezza=a; larghezza=l; profondita=p; tensione=t; potenza=p;} // COSTRUTTORE CHE NE CHIAMA UN ALTRO public Elettrodomestico (float a, float l, float p, int t, int p) { this(a,l,p); 13 this (t,p); }

Costruttori In assenza di altri costruttori, il sistema genera automaticamente un costruttore di default, senza parametri, che non fa nulla e non è visibile nel codice ma puo essere usato, esempio: public class Cliente { int x; // NO COSTRUTTORI } public class Prova { public static void main(string args[]) { Cliente c=new Cliente();// USO COSTRUTTORE DEFAULT }} 14

Costruttori Se però è definito anche solo un costruttore, il sistema assume che noi sappiamo il fatto nostro, e non genera più il costruttore di default automatico; in tal caso, serve mettere anche il costruttore di default senza parametri. public class Cliente { int x; // FUNZIONA // CREATO AUTOMATICAMENTE COSTRUTTORE DEFAULT} public class Cliente { int x; public Cliente (int x_esterno) { x=x_esterno; } // POTREBBE DARE ERRORE } public class Cliente { int x; public Cliente (int x_esterno) { x=x_esterno; } public Cliente() {} // HO MESSO COSTRUTTORE DEFAULT // ADESSO FUNZIONA SICURO} 15

Costruttori Di norma, i costruttori sono public in particolare, è sempre pubblico il costruttore di default generato automaticamente da Java Almeno un costruttore pubblico deve sempre esistere, a meno che si voglia impedire espressamente di creare oggetti di tale classe agli utenti non autorizzati caso tipico: una classe che fornisce solo costruttori protetti è pensata per fungere da classe base per altre classi più specifiche non si vuole che ne vengano create istanze. 16

Overloading L overloading è la possibilità di avere più costruttori/metodi con lo stesso nome, ma parametri diversi, per numero e/o per tipo. Il valore di ritorno, invece, può essere differente in ognuno dei metodi o no. Sovraccaricare il costruttore di una classe è una pratica comune per gli sviluppatori, in quanto permette loro di fornire allo sviluppatore finale diverse modalità per creare gli oggetti. Esempio di overloading di uno stesso metodo per sommare numeri: public int somma(int x, int y){ int risultato = x + y; return risultato;} public int somma(int x, int y, int z){ int risultato = x + y + z; return risultato;} public float somma(float x, float y){ float risultato = x + y; return risultato;} 17

System hiding I metodi, gli attributi o anche una stessa classe possono essere pubblici o privati: un metodo privato è inaccessibile dall esterno. Fornisce servizi che il creatore della classe non vuole rendere direttamente accessibili Un metodo pubblico è invece utilizzabile dall esterno. Un attributo privato è una variabile interna, manipolata da metodi privati o pubblici che siano, ma comunque non direttamente modificabile dall esterno. Un attributo pubblico invece può essere modificato dall esterno, senza passare attraverso un metodo. È in genere comunque sconsigliabile agire su tutti gli attributi tramite variabili, se non è strettamente necessario, questo perche un metodo può fare da filtro, ad esempio impedendo di scrivere valori non ammessi nell attributo. 18

System hiding una classe privata è una classe inaccessibile dall esterno, e che sarà quindi utilizzata da una qualche altra classe, privata o meno. Questo discorso ha chiaramente senso nel contesto di un gruppo di classi in cui almeno una sia pubblica, in modo che l utente possa usare il pacchetto (package) di classi Il fatto che tutto ciò che non è specificato come pubblico non è accessibile all esterno garantisce che nessuno possa effettuare usi impropri di attributi, metodi o classi, prevenendo così il verificarsi di eventuali condizioni di errore. Tale caratteristica è nota come system hiding 19

System hiding Considerando il caso degli attributi, in genere si rendono tutti privati tranne quelli che si sceglie di rendere direttamente accessibili dall esterno Class Uno { } public int x; private int y; void metodo() { Class Due { Uno u=new Uno(); u.x=10; x=40; y=40; // TUTTO OK, SIAMO ALL INTERNO } //OK u.y=10; // VA IN ERRORE (NON SI PUO SCRIVERE IN Y) console.writeline (u.y) } // VA IN ERRORE (NON SI PUO LEGGERE) 20

System hiding Rendere privato un attributo lo rende completamente invisibile da fuori, a meno che non lo si renda nuovamente visibile creando dei metodi appositi: Class Uno { public int x; private int y; // METODO PER PERMETTERE LA LETTURA DI Y DALL ESTERNO : public int gety() { return y; } // METODO PER PERMETTERE LA SCRITTURA IN Y DALL ESTERNO : public void sety(int valore_da_scrivere) { y=valore_da_scrivere; } } Class Due { Uno u=new Uno(); u.x=10; //OK u.y=10; console.writeline(u.x); // VANNO SEMPRE IN ERRORE u.sety(10) // QUESTO FUNZIONA!! console.writeline(u.gety()) // ANCHE QUESTO!!! } 21

System hiding Qualche osservazione: I metodi get e set si chiamano cosi solo per convenzione, quindi potrebbero avere qualsiasi altro nome I metodi get e set sono indipendenti, potrebbe essere presente solo set (ammessa solo la scrittura) o solo get (attributo read-only, cioe a sola lettura) Mettere o meno get o set dipende dalle esigenze del programma Get e set sono, ovviamente, metodi pubblici Mettere sia get che set su un attributo privato lo rende nuovamente accessibile, ma questo sembra stupido: non bastava rimettere public? La risposta è si se set/get si limitano a scrivere/leggere nell attributo, ma potrebbero invece fare cose piu utili, ad esempio dei controlli: void sety(y1) { if (y1>0) y=y1; } // SCRIVE SOLO VALORI POSITIVI int gety() { if (y<=3) return y;} // PERMETTE LA LETTURA SOLO SE <3 Quindi get e set sono utili se proteggono il codice 22

Vantaggi Linguaggi OO Consente di implementare gli oggetti come semplice immediata ed intuitiva rappresentazione del mondo reale. Assicura che l implementazione degli oggetti possa essere nascosta al programmatore. Permette di raggiungere un elevato livello di reimpiego del software. Limitazione dell accesso ai dati. Riduzione del tempo e del costo di sviluppo: utilizzo di componenti di software riutilizzabili come classi basi. utilizzo della risoluzione incrementale dei problemi grazie alle sottoclassi. 23

Qualche Termine contratto di una classe insieme di dati e metodi accessibili (visibili) e della relativa semantica interfaccia di una classe elenco dei metodi e dei dati accessibili interfaccia (signature) di un metodo nome del metodo più eventuali parametri 24

Qualche suggerimento l approccio per la stesura di codice OO può seguire i passi: 1. esaminare la realtà, ed individuare gli elementi essenziali (protagonisti) della stessa 2. differenziare i ruoli: gli elementi importanti diventeranno classi, quelli meno diventeranno attributi; le azioni che gli oggetti possono fare o subire diventano invece metodi. Inizialmente, si devono solo individuare classi, attributi e metodi 3. Se qualche classe dovrà possedere attributi e/o metodi già posseduti da altre, sfruttare il meccanismo di ereditarietà 4. occorre poi stabilire il livello di protezione (public/private) degli attributi e gli eventuali metodi per la gestione degli stessi (metodi probabilmente necessari in caso di attributi privati); occorre anche stabilire il livello di protezione dei metodi 5. il passo successivo è la stesura dei costruttori delle classi, per decidere qual è lo stato iniziale degli oggetti 6. individuati attributi e metodi (passo 2) insieme al livello di protezione (passo 4), l interfaccia di ogni classe è definita; è quindi possibile 25 passare all implementazione dei metodi