Sei sulla pagina 1di 122

2003 Prentice Hall, Inc. Todos los derechos reservados.

Captulo 8 - Programacin basado en objetos


Contorno
8.1 Introduccin
8.2 La implementacin de un tipo de tiempo de datos abstracta con una clase
Alcance 8.3 Clase
8.4 Control de acceso a los miembros
8.5 En referencia a los diputados el objeto actual 's con este
8.6 Objetos Inicializacin Clase: Constructores
8.7 Utilizar constructores sobrecargados
8.8 Uso de establecer y obtener Mtodos
8.9 Composicin
8.10 Recoleccin de Basura
8.11 Miembros del grupo esttico

8.12 Variables de instancia Finales


8.13 Creacin de paquetes
Acceso 8.14 Paquete
Reutilizacin 8.15 Software
8.16 Datos abstraccin y encapsulacin
8,17 (Ejemplo prctico opcional) Acerca de los objetos: Comenzando a programar
las clases para el Ascensor Simulacin

2003 Prentice Hall, Inc. Todos los derechos reservados.

8.1 Introduccin
Programacin Orientada a Objetos (POO)
Encapsula datos (atributos) y mtodos (comportamientos)
Objetos

Permite a los objetos para comunicarse


Interfases bien definidas

2003 Prentice Hall, Inc. Todos los derechos reservados.

8.1 Introduccin (cont.)


Lenguaje de programacin de procedimiento
C es un ejemplo
Accin orientada
Las funciones son las unidades de programacin

Lenguaje de programacin orientado a objetos


Java es un ejemplo
Orientado a objetos
Las clases son unidades de programacin
Funciones o mtodos, se encapsulan en clases

2003 Prentice Hall, Inc. Todos los derechos reservados.

8.1 Introduccin (cont.)

Este captulo trata


Cmo crear objetos
Cmo utilizar objetos

2003 Prentice Hall, Inc. Todos los derechos reservados.

8.2 La implementacin de un tipo de tiempo de datos


abstracta con una clase

Introducimos clases Time1 y pruebatiempo

Time1.java declara clase Time1


TimeTest.java declara clase pruebatiempo
clases pblicas deben ser declarados en archivos separados
Clase Time1 no ejecutar por s mismo
No tiene mtodo principal

Pruebatiempo, que tiene mtodo principal, crea una instancia () y


utiliza objeto Time1

2003 Prentice Hall, Inc.


Todos los derechos reservados.

Contorno
Time1.java

Lnea 5
Time1 (subclase) se extiende java.lang.Object superclase
Lneas 6-8
variables privadas
Lneas 12-15
Time1 constructor
a continuacin, invoca el mtodo setTime

Lnea 19
mtodos pblicos
Lneas 19-24
Mtodo setTime establece variables privadas de acuerdo a los argumentos
1 // Fig. 8.1: Time1.java
2 declaracin de la clase // Time1 mantiene la hora en formato de 24 horas.
Java.text.DecimalFormat 3 de importacin;
4
5 public class Time1 extiende Object {
6 privado int hora; // 0-23
7 privado int minutos; // 0-59
8 privado int segundos; // 0-59
9
10 // Time1 constructor inicializa cada variable de instancia a cero;

11 // asegura que cada objeto Time1 comienza en un estado coherente


12

Time1 pblica ()

13 {
14 setTime (0, 0, 0);
15}
16
17 // conjunto un nuevo valor de tiempo utilizando el tiempo universal; realizar
Cheques 18 // validez de los datos; establecer los valores no vlidos a cero
19

public void setTime (int h, int m, int s)

20 {
21 horas = ((h> = 0 && h <24) h: 0);
22 minutos = ((m> = 0 && m <60) m: 0);
23 segundos = ((S> = 0 && s <60) s:? 0);

24}
25

Time1 (subclase) se extiende java.lang.Object superclase (captulo 9 analiza la herencia)


variables privadas (y mtodos) son accesibles slo a los mtodos de esta clase
Mtodo setTime establece variables privadas de acuerdo a los argumentos
mtodos pblicos (y variables) son accesibles dondequiera programa tiene Time1 referencia
Constructor Time1 crea objeto Time1 entonces invoca el mtodo setTime

2003 Prentice Hall, Inc.


Todos los derechos reservados.

Contorno
Time1.java
26 // Convertir en cadena en formato de hora universal
27
28 {

toUniversalString public String ()

29 twoDigits DecimalFormat = nuevo DecimalFormat ("00");


30
31

volver twoDigits.format (horas) + ":" +

32 twoDigits.format (minutos) + ":" + twoDigits.format (segundo);


33}
34
35 // Convertir en cadena en formato de hora estndar
36

toStandardString public String ()

37 {
38 twoDigits DecimalFormat = nuevo DecimalFormat ("00");
39
40

(== (hora 12 || == hora 0) 12?: hora 12%) de retorno + ":" +

41 twoDigits.format (minutos) + ":" + twoDigits.format (segundo) +

42 (hora <12 "AM": "PM");


43}
44
45} // fin de la clase Time1

2003 Prentice Hall, Inc. Todos los derechos reservados.

8.2 La implementacin de un tipo de tiempo de datos


abstracta con una Clase (cont.)

Cada clase Java debe ampliar otra clase

Time1 extiende java.lang.Object


Si la clase no se extiende explcitamente otra clase
clase extiende implcitamente Objeto

Constructor de la clase
Mismo nombre que la clase

Inicializa las variables de instancia de un objeto de clase


Se llama al programa crea una instancia un objeto de esa clase
Puede tomar argumentos, pero no puede devolver valores
Clase puede tener varios constructores, a travs de la sobrecarga
Clase Time1 constructor (lneas 12-15)

2003 Prentice Hall, Inc.


Todos los derechos reservados.

Contorno
TimeTest1.java

Lnea 9
Declarar y crear una instancia de la clase Time1 llamando Time1 constructor

Lneas 12-26 TimeTest1 interacta con Time1 llamando mtodos pblicos TIME1

1 // Fig. 8.2: TimeTest1.java


2 // Clase TimeTest1 para ejercer clase Time1.
Javax.swing.JOptionPane 3 de importacin;
4
5 public class TimeTest1 {
6
7

static void main (String args []) pblicos

8{
9 tiempo Time1 = new Time1 (); // llama Time1 constructor
10
11 // anexar versin de cadena de tiempo de salida de Cuerdas
12 String salida = "La hora universal inicial es:" +
13 time.toUniversalString () + "tiempo estndar inicial nLa \ es:" +

14 time.toStandardString ();
15
16 // tiempo de cambio y aadir vez actualizada a la salida
17 time.setTime (13, 27, 6);
18 de salida + = "\ n tiempo \ nUniversal despus setTime es:" +
19 time.toUniversalString () +
20

"Tiempo \ nStandard despus setTime es:" + time.toStandardString ();

21
22 // tiempo ajustado con valores no vlidos; anexar vez actualizada a la salida
23 time.setTime (99, 99, 99);
24 de salida + = "\ n \ nDespus intentar ajustes no vlidos:" +
25

"Tiempo \ nUniversal:" + time.toUniversalString () +

26

"Tiempo \ nStandard:" + time.toStandardString ();

27

Declarar y crear una instancia de la clase Time1 llamando Time1 constructor


TimeTest1 interacta con Time1 llamando mtodos pblicos TIME1

2003 Prentice Hall, Inc.


Todos los derechos reservados.

Contorno
TimeTest1.java
28 JOptionPane.showMessageDialog (null, la produccin,
29

"Clase Testing Time 1", JOptionPane.INFORMATION_MESSAGE);

30
31 System.exit (0);
32
33} // fin principal
34

35} // fin de la clase TimeTest1

