Docsity
Docsity

Prepara i tuoi esami
Prepara i tuoi esami

Studia grazie alle numerose risorse presenti su Docsity


Ottieni i punti per scaricare
Ottieni i punti per scaricare

Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium


Guide e consigli
Guide e consigli


Riassunto programmazione object oriented, Appunti di Programmazione C

Riassunto Programmazione object oriented

Tipologia: Appunti

2022/2023

Caricato il 05/12/2022

domenico-iermano
domenico-iermano 🇮🇹

4.4

(9)

5 documenti

1 / 8

Toggle sidebar

Questa pagina non è visibile nell’anteprima

Non perderti parti importanti!

bg1
1. IL PARADIGMA OBJECT ORIENTED
Nel paradigma di programmazione orientato agli oggetti, gli elementi della realtà di interesse sono rappresentati da componenti
software chiamati oggetti software. Un programma modella una realtà di interesse come una collezione di oggetti software che
cooperano. Una delle caratteristiche fondamentali degli oggetti software è la loro modularità, che ne consente la componibilità e
riusabilità.
1. PARADIGMA DI PROGRAMMAZIONE
Esistono diversi approcci alla programmazione, chiamati paradigmi di programmazione.
Nel paradigma di programmazione imperativa, vengono specificate le azioni che devono essere eseguite in sequenza, per calcolare
i risultati a partire da dati. Tipici linguaggi di programmazione imperativa sono: C, Fortran, Cobol, Pascal.
Nel paradigma di programmazione funzionale, un programma è la definizione di funzione, che calcola i risultati. Tipico linguaggio di
programmazione funzionale è il Lisp.
Nel paradigma di programmazione logica, si adotta la logica del primo ordine per rappresentare ed elaborare l’informazione
(clausole di Horn). Tipico linguaggio di programmazione è il Prolog.
Nel paradigma di programmazione orientato agli oggetti, l’esecuzione di un programma consiste nella cooperazione di un insieme
di oggetti software.
2. CONCETTI BASE
Gli oggetti possono corrispondere o a oggetti del mondo reale, o a entità più astratte (un file aperto). Un oggetto ha diverse
caratteristiche.
Ogni oggetto è caratterizzato da un nome, che permette di far riferimento all’oggetto e di referenziarlo.
Ogni oggetto può eseguire diverse operazioni, che ne caratterizzano il comportamento.
Ogni operazione per essere eseguita ha bisogno di una richiesta, che avviene mediante l’invio di un messaggio.
L’interfaccia di un oggetto è la descrizione dell’insieme delle operazioni che l’oggetto sa eseguire.
Ogni oggetto ha uno stato, che è descritto da un insieme di proprietà che ne permettono la modifica.
2. PROGETTAZIONE E OGGETTI SOFTWARE
Un oggetto memorizza il suo stato in campi (variabili) ed espone il suo comportamento tramite metodi (funzioni). Gli oggetti
software hanno un’identità stato e comportamento proprio come gli oggetti del mondo reale. I linguaggi più noti che utilizzano la
programmazione OO sono Java e C++.
1. PROGETTAZIONE DI UN OGGETTO REALE
Usando come esempio di oggetto il televisore. La programmazione di esso (oggetto concreto) viene effettuata da un progettista.
Viene definita per prima cosa l’interfaccia del televisore (come l’oggetto potrà essere utilizzato) e in seconda fase il progetto (lo
schema elettrico). La progettazione di un oggetto è la definizione delle caratteristiche dell’oggetto (interfaccia) e dei dettagli per la
sua realizzazione (progetto). Il progettista e la fabbrica hanno ruoli complementari e utilizzano un linguaggio comune per poter
collaborare.
2. OGGETTI SOFTWARE
Un oggetto software è un oggetto che ha una struttura, collabora con altri oggetti ed esiste solo nel calcolatore. La progettazione
(classe) di esso è chiamata implementazione. Un oggetto software è un modello astratto di un oggetto reale che viene modellato
da un programmatore.
Un oggetto può essere definito come un campo di dati con caratteristiche e comportamenti univoci. Uno dei vantaggi dell’OOP è la
riutilizzabilità del codice e l’efficienza. La modellazione dei dati consiste nella manipolazione e identificazione degli oggetti. Una
sequenza logica di istruzioni è nota come metodo.
pf3
pf4
pf5
pf8

