m
=
Programmazione Object-oriented in C++
RIASSUNTO CAPITOLO 1 PROGRAMMAZIONE LIBRO
- 1.1: conce) chiave dell’OO
Le principali proprietà della programmazione OO sono:
1. Incapsulamento: I da= vengono incapsula= all’interno di un ogge>o e vis= più
in termini di quali operazioni si possono effe>uare su di essi e non più
solamente come valori puri dei da=, cioè come ADT. Ciò è possibile a>raverso
il principio di informa=on hiding, cioè nascondendo i de>agli implementa=vi
per quanto riguarda il formato dei da= e delle operazioni. In C++ lo strumento
principale che serve ad implementare gli ADT sono le classi.
2. Ereditarietà: Si basa sull’idea che alcune classi, che vengono chiamate classi
derivate, ereditano le funzionalità e le funzioni di classi più generiche che
vengono chiamate classi base. In C++ una classe può estendere più classi base.
3. Polimorfismo: Ogge) di diversi =po vengono tra>a= allo stesso modo ed è
compito del sistema soRware capire quale funzionalità di quale ogge>o deve
essere usata in un par=colare momento a seconda del =po che viene usato. In
C++ tale tecnica è supportata dall’uso delle funzioni virtuali e dal
sovraccaricamento di funzioni e operatori.
- 1.2: classi e ogge)
Fondamentalmente la programmazione OO si basa sui conce):
1. Ogge): sono istanze reali di en=tà soRware che contengono informazioni e su
cui si possono applicare delle operazioni per agire sull’informazione in essi
contenuta.
2. Classi: Sono insiemi di ogge) che si comportano tu) allo stesso modo e
contengono l’implementazione dei da= e delle operazioni che possono essere
effe>uate su di essi. A par=re da una classe si possono “istanziare” ogge).
A livello di programmazione si può dire che una classe serve a rappresentare un’idea
o un conce>o nel codice; mentre gli ogge) rappresentano specifici esempi o istanze
nel codice.
- 1.3: lo sviluppo OO
In un ambiente di sviluppo OO si possono iden=ficare le seguen= fasi:
1. Analisi OO: Si iden=ficano i requisi= funzionali di un sistema, delle classi e
delle loro relazioni.
2. Design OO: Si occupa di specificare le gerarchie di classi, delle loro interfacce e
comportamen=. In questa fase vengono usa= i diagrammi UML. Dunque, si
può dire che i suoi scopi principali sono:
i. Creare programmi che siano flessibili in caso di aggiunta di nuove
funzionalità e un soRware che sia altamente coeso e al tempo stesso
con accoppiamento lasco, ossia la modifica di una componente non
comporta una modifica ad un’altra componente ad essa associata.
ii. Decomporre un sistema in moduli, così da poter iden=ficare dipendenze
e forme di comunicazione; da qui si iden=ficano le classi e le varie
relazioni di ereditarietà e come queste vengano usate
3. Programmazione OO: Viene implementato il design OO o>enuto nella fase
precedente in un linguaggio di programmazione OO.
In conclusione, si può dire che la parte di analisi si occupa di dire al sistema cosa
deve fare, mentre quella di design di assicurarsi come il sistema svolga i suoi compi=.
Infine, nella parte di programmazione, ci si occupa delle problema=che rela=ve ai
linguaggi di programmazione e dell’implementazione dei soRware. Quindi, i modelli
iden=fica= nell’OOD vengono implementa= in base alle funzionalità del linguaggio di
programmazione scelto, rispe>andone gli aspe) idioma=ci.
#
Il linguaggio C++
RIASSUNTO CAPITOLO 2 PROGRAMMAZIONE LIBRO
Sebbene il C++ sia un linguaggio OO, in realtà è più corre8o dire che è un linguaggio
mul<-paradigma, ossia che supporta diversi s<li di programmazione che sono:
1. Procedurale: visto che il C++ discende dal C, supporta ogni tecnica di
programmazione del C.
2. Orientata agli oggeE: dato dalla presenza delle proprietà di incapsulamento,
ereditarietà e polimorfismo delle classi del C++.
3. Generica: Dato dal meccanismo dei template che consente di parametrizzare i
<pi in funzioni e classi.
4. Funzionale: Data dall’introduzione delle espressioni lambda, ossia funzioni
senza nome.
- 2.3: riferimen<
Nel C++ è stato introdo8o un nuovo modificatore di <po per effe8uare i riferimen< a
variabile. A livello sintaEco si rappresenta con una & interposto fra il <po e il nome
della variabile fungendo, dunque, come alias o sinonimo di una variabile. Ciò vuol
dire che qualunque operazione venga fa8a sul riferimento in realtà è effe8uata sulla
variabile.
InfaE, un riferimento a variabile deve sempre mantenere un conta8o dire8o con la
variabile a cui si riferisce la quale, quindi, deve essere inizializzata. Inoltre, un
riferimento una volta inizializzato non può riferirsi ad altre variabili.
Cosa importante è da non confondere il modificatore di <po & con l’operatore di
indirizzo & poiché il primo serve, come già de8o, a riferirsi ad una variabile nel
momento in cui viene dichiarata mentre il secondo viene usato per valutare una
variabile.
- 2.3.1: Riferimen< vs puntatori
Puntatori Riferimen<
Si comportano come variabili normali e possono Devono essere inizializza3.
essere dichiara3 senza essere inizializza3.
Possono essere nulli, cioè non puntare ad un Non hanno un valore nullo.
indirizzo.
Possono essere di 3po void. Non si possono avere riferimen3 a void.
È possibile assegnarli qualsiasi valore, possono Non possono essere assegna3; si riferiscono
quindi puntare ad una qualsiasi variabile dello sempre alla stessa variabile.
stesso 3po.
Si può adoperare mediante l’aritme3ca dei Non hanno aritme3ca.
puntatori.
Dalla tabella, dunque, possiamo notare che i puntatori possono essere usa< per due
scopi diversi, ossia come flag quando l’indirizzo è
-
Appunti Fondamenti I (C)
-
Appunti riassuntivi Programmazione (parte 2, ereditarietà)
-
Appunti riassuntivi Programmazione (parte 6, adapter e observer)
-
Informatica e linguaggio C-appunti