Corso di Informatica



Documenti analoghi
12 - Introduzione alla Programmazione Orientata agli Oggetti (Object Oriented Programming OOP)

Corso di Informatica

Programmi e Oggetti Software

Programmazione a Oggetti Lezione 10. Ereditarieta

!"#$%&&'()#*%+%+!"#$"',,'()#*%+ -")%*&'&'+'$.)+-$$%&&) !"#$%&&'(%)'*+%",#-%"#.'%&'#/0)-+#12"+3,)4+56#7+#.')8'9

3 - Variabili. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica

Relazioni tra oggetti e classi : Composizione. Relazioni tra oggetti e classi : esempio di Aggregazione. classe contenitore

Indice generale. OOA Analisi Orientata agli Oggetti. Introduzione. Analisi

Oggetti Lezione 3. aspetti generali e definizione di classi I

Parola chiave extends

Funzioni in C. Violetta Lonati

13 - Gestione della Memoria nella Programmazione Orientata agli Oggetti

Object Oriented Programming

Soluzione dell esercizio del 2 Febbraio 2004

Object Oriented Software Design

Modulo 4: Ereditarietà, interfacce e clonazione

Introduzione alla Programmazione Orientata agli Oggetti. Classi, Oggetti e Messaggi

Programmazione II. Lezione 4. Daniele Sgandurra 30/09/2011.

Concetto di Funzione e Procedura METODI in Java

Inizializzazione, Assegnamento e Distruzione di Classi

Fasi di creazione di un programma

Esercitazione n 4. Obiettivi

Tipi primitivi. Ad esempio, il codice seguente dichiara una variabile di tipo intero, le assegna il valore 5 e stampa a schermo il suo contenuto:

Java: Compilatore e Interprete

Corso di Informatica

Introduzione alla programmazione in C

Programmazione a Oggetti Modulo B

Dall Algoritmo al Programma. Prof. Francesco Accarino IIS Altiero Spinelli Sesto San Giovanni

Introduzione alla Progettazione per Componenti

Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica. Programmazione I - corso B a.a prof.

Approccio stratificato

Proff. Fabio Ciao e Raffaele Bortone

Progettazione di Basi di Dati

Gli array. Gli array. Gli array. Classi di memorizzazione per array. Inizializzazione esplicita degli array. Array e puntatori

Alessandra Raffaetà. Basi di Dati

Gestione della memoria centrale

1. I FONDAMENTI DELLA PROGRAMMAZIONE AD OGGETTI

Le variabili. Olga Scotti

Sistemi Operativi MECCANISMI E POLITICHE DI PROTEZIONE. D. Talia - UNICAL. Sistemi Operativi 13.1

MECCANISMI E POLITICHE DI PROTEZIONE 13.1

Prossime lezioni. Dai TDA agli oggetti. Riassunto. Riassunto TDA. Oggi. Stefano Mizzaro 1

Algebra di Boole: Concetti di base. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica

Programmazione A.A Programmazione Orientata agli Oggetti: Lavorare con gli oggetti ( Lezione XXVII)

Introduzione a Classi e Oggetti

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

Archivi e database. Prof. Michele Batocchi A.S. 2013/2014

GESTIONE INFORMATICA DEI DATI AZIENDALI

Soluzione dell esercizio del 12 Febbraio 2004

Come costruire una presentazione. PowerPoint 1. ! PowerPoint permette la realizzazione di presentazioni video ipertestuali, animate e multimediali

MODELLO CLIENT/SERVER. Gianluca Daino Dipartimento di Ingegneria dell Informazione Università degli Studi di Siena

Manuale Amministratore Legalmail Enterprise. Manuale ad uso degli Amministratori del Servizio Legalmail Enterprise

Cosa è un foglio elettronico

Capitolo 3. L applicazione Java Diagrammi ER. 3.1 La finestra iniziale, il menu e la barra pulsanti

Introduzione al linguaggio Java

L informatica INTRODUZIONE. L informatica. Tassonomia: criteri. È la disciplina scientifica che studia

Sistema operativo: Gestione della memoria

Organizzazione degli archivi

UML Diagrammi delle classi. UML Diagramma classi 1

Introduzione all Information Retrieval

Informatica 3. LEZIONE 7: Fondamenti di programmazione orientata agli oggetti (1)

Telerilevamento e GIS Prof. Ing. Giuseppe Mussumeci

Telematica II 17. Esercitazione/Laboratorio 6

Architettura di un calcolatore

