|
recaplica
OOP: cos'è la programmazione orientata agli oggetti | |||||||||||||||
| © 2026 Recaplica · recaplica.com — Tutti i diritti riservati | |||||||||||||||
OOP: cos'è la programmazione orientata agli oggettiCosa stampare Con "Margini: predefiniti" compaiono anche i numeri di pagina. SlideScegli il taglio Lampo10 slideIl filo essenziale, per presentarlo in classeCompleta15 slideTutti i capitoli e gli approfondimentiTutte e due hanno le note del relatore. In 30 secondi lettura lampoLa programmazione orientata agli oggetti, o OOP, organizza il codice attorno a oggetti che uniscono dati e funzioni invece di tenerli separati. Ogni oggetto nasce da una classe, il progetto che ne definisce stato e comportamento, un po' come un modello di bicicletta definisce ogni bicicletta costruita su di esso. Quattro idee ricorrono nella documentazione dei linguaggi che la usano: incapsulamento, ereditarietà, polimorfismo e astrazione, anche se le fonti non le raccontano sempre allo stesso modo. Java, Python e C++ la adottano ciascuno con i propri meccanismi, ma nessuna fonte la presenta come l'unico stile di programmazione possibile. Punti Chiave
L'ApprofondimentoImmagina di dover scrivere un programma che gestisce una scuola: studenti, corsi, voti. Puoi tenere tutto in liste di numeri e testi separati, oppure puoi raggruppare, per ogni studente, i suoi dati insieme alle azioni che lo riguardano: iscriversi a un corso, ricevere un voto. La seconda strada è quella della programmazione orientata agli oggetti, la OOP: uno stile di programmazione che organizza il codice attorno a oggetti, unità che tengono insieme dati e funzioni invece di separarli. È un modo di pensare diffuso in molti linguaggi diversi, come JavaScript, TypeScript, Java, Python e C++, anche se non è l’unico possibile. Un oggetto è dati più comportamentoNella documentazione ufficiale del linguaggio Java, un oggetto software conserva il proprio stato in campi (le variabili che gli appartengono) ed espone il proprio comportamento attraverso metodi, cioè funzioni che operano su quello stato. I metodi sono anche il modo in cui un oggetto comunica con un altro: quando due oggetti collaborano, di solito lo fanno chiamandosi a vicenda i metodi, non leggendosi i dati direttamente. Questa idea non è lontana da come si descrivono gli oggetti del mondo reale: una bicicletta ha uno stato (la marcia inserita in un dato momento, la velocità) e un comportamento (frenare, cambiare marcia). Tradurre questa stessa struttura nel codice è il punto di partenza della OOP. La classe è il progetto, l’oggetto è il pezzo costruitoUn oggetto non nasce dal nulla: nasce da una classe, che la documentazione Java descrive come il progetto da cui si creano i singoli oggetti. La classe stabilisce quali campi e quali metodi avrà ogni oggetto costruito a partire da essa; l’oggetto stesso, una volta creato, si dice un’istanza di quella classe.
Incapsulamento: nascondere lo stato, non il codiceIl primo dei concetti che la documentazione Java associa alla OOP è l’incapsulamento: nascondere lo stato interno di un oggetto e richiedere che ogni interazione con esso passi dai suoi metodi. Non è, come si crede spesso, una forma di segretezza sul codice sorgente: è un modo di tenere separato ciò che un oggetto fa da come lo fa internamente, così che il resto del programma possa usarlo senza doversi occupare dei suoi dettagli interni. Anche la documentazione MDN dà una definizione simile: tenere privato lo stato interno di un oggetto, con una netta divisione tra la sua interfaccia pubblica e i suoi dati privati, si chiama incapsulamento. Ereditarietà: riusare senza riscrivereLa OOP permette a una classe di ereditare stato e comportamento comuni da un’altra classe. Nell’esempio della documentazione Java, una classe MountainBike può ereditare tutti i campi e i metodi di una classe Bicycle più generale, concentrando il proprio codice solo su ciò che la rende diversa, come le sospensioni. Il risultato, secondo la stessa fonte, è codice più facile da leggere: non bisogna ripetere in MountainBike quello che è già scritto in Bicycle. Anche la documentazione ufficiale di Python conferma che l’ereditarietà è una funzionalità standard della OOP, con un meccanismo proprio: una classe derivata può sostituire (override) qualunque metodo della classe base, e un metodo di quest’ultima può finire per richiamare, senza saperlo, la versione ridefinita nella sottoclasse. Polimorfismo: lo stesso nome, comportamenti diversiQuando un metodo ha lo stesso nome ma un’implementazione diversa in classi diverse, la documentazione MDN chiama questa caratteristica polimorfismo. Capita tipicamente quando una sottoclasse sostituisce (override) l’implementazione ereditata da una classe superiore, per esempio quando una MountainBike gestisce il cambio marcia in modo diverso da una Bicycle generica pur chiamandosi allo stesso modo. Va detto con chiarezza: la documentazione MDN organizza l’intero argomento intorno a tre concetti principali, classi e istanze, ereditarietà, incapsulamento, e presenta il polimorfismo come un effetto dell’ereditarietà più che come un pilastro separato. È una delle ragioni per cui, più avanti in questo Recap, si dice che non tutte le fonti tecniche raccontano la OOP con lo stesso identico elenco di concetti. Astrazione: definire il cosa, lasciare il come ai sottotipiLa documentazione Java descrive anche le classi astratte: una classe dichiarata astratta non può essere trasformata direttamente in un oggetto, ma può avere sottoclassi. Può contenere metodi astratti, dichiarati senza un’implementazione: sono un obbligo, non un suggerimento, perché ogni sottoclasse concreta dovrà fornirne una propria. L’esempio della stessa fonte è una classe astratta GraphicObject: tutti gli oggetti grafici devono potersi disegnare e ridimensionare, ma ciascun tipo lo fa a modo suo, un cerchio in un modo, un rettangolo in un altro. La classe astratta cattura ciò che hanno in comune, il cosa, e lascia a ogni sottoclasse il compito di stabilire il come. Questo modo di separare l’interfaccia comune dai dettagli di attuazione è quello che le fonti chiamano astrazione. Un’idea nata per simulare il mondo, non per scriverloLe radici della OOP, secondo la targa storica dell’IEEE Engineering and Technology History Wiki, risalgono al 1961, quando Ole-Johan Dahl e Kristen Nygaard cominciarono a lavorare insieme al Norwegian Computer Center a un linguaggio per descrivere simulazioni al computer. Il risultato del loro lavoro, Simula 67, fu completato nel 1967 e introdusse insieme incapsulamento, ereditarietà, il legame tardivo dei metodi e la creazione dinamica di oggetti: gli elementi che oggi si considerano essenziali in un linguaggio orientato agli oggetti. Curiosamente, l’idea di “oggetto” non nacque per scrivere software in generale, ma per modellare sistemi complessi, come le code di attesa o il traffico. A distanza di oltre trent’anni da quel lavoro, Dahl e Nygaard ricevettero il premio Turing, il riconoscimento più importante dell’informatica, spesso paragonato al Nobel del settore, proprio per le idee alla base di Simula I e Simula 67. Quattro pilastri? Le fonti non sono tutte d’accordoNella scuola e nei manuali capita spesso di leggere che la OOP si regge su quattro pilastri: incapsulamento, ereditarietà, polimorfismo e astrazione. È una sistemazione didattica utile, ma non un canone su cui tutte le fonti tecniche concordano nello stesso modo: la documentazione MDN, come si è visto, ne descrive tre e tratta il polimorfismo come una conseguenza dell’ereditarietà; altre fonti, come quella Java sulle classi astratte, trattano l’astrazione in una pagina a parte, senza inserirla in un elenco numerato di pilastri. Conoscere questa sfumatura aiuta a non presentare come un dato fisso quello che, in realtà, è un modo tra i possibili di organizzare lo stesso insieme di idee.
Questi concetti non appartengono a un solo linguaggio. La storia del computer mostra come i linguaggi di programmazione si siano evoluti in stili diversi nel tempo; oggi la OOP convive con altri approcci, e il modo in cui un programma la applica dipende anche da cosa deve fare, per esempio elaborare dati destinati a un database relazionale o eseguire un algoritmo di calcolo. La documentazione ufficiale di Python conferma che gli stessi concetti, ereditarietà multipla compresa, si ritrovano anche in un linguaggio con una sintassi molto diversa da quella di Java. PresentazioneSlide pronte da scaricare e fare tue in PowerPoint o Google Slides, con le note del relatore. Scegli il taglio Lampo o quello Completo. ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Falsi miti
Mappa concettualeTrascina lo sfondo per muoverti e i nodi per riposizionarli; usa − e + per chiudere e aprire i rami.
Quiz: mettiti alla provaRispondi alle domande per verificare quanto hai imparato: riceverai subito la correzione e una breve spiegazione. Voto 0/10 0/5
FlashcardsTocca la carta per girarla e verifica se ricordi la risposta, poi passa alla successiva. 1 / 8 Spiegalo con parole tueIl test definitivo: se sai spiegarlo con parole semplici, lo hai capito davvero. Scrivi la tua spiegazione, poi confrontala col Recap. La tua spiegazione resta salvata solo su questo dispositivo.
Domande e risposteCos'è la OOP, in riassunto?È uno stile di programmazione che organizza il codice attorno a oggetti, unità che tengono insieme dati (stato) e funzioni che li usano (comportamento), invece di tenere dati e funzioni separati come in altri stili di scrittura del codice. Quali sono i pilastri della OOP?Nella didattica più diffusa sono quattro: incapsulamento, ereditarietà, polimorfismo e astrazione. Le fonti tecniche però non concordano tutte su questo conteggio: la documentazione MDN, ad esempio, descrive l'OOP intorno a tre concetti principali e considera il polimorfismo un effetto dell'ereditarietà. Qual è la differenza tra una classe e un oggetto?La classe è il progetto, come il modello di una bicicletta; l'oggetto è l'esemplare costruito seguendo quel progetto. Da una stessa classe si possono creare molti oggetti diversi tra loro solo nei valori del loro stato. Dov'è nata la programmazione orientata agli oggetti?Le sue basi risalgono a Simula 67, un linguaggio sviluppato in Norvegia da Ole-Johan Dahl e Kristen Nygaard, che iniziarono a lavorarci nel 1961 e lo completarono nel 1967: fu il primo a introdurre insieme incapsulamento ed ereditarietà. Come si fa una mappa concettuale della OOP per ripassare?Conviene partire dai due elementi di base, oggetto e classe, e da lì diramare i concetti che li governano: incapsulamento, ereditarietà, polimorfismo e astrazione. La mappa di questo Recap segue proprio questa struttura ed è un buon punto di partenza per uno schema di verifica. Ogni Recap passa da una revisione indipendente prima della pubblicazione. |













