You are on page 1of 57

CURSO

Programacin Orientada a Objetos


Parte 1

Fundamentos de
Programacin Orientada a Objetos

Ignacio Zahonero Martnez, Luis Joyanes Aguilar

Orientacin a Objetos
La O.O. es el conjunto de disciplinas(ingeniera) que desarrollan y modelizan software para facilitar la
construccin de sistemas complejos a partir de componentes.
El atractivo de la O.O. es que proporciona conceptos y herramientas con las cuales se modela y representa
el
mundo real tan fielmente como sea posible.
La orientacin a objetos promete mejoras de amplio alcance en la forma de diseo, desarrollo y
mantenimiento del software ofreciendo una solucin a largo plazo a los problemas y preocupaciones que han
existido desde el comienzo en el desarrollo de software: la falta de portabilidad del cdigo y reusabilidad,
cdigo que es difcil de modificar ... .
Propiedades ms importantes del modelo:

Abstraccin (obtiene caractersticas esenciales de un objeto).


Encapsulamiento (asegura que la informacin de un objeto est oculta al mundo exterior).
Modularidad (divide la aplicacin en partes, mdulos, tan independientes como sea posible).
Jerarqua (ordenacin de las abstracciones, dos tipos: generalizacin/especializacin y agregacin).
Polimorfismo (mismo operacin desencadena acciones diferentes segn el objeto(s) que la realiza).

Curso de Programacin Orientada a Objetos en Java

Ignacio Zahonero Martnez


Luis Joyanes Aguilar
2

ABSTRACCIN
Cualidad de los seres humanos que les permite encontrar lo bsico que hay de comn en
una serie de objetos.
Es la generalizacin conceptual de un determinado conjunto de objeto, de sus
atributos y propiedades, dejando en un segundo trmino los detalles concretos de cada
objeto.
Definir una abstraccin significa describir una entidad del mundo real y, a continuacin,
utilizar esa descripcin en un programa.
Por ejemplo, una reserva es un objeto que tiene un estado (confirmada, lista de espera)
y sobre la que se pueden realizar operaciones (cancelar vuelo, asignar asiento, ...). La
reserva es una entidad del mundo real que se lleva a programacin como una clase.
El elemento clave de la P.O.O es la clase. Una clase es una descripcin abstracta de un
grupo de objetos. Por ejemplo, la clase Teatro describe el conjunto de objetos con
propiedades y caractersticas comunes (butacas, plantas, capacidad, ...). El teatro
Maravillas es un objeto de tipo Teatro que tiene un estado (tiene 200 butacas, ocupado al
60% ...) y sobre el que se pueden realizar operaciones.
Las tcnicas O.O son el el resultado de una progresin histrica que comienza con los
procedimientos, sigue con los mdulos, TAD y objetos.
Curso de Programacin Orientada a Objetos en Java

Ignacio Zahonero Martnez


Luis Joyanes Aguilar
3

