Fondamenti di Programmazione Prof.ssa Elisa Tiezzi

Slides:



Advertisements
Presentazioni simili
Programmazione ad oggetti
Advertisements

Introduzione al linguaggio C++
© 2007 SEI-Società Editrice Internazionale, Apogeo Unità B1 Le basi della programmazione a oggetti.
Oggetti Java.
Costruttori e Distruttori
Recupero debito quarto anno Primo incontro
Massa Laura Mela Enrica
1 Astrazioni sui dati : Specifica ed Implementazione di Tipi di Dato Astratti in Java.
1 Semantica Operazionale di un frammento di Java: lo stato.
Fondamenti di Informatica
Indirizzi delle variabili A ogni variabile sono associati tre concetti fondamentali: il valore memorizzato; il tipo dati di appartenenza; lindirizzo. Il.
Prof.ssa Chiara Petrioli -- Fondamenti di programmazione, a.a. 2009/2010 Corso di Fondamenti di programmazione a.a. 2009/2010 Prof.ssa Chiara Petrioli.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Puntatori Marco D. Santambrogio – Ver. aggiornata al 21 Marzo 2013.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Stringhe e Puntatori Marco D. Santambrogio – Ver. aggiornata al 18 Marzo 2013.
1 Programmazione ad oggetti in Java E.Mumolo, DEEI
1 Corso di Laurea in Biotecnologie Informatica (Programmazione) Introduzione a JAVA Anno Accademico 2009/2010.
1 Corso di Informatica (Programmazione) Lezione 12 (19 novembre 2008) Programmazione in Java: i metodi statici.
1 Corso di Laurea in Biotecnologie Informatica (Programmazione) Array Anno Accademico 2009/2010.
1 Corso di Informatica (Programmazione) Lezione 13 (21 novembre 2008) Programmazione in Java: stringhe e array.
eliana minicozzi linguaggi1a.a lezione2
1 Lezione XIII Lu 17-Nov-2005 Programmare le classi.
Derivazione tra classi
Lezione 4: Costrutti Condizionali Prof. Raffaele Montella.
Oggetti e dati primitivi
Programmazione Corso di laurea in Informatica
Oggetti e dati primitivi Programmazione Corso di laurea in Informatica.
Istruzioni di selezione in Java Programmazione Corso di laurea in Informatica.
Approfondimento delle classi
Le classi Definizione di classe Attributi e metodi di una classe Costruttori e distruttori Private e public Funzioni friend Il puntatore this.
Java base IV: Java e la programmazione O.O.
Argomenti della lezione
Elementi di programmazione ad oggetti a. a. 2009/2010 Corso di Laurea Magistrale in Ingegneria Elettronica Docente: Mauro Mazzieri, Dipartimento di Ingegneria.
Componenti fondamentali di un programma Java
Scheda Ente Ente Privato Ente Pubblico. 2ROL - Richieste On Line.
I Metodi in Java Il termine "metodo" è sinonimo di "azione". Quindi, affinché un programma esegua qualche istruzione, deve contenere metodi.
Bando Arti Sceniche. Per poter procedere è indispensabile aprire il testo del Bando 2ROL - Richieste On Line.
2000 Prentice Hall, Inc. All rights reserved. Capitolo 10 (Deitel) Strutture, unioni ed enumerazioni Sommario Introduzione Definire le strutture.
ISTITUTO STATALE DI ISTRUZIONE SUPERIORE F. ENRIQUES CORSO JAVA – PROVA INTERMEDIA DEL 12 MARZO 2007 NOME: COGNOME: ________________________________________________________________________________.
Prof.ssa Chiara Petrioli -- Fondamenti di programmazione, a.a. 2009/2010 Corso di Fondamenti di programmazione a.a. 2009/2010 Prof.ssa Chiara Petrioli.
Unità Didattica 3 Linguaggio C
Enumerazioni e Classi 1. Enumerazioni Permettono di definire nuovi tipi che consistono in un insieme di valori costanti (ognuno con un nome) – Migliorano.
Java come linguaggio di programmazione
Master in BIOINFORMATICA Corso propedeutico di Informatica
Fopndamenti di programmazione. 2 La classe String Una stringa è una sequenza di caratteri La classe String è utilizzata per memorizzare caratteri La classe.
1Piero Scotto - C14. Finalità del corso Programma Materiale Requisiti Spendibilità 2Piero Scotto - C14.
Sviluppare un programma in C che, dato un array da 100 elementi interi caricato con numeri casuali compresi tra [10,100], sia in grado di cercare il valore.
ISTITUTO STATALE DI ISTRUZIONE SUPERIORE F. ENRIQUES CORSO JAVA – PROVA INTERMEDIA DEL 12 MARZO 2007 NOME: COGNOME: ________________________________________________________________________________.
I nomi in Java F. Bombi 18 novembre novembre 2003.
Appunti di Java (J2SDK 1.4.2, JDK 1.6.0) prof. Antonella Schiavon settembre 2009.
Fondamenti di Informatica 2 Ingegneria Informatica Docente: Giovanni Macchia a.a
Le variabili in Java Nella programmazione tradizionale, una variabile è una porzione di memoria in cui è immagazzinato un certo tipo di dato. Per esempio.
Programmazione a oggetti
JAVA Per iniziare. Verificare installazione javac –version java –version Cercare i files e sistemare eventualmente il path.
CORSO DI PROGRAMMAZIONE II Lezione 22
Programmazione ad oggetti
Prof.ssa Chiara Petrioli -- corso di programmazione 1, a.a. 2006/2007 Corso di Programmazione 1 a.a.2006/2007 Prof.ssa Chiara Petrioli Corso di Laurea.
IL GIOCO DEL PORTIERE CASISTICA. Caso n. 1 Il portiere nella seguente azione NON commette infrazioni.
Variabili Numeriche –Interi (byte, short, int, long): complemento a 2 –A virgola mobile (float, double): IEEE 745 Alfanumeriche –Carattere (char): Unicode.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Puntatori Marco D. Santambrogio – Ver. aggiornata al 11 Ottobre 2014.
Fondamenti di Informatica II Ingegneria Informatica (A-I) Prof. M.T. PAZIENZA a.a – 3° ciclo.
Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 7 Tipi di dato e strutture dati Specifica e realizzazione di strutture informative come classi.
1 Eccezioni in Java. 2 Ricordiamo che 4 una procedura può terminare –normalmente, ritornando un risultato –in modo eccezionale ci possono essere diverse.
1 Il linguaggio C Precisazioni sull’esperienza in laboratorio.
Progettare una classe 21 Febbraio La classe BankAccount Vogliamo realizzare una classe i cui oggetti sono dei semplici conti bancari. * Identifichiamo.
1 FONDAMENTI DI INFORMATICA II Ingegneria Gestionale a.a ° Ciclo Strutture e Classi.
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica
Introduzione alle Classi e agli Oggetti in Java 1.
Transcript della presentazione:

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

