Orientación a Objetos en Java
Clases y Objetos
La orientación a objetos es un paradigma de programación que utiliza clases y objetos. Una clase es una plantilla para crear objetos, y un objeto es una instancia de una clase. Veamos un ejemplo simple:
// Definición de una clase
public class Persona {
// Atributos
String nombre;
int edad;
// Método constructor
public Persona(String nombre, int edad) {
this.nombre = nombre;
this.edad = edad;
}
// Método
public void saludar() {
System.out.println("Hola, soy " + nombre + " y tengo " + edad + " años.");
}
}
// Creación de un objeto
Persona persona1 = new Persona("Juan", 30);
persona1.saludar();
Herencia, Polimorfismo, Encapsulamiento
Herencia
La herencia permite que una clase herede atributos y métodos de otra clase. Esto promueve la reutilización del código. Ejemplo:
// Clase base
public class Animal {
String nombre;
public Animal(String nombre) {
this.nombre = nombre;
}
public void comer() {
System.out.println(nombre + " está comiendo.");
}
}
// Clase derivada
public class Perro extends Animal {
public Perro(String nombre) {
super(nombre);
}
public void ladrar() {
System.out.println(nombre + " está ladrando.");
}
}
// Creación de un objeto derivado
Perro miPerro = new Perro("Buddy");
miPerro.comer();
miPerro.ladrar();
Polimorfismo
El polimorfismo permite que una clase se comporte de varias formas. Esto se logra mediante el uso de interfaces y clases abstractas. Ejemplo:
// Interfaz
public interface Sonido {
void hacerSonido();
}
// Clase que implementa la interfaz
public class Gato implements Sonido {
public void hacerSonido() {
System.out.println("El gato maulla.");
}
}
// Clase que también implementa la interfaz
public class Pajaro implements Sonido {
public void hacerSonido() {
System.out.println("El pájaro canta.");
}
}
// Uso del polimorfismo
Sonido miAnimal = new Gato();
miAnimal.hacerSonido();
miAnimal = new Pajaro();
miAnimal.hacerSonido();
Encapsulamiento
El encapsulamiento protege los detalles internos de una clase y permite acceder a ellos solo a través de métodos. Ejemplo:
public class CuentaBancaria {
private double saldo;
public CuentaBancaria(double saldoInicial) {
this.saldo = saldoInicial;
}
public void depositar(double cantidad) {
saldo += cantidad;
}
public void retirar(double cantidad) {
if (cantidad <= saldo) {
saldo -= cantidad;
} else {
System.out.println("Saldo insuficiente.");
}
}
public double obtenerSaldo() {
return saldo;
}
}
// Uso del encapsulamiento
CuentaBancaria cuenta = new CuentaBancaria(1000);
cuenta.depositar(500);
cuenta.retirar(200);
double saldoActual = cuenta.obtenerSaldo();
System.out.println("Saldo actual: " + saldoActual);
Interfaces y Clases Abstractas
Interfaces
Una interfaz define un conjunto de métodos que una clase debe implementar. Ejemplo:
// Interfaz
public interface Volador {
void despegar();
void volar();
void aterrizar();
}
// Clase que implementa la interfaz
public class Avion implements Volador {
public void despegar() {
System.out.println("El avión despega.");
}
public void volar() {
System.out.println("El avión vuela.");
}
public void aterrizar() {
System.out.println("El avión aterriza.");
}
}
// Uso de la interfaz
Volador miAvion = new Avion();
miAvion.despegar();
miAvion.volar();
miAvion.aterrizar();
Clases Abstractas
Una clase abstracta es similar a una interfaz, pero puede contener implementaciones de métodos. Ejemplo:
// Clase abstracta
public abstract class Figura {
abstract double calcularArea();
void mostrar() {
System.out.println("Esta es una figura.");
}
}
// Clase que extiende la clase abstracta
public class Cuadrado extends Figura {
double lado;
public Cuadrado(double lado) {
this.lado = lado;
}
public double calcularArea() {
return lado * lado;
}
}
// Uso de la clase abstracta
Figura miFigura = new Cuadrado(5);
double areaCuadrado = miFigura.calcularArea();
miFigura.mostrar();
System.out.println("Área del cuadrado: " + areaCuadrado);
Modificadores de Acceso
Los modificadores de acceso controlan el nivel de visibilidad de clases, variables y métodos. Los principales son public
, private
y protected
.
// Ejemplo de uso de modificadores de acceso
public class EjemploAcceso {
public String mensajePublico = "Este mensaje es público";
private String mensajePrivado = "Este mensaje es privado";
protected String mensajeProtegido = "Este mensaje es protegido";
// Métodos con distintos modificadores de acceso
public void mostrarMensajePublico() {
System.out.println(mensajePublico);
}
private void mostrarMensajePrivado() {
System.out.println(mensajePrivado);
}
protected void mostrarMensajeProtegido() {
System.out.println(mensajeProtegido);
}
}
// Uso de la clase con modificadores de acceso
EjemploAcceso ejemplo = new EjemploAcceso();
ejemplo.mostrarMensajePublico();
// ejemplo.mostrarMensajePrivado(); // Esto dará un error, ya que el método es privado.
ejemplo.mostrarMensajeProtegido();
No hay comentarios:
Publicar un comentario