ENCAPSULAMIENTO
La encapsulacin (ocultacin de informacin) es la propiedad que permite asegurar que
la informacin de un objeto (datos) est oculta al mundo exterior: el objeto A no conoce lo
que hace el objeto B, y viceversa. Es una de las propiedades caracterstica de la O.O.
La estructura interna de un objeto permanece oculta, tanto para el usuario como para
otros objetos diferentes.
El acceso a la informacin del objeto se hace slo a travs de los mtodos adecuados
(interfaz).
class Ventana
{
private Color color;
private int alto, ancho;
public void ampliar(int a, int b);
public int getAlto() { return alto; }
public setColor(Color nuevo)
{
color = nuevo;
}
...

Curso de Programacin Orientada a Objetos en Java

Ignacio Zahonero Martnez


Luis Joyanes Aguilar
4

MODULARIDAD

La modularidad es la propiedad que permite subdividir una aplicacin en


partes ms pequeas (mdulos), cada una de las cuales debe ser tan
independiente como sea posible de la aplicacin en s y de las restantes partes.
La modularizacin, como indica Liskov, consiste en dividir un programa en
mdulos que se puedan compilar por separado.
Los mdulos deben ser tan independientes como sea posible. Adems, las
conexiones entre mdulos deben seguir el criterio de ocultacin de informacin.
En C++ los mdulos son archivos compilados por separado (calendario.h ->
calendario.cpp).
En Java los mdulos son los paquetes (packages).

Curso de Programacin Orientada a Objetos en Java

Ignacio Zahonero Martnez


Luis Joyanes Aguilar
5

Jerarqua
La jerarqua es una propiedad que permite ordenar las abstracciones.
Las dos jerarquas ms importantes son: generalizacin/especializacin (" es un") y agregacin
("parte de").
Generalizacin/ especializacin. Relacin entre clases, en donde una clase comparte la
estructura o comportamiento definida en otra (otras) clases.

Agregacin. Agrupamiento fsico de estructuras relacionadas lgicamente. As, un objeto


expresin se compone de dos operandos y un operador. La expresin es la agregacin,
operandos y operador agregados(partes). Otro ejemplo, la cabina turista se compone de 110
asientos, de los cuales 25 son reclinables, y un aseo ... La cabina es la agregacin, asientos y
aseo las partes.

Curso de Programacin Orientada a Objetos en Java

Ignacio Zahonero Martnez


Luis Joyanes Aguilar
6

Polimorfismo
Literalmente, posibilidad de que una entidad tome muchas formas.
Propiedad que indica la posibilidad de referirse a objetos de clases diferentes
mediante un mismo elemento y realizar la misma operacin de diferentes formas, segn
sea el objeto que se referencia en ese momento.
El polimorfismo adquiere su mxima expresin en la derivacin de clases (herencia).
Por ejemplo, la clase Reserva representa distintos tipos de reservas (puede haber reservas de tren,
de avin, de hotel, ... ). Las operaciones cancelar, pagarTasa, ..., son fundamentales para el proceso.
Cada tipo de reserva debe poder realizar las operaciones anteriores. Por otra parte, la forma de
cancelar, o de pagar tasas es distinta para el transporte areo que para el hotel. En trminos de
POO: se puede enviar cualquier mensaje (cancelar, calcularTasas,...), las acciones que desencadene
sern diferentes segn el objeto receptor. Un mismo mensaje se comporta de forma diferente segn
la clase sobre la que se aplica.

El polimorfismo requiere ligadura tarda y esto slo se puede producir en lenguajes


de P.O.O.
Curso de Programacin Orientada a Objetos en Java

Ignacio Zahonero Martnez


Luis Joyanes Aguilar
7

CONCEPTOS FUNDAMENTALES DE POO


Definicin de POO por Grady Booch
un mtodo de implementacin en el que los programas se organizan como
colecciones cooperativas de objetos, cada uno de los cuales representa una
instancia de una clase, y cuyas clases son todas miembros de una jerarqua de
clases unidas mediante relaciones de herencia".
En esta definicin se pueden distinguir tres partes:
1. La POO utiliza objetos, no algoritmos (programacin estructurada), como
bloques de construccin lgica.
2. Cada objeto es una instancia de una clase.
3. Las clases se relacionan por medio de relaciones de herencia (realmente se
establecen ms tipos de relaciones).
Los conceptos fundamentales de programacin: objetos, clases, herencia,
mensajes y mtodos.
Curso de Programacin Orientada a Objetos en Java

Ignacio Zahonero Martnez


Luis Joyanes Aguilar
8

OBJETOS
Objeto: entidad que tiene atributos (datos) y formas de
comportamientos (procedimientos).
Un objeto combina en una sola unidad datos y funciones (mtodos)
que operan sobre esos datos.
Un objeto es una entidad fsica o lgica que exhibe tres
caractersticas principales: estado, comportamiento e identidad.
Ejemplo de Objeto: cajero automtico
Un cajero automtico tiene un estado, por ejemplo le quedan billetes de 50 o no, est
conectado o no, etc. Los datos actuales determinan el estado del cajero.
El cajero automtico tiene identidad. Dos cajeros fsicamente idnticos, en sitios distintos
son diferentes.
Un cajero automtico tiene un comportamiento predefinido que le permite interaccionar
con el mundo exterior. Por ejemplo, puede leer una tarjeta de crdito, imprimir el resumen
de un cartilla ... . Los usuarios slo necesitamos emplear su interfaz, es decir, su
comportamiento. Los detalles internos estn ocultos. Nos da igual saber las caractersticas
tcnicas del cajero, si funciona a pilas o a energa solar. El cajero encapsula su
implementacin, todo cambio en la misma es transparente para los usuarios.
Curso de Programacin Orientada a Objetos en Java

Ignacio Zahonero Martnez


Luis Joyanes Aguilar
9

Ejemplos de objetos

Cajero

Racional

Punto

- saldo: 400

- numerador: 3

- fecha:21/Sep/06

- denominador: 4

- coordY: 305

- decimal: 0.75

- nombre: Peral

+ sumar(Racional)

+ rotar()

+ mostrar()

+ colorear()

+ leerTarjeta()
+ validarNumero(int)
+ comprobarSaldo()

Curso de Programacin Orientada a Objetos en Java

- coordX: 2002

+ desplazar()

Ignacio Zahonero Martnez


Luis Joyanes Aguilar
10

CARACTERSTICAS DE UN OBJETO

Estado: queda definido por el valor asociado a sus atributos (datos).

Comportamiento: define su forma de interaccin con el mundo exterior, esto es, su interfaz.

Identidad: un objeto siempre tendr asociado un identificador que lo individualiza, de manera


que se pueda distinguir sin ambigedad entre objetos que se encuentren en el mismo estado y
exhiban el mismo comportamiento.

Dentro del contexto de un lenguaje orientado a objetos, un objeto encapsula datos y los
procedimientos/funciones (mtodos) que manejan esos datos.

Ejemplo: Un coche vendido por un comercial, el identificador del objeto es coche1. Los atributos
asociados pueden ser: nmero_matrcula, fabricante, precio_compra, precio_actual,
fecha_compra, color ...

Curso de Programacin Orientada a Objetos en Java

Ignacio Zahonero Martnez


Luis Joyanes Aguilar
11

OBJETOS(I)

Atributos: Datos o variables que caracterizan el estado de un objeto. El conjunto de atributos


apropiado para un objeto de determina mediante la comprensin del contexto del problema. Los
atributos para Alumno que sirven para la Facultad no sirven para el Departamento de deportes.

Mtodos: Procedimientos o acciones que cambian el estado de un objeto.

El objeto retiene cierta informacin y conoce cmo realizar ciertas operaciones. La encapsulacin
de operaciones e informacin es importante. Los mtodos de un objeto slo pueden manipular
directamente los datos asociados con ese objeto.

Si se desea modificar los datos de un objeto, se conoce exactamente cules son las funciones o
mtodos que interactan con el mismo.
Proyector uno = new Proyector(30, "Minerva");
uno.encender();
uno.darColor(red);

Curso de Programacin Orientada a Objetos en Java

// proyector de 30 kw

Ignacio Zahonero Martnez


Luis Joyanes Aguilar
12

OBJETOS(II)

Las funciones o mtodos que interactan con el objeto constituyen su interfaz.

Qu clase de cosas pueden ser objetos ?: la respuesta est solo limitada a nuestra
imaginacin. Todo depender del dominio del problema.

Objetos fsicos: climatizador, termmetro, coche... .


Animales: vertebrados, pescado_blanco ....
Elementos de interfaz grficos: ventana, men, ... .
Tipos de datos definidos por el usuario: punto de un sistema de coordenadas, rbol
de caracteres, ...
Interacciones: factura, compra, prstamo ...

Curso de Programacin Orientada a Objetos en Java

Ignacio Zahonero Martnez


Luis Joyanes Aguilar
13

OBJETOS(III)

Qu hay en un objeto?:
un objeto no es ms que un grupo de datos. pero no es una agrupacin pasiva de
datos, de las que simplemente se dejan manipular por los procedimientos, sino que un
objeto puede ser un grupo activo de datos. Un objeto puede ser un nmero, una
palabra, una hoja de clculo. Si es un nmero, puede hacer cosas como multiplicarse
por dos, calcular su inverso o multiplicarse por pi. El usuario utiliza estas funciones
transmitiendo un mensaje al objeto que le ordena ejecutar cierta accin. (Mark
Clarkson)

Los datos del objeto estn ocultos, eso asegura que no se puedan modificar
accidentalmente por funciones externas al objeto.

Curso de Programacin Orientada a Objetos en Java

Ignacio Zahonero Martnez


Luis Joyanes Aguilar
14

CLASES(I)

Una clase es la descripcin de las caractersticas de un conjunto de objetos.


Una clase consta de mtodos y datos que resumen caractersticas comunes del
conjunto de objetos.
Las clases son similares a los tipos de datos, equivalen a un tipo de datos objeto.
Una clase no tiene existencia real. Una instancia de una clase si tiene existencia real.
Cada vez que se construye un objeto a partir de una clase se est creando una
instancia de esa clase.
Un objeto se construye a partir de una clase, haciendo una instanciacin . En general,
instancia de una clase y objeto son trminos intercambiables.
class Socio
{ private String nombre;

Socio melito = new Socio("Juan Bao");

public void darAlta();


class Lampara
{
private int potencia;
private boolean solar;
public void darMasPot(int p)

Lampara c1 = new Lampara();


Lampara c2 = new Lampara();

Curso de Programacin Orientada a Objetos en Java

Ignacio Zahonero Martnez


Luis Joyanes Aguilar
15

CLASES(II)

Generalmente, una clase se define como una descripcin abstracta de un grupo de


objetos, cada uno de los cuales se diferencia por un estado especfico y es capaz de
realizar algunas operaciones.
Por ejemplo, la lmpara de mi mesa es un objeto que tiene un estado (encendida o
apagada) que puede realizar operaciones, por ejemplo iluminar, apagar, cambiar
bombilla si est rota.
En programacin, una clase es una estructura que contiene datos y procedimientos
(funciones, mtodos) que son capaces de operar sobre esos datos.
La clase Lmpara tiene una variable que representa la potencia, otra variable para la
intensidad, otra para si puede funcionar con energa solar. La clase tiene mtodos
(funciones) que operan o utilizan esas variables.
Dentro de un programa, las clases tienen dos propsitos principales: definir abstracciones
y favorecer la modularidad.
Por ejemplo, la clase Radio encapsula las caractersticas y comportamiento de ciertas
entidades del mundo real. El concepto abstracto de "Radio" no tiene existencia fsica,
mientras que mi radio Thomson es un objeto, una instancia, de la clase Radio s tiene
existencia fsica y dispone de las caractersticas de toda Radio, por ejemplo sintoniza una
emisora, se estropea, se queda sin pilas .... .

Curso de Programacin Orientada a Objetos en Java

Ignacio Zahonero Martnez


Luis Joyanes Aguilar
16

CARACTERSTICAS DE UNA CLASE

Abstraccin: extrae lo comn de un conjunto de objetos

Encapsulamiento de la informacin: la clase permite asegurar que el contenido de la


informacin de un objeto est oculta del mundo exterior.

Definicin rigurosa de la interfaz con el mundo exterior. El interfaz de una clase captura
slo su vista externa. Adems, la clase tiene una parte de implementacin que contiene
la representacin de la abstraccin, as como los mecanismos que realizan el
comportamiento deseado.

Tolerancia a los cambios de implementacin.

Flexibilidad y adaptabilidad.

Curso de Programacin Orientada a Objetos en Java

Ignacio Zahonero Martnez


Luis Joyanes Aguilar
17

CONSTRUCCIN DE CLASES
C++ es un lenguaje de programacin que permite tanto la programacin
estructurada como la programacin orientada a objetos. Con C++ se
implementa fcilmente todos los conceptos analizados.
Java es un lenguaje de programacin orientado a objetos que elimina las
cuestiones mas complicadas de C++, como por ejemplo los punteros. En Java
todo se construye a base de clases y objetos.
La creacin de un programa O.O requiere la construccin de una coleccin de
clases. Para ello ser necesario declarar y usar las clases.
La declaracin implica una descripcin de las funciones miembro (mtodos) y
datos miembro de la clase.
Un programa controlador ser el encargado de utilizar las clases

Curso de Programacin Orientada a Objetos en Java

Ignacio Zahonero Martnez


Luis Joyanes Aguilar
18

DECLARACIN DE CLASES
La declaracin (en Java) tiene el formato siguiente:
class Nombre
{
private ...
protected ...
public ...
//cuerpo de la clase
}

class NumerosRojos
{
private String numCuenta ="2345-g";
private Titular t;
private float saldo = 0.0;
public void enviarAviso() {
System.out.print("

");}

El cuerpo contiene las declaraciones de los miembros:


Miembros dato, se declaran como variables.
Miembros mtodo, se declaran y definen (implementan) en el cuerpo de la clase . En
C++ normalmente, su implementacin se sita en el exterior.
La clase encapsula sus miembros dato y funcin o mtodo. Ha de tener un mecanismo
para controlar el acceso a la misma

Curso de Programacin Orientada a Objetos en Java

Ignacio Zahonero Martnez


Luis Joyanes Aguilar
19

ENCAPSULAMIENTO EN LAS CLASES(I)

Un principio fundamental en programacin orientada a objetos es la ocultacin de la informacin,


que significa que determinados datos del interior de un objeto no se puede acceder por mtodos
externos a la clase.

El mecanismo fundamental para ocultar datos es ponerlos en una clase y hacerlos privados. A
estos datos o mtodos privados slo se accede desde dentro de la clase.

Los datos y mtodos pblicos son accesibles desde el exterior de la clase.


privado
datos o mtodos

pblico
accesibles desde el exterior

Curso de Programacin Orientada a Objetos en Java

mtodos

Ignacio Zahonero Martnez


Luis Joyanes Aguilar
20

ENCAPSULAMIENTO EN LAS CLASES(II)

La visibilidad de cada miembro de la clase depende del especificador de acceso que le afecta:
private, protrected y public.
class Autor

class Nombre_Clase
{
private miembro privado
protected miembro protegido
public miembro publico

{
private String nom = "Sin nombre";
private int codigo;
private Vector<Obra> v = new Vector<Obra>();
public void setNombre(String n) ...

Miembros privados: slo accesibles por mtodos miembro de la clase. Etiqueta private.

Miembros pblicos: accesibles desde cualquier parte del programa. Forman el interfaz a travs del
cual se utiliza el objeto. Etiqueta public.

Miembros protegidos: accesibles por los mtodos miembro de la clase y de las clases derivadas.
Etiqueta protected.

Por defecto, en Java, son accesibles desde la propia clase y por las clases del mismo package.
Curso de Programacin Orientada a Objetos en Java

Ignacio Zahonero Martnez


Luis Joyanes Aguilar
21

ENCAPSULAMIENTO EN LAS CLASES(III)

El uso del interfaz pblico ha de estar limitado a los mtodos miembro requeridos para manipular y
proveer informacin sobre las instancias creadas de la clase.

Los mtodos miembro de apoyo a los otros mtodos de la clase deben estar ocultos.

Los datos estarn ocultos al exterior de la clase. En general se incluyen en la seccin privada o protegida.

La clusula protected reduce el nivel de ocultacin, permitiendo que las clases derivadas accedan a los
miembros protegidos de la clase base.

Utilizar mtodos miembro para establecer y consultar los valores de los datos (mtodos set y get).

Para permitir el acceso a las clases descendientes, situar los datos en la seccin protegida ( protected).

class Planta

Planta una = new Planta(20,14);

{
protected int a, b;
public int getAncho() {
return a;

una.b = 12;

// error

una.setBase(12); // correcto

Curso de Programacin Orientada a Objetos en Java

Ignacio Zahonero Martnez


Luis Joyanes Aguilar
22

EJEMPLOS DE DECLARACIN DE CLASES


class Ventana

class Rectangulo

{
public void inicio(){...}

protected double base;

public void mover(int, int) {...}

protected double altura;

public char get() {...}

public void
dimension(double a, double h)

public char get(int x, int y) {...}


{

private void checkeoRango

base = a; altura = h;

(int a, int b) {...}


protected short alto, ancho;

protected Punto posicion;

public double area()

protected Punto inicioPantalla;

{
return base * altura;

}
}
}

Curso de Programacin Orientada a Objetos en Java

Ignacio Zahonero Martnez


Luis Joyanes Aguilar
23

DATOS MIEMBRO DE LA CLASE

La declaracin de los datos miembro (atributos) de una clase es de la misma forma que la
declaracin de variables.

En Java est permitida la inicializacin explcita de las variables que representan a los datos.

El constructor de la clase tiene como misin inicializar los datos miembro.

Un dato puede ser un objeto de otra clase (objetos compuestos).


class Persona
class Fecha { ...

};

class Dni { ... };

{
protected String nombre;
protected Fecha diaNac;
protected Dni idt;
protected char genero ='I';

Curso de Programacin Orientada a Objetos en Java

Ignacio Zahonero Martnez


Luis Joyanes Aguilar
24

MTODOS DE UNA CLASE


Son las funciones declaradas y definidas dentro del cuerpo de la clase.
Conceptualmente, los mtodos de una clase son el conjunto de operaciones que
pueden "manipular" objetos de la clase en las que han sido declaradas.
Los mtodos de una clase pueden acceder directamente a cualquier miembro dato o
a otro mtodo, pblico o no pblico, de su clase.
Un mtodo slo se puede sobrecargar a otro mtodo miembro de su propia clase.
Los mtodos utilizados para manipulacin interna de datos deben ser privados o
protegidos.
Los mtodos que describen el comportamiento, los definidos para entrada, o, en
general, de proceso sern pblicos.
class Racional {
public Racional suma (Racional r2) {...}
public Racional suma (int n) {...}
private void simplifica()

// mtodo interno

La sintaxis estndar para la llamada a un mtodo de una clase (enviar un mensaje):


nombre_objeto.nombre_mtodo(parmetros)
Curso de Programacin Orientada a Objetos en Java

Ignacio Zahonero Martnez


Luis Joyanes Aguilar
25

MTODOS Y MENSAJES
Un programa orientado a objetos consiste en un nmero de objetos que se
comunican unos con otros a travs del envo de mensajes.

Los mensajes relacionan unos objetos con


otros y con el mundo exterior.
En POO la accin se inicia por la transmisin de un
mensaje a un objeto. En respuesta al mensaje, el
receptor ejecutar algn mtodo.

Los mtodos son como los procedimientos. Un mtodo puede definirse como

un programa procedimental que est asociado a un objeto y cuya ejecucin slo


puede desencadenarse a travs de un mensaje recibido por ste o por sus
descendientes.
En C++, mtodo es una funcin miembro de una clase. En Java recibe el
mismo nombre, es decir, mtodo.
Un mensaje es la peticin a un objeto de que ejecute uno de sus mtodos. Los
componentes de un mensaje son el nombre del receptor, el mtodo invocado y
la informacin necesaria para ejecutar el mtodo.
Un mensaje equivale a una llamada a un mtodo o funcin miembro .
Curso de Programacin Orientada a Objetos en Java

Ignacio Zahonero Martnez


Luis Joyanes Aguilar
26

TIPOS DE OPERACIONES (MTODOS)

Operaciones gerente: se encargan de la inicializacin/destruccin y asignacin de objetos. Son los


mtodos miembro constructor/ destructor.

Operaciones de desarrollo. Representan el interfaz principal de la clase. Proporcionan los requisitos


funcionales. Por ejemplo, en la clase Cuenta retirar(); en la clase Ventana minimizar(), darColor(), ...
.

Operaciones de acceso. La ocultacin de informacin encapsula la representacin interna de los objetos de


la clase, protegiendo los datos de modificaciones aleatorias. Con las operaciones de acceso se permite
obtener informacin de ciertos atributos (son lo mtodos get(); por ejemplo, String getApellido()).
La operacin int altoV() de la clase Ventana, que devuelve el atributo alto, es una operacin de acceso.

Modificadores, permiten a un programa cliente cambiar los contenidos de los miembros dato. Por ejemplo,
de la clase Racional, void setNumerador(int n).

Iteradores, procesan collecciones de objetos, tales como listas, colas.

Operaciones de ayuda. Realizan tareas auxiliares necesarias para otras operaciones. El acceso est
restringido a la clase, son funciones privadas.

Operaciones de clculo. Realizan operaciones matemticas.

Curso de Programacin Orientada a Objetos en Java

Ignacio Zahonero Martnez


Luis Joyanes Aguilar
27

REPRESENTACIN DE UNA CLASE


Las notaciones para representar una clase y sus instancias vara
segn la metodologa. En UML (unified modeling language), una
clase se dibuja con un rectngulo dividido en tres bandas.

Curso de Programacin Orientada a Objetos en Java

Ignacio Zahonero Martnez


Luis Joyanes Aguilar
28

EJEMPLO DE DECLARACIN DE UNA CLASE


class Cuenta
{
protected double saldo;
public Cuenta()
{
saldo = 100.0;
}
public double saldoActual()
{
return saldo;
}
public void
depositar(double cantidad)
{

public
double retirar (double cuanto)
{
if (cuanto <= saldo)
{
saldo -= cuanto;
return cuanto;
}
else
return 0.0;
}

saldo += cantidad;
}

Curso de Programacin Orientada a Objetos en Java

Ignacio Zahonero Martnez


Luis Joyanes Aguilar
29

INSTANCIAS DE UNA CLASE: OBJETOS

Despus de definir una clase se puede declarar una instancia de esa clase.

Una variable de tipo clase no es un objeto. En Java se dice que es una referencia .
Lampara mp;
Racional r1;
Persona p1;
Ventana [] av = new Ventana[10];

// variable de tipo Lampara


// variable de tipo Racional
// variable de tipo Persona

En Java, las instancias de las clases se definen con el operador new seguido del nombre de la
clase y entre parntesis la informacin para inicializar el objeto.
Cuenta c1;
c1 = new Cuenta();
// El objeto Cuenta se referencia con c1
Racional r = new Racional(1,5); // objeto Racional inicializado a 1/5
cl.depositar(200.5);
// objeto cl enva mensaje depositar

Curso de Programacin Orientada a Objetos en Java

Ignacio Zahonero Martnez


Luis Joyanes Aguilar
30

CONSTRUCTORES DE UN OBJETO

Un constructor es el mecanismo que disponen las clase para inicializar los objetos.

El constructor se llama automticamente cuando se crea una instancia de la clase. Por ejemplo:
Ventana v1 = new Ventana(); // llama al constructor sin argumentos
Complex z1 = new Complex(-1.,1.);

El propsito de un constructor es inicializar los miembros dato (atributos o variables instancia).

El constructor es una mtodo de la clase, tiene el mismo nombre de la clase y no tiene tipo de
retorno. Formato general:
NombleClase(lista de argumentos)
{
...
}

El constructor puede estar sobrecargado, es decir, mas de un constructor con distintos argumentos.

Curso de Programacin Orientada a Objetos en Java

Ignacio Zahonero Martnez


Luis Joyanes Aguilar
31

EJEMPLOS DE CONSTRUCTORES(I)
class Circulo
{
private int x, y;
private double radio;
public Circulo(int x0, int y0, double r)
{
radio = r;
x = x0;
y = y0;
}
public Circulo(double r)
{
this(0, 0, r);
}

public Circulo()
{
this(0, 0, 1.0);
}
// instancias de Circulo
Circulo cc1 = new Circulo();
Circulo cc2 = new Circulo(3.0);
Circulo d;
d = new Circulo(-1, 1, 4.5);

Normalmente los constructores son pblicos. No tienen tipo de retorno.

Curso de Programacin Orientada a Objetos en Java

Ignacio Zahonero Martnez


Luis Joyanes Aguilar
32

EJEMPLOS DE CONSTRUCTORES(II)
class Asignatura
{
private int numCredito = 2;
private int curso = 1;
private String idt = " ";
public Asignatura(int c )
{
curso = c;
}
public Asignatura(int c, String d)
{
curso = c; idt = d;
}
public Asignatura(int c, String d,
int nc)
{
this(c, d);
numCredito = nc;
}

class VectorEntero
{
private int n, cap;
private int[] v;
public VectorEntero() { this(50); }
public VectorEntero(int t)
{
v = new int [cap = t];
n = -1;
}
public VectorEntero(int [] w)
{
cap = 2 * w.length;
v = new int [cap];
for (int i = 0; i < w.length; i++)
v[i] = w[i];
n = w.length;
}

Un constructor por defecto no tiene parmetros. Inicializa los miembros datos a valores por defecto

Curso de Programacin Orientada a Objetos en Java

Ignacio Zahonero Martnez


Luis Joyanes Aguilar
33

CONSTRUCTORES
Cuando se define un objeto (instanciacin), se pasan los valores de los parmetros al
constructor
utilizando una sintaxis similar a una llamada a un mtodo.
Por ejemplo, para crear una instancia del objeto Rectngulo:
Rectangulo r1 = new Rectangulo(15, 20);

// en Java

El operador new invoca automticamente al constructor del objeto que se crea.


A continuacin, se crean diferentes objetos Asignatura llamando a los constructores
sobrecargados de la clase:
Asignatura una = new Asignatura(2);
Asignatura dos = new Asignatura(1, "Fundamentos");
Asignatura trs = new Asignatura(3, "ADO", 4);
Ahora objetos de la coleccin VectorEntero:
VectorEntero v1 =
VectorEntero v2 =
int [] w = {2, 4,
VectorEntero v3 =

new VectorEntero(); // constructor por defecto


new VectorEntero(20);// capacidad 20 elementos
6, 8};
new VectorEntero(w); // inicializado a w

Curso de Programacin Orientada a Objetos en Java

Ignacio Zahonero Martnez


Luis Joyanes Aguilar
34

OBJETOS COMPUESTOS

Los objetos que contienen otros objetos se conocen como objetos compuestos.
Un ejemplo de un objeto compuesto es la clase Aula. Una aula consta de diversas partes,
tales como una Pizarra, una Tarima y 30(n) Pupitres. Estas partes constituyen los objetos
componentes del objeto Aula.
Cada objetos componente es un atributo del objeto compuesto. A su vez, los objetos
componentes tienen atributos y mtodos que los caracterizan.
Los objetos componentes tienen una relacin part-of (parte-de) o component-of
(componente-de) con el objetos compuesto, tambin se representa por has-a (tiene-un).
As, el Motor es parte de un Avin, la Bodega es parte del Avin,..., el piloto es parte del
avin?.
En la mayora de los sistemas los objetos no contienen en el sentido estricto otros objetos,
sino que contienen referencias a otros objetos. Esta caracterstica ofrece dos ventajas:
1.
2.

Los objetos contenidos pueden cambiar en tamao y composicin, sin afectar al objeto
compuesto que los contiene.
Los objetos contenidos estn libres para participar en cualquier nmero de objetos compuestos,
en lugar de estar bloqueados en un nico objeto compuesto.

Los objetos contenidos en objetos compuestos pueden por s mismo ser objetos
compuestos, dando lugar a una jerarqua de componentes-de.

Curso de Programacin Orientada a Objetos en Java

Ignacio Zahonero Martnez


Luis Joyanes Aguilar
35

OBJETOS COMPUESTOS(II)
Cuando se crea una instancia de un objeto compuesto, todos sus objetos componentes
se deben instanciar al mismo tiempo. Por esa razn, normalmente los argumentos del
constructor de objetos miembros se sitan en la declaracin de la clase que lo
contiene. Por ejemplo, suponer la relacin parte-de entre Tiempo y Panel:
class Tiempo

class Panel

{
private int h, m, s;

private String titulo;

public Tiempo(int _h, int _m, int _s)

private Tiempo t;

public Panel(String nomr)


h = _h; m = _m; s = _s;

{
titulo = nomr; t = new Tiempo();

System.out.println("Hora inicial: " + h +


":" + m + ":" + s);

}
public Panel(String n, int h, int m, int s)

}
public Tiempo(){ this(0,0,0); }

{
titulo = nomr; t = mew Tiemp(h, m, s)
}

Curso de Programacin Orientada a Objetos en Java

Ignacio Zahonero Martnez


Luis Joyanes Aguilar
36

COPIA Y DESTRUCCIN DE OBJETOS


Dos variables de tipo clase se pueden asignar. En Java, esta asignacin no supone
que se copien los objetos, simplemente se asignan las referencias.
Complex z1 = new Complex(2,-3);
Complex z2 = new Complex(3,1);
z2 = z1;

// z1 objeto inicializado a 2 3i
// z2 inicializado a 3 + i

// el objeto Complex(3,1) ya no es referenciado por z2,


// el objeto Complex(2,-3) se referencia(identifica) por z2 y z1

Un objeto que no est referenciado es candidato a ser "destruido" por el sistema


(garbage collection).
Color n1 = new Color("red");
Color n2 = new Color (10,30,20);
n1 = n2;
El objeto Color("red") deja de estar referenciado (identificado), puede ser liberado por el sistema.
n1 = null;

// null: palabra reservada; se utiliza para indicar referencia nula.

El objeto Color (10,30,20) deja de estar referenciado (identificado), puede ser liberado por el sistema.
Curso de Programacin Orientada a Objetos en Java

Ignacio Zahonero Martnez


Luis Joyanes Aguilar
37

AUTOREFERENCIA: THIS

Cmo reconoce un mtodo de una clase cul es la instancia que la llama ?. Suponer la clase Pila:
class Pila
{
public void meter(int x)
{
buffer[++cima] = x;
}

Pila p1 = new Pila();


Pila p2 = new Pila();
p1.meter(19);
p2.meter(29);

Cmo sabe meter() que buffer o cima es de la pila p1 o p2 ?

this es una palabra reservada especial, que se declara implcitamente para cada clase y tiene la
direccin del objeto que enva el mensaje (invoca al mtodo).
Siempre que se llama a un mtodo se pasa, implcitamente, this . De este modo el mtodo conoce el
objeto (la instancia) que llam. Los atributos o miembros dato estn referenciados, implcitamente, por
this

this se puede utilizar explcitamente para que un mtodo devuelva el el objeto que enva el mensaje:
return this;
Otro uso de this es para llamar desde un constructor a otro de la misma clase.
Curso de Programacin Orientada a Objetos en Java

Ignacio Zahonero Martnez


Luis Joyanes Aguilar
38

DIFERENCIA ENTRE CLASE Y OBJETO

Un objeto es un simple elemento, no importa los complejo que pueda ser.

Una clase describe a una familia de elementos similares.

En la prctica, una clase se asemeja a un esquema o plantilla, que se utiliza para crear objetos.

Una clase es un tipo definido que determina la estructura de datos y operaciones asociadas con ese
tipo.

A partir de una clase se pueden definir un nmero ilimitado de objetos. Cada uno de estos objetos
tendr un estado particular propio ( un objeto ventana puede estar minimizada, otra puede estar
dimensionada a mitad de pantalla, y otras caractersticas como su color), aunque compartan algunas
operaciones comunes (como ocultar).

Los datos internos de un objeto definen su estado actual.

Un objeto se comunica con otros objetos pasando mensajes.

Un objeto es una instancia de una clase.

Curso de Programacin Orientada a Objetos en Java

Ignacio Zahonero Martnez


Luis Joyanes Aguilar
39

UNA APLICACIN
Se declaran y definen dos clases Reloj y Presentar con la finalidad de mostrar el avance del tiempo.
El comportamiento de Presentar:

Escribir en pantalla el valor asociado.


Incrementar el valor cclicamente, dentro de un rango.
Establecer el lmite superior del rango. El lmite inferior ser siempre cero.

El comportamiento de Reloj:

Inicializar el dato (atributo) hora y el dato minuto.


Incrementar en 1 los minutos. Si llega a 60 minutos incrementar las horas.
Mostrar la hora y los minutos actuales.

Una vez definidas las clases Presentar y Reloj es preciso usar las mismas. Se escribe otra clase, se puede denominar clase principal,
con el mtodo main(). Este mtodo controla la creacin del objeto Reloj y simula su funcionamiento con un bucle.

Curso de Programacin Orientada a Objetos en Java

Ignacio Zahonero Martnez


Luis Joyanes Aguilar
40

CLASE PRESENTAR
class Presentar

return this;

}
private int limite, valor;

public int obtenValor()

public Presentar(int lim)

{ valor = 0;

return valor;

limite = lim;

public int obtenLimite()

public Presentar incr()

return limite;
valor++;

if (valor == limite) valor = 0;

public Presentar mostrar()

return this; //

objeto que enva el mensaje

if (valor < 10)

public Presentar ponValor(int v)

System.out.print ('0');

System.out.print(valor);
if (v < 0) v = -v;
valor = v % limite;//

return this;
rango 0 .. limite-1

}
}

Curso de Programacin Orientada a Objetos en Java

Ignacio Zahonero Martnez


Luis Joyanes Aguilar
41

CLASE RELOJ (I)


class Reloj

public Reloj() // construye objeto hora y minuto

{
private Presentar hora;

hora = new Presentar(24);

private Presentar minuto;

minuto = new Presentar(60);

private BufferedReader entrada = new

BufferedReader (new
InputStreamReader(System.in));

public Reloj incrementar()


{

private int entradaInt() throws Exception

minuto.incr();

if (minuto.obtenValor() == 0)
int q;

hora.incr();

q = Integer.parseInt(entrada.readLine());

return this;

return q;

// aumenta 1 minuto

Curso de Programacin Orientada a Objetos en Java

Ignacio Zahonero Martnez


Luis Joyanes Aguilar
42

CLASE RELOJ (II)


public Reloj fijar() throws Exception
public Reloj mostrar()

int inicio;
hora.mostrar();

System.out.println(

System.out.print(" : ");

"Fijar horas, entre 0 y " +

minuto.mostrar();

hora.obtenLimite() + ": ");

System.out.println();

inicio = entradaInt();

return this;

hora.ponValor(inicio);

System.out.println(
"Fijar minutos, entre 0 y " +
minuto.obtenLimite() + ": ");
inicio = entradaInt();
minuto.ponValor(inicio);
return this;
}
}

Curso de Programacin Orientada a Objetos en Java

Ignacio Zahonero Martnez


Luis Joyanes Aguilar
43

PROGRAMA QUE MANEJA RELOJ


// bucle de incremento del reloj

public class PruebaReloj

for (int i = 0; i < 60; i++)

static PrintStream salida = System.out;

t.incrementar();

public static void main(String[] args)

if (i % 6

throws Exception

== 0)

t.incrementar().mostrar();

Reloj t;
}

t = new Reloj();
}

salida.println("Valor inicial ");


}

t.mostrar();
t.mostrar().fijar(); // concatena mensajes
salida.print( "Tiempo de partida

");

t.mostrar();

Curso de Programacin Orientada a Objetos en Java

Ignacio Zahonero Martnez


Luis Joyanes Aguilar
44

Clase Nombre y clase Direccin


Disear una clase Nombre que contenga tres miembros dato (nombre,
primer apellido y segundo apellido), un constructor y dos mtodos,
leerNombre() y mostrar(). Realizar el diagrama de clases y la
implementacin en Java.
Escribir la clase Direccin que tome la informacin del nombre y
aada calle, ciudad, provincia y cdigo postal. Esta clase debe tener los
mtodos nuevaDireccin(), nuevoNombre() y mostrar().

Clase Nombre
Especificacin de atributos:
El conjunto de atributos significativos para la clase Nombre son los que permiten formar el
nombre
completo de una persona. Se puede aadir otro dato adicional para el alias (apodo), si es
que lo tiene.

Definicin de operaciones:
En el supuesto de la clase Nombre, las operaciones que se obtienen son las que permiten
modificar los
datos de un objeto de tipo Nombre. Estas son: asignarNom() (set), asignarApp1(),
asignarApp2(), y asignarAlias(). Otras operaciones de la clase son las que permiten
recuperar informacin, String getNom(), ..., String getNomCompleto() .

Curso de Programacin Orientada a Objetos en Java

Ignacio Zahonero Martnez


Luis Joyanes Aguilar
46

Clase Nombre
Diagrama de la clase:
En el diagrama se va a especificar los nombres de los atributos, el tipo y el nivel de
ocultacin, que ser
privado. Las operaciones tienen visibilidad pblica.
Nombre
- nombre : String
- appellido1 : String
- apellido2 : String
- alias : String

+ asignarNom()
+ asignarApel1()
+ asignarApel2()
+ asignarAlias()
+ getNomCompleto()

Curso de Programacin Orientada a Objetos en Java

Ignacio Zahonero Martnez


Luis Joyanes Aguilar
47

Clase Nombre
Implementacin utilizando Java
Se codifica la clase Nombre , segn est especificado el enunciado, y la clase principal para
crear
un objeto de Nombre y realizar operaciones (enviar mensajes ... ).
El archivo fuente con la clase debe tener el nombre de la clase y la extensin .java
Nombre.java
La clase principal define el mtodo main()), en este mtodo se ponen en marcha los objetos,
es decir se
crean objetos (operador new) y se envan mensajes. El nombre del archivo, en este
ejemplo, es:
PruebaNombre.java

Curso de Programacin Orientada a Objetos en Java

Ignacio Zahonero Martnez


Luis Joyanes Aguilar
48

Nombre.java
public class Nombre
{
private String nombre;
private String apellido1;
private String apellido2;
private String alias;
public Nombre()
{
nombre=apellido1=apellido2=alias= null;
}
public Nombre(String n)
{
this();
nombre = n;
}
public void asignarNom(String nm)
{
nombre = nm;
}
public void asignarApel1(String a1)
{
apellido1 = a1;
}
Curso de Programacin Orientada a Objetos en Java

// completar los mtodos


public String getNomCompleto()
{
String nmc;
if (nombre == null || apellido1 == null)
nmc = "ERROR, NO ESTA COMPLETO";
else
{
nmc = nombre + apellido1;
if (apellido2 != null)
nmc += apellido2;
}
return nmc;
}
public String toString()
{
return nombre + apellido1 + apellido2 +
"; Alias: " + alias;
}
}

Ignacio Zahonero Martnez


Luis Joyanes Aguilar
49

PruebaNombre.java
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
public class PruebaNombre
{
static BufferedReader en = new BufferedReader (new
InputStreamReader (System.in));
public static void main(String[]ar) throws Exception
{
Nombre miNombre;
Nombre tuNombre;
// ahora se crean dos objetos, llamando a cada
// uno de los constructores
miNombre = new Nombre("Ignacio");
miNombre.asignarApel1("Zahonero");
tuNombre = new Nombre();

System.out.println("Dame tu primer
apellido: ");
a = en.readLine();
tuNombre.asignarApel1(a);
// llamada a uno de los mtodos
System.out.println("Mi nombre: " +
miNombre.getNomCompleto());
System.out.println("Tu nombre: " +
tuNombre.getNomCompleto());
}
}

System.out.println("Dame tu nombre de pila: ");


String a = en.readLine();
tuNombre.asignarNom(a);

Curso de Programacin Orientada a Objetos en Java

Ignacio Zahonero Martnez


Luis Joyanes Aguilar
50

Clase Direccin
(seguir los mismos pasos, tener en cuenta que un atributo de esta clase es de
tipo Nombre)
Especificacin de atributos:

Definicin de operaciones:

Curso de Programacin Orientada a Objetos en Java

Ignacio Zahonero Martnez


Luis Joyanes Aguilar
51

EJEMPLO: CLASE
PUBLICACION
Una editorial de libros y discos desea crear fichas que almacenen el
ttulo y el precio de cada publicacin. Realizar el diagrama de la clase,
denominada Publicacin. Implementar la clase en Java con los datos
anteriores, un constructor y los mtodos leer(), mostrar().

Especificacin de atributos:
Para seleccionar el conjunto de atributos significativos para una clase, se debe contestar a la siguiente
pregunta: qu
elementos datos definen esta clase en el contexto del problema?
La lectura del supuesto (diapositiva anterior) nos indica que el precio y el ttulo son los elementos
datos que nos
interesa definir. Se pueden aadir otros de inters: fecha de la publicacin, editorial, autor y
nmero de
Definicin
de operaciones:
identificacin.
Las operaciones definen el comportamiento de un objeto. Estas se ejecutan al operar sobre los atributos
o asociaciones
con otras clases.
El primer paso que sigue el analista para obtener el conjunto de operaciones de una clase, consiste en
el simle anlisis
gramatical del documento aislando los verbos que aparezcan. Algunos de estos verbos sern operaciones
y podrn
conectarse a la clase especfica.
En nuestro ejemplo: la operacin asignarTitulo() (set) y asignarPrecio() (set) son de importancia
para dotar
de informacin al objeto. La operacin mostrar() aparece directamente, su finalidad es escribir en la
pantalla la
informacin guardada por el objeto. Otras operaciones de la clase son las que permiten recuperar
Curso de Programacin Orientada a Objetos en Java
Ignacio Zahonero Martnez
informacin,
Luis Joyanes Aguilar
String getAutor(), ... .
53

Diagrama de la clase:
En el diagrama se va a especificar los nombres de los atributos, el tipo y el nivel de
ocultacin, que ser
privado, o bien protegido debido a que de esta clase se pueden realizar especializaciones,
como Revista,
Libro, ... .
Publicacin
# titulo : String
# precio : double
-fechaEdi: Date
- editorial : String
- autor : String
- isbn : int

+ asignarPrecio()
+ asignarTitulo()
+ mostrar()
+ leer()
Curso de Programacin Orientada a Objetos en Java

Ignacio Zahonero Martnez


Luis Joyanes Aguilar
54

Implementacin utilizando Java


Se codifica la clase Publicacin , segn est especificado el enunciado, y la clase principal
para crear
un objeto de Publicacin y realizar operaciones (enviar mensajes ... ).
La clase dispone de un constructor para que al crear el objeto se inicialice el ttulo de la
publicacin con
la informacin (parmetro) suministrada. Se puede aadir otro constructor con el fin de
inicializar el ttulo
y el precio. Tambin es interesante ampliar los atributos y los mtodos de la clase, segn el
sencillo
anlisis realizado en diapositiva 3.
El archivo fuente con la clase debe tener el nombre de la clase y la extensin .java
Publicacion.java

Curso de Programacin Orientada a Objetos en Java

Ignacio Zahonero Martnez


Luis Joyanes Aguilar
55

Publicacion.java

public class Publicacion


{
protected String tit;
protected double precio;

public String toString()


{
return "Titulo: " + tit +
", precio ejemplar: " + precio;
}

public Publicacion(String t)
{
tit = t;
precio = 0.0;
}
public void setPrecio(double r)
{
precio = r;
}

Curso de Programacin Orientada a Objetos en Java

public void setTitulo(String t)


{
tit = t;
}
}

Ignacio Zahonero Martnez


Luis Joyanes Aguilar
56

PruebaPublicacion.java
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
public class PruebaPublicacion
{
static BufferedReader en = new BufferedReader (new
InputStreamReader (System.in));
public static void main(String[]a) throws Exception
{
Publicacion p;

static double entradaDouble()


throws IOException
{
double r;
String e;
e = en.readLine();
Double q;

System.out.println("Autor de la publicacion: ");


String t = en.readLine();

q = Double.valueOf(e);
r = q.doubleValue();

p = new Publicacion(t);
p.setPrecio(40.0);
// de la entrada
System.out.println("Precio ejemplar: ");
p.setPrecio(entradaDouble());

return r;
}
}

System.out.println("Publicacion: " + p);


}

Curso de Programacin Orientada a Objetos en Java

Ignacio Zahonero Martnez


Luis Joyanes Aguilar
57

You might also like