2003 Prentice Hall, Inc. Todos los derechos reservados.

Alcance 8.3 Clase

mbito de clase
Variables y mtodos de clase
Los miembros son accesibles a todos los mtodos de la clase
Los miembros pueden ser referenciados por nombre
objectReferenceName.objectMemberName

Sombreados (escondidos) variables de clase


este .variableName

2003 Prentice Hall, Inc. Todos los derechos reservados.

8.4 Control de acceso a los miembros


Modificadores de acceso miembros

Controlar el acceso a las variables y mtodos de la clase 's


pblico
Variables y mtodos accesibles a los clientes de la clase

privado
Variables y mtodos que no son accesibles a los clientes de la clase

2003 Prentice Hall, Inc.


Todos los derechos reservados.

Contorno
TimeTest2.java

Lneas 9-11
Error Compiler - TimeTest2 no puede acceder directamente a los datos privados de Time1

1 // Fig. 8.3: TimeTest2.java

2 // Los errores resultantes de intentos de acceso a miembros privados de Time1.


3 clase pblica TimeTest2 {
4
5

static void main (String args []) pblicos

6{
7 tiempo Time1 = new Time1 ();
8
9 time.hour = 7; // Error: hora es una variable de instancia privada
10 time.minute = 15; // Error: minuto es una variable de instancia privada
11 time.second = 30; // Error: segunda es una variable de instancia privada
12}
13
14} // fin de la clase TimeTest2

TimeTest2.java:9: horas tiene acceso privado en Time1


time.hour = 7; // Error: hora es una variable de instancia privada
^
TimeTest2.java:10: minuto tiene acceso privado en Time1
time.minute = 15; // Error: minuto es una variable de instancia privada
^
TimeTest2.java:11: segunda tiene acceso privado en Time1
time.second = 30; // Error: segunda es una variable de instancia privada
^
3 errores

Error Compiler - TimeTest2 no puede acceder directamente a los datos privados de Time1

2003 Prentice Hall, Inc. Todos los derechos reservados.

8.5 En referencia a los diputados el objeto


actual 's con este
Palabra clave esta (esta referencia)
Permite que un objeto se refiere a s mismo
2003 Prentice Hall, Inc.

Todos los derechos reservados.

Contorno
ThisTest.java
1 // Fig. 8.4: ThisTest.java
2 // Utilizando la referencia this para hacer referencia a las variables y mtodos de instancia.
3 javax.swing importacin. *;
Java.text.DecimalFormat 4 de importacin;

5
6 pblica clase ThisTest {
7
8 static void main (String args []) pblicos
9{
10 tiempo SimpleTime = new SimpleTime (12, 30, 19);
11
12 JOptionPane.showMessageDialog (null, time.buildString (),
13

"Referencia" "Mostrar la \" esta \,

14

JOptionPane.INFORMATION_MESSAGE);

15
16 System.exit (0);
17}

18
19} // fin de la clase ThisTest
20
21 // SimpleTime clase demuestra el "esto" de referencia
22 clase SimpleTime {
23

hora int privado;

24

int minuto privado;

25

privada int segundos;

26

2003 Prentice Hall, Inc.


Todos los derechos reservados.

Contorno
ThisTest.java

Lneas 31-33
este utiliza para distinguir entre argumens y variables

Lneas 39-40
uso explcito e implcito que esto llame toStandarsString
27 // constructor utiliza los nombres de parmetros idnticos a variable de instancia
28 // nombres; "Esto" de referencia necesarios para distinguir entre nombres
29

SimpleTime pblico (int hora, minuto int, int segundos)

30 {
31

este .hour = horas; // establecer "esta" hora del objeto

32

este .minute = minutos; // establecer "este" minuto de objeto

33

este .SECOND = segundos; // establecer "este" segundo objeto

34}
35

36 // uso explcito e implcito "esto" para llamar toStandardString


37

public String buildString ()

38 {
39
40

retorno "This.toStandardString ():" + este .toStandardString () +


"\ NtoStandardString ():" + toStandardString ();

41}
42
43 // devuelve representacin String de SimpleTime
44

toStandardString public String ()

45 {
46 twoDigits DecimalFormat = nuevo DecimalFormat ("00");
47
48 // "esto" no es necesaria aqu, porque el mtodo no

49 // tienen variables locales con mismos nombres que las variables de instancia
50

volver twoDigits.format (este .hour) + ":" +

51 twoDigits.format (este .minute) + ":" +


52 twoDigits.format (esto .SECOND);
53}
54
55} // fin de la clase SimpleTime

Uso explcito e implcito que esto llame toStandardString


este utiliza para distinguir entre los argumentos y variables ThisTest

2003 Prentice Hall, Inc. Todos los derechos reservados.

8.6 Objetos Inicializacin Clase: Constructores


Constructor de la clase
Mismo nombre que la clase
Inicializa las variables de instancia de un objeto de clase

Constructor de la clase llamada a una instancia objeto de esa

clase
nuevo NombreClase (argumento1, argumento2, ..., arugmentN);

nuevo indica que se crea nuevo objeto

NombreClase indica el tipo de objeto creado

argumentos especifica valores de los argumentos del constructor

2003 Prentice Hall, Inc. Todos los derechos reservados.

8.7 Utilizar constructores sobrecargados


Constructores sobrecargados
Mtodos (en la misma clase) pueden tener el mismo nombre
Debe tener diferentes listas de parmetros
2003 Prentice Hall, Inc.

Todos los derechos reservados.

Contorno
Time2.java

Lneas 12-15
Sin argumentos (por defecto) constructor
Lnea 14
Use esto para invocar al constructor Time2 declarado en las lneas 30-33
Lneas 18-21
Constructor sobrecargado tiene un argumento int
Lneas 24-27
Segundo constructor sobrecargado tiene dos argumentos int
1 // Fig. 8.5: Time2.java
2 // declaracin de clase Time2 con constructores sobrecargados.
Java.text.DecimalFormat 3 de importacin;

