Reti di Connessione e Instradamento AA

Documenti analoghi
Ingegneria del Software

Programmazione ad oggetti

Fondamenti di Informatica

Progettazione Object-Oriented

INFORMATICA OOP Relazioni tra classi Roberta Gerboni

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

Funzioni, Stack e Visibilità delle Variabili in C

Laboratorio di Algoritmi e Strutture Dati. Esercizi

Gerarchia di classi Java 1

Proprietà delle Classi e degli Oggetti in Java

Informatica 3. Informatica 3. LEZIONE 8: Fondamenti di programmazione orientata agli oggetti (2) Lezione 8 - Modulo 1

La Gestione della Memoria. Carla Binucci e Walter Didimo

Proprietà delle Classi e degli Oggetti in Java

18 - Classi parzialmente definite: Classi Astratte e Interfacce

17 - Classi parzialmente definite: Classi Astratte e Interfacce

Gerarchia di classi Java 1

- tipo - costruttori di tipo - typedef: alias per i nuovi tipi

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

Programmazione Orientata agli Oggetti

Introduzione alla programmazione orientata agli oggetti (prima parte) Rel 1.0

Informatica 3. LEZIONE 8: Fondamenti di programmazione orientata agli oggetti (2)

SOMMARIO Tipo di dato astratto (ADT) : Interfacce: interface. TIPI DI DATI ASTRATTI. Polimorfismo: Tipo class. Tipo interface. Tipi run-time: is e as.

Definizione di classi

Definizione di classi. Walter Didimo

Classi. Oggetti e classi. Creazione e inizializzazione di oggetti in C++ Distruzione di oggetti in C++

Programmazione ad Oggetti

Dichiarazione di una classe. Dichiarazione ereditarietà

Programmazione con Java

INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica

INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA. Fondamenti di Informatica - Programma

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

Catia Trubiani. Laboratorio di Ingegneria del Software a.a

Oggetti e classi. Cos è un oggetto

Introduzione al linguaggio C Puntatori

La classe java.lang.object

Introduzione al linguaggio C Puntatori

Corso di Fondamenti di Programmazione canale E-O. Strutture. Strutture. Definizione di strutture (2) Definizione di strutture (1)

Programmazione Java Struttura di una classe, Costruttore, Riferimento this

Ereditarietà e polimorfismo

costruttori e distruttori

Funzioni, Stack e Visibilità delle Variabili in C

Fondamenti di Informatica e Laboratorio T-AB T-15 Strutture dati

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

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

Laboratorio di Sistemi Polimorfismo Java. Prerequisiti: per la comprensione dell'articolo è necessario conoscere il concetto di Ereditarietà in Java.

INTRODUZIONE ALLA PROGRAMMAZIONE IN C++ QUINTA LEZIONE

Corso di Fondamenti di Informatica Il sistema dei tipi in C++

Il linguaggio C++ Ugo de Liguoro

Object-Oriented Programming

I Template in C++ Corso di Linguaggi di Programmazione ad Oggetti 1. a cura di: Giancarlo Cherchi

Corso di Linguaggi di Programmazione

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

Informatica Ereditarietà Java. Ereditarietà

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

Classi ed Oggetti. Fondamenti di Informatica A-K

Ereditarietà. Ivan Lanese e Cosimo Laneve

Programmazione ad oggetti

Introduzione alla Programmazione in Java attraverso un esempio commentato

Linguaggio C: le funzioni. Visibilità variabili e passaggio parametri

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

I Metodi. Fondamenti di Informatica A-K

Classi e array. Viene ora affrontato un problema di definizione di una classe in cui una variabile d istanza è di tipo array

Introduzione alla programmazione ad oggetti: classi e oggetti

I puntatori e l allocazione dinamica di memoria

Programmazione a Oggetti e JAVA. Prof. B.Buttarazzi A.A. 2012/2013

Programmazione Java Struttura di una classe, Costruttore, Riferimento this

POLITECNICO DI TORINO. Laboratorio di Compilatori Corso di Linguaggi e Traduttori. Esercitazione 5. a.a 2010 / Controllo dei tipi

