Introduzione alla Programmazione ad. Oggetti (OOP)



Documenti analoghi
Linguaggi e Paradigmi di Programmazione

Appunti del corso di Informatica 1 (IN110 Fondamenti) 4 Linguaggi di programmazione

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

Programmi. Algoritmi scritti in un linguaggio di programmazione

Object Oriented Programming

Linguaggi di programmazione

Strumenti di modellazione. Gabriella Trucco

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

EVOLUZIONE DEI LINGUAGGI DI ALTO LIVELLO

Approccio stratificato

Linguaggi per COMUNICARE. Il linguaggio è un sistema codificato di segni che consente la comunicazione, intesa come scambio di informazioni

Modellazione dei dati in UML

Fondamenti di Informatica PROBLEMI E ALGORITMI. Fondamenti di Informatica - D. Talia - UNICAL 1

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

Fondamenti di Informatica Ingegneria Clinica Lezione 16/10/2009. Prof. Raffaele Nicolussi

Il calcolatore oggi : UN SISTEMA DI ELABORAZIONE

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

I casi d uso corrispondono ai compiti che l attore (che può essere una persona fisica e non) può svolgere.

Informatica 3. Informatica 3. LEZIONE 10: Introduzione agli algoritmi e alle strutture dati. Lezione 10 - Modulo 1. Importanza delle strutture dati

Dispensa di Informatica I.1

Il software impiegato su un computer si distingue in: Sistema Operativo Compilatori per produrre programmi

Programma del Corso. Dati e DBMS SQL. Progettazione di una. Normalizzazione

ISTITUTO TECNICO ECONOMICO MOSSOTTI

1. I FONDAMENTI DELLA PROGRAMMAZIONE AD OGGETTI

Programmazione in Java e gestione della grafica (I modulo) Lezione 1: Presentazione corso

Introduzione alle tecnologie informatiche. Strumenti mentali per il futuro

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

Corso di INFORMATICA 2 (Matematica e Applicazioni)

Corso di Sistemi di Elaborazione delle informazioni

Programmi e Oggetti Software

Corso di Informatica

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

Fasi di creazione di un programma

Architetture Applicative

Introduzione Ai Data Bases. Prof. Francesco Accarino IIS Altiero Spinelli Via Leopardi 132 Sesto San giovanni

La Macchina Virtuale

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

MECCANISMI E POLITICHE DI PROTEZIONE 13.1

Programmazione per Bioinformatica Il Calcolatore e la Programmazione. Dr Damiano Macedonio Università di Verona

Appunti sulla Macchina di Turing. Macchina di Turing

La gestione di un calcolatore. Sistemi Operativi primo modulo Introduzione. Sistema operativo (2) Sistema operativo (1)

Progettazione concettuale

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

FONDAMENTI di INFORMATICA L. Mezzalira

UML Unified Modeling Language

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

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

LINGUAGGI DI PROGRAMMAZIONE

Soluzione dell esercizio del 2 Febbraio 2004

Contenuti. Visione macroscopica Hardware Software. 1 Introduzione. 2 Rappresentazione dell informazione. 3 Architettura del calcolatore

Testo Esercizio. Un modello è ragionevole quando contiene queste tre caratteristiche.

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

Origini e caratteristiche dei calcolatori elettronici

INFORMATICA GENERALE. Prof Alberto Postiglione Dipartim. Scienze della Comunicazione Univ. Salerno. Università degli Studi di Salerno

Software. Algoritmo. Algoritmo INFORMATICA PER LE DISCIPLINE UMANISTICHE 2 (13042)

Automazione Industriale (scheduling+mms) scheduling+mms.

Modellazione di sistema

C. P. U. MEMORIA CENTRALE

Alla ricerca dell algoritmo. Scoprire e formalizzare algoritmi.

SISTEMI OPERATIVI. Prof. Enrico Terrone A. S: 2008/09

Concetti di base di ingegneria del software

1. BASI DI DATI: GENERALITÀ

PARTE 4 La Macchina Software

Fondamenti di Informatica. Allievi Automatici A.A Nozioni di Base