4
5 public class Time2 {
6

int horas privado; // 0-23

int minuto privado; // 0-59

privada int segundos; // 0-59

9
10 // Time2 constructor inicializa cada variable de instancia a cero;
11 // asegura que objeto Tiempo comienza en un estado coherente
12

Time2 pblica ()

13 {
14
15}
16

esto (0, 0, 0); // invocar constructor Time2 con tres argumentos

17 // Time2 constructor: horas suministra, minutos y segundos por defecto en 0


18

pblica Time2 (int h)

19 {
20

este (h, 0, 0); // invocar Time2 constructor con tres argumentos

21}
22
23 // Time2 constructor: horas y minutos suministran, segundo en mora a 0
24

pblica Time2 (int h, int m)

25 {
26

este (h, m, 0); // invocar Time2 constructor con tres argumentos

27}
28

Sin argumentos (por defecto) constructor

Constructor sobrecargado tiene un argumento int


Segundo constructor sobrecargado tiene dos argumentos int

Use esto para invocar al constructor Time2 declarado en las lneas 30-33
2003 Prentice Hall, Inc.
Todos los derechos reservados.

Contorno
Time2.java

Lneas 30-33
En tercer constructor sobrecargado tiene tres argumentos int

Lneas 36-40
Cuarta constructor sobrecargado tiene argumento Time2
29 // Time2 constructor: horas, minutos y segundos suministrado

30

Time2 pblico (int h, int m, int s)

31 {
32 setTime (h, m, s); // invocar setTime para validar tiempo
33}
34
35 // Time2 constructor: otro objeto Time2 suministrado
36

pblica Time2 (hora Time2)

37 {
38 // invocar Time2 constructor con tres argumentos
39

esto (time.hour, time.minute, time.second);

40}
41
42 // conjunto un nuevo valor de tiempo utilizando el tiempo universal; realizar

43 // controles sobre los datos de validez; establecer los valores no vlidos a cero
44

public void setTime (int h, int m, int s)

45 {
46 horas = ((h> = 0 && h <24) h: 0);
47 minutos = ((m> = 0 && m <60) m: 0);
48 segundos = ((S> = 0 && s <60) s:? 0);
49}
50
51 // Convertir en cadena en formato de hora universal
52

toUniversalString public String ()

53 {
54 twoDigits DecimalFormat = nuevo DecimalFormat ("00");
55

56

volver twoDigits.format (horas) + ":" +

57 twoDigits.format (minutos) + ":" + twoDigits.format (segundo);


58}

Cuarta constructor sobrecargado tiene argumento Time2


En tercer constructor sobrecargado tiene tres argumentos int

2003 Prentice Hall, Inc.


Todos los derechos reservados.

Contorno
Time2.java
59
60 // Convertir en cadena en formato de hora estndar
61

toStandardString public String ()

62 {
63 twoDigits DecimalFormat = nuevo DecimalFormat ("00");

64
65

(== (hora 12 || == hora 0) 12?: hora 12%) de retorno + ":" +

66 twoDigits.format (minutos) + ":" + twoDigits.format (segundo) +


67 (hora <12 "AM": "PM");
68}
69

70} // fin de la clase Time2

2003 Prentice Hall, Inc.


Todos los derechos reservados.

Contorno
TimeTest3.java

Lneas 9-14
Instanciar cada referencia Time2 usando un constructor diferente

1 // Fig. 8.6: TimeTest3.java


2 // constructores sobrecargados utilizan para inicializar objetos Time 2.
3 javax.swing importacin. *;
4
5 pblica clase TimeTest3 {
6
7

static void main (String args []) pblicos

8{
9 Time2 t1 = new Time2 (); // 00:00:00
10 Time2 t2 = new Time2 (2); // 02:00:00
11 Time2 t3 = new Time2 (21, 34); // 21:34:00
12 Time2 t4 = new Time2 (12, 25, 42); // 12:25:42
13 Time2 t5 = new Time2 (27, 74, 99); // 00:00:00

14 Time2 t6 = new Time2 (t4); // 12:25:42


15
16 String salida = "Construido con:" +
17

"\ Nt1: todos los argumentos en mora" +

18

"\ N" + t1.toUniversalString () +

19

"\ N" + t1.toStandardString ();

20
21 de salida + = "\ NT2: hora especificada; minutos y segundos incumplido" +
22

"\ N" + t2.toUniversalString () +

23

"\ N" + t2.toStandardString ();

24
25 de salida + = "\ nt3: horas y minutos especificado; segundo defecto" +
26

"\ N" + t3.toUniversalString () +

27

"\ N" + t3.toStandardString ();

Instanciar cada referencia Time2 usando un constructor diferente

2003 Prentice Hall, Inc.


Todos los derechos reservados.

Contorno
TimeTest3.java
28
29 de salida + = "\ nt4: horas, minutos y segundos especificado" +
30

"\ N" + t4.toUniversalString () +

31

"\ N" + t4.toStandardString ();

32
33 de salida + = "\ NT5: todos los valores no vlidos especificados" +
34

"\ N" + t5.toUniversalString () +

35

"\ N" + t5.toStandardString ();

36
37 de salida + = "\ NT6: t4 objeto Time2 especificado" +
38

"\ N" + t6.toUniversalString () +

39

"\ N" + t6.toStandardString ();

40
41 JOptionPane.showMessageDialog (null, la produccin,
42

"Los constructores sobrecargados", JOptionPane.INFORMATION_MESSAGE);

43
44 System.exit (0);
45
46} // fin principal
47
48} // fin de la clase TimeTest3

8.8 Uso de establecer y obtener Mtodos


Mtodo de acceso ("get" mtodo)
mtodo pblico
Permitir a los clientes para leer los datos privados

Mtodo mutador (mtodo "set")


mtodo pblico
Permitir a los clientes para modificar los datos privados

2003 Prentice Hall, Inc. Todos los derechos reservados.

2003 Prentice Hall, Inc.


Todos los derechos reservados.

Contorno
Time3.java

