Salta al contenuto
recaplica

    Un attimo: controllo di sicurezza

    Cloudflare vuole assicurarsi che tu non sia un robot. Spunta la casella qui sotto e la ricerca riparte da sola.

    EN
    recaplica OOP: cos'è la programmazione orientata agli oggetti
    © 2026 Recaplica · recaplica.com — Tutti i diritti riservati
    Home › Tecnologia

    OOP: cos'è la programmazione orientata agli oggetti

    Di Redazione Recaplica · Aggiornato il 29 settembre 2026

    Cosa stampare

    Con "Margini: predefiniti" compaiono anche i numeri di pagina.

    Slide

    Scegli il taglio

    Lampo10 slideIl filo essenziale, per presentarlo in classeCompleta15 slideTutti i capitoli e gli approfondimenti

    Tutte e due hanno le note del relatore.

    Canale Telegram
    recaplica Chiaro in 30 secondi, tuo in 10 minuti.
    In 30 secondi Punti chiave Approfondimento Presentazione Falsi miti Mappa concettuale Quiz Flashcards FAQ

    In 30 secondi lettura lampo

    La 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

    • Un oggetto unisce stato (i dati) e comportamento (i metodi) in una sola unità.
    • Una classe è il progetto da cui si costruiscono gli oggetti, che ne sono le istanze.
    • L'incapsulamento nasconde lo stato interno di un oggetto e obbliga a interagire con esso solo tramite i suoi metodi.
    • L'ereditarietà fa ereditare a una classe stato e comportamento da un'altra, evitando di riscrivere codice comune.
    • Il polimorfismo è la possibilità che classi diverse implementino lo stesso metodo in modo diverso.
    • Il primo linguaggio a introdurre insieme incapsulamento ed ereditarietà fu Simula 67, completato in Norvegia nel 1967.

    L'Approfondimento

    Immagina 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ù comportamento

    Nella 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 costruito

    Un 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.

    Esempio pratico: pensa a una classe Bicicletta. Definisce che ogni bicicletta ha uno stato (la marcia attuale) e un comportamento (cambiare marcia). Ogni singola bicicletta costruita a partire da quel progetto, con la sua marcia impostata in un dato momento, è un’istanza della classe Bicicletta: stesso progetto, oggetti diversi.

    Incapsulamento: nascondere lo stato, non il codice

    Il 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 riscrivere

    La 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 diversi

    Quando 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 sottotipi

    La 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 scriverlo

    Le 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’accordo

    Nella 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.

    ConcettoCosa faEsempio concettuale
    IncapsulamentoNasconde lo stato interno, obbliga a usare i metodiUna bicicletta: cambi marcia con la leva, non toccando gli ingranaggi
    EreditarietàFa ereditare stato e comportamento a una classe da un’altraMountainBike eredita da Bicycle e aggiunge le sospensioni
    PolimorfismoStesso metodo, implementazioni diverse per classeMountainBike cambia marcia in modo diverso da Bicycle
    AstrazioneDefinisce un’interfaccia comune, lascia i dettagli ai sottotipiGraphicObject impone “disegnati”, ogni forma lo fa a modo suo

    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.

    Presentazione

    Slide pronte da scaricare e fare tue in PowerPoint o Google Slides, con le note del relatore. Scegli il taglio Lampo o quello Completo.

    Slide 1 della presentazione su OOP: OOPSlide 2 della presentazione su OOP: Cos'è, davvero, un oggetto nel codice?Slide 3 della presentazione su OOP: Il percorsoSlide 4 della presentazione su OOP: Capitolo 01: Oggetti e classiSlide 5 della presentazione su OOP: I tre ruoli di base: Oggetto, Classe, IstanzaSlide 6 della presentazione su OOP: Capitolo 02: IncapsulamentoSlide 7 della presentazione su OOP: Incapsulamento, un equivoco comuneSlide 8 della presentazione su OOP: Capitolo 03: Ereditarietà e polimorfismoSlide 9 della presentazione su OOP: Bicycle · MountainBike · PolimorfismoSlide 10 della presentazione su OOP: Capitolo 04: Astrazione e storiaSlide 11 della presentazione su OOP: L'astrazione, in breveSlide 12 della presentazione su OOP: Una storia norvegeseSlide 13 della presentazione su OOP: Non tutte le fonti tecniche raccontano gli stessi quattro pilastriSlide 14 della presentazione su OOP: Una sottoclasse ridefinisce un metodo della classe base con un comportamento diverso: come si chiama questo meccanismo?Slide 15 della presentazione su OOP: Per ripassare con calma
    Lampo10 slideIl filo essenziale, per presentarlo in classeCompleta15 slideTutti i capitoli e gli approfondimenti

    Falsi miti

    • ✗ Mito La OOP è l'unico modo giusto per scrivere software.

      ✓ Realtà Le fonti la descrivono come uno stile diffuso in molti linguaggi, tra cui Java, Python e C++, non come l'unica via: resta uno tra i modi possibili di organizzare il codice.

    • ✗ Mito Classe e oggetto sono la stessa cosa, solo due nomi diversi.

      ✓ Realtà La classe è il progetto, come il modello di una bicicletta; l'oggetto è l'esemplare costruito a partire da quel progetto. Da una sola classe un programma può creare molti oggetti diversi.

    • ✗ Mito L'incapsulamento serve a nascondere il codice sorgente per motivi di segretezza.

      ✓ Realtà Nella definizione della documentazione Java, l'incapsulamento nasconde lo stato interno di un oggetto e obbliga a interagire con esso solo tramite i suoi metodi: è un principio di progettazione, non una misura di segretezza commerciale.

    Mappa concettuale

    Trascina lo sfondo per muoverti e i nodi per riposizionarli; usa − e + per chiudere e aprire i rami.

    Personalizza
    Mappa concettuale: OOP: cos'è la programmazione orientata agli oggetti
    • OOP
      • Oggetti e classi Stato e comportamento uniti in un'unità
        • Oggetto Ha stato (dati) e comportamento (metodi)
        • Classe Il progetto da cui nascono gli oggetti
        • Istanza L'oggetto costruito a partire dalla classe
      • Incapsulamento Nasconde lo stato interno
        • Stato privato
        • Interfaccia pubblica Solo i metodi restano accessibili dall'esterno
      • Ereditarietà Riusa stato e comportamento comuni
        • Classe base
        • Sottoclasse Eredita e aggiunge solo ciò che la distingue
        • Override Sostituisce un metodo della classe base
      • Polimorfismo Stesso metodo, implementazioni diverse
        • Metodo comune
        • Implementazione propria per classe
      • Astrazione
        • Classe astratta Non si può creare un oggetto direttamente da essa
        • Metodo astratto Dichiarato senza un'implementazione
        • Interfaccia comune Il cosa, lasciando il come ai sottotipi
      • Storia
        • Simula 67 Completato in Norvegia nel 1967
        • Premio Turing Assegnato a Dahl e Nygaard decenni dopo

    Quiz: mettiti alla prova

    Rispondi alle domande per verificare quanto hai imparato: riceverai subito la correzione e una breve spiegazione.

    Voto 0/10 0/5
    1 Cos'è un "oggetto" nella programmazione orientata agli oggetti?

    La documentazione Java definisce l'oggetto come qualcosa che unisce stato, conservato nei campi, e comportamento, esposto attraverso i metodi: le due cose viaggiano insieme.

    2 Che rapporto c'è tra una classe e un oggetto?

    La classe è il progetto (il paragone usato dalle fonti è il modello di una bicicletta); l'oggetto è l'esemplare costruito seguendo quel progetto, cioè un'istanza della classe.

    3 Secondo la definizione della documentazione Java, cos'è l'incapsulamento?

    È la definizione riportata dalla documentazione Java: nascondere lo stato interno e far passare ogni interazione dai metodi dell'oggetto è chiamato incapsulamento.

    4 Cosa permette l'ereditarietà a una classe?

    Le fonti mostrano l'esempio di una sottoclasse che eredita campi e metodi da una classe base, restando libera di occuparsi solo delle funzionalità che la distinguono: il codice risulta più semplice da leggere.

    5 Vero o falso: tutte le fonti tecniche consultate concordano su un canone fisso di esattamente quattro pilastri dell'OOP.

    Falso: la documentazione MDN descrive l'OOP intorno a tre concetti principali (classi, ereditarietà, incapsulamento) e tratta il polimorfismo come un effetto dell'ereditarietà, non come un pilastro a parte; altre fonti trattano l'astrazione separatamente. MDN, da sola, basta a smontare l'idea di un canone fisso a quattro.

    Risposte: 1-C · 2-A · 3-A · 4-B · 5-B

    Flashcards

    Tocca la carta per girarla e verifica se ricordi la risposta, poi passa alla successiva.

    1 / 8

    Spiegalo con parole tue

    Il 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.

    La 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.

    Domande e risposte

    Cos'è 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.

    Fonti consultate

    • The Java Tutorials — Object-Oriented Programming Concepts
    • MDN Web Docs — Object-oriented programming
    • Python 3 — documentazione ufficiale, Classes
    • The Java Tutorials — Abstract Methods and Classes
    • IEEE ETHW — Milestones: Object-Oriented Programming, 1961-1967

    Ogni Recap passa da una revisione indipendente prima della pubblicazione.

    Ogni sera, i nuovi Recap del giorno sul canale Telegram. Iscriviti al canale →

    Continua a imparare

    • Tecnologia Database relazionali: come tabelle, righe e chiavi organizzano i dati Un database relazionale organizza i dati in tabelle, ciascuna dedicata a un tema, per esempio clienti o ordini. Ogni riga della tabella è un record, ogni colonna un campo con lo stesso tipo di informazione per tutte le righe. Una chiave primaria identifica in modo univoco ogni riga, mentre una chiave esterna la collega alle righe di un'altra tabella, così i dati restano coerenti senza essere ripetuti ovunque. Le tabelle si combinano secondo tre tipi di relazione, uno a uno, uno a molti, molti a molti, e si interrogano con SQL, il linguaggio standard di questi sistemi. Leggi il Recap →
    • Tecnologia Database relazionali e non relazionali: differenze ed esempi pratici Un database relazionale organizza i dati in tabelle con uno schema fisso, deciso prima di scrivere la prima riga. Un database non relazionale, o NoSQL, usa invece schemi flessibili pensati per un modello di dati specifico: documenti come in MongoDB, coppie chiave-valore come in Redis, colonne partizionate come in Apache Cassandra, nodi collegati da relazioni come in Neo4j. I database NoSQL nascono verso la fine degli anni 2000, quando il costo dello storage cala e cresce il bisogno di sistemi distribuiti su più macchine. La scelta tra i due modelli dipende dal tipo di dato e dal caso d'uso, non da quale sia genericamente più veloce o più scalabile: entrambi possono crescere, in modi diversi, e il teorema CAP spiega il compromesso che ogni sistema distribuito affronta quando la rete tra i suoi nodi si interrompe. Leggi il Recap →
    • Tecnologia DBMS: cos'è, i tipi principali e alcuni esempi Un DBMS, sigla di database management system, è il software che permette di creare, interrogare e aggiornare i dati di un database, senza che chi lo usa debba sapere come sono salvati fisicamente. Rispetto a fogli di calcolo o archivi di file, centralizza i dati e li rende più coerenti, riducendo duplicazioni e problemi di sicurezza. Il tipo più diffuso è il modello relazionale, che organizza i dati in tabelle collegate da chiavi e si interroga con SQL. Esistono anche DBMS non relazionali, o NoSQL, pensati per dati più flessibili, e due modelli più antichi, quello gerarchico e quello a rete, oltre al modello orientato a oggetti. Leggi il Recap →

    recaplica

    Chiaro in 30 secondi, tuo in 10 minuti.

    I Recap Mappe concettuali Chiedi un Recap Canale Telegram Crea una mappa concettuale Il metodo Chi siamo Privacy e cookie Note legali e condizioni d'uso

    © 2026 Recaplica · Un progetto di Curi S.r.l. — P. IVA 05472000750

    Statistiche, solo se vuoi

    Per capire quali Recap aiutano di più useremmo Google Analytics, con dati aggregati e anonimi. Parte solo col tuo ok, e puoi cambiare idea quando vuoi. Informativa privacy