Programmazione Orientata agli Oggetti (OOP): differenze tra le versioni

Da Bioingegneria Elettronica e Informatica.
Riga 1: Riga 1:
 +
== Introduzione ==
 
La programmazione orientata agli oggetti (OOP) consiste in un paradigma di programmazione basato sugli oggetti, ognuno delle quali è un'istanza di una classe, e queste classi sono tutte parte di una gerarchia di entità unite fra di loro da una relazione di ereditarietà. Ricapitolando:
 
La programmazione orientata agli oggetti (OOP) consiste in un paradigma di programmazione basato sugli oggetti, ognuno delle quali è un'istanza di una classe, e queste classi sono tutte parte di una gerarchia di entità unite fra di loro da una relazione di ereditarietà. Ricapitolando:
 
# OOP utilizza un insieme di oggetti;
 
# OOP utilizza un insieme di oggetti;
 
# ogni oggetto è istanza di una classe;
 
# ogni oggetto è istanza di una classe;
 
# ogni classe è legata alle altre attraverso una relazione detta eredità.
 
# ogni classe è legata alle altre attraverso una relazione detta eredità.
 +
 +
Nell'ambito della programmazione orientata agli oggetti, è necessario definire tre importanti proprietà:
 +
# Incapsulamento – si basa sul principio dell’information hiding e permette di nascondere all’utente i dettagli implementativi di una classe; quindi l’utente interagisce con gli oggetti di una determinata classe attraverso le interfacce messe a disposizione dall’oggetto stesso.
 +
# Ereditarietà – la possibilità per un oggetto di acquisire le caratteristiche di un’altra classe; tramite le relazioni di generalizzazione/specializzazione, una superclasse definisce un concetto generale, che viene poi specializzato dalle sottoclassi.
 +
# Polimorfismo – la possibilità di utilizzare uno stesso nome per definire metodi diversi permettendo di avere accesso a diverse implementazioni di una funzione attraverso un solo nome (un’interfaccia, più metodi).
  
 
== Le Classi ==
 
== Le Classi ==
 
Alla base della programmazione ad oggetti c’è il concetto di "classe". Una classe è un costrutto utilizzato per la modellazione di entità, quindi per la creazione (istanziazione) di oggetti; quindi, un'istanza della classe si definisce “oggetto”.  
 
Alla base della programmazione ad oggetti c’è il concetto di "classe". Una classe è un costrutto utilizzato per la modellazione di entità, quindi per la creazione (istanziazione) di oggetti; quindi, un'istanza della classe si definisce “oggetto”.  
 
 
All'interno di una classe si possono distinguere i seguenti elementi:
 
All'interno di una classe si possono distinguere i seguenti elementi:
 
* Attributo/i;
 
* Attributo/i;
 
* Metodo/i.
 
* Metodo/i.
 +
Gli "attributi", o variabili membro, definiti all’interno di una classe, costituiscono lo stato della classe stessa. Un "metodo" di una classe, invece, definisce una funzionalità della classe; i metodi servono a specificare il comportamento dell’entità (ovvero l’oggetto) di cui la classe è rappresentazione. Trattandosi di funzioni, un metodo può ritornare valori, oppure nulla (come le procedure o “funzioni void”).
  
Concettualmente parlando, non cambia nulla rispetto a quanto imparato nella programmazione strutturata: il codice, la necessità di sviluppare una funzione o una procedura, ecc… rimane la stessa. Si immagini una classe come l’estensione di una “struct”, all’interno della quale è possibile andare a definire, oltre che alle semplici variabili, anche delle funzionalità.
 
Gli “attributi”, o variabili membro, definiti all’interno di una classe, costituiscono lo stato della classe stessa. Un “metodo” di una classe, invece, definisce una funzionalità della classe stessa; i metodi servono a specificare il comportamento dell’entità (ovvero l’oggetto) di cui la classe è rappresentazione. Trattandosi di funzioni, un metodo può ritornare valori, oppure nulla (come le procedure o “funzioni void”).
 
Un importante concetto associato ai metodi e agli attributi delle classi è la “visibilità”. In C++ si definiscono tre tipologie di attributi e metodi:
 