Esempi al calcolatore su: 1) Costruttori ed ereditarietà 2) Subtyping e polimorfismo

Corso di Linguaggi di Programmazione

Corso di Informatica

Il paradigma OO e le Classi

Richiami su oggetti e OOP

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

Introduzione al linguaggio C Puntatori

Laboratorio di programmazione

Esercizio (o esempio?)

Programmazione orientata agli oggetti La classe Object, metodi e classi final, this. Object

Le strutture. UNIVERSITÀ DEGLI STUDI DEL SANNIO Benevento DING DIPARTIMENTO DI INGEGNERIA

Paradigma a oggetti. Programmazione orientata agli oggetti. Programmazione orientata agli oggetti Paradigma a oggetti 1 / 30

Programmazione ad oggetti. Paradigma a oggetti. Esempio. Esempio L estensione del tipo di dato comporta la ridefinizione del codice

Corso di Linguaggi di Programmazione

ALGORITMI E STRUTTURE DATI

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

Ereditarietà e Polimorfismo

Esempi al calcolatore su: 1) Costruttori ed ereditarietà 2) Subtyping e Polimorfismo

Corso di Programmazione ad oggetti

Allocazione dinamica della memoria

Oggetti. Oggetti e occultamento delle informazioni. Definire oggetti. Oggetti. Definire oggetti la sintassi. Convenzione sugli identificatori

Strutture dati e loro organizzazione. Gabriella Trucco

IL LINGUAGGIO JAVA. Input, Tipi Elementari e Istruzione Condizionale. Primo esempio di un programma Java

Laboratorio di linguaggi

Lettura e scrittura di file di dati input/output

IL LINGUAGGIO JAVA. Input, Tipi Elementari e Istruzione Condizionale. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica

Programmazione Orientata agli Oggetti

Lezione 13 Programmazione ad Oggetti

Esempio Principio di sostituibilità

Transcript:

Politecnico di Milano Dipartimento di Elettronica e Informazione Reti di Connessione e Instradamento AA. 2010-2011 Cenni sulla programmazione a oggetti con il C++ Massimo Tornatore (Autore delle slide: Fabio Martignon) 1

Quando il C classico può creare problemi programmatori diversi che lavorano allo stesso progetto possono dare gli stessi nomi a funzioni diverse è necessario concordare su strutture dati comuni se qualche programmatore modifica anche leggermente una struttura questo può avere impatto su tutti gli altri il livello di astrazione dei pezzi di software rimane sempre lo stesso 2

Vantaggi della programmazione ad oggetti è possibile separare il lavoro dei programmatori dividendo il progetto mediante un architettura logica ad alto livello: Separazione Classi astratte e Classi reali Attributi Privati e Pubblici Polimorfismo Ereditarietà 3

Vantaggi della programmazione ad oggetti una volta definiti i nomi degli oggetti non vi è più possibilità di ambiguità le funzioni che manipolano gli oggetti (funzioni membro) possono avere anche gli stessi nomi basta che siano riferite ad oggetti diversi ad esempio la funzione move(x,y) può servire per spostare un oggetto grafico ed è diversa da oggetto ad oggetto pur avendo lo stesso nome 4

Vantaggi della programmazione ad oggetti le variabili che compongono un oggetto possono essere di tipo private: accessibili solo alle funzioni membro public: accessibili a tutti anche gli operatori possono essere overloaded, ovvero possono essere associati a procedure di elaborazione diverse a seconda del tipo di oggetto (ad esempio: oggetto1+oggetto2=oggetto3) 5

Vantaggi della programmazione ad oggetti ereditarietà: quando un oggetto viene creato può ereditare le caratteristiche di un altro oggetto e a queste aggiungerne di proprie polimorfismo: funzioni membro differenti possono avere lo stesso nome, ma essere distinte sulla base del modo con cui vengono usate o in base all oggetto dell albero di ereditarietà cui si riferiscono 6

