Panoramica
La programmazione orientata agli oggetti (OOP) è un paradigma di programmazione basato sul concetto di “oggetti”, che possono contenere dati, sotto forma di campi, spesso noti come attributi; e codice, sotto forma di procedure, spesso note come metodi. Una caratteristica degli oggetti è che le procedure di un oggetto possono accedere e spesso modificare i campi di dati dell’oggetto a cui sono associate (gli oggetti hanno una nozione di “questo” o “sé”). Esiste una notevole diversità di linguaggi OOP, ma i più popolari sono basati su classi, il che significa che gli oggetti sono istanze di classi, che tipicamente determinano anche il loro tipo.
Discussione
Finora ci siamo concentrati sulla programmazione procedurale. Basata sulla programmazione strutturata, le procedure (routine, subroutine o funzioni) contengono una serie di passi computazionali da eseguire. Ogni data procedura può essere chiamata in qualsiasi momento durante l’esecuzione di un programma, anche da altre procedure o da se stessa. L’obiettivo della programmazione procedurale è quello di suddividere un compito di programmazione in un insieme di variabili, strutture dati e subroutine. Piccoli programmi e script tendono ad essere più facili da sviluppare usando un semplice approccio procedurale.
La programmazione orientata agli oggetti invece scompone un compito di programmazione in oggetti che espongono il comportamento (metodi) e i dati (membri o attributi) usando interfacce. La distinzione più importante è che mentre la programmazione procedurale usa procedure per operare su strutture di dati separate, la programmazione orientata agli oggetti raggruppa le due cose insieme, così un “oggetto”, che è un’istanza di una classe, opera sulla sua “propria” struttura di dati. I programmi più grandi beneficiano di un migliore isolamento del codice e dei dati e del riutilizzo fornito da un approccio orientato agli oggetti.
Oggetti e classi sono spesso progettati per rappresentare oggetti del mondo reale. Consideriamo una porta come esempio di un oggetto del mondo reale. La maggior parte delle porte ha una funzionalità limitata. Possono essere aperte e chiuse, bloccate e sbloccate. Nella programmazione procedurale, potremmo progettare funzioni per aprire, chiudere, bloccare e sbloccare una porta, come:
Procedural Programming - FunctionsOpenDoor(door)CloseDoor(door)LockDoor(door)UnlockDoor(door)
La programmazione orientata agli oggetti combina codice e dati, così che, piuttosto che avere funzioni separate che agiscono sulle porte, progettiamo porte che hanno metodi che possono agire su se stesse. I metodi rappresentano qualcosa che l’oggetto può fare, e sono tipicamente definiti usando i verbi. Lo pseudocodice delle porte orientate agli oggetti potrebbe assomigliare a:
Object-Oriented Programming - Methodsdoor.Open()door.Close()door.Lock()door.Unlock()
Gli oggetti possono anche avere attributi, qualcosa che l’oggetto è o ha, e sono tipicamente definiti usando nomi o aggettivi. Gli attributi della porta potrebbero includere:
Object-Oriented Programming - Attributesdoor.Heightdoor.Widthdoor.Colordoor.Closeddoor.Locked
Quando scriviamo il codice per definire una porta generica, creiamo una classe di porta. La classe della porta conterrebbe tutti i metodi che una porta può eseguire e tutti gli attributi che una porta potrebbe avere. Creeremmo poi istanze della classe (oggetti) per rappresentare porte specifiche, come la porta d’ingresso, la porta sul retro, o la porta della stanza di una casa, o la porta sinistra e la porta destra di un’automobile.
Termini chiave
attributo Una specifica che definisce una proprietà di un oggetto. class Un programma estensibile – modello di codice per creare oggetti, fornendo valori iniziali per lo stato (variabili membro) e implementazioni di comportamento (funzioni membro o metodi). instance :Un’occorrenza concreta di un oggetto. method Una specifica che definisce una procedura o un comportamento di un oggetto. object Una particolare istanza di una classe dove l’oggetto può essere una combinazione di variabili, funzioni e strutture dati. this, self, or Me Parole chiave usate in alcuni linguaggi di programmazione per riferirsi all’oggetto, classe o altra entità di cui il codice in esecuzione fa parte.