Tema 1: Programación Orientada a Objetos en
Java
Apuntes de Ingeniería de Software
Agosto 2026
Página 1: Conceptos Fundamentales
La Programación Orientada a Objetos (POO) es un paradigma que utiliza "objetos" para diseñar
aplicaciones. Un objeto encapsula datos y comportamientos. En Java, todo gira en torno a las clases,
que son los moldes o plantillas a partir de los cuales se instancian los objetos.
Por ejemplo, si pensamos en un tablero virtual, una pieza no es solo una variable, es una entidad con un
estado (color, posición) y un comportamiento (mover, capturar).
public class Pieza {
String color;
String tipo;
public void mover(int x, int y) {
[Link]("Moviendo " + tipo + " a " + x + "," + y);
}
}
Página 2: Encapsulamiento
El encapsulamiento es el principio de ocultar el estado interno de un objeto y requerir que toda
interacción se realice a través de los métodos de dicho objeto. Esto se logra mediante modificadores de
acceso.
• private: Solo accesible dentro de la propia clase.
• public: Accesible desde cualquier lugar.
• protected: Accesible en el mismo paquete y subclases.
public class Jugador {
private int elo;
private String username;
public int getElo() {
return elo;
}
public void setElo(int elo) {
if (elo > 0) {
[Link] = elo;
}
}
}
Página 3: Herencia
La herencia permite que una clase derive de otra, heredando sus atributos y métodos. En Java se utiliza
la palabra reservada extends. Esto fomenta la reutilización de código y establece relaciones lógicas
("es un tipo de").
public class Peon extends Pieza {
boolean primerMovimiento = true;
public void coronar() {
[Link]("El peón se ha convertido en Reina.");
}
}
Página 4: Polimorfismo
El polimorfismo permite que una misma llamada a un método tenga comportamientos distintos
dependiendo del objeto que lo ejecute. Se manifiesta principalmente de dos formas: Sobrecarga (mismo
método, distintos parámetros) y Sobrescritura (@Override, mismo método, distinta implementación en
la clase hija).
@Override
public void mover(int x, int y) {
// Lógica específica para el movimiento en L del Caballo
[Link]("El caballo salta a " + x + "," + y);
}
Página 5: Abstracción e Interfaces
Las interfaces definen un contrato. No implementan comportamiento (hasta Java 8 con métodos
default), solo definen qué métodos deben existir. Una clase puede implementar múltiples interfaces
usando implements, superando la limitación de herencia simple de Java.
public interface Movible {
boolean validarMovimiento(int x, int y);
}
public class Rey extends Pieza implements Movible {
@Override
public boolean validarMovimiento(int x, int y) {
return [Link](this.x - x) <= 1 && [Link](this.y - y) <= 1;
}
}