TEMAS ESPECIALES DE COMPUTACIÓN LABORATORIO NÚMERO 3 26/JUNIO/2001
NOMBRE:
_____________________________________________________________.
1.
Se tiene el siguiente
enunciado para el desarrollo de un sistema: “... En esta empresa laboran
alrededor de 100 empleados y se registra su nombre y salario de cada uno de
ellos. De todos los empleados de un departamento, sólo uno es el gerente y los
demás son subordinados de él...”
Para representar lo anterior en clases de Java, ¿Cuál clase
sería hija de la otra (Clase Empleado hija de Clase Gerente o Clase Gerente
hija de Clase
Empleado)?________________________________________________________________.
2.
Si se le pide escribir la
siguiente clase en su propio archivo,
¿Cómo se llamará ese archivo?
_______________________________. Escriba el código, guárdelo y compílelo.
1: public class Empleado
2: {
3: String
nombre = null;
4: float
salario = 0.0f;
5: String
titulo = "Empleado";
6:
7: public
Empleado(String nom, float sal)
8: {
9: nombre =
nom;
10: salario
= sal;
11: }
12:
13: public
void identificaEmpleado()
14: {
15:
System.out.println("Iniciando el metodo identificaEmpleado de
Empleado");
16:
System.out.println("Mi nombre es " + this.nombre + ", soy
" + this.titulo + " y gano:
$" + this.salario);
17: }
18:
19: public
static void main(String arg[])
20: {
21:
Empleado emp1 = new Empleado("Juan Alvarez",9500.50f);
22:
emp1.identificaEmpleado();
23:
System.out.println("Mi puesto es: " + emp1.titulo);
24: }
25: }
Como se observa, la variable de instancia llamada
titulo se inició con el valor “Empleado” y esta variable se imprime dentro del
método de instancia identificaEmpleado() así como también dentro del método de
clase main(String arg[]).
Ejecute la clase Empleado y escriba aquí la salida:
3.
Si se le pide escribir la
siguiente clase en su propio archivo,
¿Cómo se llamará ese archivo?
_______________________________. Escriba el código, guárdelo y compílelo.
1: public class Gerente extends Empleado
2: {
3: String
depto = null;
4: String
titulo = "Gerente";
5:
6: public
Gerente(String nom, float sal, String dep)
7: {
8:
super(nom, sal);
9: depto =
dep;
10: }
11:
12: public
void identificaEmpleado()
13: {
14:
System.out.println("Iniciando el metodo identificaEmpleado de
Gerente");
15:
System.out.println("Mi nombre es " + this.nombre + ", soy
" + this.titulo + " y gano:
$" + this.salario);
16: }
17:
18: public
static void main(String a[])
19: {
20:
Empleado emp2 = new Empleado("Mauricio Martinez",9500.50f);
21:
Empleado emp3 = new Gerente("Miguel
Lopez",9500.50f,"Sistemas");
22: Gerente
emp4 = new Gerente("Jose Perez",18750.00f,"Sistemas");
23:
emp2.identificaEmpleado();
24:
System.out.println("Mi puesto es: " + emp2.titulo);
25:
emp3.identificaEmpleado();
26:
System.out.println("Mi puesto es: " + emp3.titulo);
27:
emp4.identificaEmpleado();
28:
System.out.println("Mi puesto es: " + emp4.titulo);
29: }
30: }
Como se observa, la variable de instancia llamada
titulo se inició con el valor “Gerente” y esta variable se imprime dentro del
método de instancia identificaEmpleado() así como también dentro del método de
clase main(String a[]).
Ejecute la clase Gerente y escriba aquí la salida:
En la siguiente sentencia: Empleado emp2 = new Empleado("Mauricio
Martinez",9500.50f);
La palabra Empleado
que está a la izquierda de emp2 es en realidad el tipo declarado de la referencia. ¿De cuál referencia? de emp2 ya
que como lo dijimos anteriormente, emp2 es una referencia a objeto (de manera
práctica se puede manejar que es un objeto). La palabra Empleado que está a la derecha (o sea, el nombre del constructor)
es el tipo real del objeto. Ahora
viene la conclusión de este ejercicio:
Cuando se invoca un método sobre un objeto, el tipo real del objeto es el que rige qué implementación del método se usa. Cuando se accede a un campo o variable se usa el tipo declarado de la referencia.
Por lo tanto para emp2 el método identificaEmpleado()
se invoca a partir del tipo real (el constructor) que es Empleado y se ejecuta
el método identificaEmpleado de la clase Empleado. Después se imprime la
variable emp2.titulo y como el tipo declarado de la referencia para emp2 es
Empleado también, entonces se va a accesar a la variable titulo de Empleado.
Algo importante de observar es que el método identificaEmpleado() imprime el valor de la variable titulo pero como el método se invoca a partir del tipo real del objeto, también la variable contenida dentro del método se invoca a partir del tipo real del objeto mientras que la variable titulo del método main(String a[]) se imprime a partir del tipo declarado de la referencia.
En la sentencia Empleado emp3 = new
Gerente("Miguel Lopez",9500.50f,"Sistemas");
Para emp3 el tipo real del objeto es Gerente y el tipo
declarado de la referencia es Empleado.
Por lo tanto se invoca al método identificaEmpleado de la clase Gerente
y la variable titulo contenida en ese método también se invoca a partir del
tipo real del objeto (que es Gerente) e imprime el valor “Gerente”. En la línea
26 emp3 imprime su variable titulo (otra vez) y ahí se rige por el tipo
declarado de la referencia (que es Empleado) e imprime el valor “Empleado”.