Professional Documents
Culture Documents
Índice
La programación orientada a objetos (POO) ... 2
Un ejemplo: una clase Punto ... 4
Curso de Java
Programas orientados a objetos ... 7
Otro ejemplo: una clase Circulo ... 9
Encadenamiento de mensajes ... 10
Los atributos ... 12
Programación orientada
Los objetos ... 13
Herencia ... 14
a objetos en Java
Herencia y pasos de mensajes ... 20
Polimorfismo y vinculación dinámica ... 21
Relaciones entre clases ... 25
POO y reutilización ... 26
...
El lenguaje Java — Tema 3 — POO en Java
Luis Hernández Yáñez
Curso de Java Tema 3 – POO en Java - 1
Carlos Cervigón Rückauer
Una nueva forma de ver las cosas 9 La definición de los ejemplares (estado y comportamiento)
Se puede decir que la POO es la programación con TAD (tipos se encuentra en la clase.
abstractos de datos) más una serie de mecanismos adicionales. 9 Las clases encapsulan código y datos.
Dejando aparte esos otros mecanismos, podemos establecer 9 Los ejemplares de las clases son los objetos.
un paralelismo entre los TAD y la POO: 9 La clase define atributos (datos) y métodos (operaciones).
Programación con TAD POO 9 Vista externa de una clase (su interfaz):
Nombre y forma de uso de sus métodos.
Definición TAD Clase 9 Los atributos han de ocultarse (ocultamiento de la información).
Estado Datos Atributos 9 Cada objeto (ejemplar) contiene su propio conjunto de atributos.
9 Cada método declarado en la clase constituye un servicio que
Comportamiento Operaciones Métodos proporcionan todos los objetos de esa clase.
Ejemplares Variables Objetos 9 Todos los objetos de una misma clase proporcionan los mismos
servicios (tienen un mismo comportamiento).
Los objetos de una clase entienden tantos mensajes como métodos Un programa orientado a objetos está compuesto por:
estén definidos en la clase (mismo comportamiento). 9 Un conjunto de clases que describen los objetos
A los objetos de clase Punto se les puede pasar cinco mensajes: que maneja la aplicación.
9 x() 9 Un programa principal que pone en marcha
9 y() el mecanismo de paso de mensajes: el método main().
9 x(double)
9 y(double) public class PruebaPunto {
9 print() public static void main(String[] args) {
Paso de mensajes: Punto unPunto = new Punto();
unPunto.x(2);
objeto . mensaje (argumentos) unPunto.y(7); Pasos de mensajes
unPunto.print();
Cuando se pasa un mensaje a un objeto se busca en la clase un
System.out.println();
método que coincida con el mensaje (nombre y argumentos):
}
Si se encuentra tal método, se ejecuta el código de ese método. }
Si no se encuentra tal método: el objeto no entiende el mensaje. PruebaPunto.java
Como hemos visto, los atributos pueden ser: En los programas orientados a objetos se pueden distinguir
9 Datos elementales (de tipos incorporados en el lenguaje). distintos objetos, atendiendo a su existencia y su uso:
Herencia Herencia
La herencia es un mecanismo fundamental de la POO que no se Cuando hacemos que una nueva clase sea subclase de otra,
encuentra en anteriores enfoques de programación. la nueva clase automáticamente adopta (hereda) los atributos
La herencia fomenta la reutilización. y los métodos que están definidos en la existente (superclase).
Así, ahora la clase Elipse también tiene definidos
Supongamos que necesitamos una clase para elipses.
dos atributos y cinco métodos.
Las elipses son básicamente círculos con otro radio más
Atributos: _centro y _radio
(por ejemplo, el radio mayor).
Métodos: centro(), radio(), centro(Punto),
Podemos entonces aprovechar la clase Circulo ya existente radio(double) y print()
y hacer que la nueva clase que necesitamos herede las
características (atributos y métodos) de aquella:
Dentro de la declaración propia de la subclase se describen las
public class Elipse extends Circulo { Circulo diferencias existentes respecto de la subclase:
... 9 Nuevas características (atributos/métodos).
Decimos que la clase Elipse 9 Redefinición de características heredadas.
Elipse
hereda (es subclase) de la clase Circulo.
Herencia Herencia
Características de la nueva clase Elipse (subclase de Circulo): Las relaciones de herencia entre clases se pueden representar en
forma de árbol (invertido), obteniéndose una representación gráfica
9 Atributos: de la jerarquía de clases:
_centro heredado
_radio heredado ObjetoGrafico
_radioMayor propio
El polimorfismo nos lleva a otro mecanismo fundamental En los programas orientados a objetos se establecen dos tipos de
de la POO: la vinculación dinámica. relaciones entre las clases:
Circulo unCirculo; Elipse unaElipse;
9 Relación de herencia:
Circulo c; int opcion;
// ...
una clase es descendiente de otra clase.
if(opcion == 1) c = unCirculo; 9 Relación de clientelismo:
else c = unaElipse; una clase hace uso de otra clase.
c.print(); (Por ejemplo, porque declara algún atributo
¿Qué método print() se ejecutará? como objeto de la otra clase.)
¿El de la clase Circulo o el de la clase Elipse? Si en un programa se necesita una clase de una biblioteca,
No podemos saberlo hasta que se ejecute el programa. habrá que incluir esa clase junto con todas aquellas con las que
tenga establecidas relaciones de herencia y clientelismo.
El mensaje print() no se vincula con el método print()
correspondiente hasta que le llegue el momento de ejecutarse.
La vinculación entre mensajes y métodos se lleva a cabo
en tiempo de ejecución ⇒ vinculación dinámica.
Una de las características más relevantes de la POO es que fomenta La reutilización debe tenerse siempre presente durante la
la reutilización del software, reduciendo significativamente los programación orientada a objetos de un sistema.
costes del desarrollo de programas. Siempre que se pueda usar una clase existente, obviamente se
Las clases, por sí mismas, son módulos de programa reutilizables: preferirá reutilizar la clase antes que crear otra nueva.
Siempre que se necesite una determinada funcionalidad y ésta Siempre que haya que crear una nueva clase (por no existir ninguna
pueda ser proporcionada por una clase existente, se usará ésa. que resulte adecuada), se buscarán primero clases existentes que
Pero la POO lleva la reutilización a otro nivel: tengan bastantes similitudes con la que se ha de crear.
¿Qué pasa si se necesita una funcionalidad que ninguna clase Si se encuentra alguna con suficientes similitudes, se hará que
existente proporciona tal cual, pero que es parecida a la que la nueva clase sea subclase suya. De esta forma se aprovechan
proporciona alguna clase existente? (reutilizan) las características ya desarrolladas en la clase existente.
La herencia es la clave en este caso: se crea una nueva clase a ¿Cómo de similar debe ser la clase que se necesita
partir de esa cuya funcionalidad es parecida a la que se necesita. respecto de la clase ya existente?
De esta forma, se reutiliza todo lo que es adecuado de esa clase y Todas o casi todas las características deben ser adecuadas.
el desarrollo se centra únicamente en las diferencias. Se necesitarán algunas más y/o cambiar algunas pocas.
La experiencia aquí es la mejor ayuda.
Luis Hernández Yáñez Luis Hernández Yáñez
Curso de Java Tema 3 – POO en Java - 26 Curso de Java Tema 3 – POO en Java - 27
Carlos Cervigón Rückauer Carlos Cervigón Rückauer