Software di sistema e software applicativo. I programmi che fanno funzionare il computer e quelli che gli permettono di svolgere attività specifiche

INTRODUZIONE AGLI ALGORITMI INTRODUZIONE AGLI ALGORITMI INTRODUZIONE AGLI ALGORITMI INTRODUZIONE AGLI ALGORITMI

Con il termine Sistema operativo si fa riferimento all insieme dei moduli software di un sistema di elaborazione dati dedicati alla sua gestione.

Introduzione alle basi di dati. Gestione delle informazioni. Gestione delle informazioni. Sistema informatico

Cosa è un foglio elettronico

Corso di Informatica

Architettura di un calcolatore

MODELLO E/R. Prof. Francesco Accarino IIS Altiero Spinelli Sesto San Giovanni

BASI DI DATI - : I modelli di database

BASE DI DATI: introduzione. Informatica 5BSA Febbraio 2015

Macchine a stati finiti G. MARSELLA UNIVERSITÀ DEL SALENTO

Scienze della Comunicazione Università di Salerno. UD 3.2a: Introduzione alla Programmazione

Informazione e dato. Gabriella Trucco

I Problemi e la loro Soluzione. Il Concetto Intuitivo di Calcolatore. Risoluzione di un Problema. Esempio

Progettaz. e sviluppo Data Base

I Sistemi Informativi

Linguaggi di programmazione

INFORMATICA 1 L. Mezzalira

Il Sistema Operativo. C. Marrocco. Università degli Studi di Cassino

3. Introduzione all'internetworking

Telerilevamento e GIS Prof. Ing. Giuseppe Mussumeci

Fondamenti di Informatica. Docenti: Prof. Luisa Gargano Prof. Adele Rescigno BENVENUTI!

COMPETENZE INFORMATICHE DI BASE PER ADULTI

Gestione della memoria centrale

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

Identificare le classi in un sistema

Architettura hardware

Introduzione alla Virtualizzazione

Software. Definizione, tipologie, progettazione

Automazione Industriale 4- Ingegneria del Software

Progettaz. e sviluppo Data Base

PROTOTIPAZIONE DI UN TRADUTTORE DA SORGENTE PLC AD ASSEMBLY DI UNA MACCHINA VIRTUALE

Fondamenti di Informatica 7. Linguaggi di programmazione

Problemi, Algoritmi e Programmi

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

Introduzione al sistema operativo Il file system: file, directory,...

Transcript:

Introduzione alla Programmazione ad Oggetti (OOP) Prof. Emanuele Papotto Introduzione alla Programmazione ad Oggetti Cosa Faremo: I linguaggi OOP Definizione di : classe, oggetto, attributi, metodi Cenni di UML Concetti fondamentali della programmazione a oggetti 1

Dove siamo arrivati Linguaggi di programmazione Cosa faremo gli OOP ma prima capiamo meglio cos è la programmazione 2

La programmazione La Programmazione (in Informatica) è l attività svolta per creare un Programma. Un Programma è costituito, come ogni altro tipo di linguaggio, da un alfabeto, con cui viene costruito un insieme di parole chiave (il vocabolario) e da un insieme di regole sintattiche per l uso corretto delle parole del linguaggio I linguaggi di programmazione differiscono comunque dai linguaggi naturali: sono meno espressivi ma più precisi Sono semplici e poveri (poche parole chiave, poche regole), poveri ma privi di qualsiasi ambiguità (in genere). Categorie I linguaggi di programmazione si possono suddividere fondamentalmente in tre categorie: Linguaggi Macchina Linguaggi Assembler Linguaggi ad alto livello 3

Linguaggio Macchina Riflette l organizzazione della macchina più che la natura del problema da risolvere le CPU sono progettate in modo da riconoscere un insieme di istruzioni codificate come configurazioni di bit. L insieme di queste istruzioni è appunto chiamato linguaggio macchina Linguaggi Assembler Versione simbolica del linguaggio macchina in cui i nomi delle operazioni e degli operandi sono indicati con codici simbolici Esiste (quasi) una corrispondenza biunivoca tra istruzione e numero di operazioni eseguite dal sistema necessita di un traduttore che lo trasformi in word di 16, 32 o 64 bit (affinché il calcolatore lo possa eseguire) 4

