La Programación Orientada a Objetos (POO) es una metodología esencial en el desarrollo de software que organiza el código en clases y objetos. Esta guía proporciona una serie de ejercicios básicos para introducirte en los principios fundamentales de la POO en Java, tales como encapsulamiento, herencia, polimorfismo y abstracción.
Conceptos Básicos de POO
1. Clases y Objetos
Una clase es una plantilla que define las propiedades y comportamientos comunes de los objetos. Un objeto es una instancia de una clase.
2. Encapsulamiento
El encapsulamiento es el principio que restringe el acceso directo a ciertos componentes de un objeto, lo que se logra utilizando modificadores de acceso como private
, protected
y public
.
3. Herencia
La herencia permite que una clase (subclase) herede atributos y métodos de otra clase (superclase), promoviendo la reutilización del código.
4. Polimorfismo
El polimorfismo permite que una interfaz se implemente de múltiples formas, permitiendo que un mismo método se comporte de diferentes maneras según el objeto que lo invoque.
5. Abstracción
La abstracción consiste en ocultar los detalles de implementación y mostrar solo la funcionalidad esencial de los objetos.
Ejercicios Prácticos
Ejercicio 1: Clase Persona
- Crea una clase
Persona
con atributosnombre
,edad
ydireccion
. - Agrega métodos para establecer y obtener estos atributos.
- Implementa un método para mostrar los detalles de la persona.
Solución:
public class Persona {
private String nombre;
private int edad;
private String direccion;
public String getNombre() {
return nombre;
}
public void setNombre(String nombre) {
this.nombre = nombre;
}
public int getEdad() {
return edad;
}
public void setEdad(int edad) {
this.edad = edad;
}
public String getDireccion() {
return direccion;
}
public void setDireccion(String direccion) {
this.direccion = direccion;
}
public void mostrarDetalles() {
System.out.println("Nombre: " + nombre);
System.out.println("Edad: " + edad);
System.out.println("Dirección: " + direccion);
}
public static void main(String[] args) {
Persona persona = new Persona();
persona.setNombre("Juan");
persona.setEdad(25);
persona.setDireccion("Calle Falsa 123");
persona.mostrarDetalles();
}
}
Ejercicio 2: Herencia con la Clase Estudiante
- Crea una clase
Estudiante
que herede dePersona
. - Agrega un atributo
matricula
y métodos para establecer y obtener este atributo. - Sobrescribe el método
mostrarDetalles
para incluir la matrícula.
Solución:
public class Estudiante extends Persona {
private String matricula;
public String getMatricula() {
return matricula;
}
public void setMatricula(String matricula) {
this.matricula = matricula;
}
@Override
public void mostrarDetalles() {
super.mostrarDetalles();
System.out.println("Matrícula: " + matricula);
}
public static void main(String[] args) {
Estudiante estudiante = new Estudiante();
estudiante.setNombre("Ana");
estudiante.setEdad(22);
estudiante.setDireccion("Avenida Siempre Viva 742");
estudiante.setMatricula("20210001");
estudiante.mostrarDetalles();
}
}
Ejercicio 3: Polimorfismo con Animales
- Crea una clase base
Animal
con un métodohacerSonido
. - Crea las clases
Perro
yGato
que extiendan deAnimal
e implementen el métodohacerSonido
. - Demuestra el uso de polimorfismo en el método principal.
Solución:
class Animal {
void hacerSonido() {
System.out.println("El animal hace un sonido");
}
}
class Perro extends Animal {
@Override
void hacerSonido() {
System.out.println("El perro ladra");
}
}
class Gato extends Animal {
@Override
void hacerSonido() {
System.out.println("El gato maúlla");
}
}
public class PolimorfismoEjemplo {
public static void main(String[] args) {
Animal miAnimal1 = new Perro();
Animal miAnimal2 = new Gato();
miAnimal1.hacerSonido(); // Salida: El perro ladra
miAnimal2.hacerSonido(); // Salida: El gato maúlla
}
}
Ejercicio 4: Abstracción con Formas Geométricas
- Crea una clase abstracta
Forma
con un método abstractocalcularArea
. - Crea las clases
Circulo
yRectangulo
que extiendan deForma
e implementencalcularArea
. - Implementa una clase principal para demostrar la funcionalidad.
Solución:
abstract class Forma {
abstract double calcularArea();
}
class Circulo extends Forma {
private double radio;
public Circulo(double radio) {
this.radio = radio;
}
@Override
double calcularArea() {
return Math.PI * radio * radio;
}
}
class Rectangulo extends Forma {
private double largo;
private double ancho;
public Rectangulo(double largo, double ancho) {
this.largo = largo;
this.ancho = ancho;
}
@Override
double calcularArea() {
return largo * ancho;
}
}
public class AbstraccionEjemplo {
public static void main(String[] args) {
Forma circulo = new Circulo(5.0);
Forma rectangulo = new Rectangulo(4.0, 6.0);
System.out.println("Área del círculo: " + circulo.calcularArea());
System.out.println("Área del rectángulo: " + rectangulo.calcularArea());
}
}
Ejercicio 5: Manejo de Colecciones con ArrayList
- Crea una clase
Libro
con atributostitulo
,autor
yisbn
. - Utiliza un
ArrayList
para gestionar una colección de libros. - Implementa métodos para agregar, eliminar y listar libros.
Solución:
import java.util.ArrayList;
class Libro {
private String titulo;
private String autor;
private String isbn;
public Libro(String titulo, String autor, String isbn) {
this.titulo = titulo;
this.autor = autor;
this.isbn = isbn;
}
public String getTitulo() {
return titulo;
}
public String getAutor() {
return autor;
}
public String getIsbn() {
return isbn;
}
@Override
public String toString() {
return "Libro [titulo=" + titulo + ", autor=" + autor + ", isbn=" + isbn + "]";
}
}
public class GestionLibros {
private ArrayList<Libro> libros;
public GestionLibros() {
libros = new ArrayList<>();
}
public void agregarLibro(Libro libro) {
libros.add(libro);
}
public void eliminarLibro(String isbn) {
libros.removeIf(libro -> libro.getIsbn().equals(isbn));
}
public void listarLibros() {
for (Libro libro : libros) {
System.out.println(libro);
}
}
public static void main(String[] args) {
GestionLibros gestion = new GestionLibros();
Libro libro1 = new Libro("El Quijote", "Miguel de Cervantes", "12345");
Libro libro2 = new Libro("Cien Años de Soledad", "Gabriel García Márquez", "67890");
gestion.agregarLibro(libro1);
gestion.agregarLibro(libro2);
System.out.println("Lista de libros:");
gestion.listarLibros();
gestion.eliminarLibro("12345");
System.out.println("Lista de libros después de eliminar:");
gestion.listarLibros();
}
}
Conclusión
Estos ejercicios básicos de POO en Java te proporcionarán una base sólida para comprender y aplicar los principios fundamentales de la Programación Orientada a Objetos. Practicar estos conceptos te permitirá escribir código más modular, reutilizable y mantenible, mejorando así tus habilidades de programación y preparándote para desafíos más avanzados.
Gracias por visitar mi blog de informática, mi nombre es Tomás y soy formador y desarrollador web. Si quiere usted dejarme alguna sugerencia, ayuda o quiere un servicio de formación estoy escuchando ofertas en tomas.gonzalez@infogonzalez.com, en Facebook a https://www.facebook.com/Infogonzalez estoy deseando escucharle. Su duda o sugerencia NO molesta.