Dichiarazione di una classe class point { private: double x; // ascissa double y; // ordinata public: int id; // identificativo }; la parola class definisce un tipo analogamente al tipo struct del C 7

Dichiarazione di una classe l elenco delle variabili e funzioni membro è preceduto dalla parole: private: precede le variabili o funzioni membro che possono essere usate solo da funzioni membro (può essere sottinteso) public: precede le variabili o funzioni membro usabili da tutti protected: precede le variabili o funzioni membro che possono essere usate solo dalle funzioni membro di quella classe o da quelle derivate per ereditarietà 8

Funzioni membro class point { private: double x; // ascissa double y; // ordinata public: int id; // identificativo void move(double xx, double yy); }; void point::move(double xx, double yy) { x=xx; y=yy; } prototipo della funzione corpo della funzione 9

Membri static la parola riservata static, quando applicata ad un membro, indica che quel membro è condiviso da tutti gli oggetti di quella classe in altre parole se si usa una variabile static il suo valore può essere modificato da uno degli oggetti di quella classe e risultare modificato anche per gli altri 10

Funzioni e classi friend anche se delle variabili o funzioni sono private è possibile consentirne l accesso ad alcune classi o funzioni esterne mediante la dichiarazione di friend class point { private: double x; // ascissa double y; // ordinata public: friend class topology; int id; // identificativo void move(double xx, double yy) }; 11

Costruttori e distruttori costruttori e distruttori sono delle speciali funzioni, sempre public, che il programma crea automaticamente quando alloca o dealloca memoria per un oggetto il C++ consente di utilizzarle per eseguire delle operazioni volute dal programmatore al momento delle creazione o distruzione di un oggetto 12

Costruttori e distruttori: esempio class triangle { protected: point* v1;// 1 vertice point* v2;// 2 vertice point* v3;// 3 vertice public: triangle(); ~triangle(); }; costruttore distruttore void set_v1(double x, double y); void set_v2(double x, double y); void set_v3(double x, double y); 13

Costruttori e distruttori: esempio triangle::triangle() { v1=new point(0,0); v2=new point(0,0); v3=new point(0,0); } triangle::~triangle(); delete v1; delete v2; delete v3; } void triangle::set_v1(double x, double y) { v1->move(x,y); } 14

Ereditarietà dopo aver definito una classe è possibile definire nuove classi che abbiano le stesse caratteristiche della prima e che in più aggiungano altre caratteristiche la prima classe è detta classe base le classi derivate sono dette classi figlio passando da classe base a classi figlie, le funzioni o variabili: public restano public protected diventano private private non vengono ereditate 15

Ereditarietà class colored_triangle: public triangle { private: char* color; public: colored_triangle(); ~colored_triangle(); void set_color(char* c); char* get_color(); }; void colored_triangle::set_color(char* c){ color=c; } char* colored_triangle::get_color(){ return color; } 16

Funzioni con lo stesso nome class point { private: double x; // ascissa double y; // ordinata public: point(double X, double Y); point(); ~point(){}; }; point::point(double X, double Y) { x=x; y=y; } point::point() { x=0.0; y=0.0; } 17

Funzioni membro virtual funzioni che nella classe base hanno la dichiarazione preceduta dalla parola chiave virtual possono essere ridefinite (nuovo corpo) nelle classi derivate mantenendo lo stesso nome: virtual void move(double x, double y); una classe si definisce virtuale se ha membri virtuali una funzione si definisce virtuale pura o astratta se gli si assegna il valore zero: virtual void move(double x, double y)=0; una classe che contiene almeno una funzione virtuale pura è detta essa stessa astratta si possono definire puntatori ad una classe astratta ma non possono essere creati oggetti di quel tipo 18

Funzioni membro virtual class object { public: virtual double area()=0; } class triangle : public object { public: virtual double area(); }; class square : public object{ public: virtual double area(); }; 19

Funzioni membro virtual se viene usato un puntatore alla classe base astratta è poi possibile usare il puntatore per puntare ad un oggetto di una classe figlio se viene usata una funzione virtual viene eseguita quella della funzione figlio void print_area(object *o) { double aa=o->area(); printf( area oggetto = %f\n, aa); return; } 20