Linguaggi ad alto livello Elementi intermedi di una varietà di linguaggi ai cui estremi si trovano il linguaggio macchina, da un lato, ed i linguaggi naturali, dall altro. Più sofisticati ed astratti, slegati dal funzionamento fisico della macchina Necessitano di un traduttore che lo trasformi in word di bit (affinché il calcolatore lo possa eseguire) Differenze tra i linguaggi Esistono, quindi, diversi livelli di astrazione: Linguaggi macchina e Assembler:implicano la conoscenza dettagliata delle caratteristiche della macchina (registri, dimensione dati, set di istruzioni) Semplici algoritmi implicano la specifica di molte istruzioni Linguaggi di alto livello: Il programmatore può astrarre dai dettagli legati all architettura ed esprimere i propri algoritmi in modo simbolico Sono indipendenti dalla macchina hardware sottostante 5

Il codice Programmare in un determinato linguaggio ad alto livello significa produrre un file di puro testo che prende il nome di codice sorgente (o semplicemente sorgente) La traduzione in linguaggio macchina di un codice sorgente prende il nome di codice eseguibile (o semplicemente eseguibile) 6

Traduzione Affinché un programma scritto in un qualsiasi linguaggio di programmazione sia comprensibile (e quindi eseguibile) da parte di un calcolatore, occorre tradurlo dal linguaggio originario al linguaggio della macchina Il traduttore converte il testo di un programma scritto in un particolare linguaggio di programmazione (sorgente) nella corrispondente sorgente rappresentazione in linguaggio macchina (programma eseguibile) Generalmente ogni singola istruzione di un linguaggio di alto livello corrisponde a molte istruzioni in linguaggio macchina. Compilatore È un programma che traduce un codice scritto in un linguaggio denominato sorgente (ingl., source language) in uno denominato obiettivo o oggetto ( ingl., target language), elaborabile dall'entità destinataria. Generalmente l'entità è la CPU e il linguaggio in output è di livello inferiore al primo, di basso livello come il linguaggio macchina o di livello intermedio come il linguaggio assembly o il bytecode. Tipi di traduttore 7

Interprete Tipi di traduttore È un programma che legge ed esegue di volta in volta ciascuna istruzione di programma, scritto in un codice sorgente. Il programma stabilisce quale procedura eseguire per ogni istruzione e come eseguirla, riga per riga, anziché tradurre l'intero codice sorgente una volta per tutte come avviene nella classica compilazione. Nell'interpretazione, un'istruzione già tradotta ed eseguita, se deve essere ripetuta in seguito, andrà tradotta nuovamente in linguaggio macchina. Questo comporta, rispetto alla compilazione, una scarsa ottimizzazione del codice tradotto, un maggiore tempo di esecuzione, ma allo stesso tempo una minore occupazione di memoria principale perché non avviene la memorizzazione della traduzione delle istruzioni. Compilatore vs Interprete Compilatore Esecuzione efficiente Codice eseguibile non portabile Ogni modifica del programma richiede una nuova compilazione Interprete Esecuzione meno efficiente Programma portabile Esecuzione immediata ad ogni modifica 8

Approcci ibridi Esistono invece numerosi approcci ibridi fra linguaggi completamente interpretati e completamente compilati. Alcune versioni di Lisp consentono entrambi gli approcci, e consentono addirittura l'esecuzione di programmi parzialmente interpretati e parzialmente compilati, cosicché, per esempio, un nuovo sottoprogramma possa essere provato in forma interpretata e, una volta terminato il debugging, essere compilato per migliorarne le prestazioni. Molti interpreti non eseguono direttamente il codice sorgente, ma lo convertono preventivamente in una forma interna più compatta, per esempio in un albero sintattico astratto Approcci ibridi Diverso è l'approccio di Emacs Lisp e Java, in cui viene impiegato un compilatore che trasforma il codice sorgente in un formato intermedio detto (per entrambi i linguaggi!) bytecode, abbastanza vicino al linguaggio macchina (e quindi con un costo di interpretazione moderato), ma eseguito da un interprete e non direttamente dal processore (e quindi portabile). 9

