0% encontró este documento útil (0 votos)
19 vistas5 páginas

Taller de Programación Orientada a Objetos

1) El documento describe un taller sobre programación orientada a objetos en Java que incluye sobrecarga de constructores, sobrecarga de métodos y destructores. 2) Se presentan ejemplos de código con clases Persona, Vehículo y Motor para ilustrar estos conceptos. 3) El documento propone actividades como modificar el código para imprimir información específica y corregir posibles errores.
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
19 vistas5 páginas

Taller de Programación Orientada a Objetos

1) El documento describe un taller sobre programación orientada a objetos en Java que incluye sobrecarga de constructores, sobrecarga de métodos y destructores. 2) Se presentan ejemplos de código con clases Persona, Vehículo y Motor para ilustrar estos conceptos. 3) El documento propone actividades como modificar el código para imprimir información específica y corregir posibles errores.
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

PROGRAMACIÒN ORIENTADA A OBJETOS

TALLER No. 4 JAVA PROGRAMACIÓN


ORIENTADA A OBJETOS

Profesor: Jaime Alberto Guzmán Luna

Contenido del taller:


1) Sobrecarga de constructores
2) Sobrecarga de métodos
3) Destructores

Ejercicio 1 para analizar


1 public class ObjTaller4 {
2
3 public static void main(String[] args) {
4 String[] nombres = {"Alejandro", "Jaime", "Daniel",
"Santiago", "Alexander"};
5 Persona[] personas = new Persona[5];
6
7 for (int i = 0; i < [Link]; i++) {
8 personas[i] = new Persona(nombres[i]);
9 }
10
11 Vehiculo auto = new Vehiculo("ABC-306", [Link],
personas[4]);
12
13 Vehiculo auto2 = new Vehiculo("TXT-452", [Link]);
14
15 personas[0] = null;
16 personas[1] = personas[2];
17 personas[4] = null;
18 personas[3].finalize();
19 [Link](personas[3]);
20 }
21 }

1 public class Vehiculo{


2
3 private String placa;
4 private Persona dueno;
5 private Motor motor;
6
7 public Vehiculo(String placa, Motor motor, Persona persona) {
8 [Link] = persona;
9 [Link] = placa;
10 [Link](motor);
11 }

FACULTAD DE MINAS
Sede Medellín
1
PROGRAMACIÒN ORIENTADA A OBJETOS

12
13 public Vehiculo(String placa, Motor motor) {
14 [Link] = placa;
15 [Link](motor);
16 }
17
18 public String getPlaca() {
19 return placa;
20 }
21
22 public void setPlaca(String placa) {
23 [Link] = placa;
24 }
25
26 public Persona getDueno() {
27 return dueno;
28 }
29
30 void setDueno(Persona persona) {
31 [Link] = persona;
32 }
33
34 public Motor getMotor() {
35 return motor;
36 }
37
38 public void setMotor(Motor motor) {
39 [Link] = motor;
40 }
41
42 }

1 public class Persona {


2
3 private String nombre;
4 private Persona mejorAmigo;
5
6 public Persona(String nombre) {
7 [Link] = nombre;
8 }
9
10 public void finalize() {
11 [Link]("Matando a: " + nombre);
12
13 }
14
15 public String getNombre() {
16 return nombre;
17 }
18
19 public void setNombre(String nombre) {
20 [Link] = nombre;

FACULTAD DE MINAS
Sede Medellín
1
PROGRAMACIÒN ORIENTADA A OBJETOS

21 }
22
23 public Persona getMejorAmigo() {
24 return mejorAmigo;
25 }
26
27 void setMejorAmigo(Persona mejorAmigo){
28 [Link] = mejorAmigo;
29 }
30
31 public String toString() {
32
33 return "Soy "+nombre;
34
35 }
36 }

1 public enum Motor {


2
3 ELECTRICO(100), GASOLINA(90), DIESEL(80), HIBRIDO(70);
4
5 //velocidad maxima de cada tipo de motor
6
7 private int velocidadMaxima;
8
9 //Añadir un constructor
10 private Motor(int s){
11 velocidadMaxima=s;
12 }
13
14 public int getVelocidadMaxima(){
15 return velocidadMaxima;
16 }
17
18 public void setVelocidadMaxima(int velocidadMaxima){
19 [Link] = velocidadMaxima;
20 }
21 }

