Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
8.1 Introduccin
Programacin Orientada a Objetos (POO)
Encapsula datos (atributos) y mtodos (comportamientos)
Objetos
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;
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
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
Contorno
Time1.java
26 // Convertir en cadena en formato de hora universal
27
28 {
37 {
38 twoDigits DecimalFormat = nuevo DecimalFormat ("00");
39
40
Constructor de la clase
Mismo nombre que la clase
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
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
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
26
27
Contorno
TimeTest1.java
28 JOptionPane.showMessageDialog (null, la produccin,
29
30
31 System.exit (0);
32
33} // fin principal
34
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
privado
Variables y mtodos que no son accesibles a los clientes de la clase
Contorno
TimeTest2.java
Lneas 9-11
Error Compiler - TimeTest2 no puede acceder directamente a los datos privados de Time1
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
Error Compiler - TimeTest2 no puede acceder directamente a los datos privados de Time1
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
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
24
25
26
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
30 {
31
32
33
34}
35
38 {
39
40
41}
42
43 // devuelve representacin String de SimpleTime
44
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
clase
nuevo NombreClase (argumento1, argumento2, ..., arugmentN);
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
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
19 {
20
21}
22
23 // Time2 constructor: horas y minutos suministran, segundo en mora a 0
24
25 {
26
27}
28
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
31 {
32 setTime (h, m, s); // invocar setTime para validar tiempo
33}
34
35 // Time2 constructor: otro objeto Time2 suministrado
36
37 {
38 // invocar Time2 constructor con tres argumentos
39
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
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
53 {
54 twoDigits DecimalFormat = nuevo DecimalFormat ("00");
55
56
Contorno
Time2.java
59
60 // Convertir en cadena en formato de hora estndar
61
62 {
63 twoDigits DecimalFormat = nuevo DecimalFormat ("00");
64
65
Contorno
TimeTest3.java
Lneas 9-14
Instanciar cada referencia Time2 usando un constructor diferente
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
18
19
20
21 de salida + = "\ NT2: hora especificada; minutos y segundos incumplido" +
22
23
24
25 de salida + = "\ nt3: horas y minutos especificado; segundo defecto" +
26
27
Contorno
TimeTest3.java
28
29 de salida + = "\ nt4: horas, minutos y segundos especificado" +
30
31
32
33 de salida + = "\ NT5: todos los valores no vlidos especificados" +
34
35
36
37 de salida + = "\ NT6: t4 objeto Time2 especificado" +
38
39
40
41 JOptionPane.showMessageDialog (null, la produccin,
42
43
44 System.exit (0);
45
46} // fin principal
47
48} // fin de la clase TimeTest3
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
11
12
Time3 pblica ()
13 {
14
15}
16
17
18
19 {
20
21}
22
23
24
25 {
26
27}
28
Contorno
Time3.java
Lneas 45-68
Mtodos set permite a los objetos para manipular variables privadas
28.
29.
31 {
32 setTime (h, m, s);
33}
34
35
36
37 {
38
39
40}
41
42
// mtodos set
43
44
// Comprobaciones de validez sobre los datos; establecer los valores no vlidos a cero
45
46 {
47 sethour (h); // establecer la hora
48 setMinute (m); // ajustar los minutos
49 setSecond (s); // establecer el segundo
50}
51
52
53
54 {
55 horas = ((h> = 0 && h <24) h: 0);
56}
57
Contorno
Time3.java
Lneas 72-87
Recibe mtodos permiten objetos para leer variables privadas
58
59
60 {
61 minutos = ((m> = 0 && m <60) m: 0);
62}
63
64
65
66 {
67 segundos = ((S> = 0 && s <60) s:? 0);
68}
69
70
// Obtener Mtodos
71
72
73 {
74
75}
volver horas;
76
77
78
79 {
80
volver minutos;
81}
82
Contorno
Time3.java
83
84
85 {
86
volver segundo;
87}
88
89
90
91 {
92 twoDigits DecimalFormat = nuevo DecimalFormat ("00");
93
94
98
99
100
101 {
102 twoDigits DecimalFormat = nuevo DecimalFormat ("00");
103
104
105
106
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
11
12
13
14
15
16 {
17 tiempo = new Time3 (); // crea objeto Time3
18
19
Contorno
TimeTest4.java
Lnea 31
JTextField permite al usuario especificar minutos
Lnea 37
JTextField permite al usuario especificar segundos
29
33 contenedor.add (minuteField);
34
35
// Establecer displayField
46
// Establecer tickButton
51
52
53
// SecondField y tickButton
54 hourField.addActionListener (this);
55 minuteField.addActionListener (this);
56 secondField.addActionListener (this);
57 tickButton.addActionListener (this);
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
64
65 {
66
67
si (event.getSource () == tickButton)
68 tick ();
69
70
71
76
77
83
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
100
101} // fin del mtodo updateDisplay
102
103
104
105 {
106 time.setSecond ((time.getSecond () + 1) 60%);
107
108
si (time.getSecond () == 0) {
110
111
si (time.getMinute () == 0)
Contorno
TimeTest4.java
Contorno
TimeTest4.java
Contorno
TimeTest4.java
8.9 Composicin
Composicin
Clase contiene referencias a objetos de otras clases
Estas referencias son miembros
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 {
8
9
10
11
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
23
24 {
25
26
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
32}
33
34} // fin del mtodo checkMonth
35
36
// Mtodo de utilidad para confirmar el valor adecuado das basado en meses y aos
37
38 {
39
int daysPerMonth [] =
40 {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
41
42
43
44
volver testDay;
45
46
// Comprobar ao bisiesto
47
volver testDay;
50
51 System.out.println ("da Invlido (" + testDay + ") pone a 1.");
52
53
54
55} // fin del mtodo checkDay
Contorno
Date.java
56
57
58
59 {
60
61}
62
63} // fin de la clase Date
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 {
9
10
11
12 Fecha dateOfHire)
13 {
14 firstName = primero;
15 lastName = ltimo;
16 Fecha de Nacimiento = fechaDeNacimiento;
17 HIREDATE = dateOfHire;
18}
19
20
21
22 {
23
24
"Contratado:" + hireDate.toDateString () +
25
26}
27
28} // fin de la clase Empleado
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
15
16 System.exit (0);
17}
18
19} // fin de la clase EmployeeTest
al objeto
Mtodo finalizador
Devuelve recursos al sistema de
Java proporciona mtodo finalize
Definido en java.lang.Object
Devoluciones vaco
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
7
8
10
11 {
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
21
22
23
24 {
Contorno
Employee.java
Lneas 43-46
mtodo esttico accede esttica variable cuenta
30
31
32 {
33
volver firstName;
34}
35
36
// Obtener apellido
37
38 {
39
volver lastName;
40}
41
42
43
44 {
45
recuento de retorno;
46}
47
48} // fin de la clase Empleado
Contorno
EmployeeTest.java
Lnea 12 EmployeeTest puede invocar Empleado mtodo esttico, a pesar de los empleados no ha
creado una instancia
9{
10
14
21
22
23
24
EmployeeTest puede invocar Empleado mtodo esttico, a pesar de los empleados no ha creado una
instancia
Contorno
EmployeeTest.java
Lnea 35
Pide mecanismo automtico de recoleccin de basura de Java
29
30
// Ejemplo, slo hay una referencia a cada empleado, por lo que estos
31
32 e1 = null;
33 e2 = null;
34
35 System.gc (); // sugieren llamada al recolector de basura
36
37
38
39
45
46 System.exit (0);
47}
48
49} // fin de la clase EmployeeTest
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
13 {
14 incrementObject = new Incremento (5);
15
16 Container contenedor = getContentPane ();
17
24
25 {
26 incrementObject.increment ();
27 showStatus (incrementObject.toIncrementString ());
28}
29
30} // fin de la clase IncrementTest
31
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
35
36
37
38
39
40 {
41
42}
43
44
45
46 {
47 totales + = INCREMENTO;
48 ++ cuentan;
49}
50
51
52
53 {
54
55}
56
57} // fin Incremento clase
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
10
11
12
13
14
Time1 pblica ()
15 {
16 setTime (0, 0, 0);
17}
18
19
20
21
22 {
23 horas = ((h> = 0 && h <24) h: 0);
24 minutos = ((m> = 0 && m <60) m: 0);
Contorno
Time1.java
Lnea 31
DecimalFormat del paquete java.text
28
29
30 {
31 twoDigits DecimalFormat = nuevo DecimalFormat ("00");
32
33
38
39 {
40 twoDigits DecimalFormat = nuevo DecimalFormat ( "00" );
41
42
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
13 {
14 Time1 tiempo = nuevo Time1 (); // llama Time1 constructor
15
16
22 time.setTime ( 13 , 27 , 6 );
23 de salida + = "\ n tiempo \ nUniversal despus setTime es:" +
24 time.toUniversalString () +
25
26
Contorno
TimeTest1.java
27
28 time.setTime ( 99 , 99 , 99 );
29 de salida + = "\ n \ nDespus intentar ajustes no vlidos:" +
30
31
32
33 JOptionPane.showMessageDialog ( nula , la produccin,
34
35
36 System.exit ( 0 );
37
38 } // fin principal
39
40 } // fin de la clase TimeTest1
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
9{
10 PackageData packageData = nuevo PackageData ();
11
12
15
16
17 packageData.number = 77 ;
18 packageData.string = "Goodbye" ;
19
20
JOptionPane.INFORMATION_MESSAGE);
26
PackageDataTest puede acceder a los datos PackageData, debido a que cada clase comparte mismo
paquete
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
// Constructor
38
pblica PackageData ()
39 {
40 Nmero = 0 ;
41 cadena = "Hola" ;
42 }
43
44
45
46 {
47
48 }
49
50 } // fin de la clase PackageData
Java
Marco para lograr la reutilizacin del software
El desarrollo rpido de aplicaciones (RAD)
por ejemplo, la creacin de una aplicacin GUI rpidamente
Abstraccin de datos
Tipos abstractos de datos (TADs)
Visibilidad
clase
pblicas mtodos
para proporcionar servicios a los clientes
privados de variables
Promover la encapsulacin
privado
- 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
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
FloorDoor
- Abierto: Boolean = false
+ OpenDoor (): void
+ CloseDoor (): void
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
pblica
Constructor vaco
mtodos
pblico Ascensor () {}
}
// atributos
private boolean movimiento;
private boolean convocado;
privado int currentFloor = 1 ;
privado int destinationFloor = 2 ;
// constructor
pblico Ascensor () {}
}
// atributos
private boolean movimiento;
private boolean convocado;
// asociada objetos
privada elevatorDoor ElevatorDoor;
privado ElevatorButton elevatorButton;
privado Campana campana;
// constructor
pblico 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;
// constructor
pblico Ascensor () {}
// operaciones
public void paseo () {}
public void requestElevator ( ) {}
public void enterElevator () {}
public void exitElevator () {}
public void departElevator () {}
}