Anteprima parziale del testo

Scarica Riassunto programmazione object oriented e più Appunti in PDF di Programmazione C solo su Docsity!

1. IL PARADIGMA OBJECT ORIENTED

Nel paradigma di programmazione orientato agli oggetti, gli elementi della realtà di interesse sono rappresentati da componenti software chiamati oggetti software. Un programma modella una realtà di interesse come una collezione di oggetti software che cooperano. Una delle caratteristiche fondamentali degli oggetti software è la loro modularità , che ne consente la componibilità e riusabilità.

1. PARADIGMA DI PROGRAMMAZIONE

Esistono diversi approcci alla programmazione, chiamati paradigmi di programmazione. Nel paradigma di programmazione imperativa , vengono specificate le azioni che devono essere eseguite in sequenza, per calcolare i risultati a partire da dati. Tipici linguaggi di programmazione imperativa sono: C , Fortran, Cobol, Pascal. Nel paradigma di programmazione funzionale , un programma è la definizione di funzione, che calcola i risultati. Tipico linguaggio di programmazione funzionale è il Lisp. Nel paradigma di programmazione logica , si adotta la logica del primo ordine per rappresentare ed elaborare l’informazione (clausole di Horn). Tipico linguaggio di programmazione è il Prolog. Nel paradigma di programmazione orientato agli oggetti , l’esecuzione di un programma consiste nella cooperazione di un insieme di oggetti software.

2. CONCETTI BASE

Gli oggetti possono corrispondere o a oggetti del mondo reale, o a entità più astratte (un file aperto). Un oggetto ha diverse caratteristiche. Ogni oggetto è caratterizzato da un nome , che permette di far riferimento all’oggetto e di referenziarlo. Ogni oggetto può eseguire diverse operazioni , che ne caratterizzano il comportamento. Ogni operazione per essere eseguita ha bisogno di una richiesta, che avviene mediante l’invio di un messaggio. L’interfaccia di un oggetto è la descrizione dell’insieme delle operazioni che l’oggetto sa eseguire. Ogni oggetto ha uno stato , che è descritto da un insieme di proprietà che ne permettono la modifica.

2. PROGETTAZIONE E OGGETTI SOFTWARE

Un oggetto memorizza il suo stato in campi (variabili) ed espone il suo comportamento tramite metodi (funzioni). Gli oggetti software hanno un’identità stato e comportamento proprio come gli oggetti del mondo reale. I linguaggi più noti che utilizzano la programmazione OO sono Java e C++.

1. PROGETTAZIONE DI UN OGGETTO REALE

Usando come esempio di oggetto il televisore. La programmazione di esso ( oggetto concreto ) viene effettuata da un progettista. Viene definita per prima cosa l’interfaccia del televisore (come l’oggetto potrà essere utilizzato) e in seconda fase il progetto (lo schema elettrico). La progettazione di un oggetto è la definizione delle caratteristiche dell’oggetto (interfaccia) e dei dettagli per la sua realizzazione (progetto). Il progettista e la fabbrica hanno ruoli complementari e utilizzano un linguaggio comune per poter collaborare.

2. OGGETTI SOFTWARE Un oggetto software è un oggetto che ha una struttura, collabora con altri oggetti ed esiste solo nel calcolatore. La progettazione ( classe ) di esso è chiamata implementazione. Un oggetto software è un modello astratto di un oggetto reale che viene modellato da un programmatore. Un oggetto può essere definito come un campo di dati con caratteristiche e comportamenti univoci. Uno dei vantaggi dell’OOP è la riutilizzabilità del codice e l’efficienza. La modellazione dei dati consiste nella manipolazione e identificazione degli oggetti. Una sequenza logica di istruzioni è nota come metodo.

3. IL LINGUAGGIO DI MODELLAZIONE UML

L’UML ( Unified Modeling Language ), è un linguaggio di modellazione, sviluppato per aiutare gli sviluppatori di software a realizzare un’ottima modellazione aziendale. L’UML utilizza principalmente notazioni grafiche e viene usato per lo sviluppo di software orientato agli oggetti. L’UML fu creato da tre pionieri dell’OOP: Booch, Ramaugh e Jacobson negli anni 90’. Il diagramma UML è un diagramma di tipo strutturale e statico.

