OOP Object Oriented Programming Programmazione Orientata agli Oggetti

Slides:



Advertisements
Presentazioni simili
Il paradigma Object Oriented
Advertisements

Linguaggio C e C++.
Programmazione ad oggetti
Progettazione dei Sistemi Interattivi (A.A. 2004/05) - Lezione 2 1 Progettazione e Sviluppo di Software ad Oggetti 4 OBJECT-ORIENTED ANALYSIS Processo.
Gestione della memoria centrale
Recupero debito quarto anno Primo incontro
Informatica Recupero debito quarto anno Terzo incontro.
Evoluzione dei linguaggi di programmazione
Procedure e funzioni A. Ferrari.
PHP.
Programmazione object oriented in C++
Hard disk.
Classi ed Oggetti in Java (Cenni). Richiami Ruolo delle Classi in Java Oggetti.
Le gerarchie di tipi.
Metodologie di Programmazione = decomposizione basata su astrazioni
4 – Progettazione – Introduzione e Modello E-R
©Carlo Tasso 1999 Object Oriented Programming Slide 1 OO Analysis Vs. OO Design OOA – Object Oriented Analysis. –Specifica COSA, IN QUALE CONTESTO il sistema.
Calcolatori Elettronici III
1 Programmazione ad oggetti in Java E.Mumolo, DEEI
1 Corso di Laurea in Biotecnologie Informatica (Programmazione) Introduzione a JAVA Anno Accademico 2009/2010.
Corso di Laurea in Biotecnologie Informatica (Programmazione)
Corso di Informatica (Programmazione)
Basi di dati. Vantaggi degli archivi digitali Risparmio di spazio: sono facilmente trasferibili e duplicabili Risparmio di tempo: si può accedere ai dati.
Oggetti e dati primitivi Programmazione Corso di laurea in Informatica.
Type int_stack = struct { int top; int P[100]; } int_stack creapila() { int_stack s = new int_stack; s.top = 0; return s; } int_stack push(int_stack s,
Primi Elementi di Programmazione in C++
Le classi Definizione di classe Attributi e metodi di una classe Costruttori e distruttori Private e public Funzioni friend Il puntatore this.
Progettazione di una base di dati
Java base IV: Java e la programmazione O.O.
AN FI Un denominatoe comune Comandi u notazioni che esprimono azioni che, una volta eseguite, comportano una modifica permanente dello stato interno.
FUNZIONI... Una funzione permette di dare un nome a una espressione rendendola parametrica float f(){ return * sin(0.75); } float f1(int x) { return.
Programmazione in Java (8)
Analisi (Analista) Progettazione (Progettista) Sviluppo o Traduzione (Sviluppatore) Documentazione.
I Metodi in Java Il termine "metodo" è sinonimo di "azione". Quindi, affinché un programma esegua qualche istruzione, deve contenere metodi.
Introduzione alla programmazione Object Oriented
Un esempio: Calcolo della potenza n-esima di un numero reale
Enumerazioni e Classi 1. Enumerazioni Permettono di definire nuovi tipi che consistono in un insieme di valori costanti (ognuno con un nome) – Migliorano.
ISTITUTO STATALE DI ISTRUZIONE SUPERIORE F. ENRIQUES CORSO JAVA – PROVA INTERMEDIA DEL 12 MARZO 2007 NOME: COGNOME: ________________________________________________________________________________.
Dati e DBMS DBMS relazionali SQL Progettazione di una base di dati Programma del Corso.
I nomi in Java F. Bombi 18 novembre novembre 2003.
Programma di Informatica Classi Prime
Fondamenti di Informatica 2 Ingegneria Informatica Docente: Giovanni Macchia a.a
Oggetti in C# Lezione 1 Classi ed istanze Oggetti in C# - Lezione 1.
Programmazione a oggetti
CORSO DI PROGRAMMAZIONE II Lezione 22
I processi.
Programmazione ad oggetti
Lezione 1 Panoramica sui paradigmi di programmazione
I DBMS BASI DI DATI (DATABASE) Insieme organizzato di dati utilizzati
Incapsulamento e information hiding
Programmazione ad oggetti
Ereditarieta’. Contenuti Introduciamo un meccanismo fondamentale di Java: l’ereditarieta’ Permette di estendere classi gia’ definite (ovvero di definire.
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
TW Asp - Active Server Pages Nicola Gessa. TW Nicola Gessa Introduzione n Con l’acronimo ASP (Active Server Pages) si identifica NON un linguaggio di.
Microsoft Access Chiavi, struttura delle tabelle.
Progettazione di una base di dati Ciclo di vita di un sistema informativo Studio di fattibilità definisce le varie alternative possibili, i relativi costi.
Progettare una classe 21 Febbraio La classe BankAccount Vogliamo realizzare una classe i cui oggetti sono dei semplici conti bancari. * Identifichiamo.
1 Metodologie di Programmazione = decomposizione basata su astrazioni.
La Programmazione ad Oggetti
1. 2 Introduzione alla programmazione ad oggetti Gli strumenti di programmazione finora mostrati sono solo una piccola parte della strumentazione necessaria.
La programmazione ad oggetti
“ Pseudocodice ” Un programma per computer lavorerà su in insieme di “ variabili ” contenenti i dati del problema, soluzioni intermedie, soluzioni finali.
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:

OOP Object Oriented Programming Programmazione Orientata agli Oggetti INSIEME DI METODOLOGIE BASATE SUL CONCETTO DI OGGETTO

Cos’è un Oggetto? Gli oggetti sono la chiave per comprendere la tecnologia OO. Se ci guardiamo attorno vedremo molti esempi di Oggetti nel mondo reale: un masterizzatore, una mela, un cane, una televisione, una bicicletta …… Gli oggetti del mondo reale hanno 2 proprietà: hanno delle caratteristiche compiono delle azioni

Es. Masterizzatore Marca Velocità di scrittura su supporti CD-R Velocità di scrittura su supporti CD-RW Velocità di lettura Interfaccia Dimensione del buffer dati CARATTERISTICHE (STATO) Scrivi su CD Scrivi su DVD Leggi CD Espelli CD AZIONI

CARATTERISTICHE (STATO) AZIONI Es. bicicletta Marca Colore Velocità (es. 12 km/h) CARATTERISTICHE (STATO) Frenare Accelerare AZIONI

Azioni: sono le cose che un oggetto è in grado di fare Caratteristiche: sono i dati che le azioni stesse possono utilizzare per eseguire le operazioni che da esse ci si aspetta. In OOP L’oggetto: modello astratto più naturale per descrivere la realtà Le proprietà o attributi: sono le caratteristiche di un oggetto I metodi: sono le azioni/operazioni che l’oggetto può compiere

Concetti chiave Es. bicicletta ATTRIBUTI : insieme dei valori delle sue proprietà in un determinato istante di tempo. Se cambia anche una sola proprietà di un oggetto, il suo stato varierà di conseguenza. COMPORTAMENTO (behavior): insieme dei metodi che un oggetto è in grado di eseguire INTERFACCIA: insieme dei metodi accessibili dall’esterno Es. bicicletta attributi: velocità corrente, rapporto corrente, pedalata Comportamento/metodi: frena, accelera, cambia rapporto

Che cos’è una classe? Nel mondo reale si trovano molti oggetti dello stesso tipo. Vi sono ad esempio, i masterizzatori in grado di scrivere su CD e DVD o quelli che scrivono solo su CD. Tutti però sono in grado di eseguire la scrittura di dati o file multimediali su CD e tutti hanno alcune proprietà comuni (Marca, Velocità di scrittura su supporti CD-R, …) Diremo allora che più oggetti software che hanno le stesse proprietà e gli stessi metodi possono essere raggruppati in una classe ben definita di oggetti: nel nostro caso particolare, nella classe masterizzatore

Riassumendo:CLASSE - terminologia costrutto base per definire tipi di dati astratti member variables: descrivono i dati contenuti nel tipo di dato astratto (STATO) member functions: definiscono le OPERAZIONI possibili sul tipo di dato Solo alcune delle variabili ed alcune delle operazioni verranno rese visibili all'esterno(interfaccia) Invisibilità della realizzazione del servizio

QUINDI… Un’istanza (oggetto) è un’entità concreta, che esiste nel tempo (viene costruita e poi distrutta) e nello spazio (occupa memoria) Una classe è il modello astratto che rappresenta le proprietà comuni (struttura e comportamento) ad un insieme di oggetti concreti (istanze), cioè la classe rappresenta un tipo di cui un oggetto è una sua istanza

DEFINIZIONE DI UNA CLASSE Si tratta di un’estensione della struct class NomeClasse{ // attributi tipo1 attributo1; tipo2 attributo2; ….. // metodi NB. Presenza di funzioni tipo1 Funzione1(); tipo2 Funzione2(); }

Dichiarazione di un oggetto NomeClasse NomeOggetto; Es. MiaBicicletta di classe Bicicletta Per accedere ad un attributo e ai metodi: NomeOggetto.NomeAttributo NomeOggetto.NomeFunzione

Esempio class Rettangolo{ //attributi float base,altezza; public: (vedi slide successive) //metodi void Assegna(float b,float h){ base=b; altezza=h; } float Area(){ return base*altezza; };

Una volta definita la classe si può definire l’oggetto ad esempio tovaglia tramite l’istruzione: Rettangolo tovaglia;

Il prototipo e la dichiarazione delle funzioni in una classe Invece di scrivere all’interno di una classe i metodi sotto forma di funzione, si possono scrivere qui solo i prototipi e le funzioni vengono dichiarate fuori Dichiarazione delle funzioni appartenenti a una classe: tipo NomeClasse::Funzione{ //attenzione a :: ….. return; }

A confronto class Rettangolo{ //attributi float base,altezza; public: (vedi slide successive) //metodi void Assegna(float b,float h){ base=b; altezza=h; } float Area(){ return base*altezza; }; class Rettangolo{ //attributi float base,altezza; public: (vedi slide successive) //metodi void Assegna(float b,float h); float Area(); }; void Rettangolo::Assegna(float b, float h){ base=b; altezza=h; return; } void Rettangolo::Area(){ return base*altezza;

N.B: il codice dei metodi di una classe può essere definito in un file separato: una valida consuetudine prevede che la classe sia definita in un file di intestazione con estensione .H e implementata in una file di codice con estensione CPP e che entrambi i file abbiano come nome il nome della classe stessa.

Visibilità dei membri( attributi e metodi di una classe ) Public vs private public : deve essere specificata quando si vuole che i membri specificati siano disponibili anche al di fuori della classe di appartenenza private: (di default) sta ad indicare che tutti i membri che seguono, siano essi attributi o metodi, non possono essere visti al di fuori della classe

I concetti base della OOP Astrazione Incapsulamento Ereditarietà Polimorfismo

ASTRAZIONE Processo logico che porta alla creazione di modelli (classi) generici (senza entrare nella situazione specifica) a partire dai quali verranno costruiti oggetti via via più specializzati. Es: Progetto di una casa: Se cerchiamo una definizione generica della casa, possiamo dire che ogni casa è formata da muri che ne delimitano il perimetro, è coperta da un tetto che ne delimita l'altezza, ha una porta di ingresso ed ha zero o più finestre. Questa definizione di casa costituisce la classe casa. Questo è un modello astratto in quanto si applica sia ad una capanna, che alla villetta con quattro stanze e allo stesso modo si applica all'Empire State Building o a Buckingham Palace. Da questa classe casa potranno discendere varie classi eredi: casa di legno casa di mattoni casa di pietra

Incapsulamento o Information Hiding Incapsulamento: è la proprietà per cui un oggetto contiene ("incapsula") al suo interno le proprietà e i metodi per accedere agli stessi dati. E’ una tecnica utilizzata per nascondere una parte di un programma, in modo da proteggere le altre parti del programma da eventuali cambiamenti L'incapsulamento è realizzato per mezzo delle istruzioni: – Private: le funzioni e le variabili definite private NON sono accessibili all'esterno della classe. – Public: le funzioni e le variabili definite pubbliche sono accessibili all'esterno della classe. L'oggetto quindi diviene una black-box di cui, attraverso l'Interfaccia, sappiamo cosa fa e come interagisce con l'esterno ma non come lo fa. I vantaggi principali sono: robustezza indipendenza riusabilità degli oggetti

Ereditarietà (INHERITANCE) E’ un meccanismo che permette di creare nuovi oggetti a partire da oggetti già definiti. Ciò si basa sul fatto che diversi tipi di oggetti hanno spesso una certa quantità di cose in comune fra loro. Es. In un sistema bancario esistono varie tipologie di conto (es. conti correnti bancario, libretti di risparmio, carte di credito e certificati di deposito.) Tutte queste differenti tipologie di conto hanno in comune alcune caratteristiche: un numero di conto, un tasso di interesse ed un sottoscrittore. Ognuno di questi conti possiede però anche delle specifiche caratteristiche, ad es. la carta di credito avrà un limite di spesa mentre il conto corrente bancario avrà uno o più libretti di assegni associati.

Certificati di deposito … In OOP, per rappresentare tale esempio si definisce un oggetto padre Conto che ingloba tutte le caratteristiche comuni ad ogni conto, e da esso, poi, si derivano i 4 oggetti figli: carta di credito,… Vantaggi Maggiore facilità nella manutenzione del software Se qualcosa dovesse variare per l'intera classe Conto, sarà sufficiente modificare soltanto l'oggetto padre per consentire che tutti gli oggetti figli ereditino la nuova caratteristica. Conto Carta di Credito Libretti di risparmio Carte di credito Certificati di deposito

Quindi grazie all’ereditarietà possiamo creare una nuova classe che estende un classe già esistente Su questa classe possiamo: Introdurre nuovi comportamenti Modificare i comportamenti esistenti Attenzione: la classe originale non viene assolutamente modificata. Le modifiche vengono fatte sulla classe derivata E’ un concetto del tutto nuovo: non esiste nulla di simile nella programmazione procedurale

Prima le alternative erano: Scrivere una nuova classe: fattibile ma è un peccato rifare tutto da zero Modificare quella esistente, ma se facciamo un errore potremmo mettere in crisi tutti i programmi che la usano già.

POLIMORFISMO Un aspetto fondamentale della programmazione oggetti è il polimorfismo. Possiamo inserire nella classe dei metodi che hanno lo stesso nome (e gli stessi parametri) di metodi già esistenti nella classe padre. Il fatto che siano gli stessi di quelli esistenti causa il comportamento di ridefinizione, ovvero di sostituzione del vecchio comportamento con uno nuovo. Vantaggio: facilità di manutenzione del codice Es. costruiamo un sistema software in grado di disegnare delle figure geometriche.

Esempio Definiamo una classe padre chiamata FiguraGeometrica Deriviamo da questa tutte le classi che si occupano della gestione di una figura geometrica ben precisa. Quando l'utente desidera rappresentare una di tali figure, egli esegue una determinata azione che produce l'invio al sistema di un messaggio che, a sua volta, scatena l'invocazione del metodo disegnaFigura della classe FiguraGeometrica.. Con l'utilizzo del polimorfismo, il sistema è in grado di capire autonomamente quale figura geometrica debba essere disegnata ed invocarne direttamente il metodo disegnaFigura appartenente alla classe figlia coinvolta. Esempio

Concetti chiave STATO di un oggetto: insieme dei valori delle sue proprietà in un determinato istante di tempo. Se cambia anche una sola proprietà di un oggetto, il suo stato varierà di conseguenza. COMPORTAMENTO (behavior): insieme dei metodi che un oggetto è in grado di eseguire INTERFACCIA: insieme dei metodi attraverso i quali il mondo esterno ha accesso ai dati Es. mia bicicletta stato: velocità corrente, rapporto corrente, pedalata comportamento: frena, accelera, cambia rapporto

I messaggi Un oggetto non manipola mai direttamente i dati interni (le proprietà) di un altro oggetto ma ogni tipo di comunicazione tra oggetti deve sempre essere gestita tramite l'uso di messaggi, ovvero tramite le chiamate ai metodi che un oggetto espone all'esterno In altre parole un messaggio è una sollecitazione che proviene all’oggetto dall’esterno e che scatena l’esecuzione di un azione, ovvero di un metodo Es: l'oggetto masterizzatore esegue il metodo Scrivi_CD, perché un altro oggetto (per esempio, il controller) gli avrà precedentemente inviato una simile richiesta sollecitandone l'azione di scrittura.

Alcune volte l’oggetto B necessità di maggiori informazioni per sapere cosa fare esattamente Per esempio: quando si vuole cambiare marcia, devo indicare quale inserire Queste informazioni sono passate tramite parametri

In conclusione La programmazione ad oggetti rappresenta quindi un modo diverso di pensare le applicazioni. Ogni applicazione è composta da un certo numero di oggetti, ognuno dei quali è indipendente dagli altri ma comunica con gli altri attraverso lo scambio di messaggi. Vantaggio: grande flessibilità e enorme potenza di utilizzo Si costruiscono i componenti una sola volta e si possono riutilizzarli successivamente ogniqualvolta ce ne sia bisogno.

Altri Vantaggi Lo scrivere codice all’interno di separati oggetti software fornisce un elevato numero di benefici: Facilità di lettura e di comprensione: Il codice sorgente di un oggetto può essere letto e compreso anche da persone diverse dall’autore Manutenzione del programma nel tempo per correzioni o miglioramenti Riutilizzo del codice: Se esiste già un oggetto (forse scritto da un altro sviluppatore), possiamo usare questo oggetto nel nostro programma. Pluggability and debugging ease: Se un particolare oggetto crea dei problemi si potrà rimuovere con facilità e sostituirlo con un altro. Simile alla sostituzione di parti meccaniche. 1 2 3 4

N.B: pluggability Gli Anglosassoni usano questo termine molto efficace per descrivere l’insieme di proprietà che consentono di costruire un nuovo sistema, prendendo alcune componenti già esistenti e mettendole insieme. Il termine deriva da plug, la normale spina elettrica: le spine però vanno infilate nelle prese. La metafora suggerisce quindi che l’insieme delle caratteristiche che rendono il componenete pluggabile, non dipendono solo dal componente stesso, ma è necessario che esso svolga una funzione ben precisa all’interno del sistema. Un aspetto ancora più importante è la sua compatibilità con gli altri componenti.

I LINGUAGGI IMPERATIVI SONO BASATI SU I LINGUAGGI AD OGGETTI SONO BASATI SU Strutture dati (come i dati sono memorizzati: vettori, matrici, liste, alberi, …) Istruzioni (cosa deve fare il calcolatore: calcola espressioni, esegui test, leggi dati …) Il problema è visto dal “punto di vista” della macchina Il concetto di oggetto (entità logica in grado di effettuare determinate operazioni) Come gli oggetti interagiscono fra di loro Il problema è visto dal punto di vista della logica sottostante

Linguaggi ad oggetti Linguaggi ad OGGETTI PURI: le classi e gli oggetti sono le uniche astrazioni del linguaggio, cioè tutte le entità del linguaggio sono oggetti che appartengono a qualche classe es. java Linguaggi ad OGGETTI IBRIDIi: aggiungono l’astrazione di classe e oggetto ai costrutti tradizionali della programmazione, ed esistono oggetti es. C++, Object Pascal, Visual Basic