Programmazione orientata agli oggetti: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
m Reverted edits by 193.204.219.94 (talk) to last version by Meridiana solare: Rimozione ingiustificata di contenuti
Etichette: Rollback Link a pagina di disambiguazione SWViewer [1.4]
Riga 126:
Alcuni linguaggi come [[Java (linguaggio di programmazione)|Java]] e [[C++]] preferiscono un approccio ibrido rispetto all'OOP "puro", ad esempio del linguaggio [[Smalltalk]], prevedendo che alcuni tipi di dati primitivi non siano considerati come oggetti. I vantaggi di quest'approccio sono particolarmente evidenti in presenza di computazioni numeriche; di contro, ogni volta che è necessario un oggetto in luogo di un tipo primitivo è necessario ricorrere ad un apposito ''wrapper'', e questo può portare a cali prestazionali.
 
Tale wrapper può anche essere dato automaticamente dal linguaggio stesso, come nel caso del Java o del [[C sharp|C#]], tramite una conversione automatica chiamata "autoboxing" (inscatolamento automatico). Essa permette di mettere valori di tipi primitivi (es. interi, caratteri) all'interno di oggetti, quindi di richiamare parti di codice che vorrebbero oggetti senza scrivere esplicitamente l'istruzione di creazione dell'oggetto che racchiude il valore. Tale inscatolamento risolve il problema di scrivere un wrapper a mano, ma ovviamente il calo di prestazioni rimane.
 
Altre critiche all'OOP riguardano la maggiore complessità strutturale rispetto ai linguaggi procedurali, a fronte delle limitazioni introdotte per seguire il paradigma a oggetti. Esistono inoltre alcune carenze concettuali (in particolare riguardo alla sottotipizzazione), che aggiunte alle diverse implementazioni nei linguaggi possono causare problemi al programmatore. Ad esempio il funzionamento in contesti polimorfi non è garantito quando i metodi vengano ridefiniti in una catena di eredità. Inoltre cambiare le definizioni nelle classi base può portare a introdurre errori in cascata nelle sottoclassi ([[problema della classe base fragile]]).