1. BREVE STORIA DI UML

Il linguaggio UML è un insieme di formalismi grafichi che consentono di documentare i diversi aspetti di un sistema software OOP. Questo standard viene gestito dall’ Object Management Group (OMG), un consorzio fondato con l’obiettivo di creare e gestire standard nel contesto dello sviluppo OOP.

2. DIAGRAMMI UML

La modellazione di un sistema può essere effettuata utilizzando diverse prospettive: Una prospettiva esterna : viene modellato il contesto o l’ambiente in cui opera il sistema Una prospettiva di iterazioni : vengono modellate le iterazioni tra il sistema e il suo ambiente Una prospettiva strutturale : viene modellata l’organizzazione del sistema Una prospettiva comportamentale : viene modellato il comportamento dinamico del sistema e le sue risposte agli eventi. Un progettista deve inoltre sapere cosa vuole modellare, utilizzando il corretto diagramma di modellazione. Diagramma di iterazione : descrive il modo in cui le entità interagiscono per generare il comportamento Diagramma strutturale : rappresenta le entità di un sistema software e le loro relazioni Diagramma comportamentale : rappresenta il comportamento di un sistema software al trascorrere del tempo

3. MECCANISMI COMUNI DELL’UML

Per la costruzione di diagramma UML esistono caratteristiche generali, rappresentate da quattro diverse strategie alla modellazione OO: Specifiche : i modelli UML possiedono due dimensioni: la dimensione grafica (diagrammi ed icone) e la dimensione testuale (vari elementi di modellazione).g Ornamenti : ogni elemento UML viene evidenziato con un simbolo molto semplice, è possibile aggiungere ad ogni simbolo un certo numero di ornamenti per mostrare maggiori informazioni. Distinzioni comuni : Classificatore/istanza , la nozione astratta di un tipo di entità è un classificatore, mentre le entità specifiche e concrete sono istanze, quest’ultime si differenziano dal nome sottolineato. Interfaccia/implementazione , l’interfaccia protegge la complessità dell’implementazione nascondendola. Meccanismi di estendibilità : UML incorpora tre semplici meccanismi di estensibilità riassunti come: vincoli (limitano le caratteristiche di un elemento), stereotipi (introduzione di nuovi elementi di modellazione), valori etichettati (nome a cui è possibile associare un valore).

4. I DIAGRAMMI DEI CASI D’USO

In UML un diagramma dei casi d’uso riassume i dettagli degli utenti del sistema (attori) e le loro iterazioni con il sistema. Un diagramma dei casi aiuta un gruppo di sviluppo software a determinare gli obiettivi delle iterazioni sistema-utente, definire i requisiti funzionali di un sistema e la modellazione del flusso di base degli eventi in un caso d’uso.

1. GENERALITA’

I diagrammi dei casi d’uso rappresentano il punto di partenza nello sviluppo di un nuovo sistema. I diagrammi dei casi d’uso mostrano i casi d’uso stessi, gli attori e le associazioni. Questo diagramma descrive l’interazione tra il sistema e l’ambiente esterno ( attori ). I diagrammi non rivelano la struttura interna del sistema. Un diagramma dei casi d’uso è espresso in formula testuale e grafica, comprensibile a chiunque.

2. ISTANZIAZIONE

La creazione di un oggetto software prendere il nome di istanziazione. L’istanziazione statica corrisponde alla costruzione dell’oggetto software dalla classe. L’istanziazione dinamica corrisponde alla costruzione di un oggetto software a partire dalla classe ma con richiesta esplicita, al momento della definizione non viene costruito nessun oggetto di quel tipo. L’oggetto software istanziato è chiamato oggetto classe se è l’oggetto software istanziato automaticamente con modalità statica a partire dalla definizione di una classe. È chiamato oggetto istanza distanziata se rappresenta un oggetto software istanziato con modalità dinamica da una classe. La rappresentazione di un oggetto in UML prevede la presenza del nome, degli attributi e delle operazioni.

3. AMBITO E VISIBILITA’