Approcci ibridi Una tecnica che ha destato notevole interesse negli ultimi anni (ed è applicata dalla maggior parte delle attuali implementazioni di Java e dai linguaggi della famiglia DOTNET (.NET) di Microsoft) prende il nome di compilazione "just in time" o JIT. Questa tecnica può essere considerata come una ottimizzazione dell'interpretazione, in cui l'interprete compila durante l'esecuzione i frammenti di codice che vengono eseguiti con maggiore frequenza, per ridurre il costo delle loro successive esecuzioni. Paradigmi di programmazione Un paradigma di programmazione è un modello concettuale che fornisce la struttura di un programma. I principali paradigmi di programmazione sono: Programmazione Procedurale (o Imperativa) Programmazione Funzionale Programmazione Logica Programmazione Object-Oriented 10

Paradigmi di programmazione Procedurale (o Imperativa): un programma viene inteso come un insieme di istruzioni (dette anche direttive o comandi), ciascuna delle quali può essere pensata come un "ordine" che viene impartito alla macchina virtuale del linguaggio di programmazione utilizzato. Modula-2, Pascal, Cobol, Ada, Basic, C, Fortran, Algol Programmazione Funzionale: il flusso di esecuzione del programma assume la forma di una serie di valutazioni di funzioni matematiche Lisp, Scheme, ML Paradigmi di programmazione Programmazione Logica: adotta la logica del primo ordine sia per rappresentare sia per elaborare l'informazione. Un programma è un insieme di fatti e regole e la sua esecuzione equivale alla realizzazione di una dimostrazione Prolog Programmazione Object-Oriented: permette di definire oggetti software in grado di interagire gli uni con gli altri attraverso lo scambio di messaggi. Un programma è un insieme di oggetti (astrazioni della realtà) dotati di proprietà (dati) e metodi (procedure) che comunicano tramite scambio di messaggi Simula67, Smalltalk, Java, C++ 11

Evoluzione dei linguaggi di programmazione Evoluzione dei linguaggi di programmazione 12

Evoluzione dei linguaggi di programmazione Che cosa è l OOP? Nasce intorno agli anni 70 a livello teorico la metodologia della programmazione orientata agli oggetti detta OOP (Object-Oriented Programming) Si tratta di una metodologia di programmazione che si contrappone alla classica tecnica procedurale strutturata Nella metodologia OO (Object-Oriented) il problema viene pensato in termini di sistema ovvero un insieme di componenti che interagiscono tra loro per svolgere un attività Un programma è un insieme di classi e oggetti (astrazioni della realtà) dotati di proprietà (dati) e metodi (procedure) che comunicano tramite scambio di messaggi. 13

Esempio di Sistema Lettore Mp3 Attività: ascoltare musica Componenti: Cuffie, Software, Batteria, Memoria Schema Sistemico Sistema ipod File audio formato.mp3 File audio elaborato Progr. Procedurale Vs Progr. Oggetti Programmazione procedurale Problema Complesso Molta attenzione: funzioni che il programma deve possedere Scomposizione in procedure Poca attenzione: analisi del sistema Programmazione ad oggetti Sistema complesso Scomposizione in oggetti Molta attenzione: dati (oggetti) analisi del sistema individuare entità del sistema interazioni tra entità 14

