Incapsulamento e information hiding

Slides:



Advertisements
Presentazioni simili
Programmazione ad oggetti
Advertisements

Progettazione dei Sistemi Interattivi (A.A. 2004/05) - Lezione 2 1 Progettazione e Sviluppo di Software ad Oggetti 4 OBJECT-ORIENTED ANALYSIS Processo.
Funzioni e procedure Ogni linguaggio di programmazione ad alto livello mette a disposizione del programmatore questi strumenti, ed il C non è da meno!
Introduzione al C++ e alla programmazione ad oggetti Corso Specialistico CNTC Bologna, febbraio 2001 Andrea Dell’Acqua e Claudio Grandi.
Scomposizione funzionale
© 2007 SEI-Società Editrice Internazionale, Apogeo Unità B1 Le basi della programmazione a oggetti.
Unified Modeling Language
Costruttori e Distruttori
Recupero debito quarto anno Primo incontro
Informatica Recupero debito quarto anno Terzo incontro.
Recupero debito quarto anno Primo incontro Esercizi
1 Semantica Operazionale di un frammento di Java: lo stato.
Classi ed Oggetti in Java (Cenni). Richiami Ruolo delle Classi in Java Oggetti.
Le gerarchie di tipi.
Metodologie di Programmazione = decomposizione basata su astrazioni
Introduzione al linguaggio C
Fondamenti di Informatica
esponente del radicando
1 Programmazione ad oggetti in Java E.Mumolo, DEEI
1 Corso di Informatica (Programmazione) Lezione 12 (19 novembre 2008) Programmazione in Java: i metodi statici.
Corso di Laurea in Biotecnologie Informatica (Programmazione)
1 Lezione XIII Lu 17-Nov-2005 Programmare le classi.
La Riflessione computazione Elisa Ferrando. Cos è la Riflessione La Riflessione Sistema riflessivo Sistema computazionale.
Programmazione Corso di laurea in Informatica
Oggetti e dati primitivi Programmazione Corso di laurea in Informatica.
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.
Programmazione in Java Claudia Raibulet
Elementi di programmazione ad oggetti a. a. 2009/2010 Corso di Laurea Magistrale in Ingegneria Elettronica Docente: Mauro Mazzieri, Dipartimento di Ingegneria.
Javascript 6 Funzioni. Una funzione sarà eseguita in risposta ad un evento o ad una chiamata diretta. Le funzioni possono essere inserite comodamente.
Programmazione in Java (8)
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
ISTITUTO STATALE DI ISTRUZIONE SUPERIORE F. ENRIQUES CORSO JAVA – PROVA INTERMEDIA DEL 12 MARZO 2007 NOME: COGNOME: ________________________________________________________________________________.
Enumerazioni e Classi 1. Enumerazioni Permettono di definire nuovi tipi che consistono in un insieme di valori costanti (ognuno con un nome) – Migliorano.
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: ________________________________________________________________________________.
Fondamenti di Informatica 2 Ingegneria Informatica Docente: Giovanni Macchia a.a
1 FONDAMENTI DI INFORMATICA II Ingegneria Gestionale a.a ° Ciclo Approfondimenti sulle Classi.
1 FONDAMENTI DI INFORMATICA II Ingegneria Gestionale a.a ° Ciclo Polimorfismo.
Oggetti in C# Lezione 1 Classi ed istanze Oggetti in C# - Lezione 1.
Corso di Algoritmi e Strutture Dati con Laboratorio A.A. 2014/15 Lezione 3.
Programmazione a oggetti
Una "vera" classe.. ..un esempio pratico: la calcolatrice
Ereditarietà e polimorfismo
Programmazione ad oggetti
Lezione 1 Panoramica sui paradigmi di programmazione
Oggetti in C# Lezione 2 Metodi e Static Oggetti in C# - Lezione 2.
Programmazione ad oggetti
Diagramma delle Classi
1 Osservazioni Generali Struttura di programma Gerarchia di classi: overloading, overriding, e dispatching Analisi ed esecuzione Modificabilità e condivisione.
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.
Astrazione di dati Dati Astratti: cosa e perchè Dati Astratti: due meccanismi differenti Dati Astratti: due meccanismi differenti Astrazione e incapsulamento.
Fondamenti di Informatica 2 Ingegneria Informatica Docente: Giovanni Macchia a.a
OBJECT ORIENTED DATABASE introduzione. OGGETTO Ha due componenti:  stato: valore di alcune variabili (variabili di istanza)  comportamento: insieme.
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.
Progettare una classe 21 Febbraio La classe BankAccount Vogliamo realizzare una classe i cui oggetti sono dei semplici conti bancari. * Identifichiamo.
Classi ed Oggetti in Java (Cenni). Richiami Cenni sull’ Implementazione, Macchine Astratte, Compilatore, Interprete Ruolo delle Classi in Java Oggetti.
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.
La Programmazione ad Oggetti
Attività 1 Introduzione alla OOP
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Librerie… Marco D. Santambrogio – Ver. aggiornata al 20 Luglio 2015.
La programmazione ad oggetti
1 Metodo I metodi sono uno strumento che i programmatori usano per strutturare i programmi, sia per renderli più facili da capire che per permettere il.
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:

Incapsulamento e information hiding

Information hiding e Incapsulamento Interfaccia Definizione dei messaggi (metodi) possibili Unico punto di accesso per l’utente all’oggetto Implementazione Realizzazione dell’azione corrispondente a un messaggio Nascosta all’utente Dichiarazione di variabili private (attributi) che definiscono lo stato dell’oggetto