Siti web centrati sui dati Architettura MVC-2: i JavaBeans

LINGUAGGI DI PROGRAMMAZIONE

Struttura di un programma Java

GESTIONE DEI PROCESSI

Linguaggi e Paradigmi di Programmazione

Sommario. Definizione di informatica. Definizione di un calcolatore come esecutore. Gli algoritmi.

1. BASI DI DATI: GENERALITÀ

Gestione Turni. Introduzione

Leggere un messaggio. Copyright 2009 Apogeo

Uso di JUnit. Fondamenti di informatica Oggetti e Java. JUnit. Luca Cabibbo. ottobre 2012

Manuale Servizio NEWSLETTER

Architettura MVC-2: i JavaBeans

Il database management system Access

Progettazione : Design Pattern Creazionali

Guida all uso di Java Diagrammi ER

Strumenti di modellazione. Gabriella Trucco

Elementi di UML (7): Diagrammi dei componenti e di deployment

COS È UN LINGUAGGIO? LINGUAGGI DI ALTO LIVELLO LA NOZIONE DI LINGUAGGIO LINGUAGGIO & PROGRAMMA

Corso Analista Programmatore Web PHP Corso Online Analista Programmatore Web PHP

Il Software e Il Sistema Operativo. Prof. Francesco Accarino IIS Altiero Spinelli A.S. 09/10

Corso sul linguaggio SQL

Progettaz. e sviluppo Data Base

Software per Helpdesk

UML Unified Modeling Language

Java Virtual Machine

Prova di Laboratorio di Programmazione

MANUALE DI UTILIZZO: INTRANET PROVINCIA DI POTENZA

BDX 3D-EDITOR (autore: Marco Bedulli) Scopo del software. Caratteristiche fondamentali. Linguaggi utilizzati. Navigazione 3D

Architetture Applicative

Il glossario della Posta Elettronica Certificata (PEC) Diamo una definizione ai termini tecnici relativi al mondo della PEC.

Strumenti per la programmazione

Progettare una basi di dati vuole dire progettare la struttura dei dati e le applicazioni

Java:Struttura di Programma. Fabio Scanu a.s. 2014/2015

La gestione dell input/output da tastiera La gestione dell input/output da file La gestione delle eccezioni

Transcript:

Corso di Informatica Modulo T1 B2 Significato e proprietà della OOP 1 Prerequisiti Concetto ed elementi della comunicazione Allocazione e deallocazione della memoria Compilazione di un programma Spazio logico e spazio fisico 2 1

