Académique Documents
Professionnel Documents
Culture Documents
Evolucin
Aos 60
Simula
Resolucin de problemas de simulacin
Ole-Johan Dahl & Krysten Nygaard (Noruega)
Aos 70
Smalltalk
Entorno de programacin entendible por novatos
Alan Kay (Xerox PARC, Palo Alto, California)
Aos 80
C++
Extensin de C
Bjarne Stroustroup (AT&T Bell Labs)
Aos 90
Java
Write once, run everywhere
Sun Microsystems
Conceptos bsicos
Todo es un objeto
Los objetos se comunican entre s pasndose 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
-1-
Fernando Berzal
-2-
Fernando Berzal
Clases y objetos
Clase
Implementacin de un tipo de dato.
Una clase sirve tanto de mdulo como de tipo
- Tipo:
- Mdulo:
Objeto
Instancia de una clase:
Unidad atmica que encapsula estado y comportamiento.
Un objeto puede caracterizar una entidad fsica (un telfono, un
interruptor, un cliente) o una entidad abstracta (un nmero, una
fecha, una ecuacin matemtica).
Todos los objetos son instancias de una clase: Los objetos se crean
por instanciacin de las clases.
Todos los objetos de una misma clase (p.ej. coches) comparten
ciertas caractersticas: sus atributos (tamao, peso, color, potencia
del motor) y el comportamiento que exhiben (aceleran, frenan,
curvan).
-3-
Fernando Berzal
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.
El algoritmo empleado como respuesta a un mensaje (esto es, el mtodo
invocado) viene determinado por la clase del receptor.
-4-
Fernando Berzal
Clases en Java
Cada clase en Java:
Se define en un fichero independiente con extensin .java.
Se carga en memoria cuando se necesita.
La mquina virtual Java determina en cada momento las clases
necesarias para la aplicacin y las carga en memoria.
El programa puede ampliarse dinmicamente (sin tener que recompilar):
La aplicacin no es un bloque monoltico de cdigo.
-5-
Fernando Berzal
Errores comunes
Cuando el nombre de la clase no coincide con el nombre del
fichero, el compilador nos da el siguiente error:
Public class MiClase must be defined
in a file called MiClase.java
-6-
Fernando Berzal
-7-
Fernando Berzal
-8-
Fernando Berzal
Identidad
La identidad de un objeto lo identifica unvocamente:
- 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 deberan ser manipulables
directamente por el resto de objetos del sistema (ocultamiento de
informacin):
o Se protegen los datos de accesos indebidos.
o Se distingue entre interfaz e implementacin.
o Se facilita el mantenimiento del sistema.
Interfaz vs. implementacin
Los objetos se comunican a travs de interfaces bien
definidas sin tener que conocer los detalles internos de
implementacin de los dems objetos.
Ejemplo: Un coche se puede conducir
- Sin saber exactamente de qu partes consta el
motor ni cmo funciona ste (implementacin).
- Basta con saber manejar el volante,
el acelerador y el freno (interfaz).
OOP Introduccin: Java
-9-
Fernando Berzal
Comportamiento
Los mtodos que definen el comportamiento de un objeto:
- Agrupan las competencias del objeto (responsabilidades)
- Describen sus acciones y reacciones.
Las acciones realizadas por un objeto son consecuencia
directa de un estmulo externo (un mensaje enviado desde otro
objeto) y dependen del estado del objeto.
- 10 -
Fernando Berzal
// Saldo
// Lmite
- 11 -
Fernando Berzal
- 12 -
Fernando Berzal
Clase de ejemplo
Representacin grfica en UML:
Definicin en Java:
Fichero Motocicleta.java
// Placa de matrcula
// Color de la pintura
- 13 -
Fernando Berzal
Uso de objetos
El operador .
El operador . (punto) en Java
nos permite acceder a los distintos miembros de una clase:
objeto.miembro
- 14 -
Fernando Berzal
Ejemplos
cuenta.ingresar(150.00);
System.out.println(Mensaje);
- 15 -
Fernando Berzal
Creacin de objetos
Antes de poder usar un objeto hemos de crearlo
El operador new
El operador new nos permite crear objetos en Java.
Tipo identificador = new Tipo();
Observaciones
- Se suele crear una clase aparte, que nicamente contenga un
mtodo main, como punto de entrada de la aplicacin.
- En la implementacin del mtodo main se crean los objetos que
sean necesarios y se les envan mensajes para indicarles lo que
deseamos que hagan.
OOP Introduccin: Java
- 16 -
Fernando Berzal
Constructores
Cuando utilizamos el operador new acompaado del nombre de una
clase, se crea un objeto del tipo especificado (una instancia de la clase
cuyo nombre aparece al lado de new).
Al crear un objeto de una clase concreta, se invoca a un mtodo especial
de esa clase, denominado constructor, que es el que se encarga de
inicializar el estado del objeto.
- 17 -
Fernando Berzal
- 18 -
Fernando Berzal
O bien
Cuenta cuentaVIP = new Cuenta(6000.00);
- 19 -
Fernando Berzal
}
}
OOP Introduccin: Java
- 20 -
Fernando Berzal
Referencias
Cualquier tipo que definamos en Java con una clase
es un tipo no primitivo.
Cuando declaramos una variable de un tipo primitivo en Java, estamos
reservando espacio en memoria para almacenar
un valor del tipo correspondiente.
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 mtodo)
hemos de tener una referencia a un objeto distinta de null
- 21 -
Fernando Berzal
// La variable temporal
// almacena el valor inicial de y
y = x;
x = tmp;
// Se almacena en x
// el valor original de y (200)
// Copia la referencia
tmp.ingresar(150);
// Se hace un ingreso en
//
miCuenta !!!
MUY IMPORTANTE
En una sentencia de asignacin,
no se crea una copia del dato representado por un objeto
(salvo que trabajemos con tipos primitivos)
OOP Introduccin: Java
- 22 -
Fernando Berzal
- 23 -
Fernando Berzal
Asociacin
Una asociacin es una relacin estructural
que describe una conexin entre objetos.
Asociacin unidireccional
Asociacin bidireccional
OOP Introduccin: Java
- 24 -
Fernando Berzal
equivale a
class Cuenta
{
private Dinero balance;
public void ingresar (Dinero cantidad)
{
balance += cantidad;
}
public void retirar (Dinero cantidad)
{
balance -= cantidad;
}
public Dinero getSaldo ()
{
return balance;
}
}
- 25 -
Fernando Berzal
con la salvedad de
que el enlace bidireccional hemos de mantenerlo nosotros
}
public class Cliente
{
- 26 -
Fernando Berzal
Multiplicidad
1
0..1
N..M
*
0..*
1..*
Significado
Uno y slo uno
Cero o uno
Desde N hasta M
Cero o varios
Cero o varios
Uno o varios (al menos uno)
- 27 -
Fernando Berzal
dirige
Profesor
Departamento
0..1
Relacin opcional
Un cliente puede o no
ser titular de una cuenta
Relacin obligatoria
Una cuenta ha de tener
un titular como mnimo
Relaciones involutivas
Cuando la misma clase aparece en los dos extremos de la asociacin.
- 28 -
Fernando Berzal
Agregacin y composicin
Casos particulares de asociaciones:
Relacin entre un todo y sus partes
Grficamente,
se muestran como asociaciones con un rombo en uno de los extremos.
Agregacin
Las partes pueden formar parte de distintos agregados.
Composicin
Agregacin disjunta y estricta:
Las partes slo existen asociadas al compuesto
(slo se accede a ellas a travs del compuesto)
- 29 -
Fernando Berzal
Dependencia
Relacin (ms dbil que una asociacin) que muestra la relacin entre
un cliente y el proveedor de un servicio usado por el cliente.
- Cliente es el objeto que solicita un servicio.
- Servidor es el objeto que provee el servicio solicitado.
Ejemplo
Resolucin de una ecuacin de segundo grado
b b 2 4ac
x=
2a
Para resolver una ecuacin de segundo grado hemos
de recurrir a la funcin sqrt de la clase Math
para calcular una raz cuadrada.
NOTA:
La clase Math es una clase degenerada que no tiene
estado. Es, simplemente, una coleccin de funciones
de clculo matemtico.
OOP Introduccin: Java
- 30 -
Fernando Berzal
- 31 -
Fernando Berzal
Instancias:
coches vehculos
Propiedades:
propiedades(coches) propiedades(vehculos)
- 32 -
Fernando Berzal
Jerarquas de clases
En el diagrama de clases,
los atributos, mtodos y relaciones de una clase se muestran en el nivel
ms alto de la jerarqua en el que son aplicables.
- 33 -
Fernando Berzal
Visibilidad
de los miembros de una clase
Se pueden establecer distintos niveles de encapsulacin
para los miembros de una clase (atributos y operaciones)
en funcin de desde dnde queremos que se pueda acceder a ellos:
Visibilidad
Pblica
Protegida
Privada
Significado
Se puede acceder al
miembro de la clase
desde cualquier lugar.
Slo se puede acceder
al miembro de la clase
desde la propia clase o
desde una clase que
herede de ella.
Slo se puede acceder
al miembro de la clase
desde la propia clase.
Java
UML
public
protected
private
- 34 -
Fernando Berzal
Diseo incorrecto
- 35 -
Fernando Berzal
Diseo correcto
import java.util.ArrayList;
public class Persona
{
// Variables de instancia privadas
private String nombre;
private Persona padre;
private Persona madre;
private ArrayList hijos = new ArrayList();
// Constructores pblicos
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);
}
OOP Introduccin: Java
- 36 -
Fernando Berzal
// Mtodo privado
private void addHijo (Persona hijo)
{
hijos.add(hijo);
}
// Mtodos pblicos
// p.ej. Acceso a las variables de instancia
public void setNombre (String nombre)
{
this.nombre = nombre;
}
public String getNombre ()
{
return nombre;
}
// Cambio de nombre
- 37 -
Fernando Berzal