Actividad:
A. ¿Qué pasaría si se pierde la referencia de un objeto de tipo Persona?
B. ¿Como podríamos conocer el nombre del dueno de la variable auto de la línea 11 del
método main?
C. ¿De qué manera podemos agregar un dueno al Vehículo de la línea 13 del método main?
D. Usando la variable auto2 de la línea 13 del método main, obtenga el valor del atributo
velocidadMáxima del motor del vehiculo. Adjunte su propuesta
E. Suponga que, al momento de perder la referencia al objeto, se borra del sistema, es decir
el garbage collector es muy eficiente, ¿Que imprimiría al ejecutar el método main por
consola?
F. ¿Qué ocurre al momento de ejecutar la siguiente línea después de la línea 16
[Link](personas[1]) ? Explique

FACULTAD DE MINAS
Sede Medellín
1
PROGRAMACIÒN ORIENTADA A OBJETOS

G. ¿Qué modificación al código debo hacer para que al momento de ejecutar


[Link](auto2), me aparezca la placa del vehículo y el dueno del vehículo?
H. Usando la variable auto de la línea 11 del método main, y usando el atributo dueno, asigne
de mejorAmigo al tercer elemento del listado personas. Adjunte su propuesta

Ejercicio 2 para analizar


A. Según el siguiente código, indique qué se imprime por consola y explique el porqué de cada
línea donde se imprime

1 public class ObjTaller4B {


2
3 public static void main(String[] args) {
4
5 char c = 'g';
6 short s = 2;
7 byte b = 1;
8 long l = 999999999;
9 int i = 51232;
10 double d= 12.4;
11 float f = 5.65f;
12
13 [Link]("char : " + funcion(c));
14 [Link]("short : " + funcion(s));
15 [Link]("byte : " + funcion(b));
16 [Link]("long : " + funcion(l));
17 [Link]("integer : " + funcion(i));
18 [Link]("double : " + funcion(d));
19 [Link]("float : " + funcion(f));
20 }
21
22 // static String funcion(short a) {
23 // return "Entra a short: " + a;
24 // }
25 static String funcion (int a) {
26 return "Entra a int: " + a;
27 }
28
29 static String funcion (double a) {
30 return "Entra a double: " + a;
31 }
32
33 // static String funcion (float a) {
34 // return "Entra a float: " + a;
35 // }
36 }
37
38 /**
39 * byte short char int long float double
40 */

FACULTAD DE MINAS
Sede Medellín
1
PROGRAMACIÒN ORIENTADA A OBJETOS

B. Realice los siguientes cambios, teniendo siempre como referencia el código inicial.
Explique cómo y por qué cambia lo que se imprime por pantalla.

 Active la función que recibe un short.


 Active la función que recibe un float.
 Comente la función que recibe un double y active la que recibe un float.
 Comente todas las funciones, excepto la que recibe un double.

Ejercicio 3 - GitHub
Enlace entrega y ejercicio: [Link]

PROBLEMA
Según el código dentro del paquete classroom identifique los errores de compilación y piense la
razón por la que ocurren, luego corríjalos.

IMPORTANTE
Corrija los errores de la forma que mejor lo considere, de modo que el programa funcione
correctamente e imprima por pantalla al correrlo el siguiente resultado. Puede agregar, eliminar
o modificar el código. Trate de pensar en la mejor forma de corregirlo.

Resultado:

Para pensar:

1. ¿Qué utilidad tiene la sobrecarga de métodos? ¿Por qué no simplemente llamarlos con
nombres diferentes?
2. ¿Por qué cree que la firma de un método no está compuesta por el nombre de los argumentos
ni el tipo de retorno para diferenciarlo de los demás?
3. ¿Qué ventajas puede encontrar en un inicializador estático frente a simplemente definir el
valor inicial de un atributo en la declaración del mismo?
4. ¿Qué ventajas tiene poder llamar a otro constructor con la expresión this()?

FACULTAD DE MINAS
Sede Medellín
1

Common questions

Con tecnología de IA

Si el garbage collector es extremadamente eficiente, durante la ejecución del método main, el código llamará al método 'finalize()' de 'personas[3]', lo cual imprimiría 'Matando a: Santiago'. Luego, la llamada a `System.out.println(personas[3]);` imprimirá 'Soy Santiago', ya que el método 'finalize()' no necesariamente implica que el objeto sea inmediatamente recogido si queda pendiente una operación. Esto presenta un potencial comportamiento no determinista debido a la recolección de basura, especialmente si existen métodos u operaciones subsiguientes .