Elementi della OOP: Classe Una classe è un astrazione che rappresenta le proprietà comuni (struttura e comportamento) ad un insieme di oggetti concreti (istanze). Una classe è un modello per un insieme di oggetti analoghi, caratterizzati da: proprietà (attributi) a cui è associato un tipo che rappresenta l insieme dei possibili valori che oggetti appartenenti alla classe possono avere per la proprietà (bool, integer, real, string, etc.) funzioni o metodi che possono essere eseguite sugli oggetti appartenenti alla classe Elementi della OOP: Oggetto Un istanza di una classe è un oggetto che è un entità concreta che esiste nel tempo (viene costruita e poi distrutta) e nello spazio (occupa memoria). Un oggetto è un entità astratta composta da: proprietà (attributi) che caratterizzano l oggetto e ne definiscono lo stato Funzioni (metodi) che possono essere eseguite sull oggetto e che possono modificare lo stato dell oggetto 15

Elementi della OOP: Oggetto Tutti gli oggetti di uno stesso tipo formano una classe di oggetti OGGETTO = ISTANZA DI UNA CLASSE Gli oggetti descritti tramite proprietà e funzioni sono una astrazione degli oggetti reali dei quali si considerano solo le caratteristiche necessarie per l applicazione da sviluppare Es.: in una applicazione bancaria l altezza di una persona non è una informazione rilevante mentre lo è in una applicazione medica. Viceversa per il codice fiscale... Classi e oggetti Classe Automobile Oggetto Honda Civic Oggetto FIAT 500 Oggetto Nissan Micra 16

Attributi e metodi Ogni oggetto contiene al suo interno: attributi: informazioni che servono per descrivere l oggetto e che corrispondono alle caratteristiche, alle proprietà fisiche dell oggetto stesso metodi: operazioni che un oggetto è in grado di compiere e che corrispondono ai comportamenti dell oggetto stesso in una determinata circostanza Oggetto = Attributi + Metodi Esempio di Classe e Oggetto Classe: Automobile ATTRIBUTI: Velocità Colore Num.porte Liv. Carburante Posizione marcia METODI: Avviati Accelera Fermati Gira (sx dx) Cambia marcia Oggetto: FIAT 500 ATTRIBUTI: Velocità: 110 Km Colore : Giallo Num.porte: Tre METODI: Avviati Accelera Fermati Ereditati dalla classe 17

Principi fondamentali dell OOP - 1 Ereditarietà Posso creare una nuova classe come estensione di una già esistente e può essere singola o multipla. La classe che è stata derivata prende il nome di sottoclasse, la classe generatrice di una sottoclasse si chiama sopraclasse. La gerarchia delle classi si descrive con il grafo di gerarchia. Gli oggetti possono ereditare da altri oggetti comportamenti e proprietà aggiungendone dei propri esempio Classe Automobile Sottoclasse Auto Benzina Sottoclasse Auto Diesel Sottoclasse Auto GPL Oggetto Honda Civic Oggetto FIAT 500 Oggetto Nissan Micra Principi fondamentali dell OOP - 2 Incapsulamento Una classe mostra una serie di funzionalità, ma mai come le implementa L incapsulamento (o information hiding) è il principio secondo cui la struttura e il funzionamento interno di un oggetto sono nascosti all esterno. Es: Per guidare un automobile non è necessario sapere come funziona un motore a scoppio per usarla, basta conoscere il modo di invocarne le funzionalità. esempio 18

Principi fondamentali dell OOP - 3 Polimorfismo Due classi possono implementare una stessa funzione in modo differente, ma questa potrà essere richiamata alla stessa maniera da altre classi Invocando lo stesso metodo su classi derivate da una stessa superclasse, ognuna risponde col proprio metodo; i clienti di tali metodi non hanno bisogno di modificarsi rispetto ad altre classi derivate E il concetto più potente della OOP! esempio Principi fondamentali dell OOP - 4 Persistenza La persistenza nella OOP è la proprietà di un oggetto di sopravvivere al processo che l'ha creato La persistenza si realizza registrando l oggetto nella memoria di massa, salvando l elendo degli attributi con il loro valore sul disco Conseguente possibilità di creazione di DataBase orientati agli oggetti OODB (Object-Oriented Database) 19