• Public - gli attributi o i metodi sono accessibili dall’esterno della stessa classe;
 
• Private - gli attributi o i metodi sono accessibili solo dalla stessa classe;
 
• Protected - gli attributi o i metodi sono accessibili dalla stessa classe o da quelle derivate da essa.
 
L’importanza di assegnare un tipo visibilità al metodo o all’attributo, risiede nel “controllo” dell’istanza associata alla classe (oggetto). Poter permettere ad una riga di codice esterna alla classe di modificare un attributo privato può portare a comportamenti non previsti del codice e quindi a crash del programma.
 
 
 
E’ buona prassi di programmazione, associare:
 
• Public - metodi che possono essere richiamati all’esterno della classe;
 
• Private - attributi della classe e metodi che lavorano con variabili della classe stessa senza generare un output “utile” all’esterno.
 
Nell’ambito della programmazione orientata agli oggetti, è necessario definire tre importanti proprietà:
 
• Incapsulamento – si basa sul principio dell’information hiding e permette di nascondere all’utente i dettagli implementativi di una classe; quindi l’utente interagisce con gli oggetti di una determinata classe attraverso le interfacce messe a disposizione dall’oggetto stesso.
 
• Ereditarietà – la possibilità per un oggetto di acquisire le caratteristiche di un’altra classe; tramite le relazioni di generalizzazione/specializzazione, una superclasse definisce un concetto generale, che viene poi specializzato dalle sottoclassi.
 
• Polimorfismo – la possibilità di utilizzare uno stesso nome per definire metodi diversi permettendo di avere accesso a diverse implementazioni di una funzione attraverso un solo nome (un’interfaccia, più metodi). Il polimorfismo può essere effettuato sia a compile-time che a run-time; il primo caso può essere realizzato tramite overload di funzioni e operatori, mentre quello a run-time prevede l’uso di classi derivate e funzioni virtuali (affrontate nel seguito).
 
  
 
== Ereditarietà ==
 
== Ereditarietà ==
  
 
== Polimorfismo ==
 
== Polimorfismo ==

Versione delle 11:45, 18 apr 2017

Introduzione

La programmazione orientata agli oggetti (OOP) consiste in un paradigma di programmazione basato sugli oggetti, ognuno delle quali è un'istanza di una classe, e queste classi sono tutte parte di una gerarchia di entità unite fra di loro da una relazione di ereditarietà. Ricapitolando:

  1. OOP utilizza un insieme di oggetti;
  2. ogni oggetto è istanza di una classe;
  3. ogni classe è legata alle altre attraverso una relazione detta eredità.

Nell'ambito della programmazione orientata agli oggetti, è necessario definire tre importanti proprietà:

  1. Incapsulamento – si basa sul principio dell’information hiding e permette di nascondere all’utente i dettagli implementativi di una classe; quindi l’utente interagisce con gli oggetti di una determinata classe attraverso le interfacce messe a disposizione dall’oggetto stesso.
  2. Ereditarietà – la possibilità per un oggetto di acquisire le caratteristiche di un’altra classe; tramite le relazioni di generalizzazione/specializzazione, una superclasse definisce un concetto generale, che viene poi specializzato dalle sottoclassi.
  3. Polimorfismo – la possibilità di utilizzare uno stesso nome per definire metodi diversi permettendo di avere accesso a diverse implementazioni di una funzione attraverso un solo nome (un’interfaccia, più metodi).

Le Classi

Alla base della programmazione ad oggetti c’è il concetto di "classe". Una classe è un costrutto utilizzato per la modellazione di entità, quindi per la creazione (istanziazione) di oggetti; quindi, un'istanza della classe si definisce “oggetto”. All'interno di una classe si possono distinguere i seguenti elementi:

  • Attributo/i;
  • Metodo/i.

Gli "attributi", o variabili membro, definiti all’interno di una classe, costituiscono lo stato della classe stessa. Un "metodo" di una classe, invece, definisce una funzionalità della classe; i metodi servono a specificare il comportamento dell’entità (ovvero l’oggetto) di cui la classe è rappresentazione. Trattandosi di funzioni, un metodo può ritornare valori, oppure nulla (come le procedure o “funzioni void”).


Ereditarietà

Polimorfismo