La pérdida de referencia al objeto de tipo 'Persona' puede resultar en que el objeto se convierta en elegible para la recolección de basura si no existe otra referencia en el programa que señale dicho objeto. En Java, el garbage collector identifica los objetos sin referencia y libera la memoria que ocupan para optimizar el uso de recursos del programa. Si el garbage collector es muy eficiente, y un objeto de tipo 'Persona' pierde su referencia, podría causar que el método 'finalize()' sea invocado, imprimiendo "Matando a: [nombre]" antes de eliminar el objeto del sistema .

Al activar la función específica para 'short', las impresiones para 'short' cambiarán a 'Entra a short: 2', y al activar para 'float', las impresiones para 'float' cambiarán a 'Entra a float: 5.65'. Cada tipo corresponde al método sobrecargado que maneja su tipo específico, demostrando la capacidad de Java para vincular dinámicamente la llamada al método apropiado según el tipo de dato pasado como argumento, optimizando la eficiencia y legibilidad en la ejecución .

La sobrecarga de constructores es una técnica importante en la programación orientada a objetos porque permite a los desarrolladores definir múltiples maneras de inicializar un objeto, dependiendo de los datos disponibles al momento de su creación. Esto añade flexibilidad y permite que un objeto pueda ser instanciado con diferentes conjuntos de parámetros, mejorando la legibilidad del código y facilitando el mantenimiento. Al proporcionar diferentes constructores, se puede crear un mismo objeto con distintos niveles de información o configuraciones, lo que es esencial en sistemas que requieren adaptabilidad y reutilización de código .

Para agregar un dueño al vehículo 'auto2', se debe emplear el método 'setDueno()' con un objeto de tipo 'Persona' como argumento. Por ejemplo, si se quiere asignar un dueño que ya exista en el arreglo 'personas', el código sería `auto2.setDueno(personas[3]);` Suponiendo que 'personas[3]' es el objeto deseado .

Para que 'System.out.println(auto2)' imprima tanto la placa como el dueño, se debe sobrescribir el método 'toString()' en la clase 'Vehiculo'. Este método debe concatenar la información deseada del vehículo. Por ejemplo, modificar así el método: `public String toString() { return "Placa: " + this.placa + ", Dueño: " + (this.dueno != null ? this.dueno.getNombre() : "Sin dueño"); }`. Esto permite que el método despliegue tanto la placa del vehículo como el nombre del dueño si está asignado, o una indicación de que no hay dueño .

Después de la línea `personas[1] = personas[2];`, la referencia inicial en 'personas[1]' a la 'Persona' original de la posición cero se pierde, y ahora 'personas[1]' apunta al mismo objeto que 'personas[2]'. Por lo tanto, al ejecutar `System.out.println(personas[1])`, el sistema imprimirá la cadena resultante del método 'toString()' de la clase 'Persona' correspondiente al objeto en 'personas[2]'. Si 'personas[2]' no ha sido modificado, se imprimirá "Soy Alejandro" .

La sobrecarga de métodos permite definir múltiples variaciones de un método dentro de una misma clase con diferentes parámetros, lo cual proporciona una manera conveniente de implementar un comportamiento similar para diferentes tipos de datos. Esto es útil porque reduce el código redundante y mejora la legibilidad al permitir que una acción similar se ejecute de maneras levemente diferentes, dependiendo de las entradas proporcionadas. Además, mantiene el contexto y semántica de la operación sin necesidad de inventar nombres diferentes y confusos para cada variación .

Para conocer el nombre del dueño del vehículo 'auto' en la línea 11 del método main, se utilizaría el método 'getDueno()' del objeto 'Vehiculo'. Posteriormente, se llamaría al método 'getNombre()' de la clase 'Persona' para obtener el nombre del dueño del vehículo. El código sería `auto.getDueno().getNombre()` .

El uso de un inicializador estático en Java ofrece varias ventajas: permite que el código se ejecute una vez cuando la clase se carga por primera vez en el sistema, facilitando la inicialización de variables estáticas con lógica más compleja que no puede resumirse en una sola línea. Esto es especialmente útil para configurar entornos, cargar recursos, o inicializar un atributo que depende de la ejecución de algún cálculo, favoreciendo así la consistencia y la eficiencia al evitar que la misma lógica se duplique en diferentes lugares del código .

También podría gustarte