Guía de oposiciones · Bloque III · Tema 18 · Actualizada a agosto de 2026
Este tema se aprueba distinguiendo parejas que suenan igual: sobrecarga y sobrescritura, agregación y composición, Composite y Decorator. El tribunal casi nunca pide una definición suelta — coloca la definición de una al lado del nombre de la otra y espera que piques. Ha caído en 2023, 2024 y 2026. Aquí tienes los cuatro pilares, las relaciones con su notación, los patrones que caen, UML, tres preguntas reales resueltas y el esquema de memorización.
Los cuatro pilares, y la diferencia entre clase y objeto
La programación orientada a objetos modela el software como objetos que colaboran enviándose mensajes. Dos definiciones que conviene tener afiladas: la clase es el molde que define atributos y métodos; el objeto es una instancia de ese molde, con estado (sus atributos), comportamiento (sus métodos) e identidad propia.
| Pilar | Qué es |
|---|---|
| Abstracción | Quedarse con lo esencial de un objeto e ignorar los detalles irrelevantes |
| Encapsulación | Ocultar el estado interno y exponerlo solo mediante métodos (private, protected, public) |
| Herencia | Una clase deriva de otra reutilizando atributos y métodos · relación «es un» |
| Polimorfismo | Un mismo mensaje produce distinta respuesta según el objeto que lo recibe |
La regla para no perderlos: A-E-H-P. Y si dudas entre clase y objeto, piensa en el molde y la pieza fundida en él.
El programa pide también las ventajas e inconvenientes, así que conviene poder recitarlas. A favor: reutilización del código, modularidad y bajo acoplamiento, mantenimiento y extensión más fáciles, y que modela mejor el mundo real. En contra: mayor curva de aprendizaje, más consumo de memoria y rendimiento que el código procedimental, riesgo de sobrediseño, y que no siempre es el paradigma idóneo.
Sobrecarga y sobrescritura: el cruce que más cae
Primero la herencia. Una subclase hereda atributos y métodos de una superclase y puede añadir los suyos: es la relación de generalización y especialización. La herencia múltiple —varias superclases— la admite C++; Java y C# no, y lo suplen con interfaces. Una clase abstracta no se puede instanciar.
Y ahora la pareja que el tribunal cruza sin piedad. Las dos hablan de métodos con el mismo nombre; lo que cambia es qué pasa con los parámetros.
| Sobrecarga (overloading) | Sobrescritura (overriding) | |
|---|---|---|
| Qué es | Varios métodos con el mismo nombre y distinta lista de parámetros | Una subclase redefine un método heredado con la misma firma |
| Dónde | En la misma clase | Entre superclase y subclase |
| Cuándo se resuelve | En compilación · ligadura estática | En ejecución · ligadura dinámica → polimorfismo |
El truco para no fallar: si los parámetros cambian, es sobrecarga —le cargas variantes al método—. Si los parámetros son los mismos y se redefine en la hija, es sobrescritura. En 2026 lo preguntaron por este lado y en 2023 por el contrario.
Hay un tercer distractor: la ocultación de atributos (field hiding), que es cuando una subclase declara un atributo con el mismo nombre que uno de la superclase. Va de campos, no de métodos.
Relaciones entre clases: el rombo blanco y el negro
Cómo se conectan las clases en un diagrama. Aquí la pregunta suele ser de notación o de definición cruzada.
| Relación | Significado · notación UML |
|---|---|
| Asociación | Vínculo semántico entre instancias de dos clases · línea simple |
| Agregación | «Todo-parte» débil: la parte puede existir sin el todo · rombo blanco |
| Composición | «Todo-parte» fuerte: el todo controla el ciclo de vida de la parte · rombo negro |
| Generalización | Herencia «es un» · flecha con triángulo hueco hacia la superclase |
| Dependencia | Una clase usa a otra puntualmente · flecha discontinua |
| Realización | Una clase implementa una interfaz · triángulo hueco con línea discontinua |
La forma de recordar el rombo: el negro es el fuerte, el que «se lo traga todo» — si muere el todo, mueren las partes. El blanco es el flojo: las partes sobreviven. La multiplicidad indica cuántas instancias participan en cada extremo: 1, 0..1, 0..*, 1..*.
En 2024 preguntaron la generalización con su definición exacta —«la subclase hereda las propiedades, el comportamiento y las relaciones de la superclase, a la vez que puede añadir las suyas propias»— y pusieron de distractores las definiciones de la asociación y de la agregación. Cuidado con no confundir esta agregación de clases con la del modelo entidad-relación, que usa las mismas palabras para modelar datos: eso lo tienes en la guía de bases de datos y modelo relacional.
Patrones: GRASP y los 23 de la Gang of Four
Un patrón de diseño es una solución general y reutilizable a un problema de diseño recurrente. Dos familias caen:
- GRASP (General Responsibility Assignment Software Patterns): patrones para asignar responsabilidades a las clases — Experto, Creador, Controlador, Bajo Acoplamiento, Alta Cohesión, Polimorfismo, Indirección. Si la pregunta dice «asignación de responsabilidades», la respuesta es GRASP.
- GoF (Gang of Four): los 23 patrones clásicos, repartidos en tres categorías.
| Categoría | Para qué · ejemplos |
|---|---|
| Creacionales | Crear objetos: Singleton (una única instancia), Factory Method, Abstract Factory, Builder, Prototype |
| Estructurales | Componer clases y objetos: Adapter, Composite, Decorator, Facade, Proxy, Bridge, Flyweight |
| De comportamiento | Interacción y responsabilidades, son 11: Observer, Strategy, Command, Iterator, Chain of Responsibility, Template Method, State, Mediator, Memento, Visitor, Interpreter |
De los 23 solo caen cuatro o cinco, y siempre por su definición:
- Adapter (estructural): envuelve un objeto para que una interfaz incompatible encaje con otra. Es la respuesta cuando el enunciado habla de reutilizar una librería ya compilada.
- Composite (estructural): compone objetos en estructuras de árbol todo-parte y trata igual a los simples y a los compuestos gracias a una interfaz común.
- Decorator (estructural): añade responsabilidades a un objeto de forma dinámica y transparente, sin afectar a los demás.
- Observer (comportamiento): notifica automáticamente a varios objetos los cambios de estado de un sujeto, con acoplamiento débil.
- Singleton (creacional): garantiza una sola instancia de una clase.
La trampa a marcar en rojo: Composite y Decorator son los dos estructurales que el tribunal intercambia. Si lees «añadir responsabilidades de manera dinámica y transparente», eso es el Decorator — aunque la pregunta esté hablando del Composite. Así cayó en 2024, como opción incorrecta.
UML: qué modela, y en qué versión va
UML (Unified Modeling Language) es el lenguaje de modelado gráfico estándar, mantenido por el OMG, para especificar, visualizar, construir y documentar sistemas software. Es independiente de la metodología y del lenguaje de programación, se basa en la orientación a objetos y —esto es lo que preguntan— modela tanto la estructura estática como el comportamiento dinámico.
Esa última frase es la clave de la pregunta de 2024: la opción incorrecta decía que UML «muestra únicamente el modelado estático». Cualquier enunciado con «únicamente» aplicado a UML es falso. Y la versión vigente es UML 2.5, con la revisión de mantenimiento 2.5.1: no existe una UML 3.0, por mucho que la pongan de opción.
| Grupo | Diagramas · para qué |
|---|---|
| Estructurales (estáticos) |
Clases (clases, atributos y relaciones), objetos, componentes (división en componentes y sus dependencias), despliegue (el hardware), paquetes, estructura compuesta, perfiles |
| De comportamiento (dinámicos) |
Casos de uso (funcionalidad vista por el actor), actividad, máquina de estados, y los de interacción: secuencia (mensajes en el tiempo), comunicación, tiempos y visión general |
Los tres diagramas que se cruzan en el examen: clases es la estructura estática con atributos y métodos; componentes son las piezas software y sus dependencias; despliegue es el hardware y dónde se ejecuta cada cosa. Para «un escenario concreto de un caso de uso» se usa un diagrama de interacción, típicamente el de secuencia.
Todo esto se lleva a código en las plataformas empresariales: si quieres ver dónde aterrizan las clases, las interfaces y los patrones, está la guía de Java EE, Jakarta EE y la plataforma .NET.
Esquema de memorización
Los datos que se repiten convocatoria tras convocatoria, en una tabla para el repaso de última hora.
| Dato | Valor |
|---|---|
| Pilares de la POO | Abstracción · Encapsulación · Herencia · Polimorfismo |
| Clase / objeto | Molde / instancia (estado + comportamiento + identidad) |
| Sobrecarga | Mismo nombre, distintos parámetros · se resuelve en compilación |
| Sobrescritura | Método heredado, misma firma · se resuelve en ejecución → polimorfismo |
| Ocultación de atributos | Mismo nombre de atributo en la subclase · no va de métodos |
| Herencia múltiple | C++ sí · Java y C# no (usan interfaces) |
| Generalización | Herencia «es un»: la subclase hereda y añade |
| Agregación / composición | Todo-parte débil, rombo blanco / fuerte, rombo negro |
| GRASP | Patrones de asignación de responsabilidades |
| GoF | 23 patrones: creacionales · estructurales · de comportamiento |
| Adapter | Estructural · reutilizar una interfaz incompatible o una librería compilada |
| Composite vs Decorator | Árbol todo-parte / añadir responsabilidades dinámicas |
| Observer | Comportamiento · notifica a varios · acoplamiento débil |
| Singleton | Creacional · una única instancia |
| UML | Del OMG · estático y dinámico · versión 2.5 · no existe 3.0 |
| Diagrama de componentes | Componentes software y sus dependencias |
| Diagrama de despliegue | El hardware y dónde se ejecuta cada cosa |
| Diagrama de secuencia | Mensajes entre objetos en el tiempo |
Tres preguntas reales de examen
De los exámenes oficiales, con la respuesta de la plantilla del INAP. En los apuntes completos hay nueve de este tema, resueltas y razonadas.
En una arquitectura de herencia simple, si una subclase define un método con la misma lista de parámetros que un método de su superclase para especializar su comportamiento, ¿qué concepto se está aplicando?
- Sobrecarga (Overloading).
- Ocultación de atributos (Field Hiding).
- Sobrescritura (Overriding).
- Agregación (Aggregating).
Ver solución
Señale la respuesta INCORRECTA. El patrón de diseño «Composite»:
- Es un patrón de diseño estructural que permite componer objetos en estructuras de árbol.
- Sirve para construir objetos complejos a partir de otros más simples y similares entre sí.
- Simplifica el tratamiento de los objetos creados que, al poseer de una interfaz común, se tratan todos de la misma manera.
- Se recomienda su uso cuando se quiere añadir responsabilidades a objetos concretos de manera dinámica y transparente y sin afectar a otros objetos.
Ver solución
¿Qué patrón de diseño de comportamiento se utiliza para notificar automáticamente a múltiples objetos sobre los cambios de estado de un sujeto, manteniendo un acoplamiento débil?
- Singleton.
- Observer.
- Adapter.
- Factory Method.
Ver solución
Preguntas frecuentes
¿Qué diferencia hay entre agregación y composición en UML?
Las dos son relaciones «todo-parte», y lo que cambia es la fuerza del vínculo. En la agregación la parte puede existir sin el todo: si desaparece el todo, la parte sigue viva. Se dibuja con un rombo blanco. En la composición el todo controla el ciclo de vida de la parte: si desaparece el todo, desaparecen las partes. Se dibuja con un rombo negro.
¿Qué diferencia hay entre sobrecarga y sobrescritura?
La sobrecarga (overloading) son varios métodos con el mismo nombre y distinta lista de parámetros, y se resuelve en tiempo de compilación. La sobrescritura (overriding) es una subclase que redefine un método heredado con la misma firma, y se resuelve en tiempo de ejecución — es el mecanismo que da el polimorfismo. Regla rápida: si cambian los parámetros, sobrecarga; si son idénticos, sobrescritura.
¿Qué diferencia hay entre los patrones GRASP y los GoF?
GRASP son principios para decidir a qué clase le toca cada responsabilidad al diseñar: Experto, Creador, Controlador, Bajo Acoplamiento, Alta Cohesión. GoF son los 23 patrones concretos del catálogo de la Gang of Four, agrupados en creacionales, estructurales y de comportamiento. GRASP orienta el diseño; GoF da soluciones ya montadas. Si el enunciado dice «asignación de responsabilidades», la respuesta es GRASP.
¿Cuál es la última versión de UML y qué modela?
La versión vigente es UML 2.5, con la revisión de mantenimiento 2.5.1; no existe una versión 3.0. Y modela las dos vistas: la estructura estática —diagramas de clases, componentes, despliegue— y el comportamiento dinámico —casos de uso, actividad, estados, secuencia—. Cualquier afirmación que diga que UML modela «únicamente» lo estático es falsa.