Saltar la navegación

8.- Propiedades compartidas y restringidas.

Caso práctico

María continúa con sus problemas de propiedades...

-Y si tengo una propiedad que no debería cambiar en según qué circunstancias, ¿cómo lo gestiono?

Imagen una pantalla de ordenador que muestra varias líneas escritas en un lenguaje de programación.

Los objetos de una clase que tiene una propiedad compartida o ligada notifican a otros objetos oyentes interesados, cuando el valor de dicha propiedad cambia, permitiendo a estos objetos realizar alguna acción. Cuando la propiedad cambia, se crea un objeto (de una clase que hereda de ObjetEvent) que contiene información acerca de la propiedad (su nombre, el valor previo y el nuevo valor), y lo pasa a los otros objetos oyentes interesados en el cambio.

Se ve un candado abierto.

La notificación del cambio se realiza a través de la generación de un PropertyChangeEventPropertyChangeEvent. Los objetos que deseen ser notificados del cambio de una propiedad limitada deberán registrarse como auditores. Así, el componente de software que esté implementando la propiedad limitada suministrará métodos de esta forma:

public void addPropertyChangeListener (PropertyChangeListener l)
public void removePropertyChangeListener (PropertyChangeListener l)

Los métodos precedentes del registro de auditores no identifican propiedades limitadas específicas. Para registrar auditores en el PropertyChangeEvent de una propiedad específica, se deben proporcionar los métodos siguientes:

public void addPropertyNameListener (PropertyChangeListener l)
public void removePropertyNameListener (PropertyChangeListener l)

En los métodos precedentes, PropertyName se sustituye por le nombre de la propiedad limitada. Los objetos que implementan la interfaz PropertyChangeListener deben implementar el método propertyChange(). Este método lo invoca el componente de software para todos sus auditores registrados, con el fin de informarles de un cambio de una propiedad.

Una propiedad restringida es similar a una propiedad ligada salvo que los objetos oyentes que se les notifica el cambio del valor de la propiedad tienen la opción de vetar cualquier cambio en el valor de dicha propiedad.

Los métodos que se utilizan con propiedades simples e indexadas que veíamos anteriormente se aplican también a las propiedades restringidas. Además, se ofrecen los siguientes métodos de registro de eventos:

public void addPropertyVetoableListener (VetoableChangeListener l)
public void removePropertyVetoableListener (VetoableChangeListener l)
public void addPropertyNameListener (VetoableChangeListener l)
public void removePropertyNameListener (VetoableChangeListener l)

Los objetos que implementa la interfaz VetoableChangeListener deben implementar el método vetoableChange(). Este método lo invoca el componente de software para todos sus auditores registrados con el fin de informarles del cambio en una propiedad.

Todo objeto que no apruebe el cambio en una propiedad puede arrojar una PropertyVetoException dentro del método vetoableChange(), para informar al componente cuya propiedad restringida hubiera cambiado de que el cambio no se ha aprobado.

Autoevaluación

Pregunta

Supongamos que tenemos un componente para gestionar las notas de los estudiantes de una clase con una propiedad que almacena el número de estudiantes de la clase, ¿de qué tipo sería esta propiedad?

Respuestas

Simple.

Indexada.

Retroalimentación