Le classi Una classe è una descrizione di un insieme di oggetti che condividono gli stessi attributi, operazioni, relazioni e semantica. Graficamente è rappresentata per mezzo di un rettangolo suddiviso in tre sezioni: nome, attributi, operazioni. Nome Classe attributo 1 attributo 2 metodo 1 metodo 2 Le classi: visibilità Tipologie di visibilità: Pubblica (+): l attributo/metodo è accessibile da qualsiasi altro oggetto chepossiede un riferimento all oggetto che lo contiene; Privata (-): l attributo/metodo è accessibile solo all interno della rispettiva classe; Protetta (#): l attributo/metodo è accessibile da tutte le classi che ereditano da quella che lo contiene. 20

Le classi: visibilità Interazione tra gli oggetti Un OOP è caratterizzato dalla presenza di tanti oggetti che comunicano ed interagiscono tra loro con un meccanismo chiamato scambio di messaggi Un messaggio è costituito da: Un destinatario: cioè l oggetto verso il quale il messaggio è indirizzato Un selettore: identifica il metodo che si vuole attivare, presente nell oggetto destinatario Un elenco di argomenti: insieme dei parametri che vengono passati all oggetto quando si richiede l attivazione di un metodo 21

Es. di Interazione tra gli oggetti Oggetto: Pilota ATTRIBUTI: Età: Nazionalità: Tipo Patente: Messaggio Auto FIAT 500.Accelera (110) Il pilota accelera a 110 Km Oggetto: Auto FIAT 500 ATTRIBUTI: Velocità= 110 Km Colore = Giallo Num.porte= Tre METODI: Avviati ( ) Accelera( ) Fermati ( ) Cenni UML (Unified Modeling Language) E nato tra il 94 e il 95 quando gli studiosi Booch, Rumbaugh e Jacobson si sono associati per definire una metodologia standard internazionale, un linguaggio di modellazione chiamato UML (Unified Modeling Language), che è divenuto lo standard per modellare software object-oriented. Permette di esprimere ed analizzare il modello del sistema che si vuole realizzare 22

UML prevede 7 tipi di diagrammi: 1. Use case diagram: elenca i casi d uso del sistema e le loro relazioni. 2. Class diagram: descrive la struttura dati degli oggetti del sistema e le loro relazioni. È il diagramma più importante, da cui si può generare il codice 3. Sequence diagram: mostra le interazioni tra gli oggetti durante scenari di funzionamento del sistema, privilegiando la sequenzialità temporale UML prevede 7 tipi di diagrammi: 4. Collaboration diagram: mostra le interazioni tra gli oggetti durante scenari di funzionamento del sistema, privilegiando la struttura del sistema stesso 5. State e activity diagram: descrivono gli stati di un oggetto e le sequenze eventi-azioni-transizioni di una funzione 6. Component diagram: descrive l architettura fisica del sistema 7. Deployment diagram: descrive la struttura del sistema hardware e l allocazione dei vari moduli software 23

UML il Sequence diagram Il Sequence diagram descrive il comportamento dinamico tra gli attori ed il sistema e tra gli oggetti del sistema Con questo diagramma evidenziamo la sequenza temporale delle azioni Es.: Cosa fare prima di programmare? UML: Sequence Diagram Programmatore OOP Una Classe Un Attributo Un metodo Un oggetto Linguaggi di programmazione PROGETTARE DEFINIRE ATTRIBUTI DEFINIRE METODI DEFINIRE OGGETTI PROGRAMMARE IN UN LINGUAGGIO CHE SUPPORTA OOP 24

Linguaggi di programmazione orientati ad oggetti Linguaggi puri (ogni cosa è un oggetto) Smalltalk: sviluppato al centro di ricerche Xerox di Palo alto in California durante gli anni '70, usa un ereditarietà singola. Eiffel: sviluppato da Bertrand Meyer in Francia nel 1985, supporta l ereditarietà multipla Linguaggi ibridi (esistono tipi di dati che non sono oggetti) C++: sviluppato da Bjarne Stroustrup ai AT&T Bell Laboratories New York nel 1979 come un miglioramento del linguaggio C Java: ideato da James Gosling e altri ingegneri della Sun MicroSystem in California, rilasciato il 23 maggio 1995 Delphi: ideato dalla Borland nel 1995 25