Java Unidad 5
Java Unidad 5
Introducción a la
orientación de
objetos
Contenidos
En Java, una clase es una plantilla o modelo a partir de la cual se crean objetos. Define los atributos (características) y
métodos (comportamientos) que tendrán los objetos basados en esa clase.
Estructura básica de una clase en Java
3
Introducción a la orientación de objetos Parte 1: Clases. Atributos, métodos y visibilidad
2. Atributos
Los atributos son las variables que almacenan el estado de un objeto. Se definen dentro de una clase y pueden ser de
diferentes tipos: primitivos (int, double, boolean) o referencias (como objetos de otras clases).
Uso:
Salida:
4
Introducción a la orientación de objetos Parte 1: Clases. Atributos, métodos y visibilidad
3. Métodos
Los métodos son funciones que definen el comportamiento de los objetos. Pueden realizar tareas específicas, modifi-
car atributos o devolver información.
Tipos de métodos:
Uso:
5
Introducción a la orientación de objetos Parte 1: Clases. Atributos, métodos y visibilidad
Salida:
Bienvenido a la calculadora.
Suma: 15
Resta: 5
4. Visibilidad
La visibilidad define quién puede acceder a los atributos y métodos de una clase. Esto se controla mediante modifica-
dores como public, private, protected y el modificador por defecto (default).
Modificadores de visibilidad en Java:
6
Introducción a la orientación de objetos Parte 1: Clases. Atributos, métodos y visibilidad
Uso:
Salida:
Ejercicios prácticos
7
Introducción a la orientación de objetos Parte 1: Clases. Atributos, métodos y visibilidad
Un constructor es un método especial que se ejecuta automáticamente cuando se crea un objeto. Su propósito princi-
pal es inicializar los atributos de la clase. En Java, un constructor:
Uso:
Salida:
Sobrecarga de constructores
Puedes definir múltiples constructores con diferentes parámetros para inicializar objetos de varias formas.
8
Introducción a la orientación de objetos Parte 1: Clases. Atributos, métodos y visibilidad
Ejemplo:
Uso:
Salida:
9
Introducción a la orientación de objetos Parte 1: Clases. Atributos, métodos y visibilidad
Los métodos de instancia se ejecutan sobre objetos específicos, mientras que los métodos estáticos pertenecen a la
clase y no requieren un objeto.
Métodos de instancia
Ejemplo:
Métodos estáticos
Ejemplo:
10
Introducción a la orientación de objetos Parte 1: Clases. Atributos, métodos y visibilidad
Salida:
Los getters y setters son métodos especiales que permiten acceder y modificar los atributos de una clase mientras
mantienen la encapsulación. Esto protege los datos internos del objeto y asegura que los cambios se realicen de forma
controlada.
11
Introducción a la orientación de objetos Parte 1: Clases. Atributos, métodos y visibilidad
12
Introducción a la orientación de objetos Parte 1: Clases. Atributos, métodos y visibilidad
Uso:
Salida:
13
Introducción a la orientación de objetos Parte 1: Clases. Atributos, métodos y visibilidad
Ejercicios propuestos
Objetivo:
Crear una clase que modele un producto con nombre y precio, y permita al usuario consultar y modificar el precio de
manera controlada.
Pasos para el alumno:
2. Agrega un constructor:
14
Introducción a la orientación de objetos Parte 1: Clases. Atributos, métodos y visibilidad
15
Introducción a la orientación de objetos Parte 1: Clases. Atributos, métodos y visibilidad
// Clase Producto
public class Producto {
private String nombre;
private double precio;
// Constructor
public Producto(String nombre, double precio) {
[Link] = nombre;
[Link] = precio;
}
// Getters
public String getNombre() {
return nombre;
}
public double getPrecio() {
return precio;
}
// Setters
public void setPrecio(double precio) {
if (precio >= 0) {
[Link] = precio;
} else {
[Link](“El precio no puede ser negativo.”);
}
}
// Método adicional
public void mostrarInformacion() {
[Link](“Producto: “ + nombre + “, Precio: $” + precio);
}
}
// Clase Main para probar Producto
public class Main {
public static void main(String[] args) {
// Crear un objeto Producto
Producto producto = new Producto(“Laptop”, 1200.0);
// Mostrar información inicial
[Link]();
// Cambiar el precio
[Link](1350.0);
[Link]();
// Intentar establecer un precio negativo
[Link](-100.0);
[Link]();
}
}
16
Introducción a la orientación de objetos Parte 1: Clases. Atributos, métodos y visibilidad
Salida Esperada:
Objetivo:
Crear un sistema básico que permita gestionar información de empleados, incluyendo nombre, salario y aumentos
salariales.
Pasos para el alumno:
2. Crea el constructor:
17
Introducción a la orientación de objetos Parte 1: Clases. Atributos, métodos y visibilidad
// Clase Empleado
public class Empleado {
private String nombre;
private double salario;
// Constructor
public Empleado(String nombre, double salario) {
[Link] = nombre;
[Link] = salario;
}
// Getters
public String getNombre() {
return nombre;
}
public double getSalario() {
return salario;
}
// Método para aumentar el salario
public void aumentarSalario(double porcentaje) {
if (porcentaje > 0) {
salario += salario * porcentaje / 100;
} else {
[Link](“El porcentaje debe ser positivo.”);
}
}
// Método para mostrar información
public void mostrarInformacion() {
[Link](“Empleado: “ + nombre + “, Salario: $” + sala-
rio);
}
}
// Clase Main para probar Empleado
public class Main {
public static void main(String[] args) {
// Crear objetos Empleado
Empleado empleado1 = new Empleado(“Ana”, 3000.0);
Empleado empleado2 = new Empleado(“Carlos”, 4000.0);
// Mostrar información inicial
[Link]();
[Link]();
// Aumentar salarios
[Link](10); // 10%
[Link](15); // 15%
// Mostrar información actualizada
18
Introducción a la orientación de objetos Parte 1: Clases. Atributos, métodos y visibilidad
[Link]();
[Link]();
}
}
Salida Esperada:
Objetivo:
Diseñar un sistema que permita crear habitaciones de hotel con precios y reservarlas.
Pasos para el alumno:
2. Crea el constructor:
19
Introducción a la orientación de objetos Parte 1: Clases. Atributos, métodos y visibilidad
// Clase Habitacion
public class Habitacion {
private int numeroHabitacion;
private double precio;
private boolean reservada;
// Constructor
public Habitacion(int numeroHabitacion, double precio) {
[Link] = numeroHabitacion;
[Link] = precio;
[Link] = false;
}
// Método para reservar
public void reservarHabitacion() {
if (!reservada) {
reservada = true;
[Link](“Habitación “ + numeroHabitacion + “ reser-
vada con éxito.”);
} else {
[Link](“La habitación “ + numeroHabitacion + “ ya
está reservada.”);
}
}
// Método para cancelar reserva
public void cancelarReserva() {
if (reservada) {
reservada = false;
[Link](“Reserva de la habitación “ + numeroHabita-
cion + “ cancelada.”);
} else {
[Link](“La habitación “ + numeroHabitacion + “ no
está reservada.”);
}
}
// Método para mostrar información
public void mostrarInformacion() {
String estado = reservada ? “Reservada” : “Disponible”;
[Link](“Habitación “ + numeroHabitacion + “, Precio: $”
+ precio + “, Estado: “ + estado);
}
}
// Clase Main para probar Habitacion
public class Main {
public static void main(String[] args) {
// Crear habitaciones
20
Introducción a la orientación de objetos Parte 1: Clases. Atributos, métodos y visibilidad
Salida Esperada:
21
Introducción a la orientación de objetos Parte 1: Clases. Atributos, métodos y visibilidad
import [Link];
public class Producto {
private String nombre;
private double precio;
// Constructor
public Producto(String nombre, double precio) {
[Link] = nombre;
[Link] = precio;
}
// Getters y Setters
public String getNombre() {
return nombre;
}
public double getPrecio() {
return precio;
}
public void setPrecio(double precio) {
if (precio >= 0) {
[Link] = precio;
} else {
[Link](“El precio no puede ser negativo.”);
}
}
// Método para mostrar información
public void mostrarInformacion() {
[Link](“Producto: “ + nombre + “, Precio: $” + precio);
}
// Main para interacción con el usuario
public static void main(String[] args) {
Scanner scanner = new Scanner([Link]);
// Pedir información del producto al usuario
[Link](“Introduce el nombre del producto: “);
String nombre = [Link]();
[Link](“Introduce el precio inicial del producto: “);
double precio = [Link]();
// Crear objeto Producto
Producto producto = new Producto(nombre, precio);
// Mostrar información inicial
[Link]();
// Preguntar al usuario si desea cambiar el precio
[Link](“¿Deseas cambiar el precio? (sí/no): “);
[Link](); // Consumir salto de línea
String respuesta = [Link]();
22
Introducción a la orientación de objetos Parte 1: Clases. Atributos, métodos y visibilidad
if ([Link](“sí”)) {
[Link](“Introduce el nuevo precio: “);
double nuevoPrecio = [Link]();
[Link](nuevoPrecio);
}
// Mostrar información final
[Link]();
[Link]();
}
}
Objetivo:
Modificar la clase Empleado para que los datos de los empleados se introduzcan desde la consola y permitir ajustes
dinámicos del salario.
Código Mejorado en la siguiente página
23
Introducción a la orientación de objetos Parte 1: Clases. Atributos, métodos y visibilidad
import [Link];
public class Empleado {
private String nombre;
private double salario;
// Constructor
public Empleado(String nombre, double salario) {
[Link] = nombre;
[Link] = salario;
}
// Métodos
public String getNombre() {
return nombre;
}
public double getSalario() {
return salario;
}
public void aumentarSalario(double porcentaje) {
if (porcentaje > 0) {
salario += salario * porcentaje / 100;
} else {
[Link](“El porcentaje debe ser positivo.”);
}
}
public void mostrarInformacion() {
[Link](“Empleado: “ + nombre + “, Salario: $” + sala-
rio);
}
// Main con interacción del usuario
public static void main(String[] args) {
Scanner scanner = new Scanner([Link]);
// Introducir datos del empleado
[Link](“Introduce el nombre del empleado: “);
String nombre = [Link]();
[Link](“Introduce el salario inicial del empleado: “);
double salario = [Link]();
// Crear objeto Empleado
Empleado empleado = new Empleado(nombre, salario);
// Mostrar información inicial
[Link]();
// Ajustar salario
[Link](“Introduce el porcentaje de aumento salarial: “);
double porcentaje = [Link]();
[Link](porcentaje);
24
Introducción a la orientación de objetos Parte 1: Clases. Atributos, métodos y visibilidad
• Asegurarse de que los valores introducidos sean válidos (ej., no permitir salarios negativos).
• Usar un bucle para solicitar entradas hasta que sean correctas.
• Ofrecer al usuario opciones para realizar diferentes operaciones, como modificar atributos, consultar información,
etc.
• Crear una lista de empleados o productos que permita manejar múltiples objetos en una sola ejecución.
25
Introducción a la orientación de objetos Parte2:[Link],[Link].
1. ¿Qué es un Objeto?
Un objeto es una entidad concreta que combina datos y comportamientos. Es una representación de algo del mundo
real o abstracto, modelado mediante una clase. En Java, un objeto es una instancia de una clase.
Un coche tiene:
1.1. Estado
El estado de un objeto se define mediante sus atributos. Es el conjunto de valores que describen al objeto en un mo-
mento dado. El estado puede cambiar durante la ejecución del programa mediante la interacción con sus métodos.
Ejemplo: Estado Dinámico
Clase que representa una bombilla con atributos que describen si está encendida o apagada.
26
Introducción a la orientación de objetos Parte2:[Link],[Link].
Uso de la clase:
Salida:
Los métodos mutadores (como encender o apagar) son responsables de cambiar el estado del objeto. Es una buena
práctica usar métodos en lugar de acceder directamente a los atributos.
27
Introducción a la orientación de objetos Parte2:[Link],[Link].
28
Introducción a la orientación de objetos Parte2:[Link],[Link].
Uso de la clase:
29
Introducción a la orientación de objetos Parte2:[Link],[Link].
1.2. Comportamiento
El comportamiento de un objeto define lo que puede hacer o cómo puede interactuar con otros objetos. En Java, el
comportamiento se implementa mediante métodos.
Ejemplo: Caja Fuerte
30
Introducción a la orientación de objetos Parte2:[Link],[Link].
Uso:
Salida:
1.3. Identidad
Dos objetos pueden tener el mismo estado y comportamiento, pero son diferentes debido a su identidad. En Java, la
identidad está asociada con la dirección de memoria.
31
Introducción a la orientación de objetos Parte2:[Link],[Link].
Salida:
Explicación
• Aunque persona1 y persona2 tienen el mismo estado (nombre y edad), son objetos diferentes porque ocupan
direcciones distintas en memoria.
1.4. Mensajes
Un mensaje en Java es la forma en que un objeto invoca métodos de otro. Este mecanismo permite que los objetos
interactúen entre sí.
32
Introducción a la orientación de objetos Parte2:[Link],[Link].
Uso:
Salida:
2. Test de comprensión
Respuesta correcta: b
33
Introducción a la orientación de objetos Parte2:[Link],[Link].
Respuesta correcta: c
3. ¿Qué determina la identidad de un objeto?
a) Su estado y comportamiento.
b) Su posición en el código fuente.
c) Su dirección única en memoria.
d) Los valores de sus atributos.
Respuesta correcta: c
4. Si dos objetos tienen el mismo estado y comportamiento, pero ocupan direcciones de memoria diferentes, enton-
ces:
Respuesta correcta: a
5. ¿Qué son los mensajes en la programación orientada a objetos?
Respuesta correcta: b
6. ¿Qué método de los siguientes cambiaría el estado de un objeto?
Respuesta correcta: b
34
Introducción a la orientación de objetos Parte2:[Link],[Link].
Objetivo
Crear un programa que modele un sistema básico de gestión de tareas, permitiendo que los usuarios:
1. Creen tareas.
2. Cambien su estado (completada o no completada).
3. Muestren todas las tareas con su estado actual.
Pasos
35
Introducción a la orientación de objetos Parte2:[Link],[Link].
Código Completo
import [Link];
import [Link];
// Clase Tarea
class Tarea {
private String descripcion;
private boolean completada;
// Constructor
public Tarea(String descripcion) {
[Link] = descripcion;
[Link] = false; // Inicialmente, no está completada
}
// Método para marcar como completada
public void marcarCompletada() {
if (!completada) {
completada = true;
[Link](“La tarea \”” + descripcion + “\” ha sido
marcada como completada.”);
} else {
[Link](“La tarea \”” + descripcion + “\” ya estaba
completada.”);
}
}
// Método para mostrar el estado actual
public void mostrarEstado() {
String estado = completada ? “Completada” : “No completada”;
[Link](“Tarea: \”” + descripcion + “\”, Estado: “ + es-
tado);
}
}
// Clase principal
public class Main {
public static void main(String[] args) {
ArrayList<Tarea> listaTareas = new ArrayList<>();
Scanner scanner = new Scanner([Link]);
boolean continuar = true;
// Menú interactivo
while (continuar) {
[Link](“\n--- Menú de Gestión de Tareas ---”);
[Link](“1. Añadir una tarea”);
[Link](“2. Marcar una tarea como completada”);
[Link](“3. Mostrar todas las tareas”);
36
Introducción a la orientación de objetos Parte2:[Link],[Link].
[Link](“4. Salir”);
[Link](“Selecciona una opción: “);
int opcion = [Link]();
[Link](); // Consumir salto de línea
switch (opcion) {
case 1:
[Link](“Introduce la descripción de la
nueva tarea: “);
String descripcion = [Link]();
[Link](new Tarea(descripcion));
[Link](“Tarea añadida.”);
break;
case 2:
[Link](“Selecciona la tarea que quieres
marcar como completada:”);
for (int i = 0; i < [Link](); i++) {
[Link]((i + 1) + “. “);
[Link](i).mostrarEstado();
}
int indice = [Link]() - 1;
if (indice >= 0 && indice < [Link]()) {
[Link](indice).marcarCompletada();
} else {
[Link](“Índice no válido.”);
}
break;
case 3:
[Link](“\n--- Lista de Tareas ---”);
for (Tarea tarea : listaTareas) {
[Link]();
}
break;
case 4:
continuar = false;
[Link](“Saliendo del sistema...”);
break;
default:
[Link](“Opción no válida. Intenta de
nuevo.”);
}
}
[Link]();
}
}
37
Introducción a la orientación de objetos Parte2:[Link],[Link].
38
Introducción a la orientación de objetos Parte 3: Encapsulado. Visibilidad.
1. ¿Qué es el Encapsulado?
El encapsulado permite:
La solución es hacer privados los atributos y proporcionar métodos públicos para interactuar con ellos.
39
Introducción a la orientación de objetos Parte 3: Encapsulado. Visibilidad.
40
Introducción a la orientación de objetos Parte 3: Encapsulado. Visibilidad.
Salida:
3. Modificadores de Visibilidad
Los modificadores de visibilidad controlan el acceso a los atributos y métodos de una clase desde otras clases o pa-
quetes. En Java, existen cuatro niveles de visibilidad:
protected √ √ √ ×
default √ √ × ×
private √ × × ×
Ejemplo de Modificadores
41
Introducción a la orientación de objetos Parte 3: Encapsulado. Visibilidad.
1. Protección de datos:
2. Control de acceso:
3. Mantenimiento y flexibilidad:
• Cambiar la implementación interna no afecta el resto del código si la interfaz pública se mantiene.
5. Ejemplo Completo
Requisitos:
2. Métodos:
42
Introducción a la orientación de objetos Parte 3: Encapsulado. Visibilidad.
Clase CuentaBancaria:
43
Introducción a la orientación de objetos Parte 3: Encapsulado. Visibilidad.
Clase principal:
Salida:
6. Ejercicio
3. En la clase principal:
• Crea un producto.
• Modifica sus atributos utilizando los setters.
• Calcula y muestra el valor del inventario.
44
Introducción a la orientación de objetos Parte 4: Relaciones entre clases
2. Agregación: Una relación más fuerte donde una clase contiene a otra como parte de su estructura, pero los objetos
tienen ciclos de vida independientes.
3. Composición: Una relación de dependencia más fuerte donde una clase contiene otra, y ambas tienen el mismo
ciclo de vida.
4. Herencia: Una clase (subclase) hereda atributos y métodos de otra clase (superclase).
5. Dependencia: Una clase utiliza otra para realizar una acción específica.
2. Asociación
Unidireccional
Una clase conoce a la otra, pero no al revés.
45
Introducción a la orientación de objetos Parte 4: Relaciones entre clases
Salida:
Cliente: Carlos
Número de cuenta: 123456789, Saldo: $1500.0
46
Introducción a la orientación de objetos Parte 4: Relaciones entre clases
3. Agregación
La agregación implica que una clase contiene objetos de otra, pero ambos tienen ciclos de vida independientes.
Ejemplo: Equipo y Jugadores
import [Link];
public class Jugador {
private String nombre;
public Jugador(String nombre) {
[Link] = nombre;
}
public void mostrarInformacion() {
[Link]("Jugador: " + nombre);
}
}
public class Equipo {
private String nombre;
private ArrayList<Jugador> jugadores;
public Equipo(String nombre) {
[Link] = nombre;
[Link] = new ArrayList<>();
}
public void agregarJugador(Jugador jugador) {
[Link](jugador);
}
public void mostrarInformacion() {
[Link]("Equipo: " + nombre);
[Link]("Jugadores:");
for (Jugador jugador : jugadores) {
[Link]();
}
}
}
public class Main {
public static void main(String[] args) {
Jugador jugador1 = new Jugador("Luis");
Jugador jugador2 = new Jugador("Ana");
Equipo equipo = new Equipo("Tigres");
[Link](jugador1);
[Link](jugador2);
[Link]();
}
}
47
Introducción a la orientación de objetos Parte 4: Relaciones entre clases
Salida:
Equipo: Tigres
Jugadores:
Jugador: Luis
Jugador: Ana
4. Composición
La composición es una relación más fuerte. Si la clase contenedora desaparece, los objetos que contiene también lo
hacen.
48
Introducción a la orientación de objetos Parte 4: Relaciones entre clases
Salida:
Coche: Toyota
Potencia del motor: 120 HP
5. Herencia
La herencia permite que una clase (subclase) herede atributos y métodos de otra clase (superclase).
Ejemplo: Animales y Perros
Salida:
Animal: Rex
¡Guau, guau!
49
Introducción a la orientación de objetos Parte 4: Relaciones entre clases
6. Ejercicio Guiado
Clase Libro:
Clase Biblioteca:
import [Link];
public class Biblioteca {
private ArrayList<Libro> libros;
public Biblioteca() {
[Link] = new ArrayList<>();
}
public void agregarLibro(Libro libro) {
[Link](libro);
}
public void mostrarLibros() {
[Link]("Libros disponibles:");
for (Libro libro : libros) {
[Link]();
}
}
}
50
Introducción a la orientación de objetos Parte 4: Relaciones entre clases
Clase principal:
Salida:
Libros disponibles:
Título: 1984, Autor: George Orwell
Título: Cien Años de Soledad, Autor: Gabriel García Márquez
51
Introducción a la orientación de objetos Parte5:Principiosbásicosdelaorientaciónaobjetos.
1. Abstracción
2. Encapsulación
3. Herencia
4. Polimorfismo
Cada uno de estos conceptos se enfoca en diferentes aspectos del diseño y desarrollo de software, y juntos constituyen
el núcleo de la POO.
1. Abstracción
La abstracción consiste en modelar entidades del mundo real seleccionando únicamente las características esenciales
que son relevantes para el programa, ignorando los detalles irrelevantes.
Ejemplo práctico: Vehículos
1. Clase abstracta: Define los métodos y atributos generales que todas las subclases deben implementar o heredar.
2. Subclases: Implementan o personalizan la funcionalidad según el tipo específico de objeto.
52
Introducción a la orientación de objetos Parte5:Principiosbásicosdelaorientaciónaobjetos.
// Clase abstracta
abstract class Vehiculo {
protected String marca;
public Vehiculo(String marca) {
[Link] = marca;
}
public abstract void mover(); // Método abstracto
public void mostrarMarca() {
[Link]("Marca: " + marca);
}
}
// Subclase
class Coche extends Vehiculo {
public Coche(String marca) {
super(marca);
}
@Override
public void mover() {
[Link]("El coche se mueve en la carretera.");
}
}
// Clase principal
public class Main {
public static void main(String[] args) {
Vehiculo coche = new Coche("Toyota");
[Link]();
[Link]();
}
}
Salida:
Marca: Toyota
El coche se mueve en la carretera.
2. Encapsulación
El encapsulamiento se refiere a proteger los datos internos de una clase restringiendo su acceso directo desde fuera de
la clase, como se explicó anteriormente. Esto permite validar y controlar cómo se interactúa con los atributos.
Ventajas:
53
Introducción a la orientación de objetos Parte5:Principiosbásicosdelaorientaciónaobjetos.
3. Herencia
La herencia permite que una clase (subclase) reutilice atributos y métodos de otra clase (superclase). Esto promueve
la reutilización de código y facilita la extensión de funcionalidades.
Ejemplo: Herencia de animales
// Superclase
class Animal {
protected String nombre;
public Animal(String nombre) {
[Link] = nombre;
}
public void comer() {
[Link](nombre + " está comiendo.");
}
}
// Subclase
class Perro extends Animal {
public Perro(String nombre) {
super(nombre);
}
public void ladrar() {
[Link](nombre + " está ladrando: ¡Guau, guau!");
}
}
// Clase principal
public class Main {
public static void main(String[] args) {
Perro perro = new Perro("Rex");
[Link]();
[Link]();
}
}
Salida:
54
Introducción a la orientación de objetos Parte5:Principiosbásicosdelaorientaciónaobjetos.
4. Polimorfismo
El polimorfismo permite que un objeto tome diferentes formas, es decir, un objeto de una subclase puede ser tratado
como un objeto de su superclase. Esto se logra mediante:
Ejemplo: Sobreescritura
// Superclase
class Figura {
public void dibujar() {
[Link]("Dibujando una figura.");
}
}
// Subclase
class Circulo extends Figura {
@Override
public void dibujar() {
[Link]("Dibujando un círculo.");
}
}
// Clase principal
public class Main {
public static void main(String[] args) {
Figura figura1 = new Figura();
Figura figura2 = new Circulo();
[Link]();
[Link](); // Polimorfismo
}
}
Salida:
55
Introducción a la orientación de objetos Parte5:Principiosbásicosdelaorientaciónaobjetos.
3. En la clase principal:
Solución:
Clase Instrumento:
Subclase Guitarra:
56
Introducción a la orientación de objetos Parte5:Principiosbásicosdelaorientaciónaobjetos.
Subclase Piano:
Clase principal:
Salida:
6. Preguntas de Evaluación
57
Introducción a la orientación de objetos ConclusióndelBloque:Introducciónalaorientaciónaobjetos
1. Puntos Principales
• Un objeto es una instancia de una clase, con un estado único (valores de atributos) y comportamientos (métodos).
• Los mensajes son la forma en que los objetos interactúan, invocando métodos en otros objetos.
3. Encapsulado y Visibilidad:
• La visibilidad de los atributos y métodos, controlada por modificadores como private, protected y public,
garantiza que los datos sean seguros y manejados adecuadamente.
• El encapsulamiento fomenta el uso de métodos públicos para exponer comportamientos y esconder detalles de
implementación.
5. Principios Básicos:
58
Introducción a la orientación de objetos ConclusióndelBloque:Introducciónalaorientaciónaobjetos
• La herencia y los principios de diseño orientado a objetos permiten que las clases sean reutilizables en diferentes
contextos.
2. Mantenimiento Simplificado:
• La encapsulación facilita la modificación de clases sin afectar otras partes del sistema.
3. Escalabilidad y Modularidad:
• Los sistemas orientados a objetos son fáciles de escalar, ya que se pueden añadir nuevas clases o funcionalida-
des sin alterar significativamente el diseño existente.
• POO permite mapear conceptos del mundo real en código, haciendo que el diseño sea más intuitivo y compren-
sible.
Objetivo: Aplicar todos los conceptos aprendidos sobre la orientación a objetos en un proyecto completo.
Diseña un sistema de gestión de una biblioteca que permita realizar las siguientes acciones:
1. Gestión de libros:
• Métodos:
2. Gestión de usuarios:
• Métodos:
› mostrarInformacion(): Muestra el nombre del usuario y los libros que tiene prestados.
› prestarLibro(Libro libro): Agrega un libro al array de préstamos si el usuario no ha alcanzado el
límite y si el libro está disponible.
› devolverLibro(Libro libro): Devuelve un libro, eliminándolo de los préstamos.
59
Introducción a la orientación de objetos ConclusióndelBloque:Introducciónalaorientaciónaobjetos
3. Biblioteca:
60
Introducción a la orientación de objetos ConclusióndelBloque:Introducciónalaorientaciónaobjetos
Solución
Clase Libro:
61
Introducción a la orientación de objetos ConclusióndelBloque:Introducciónalaorientaciónaobjetos
Clase Usuario:
import [Link];
public class Usuario {
private String nombre;
private ArrayList<Libro> prestamos;
public Usuario(String nombre) {
[Link] = nombre;
[Link] = new ArrayList<>();
}
public void mostrarInformacion() {
[Link]("Usuario: " + nombre);
[Link]("Libros prestados:");
if ([Link]()) {
[Link]("No tiene libros prestados.");
} else {
for (Libro libro : prestamos) {
[Link](" - " + libro);
}
}
}
public void prestarLibro(Libro libro) {
if ([Link]() < 3 && [Link]()) {
[Link](libro);
[Link]();
} else if (![Link]()) {
[Link]("El libro '" + libro + "' no está dis-
ponible.");
} else {
[Link]("No puedes prestar más libros.");
}
}
public void devolverLibro(Libro libro) {
if ([Link](libro)) {
[Link]();
} else {
[Link]("El libro '" + libro + "' no está entre tus
préstamos.");
}
}
}
62
Introducción a la orientación de objetos ConclusióndelBloque:Introducciónalaorientaciónaobjetos
Clase Biblioteca:
import [Link];
public class Biblioteca {
private ArrayList<Libro> libros;
public Biblioteca() {
[Link] = new ArrayList<>();
}
public void agregarLibro(Libro libro) {
[Link](libro);
}
public void mostrarLibrosDisponibles() {
[Link]("Libros disponibles:");
for (Libro libro : libros) {
if ([Link]()) {
[Link]();
}
}
}
}
63
Introducción a la orientación de objetos ConclusióndelBloque:Introducciónalaorientaciónaobjetos
Clase Principal:
64
Introducción a la orientación de objetos ConclusióndelBloque:Introducciónalaorientaciónaobjetos
4. Test de Evaluación
1. ¿Qué principio de la orientación a objetos permite reutilizar atributos y métodos en una subclase?
a) Polimorfismo
b) Herencia
c) Encapsulación
d) Abstracción
4. ¿Qué modificador de visibilidad restringe el acceso a los atributos solo dentro de la clase?
a) public
b) private
c) protected
d) default
1. b): La herencia permite que una subclase reutilice atributos y métodos de su superclase.
2. a): En la composición, los objetos tienen ciclos de vida dependientes.
3. b): El encapsulamiento protege los datos internos y asegura su integridad.
4. b): El modificador private restringe el acceso a los atributos únicamente dentro de la clase.
5. b): La sobreescritura permite implementar métodos heredados de manera específica en una subclase.
65