Lneas 6-8
variables privadas no pueden acceder directamente a los objetos en diferentes clases
1 // Fig. 8.7: Time3.java
2 // declaracin de clase Time3 con el sistema y obtener mtodos.
Java.text.DecimalFormat 3 de importacin;
4
5 public class Time3 {
6 int horas privado; // 0-23
7 int minuto privado; // 0-59
8 privada int segundos; // 0-59
9
10

// Time3 constructor inicializa cada variable de instancia a cero;

11

// Asegura que objeto Tiempo comienza en un estado coherente

12

Time3 pblica ()

13 {
14

esto (0, 0, 0); // invocar constructor Time3 con tres argumentos

15}
16
17

// Time3 constructor: hora suministrados, minutos y segundos en mora a 0

18

pblica Time3 (int h)

19 {
20

esto (h, 0, 0); // invocar Time3 constructor con tres argumentos

21}
22
23

// Time3 constructor: horas y minutos suministran, segundo en mora a 0

24

pblica Time3 (int h, int m)

25 {
26

este (h, m, 0); // invocar Time3 constructor con tres argumentos

27}
28

variables privadas no pueden acceder directamente a los objetos en diferentes clases


2003 Prentice Hall, Inc.
Todos los derechos reservados.

Contorno
Time3.java

Lneas 45-68
Mtodos set permite a los objetos para manipular variables privadas
28.
29.

// Time3 constructor: horas, minutos y segundos suministrado


Time3 pblico (int h, int m, int s)

31 {
32 setTime (h, m, s);
33}
34
35

// Time3 constructor: otro objeto Time3 suministrado

36

pblica Time3 (hora Time3)

37 {
38

// Invocar Time3 constructor con tres argumentos

39

esto (time.getHour (), time.getMinute (), time.getSecond ());

40}
41
42

// mtodos set

43

// Establecer un nuevo valor de tiempo utilizando el tiempo universal; realizar

44

// Comprobaciones de validez sobre los datos; establecer los valores no vlidos a cero

45

public void setTime (int h, int m, int s)

46 {
47 sethour (h); // establecer la hora
48 setMinute (m); // ajustar los minutos
49 setSecond (s); // establecer el segundo
50}
51
52

// Validar y ajustar la hora

53

public void sethour (int h)

54 {
55 horas = ((h> = 0 && h <24) h: 0);
56}

57

Mtodos set permite a los objetos para manipular variables privadas

2003 Prentice Hall, Inc.


Todos los derechos reservados.

Contorno
Time3.java

Lneas 72-87
Recibe mtodos permiten objetos para leer variables privadas
58

// Validar y ajustar los minutos

59

public void setMinute (int m)

60 {
61 minutos = ((m> = 0 && m <60) m: 0);
62}

63
64

// Validar y establecer segundos

65

public void setSecond (int s)

66 {
67 segundos = ((S> = 0 && s <60) s:? 0);
68}
69
70

// Obtener Mtodos

71

// Obtener valor de la hora

72

public int getHour ()

73 {
74
75}

volver horas;

76
77

// Obtener valor minuto

78

public int getMinute ()

79 {
80

volver minutos;

81}
82

Recibe mtodos permiten objetos para leer variables privadas

2003 Prentice Hall, Inc.


Todos los derechos reservados.

Contorno
Time3.java
83

// Obtiene segundo valor

84

public int getSecond ()

85 {
86

volver segundo;

87}
88
89

// Convertir en cadena en formato universal de tiempo

90

toUniversalString public String ()

91 {
92 twoDigits DecimalFormat = nuevo DecimalFormat ("00");
93
94

volver twoDigits.format (getHour ()) + ":" +

95 twoDigits.format (getMinute ()) + ":" +


96 twoDigits.format (getSecond ());
97}

98
99

// Convertir en cadena en formato de hora estndar

100

toStandardString public String ()

101 {
102 twoDigits DecimalFormat = nuevo DecimalFormat ("00");
103
104

volver ((getHour () == 12 || getHour () == 0)?

105

12: getHour ()% 12) + ":" + twoDigits.format (getMinute ()) +

106

":" + TwoDigits.format (getSecond ()) +

107 (getHour () <12 "AM": "PM");


108}
109
110} // fin de la clase Time3

2003 Prentice Hall, Inc.


Todos los derechos reservados.

Contorno
TimeTest4.java

Lneas 8 y 17
Declarar y crear una instancia de objeto Time3

Lneas 25 y 31
JTextFields permiten al usuario especificar horas.
1 // Fig. 8.8: TimeTest4.java
2 // Demostracin del conjunto de clases Time3 y obtener mtodos.
3 import java.awt. *;
4 java.awt.event importacin. *;

5 javax.swing importacin. *;
6
7 public class TimeTest4 extiende JApplet implementa ActionListener {
8 tiempo Time3 privado;
9
10

privado JLabel hourLabel, minuteLabel, secondLabel;

11

privado JTextIField hourField, minuteField, secondField, displayField;

12

privado tickButton JButton;

13
14

// Crear objeto Time3 y configurar GUI

15

public void init ()

16 {
17 tiempo = new Time3 (); // crea objeto Time3

18
19

// Obtener panel de contenido del applet y cambiar su trazado a FlowLayout

20 Container contenedor = getContentPane ();


21 container.setLayout (new FlowLayout ());
22
23

// Establecer hourLabel y hourField

24 hourLabel = new JLabel ("Set Hour");


25 hourField = new JTextField (10);
26 contenedor.add (hourLabel);
27 contenedor.add (hourField);
28

Declarar y crear una instancia de objeto Time3


JTextFields permiten al usuario especificar horas

2003 Prentice Hall, Inc.


Todos los derechos reservados.

Contorno
TimeTest4.java

Lnea 31
JTextField permite al usuario especificar minutos

Lnea 37
JTextField permite al usuario especificar segundos
29

// Establecer minuteLabel y minuteField

30 minuteLabel = new JLabel ("Minuto Set");


31 minuteField = new JTextField (10);
32 contenedor.add (minuteLabel);

33 contenedor.add (minuteField);
34
35

// Establecer secondLabel y secondField

36 secondLabel = new JLabel ("Set Segundo");


37 secondField = new JTextField (10);
38 contenedor.add (secondLabel);
39 contenedor.add (secondField);
40
41

// Establecer displayField

42 displayField = new JTextField (30);


43 displayField.setEditable (false);
44 contenedor.add (displayField);
45

46

// Establecer tickButton

47 tickButton = new JButton ("Agregar 1 a Segunda");


48 contenedor.add (tickButton);
49
50

// Registrar controladores de eventos; este applet es el ActionListener,

51

// Que contiene el mtodo actionPerformed que se llamar a

52

// eventos de accin mango generados por hourField, minuteField,

53

// SecondField y tickButton

54 hourField.addActionListener (this);
55 minuteField.addActionListener (this);
56 secondField.addActionListener (this);
57 tickButton.addActionListener (this);

JTextField permite al usuario especificar segundos

JTextField permite al usuario especificar minutos

2003 Prentice Hall, Inc.


Todos los derechos reservados.

Contorno
TimeTest4.java

Lneas 71-74
Lneas 77-80
Lneas 83-86 TimeTest5 utiliza mtodos set Time3 establecer variables privadas Time3
58
59 DisplayTime (); // actualizar texto en displayField y barra de estado
60
61} // fin del mtodo init
62

63

// Controlador de eventos para eventos de botn y TextField

64

public void actionPerformed (ActionEvent evento)

65 {
66

// Proceso evento tickButton

67

si (event.getSource () == tickButton)

68 tick ();
69
70

// Proceso evento hourField

71

else if (event.getSource () == hourField) {

72 time.setHour (Integer.parseInt (evento.getActionCommand ()));


73 hourField.setText ("");
74}
75

76

// Proceso evento minuteField

77

else if (event.getSource () == minuteField) {

78 time.setMinute (Integer.parseInt (evento.getActionCommand ()));


79 minuteField.setText ("");
80}
81
82

// Proceso evento secondField

83

else if (event.getSource () == secondField) {

84 time.setSecond (Integer.parseInt (evento.getActionCommand ()));


85 secondField.setText ("");
86}

TimeTest5 utiliza mtodos set Time3 establecer variables privadas Time3


2003 Prentice Hall, Inc.
Todos los derechos reservados.

Contorno
TimeTest4.java

Lneas 95-96 TimeTest5 utiliza Time3 obtener mtodos para leer variables privadas Time3
87
88 DisplayTime (); // actualizar texto en displayField y barra de estado
89
90} // fin del mtodo actionPerformed
91
92 // Barra de estado de actualizacin displayField y subprograma de contenedor
93 pblica DisplayTime void ()
94 {
95 displayField.setText ("Hora:" + time.getHour (+) "; Minuto:" +
96 time.getMinute (+) ", en segundo lugar:" + time.getSecond ());

97
98 showStatus ("tiempo estndar es:" + time.toStandardString () +
99

", El tiempo universal es:" + time.toUniversalString ());

100
101} // fin del mtodo updateDisplay
102
103

// Aadir una a segunda y actualizar hora / minuto si es necesario

104

pblica garrapata void ()

105 {
106 time.setSecond ((time.getSecond () + 1) 60%);
107
108

si (time.getSecond () == 0) {

109 time.setMinute ((time.getMinute () + 1) 60%);

110
111

si (time.getMinute () == 0)

112 time.setHour ((time.getHour () + 1) 24%);


113}
114
115} // fin del mtodo garrapata
116
117} // fin de la clase TimeTest4