Introduzione La OOP è caratterizzata dal fatto che un programma si compone di oggetti, ciascuno con i propri attributi e metodi. Un programma produce un interazione tra gli oggetti, attraverso la chiamata di metodi, e quindi si presenta come una comunicazione tra oggetti. Come possono gli oggetti di un programma scambiarsi informazioni? Rispondiamo alla domanda e introduciamo anche le proprietà fondamentali della OOP. 3 Scambio di messaggi Un applicazione OOP consiste in uno scambio di messaggi tra oggetti. Ad esempio, per far visualizzare allo Scrittore la frase Ciao a tutti, è necessario inviargli il seguente messaggio Scrittore.Stampa ( Ciao a tutti ) In Java il seguente messaggio produce la stampa della frase System.out.println ("Ciao a tutti ) Nome dell oggetto Nome dell operazione Parametro 4 2

Scambio di messaggi Un messaggio inviato a un oggetto software specifica una operazione che l oggetto software deve eseguire, completa di tutti i parametri necessari per l esecuzione dell operazione. Quando un oggetto software riceve un messaggio, allora esegue l operazione che gli viene richiesta, in modo parametrico rispetto ai dati specificati. Il processo si rappresenta con lo schema grafico seguente (diagramma di sequenza) println ("Ciao a tutti") System.out println (String frase) 5 Comunicazione tra oggetti Nella programmazione ad oggetti, lo scambio di messaggi che avviene durante l esecuzione di un programma, stabilisce un interazione tra oggetti, caratterizzata dai seguenti elementi della comunicazione: oggetto mittente del messaggio (l oggetto software che invia il messaggio e che potrebbe essere un programma) oggetto destinatario del messaggio (l oggetto software a cui viene inviato il messaggio) messaggio (operazione richiesta al destinatario e scritta mediante una freccia orientata dal mittente al destinatario) con eventuali parametri eventuale oggetto da ottenere in risposta al messaggio 6 3

Comunicazione tra oggetti Nell esecuzione di un programma, le interazioni tra oggetti software sono generalmente composte da molti messaggi Problema: calcolare la radice quadrata del numero 196 e stampare il valore ottenuto. Per risolvere il problema abbiamo bisogno dell oggetto System.out e dell oggetto software Math: L intero processo consiste in uno scambio di due messaggi: un oggetto software (il programma) invia a Math il messaggio sqrt(196). Questo risponde ponendo il valore 14 nella variabile rad. il programma stesso, successivamente, invia a System.out il messaggio println (rad) per visualizzare il valore calcolato 7 L oggetto software Math L oggetto software Math rappresenta un oggetto che ha capacità di calcolo matematico Tra le proprietà di Math ci sono alcune costanti notevoli (attributi). Queste sono alcune delle operazioni di Math (metodi) oggetto classe Math E = 2.71... // base dei logaritmi naturali PI = 3.14... // pi greco double sqrt (double n) double pow (double b, double e) double log (double n) double random()... 8 4

L oggetto software Math L oggetto software Math sa eseguire una operazione che calcola la radice quadrata di un numero: Come sappiamo: l operazione di Math per calcolare la radice quadrata di un numero è sqrt(); l operazione sqrt() ha, come parametro, il numero di cui si vuole calcolare la radice quadrata; ad esempio, per calcolare la radice quadrata di 144 bisogna scrivere rad = Math.sqrt (144). 9 L oggetto software Math Math double sqrt (double n) Quando sull oggetto Math si attiva il metodo sqrt (196): viene calcolata la radice quadrata di 196 (ossia 14) viene posto il valore calcolato nella variabile rad 10 5

Uso di Math e System.out A questo punto possiamo rappresentare un processo formato dalle seguenti istruzioni: rad = Math.sqrt (196); System.out.println (rad); un oggetto software (il programma) chiede a Math di attivare il metodo sqrt(196). Questo risponde ponendo il valore 14 nella variabile rad. il programma stesso, successivamente, chiede a System.out di eseguire il metodo println (rad) per visualizzare il valore calcolato. 11 Uso di Math e System.out Il processo si rappresenta con diagramma di sequenza seguente: Math 1: rad = sqrt(144) double sqrt (double n) System.out 2: println(rad) Abbiamo supposto che l operazione println() dell oggetto System.out sia in grado anche di stampare numeri razionali void println (double x) 12 6

Esempi diagrammi di sequenza ATTIVITA : disegnare i diagrammi di sequenza delle seguenti applicazioni: Calcolo perimetro di un quadrato nota l area A Portare la velocità dell automobile da 60 a 30 Km/h e visualizzarla Calcolare il punteggio del lancio di 2 dadi e visualizzarlo 13 Ciclo di vita di un oggetto Nei linguaggi a oggetti tradizionali (ad es. il C++), il progettista deve saper gestire gli oggetti del programma. Quando un programma crea un oggetto, questo viene memorizzato in una porzione della RAM detta memoria dinamica, diversa dall area dati e dall area programma normalmente usate. Sulla memoria dinamica, il programmatore agisce: allocando spazio per i nuovi oggetti; deallocando lo spazio occupato da oggetti che il programma non usa più. Questa attività fa sì che si possa parlare di ciclo di vita di un oggetto, inteso come periodo di permanenza in memoria. 14 7

Il garbage collector In Java, il problema della gestione della memoria è stato affidato ad un componente della JVM detto garbage collector che rende l allocazione della memoria assolutamente trasparente al programmatore. La JVM: alloca la memoria quando un programma chiede la creazione di un oggetto (operatore new); tiene traccia di tutti gli oggetti e gestisce gli accessi che il programma chiede sull oggetto (accesso agli attributi, esecuzione dei metodi) individua ed elimina dalla memoria, tutti gli oggetti che non vengono più utilizzati. Di solito, l individuazione di questi oggetti viene fatta contando il numero di volte che l oggetto viene referenziato. 15 Binding statico Nella programmazione imperativa, il legame tra una funzione ed il suo codice è prestabilito al momento della compilazione. Pertanto, in esecuzione, l istanza di una funzione, noto il nome della funzione ed i valori dei parametri, produce l esecuzione del codice ad essa univocamente associato Listato In questo caso si parla di associazione anticipata o binding statico (early binding), tecnica tipica dei linguaggi compilati. Codice caricato in memoria 16 8

Binding dinamico In OOP il polimorfismo (una proprietà che consente la presenza nella stessa classe di metodi con stesso nome, ma firma diversa) può non rendere chiaro quale delle forme dello stesso metodo verrà istanziata al momento dell esecuzione. Il codice che verrà effettivamente eseguito, diventa noto soltanto al momento dell esecuzione dell applicazione. Listato In questo caso si parla di associazione posticipata o binding dinamico (late binding), tecnica tipica della programmazione OOP e di molti linguaggi interpretati. Codice caricato in memoria 17 Incapsulamento Il fatto che attributi e metodi siano incorporati all interno della classe fa sì che essa si comporti come una ADT (Abstract Data Type): proprietà e comportamento di un oggetto sono contenuti nell oggetto stesso e sono visibili soltanto al progettista. L utilizzatore ha soltanto accesso alla parte dinamica (metodi) dell oggetto. Il progettista associando nella stessa classe attributi e metodi, fa in modo che l utilizzatore possa agire su essa solo tramite la sua interfaccia. Questa proprietà si chiama incapsulamento 18 9

Incapsulamento In una classe si possono indicare gli specificatori di accesso: public: contiene i membri accessibili anche all esterno; private: non consente l accesso dall esterno della classe. La sezione private consente l occultamento delle informazioni (information hiding) in quanto l accesso a membri privati può avvenire soltanto mediante metodi implementati allo scopo. L information hiding attraverso gli specificatori di accesso, garantisce la protezione dei dati e facilita il riuso del software ed è consentita dall incapsulamento 19 Incapsulamento L incapsulamento è la prima proprietà fondamentale della OOP INCAPSULAMENTO attributi Vantaggi protezione dei dati astrazione sui dati astrazione sulle procedure mascheramento dell informazione indipendenza degli oggetti riutilizzo del software metodi 20 10

Ereditarietà Superclasse La classe Motoveicolo, contiene dei membri che sicuramente faranno parte anche della classe Autovettura. Questo vuol dire che potremmo ottenere la classe Autovettura per derivazione dalla classe Motoveicolo. L ereditarietà è la seconda proprietà fondamentale della OOP. Si possono aggiungere membri o ridefinire membri: quindi, la sottoclasse diventa una specializzazione della superclasse. Motoveicolo int cilindrata; float larghezza; float lunghezza; int peso; int posti; accendimotore (); spegnimotore ();. Autovettura boolean vetrielettrici; boolean tergilunotto; void chiudiporte();. Sottoclasse 21 Ereditarietà L ereditarietà è la seconda proprietà fondamentale della OOP Gerarchia di classi classe base EREDITARIETA Vantaggi riutilizzo del software espansione del software ridefinizione del software classe derivata classe derivata classe derivata classe derivata 22 11

Polimorfismo Dalla classe Motoveicolo deriviamo la classe Autobus Il modo di chiusura delle porte nell automobile è diverso da quello in un autobus, per cui è necessario fornire nella classe Autobus un metodo di chiusura delle porte di nome chiudiporte() che ha lo stesso nome di quello della classe Autovettura. Questa proprietà si chiama polimorfismo. Gerarchia di classi 23 Polimorfismo Il polimorfismo è la terza proprietà fondamentale della OOP Metodi omonimi nella stessa classe (overloading) POLIMORFISMO Vantaggi astrazione procedurale riutilizzo del software Metodi omonimi nella stessa gerarchia (overriding) 24 12

Conclusioni La OOP presenta numerosi vantaggi indipendenza tra oggetti (grazie all incapsulamento) che rende possibile la riusabilità del software con un costo minimo di programmazione la protezione dei dati (information hiding) estensibilità del codice (proprietà detta ereditarietà) possibilità che lo stesso codice, in situazioni diverse, produca effetti diversi (proprietà detta polimorfismo) Per brevità d ora in poi chiameremo semplicemente oggetto un qualunque oggetto software 25 Argomenti Scambio di messaggi Comunicazione tra oggetti L oggetto software Math Uso di Math e System.out Esempi diagrammi di sequenza Ciclo di vita di un oggetto Il garbage collector Binding statico Binding dinamico Incapsulamento Ereditarietà Polimorfismo Conclusioni 26 13

Altre fonti di informazione P.Gallo, F.Salerno Informatica Generale 1, ed. Minerva Italica M.Romagnoli, P.Ventura Linguaggio C/C++, ed. Petrini A. Garavaglia, F.Petracchi, S.Forte Strutture dati e programmazione per oggetti, ed. Masson Scuola 27 14