Rappresentazione (a capsula) di un oggetto Messaggio Metodo Attributo Attributo Attributo

Livelli di visibilità per gli attributi Attraverso la visibilità si stabilisce se l’attributo è accessibile da altre classi: publico l’attributo è accessibile da qualsiasi altra classe; privato l’attributo è visibile solo all’interno della classe, quindi nessun’altra può variarne il valore; protected (Java) l’attributo è accessibile dalle classi che appartengono alla stessa libreria e dalle sottoclassi.

Livelli di visibilità dei metodi Per la visibilità dei metodi valgono le stesse regole poste per gli attributi publico il metodo può essere richiamato da qualsiasi altra classe; privato il metodo può essere richiamato solo all’interno della classe in cui è stato definito ; protected (Java) il metodo è visibile solo dalle sottoclassi. Solitamente i metodi vengono definiti publici

Information hiding Marca Colore Cilindrata StatoMotore MostraStato() AvviaMotore() Rifornimento() AvviaMotore() Messaggi provenienti da oggetti chiamanti Metodi ed attributi dichiarati pubblici Serbatoio CapacitàMax SpiaOlio SpiaFreni TuttoOk() Metodi ed attributi dichiarati privati

Attributi e metodi di classe Definendo un attributo STATICO si avrà una copia sola di quell’attributo per tutti gli oggetti di quella classe. Solitamente gli attributi non vengono dichiarati statici, quindi si ha per ogni oggetto una copia. Un attributo statico, per cui, viene condiviso da tutte le istanze della classe. Esempi: Nella classe Motocicletta quando si vuole indicare che tutte le motociclette hanno 2 ruote. STATICO NumRuote  2 Nella classe Cerchio, il valore di Pigreco (3,14…) è unico in tutte le istanze. STATICO PI  3,14

Attributi e metodi di classe I metodi statici vengono richiamati senza dover creare un oggetto di classe, infatti per invocarlo basta utilizzare il nome della classe e non dell’oggetto <NomeClasse>.<MetodoStatico> Esempio: Nella classe calcolatrice i metodi Addizione(), Sottrai(), Moltiplica() e Dividi() CLASSE Calcolatrice INIZIO PUBBLICO STATICO Addiziona(Op1:REALE; Op2: REALE): REALE RITORNO( Op1 + Op2) FINE ….

Attributi e metodi di classe MAIN() Op1, Op2: REALE Scelta: INTERO Esci : BOOLEANO INIZIO SCRIVI("-------MENU-------") SCRIVI("Inserisci il primo operando") LEGGI(Op1) SCRIVI("Inserisci il secondo operando") LEGGI(Op2) EsciFalso MENTRE(NOT Esci) ESEGUI SCRIVI("MENU SCELTA OPERAZIONI") SCRIVI("Digita 1 per effettuare l’addizione ") SCRIVI("Digita 2 per effettuare la differenza ") SCRIVI("Digita 3 per effettuare la moltiplicazione ") SCRIVI("Digita 4 per effettuare la divisione ") SCRIVI("Digita 5 per terminare") LEGGI(Scelta) NEL CASO CHE Scelta SIA 1:Calcolatrice.Addiziona(Op1, Op2) 2:Calcolatrice.Sottrai(Op1, Op2) 3:Calcolatrice.Moltiplica(Op1, Op2) 4:Calcolatrice.Dividi(Op1, Op2) 5:Esci  Vero FINECASO FINEMENTRE FINE

Oggetti come attributi: aggregazioni tra oggetti Esiste un tipo di relazione tra classi: la relazione di “aggregazione”. E’ questa una relazione tra oggetti poichè serve per rappresentare gerarchie di oggetti relativi alle classi in relazione. In tali gerarchie ogni oggetto si presenta come aggregazione nel senso di “composizione” di altri oggetti. Una classe può “contenere” come attributi oggetti di altre classi

Oggetti come attributi: aggregazioni tra oggetti CLASSE Motocicletta INIZIO Motore: MTR Tl: Telaio RTA: RuotaAnteriore RTP : RuotaPosteriore …….. FINE

Oggetti come attributi: aggregazioni tra oggetti 1 relazione di aggregazione Motocicletta Processo di aggregazione Processo di scomposizione molteplicità 1 1 1 1 1 1 1 1 Motore Telaio RuotaAnteriore RuotaPosteriore

Oggetti come parametri Vediamo il costruttore della classe Motocicletta Motocicletta(pMTR: Motore, pTelaio:Telaio, pRTA:RuotaAnteriore, pRTP:RuotaPosteriore ) INIZIO MTR Nuovo Motore() TL  Nuovo Telaio() RTA  Nuovo RuotaAnteriore() RTP  Nuovo RuotaPosteriore() FINE

Vantaggi dei programmi a oggetti La programmazione ad oggetti consente di: Ridurre la dipendenza del codice di alto livello dalla rappresentazione dei dati l’accesso ai dati è mediato da un’interfaccia Riutilizzare del codice di alto livello definendo opportune classi astratte Sviluppare moduli indipendenti l’uno dall’altro I clienti che dipendono da interfacce che non dipendono dalla loro implementazione Le dipendenze da classi astratte sono più “leggere”

Difetti del software non mantenibile Rigidità Non può essere cambiato con facilità Non può essere stimato l’impatto di una modifica Fragilità Una modifica singola causa una cascata di modifiche successive I bachi sorgono in aree concettualmente separate dalle aree dove sono avvenute le modifiche Non riusabilità Esistono molte interdipendenze, quindi non è possibile estrarre parti che potrebbero essere comuni