Programmazione ad oggetti

Slides:



Advertisements
Presentazioni simili
Introduzione al linguaggio C++
Advertisements

© 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
Informatica Recupero debito quarto anno Terzo incontro.
Array multidimensionali
1 Semantica Operazionale di un frammento di Java: lo stato.
29 febbraio 2008 Progettare tipi di dato astratti.
Liste di Interi Esercitazione. Liste Concatenate Tipo di dato utile per memorizzare sequenze di elementi di dimensioni variabile Definizione tipicamente.
Le gerarchie di tipi.
Semantica Operazionale di un frammento di Java: lo stato
Fondamenti di Informatica
Prof.ssa Chiara Petrioli -- Fondamenti di programmazione, a.a. 2009/2010 Corso di Fondamenti di programmazione a.a. 2009/2010 Prof.ssa Chiara Petrioli.
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 Informatica (Programmazione) Lezione 13 (21 novembre 2008) Programmazione in Java: stringhe e array.
Programmazione Corso di laurea in Informatica
Approfondimento delle classi
Lab. Calc. 2005/06 Ereditarietà. Lab. Calc. 2005/06 Scopo di questa lezione: Imparare a creare nuove classi ereditando da classi già esistenti. Capire.
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.
Le funzioni a tempo di esecuzione
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
I Metodi in Java Il termine "metodo" è sinonimo di "azione". Quindi, affinché un programma esegua qualche istruzione, deve contenere metodi.
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.
Enumerazioni e Classi 1. Enumerazioni Permettono di definire nuovi tipi che consistono in un insieme di valori costanti (ognuno con un nome) – Migliorano.
Fopndamenti di programmazione. 2 La classe String Una stringa è una sequenza di caratteri La classe String è utilizzata per memorizzare caratteri La classe.
Fondamenti di Programmazione Prof.ssa Elisa Tiezzi
ISTITUTO STATALE DI ISTRUZIONE SUPERIORE F. ENRIQUES CORSO JAVA – PROVA FINALE DEL 21 MAGGIO 2007 NOME: COGNOME: ________________________________________________________________________________.
ISTITUTO STATALE DI ISTRUZIONE SUPERIORE F. ENRIQUES CORSO JAVA – PROVA INTERMEDIA DEL 12 MARZO 2007 NOME: COGNOME: ________________________________________________________________________________.
I metodi F. Bombi Campi e metodi Abbiamo visto che una classe può contenere – Campi – Metodi stato I campi sono utilizzati per memorizzare.
I nomi in Java F. Bombi 18 novembre novembre 2003.
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.
Oggetti in C# Lezione 1 Classi ed istanze Oggetti in C# - Lezione 1.
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.
Tecnologie di InternetDocument Type Definition Dott. Nicola Dragoni Document Type Definition  Document Type Definition (DTD)  Documento XML valido 
Ereditarieta’. Contenuti Introduciamo un meccanismo fondamentale di Java: l’ereditarieta’ Permette di estendere classi gia’ definite (ovvero di definire.
Esercitazione su Vector. Permette di definire collezioni di dati generiche, che sono in grado di memorizzare elementi di ogni sottotipo di Object Definito.
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.
Informatica 4 Funzioni. FUNZIONE: definizione MATEMATICA Relazione (o applicazione) binaria tra due insiemi A e B che associa a ogni elemento di A un.
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.
Fondamenti di Informatica 2 Ingegneria Informatica Docente: Giovanni Macchia a.a
1 Il linguaggio C Precisazioni sull’esperienza in laboratorio.
ALLOCAZIONE STATICA: LIMITI Per quanto sappiamo finora, in C le variabili sono sempre dichiarate staticamente –la loro esistenza deve essere prevista e.
Programmazione in Java. Classi I programmi in Java consistono di classi. Le classi consentono di definire: collezioni di procedure (metodi statici) tipi.
Cose nuove di Java (prima a chiacchiera, poi formalmente)
LIP: 2 Maggio 2008 Classi Astratte. Cos’e’ una Classe Astratta una classe astratta e’ un particolare tipo di classe permette di fornire una implementazione.
Sommario Oggetti immutabili e non Tipi Primitivi: String, Arrays.
Progettare una classe 21 Febbraio La classe BankAccount Vogliamo realizzare una classe i cui oggetti sono dei semplici conti bancari. * Identifichiamo.
LIP: 11 Maggio 2007 Classi Astratte. Cos’e’ una Classe Astratta una classe astratta e’ un particolare tipo di classe permette di fornire una implementazione.
Esercitazione del 9 marzo 2007 Ereditarieta’. Richiami Definire sottoclassi (ereditarieta’) Overriding Specificatori di accesso (private, protected) Principio.
1 Semantica Operazionale di un frammento di Java: intro estensione (con piccole varianti) di quella di FP | v |
LIP: 4 Maggio 2007 Interfacce. Cos’e’ una Interfaccia una interfaccia e’ un particolare tipo di classe contiene solo la specifica non ha implementazione.
1 Java secondo contatto Nel tunnel una luce…. 2 Esercizio - Contatore Definire la classe Contatore con le seguenti caratteristiche:  Il metodo getValore.
Fondamenti di informatica T-A Esercitazione 3 : Classi, metodi, visibilità, metodi statici AA 2012/2013 Tutor : Domenico Di Carlo.
Corso di Algoritmi e Strutture Dati con Laboratorio Richiami di Java – parte II.
30/10/01Array 1  Un array e’ una struttura dati che contiene piu’ valori del medesimo tipo.  La lunghezza di un array e’ stabilita quando l’array viene.
Introduzione all’Ereditarietà Pietro Palladino. Richiami UML Classe: descrizione di un insieme di oggetti software con caratteristiche simili Definisce.
Introduzione alle Classi e agli Oggetti in Java 1.
Transcript della presentazione:

Programmazione ad oggetti

OOP La programmazione orientata agli oggetti (Object Oriented Programming) ha l’obiettivo di formalizzare gli oggetti del mondo reale e di costruire con questi un mondo virtuale. Questa parte di mondo che viene ricostruita in modo virtuale è detta dominio applicativo.

Distinguere gli oggetti Esempio: un bicchiere Ne sappiamo definire le caratteristiche e conosciamo anche quali azioni si possono fare con esso. Possiamo definirne la forma, il colore, il materiale di cui è fatto e possiamo dire se è pieno o vuoto. Sappiamo anche che si può riempire e svuotare. Abbiamo definito un oggetto attraverso le sue caratteristiche le operazioni che può compiere

Il processo di astrazione: le classi Per popolare il dominio applicativo utilizzato dall’applicazione è necessario creare gli oggetti, e per fare questo è necessario definire le classi. Una classe è lo strumento con cui si identifica e si crea un oggetto.

Una classe è un modello per la creazione di oggetti. La classe è paragonabile allo stampo gli oggetti sono i biscotti ottenuti con quello stampo

Classi e tipi di dato Una classe è a tutti gli effetti un tipo di dato (come gli interi e le stringhe e ogni altro tipo già definito) Nella programmazione orientata agli oggetti, è quindi possibile sia utilizzare tipi di dato esistenti, sia definirne di nuovi tramite le classi

Diagramma delle classi La prima sezione contiene il nome della classe, la seconda sezione definisce i suoi attributi, mentre più in basso sono definiti i metodi, le operazioni che si possono compiere sull’oggetto di quel tipo.

Le classi in C++ class [nome della classe]{ [attributi] [metodi] } class MiaClasse { private: //visibilità char* mioAttributo; public: //visibilità void mioMetodo() { }

Gli oggetti Gli oggetti vengono creati in fase di esecuzione ed ognuno di essi fa parte di una categoria (di una classe) Ogni classe può creare più oggetti, ognuno dei quali pur essendo dello stesso tipo è distinto dagli altri Un oggetto è l’istanza di una classe

Un esempio di classe Se vogliamo catalogare i cd musicali in nostro possesso, abbiamo bisogno di implementare un programma nel cui dominio applicativo è presente la classe CD I metodi della classe CD servono per impostare e recuperare i valori degli attributi

Diagramma degli oggetti I diagrammi che rappresentano gli oggetti (Object Diagram in UML) mettono in luce i valori che assumono gli attributi

Stato di un oggetto L’insieme dei valori degli attributi di un oggetto è chiamato stato dell’oggetto e generalmente può variare in funzione del tempo

Creazione di un oggetto Per creare un oggetto si effettua un’istanziazione di una classe. In questa fase viene riservato uno spazio di memoria per conservare i valori degli attributi dell’oggetto che si sta creando (per mantenere memorizzato da qualche parte lo stato dell’oggetto)

Istanziare un oggetto in C++ In C++ è possibile creare oggetti in due modi a seconda del tipo di memoria in cui si vuole allocare l’oggetto Allocazione nello stack: Bicchiere coppa; … coppa.riempi(); Allocazione nella memoria heap: Bicchiere* calice; calice = new Bicchiere(); calice->riempi(); delete calice;

Gli attributi di istanza Gli attributi di istanza sono quelli posseduti da un oggetto, chiamati anche più semplicemente attributi. L’attributo di un oggetto è una variabile che ne descrive una caratteristica o proprietà

Metodi: le azioni degli oggetti Un metodo è un’azione che l’oggetto può eseguire. La dichiarazione di un metodo è composta da: Nome del metodo Tipo di dato da ritornare Tipo e nome dei parametri di ingresso Tutto questo è detto firma del metodo.

Diagramma UML della classe

Esercizio Implementare in C++ la classe Equazione Istanziare due equazioni: 5x2-3x+2=0 2x2-4=0

Overloading In alcuni casi è utile avere un metodo che possa essere chiamato sia con parametri, sia senza, oppure con numero e tipo di parametri differenti. Nel caso di due o più metodi con lo stesso nome ma con parametri differenti si parla di overloading int somma(int addendo1, int addendo2) { return addendo1 + addendo2; } float somma(float addendo1, float addendo2) { L’overloading consente di sovraccaricare il metodo con più di un significato.

Metodo costruttore Il costruttore è un metodo particolare che viene invocato alla creazione dell’oggetto e che contiene tutte le istruzioni da eseguire per la sua inizializzazione.

Costruttori in C++ In C++i metodi costruttore: Deve avere lo stesso nome della classe a cui appartiene. Può anche essere vuoto o non essere definito. In questi casi sull’oggetto creato non sarà effettuata nessuna operazione di inizializzazione Può avere dei parametri di input che serviranno per effettuare le operazioni di inizializzazione alla creazione dell’oggetto. Possono esistere più costruttori con lo stesso nome ma con numero e tipo di parametri differenti (overloading del costruttore). In questo modo sarà possibile creare l’oggetto invocando uno dei costruttori all’atto della creazione e passandogli i parametri necessari nell’ordine e in numero uguale a quanto definito nella dichiarazione.

Esempio class SchedaTelefonica { public: SchedaTelefonica() : m_importo(10) {} private: float m_importo; }; Solamente nel costruttore, è possibile usare una particolare sintassi per valorizzare gli attributi della classe, chiamata lista di inizializzazione del costruttore. Questa sintassi prevede che tra la firma del costruttore e la sua implementazione, sia possibile specificare una lista (iniziata dal carattere due punti), degli attributi (separati dalla virgola) seguita dal valore di inizializzazione (contenuto tra parentesi). In alternativa il costruttore poteva essere scritto: SchedaTelefonica::SchedaTelefonica() m_importo = 10; }

Modificatori public: permette a qualunque classe o oggetto di qualunque tipo, di avere accesso all’attributo o al metodo a cui è applicato. protected: permette l’accesso solo alle classi e agli oggetti il cui tipo è una sottoclasse di quella in cui è utilizzato. Le sottoclassi sono trattate nell’ambito dell’ereditarietà nella prossima unità. private: permette l’accesso solo agli oggetti della classe stessa in cui è utilizzato.

Attributi statici class Gatto { Gatto::NumeroDiGatti = 0; public: static int NumeroDiGatti; Gatto() NumeroDiGatti++; } ~Gatto() NumeroDiGatti--;   Gatto::NumeroDiGatti = 0;

Metodi statici class Matematica { public: static int Soma (int addendo1, int addendo2) return addendo1 + addendo2; } Il metodo Somma riceve in input due parametri che sono gli addendi della somma che deve computare, e ritorna in output il valore della somma effettuata. Tutto ciò che gli serve per eseguire l’operazione gli viene passato dall’esterno, e il risultato che produce non serve per aggiornare l’attributo di un oggetto, bensì viene semplicemente ritornato a chi ha invocato il metodo. Per invocare un metodo static si utilizza la tradizionale notazione puntata solo che al posto del nome dell’oggetto si userà il nome della classe, come nell’esempio seguente:   int somma = Matematica::Somma(3, 5);