340

Capítulo 8 Clases y objetos: un análisis más detallado

8.8 Composición

Una clase puede tener referencias a objetos de otras clases como miembros. A dicha capacidad se le conoce como 

composición

 y algunas veces como 

relación “tiene un

. Por ejemplo, un objeto de la clase 

RelojAlarma

 necesita 

saber la hora actual y la hora en la que se supone sonará su alarma, por lo que es razonable incluir dos referencias 
a objetos 

Tiempo

 como miembros del objeto 

RelojAlarma

.

Observación de ingeniería de software 8.9

La composición es una forma de reutilización de software, en donde una clase tiene como miembros referencias a 
objetos de otras clases.

Nuestro ejemplo de composición contiene tres clases: 

Fecha

 (fi gura 8.7), 

Empleado

(fi gura 8.8) y 

Prue-

baEmpleado

 (fi gura 8.9). La clase 

Fecha

 (fi gura 8.7) declara las variables de instancia 

mes

dia

 y 

anio

 (líneas 6 a 

8) para representar una fecha. El constructor recibe tres parámetros 

int

. La línea 14 invoca el método utilitario 

comprobarMes

 (líneas 23 a 33) para validar el mes; un valor fuera de rango se establece en 

1

 para mantener un 

estado consistente. La línea 15 asume que el valor de 

anio

 es correcto y no lo valida. La línea 16 invoca al método 

utilitario 

comprobarDia

(líneas 36 a 52) para validar el valor de 

dia

con base en el 

mes

anio

actuales. Las líneas 

42 y 43 determinan si el día es correcto, con base en el número de días en el 

mes

específi co. Si el día no es correc-

to, las líneas 46 y 47 determinan si el 

mes

 es Febrero, el día 

29

 y el 

anio

un año bisiesto. Si las líneas 42 a 48 no 

devuelven un valor correcto para 

dia

, la línea 51 devuelve

 1

 para mantener la 

Fecha

 en un estado consistente. 

Observe que las líneas 18 y 19 en el constructor muestran en pantalla la referencia 

this

 como un objeto 

String

Como 

this

 es una referencia al objeto 

Fecha

actual, se hace una llamada implícita al método 

toString

 (líneas 

55 a 58) para obtener la representación 

String

del objeto.

 1 

// Fig. 8.7: Fecha.java 

 2 

// Declaración de la clase Fecha.

 3
 4 

public class

 Fecha 

 5 

{

 6  

private int

 mes;

// 1-12

 7  

private int

 dia;

// 1-31 con base en el mes

 8  

private int

 anio;

// cualquier año

 9
 10  

// constructor: llama a comprobarMes para confirmar el valor apropiado para el mes; 

 11  

// llama a comprobarDia para confirmar el valor apropiado para el día

 12  

public

 Fecha( 

int

 elMes, 

int

 elDia, 

int

 elAnio )

 13  

{

 14  

 

mes = comprobarMes( elMes ); 

// valida el mes

 15  

 

anio = elAnio; 

// pudo validar el año

 16  

 

dia = comprobarDia( elDia ); 

// valida el día

 17
 18  

 

System.out.printf(

 

19    

"

Constructor de objeto Fecha para la fecha %s\n

"

,

this

 );

 20  

}

// fin del constructor de Fecha

 21
 22  

// método utilitario para confirmar el valor apropiado del mes

 23  

private int

 comprobarMes( 

int

 mesPrueba )

 24  

{

 25  

 

if

 ( mesPrueba > 

0

 && mesPrueba <= 

12

 ) 

// valida el mes

 

26    

return

 mesPrueba;

 27  

 

else

// mes es inválido

 28  

 

{

 

29    

System.out.printf(

 

30     

"

Mes invalido (%d) se establecio en 1.

"

, mesPrueba );

 

31    

return

1

;

// mantiene el objeto en estado consistente

Figura 8.7

  |  Declaración de la clase 

Fecha

. (Parte 1 de 2).

08_MAQ_CAP_08.indd340

4/19/081:23:48AM