OOP - obiettivi
-
Robustezza
Vogliamo scrivere programmi capaci di gestire situazioni inaspettate (ad esempio, input inattesi). Questo è un requisito particolarmente importante in applicazioni “lifecritical”.
-
Adattabilità
Vogliamo scrivere programmi capaci di evolvere (ad esempio, girare su diverse architetture o avere nuove funzionalità). Un concetto correlato è quello di portabilità.
-
Riusabilità
Vogliamo che il nostro codice sia utilizzabile come componente di diversi sistemi in varie applicazioni. Deve essere chiaro cosa il nostro codice fa, e cosa non fa.
OOP - principi di design
-
Astrazione
“Distillare” i concetti che meglio rappresentano un oggetto o un sistema.
-
Information hiding
Nascondere l’informazione ad utenti esterni, lasciando vedere solo l’interfaccia. In questo modo parti di un programma possono cambiare senza effetti sulle altre.
-
Modularità
Organizzare un sistema software in componenti funzionali separate. Tutti questi principi di design sono supportati in un linguaggio di programmazione OO e aiutano ad ottenere robustezza, adattabilità, riusabilità.
OOP - paradigmi
-
Classi, oggetti, incapsulamento
L’informazione viene nascosta dentro scatole nere (le classi), e l’accesso ad essa è controllato.
-
Ereditarietà
Una classe può essere estesa da sottoclassi, che ne ereditano le funzioni e le specializzano.
-
Polimorfismo
Il tipo di una variabile non determina completamente il tipo dell’oggetto a cui essa si riferisce.