Archivi tag: programmazione object oriented

Programmazione Object Oriented

Premessa: questo breve post non vuole essere una trattazione esauriente ed esaustiva circa l’argomento ma solo ed esclusivamente un appunto meritevole di approfondimenti, in quanto ci sono tonnellate di libri che trattano l’argomento in modo certamente migliore di quanto possa fare qualsiasi sito web.

La Programmazione Orientata agli Oggetti è un paradigma che prevede il raggruppamento in un’unica entità sia di strutture dati che di procedure che operano su di esse e prevede l’uso di classi, oggetti e tecniche chiamate incapsulamento, ereditarietà, polimorfismo e binding dinamico.

Classi

Sono uno strumento per costruire strutture dati che contengono non solo dati ma anche il codice per gestirli, quindi all’interno delle classi troviamo:

Attributi: ovvero i dati da gestire

Metodi: ovvero le procedure che operano su tali dati

Oggetto

Un oggetto viene definito come un’istanza di una classe, questo permette di utilizzare il principio noto come Information Hiding, il quale dice che si deve accedere agli attributi dell’istanza solo mediante i metodi messi a disposizione dall’oggetto stesso.

Incapsulamento

E’ la proprietà per cui un oggetto contiene al suo interno gli attrbuti (dati) ed i metadati (procedure) per accedono ai dati stessi. Lo scopo principale dell’incapsulamento è dare accesso ai dati incapsulati solo mediante metadati definiti nell’interfaccia.

Ereditarietà

La programmazione orientata agli oggetti prevede un meccanismo molto importante: l’ereditarietà, la quale permette di aggiungere membri ad una classe e di modificare il comportamento dei metadati in modo da adattarli alla nuova struttura della classe. Una classe ereditaria, eredita tutti i metadati e gli attributi della classe genitrice e può aggiungere membri, attributi e metodi alla classe in modo tale da poterne ridefinire il comportamento.

Polimorfismo

La possibilità che le classi derivate  implementino in modo differente i metodi e le proprietà dei propri antenati, rende possibile che gli oggetti appartenenti a delle sottoclassi di una stessa classe rispondano diversamente alle stesse istruzioni ad esempio

             Animale
  +-------------|--------------+
  |                            |
Cane                         Gatto

Considerando Cane e Gatto come classi derivate da Animale, e considerando che presentano entrambe il metodo mangia(), questo metodo in un caso potrebbe restituire osso nell’altro pesce in quanto potremmo ridefinirlo in entrambe le classi.

Bindig Dinamico

Si parla di Bindig Dinamico quando la versione del metodo da usare viene scelta sulla base del tipo di oggetto effettivamente contenuto in una variabile a runtime invece che al momento della compilazione.