Classi, Classi Astratte e Interfacce in PHP

1.230 visite

programmazione-php

Con l’avvento di PHP5 sono state introdotte notevoli caratteristiche come la possibilità di sviluppare secondo il paradigma OOP (Programmazione ad Oggetti).

Sono state introdotte a tale scopo infatti: le Classi, le Classi Astratte e le Interfacce.

Classe (class)

Una classe in PHP si definisce con la parola chiave: class.

Una classe è un tipo di dato che al suo interno contiene e definisce una struttura di un oggetto che vogliamo descrivere.

Per fare ciò una classe è suddivisa generlamente in 3 parti:

  1. La parte di dichiarazione degli attributi
  2. La parte del costruttore e distruttore della classe
  3. La parte di definizione dei metodi della classe

In altre parole e più semplicemente una classe è un tipo di dato composto da attributi (o proprietà) e metodi e serve a descrivere un oggetto che è un’ istanza di una classe.

Classi Astratte (abstract class)

Una classe astratta è una speciale classe dove uno o più metodi non vengono implementati. Perciò una classe astratta non può essere instanziata cioè non è possibile creare un oggetto da una classe astratta. Questo tipo di classe va considerata come uno “scheletro” usata per creare sotto-classi. Una volta creata una classe che estende la classe astratta questa per poter essere instanziata deve implementare tutti i metodi astratti ereditatai altrimenti diventano a loro volta classi astratte.

Per crearla basta inserire il prefisso abstract alla classe:

Questo tipo di classi possono avere costanti (consts), membri, metodi e metodi definiti.

Inoltre si possono avere metodi con qualsiasi visibilità: public, protected o private.

Interfacce (interface)

Anche le interfacce sono delle “classi” speciali che non possono essere instanziate ma solamente implementate e in pratica delineano una struttura della classe. Ma a differenza delle astratte qui tutti i metodi sono astratti e vanno implementati tutti dalla classe ne fa l’implements. Non è possibile inoltre specificare attributi, definiscono quindi una serie di metodi che vanno implementati.

La parola chiave da usare è interface al posto di class:

A differenza delle classi astratte nelle interfacce la visibilità dei metodi può essere solo public.

Differenze tra abstract class e interface

Riepilogando vediamo la differenza tra le classi astratte e le interfacce:

  • Le classi astratte possono avere consts, membri, “stubs” di metodo e metodi definiti, mentre le interfacce possono avere solo consts e “stubs” di metodi .
  • Metodi e membri di una classe astratta possono essere definiti con qualsiasi visibilità, mentre tutti i metodi di un’interfaccia devono essere definiti come pubblici.
  • Quando si eredita una classe astratta, la classe figlio deve definire i metodi astratti, mentre l’interfaccia può estendere un’altra interfaccia e metodi non devono essere definiti.
  • Una classe figlio può definire metodi della classe astratta con la stessa visibilità o superiore, mentre una classe che implementa un’interfaccia deve definire i metodi con la stessa visibilità.

In altre parole potrei dire che le classi astratte pure definiscono un contratto di tipo “specifico” con le instanze delle classi che la estenderanno (esempio classe astratta mammifero e classi figlie uomo, scimmia, ecc..), mentre le interfacce rappresentano un contratto di tipo “generico” con gli oggetti che le implementeranno.

Iscriviti alla newsletter e rimani sempre aggiornato

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *