Il paradigma OO e le Classi
|
|
|
- Lamberto Contini
- 9 anni fa
- Visualizzazioni
Transcript
1 Oggetti e Classi (CAP 10) Alberto Garfagnini Università degli studi di Padova 1 Dicembre 2009 Il paradigma OO e le Classi La programmazione ad Oggetti () è una filosofia di programmazione che si basa sui seguenti concetti: 1. astrazione 2. encapsulation e data hiding 3. polimorfismo 4. inheritance 5. riutilizzo del codice la classe incarna in pieno la filosofia OO: permette di tradurre una astrazione in un tipo definito dall utente; incorpora la rappresentazione dei dati e dei metodi per la loro manipolazione (interfaccia con l utilizzatore).
2 Progettazione di una classe in C++ Supponiamo di disegnare una classe che permette di gestire gli studenti iscritti al corso di Laurea in Fisica. Le operazioni (semplificate) che uno studente può fare sono: iscriversi al primo anno di un corso di laurea; rinnovare la propria iscrizione ad un anno successivo (se il numero di CFU sostenuti lo permettono); PUBLIC INTERFACE sostenere e registrare degli esami; mostrare la propria matricola (ove richiesta); visualizzare il numero di CFU acquisiti. Le informazioni che devono essere memorizzate sono: il numero di matricola; i dati anagrafici (nome e cognome); il numero di CFU sostenuti; l anno di corso al quale è iscritto. INTERNAL DATA Creazione di una Classe Per scrivere una classe è necessario fornire: 1. una dichiarazione della classe che descrive le componenti dei dati in termini dei data members, e realizza l interfaccia pubblica in termini di function members (chiamati anche semplicemente metodi). 2. le definizioni dei metodi della classe che forniscono l implementazione delle funzioni, metodi della classe. Data Hiding Public Interface class classname private: data member declarations public: member function prototypes ;
3 Class Declaration: Studente // Dichiarazione Classe Studente #include <cstring> class Studente private: int matricola; char nome[30]; char cognome[50]; int anno_corso; int cfu_acquisiti; public: void iscrivi_i_anno(int matricola, const char * cognome, const char * nome); void registra_esame( int cfu ); int get_matricola( ); int get_cfu( ); void stampa_sommario( ); ; Class Members Implementation: Studente (parte 1) // Member Functions per la Classe Studente void Studente::iscrivi_I_anno( int c, const char * cg, const char * nm) std::strncpy( nome, nm, 30 ); nome[29] = \0 ; std::strncpy( cognome, cg, 50 ); cognome[49] = \0 ; matricola = codice; cfu_acquisiti = 0; void Studente::stampa_sommario( ) using namespace std; cout << "cognome: " << cognome; cout << " nome: " << nome << endl; cout << " matricola: " << matricola << endl; cout << " anno di corso: " << anno_corso << endl; cout << " CFU superati: " << cfu_acquisiti << endl;
4 Class Members Implementation: Studente (parte 2) // Registra un nuovo esame int Studente::registra_esame( int cfu ) if ( cfu < 0 ) return; cfu_acquisiti += cfu; // Ritorna il numero di matricola dello Studente int Studente::get_matricola( ) return matricola; // Ritorna il CFU acquisiti int Studente::get_cfu( ) return cfu_acquisiti; // Esempio di utilizzo della classe Studente Studente iscritto cognome: Rossi nome: Aldo int main( ) matricola: 5432 anno di corso: I using namespace std; CFU superati: 0 Dopo il primo esame - CFU: 12 Studente aldo; aldo.iscrivi_i_anno(5432, "Rossi", "Aldo" ); cout << "Studente iscritto" << endl; aldo.stampa_sommario( ); // Registra Sperimentazioni I aldo.registra_esame( 12 ); cout << "Dopo il primo esame -"; << "CFU: " << aldo.get_cfu( ) << endl; return 0;
5 I metodi Costruttori Una volta definita la classe è possibile dichiarare degli oggetti Studente aldo; Ma non è possibile inizializzare direttamente i suoi dati, come si farebbe per altri tipi: int year = 2009; // codice valido struct point double x, y; ; point origin = 0, 0; // valido Studente s = , "Rossi", "Mario"; // Errato! Per inizializzare i dati di una classe è necessario invocare un metodo speciale chiamato costruttore. Perchè soltanto all interno di un metodo è possibile accedere alla parte privata della classe. Definiamo un costruttore per la classe Studente // Costruttore per la Classe Studente Studente::Studente( int c, const char * cg, const char * nm) std::strncpy( nome, nm, 30 ); nome[29] = \0 ; std::strncpy( cognome, cg, 50 ); cognome[49] = \0 ; matricola = codice; cfu_acquisiti = 0; // Default Constructor Studente::Studente( ) nome[0] = \0 ; cognome[0] = \0 ; matricola = 0; cfu_acquisiti = 0; Il compilatore crea un Default Constructor vuoto se non è fornito dal programmatore Studente::Studente( )
6 La Classe Studente rivista // Dichiarazione Classe Studente #include <cstring> class Studente private: int matricola; char nome[30]; char cognome[50]; int anno_corso; int cfu_acquisiti; public: Studente( ); Studente(int matr, const char * cognome, const char * nome); void registra_esame( int cfu ); int get_matricola( ); int get_cfu( ); void stampa_sommario( ); ; Utilizzo dei costruttori della classe Studente In che modo è possibile creare e inizializzare un oggetto: Studente a(23,"rossi","aldo"); Studente a = Studente(544,"Verdi","Carla"); È possibile anche creare un oggetto dinamicamente: Studente *p = new Studente(23,"Rossi","Aldo"); A volte viene invocato il default constructor : Studente f; Il costruttore di default viene sempre invocato per array di oggetti Studente lista[120]; anche se si inizializzano chiamando esplicitamente il costruttore Studente lista[2] = Studente(543,"Rossi","Aldo"), Studente(544,"Verdi","Carla") ;
7 Il metodo Destructor Una volta che un oggetto viene creato invocando il suo Costruttore, il programma si prende la responsibilità di tenere traccia dell oggetto fino a quando deve essere eliminato. A questo punto viene invocato un metodo chiamato Distruttore che si occupa di liberare tutte le risorse occupate dall oggetto. nella maggior parte dei casi il Distruttore è vuoto ma nel caso in cui si creasse dinamicamente della memoria all interno del Costruttore, questa deve essere liberata nel Distruttore Studente::Studente( int c, const char * cg, const char * nm) int n = strlen( cg ); cognome = new char[ n+1 ]; std::strncpy( cognome, cg, n ); cognome[n] = \0 ;... Studente::~Studente( ) delete [] cognome;... La Classe Studente rivista (2) // Dichiarazione Classe Studente #include <cstring> class Studente private: int matricola; char * nome; char * cognome; int anno_corso; int cfu_acquisiti; public: Studente( ); Studente(int matr, const char * cognome, const char * nome); ~Studente( ); void registra_esame( int cfu ); int get_matricola( ); int get_cfu( ); void stampa_sommario( ); ;
8 // Esempio di utilizzo della classe Studente Studente iscritto cognome: Rossi nome: Aldo int main( ) matricola: 5432 anno di corso: I using namespace std; CFU superati: 0 Dopo il primo esame - CFU: 12 Studente aldo( 5432, "Rossi", "Aldo" ); cout << "Studente iscritto" << endl; aldo.stampa_sommario( ); // Registra Sperimentazioni I aldo.registra_esame( 12 ); cout << "Dopo il primo esame -"; << "CFU: " << aldo.get_cfu( ) << endl; return 0;
La programmazione ad oggetti (OOP)
Oggetti e Classi (CAP 10) Alberto Garfagnini, Marco Mazzocco Università degli studi di Padova 30 Novembre 2011 La programmazione ad oggetti (OOP) È un approccio concettuale alla programmazione (indipendente
4. Accesso diretto per gli archivi con record a lunghezza costante
4. Accesso diretto per gli archivi con record a lunghezza costante Nell accesso diretto (in inglese, random) al file binario, le operazioni di lettura o scrittura devono essere precedute dall operazione
La classe std::vector della Standard Template Library del C++
La classe std::vector della Standard Template Library del C++ Alberto Garfagnini Università degli studi di Padova 23 Ottobre 2013 Programmazione generica in C++ : i Template I templates sono probabilmente
Corso di Programmazione ad Oggetti
Corso di Programmazione ad Oggetti Costruttori di copia, funzioni di accesso e variabili static aa 2008/2009 Claudio De Stefano Claudio De Stefano - Corso di Programmazione ad Oggetti - aa 2008/2009 1
Laboratorio di programmazione
Laboratorio di programmazione Lezione VIII Tatiana Zolo [email protected] 1 PROGRAMMAZIONE A OGGETTI Quando si programma a oggetti si scompone il problema in sottogruppi di parti collegate che tengono
Fondamenti di Informatica - 1. Prof. B.Buttarazzi A.A. 2011/2012
Fondamenti di Informatica - 1 Prof. B.Buttarazzi A.A. 2011/2012 Sommario Operatore? Tipo di dato: struct La ricorsione Funzioni ricorsive Esercizi proposti 26/04/2012 2 Operatore? L'operatore? può essere
Linguaggio C++ Linguaggi di terza generazione
Linguaggio C++ Linguaggi di terza generazione Insieme di primitive ad alto livello, ognuna traducibile in una sequenza di primitive in linguaggio macchina Es.: pesolordo pesocarico + pesoveicolo Due load,
Università degli Studi di Cassino Corso di Fondamenti di Informatica Tipi strutturati: Stringhe. Anno Accademico 2010/2011 Francesco Tortorella
Corso di Informatica Tipi strutturati: Stringhe Anno Accademico 2010/2011 Francesco Tortorella Stringhe di caratteri La stringa è il tipo strutturato con cui vengono rappresentati gruppi di caratteri quali
Classi. Oggetti e classi. Creazione e inizializzazione di oggetti in C++ Distruzione di oggetti in C++
Informatica 3 Informatica 3 LEZIONE 7: Fondamenti di programmazione orientata agli oggetti (1) Modulo 1: Introduzione: oggetti e classi Modulo 2: Link e associazioni Modulo 3: Aggregazione Lezione 7 -
Dati aggregati. Violetta Lonati
Università degli studi di Milano Dipartimento di Scienze dell Informazione Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica - in breve: Definizione di tipi Array Stringhe Strutture
Corso di Algoritmi e Strutture dati Programmazione Object- Oriented in Java (Parte I)
Corso di Algoritmi e Strutture dati Programmazione Object- Oriented in Java (Parte I) Ing. Gianluca Caminiti Sommario ( OOP ) Programmazione Object-Oriented Incapsulamento, Ereditarietà, Polimorfismo Richiami
Programmazione orientata agli oggetti. Ivan Lanese
Programmazione orientata agli oggetti Ivan Lanese Argomenti Programmazione orientata agli oggetti Classi Oggetti Costruttori Scrivere grosse applicazioni La gran parte delle applicazioni sono GROSSE Windows
Programmazione ad oggetti
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.
Esempi al calcolatore su: 1) Costruttori ed ereditarietà 2) Subtyping e polimorfismo
Esempi al calcolatore su: 1) 2) Subtyping e polimorfismo 1 Esempio 1: 2 Introduzione Java prevede due automatismi legati ai costruttori: Se una classe non ha costruttori viene creato automaticamente il
La scrittura di un programma Modellizzazione del programma Scrittura del codice Esercizi. Sperimentazioni I. Alberto Garfagnini, Marco Mazzocco
Sperimentazioni I Alberto Garfagnini, Marco Mazzocco Università degli studi di Padova 10 Novembre 2011 La scrittura di un programma Modellizzazione programma Flowcharts Pseudocode Scrittura del codice
Programmazione Orientata agli Oggetti
Programmazione Orientata agli Oggetti Lezione 13 La programmazione ad oggetti si basa su due principi fondamentali ereditarietà polimorfismo Queste due proprietà consentono di definire nuovi tipi di dato
La scrittura di un programma Modellizzazione del programma Scrittura del codice Esercizi. Sperimentazioni I. Alberto Garfagnini, Marco Mazzocco
Sperimentazioni I Alberto Garfagnini, Marco Mazzocco Università degli studi di Padova 30 Ottobre 2013 La scrittura di un programma Modellizzazione programma Flowcharts Pseudocode Scrittura del codice Esercizi
Programmazione Procedurale in Linguaggio C++
Programmazione Procedurale in Linguaggio C++ Tipi Strutturati Parte 1 Introduzione G. Mecca M. Samela Università della Basilicata Tipi Strutturati: Introduzione >> Sommario Sommario Panoramica Alcuni Esempi
Breve Manuale di Riferimento sulla Sintassi Linguaggi C++ e FORTRAN
Breve Manuale di Riferimento sulla Sintassi Linguaggi e versione aggiornata al 05/02/2004 Sommario Elementi di Base... 2 Dati, Tipi e Dichiarazioni... 2 Tipi di Dato di Base... 2 Tipi di Dato Strutturati...
Esercizio 2: Algebra dei Puntatori e Puntatori a Puntatori
Esercizio 2: Algebra dei Puntatori e Puntatori a Puntatori Salvatore Mandrà 7 Ottobre 2008 1 Esercizio L esercizio prevede l implementazione di funzioni per il prodotto di una matrice per un vettore, attraverso
1: /* Nome del programma: gestione_articoli_01.cpp 2: Realizzato da: Gaetano Della Cerra 3: Data: 06/02/2010 - III Informatica Serale I.T.I.S.
1: /* Nome del programma: gestione_articoli_01.cpp 2: Realizzato da: Gaetano Della Cerra 3: Data: 06/02/2010 - III Informatica Serale I.T.I.S. Molinari 4: Il programma gestisce gli articoli di un negozio
Laboratorio di Algoritmi e Strutture Dati
Realizzazione di Liste Laboratorio di Algoritmi e Strutture Dati Domenico Redavid [email protected] Materiale di base gentilmente concesso dal dott. Nicola Di Mauro Ricercatore presso l'univ. di Bari
Informatica 1 Tipi e dichiarazioni in C++ C++ - Tipi e dichiarazioni 1
Informatica 1 Tipi e dichiarazioni in C++ C++ - Tipi e dichiarazioni 1 Cosa è il C++ E un linguaggio di programmazione derivato dal C Può essere usato per modificare il SO Unix e i suoi derivati (Linux)
Implementazione dell albero binario in linguaggio C++
Implementazione dell albero binario in linguaggio C++ Costruire il programma per gestire le operazioni su un albero binario. Ogni nodo dell albero contiene un codice e una descrizione; il programma deve
Laboratorio di Informatica
Strutture di dati Laboratorio di Informatica 5. Strutture / Array di oggetti / Pila&Coda in C++ Una struttura è un insieme finito di variabili (dette campi) non necessariamente dello stesso tipo, ognuna
Programmazione Java Struttura di una classe, Costruttore, Riferimento this
Programmazione Java Struttura di una classe, Costruttore, Riferimento this [email protected] http://www.di.univaq.it/romina.eramo/tlp Roadmap > Struttura di una classe > Costruttore > Riferimento
Laboratorio di Informatica
Liste semplici (semplicemente linkate) Una lista semplice e costituita da nodi Laboratorio di Informatica 7. Strutture complesse di dati in C++ Ogni nodo e una struttura che contiene : Dati Un riferimento
Laboratorio di Programmazione e Calcolo
UNIVERSITA DEGLI STUDI ROMA TRE DIPARTIMENTO DI FISICA E. AMALDI Laboratorio di Programmazione e Calcolo 6 crediti a cura di Severino Bussino Anno Accademico 2016-17 0) Struttura del Corso 1) Trattamento
Introduzione al C++ Corso di C++ INFN LNS 13 Dicembre Corrado Santoro
Introduzione al C++ Corso di C++ INFN LNS 13 Dicembre 2010 Corrado Santoro Concetto di Oggetto Proposto del 1966 nell'ambito dell'ai per rappresentare l' universo del discorso (ambiente di riferimento
Corso di Laboratorio 2 Programmazione C++ Silvia Arcelli. 20 Ottobre 2014
Corso di Laboratorio 2 Programmazione C++ Silvia Arcelli 20 Ottobre 2014 1 Tipi non Predefiniti Abbiamo visto: Tipi elementari (int, float, char,...) Tipi composti (arrays e tipi non predefiniti) C++ permette
Il linguaggio C. Puntatori e dintorni
Il linguaggio C Puntatori e dintorni 1 Puntatori : idea di base In C è possibile conoscere e denotare l indirizzo della cella di memoria in cui è memorizzata una variabile (il puntatore) es : int a = 50;
Ereditarietà e Polimorfismo
Ereditarietà e Polimorfismo Riusare il software A volte si incontrano classi con funzionalità simili In quanto sottendono concetti semanticamente vicini È possibile creare classi disgiunte replicando le
Programmazione a oggetti
Programmazione a oggetti Quanti oggetti, tra di loro parlando, fanno programmi. Pilu Crescenzi [email protected] Università di Firenze Programmazione a oggetti p.1/32 Cosa è un oggetto Una scatola software
Fondamenti di Informatica 1. Prof. B.Buttarazzi A.A. 2010/2011
Fondamenti di Informatica 1 Prof. B.Buttarazzi A.A. 2010/2011 Sommario Paradigma OO Incapsulamento Polimorfismo e Overloading Ereditarietà e Overriding Esercizi svolti Esercizi proposti Paradigma OO Le
Corso di Fondamenti di Informatica
Corso di Fondamenti di Informatica Introduzione alla programmazione in C++ 1 Un introduzione Che cosa è il C++? La programmazione procedurale La programmazione orientata agli oggetti La programmazione
Gestione di stringhe. Le stringhe in C/C++
Alessio Bechini - Corso di - Gestione di stringhe Parte del materiale proposto è stato gentilmente fornito da G. Lipari Le stringhe in C/C++ In C e in C++ non esiste un vero e proprio tipo stringa. Una
Classe Vettore (i) Creare una classe che consenta di gestire un vettore di N elementi reali (double), che preveda i seguenti metodi:
Classe Vettore (i) Creare una classe che consenta di gestire un vettore di N elementi reali (double), che preveda i seguenti metodi: Vettore(int n): crea un oggetto Vettore contente n elementi, inizializzati
Ricerca e ordinamento su array di oggetti. Corso di Programmazione 2 Esercitazione 5
Ricerca e ordinamento su array di oggetti Corso di Programmazione 2 Esercitazione 5 Sommario Ricercare in array di oggetti Interfaccia comparable Ordinare array di oggetti Problema Come ordinare, ricercare
Sommario. Le differenze fra C e C++ Funzioni. Varie. Memoria. commenti. parametri per funzioni funzioni inline overloading di funzione
Introduzione al C++ Sommario Le differenze fra C e C++ commenti Funzioni parametri per funzioni funzioni inline overloading di funzione Varie input/output nuovi header punto di dichiarazione delle variabili
Definizione di classi. Walter Didimo
Definizione di classi Walter Didimo Definizione di classi Fino ad ora abbiamo imparato a: creare oggetti da classi già pronte usare gli oggetti creati, invocando metodi la creazione e l uso di oggetti
Fondamenti di Informatica T-1. Classi & vettori
Classi & vettori 2 Array Un vettore (array) è un insieme ordinato, di dimensione fissa, di oggetti dello stesso tipo. Esempio: array capace di contenere al più 10 numeri interi int[] arrayinteri = new
Primi passi col linguaggio C
Andrea Marin Università Ca Foscari Venezia Laurea in Informatica Corso di Programmazione part-time a.a. 2011/2012 Come introdurre un linguaggio di programmazione? Obiettivi: Introduciamo una macchina astratta
Const, friend, static,this
Const, friend, static,this Sommario Lo speficatore const per gli oggetti e le funzioni membro Le funzioni friend I membri static di una classe Il puntatore this Oggetti const Alcuni oggetti devono poter
14 - Metodi e Costruttori
14 - Metodi e Costruttori Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/ milazzo milazzo di.unipi.it
Programmazione modulare
Programmiamo in.. Programmazione modulare Un programma complesso si suddivide in più sottoprogrammi o funzioni. Un programma suddiviso in piccoli pezzi, è più semplice da gestire da aggiornare da correggere
Programmazione. Cognome... Nome... Matricola... Prova scritta del 22 settembre 2014. Negli esercizi proposti si utilizzano le seguenti classi:
Cognome................................ Nome................................... Matricola............................... Programmazione Prova scritta del 22 settembre 2014 TEMPO DISPONIBILE: 2 ore Negli
Riassunto: cos è la OOP? classi astratte, interfacce, classi interne. Scaletta. Figura con area()? Figura senza area()? Stefano Mizzaro 1.
OO in Java: classi astratte, interfacce, classi interne Stefano Mizzaro Dipartimento di matematica e informatica Università di Udine http://www.dimi.uniud.it/mizzaro [email protected] Programmazione,
#include <iostream> // libreria che gestisce flusso di input e output. using namespace std; // uso di librerie standard del C++
Qualsiasi programma in C++ segue lo schema: #include // libreria che gestisce flusso di input e output using namespace std; // uso di librerie standard del C++ int main() { // dichiarazioni
ESERCIZI DI PROGRAMMAZIONE C/C++ per le classi seconde
ESERCIZI DI PROGRAMMAZIONE C/C++ per le classi seconde vers.0 in lavorazione Docente SAFFI FABIO Contenuti Struttura del file sorgente...2 Organizzazione della directory di lavoro...2 Esercizi sulle funzione
18 - Classi parzialmente definite: Classi Astratte e Interfacce
18 - Classi parzialmente definite: Classi Astratte e Interfacce Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/
16 - Ereditarietà, tipi e gerarchie
16 - Ereditarietà, tipi e gerarchie Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/ milazzo milazzo
Programmazione. Cognome... Nome... Matricola... Prova scritta del 11 luglio 2014
Cognome................................ Nome................................... Matricola............................... Programmazione Prova scritta del 11 luglio 2014 TEMPO DISPONIBILE: 2 ore Negli esercizi
