Introducción A La Programación Orientada A Objetos PDF
Introducción A La Programación Orientada A Objetos PDF
Evolución
Años 60 Simula
Resolución de problemas de simulación
© Ole-Johan Dahl & Krysten Nygaard (Noruega)
Años 70 Smalltalk
Entorno de programación entendible por “novatos”
© Alan Kay (Xerox PARC, Palo Alto, California)
Años 80 C++
Extensión de C
© Bjarne Stroustroup (AT&T Bell Labs)
Años 90 Java
“Write once, run everywhere”
© Sun Microsystems
Conceptos básicos
• Todo es un objeto
• Los objetos se comunican entre sí pasándose mensajes
• Cada objeto tiene un estado
(contiene su propia memoria [datos])
• Un objeto es un caso particular (instancia) de una clase
• Las clases definen el comportamiento de un conjunto de objetos
Problema
Quiero enviar un paquete a un amigo que vive en otra ciudad
Opciones
a) Hacerlo todo yo mismo
˜ Descomposición en subproblemas
(programación estructurada)
b) Delegar en alguien para que lo haga (p.ej. Correos)
˜ “Realizar un encargo”
(programación orientada a objetos)
Consecuencias
Clase
Implementación de un tipo de dato.
Objeto
Instancia de una clase:
Unidad atómica que encapsula estado y comportamiento.
• Todos los objetos son instancias de una clase: Los objetos se crean
por instanciación de las clases.
Las diferentes instancias de cada clase difieren entre sí por los valores
de los datos que encapsulan (sus atributos).
Dos objetos con los mismos valores en sus atributos pueden ser
diferentes.
TODOS los objetos de una misma clase usan el mismo algoritmo como
respuesta a mensajes similares.
Errores comunes
‘}’ expected
Ejemplos
^
2 errors
El primer error se produce porque el identificador de la clase no es
válido y el segundo error es consecuencia del anterior.
Identidad
La identidad de un objeto lo identifica unívocamente:
- Es independiente de su estado.
- No cambia durante la vida del objeto.
Estado
El estado de un objeto viene dado por los valores de sus atributos.
- Cada atributo toma un valor en un dominio concreto.
- El estado de un objeto evoluciona con el tiempo
- Los atributos de un objeto no deberían ser manipulables
directamente por el resto de objetos del sistema (ocultamiento de
información):
o Se protegen los datos de accesos indebidos.
o Se distingue entre interfaz e implementación.
o Se facilita el mantenimiento del sistema.
Ejemplo
Un avión no puede aterrizar (acción) si no está en vuelo (estado)
Definición en Java:
Fichero Motocicleta.java
// Operaciones (métodos)
public void arrancar ()
{ … }
public void acelerar ()
{ … }
public void frenar ()
{ … }
public void girar (float angulo)
{ … }
}
objeto.miembro
objeto.atributo
objeto.método(lista de parámetros)
cuenta.ingresar(150.00);
System.out.println(“Mensaje”);
Observaciones
- Se suele crear una clase aparte, que únicamente contenga un
método main, como punto de entrada de la aplicación.
- En la implementación del método main se crean los objetos que
sean necesarios y se les envían mensajes para indicarles lo que
deseamos que hagan.
// Variables de instancia
private double balance = 0;
private double limit = LIMITE_NORMAL;
// Métodos
...
}
// Variables de instancia
private double balance;
private double limit;
// Métodos
...
}
// Variables de instancia
private double balance;
private double limit;
// Métodos
...
}
O bien
Sin embargo,
cuando declaramos una variable de un tipo no primitivo en Java,
lo único que hacemos es reservar una zona en memoria
donde se almacenará una referencia a un objeto del tipo especificado
(y no el objeto en sí, de ahí la necesidad de utilizar el operador new).
IMPORTANTE
Para acceder a un miembro de un objeto
(leer el valor de una variable de instancia o invocar un método)
hemos de tener una referencia a un objeto distinta de null
int x = 100;
int y = 200;
int tmp;
x = tmp; // Se almacena en x
// el valor original de y (200)
MUY IMPORTANTE
Asociación unidireccional
Asociación bidireccional
OOP – Introducción: Java - 24 - © Fernando Berzal
equivale a
class Cuenta
{
private Dinero balance;
con la salvedad de
que el enlace bidireccional hemos de mantenerlo nosotros
Multiplicidad Significado
1 Uno y sólo uno
0..1 Cero o uno
N..M Desde N hasta M
* Cero o varios
0..* Cero o varios
1..* Uno o varios (al menos uno)
Relaciones involutivas
Cuando la misma clase aparece en los dos extremos de la asociación.
Gráficamente,
se muestran como asociaciones con un rombo en uno de los extremos.
Agregación
Las partes pueden formar parte de distintos agregados.
Composición
Agregación disjunta y estricta:
Las partes sólo existen asociadas al compuesto
(sólo se accede a ellas a través del compuesto)
Ejemplo
Resolución de una ecuación de segundo grado
− b ± b 2 − 4ac
x=
2a
Para resolver una ecuación de segundo grado hemos
de recurrir a la función sqrt de la clase Math
para calcular una raíz cuadrada.
NOTA:
La clase Math es una clase “degenerada” que no tiene
estado. Es, simplemente, una colección de funciones
de cálculo matemático.
Generalización y especialización
expresan relaciones de inclusión entre conjuntos.
En el diagrama de clases,
los atributos, métodos y relaciones de una clase se muestran en el nivel
más alto de la jerarquía en el que son aplicables.
juan.nombre = “Juan”;
carlos.nombre = “Carlos”;
silvia.nombre = “Silvia”;
juan.padre = carlos;
juan.madre = silvia;
carlos.hijos.add(juan);
silvia.hijos.add(juan);
juan.padre = carlos;
juan.madre = carlos;
silvia.hijos.add(juan);
juan.hijos.add(juan);
import java.util.ArrayList;
// Constructores públicos
public Persona (String nombre)
{
this.nombre = nombre;
}
public Persona
(String nombre, Persona padre, Persona madre)
{
this.nombre = nombre;
this.padre = padre;
this.madre = madre;
padre.addHijo(this);
madre.addHijo(this);
}
// Métodos públicos
// p.ej. Acceso a las variables de instancia
Ejemplo
Persona carlos = new Persona(“Carlos”);
Persona silvia = new Persona(“Silvia”);
Persona juan = new Persona(“Juan”,carlos,silvia);
Odell
Meyer
Shlaer-Mellor UML
Harel
Gamma et. al.
Embly Wirfs-Brock
Fusion
Inconvenientes de UML
- Falta de integración con otras técnicas
(p.ej. diseño de interfaces de usuario)
- UML es excesivamente complejo (y no está del todo libre de
ambigüedades): “el 80% de los problemas puede modelarse
usando alrededor del 20% de UML”
OOP – Introducción: Java - 39 - © Fernando Berzal
Diagramas de clases
Muestran un conjunto de clases y sus relaciones
Atributos
[visibilidad] nombre [multiplicidad] [: tipo [= valor_por_defecto]]
Operaciones
[visibilidad] nombre ([[in|out] parámetro : tipo [, …]])[:tipo_devuelto]
NOTA:
Los identificadores subrayados indican que se trata de objetos.
OOP – Introducción: Java - 41 - © Fernando Berzal
Diagramas de interacción
Muestran una interacción concreta: un conjunto de objetos y sus
relaciones, junto con los mensajes que se envían entre ellos.
Diagramas de secuencia
Resaltan la ordenación temporal de los mensajes que se intercambian.
prestar(video, socio)
verificar situación socio
registrar préstamo
entregar recibo
:Video
5: entregar recibo
: Encargado 4: registrar préstamo
:Préstamo
Diagramas de secuencia
Muestran la secuencia de mensajes entre objetos durante un escenario
concreto (paso de mensajes).
- En la parte superior aparecen los objetos que intervienen.
- La dimensión temporal se indica verticalmente
(el tiempo transcurre hacia abajo).
- Las líneas verticales indican el período de vida de cada objeto.
- El paso de mensajes se indica con flechas horizontales u oblicuas
(cando existe demora entre el envío y la atención del mensaje).
- La realización de una acción se indica con rectángulos sobre las
líneas de actividad del objeto que realiza la acción.
Diagramas de comunicación/colaboración
La distribución de los objetos en el diagrama permite observar
adecuadamente la interacción de un objeto con respecto de los demás
C aso de U so
Actor
- Diagramas de estados
(estados y transiciones entre estados),
contratar
en el paro en ac tivo
perder em pleo
jubilarse
jubil arse
jub ilado
Request
service
Take order
Play
Fill order
Deliver order
Collect
order
- Diagramas de despliegue
(nodos de procesamiento y componentes)
Configuración del sistema en tiempo de ejecución
<<Cliente>> <<Servidor>>
Terminal Punto <<TCP/IP>>
Base de
de Venta Datos
<<RDSI>>
<<LAN>>
Páginas web
http://www.uml.org/
Página oficial de UML, uno de los estándares promovidos por el OMG.
http://www.cetus-links.org/oo_uml.html
Colección de enlaces relacionados con UML.
http://www.agilemodeling.com/essays/umlDiagrams.htm
Información práctica acerca de todos los diagramas UML 2
http://www.ootips.org/
Ideas clave en programación orientada a objetos.
Libros
Robert C. Martin:
“Agile Software Development: Principles, Patterns, and Practices”
Prentice-Hall, 2003. ISBN 0135974445
* se matricula en
1..* Calificación
Asignatura
Profesor
ID Grupo
impartida en enseña NRP
Nombre
ID Nombre
Créditos
1 1..* Tipo * 1..* Categoría
Carácter
Área 1
Curso
*
asignada a *
Día pertenece a dirige
Hora
* 1
Aula Departamento 1
ID ID
Capacidad Nombre
Nota: CLASES ASOCIACIÓN
Las clases asociación (como “se matricula en”) se emplean para indicar que la
asociación existente entre dos clases tiene atributos propios:
Ejemplo
class Cliente
…
class Pelicula
…
class Alquiler
{
private Cliente cliente;
private Pelicula peli;
private DateTime fecha;
public Alquiler
(Cliente cliente, Pelicula peli, DateTime fecha)
{
this.cliente = cliente;
this.peli = peli;
this.fecha = fecha;
}
…
}