TimeTest5 utiliza mtodos get Time3 leer variables privadas Time3


2003 Prentice Hall, Inc.
Todos los derechos reservados.

Contorno
TimeTest4.java

2003 Prentice Hall, Inc.


Todos los derechos reservados.

Contorno
TimeTest4.java

2003 Prentice Hall, Inc.


Todos los derechos reservados.

Contorno
TimeTest4.java

2003 Prentice Hall, Inc. Todos los derechos reservados.

8.9 Composicin

Composicin
Clase contiene referencias a objetos de otras clases
Estas referencias son miembros

2003 Prentice Hall, Inc.


Todos los derechos reservados.

Contorno
Date.java

Lnea 4
Clase Fecha encapsula datos que describe la fecha

Lneas 11-20
Fecha constructor crea una instancia del objeto Date basado en argumentos especificados
1 // Fig. 8.9: Date.java
2 // declaracin de la clase Date.
3
4 clase Date pblica {

mes int privado; // 12.01

da int privado; // 1-31 basado en meses

aos int privado; // cualquier ao

8
9

// Constructor: llamar checkMonth confirmar valor adecuado para el mes;

10

// Llamar checkDay confirmar valor apropiado para el da

11

pblico Fecha (int theMonth, int elDa, int theyear)

12 {
13 meses = checkMonth (theMonth); // meses validate
14 aos = theyear; // pudo validar ao
15 das = checkDay (elDa); // validar da
16
17 System.out.println ("objeto constructor Fecha de la fecha" +

18 toDateString ());
19
20} // fin del constructor Date
21
22

// Mtodo de utilidad para confirmar el valor adecuado meses

23

privada int checkMonth (int testMonth)

24 {
25
26

si (testMonth> 0 && testMonth <= 12) // meses validate


volver testMonth;

Clase Fecha encapsula datos que describe la fecha

Fecha constructor crea una instancia del objeto Date basado en argumentos especificados
2003 Prentice Hall, Inc.
Todos los derechos reservados.

Contorno

Date.java
27
28

else {// meses no es vlido

29 System.out.println ("mes Invlido (" + testMonth +


30
31

") Pone a 1.");


return 1; // mantener objeto en estado consistente

32}
33
34} // fin del mtodo checkMonth
35
36

// Mtodo de utilidad para confirmar el valor adecuado das basado en meses y aos

37

int checkDay privado (int testDay)

38 {

39

int daysPerMonth [] =

40 {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
41
42

// Comprobar si el da en el rango de mes

43

si (testDay> 0 && testDay <= daysPerMonth [meses])

44

volver testDay;

45
46

// Comprobar ao bisiesto

47

si (mes == 2 && testDay == 29 && (ao 400% == 0 ||

48 (ao 4% == 0 && aos 100%! = 0)))


49

volver testDay;

50
51 System.out.println ("da Invlido (" + testDay + ") pone a 1.");

52
53

retorno 1; // mantener objeto en estado coherente

54
55} // fin del mtodo checkDay

2003 Prentice Hall, Inc.


Todos los derechos reservados.

Contorno
Date.java
56
57

// Devuelve una cadena de la forma de mes / da / ao

58

toDateString public String ()

59 {
60
61}

mes retorno + "/" + da + "/" + aos;

62
63} // fin de la clase Date

2003 Prentice Hall, Inc.


Todos los derechos reservados.

Contorno
Employee.java

Lneas 7-8
Empleado se compone de dos referencias a objetos Date
1 // Fig. 8.10: Employee.java
2 // declaracin de clase Empleado.
3
4 Empleado public class {

primerNombre private String;

lastName private String;

Fecha de Nacimiento Fecha privado;

HIREDATE Fecha privado;

9
10

// Constructor para inicializar el nombre, fecha de nacimiento y la fecha de contratacin

11

Empleado pblico (String primero, Cadena pasado, Fecha fechaDeNacimiento,

12 Fecha dateOfHire)
13 {
14 firstName = primero;
15 lastName = ltimo;
16 Fecha de Nacimiento = fechaDeNacimiento;
17 HIREDATE = dateOfHire;

18}
19
20

// Convertir Empleado a formato de cadena

21

public String toEmployeeString ()

22 {
23

volver lastName + "," + firstName +

24

"Contratado:" + hireDate.toDateString () +

25

"Birthday:" + birthDate.toDateString ();

26}
27
28} // fin de la clase Empleado

Empleado se compone de dos referencias a objetos Date


2003 Prentice Hall, Inc.
Todos los derechos reservados.

Contorno
EmployeeTest.java
1 // Fig. 8.11: EmployeeTest.java
2 // Demostracin de un objeto con un objeto miembro.
Javax.swing.JOptionPane 3 de importacin;
4
5 public class EmployeeTest {
6
7 static void main (String args []) pblicos
8{
9 Fecha de nacimiento = new Date (7, 24, 1949);
10 Fecha de alquiler = new Date (3, 12, 1988);
11 empleado Empleado = new Empleado ("Bob", "Jones", el nacimiento, el alquiler);

12
13 JOptionPane.showMessageDialog (null, employee.toEmployeeString (),
14

"Clase Prueba Empleado", JOptionPane.INFORMATION_MESSAGE);

15
16 System.exit (0);
17}
18
19} // fin de la clase EmployeeTest

Fecha objeto constructor de fecha 07/24/1949


Fecha objeto constructor de fecha 12/03/1988

2003 Prentice Hall, Inc. Todos los derechos reservados.

8.10 Recoleccin de Basura


Recoleccion de basura

Devuelve memoria para sistema de


Java realiza esto de forma automtica

objeto marcado para la recoleccin de basura si no hay referencias

al objeto

Mtodo finalizador
Devuelve recursos al sistema de
Java proporciona mtodo finalize

Definido en java.lang.Object

Recibe ningn parmetro

Devoluciones vaco

2003 Prentice Hall, Inc. Todos los derechos reservados.

8.11 Miembros del grupo esttico


palabra clave static

variable de clase esttica

Informacin de toda clase

Todos los objetos de clase comparten mismos datos

El acceso a una clase pblica 's miembros estticos

Calificar el nombre del miembro con el nombre de clase y un


punto (.)

por ejemplo, Math.random ()

2003 Prentice Hall, Inc.


Todos los derechos reservados.

Contorno
Employee.java

Lnea 6
Empleado objetos comparten una instancia de recuento

Lneas 23-28
Se llama al Empleado est marcado para la recoleccin de basura
1 // Fig. 8.12: Employee.java
2 // declaracin de clase Empleado.
3 Empleado public class {
4

primerNombre private String;

lastName private String;

static int privado count = 0; // nmero de objetos en la memoria

7
8

// Inicializar empleado, aadir 1 a recuento esttica y

// Cadena de salida que indica que el constructor fue llamado

10
11 {

Empleado pblico (String primero, Cadena pasado)

12 firstName = primero;
13 lastName = ltimo;
14
15 ++ cuentan; // incrementa el contador esttico de empleados
16 System.out.println ("constructor de Empleado:" +
17 Nombre + "" + lastName);
18}
19
20

// Restar 1 a recuento esttica al recolector de basura

21

// llamadas finalizan limpiar objeto y String salida

22

// Indica que finalize fue llamado

23

protegido void finalize ()

24 {

25 --count; // decremento recuento esttica de los empleados


26 System.out.println ("finalizador Empleado:" +
27 Nombre + "" + Apellido + "; count =" + count);
28}
29

Empleado objetos comparten una instancia de recuento

Se llama al Empleado est marcado para la recoleccin de basura


2003 Prentice Hall, Inc.
Todos los derechos reservados.

Contorno
Employee.java

Lneas 43-46
mtodo esttico accede esttica variable cuenta

30

// Obtener primero nombre

31

public String getFirstName ()

32 {
33

volver firstName;

34}
35
36

// Obtener apellido

37

public String getLastName ()

38 {
39

volver lastName;

40}
41
42

// Mtodo esttico para obtener el valor de conteo esttico

43

int getCount static ()

44 {
45

recuento de retorno;

46}
47
48} // fin de la clase Empleado

mtodo esttico accede esttica variable cuenta


2003 Prentice Hall, Inc.
Todos los derechos reservados.

Contorno
EmployeeTest.java

Lnea 12 EmployeeTest puede invocar Empleado mtodo esttico, a pesar de los empleados no ha
creado una instancia

1 // Fig. 8.13: EmployeeTest.java


2 // clase de prueba del empleado con la variable de clase esttica,
3 // mtodo de clase esttica y dinmica de memoria.
4 javax.swing importacin. *;
5
6 public class EmployeeTest {
7
8

static void main (String args []) pblicos

9{
10

// Demostrar que cuenta es 0 antes de crear Empleados

11 String salida = "Los empleados antes de instancias:" +


12 Employee.getCount ();
13

14

// Crear dos empleados; conteo debe ser 2

15 e1 Empleado = new Empleado ("Susan", "Panadero");


16 e2 Empleado = new Empleado ("Bob", "Jones");
17
18

// Demostrar que cuenta es 2 despus de la creacin de dos empleados

19 de salida + = "\ n \ nEmployees despus de instancias:" +


20

"\ Nva e1.getCount ():" + e1.getCount () +

21

"\ Nva e2.getCount ():" + e2.getCount () +

22

"\ Nva Employee.getCount ():" + Employee.getCount ();

23
24

// Obtener los nombres de los empleados

25 de salida + = "\ n \ nEmployee 1:" + e1.getFirstName () +


26

"" + E1.getLastName () + "\ nEmployee 2:" +

27 e2.getFirstName () + "" + e2.getLastName ();


28

EmployeeTest puede invocar Empleado mtodo esttico, a pesar de los empleados no ha creado una
instancia

2003 Prentice Hall, Inc.


Todos los derechos reservados.

Contorno
EmployeeTest.java

Lnea 35
Pide mecanismo automtico de recoleccin de basura de Java
29

// Contador de referencia de disminucin para cada objeto Empleado; en esto

30

// Ejemplo, slo hay una referencia a cada empleado, por lo que estos

31

// sentencias marcan cada objeto Empleado para la recoleccin de basura

32 e1 = null;
33 e2 = null;
34
35 System.gc (); // sugieren llamada al recolector de basura
36
37

// Espectculo recuento Empleado despus de llamar recolector de basura; contar

38

// Mostrado puede ser 0, 1 o 2 en funcin de si recolector de basura

39

// Ejecuta inmediatamente y nmero de Empleado objetos recogidos

40 de salida + = "\ n \ nEmployees despus System.gc ():" +


41 Employee.getCount ();
42
43 JOptionPane.showMessageDialog (null, la produccin,
44

"Static Miembros", JOptionPane.INFORMATION_MESSAGE);

45
46 System.exit (0);
47}
48
49} // fin de la clase EmployeeTest

Empleado constructor: Susan Baker,


Empleado constructor: Bob Jones
Empleado finalizador: Susan panadero; count = 1
Empleado finalizador: Bob Jones; count = 0

Pide mecanismo automtico de recoleccin de basura de Java

2003 Prentice Hall, Inc. Todos los derechos reservados.

8.12 Variables de instancia Finales


palabra clave final

Indica que la variable no es modificable


Cualquier intento de modificar resultados variables finales en error

int final privado INCREMENTO = 5;


Declara incremento variable como una constante

Aplica principio de privilegios mnimos


2003 Prentice Hall, Inc.

Todos los derechos reservados.

Contorno
IncrementTest.java
1 // Fig. 8.14: IncrementTest.java
2 // Inicializar una variable final.
3 import java.awt. *;
4 java.awt.event importacin. *;

5 javax.swing importacin. *;
6
7 public class IncrementTest extiende JApplet implementa ActionListener {
8 privado incrementObject Incremento;
9 botn privada JButton;
10
11

// Configurar GUI

12

public void init ()

13 {
14 incrementObject = new Incremento (5);
15
16 Container contenedor = getContentPane ();
17

18 button = new JButton ("Haga clic para aumentar");


19 button.addActionListener (this);
20 contenedor.add (botn);
21}
22
23

// Aadir INCREMENTO al total cuando el usuario hace clic en el botn

24

public void actionPerformed (ActionEvent ActionEvent)

25 {
26 incrementObject.increment ();
27 showStatus (incrementObject.toIncrementString ());
28}
29
30} // fin de la clase IncrementTest

31

2003 Prentice Hall, Inc.


Todos los derechos reservados.

Contorno
Increment.java

Lnea 36
palabra clave final declara INCREMENTO tan constante

Lnea 41
ltimo incremento variable debe ser inicializado antes de usarlo
32 // clase que contiene la variable constante
33 Incremento clase {
34

int cuenta privada = 0; // nmero de incrementos

35

privada int Total = 0; // total de todos los incrementos

36

int final privado INCREMENTO; // Variable constante

37
38

// Inicializar incremento constante

39

Incremento pblico (int incrementValue)

40 {
41

INCREMENTO = incrementValue; // Variable intialize constante (una vez)

42}
43
44

// Aadir INCREMENTO total y agregar 1 para contar

45

pblica subasta void ()

46 {
47 totales + = INCREMENTO;

48 ++ cuentan;
49}
50
51

// Devuelve representacin String de datos de un objeto Incremento

52

toIncrementString public String ()

53 {
54

retorno "Despus de la subasta" + count + ": Total =" + totales;

55}
56
57} // fin Incremento clase

palabra clave final declara INCREMENTO tan constante


ltimo incremento variable debe ser inicializado antes de usarlo

2003 Prentice Hall, Inc. Todos los derechos reservados.

IncrementTest.java:40: incremento variable podra no haber sido inicializado


{
^
1 error

2003 Prentice Hall, Inc. Todos los derechos reservados.

8.13 Creacin de paquetes


Podemos importar paquetes en los programas

Grupo de clases e interfaces relacionadas

Ayudar a manejar la complejidad de los componentes de


aplicaciones

Facilitar la reutilizacin del software

Proporcionar convencin para nombres de clase nicos

Popular convencin de nomenclatura de paquete

Nombre de dominio de Internet Reverse

por ejemplo, com.deitel

2003 Prentice Hall, Inc.


Todos los derechos reservados.

Contorno
Time1.java

Lnea 3
Clase Time1 se coloca en este paquete

Lnea 3
Clase Time1 est en el directorio com / Deitel / jhtp5 / ch08

Lnea 5
clase importacin DecimalFormat del paquete java.text
1 // Fig. 8.16: Time1.java
2 declaracin de la clase // Time1 mantiene la hora en formato de 24 horas.
Com.deitel.jhtp5.ch08 3 paquete;
4
Java.text.DecimalFormat 5 de importacin;
6
7 public class Time1 extiende Object {
8

int horas privado; // 0-23

int minuto privado; // 0-59

10
11

privada int segundos; // 0-59

12

// Time1 constructor inicializa cada variable de instancia a cero;

13

// Asegura que cada objeto Time1 comienza en un estado coherente

14

Time1 pblica ()

15 {
16 setTime (0, 0, 0);
17}
18
19

// Establecer un nuevo valor de tiempo utilizando el tiempo universal; realizar

20

// comprobaciones de validez de los datos; establecer los valores no vlidos a cero

21

public void setTime (int h, int m, int s)

22 {
23 horas = ((h> = 0 && h <24) h: 0);
24 minutos = ((m> = 0 && m <60) m: 0);

25 segundos = ((S> = 0 && s <60) s:? 0);


26}
27

Clase Time1 se coloca en este paquete


clase importacin DecimalFormat del paquete java.text
Clase Time1 est en el directorio com / Deitel / jhtp5 / ch08

2003 Prentice Hall, Inc.


Todos los derechos reservados.

Contorno
Time1.java

Lnea 31
DecimalFormat del paquete java.text
28

// Convertir en cadena en formato universal de tiempo

29

toUniversalString public String ()

30 {
31 twoDigits DecimalFormat = nuevo DecimalFormat ("00");
32
33

volver twoDigits.format (horas) + ":" +

34 twoDigits.format (minutos) + ":" + twoDigits.format (segundo);


35}
36
37

// Convertir en cadena en formato de hora estndar

38

toStandardString public String ()

39 {
40 twoDigits DecimalFormat = nuevo DecimalFormat ( "00" );
41

42

retorno (== (hora 12 || == hora 0 )? 12 : horas% 12 ) + ":" +

43 twoDigits.format (minutos) + ":" + twoDigits.format (segundo) +


44 (hora < 12 ? "AM" : "PM" );
45 }
46
47 } // fin de la clase Time1

DecimalFormat del paquete java.text


2003 Prentice Hall, Inc.
Todos los derechos reservados.

Contorno
TimeTest1.java

Lnea 5
clase JOptionPane importacin de paquete javax.swing

Lnea 8
clase importacin Time1 del paquete com.deitel.jhtp4.ch08

Lnea 14
TimeTest1 puede declarar objeto Time1
1 // Fig. 8.17: TimeTest1.java
2 // Clase TimeTest1 para ejercer clase Time1.
3
4 // paquetes Java
5 importacin javax.swing.JOptionPane;
6
7 // paquetes Deitel
8 importacin com.deitel.jhtp5.ch08.Time1; // importacin clase Time1

9
10 public class TimeTest1 {
11
12

static void main (String args []) pblicos

13 {
14 Time1 tiempo = nuevo Time1 (); // llama Time1 constructor
15
16

// Anexar Cadena versin de tiempo de salida de Cuerdas

17 String salida = "La hora universal inicial es:" +


18 time.toUniversalString () + "tiempo estndar inicial nLa \ es:" +
19 time.toStandardString ();
20
21

// Cambiar el tiempo y anexar hora actualizada a la salida

22 time.setTime ( 13 , 27 , 6 );
23 de salida + = "\ n tiempo \ nUniversal despus setTime es:" +
24 time.toUniversalString () +
25

"Tiempo \ nStandard despus setTime es:" + time.toStandardString ();

26

clase importacin Time1 del paquete com.deitel.jhtp4.ch08


clase JOptionPane importacin de paquete javax.swing
TimeTest1 puede declarar objeto Time1

2003 Prentice Hall, Inc.


Todos los derechos reservados.

Contorno
TimeTest1.java
27

// Tiempo ajustado con valores no vlidos; anexar vez actualizada a la salida

28 time.setTime ( 99 , 99 , 99 );
29 de salida + = "\ n \ nDespus intentar ajustes no vlidos:" +
30

"Tiempo \ nUniversal:" + time.toUniversalString () +

31

"Tiempo \ nStandard:" + time.toStandardString ();

32
33 JOptionPane.showMessageDialog ( nula , la produccin,
34

"Clase Testing Time 1" , JOptionPane.INFORMATION_MESSAGE );

35
36 System.exit ( 0 );
37
38 } // fin principal
39
40 } // fin de la clase TimeTest1

Acceso 8.14 Paquete


Acceso Paquete
Variable o mtodo no tiene modificador de acceso de miembros

2003 Prentice Hall, Inc. Todos los derechos reservados.

2003 Prentice Hall, Inc.


Todos los derechos reservados.

Contorno
PackageDataTest.java

Lnea 10
Instanciar referencia a PackageData objeto Lneas 13-22 PackageDataTest puede acceder a los datos
PackageData, debido a que cada clase comparte mismo paquete

1 // Fig. 8.18: PackageDataTest.java

2 // Las clases en el mismo paquete (es decir, el mismo directorio) pueden


3 // uso de los datos de acceso de paquete de otras clases en el mismo paquete.
4 importacin javax.swing.JOptionPane;
5
6 public class PackageDataTest {
7
8

static void main (String args []) pblicos

9{
10 PackageData packageData = nuevo PackageData ();
11
12

// Anexar representacin de cadena de packageData de salida

13 String salida = "Despus de instancias: \ n" +


14 packageData.toPackageDataString ();

15
16

// datos de acceso paquete de cambio de objeto packageData

17 packageData.number = 77 ;
18 packageData.string = "Goodbye" ;
19
20

// Anexar representacin de cadena de packageData de salida

21 + = salida "valores \ nDespus cambiante: \ n" +


22 packageData.toPackageDataString ();
23
24 JOptionPane.showMessageDialog ( nula , la produccin, "paquete de acceso" ,
25

JOptionPane.INFORMATION_MESSAGE);

26

Instanciar referencia al objeto PackageData

PackageDataTest puede acceder a los datos PackageData, debido a que cada clase comparte mismo
paquete

2003 Prentice Hall, Inc.


Todos los derechos reservados.

Contorno
PackageDataTest.java Lnea 33 No modificador de acceso, por lo que la clase tiene variables paquete
de acceso

27 System.exit ( 0 );
28 }
29
30 } // fin de la clase PackageDataTest
31

32 // clase con variables de instancia de acceso paquete


33 clase PackageData {
34

int numero; variable de instancia con acceso de paquete //

35 String cadena; variable de instancia con acceso de paquete //


36
37

// Constructor

38

pblica PackageData ()

39 {
40 Nmero = 0 ;
41 cadena = "Hola" ;
42 }
43
44

// Devuelve PackageData objeto representacin de cadena

45

pblica toPackageDataString String ()

46 {
47

retorno "Nmero:" + nmero + "cadena:" + cadena;

48 }
49
50 } // fin de la clase PackageData

No modificador de acceso, por lo que la clase tiene variables paquete de acceso

2003 Prentice Hall, Inc. Todos los derechos reservados.

Reutilizacin 8.15 Software

Java
Marco para lograr la reutilizacin del software
El desarrollo rpido de aplicaciones (RAD)
por ejemplo, la creacin de una aplicacin GUI rpidamente

2003 Prentice Hall, Inc. Todos los derechos reservados.

8.16 Datos abstraccin y encapsulacin


El ocultamiento de informacin
Estructura de datos de la pila

ltimo en entrar, primero en salir (LIFO)

Desarrollador crea pila


Oculta pila detalles de implementacin 's de los clientes

Abstraccin de datos
Tipos abstractos de datos (TADs)

2003 Prentice Hall, Inc. Todos los derechos reservados.

8.16 Datos abstraccin y encapsulacin (Cont.)


Resumen Tipo de datos (ADT)
Cola
Lnea en la tienda de comestibles

Primero en entrar, primero en salir (FIFO)

Poner en cola para colocar objetos en la cola

Quitar de la cola para retirar objetos de la cola

Enqueue y dequeue esconden representacin de datos interna

2003 Prentice Hall, Inc. Todos los derechos reservados.

8,17 (Ejemplo prctico opcional) Acerca de los


objetos: Comenzando a programar las clases para el
Ascensor Simulacin

Visibilidad

Aplicar modificadores miembro de acceso a miembros de la

clase

pblicas mtodos
para proporcionar servicios a los clientes

privados de variables
Promover la encapsulacin

8.17 Acerca de los objetos (cont.)


Diagrama de clases (UML)
Modificadores Miembro de acceso
pblico
Denotado por el signo ms ( +)

2003 Prentice Hall, Inc. Todos los derechos reservados.

privado

Denotado por el signo menos ( -)

2003 Prentice Hall, Inc. Todos los derechos reservados.

La Fig 8.19 Diagrama de clases con anotaciones de visibilidad.


Piso
- FloorNumber: Entero

- Capacidad: Integer = 1

ElevatorButton
- Prensado: Boolean = false
+ ResetButton (): void
+ PressButton (): void

ElevatorDoor
- Abierto: Boolean = false
+ OpenDoor (): void
+ CloseDoor (): void

Luz
- LightOn: Boolean = false
+ TurnOnLight (): void
+ TurnOffLight (): void

Campana
+ RingBell (): void

ElevatorShaft
FloorButton
- Prensado: Boolean = false

+ ResetButton (): void


+ PressButton (): void

Persona
- ID: Entero
- En movimiento: Boolean = true
+ DoorOpened (): void

Elevador
- En movimiento: Boolean = false
- Convocado: Boolean = false
- CurrentFloor: Integer = 1
- DestinationFloor: Integer = 2
- Capacidad: Integer = 1
- TravelTime: Integer = 5

+ Viaje (): void


+ RequestElevator (): void
+ EnterElevator (): void
+ ExitElevator (): void
+ DepartElevator (): void

FloorDoor
- Abierto: Boolean = false
+ OpenDoor (): void
+ CloseDoor (): void

2003 Prentice Hall, Inc. Todos los derechos reservados.

8.17 Acerca de los objetos (cont.)


Navegabilidad

Indique en qu direccin una asociacin puede navegarse

Ayudar a los programadores a determinar qu objetos necesitan


referencias a otros objetos

2003 Prentice Hall, Inc. Todos los derechos reservados.

La Fig 8.20 Diagrama de clases con la navegabilidad.


1
1
1
1
2

2
1
1
1
1
1
1
1
1
1
2
1
1
1
1
1

Persona
FloorDoor
Luz
Piso
ElevatorShaft

FloorButton
ElevatorDoor
Elevador
ElevatorButton
Campana
Solicitudes
Prensas
Prensas
Rides
Seales para mover
Restablece
Restablece
Camina a travs de
Abre
Abre
1
Anillos
Activa / desactiva

Seales llegada
1
1
1
1
pasajero

2003 Prentice Hall, Inc. Todos los derechos reservados.

8.17 Acerca de los objetos (cont.)


Implementacin
Ingeniera directa
Transformar diseo (es decir, diagrama de clases) a cdigo

2003 Prentice Hall, Inc. Todos los derechos reservados.

8.17 Acerca de los objetos (cont.)


Generamos "cdigo esqueleto" con nuestro diseo
Utilice la clase Ascensor como ejemplo
Cuatro pasos:

Use el nombre en primer compartimiento para declarar clase

pblica

Constructor vaco

Utilice atributos en segundo compartimiento para declarar


variables de instancia

Use asociaciones en diagrama de clases (Fig. 3.19) para declarar


referencias a objetos

Utilice las operaciones en el tercer compartimiento para declarar

mtodos

2003 Prentice Hall, Inc. Todos los derechos reservados.

8.17 Acerca de los objetos (cont.)


Paso 1

public class Ascensor {

pblico Ascensor () {}
}

2003 Prentice Hall, Inc. Todos los derechos reservados.

8.17 Acerca de los objetos (cont.)


Paso 2
public class Ascensor {

// atributos
private boolean movimiento;
private boolean convocado;
privado int currentFloor = 1 ;
privado int destinationFloor = 2 ;

private int capacidad = 1 ;


private int Traveltime = 5 ;

// constructor
pblico Ascensor () {}
}

2003 Prentice Hall, Inc. Todos los derechos reservados.

8.17 Acerca de los objetos (cont.)


Paso 3
public class Ascensor {

// atributos
private boolean movimiento;
private boolean convocado;

privado int currentFloor = 1 ;


privado int destinationFloor = 2 ;
private int capacidad = 1 ;
private int Traveltime = 5 ;

// asociada objetos
privada elevatorDoor ElevatorDoor;
privado ElevatorButton elevatorButton;
privado Campana campana;

// constructor
pblico Ascensor () {}
}

2003 Prentice Hall, Inc. Todos los derechos reservados.

8.17 Acerca de los objetos (cont.)


Paso 4
public class Ascensor {

// atributos
privado boolean movimiento;
private boolean convocado;
privado int currentFloor = 1 ;
privado int destinationFloor = 2 ;
privado int capacidad = 1 ;
private int Traveltime = 5 ;

// asociada objetos
privada elevatorDoor ElevatorDoor;

privado ElevatorButton elevatorButton;


privado Campana campana;

// constructor
pblico Ascensor () {}

// operaciones
public void paseo () {}
public void requestElevator ( ) {}
public void enterElevator () {}
public void exitElevator () {}
public void departElevator () {}
}

Potrebbero piacerti anche