L’ambito riguarda dove i metodi possono agire dopo la creazione dell’oggetto. Nell’ambito di istanza gli oggetti hanno una propria copia degli attributi e agiscono su oggetti specifici. Operazioni con ambito di istanza possono accedere ad altre operazioni o attributi con ambito di istanza; Nell’ambito di classe gli oggetti condividono lo stesso valore per un attributo, mentre le operazioni non operano solo su una particolare istanza della classe, ma sulla classe stessa. Operazioni con ambito di classe possono accedere ad altre operazioni o attributi con ambito di classe. La visibilità riguarda la possibilità di poter utilizzare o meno l’oggetto da parte di altri oggetti. Visibilità pubblica (+): ogni elemento può accedere alla classe e ogni suo membro con visibilità pubblica. Visibilità privata (-): solo i metodi della classe possono accedere ai membri con visibilità protetta. Visibilità protetta (#): solo le operazioni appartenenti alla classe possono accedere ai membri con visibilità protetta. Visibilità package (~): ogni elemento dello stesso package della classe può accedere ai membri con visibilità package.

7. INTRODUZIONE ALLE CLASSI IN C++

1. LE CLASSI IN C++

Per sfruttare il paradigma OO si può utilizzare il linguaggio C++. Il costrutto fondamentale di questo linguaggio è la classe. La classe è un tipo di dati definito dall’utente, che possiamo usare nel nostro programma come un costruttore di oggetti. Ciascun oggetto viene descritto tramite gli attributi e i metodi di cui fa parte. Ogni istanza ha uno stato e una identità (locazione di memori). La parola class identifica la definizione di una classe. I metodi e le funzioni della classe sono funzioni membro. Le parentesi {} identificano il blocco all’interno del quale viene definita la classe. Il carattere ; determina la fine di definizione della classe.

2. IMPLEMENTAZIONE IN C++

Uno degli ambienti di sviluppo per programmare in C++ è code::blocks. È prassi organizzare i file sorgenti OO in tre file distinti: automobile.h ( definizione della classe ), automobile.cpp ( implementazione dei metodi ), main.cpp ( applicazione che usa la classe ). L’insieme dei metodi che tornano i valori delle proprietà della classe, prendono il nome di metodi get. L’insieme dei metodi set rappresenta l’insieme dei metodi che possono settare i valori delle proprietà di un oggetto-istanza di una classe.

3. COSTRUZIONE DI UNA CLASSE IN C++

Il metodo costruttore è un metodo che ha lo stesso nome della classe e serve ad inizializzare un oggetto, all’atto della sua creazione. Il metodo distruttore è un metodo che ha lo stesso nome della classe è preceduto dal carattere ~ ed è eseguito quando viene liberata l’area di memoria che contiene l’oggetto della classe. (attraverso il comando delete ) La parola chiave this identifica un puntatore speciale che contiene l’indirizzo dell’istanza della classe che ha invocato il metodo. L’allocazione dinamica viene effettuata tramite l’operatore new che alloca una nuova area di memoria durante l’esecuzione. L’allocazione statica viene effettuata come per una variabile anteponendo all’oggetto il nome della classe.

8. CLASSI STRING E VECTOR

1. LA CLASSE STRING

Nel linguaggio C++, una stringa è una classe che definisce oggetti rappresentati attraverso flussi di caratteri. La classe string viene utilizzata per la gestione degli array di caratteri. L’istruzione: string x; istanzia un oggetto di tipo string di nome x. Le stringe in C++ vengono gestiste dinamicamente , riservando in automatico la memoria necessaria attraverso il comando cin>>. I metodi della classe string sono: Metodo int s.length() : lunghezza di una stringa Metodo boolean s.empty() : test di stringa vuota Metodo int s.at(i) : carattere in una posizione i di una stringa s Metodo int s.find (string1, int startsearch); : trovare una sottostringa s1 in una stringa s a partire dalla posizione di start search. È possibile confrontare le stringe attraverso gli operatori ==, |=, >, <=,>= o concatenare le stringe tramite l’operatore (+).

2. LA CLASSE VECTOR

La gestione dei vettori viene semplificata attraverso l’uso di un contenitore di nome vector. Per la dichiarazione bisogna, includere il file di definizione #include per poi effettuare la dichiarazione: vector int x. Metodi della classe vector sono : Metodo push_back(valore) - inserimento di un elemento in coda al vettore Metodo size(): torna il numero di elementi contenuti nel vettore: Metodo at(n): torna il valore dell’elemento del vettore in posizione n Metodo front(): torna il primo elemento del vettore Metodo back(): torna l’ultimo elemento del vettore Metodo data(): torna il puntatore ai dati del vettore così come memorizzati nell’oggetto Metodo empty(): torna true se il vettore è vuoto altrimenti false Metodo pop_back(): elimina l’ultimo elemento dell’array Metodo clear(): cancella tutti gli elementi dell’array rendendolo di size=

9. GESTIONE ECCEZIONE DEI FILES E DELL’EREDITARIETA’ TRA CLASSI

1. LA GESTIONE DELLE ECCEZIONI

Un’eccezione e un errore che si verifica durante l’esecuzione di un programma. Questo errore va gestito attraverso un meccanismo che prende il nome di gestione delle eccezioni. Quando si verifica questo errore dentro un try-block (porzione di codice dove si potrebbe creare l’errore), viene generata un’eccezione che trasferisce il controllo al gestore dell’eccezione. L’eccezione viene generata utilizzando la parola chiave throw dall’interno del blocco try. I gestori di eccezioni vengono dichiarati con la parola chiave catch , posizionati dopo il blocco try. | try { throw 1; istruzione} catch (int x) {istruzione}

2. GESTIONE DEI FILES

Le classi per la gestione dei files sono: Ofstream : classe per la gestione di files in scrittura. Ifstream : classe per la gestione di files in lettura. fstream : classe per la gestione in scrittura e lettura. Funzione per gestire un file: myfile.open (filename,mode). In cui filename è il nome del file e mode è una flag opzionale che indica la modalità di utilizzo del file aperto. Alcuni tipi di mode con il loro significato sono: ios::in | apre un file per sola lettura - ios::out | apre un file per sola scrittura - ios::binary | apre un file binario - ios::ate | posiziona il puntatore alla fine del file - ios::app | modalità modifica (append) - ios:trunc | il file aperto sovrascrive la vecchia versione

12. PROGRAMMARE IN JAVA

1. STRUTTURA DI UN PROGRAMMA JAVA

Java ha bisogno di una classe applicazione per funzionare, essa gestisce altre classi e si contraddistingue dalle altre per la presenza del metodo main () al suo interno. Il metodo main ha come parametro un array di stringhe ( string args[] ) che possono essere passati dalla riga di comando.

2. GESTIONE DELL’INPUT/OUTPUT

L’ambiente Java mette a disposizione una struttura complessa di classi organizzate in librerie o package. Il package java.io è la libreria di riferimento per la gestione dei flussi di input e di output. In genere, la direttiva da inserire all’interno di una classe che gestisce stream è: import java.io.;* Essa definisce i concetti base per gestire l’I/O da qualsiasi sorgente e verso qualsiasi destinazione. Il concetto di stream è quello di un canale di comunicazione monodirezionale (di input o output) di uso generale e adatto a trasferire byte (o anche caratteri). Le classi che utilizza la java.io sono: System.in, System.out e Buffered Reader. La classe System.out usa metodi come println() e print() per permettere la modellazione del video. La classe System.in gestisce il flusso dei dati inserito da tastiera. La classe BufferedReader permette la lettura di un numero da tastiera. InputStreamReader input= new InputStreamReader(System.ini); BufferedReader tastiera= new BufferedReader(input); Il metodo readln() legge una stringa da tastiera.

3. GESTIONE DELLE ECCEZIONI

È la stessa problematica trattata con il linguaggio C++. La gestione delle eccezioni viene realizzata tramite il costrutto try…catch. Si hanno due tipologie di eccezioni : checked : esprimono eccezioni riferitesi a condizioni recuperabili e che quindi possono essere gestite dal metodo chiamante. Questo tipo di eccezioni vanno controllate e risolte, altrimenti il programma segnalerà un errore. unchecked : esprimono condizioni non recuperabili, dovute ad errori di programmazione e non gestibili dal metodo chiamante. Tutte le eccezioni sono sottoclassi della classe Exception. Il blocco finally va inserito dopo una sequenza di blocchi catch. Il codice del blocco finally viene eseguito indipendentemente dal fatto che l’eccezione venga lanciata o meno. Se il blocco try viene eseguito completamente senza eccezioni, il blocco finally viene eseguito dopo il try.

13. MATEMATICA E VERIFICA SU SEQUENZE DEI DATI

1. LA CLASSE MATH

Le API sono un insieme di elementi per la gestione di aspetti applicativi di carattere generale come grafica e matematica. La classe Math contiene metodi per eseguire operazioni numeriche di base ed è contenuta nelle API. L’operazione sqrt () è un metodo della classe math, che richiede come parametro il tipo double, ovvero un numero razionale, questo metodo restituisce la radice quadrata dell’argomento.

2. ACCESSO A SEQUENZE

L’accesso a sequenze di dati è un problema che ricorre molto frequentemente nell’ambito della programmazione. Le sequenze vengono generate con una variabile di controllo , scandendo gli elementi di una sequenza con accesso posizionale. L’accumulazione permette di calcolare una proprietà sintetica (cumulata) da una sequenza di valori immessi da tastiera ( tecnica dell’accumulazione ). L’accesso a sequenza ha le seguenti proprietà: sequenza , accumulatore , operazione di accumulazione , elemento neutro di accumulazione. I problemi di verifica esistenziale sono un altro caso particolare dei problemi di accumulazione. Bisogna determinare se una sequenza di elementi contiene almeno un elemento che soddisfa una certa proprietà. Inizialmente si assegna alla variabile booleana un valore che indica convenzionalmente che la sequenza non contiene alcun elemento che soddisfi la proprietà (false).

14. FILES, ARRAY E OOP IN JAVA

1. ARRAY

Un array è un tipo di dato utile per memorizzare più oggetti dello stesso tipo. Ogni elemento viene individuato attraverso un indice. Nella fase di dichiarazione , si specifica il tipo di dato che l’array deve contenere: int, float, oggetti della stessa classe. int p[]; | variabile di riferimento non inizializzata, contenente il valore null. Nella fase di allocazione , si utilizza l’operatore new. | int p[] =new int[10]; Nella fase di assegnazione , il meccanismo è uguale a C e C++. Se si cerca di utilizzare una componente dell’array con indice non permesso, viene generata un’eccezione. Gli array possono essere anche multidimensionali , dichiarando la seconda dimensione. | matrice=new int[4][5]; Il metodo Math.random() genera un numero casuale di tipo double tra 0 e 1.

2. GESTIONE FILES

Le operazioni fondamentali sui file sono: Apertura : stabilisce un canale tra la memoria centrale e l’unità di memoria che contiene il file. Lettura ( read ): operazioni che trasferiscono dati dal file alla memoria centrale. Scrittura ( write ): operazione che trasferiscono dati dalla memoria centrale al file. Chiusura : si chiude il collegamento tra memoria centrale e file. Il package java.io contiene le classi e i metodi per gestire l’I/O. L’apertura di un file di testo viene svolta con la dichiarazione dei seguenti oggetti: FileWriter f=new FileWriter(‘’agenda.txt’’); | PrintWriter fOUT=new PrintWriter(f); Se si vuole fare un’operazione di append (modifica), si deve utilizzare l’oggetto FileWriter nel seguente modo: FileWriter f=new fileWriter (‘’agenda.txt’’,true); Se si vuole aprire un file di testo per input , è necessario dichiarare i seguenti oggetti: FileReader f =new FileInputStream(‘’Agenda.txt’’); | BufferedReader fIN=new BufferedReader(f);

3. EREDITARIETA’

Si parla di ereditarietà singola quando una classe deriva da una e una sola classe base. In java per utilizzare l’ereditarietà si usa la parola chiave extends nella classe derivata. I membri di una classe dichiarati come private non sono ereditati dalle sottoclassi. I membri protected o public vengono ereditati dalle sottoclassi. I membri static non vengono ereditati. La parola chiave super fa riferimento alla classe base. La parola chiave this fa riferimento all’oggetto stesso. La parola chiave final indica che quella classe non può generare sottoclassi.

4. POLIFORMISMO

Le due operazioni importanti, basi del polimorfismo sono: Overriding : sovrapposizione dei metodi o ridefinizione del metodo della classe derivata. Overloading : sovraccarico dei metodi, possibilità di utilizzare lo stesso nome per compiere operazioni diverse.