Document Actions

Interfacce
medio

Up one level
Il fulcro dell'Architettura a Componenti sono le Interfacce, le quali permettono di definire un contratto semantico che specifica il comportamento delle classi che le implementano

Piu' in dettaglio, un'interfaccia in Zope 3 e' a sua volta un "oggetto vuoto" che descrive e documenta il comportamento "esterno" dei componenti, gli oggetti che dichiarano di implementarlo, mediante l'uso di documentazione informale (doc string python), definizione di attributi, metodi e invarianti, cioe' condizioni che devono essere valide per le classi python che implementano l'interfaccia specifica.

L'uso delle interfacce offre diverse prerogative:

  • specificando il comportamento degli oggetti rappresentano un contratto semantico a cui un componente si deve attenere
  • tramite le descrizioni e i commenti informali offrono la necessaria documentazione sul comportamento atteso dei componenti
  • classificano gli oggetti in base al comportamento dichiarato, e non in base alla propria classe di appartenenza: oggetti con la stessa interfaccia possono essere usati allo stesso modo
  • permettono di stabilire se i vari oggetti hanno interfacce compatibili, ad esempio richiedendo che un oggetto che vuole usare un determinato servizio implementi una specifica interfaccia

Facendo riferimento all'esempio del componente per la notifica alla lista di iscritti, l'interfaccia per la funzione di notifica potrebbe essere definita in questo modo:

from zope.interface import Interface

class INotificabile(Interface):

def notifica():
"""Invia la notifica agli iscritti
"""

Disponendo delle due implementazioni alternative per inviare la notifica via mail o via SMS, chiunque richiami il metodo "Notifica" sull'oggetto vedra' la notifica funzionare correttamente, anche se un adattatore ne ha modificato l'implementazione originale.

L'architettura a componenti utilizza le interfacce principalmente per classificare gli oggetti e per connetterli fra loro: Zope 3 non classifica mai i componenti in base alla loro classe, in quanto si vuole rendere semplice l'aggiunta di implementazioni alternative.

Per quanto visto, l'approccio basato su componenti offre dei vantaggi significativi rispetto a quello basato su ereditarieta', tuttavia non si pone come unica strada.

L'ereditarieta' continua a funzionare, e Zope 3 non impedisce di usarla nei modi che gli sviluppatori ritengono opportuni!

by Maurizio Delmonte last modified 2007-06-06 10:15
Contributors: Maurizio Delmonte