Programmazione OO Dati  Istruzioni = Metodi Dati  Metodi = Classi Programmazione Procedurale Concetti base: dati istruzioni Dati: variabili tipi Istruzioni: istruzioni base strutture di controllo sotto-programmi Vi sono due aspetti fondamentali della programmazione: i dati e le istruzioni. Per poter lavorare con i dati, è necessario comprendere le variabili ed i tipi (ciò è quanto abbiamo fatto nella seconda parte del libro), mentre, per operare con le istruzioni, è necessario comprendere le strutture di controllo (studiate nella terza parte del libro) ed i sotto-programmi (che analizzeremo in questa parte). Dati  Metodi = Classi Programmazione a Oggetti

Cosa è un oggetto Un oggetto è una “scatola” software contenente Metodi (comportamenti) Variabili (stato) Un oggetto è una “scatola” software contenente variabili (che descrivono lo stato di un oggetto) e metodi (detti suoi membri, definiscono i comportamenti)

Esempio: i numeri razionali 3 4 isBigger isEqual add sub div mul razionale 3/4 num Variabili di istanza (campi): contengono i valori (lo stato) del numero razionale Istanza: un preciso oggetto Metodi di istanza: agiscono sul numero razionale

Cosa è un messaggio Gli oggetti interagiscono e comunicano tra loro usando i messaggi per ottenere maggiori funzionalità e comportamenti più complessi isBigger(razionale di confronto) altro oggetto utilizzato dal programma razionale 3/4 num den

Usare gli oggetti Inviare un messaggio ad un oggetto significa invocare un metodo dell’oggetto Accedere alle variabili di istanza di un oggetto significa poter manipolare o ispezionare il loro valore Sintassi per invocare un metodo/accedere alle variabili di istanza di un oggetto: all’interno della definizione di un oggetto: metodo(lista_di_parametri) variabile all’esterno della definizione di un oggetto (operatore ‘.’): riferimentoOggetto.metodo(lista_di_parametri) riferimentoOggetto.variabile

Cosa è una classe Una classe è un “prototipo” che definisce le variabili e i metodi comuni a tutti gli oggetti di un certo tipo. Una classe è solo il modello di un oggetto e pertanto non riserva spazio di memoria per i suoi dati. Ogni oggetto ha il suo spazio dati, un oggetto è un’istanza di una classe.

Esempio Tutti gli oggetti di tipo Rational possiedono i due campi interi num e den ed almeno i 6 metodi riportati isBigger isEqual add sub div mul classe Rational int num int den

isBigger isEqual add sub div mul oggetto 8/15 istanza di Rational int num=8 int den=15 oggetto 8/15 istanza di Rational isBigger isEqual add sub div mul int num=4 int den=5 oggetto 4/5 istanza di Rational

Dichiarare una classe class nome_classe { // definizione variabili // definizione metodi } Esempio: class Rational { int num; int den; // definizione metodi }

Dichiarare un oggetto Sintatticamente la dichiarazione di un oggetto è del tutto analoga alla dichiarazione di una variabile di tipo primitivo Esempio: Rational primoNumero; essendo Rational una classe La variabile dichiarata di tipo classe è un indirizzo ad un’area di memoria contenente l’oggetto vero e proprio

Istanza di un oggetto L’operatore new crea un oggetto del tipo “indicato” dal metodo che immediatamente segue Sintassi: riferimentoOggetto = new NomeClasse(lista_di_parametri); essendo riferimentoOggetto una variabile di tipo NomeClasse L’esecuzione di una tale istruzione comporta: l’allocazione della memoria necessaria a contenere l’oggetto l’assegnazione a riferimentoOggetto dell’indirizzo di inizio dell’area di memoria allocata l’inizializzazione delle variabili di istanza dell’oggetto dettate dalla lista di parametri del metodo NomeClasse(lista_di_parametri)

Fondere le due fasi Rational primoNumero; primoNumero = new Rational(3,4); è equivalente a Rational primoNumero = new Rational(3,4);

Oggetti e metodi Un metodo può ritornare il riferimento ad un oggetto del tipo dichiarato dal valore di ritorno del metodo NomeClasse nomeMetodo(lista_input) Un metodo può avere un parametro formale di tipo classe. Al momento dell’invocazione di un tale metodo, il parametro è inizializzato con la copia Rational mul(Rational number)

Tipi primitivi e tipo classe Un metodo non può cambiare il valore di una variabile di un tipo primitivo passatagli come argomento Un metodo può cambiare i valori delle variabili di istanza dell’oggetto indirizzato dalla variabile tipo classe che gli è passata come parametro

Il metodo main main è un metodo speciale dal quale le applicazioni Java iniziano automaticamente l’esecuzione Sintassi: public static void main(String args) È buona norma non includere il metodo main nella definizione di una classe il cui scopo è esclusivamente quello di definire un tipo eccezione: per debugging

Esempio: class RationalTest . public static void main(String args) Esempio: class RationalTest  public static void main(String args)  /* corpo del metodo main */  

I costruttori Un costruttore è un metodo speciale designato a inizializzare le variabili di istanza nome uguale a quello della classe Viene richiamato automaticamente quando l’oggetto è creato new NomeClasse(lista_di_parametri) Un costruttore con una lista di argomenti vuota è detto costruttore di default Se nella classe non è presente un costruttore, Java crea automaticamente un costruttore di default

Definizione dei Costruttori La dichiarazione di un costruttore non include un tipo di ritorno che è comunque un indirizzo è un errore anteporre la parola chiave void Esempio: class Rational  int num, den; Rational(int n, int d)  num = n; den = d;  ... 

Un esempio riassuntivo class Rational  int num, den; // variabili di istanza Rational(int n, int d) // costruttore  num = n; den = d;  Rational mul(Rational r) // operazione di moltiplicazione  return new Rational(num*r.num,den*r.den);  // altre operazioni aritmetiche boolean isBigger(Rational r) // confronto se maggiore  return (num * r.den > den * r.num);  // altre operazioni di confronto }

class RationalTest  public static void main(String args)  Rational firstNum = new Rational(3,5); Rational secondNum = new Rational(2,3); boolean isBiggerResult; isBiggerResult = firstNum.isBigger(secondNum); System.out.println (“Primo>secondo:“+isBiggerResult); 

Firma (signature) di un metodo La firma di un metodo è data dal nome del metodo e dal numero, tipo e ordine dei suoi parametri Esempio di firme diverse: int myMethod(int i) è diverso da int yourMethod(int i) int myMethod(int i, double j) int myMethod(int i, double j) è diverso da int myMethod(double j, int i) Il valore di ritorno di un metodo non fa parte della firma del metodo stesso Esempio di firme uguali: int myMethod(int i) ha la stessa firma di double myMethod(int j)

Sovraccaricamento Lo stesso nome di un metodo ha più di una definizione all’interno della stessa classe I metodi sovraccarichi hanno lo stesso nome ma firme diverse tra loro I costruttori sono spesso sovraccaricati

Esempio sovraccaricamento errore segnalato dal compilatore class MethodOverload  int square(int x) return x*x;  double square(double y) return y*y; int square(double x) ………… sovraccaricamento errore segnalato dal compilatore

Sovraccaricamento e conversione Se non si ha la corrispondenza con una qualche firma, Java effettua conversioni di tipo automatiche per trovare un’eventuale corrispondenza una versione indesiderata del metodo può essere eseguita

INCAPSULAMENTO Le variabili contenute in un oggetto dovrebbero essere modificate solo dal suo interno, solo i metodi dovrebbero essere gli unici responsabili del cambiamento delle variabili. Un oggetto dovrebbe essere incapsulato rispetto a tutto il resto del sistema e dovrebbe interagire con le altre parti del programma solo attraverso un insieme specifico di metodi che definiscono i servizi che fornisce.

MODIFICATORI Un modificatore è una parola chiave di Java usata per specificare delle caratteristiche particolari di un costrutto del linguaggio. Alcuni modificatori sono chiamate modificatori di visibilità perché controllano fino a quale punto del programma è possibile usare un membro della classe.

Il modificatore public Il modificatore public indica la totale assenza di restrizioni di visibilità Le classi dichiarate public possono essere referenziate ovunque public class TwoDimensionalShape  …………  class shapeTest  TwoDimensionalShape myShape; ………… }

