# data[].attributes.body
La OOP (Object Oriented Programming) è il modello di programmazione più diffuso, nato alla fine degli anni 80 come superamento della programmazione di tipo procedurale e della crisi del software, le cui cause sono:

# data[].attributes.body
linguaggi a oggetti sono i principali artefici della transizione da progettazione e programmazione "in the small" a quella "in the large"

La programmazione a oggetti è da considerarsi un nuovo paradigma di programmazione, detto "paradigma a oggetti".

# data[].attributes.body
L'impiego del linguaggio OOP impone l'uso dei principi fondamentali della programmazione a oggetti:

la modularità;

l'incapsulamento;

la protezione delle informazioni.

# data[].attributes.body
Il primo strumento di lavoro nella fase di progettazione di un sistema software è l'astrazione, il risultato di un processo (detto appunto di astrazione) secondo il quale, assegnato un sistema, si possono tenere nascosti alcuni particolari evidenziando quelli che si ritengono essenziali ai fini della corretta comprensione.

# data[].attributes.body
Mediante il procedimento di astrazione, gli oggetti fisici vengono virtualizzati in oggetti software, di cui vengono individuate le proprietà simili e ci si concentra su esse, ignorando temporaneamente le loro differenze.

# data[].attributes.body
Gli oggetti sono entità astratte dotate di specifiche proprietà (gli attributi) e in grado di cooperare con altri oggetti svolgendo specifiche azioni (i metodi).

# data[].attributes.body
Gli oggetti sono le istanze delle classi.
Oggetti della stessa classe vengono definiti simili e si differenziano tra loro per le loro proprietà (attributi), ma condividono il comportamento (metodo).

# data[].attributes.body
Per definire la classe, ossia lo schema statico di base dal quale è possibile creare i singoli oggetti dinamici, occorre:

definire (e nascondere) la rappresentazione dei dati all'utente;

definire tutte le operazioni applicabili agli oggetti del tipo di dato astratto;

garantire che l'utente possa manipolare gli oggetti solo mediante lo scambio di messaggi.

# data[].attributes.body
Le caratteristiche fondamentali della OOP sono:

l'ereditarietà (permette di modellare e specializzare le classi già esistenti e quindi di non dover mai "partire da zero", ma sempre da solide fondamenta);

il polimorfismo (la possibilità di mandare un messaggio con uno "stesso significato" a classi diverse che lo interpretano ed eseguono in modo diverso);

l'incapsulamento (mediante il quale avviene l'"information hiding": l'utente ha a disposizione un'interfaccia  che gli permette di interagire con gli oggetti non in modo diretto, ma esclusivamente mediante lo scambio di messaggi).

# data[].attributes.body
I linguaggi classici, i "Pascal like", non offrono strumenti adatti alla progettazione di sistemi complessi.
I linguaggi a oggetti più rappresentativi oggi sono, invece, Java e C++.
Di seguito viene mostrata la programmazione orientata agli oggetti in linguaggio C++.

# data[].attributes.attachment_link.title
Programmazione orientata agli oggetti in linguaggio C++

# data[].attributes.attachment_link.description
Appunti ed esecizi risolti su OOP in linguaggio C++