I campi ed i metodi dichiarati public sono accessibili ovunque public class A  public int x; public int getX()  return x;   class B  public static void main(String[] args) { A a = new A(); a.x = 3; System.out.println(a.getX());  }

Il modificatore private Le variabili e i metodi dichiarati private sono accessibili soltanto dai metodi della classe in cui sono definiti

Esempio public class TwoDimensionalShape  private int width, height; private int generate( int n )  return 1+(int)( Math.random*n );  public void setRandomWidth( int n )  width = generate( n );  public int getWidth( ) { return width; } }

class shapeTest . public static void main( String[] args ). { class shapeTest  public static void main( String[] args ) { TwoDimensionalShape s = new TwoDimensionalShape(); s.width = s.generate( 100 ); ERRORE DOPPIO s.setRandomWidth( 100 ); System.out.println( s.getWidth( ) );  }

Caratteristiche dell’OOP Occultamento delle informazioni protegge i dati all’interno di un oggetto usa variabili di istanza private non permette un loro accesso diretto usa metodi public per accedere alle variabili Incapsulamento gli oggetti incapsulano attributi e metodi nasconde i dettagli di una definizione di classe separando interfaccia (API) implementazione

La parola chiave static Una variabile definita static è detta variabile di classe Essa rappresenta informazioni valide per l’intera classe ed è condivisa da tutte le istanze della classe Esempio: public class A  static int x; ……… 

Un metodo definito static è detto metodo di classe Esso definisce un comportamento identico per tutte le istanze della classe ossia indipendente dagli oggetti Esempio: Math.random() E’ un errore di sintassi per un metodo static chiamare un metodo di istanza o accedere ad una variabile di istanza

Accedere a membri static I membri static di una classe esistono indipendentemente dall’esistenza di una istanza di tale classe Due tipi di accesso NomeClasse.nomeMetodo(lista_parametri) NomeClasse.nomeVariabile rifOggetto.nomeMetodo(lista_parametri) rifOggetto.nomeVariabile essendo rifOggetto un riferimento a un oggetto di tipo NomeClasse

La parola chiave final La parola chiave final riferita a una variabile indica che essa non può essere modificata Sintassi: final tipo NOME = costante; Esempio final double PI = 3.14159;

Librerie di classi Una libreria di classi è un insieme di classi che aiuta il programmatore nello sviluppo del software. Un compilatore spesso viene distribuito con una libreria di classi fondamentali. Si possono ottenere separatamente delle librerie commerciali. Tecnicamente una libreria non fa parte della definizione del linguaggio. La libreria standard viene distribuita con qualsiasi ambiente di sviluppo.

API e package Una libreria di classi è composta da gruppi di classi tra loro collegate, spesso indicate collettivamente come API (Application Programmer Interface). E’ possibile per esempio riferirsi al Java Database API quando si parla dell’insieme delle classi che permettono di interagire con una base di dati. Le classi della libreria standard di Java sono raggruppate in package che, come le API, permettono di indicare con un unico nome delle classi tra loro collegate. Ad esempio la classe String fa parte del package java.lang.

La clausola IMPORT Le classi del package java.lang sono automaticamente rese disponobili durante la scrittura di un programma. Se si vogliono usare le classi appartenenti ad altri package, occorre specificare il nome della classe insieme al nome del package, oppure usare la clausola import. Es.: java.util.Random import java.util.Random import java.util.*