Sie sind auf Seite 1von 95

Lenguajes de Programacin

Tema 3. Paradigma Orientado a


Objetos
Pedro Garca Lpez
pgarcia@etse.urv.es/

Estudio de caso: Java


Lenguaje:
Programa Java

Simple

Java APIs

Orientado a Objetos
Robusto
Arquitectura-neutral (portable)
Moderno
Tipado estticamente
Semi-interpretado
Gran conjunto de bibliotecas

Java Virtual Machine


Computadora

Mquina virtual
La mquina virtual garantiza la portabilidad
del cdigo
Tipos de aplicaciones java:
Standalone (main y maquina virtual)
Applets (en la mquina virtual del navegador
Servlets J2EE (ejecutados en un servidor de
aplicaciones Web)
Programa
Java

Compilador

Programa
Java en
Bytecode

Java para
Macintosh

01010101

Java para
Windows

01010101

Java para
Linux

01010101

Aplicaciones de Java
Sistemas embebidos

Java Server Faces

Servidor
JINI

Programacin

Servlets

JavaSpaces

Java Server Pages

JNI

WWW

java.*
J2ME

Applets

JavaBeans

Java Web Start

Java3D

Programacin grfica

Programacin UI
Java2D

Bases de datos

AW
T

JDBC
CORBA

Programacin
distribuida

Enterprise JavaBeans

RMI

SWT

Swing

Versiones de Java

Historia del lenguaje

1991: El proyecto secreto Green Team equipado con 13 personas, fue designado por
Sun para anticipar y planear las futuras tendencias en el mundo de la informtica. Este
proyecto a puertas cerradas fue impulsado por Patrick Naughton, Mike Sheridan y James
Gosling.

1992: Se presenta Star7: una versin demo funcional de un controlador de un dispositivo


de entretenimiento familiar interactivo, con una interfaz de usuario animada en una
pantalla sensible al tacto.

Estaban tentando a las compaas de cable con la idea de cmo se deban ver sus redes. Era
interactivo, y los usuarios podan leer y escribir informacin en el sistema. Pero las
compaas no queran perder mucho control. Era demasiado avanzado para la poca, y el
equipo de desarrollo, que para ese momento ya eran 70, todava buscaba un mercado al que
le pudiese interesar la idea.

Historia del lenguaje


1993: Lleg Mosaic como una manera amigable de acceso a la Web,
revolucionando la percepcin del pblico. Internet estaba siendo transformada
en la misma red que Sun quera convencer a las compaas de cable que
deberan estar construyendo. Todas las cosas que queran hacer en general
encajaban perfectamente con la forma en que las aplicaciones estaban escritas,
entregadas y usadas en Internet. Era simplemente un accidente increible. Y fue
obvio desde ese momento que Java y la Web eran una pareja perfecta hecha en
el cielo.

1994: El equipo retorn para trabajar en un clon de Mosaic basado en la


tecnologa Java, al cual llamaron WebRunner (en honor a la pelcula Blade
Runner) y que luego se difundi oficialmente bajo el nombre de HotJava TM.

Historia del lenguaje


1995: La demo que cambi la historia: Hollywood conoce Silicon Valley. Se realiza
una demostracin del potencial de Java a travs de una animacin de una molcula.
Un mes mas tarde, el equipo estaba preparado para publicar el cdigo binario del
navegador en su versin 1.0a, y hacerlo pblico para descargas pblicas y privadas en
Internet. Queran que el cdigo fuera testeado por sus amigos y por un grupo mas o
menos pequeo de gente de una red informal de desarrolladores.

El 22 de Marzo, Lisa Poulson coordin con el peridico San Jose Mercury News para
escribir una historia sobre la tecnologa Java basada en el lanzamiento oficial que
vendra pronto. El problema: en el artculo se mencionaba un sitio web que todava ni
exista, por lo cual el equipo tuvo que dedicarse a montar un website en pocas horas.

Historia del lenguaje


Eric Schmidt y George Paolini establecen acuerdos con Marc Andreessen de Netscape
para integrar Java technology en el omnipresente Netscape. Deciden revelar dicho
acuerdo en esa misma convencin, lo cual le dio un giro inesperado al release.
Es all cuando Java se introduce en Internet. Netscape 2.0 introduce la primera JVM
(Mquina virtual Java) en un navegador WWW con la filosofa Java: Write once, run
everywhere
1996: Se libera la versin JDK 1.0. Se realiza la primer conferencia JavaOne developer.
Se anuncian las tecnologas JavaBeans y Servlets. Se anuncia el primer compilador
Just-In-Time (JIT), la Java Card API y finaliza el ao con la JDK 1.1 beta.
1997: Aparece Java 1.1 final. Se anuncia el lanzamiento del JavaBeans Development
Kit, el Java Servlet Developers Kit, la JNDI API, los Enterprise Java Beans, y las Java
Foundation Classes.

Historia del lenguaje


1998: Java 1.2 (Java 2). Plataforma muy madura.
Apoyado por grandes empresas: IBM, Oracle, Inprise, Hewtlett-Packard, Netscape, Sun.
VISA anuncia la primera tarjeta inteligente basada en la tecnologa Java Card. Se
formaliza el Java Community Process.
1999: Java Enterprise Edition. Java comienza a ser una plataforma de desarrollo
profesional. Sumado a esto se lanza la J2ME.
2000: Se anuncia el lanzamiento de la API de Java para XML y la J2SE 1.3.
2001: Se publica el catlogo de patrones para J2EE. Se publica Java Web Start 1.0
2002: Se publica el Java Web Services Developer Pack, ms la versin 1.4 Beta de J2EE
2004: Se lanza la versin 1.5 de Java conocida como Tiger.

Hola Mundo
/*
* Example HelloWorld
* Prints the message "Hello, World!
*/
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello, world.);
}
}

Palabras reservadas
abstract
boolean
break
byte
byvalue
case
cast
catch
char
class
const
continue

default
do
double
else
extends
false
final
finally
float
for
future
generic

goto
if
implements
import
inner
instanceof
int
interface
long
native
new
null

operator
outer
package
private
protected
public
rest
return
short
static
super
switch

synchronized
this
throw
throws
transient
true
try
var
void
volatile
while

Tipos Simples
Tipos
TiposSimples
Simples Tamao
Tamao

Valor
ValorMnimo
Mnimo

Valor
ValorMximo
Mximo

Tipos
TiposWrapper
Wrapper

boolean
boolean

1-bit
1-bit

--

--

Boolean
Boolean

char
char

16-bit
16-bit

Unicode
Unicode00

16
Unicode
Unicode2216-1-1

Character
Character

byte
byte

8-bit
8-bit

-128
-128

+127
+127

Byte
Byte

short
short

16-bit
16-bit

-2-21515

15
+2
+215-1-1

Short
Short

int
int

32-bit
32-bit

-2-23131

31
+2
+231-1-1

Integer
Integer

long
long

64-bit
64-bit

-2-26363

63
+2
+263-1-1

Long
Long

float
float

32-bit
32-bit

IEE754
IEE754

IEE754
IEE754

Float
Float

double
double

64-bit
64-bit

IEE754
IEE754

IEE754
IEE754

Double
Double

void
void

--

--

--

Void
Void

Sistema de tipos

2003 Brooks/Cole - Thomson Learning

Arrays: tipos parametrizables


int lista [] = {1,2,3,4,5};
for (int i = 0; i< lista.length; i++){
lista[i] = lista[i] + 1;
System.out.println(lista[i]);
}
int lista2[] = new int[10];
char lista_char[] = new char[100];
char lista_char2 = {a,b,c};

Los arrays en Java son de tamao fijo y solo


indexables por enteros (0..size)

Bloques

Comandos y secuenciadores
if (expressBool) {
....
} else {
....
}
switch (selector) {
case valor1: instrucci1;
break;
selector:
case valor2: ...........
char,byte,short,int
...
default: instrucciN;
}

Comandos y Secuenciadores
Bucles FOR:
for (<inicialitzaci>; <continuar si ...>;<increment>)
for (int i=0; i<10; i++) {...}

Bucles DO-WHILE
do {
...
} while (expressioBooleana);

Bucles WHILE
while (expressioBooleana) {
...
}

Clases en Java
Lenguaje tipado estticamente
Legible
No separacin en fichero interfaz e
implementacin.
Lenguaje semi-interpretado: Mquina Virtual
Java + bytecodes
Atributos y variables de clase
Mtodos de instancia y de clase
Incluye metaclases (Reflexin)

Ejemplo: Cuenta

Creacin de Objetos
Constructores: mtodos con el nombre de la clase
que no devuelven nada (void).
Acceso a las variables de instancia de la clase
mediante mtodos de instancia (set y get).
Cuenta c = new Cuenta (pedro);
c.reintegro(10000);
c.ingreso(20000);
int x = c.getSaldo();

Propiedades de clase: static


class Cuenta
{
private String titular;
public static int interes=3;
public int setInteres(int cantidadPts)
{
interes= cantidadPts
}

Que ocurre ?

Propiedades de clase
No podemos acceder desde variables de
clase a variables de instancia.
// Mtodo de clase
public static int setInteres(int cantidadPts)
{
interes= cantidadPts
}

Propiedades de clase
public class HelloWorld {
public static void main(String[] args) {
Cuenta.setInteres(12);
Math.sqrt(9);
}
}

Las propiedades de clase son vlidas para


todos los objetos de la clase.

Clases Java y Ocultacin de


Informacin
package
accesible por las clases del paquete, no
accesible a los clientes del paquete

public
accesible por todas las clases

private
slo accesible por los mtodos de la clase

protected
accesible por las clases del paquete y por las
subclases

Visibilidad
publ protect packa
ed
ge
The class itself ic
Si
Si
Si
Clases del
Si
Si
Si
mismo
paquete
Subclases de
Si
Si
No
otro paquete
No-subclases
Si
No
No
de otro
paquete

priva
te
Si
No
No
No

Asignacin

Un objeto asociado a una variable cambia


cuando se evala una expresin de
asignacin.

variable = expresin
miObjeto= otroObjeto;

El operador = no hace una copia del objeto

Asignacin y cloning
Point p = new Point (1,1);
Point p2 = p;
p2.setLocation(120,120);
//Aliasing
System.out.println("Valor de p:" + p.getX());
System.out.println("Valor de p2:" + p2.getX());
Point p3 = (Point)p.clone();
p3.setLocation(40,40);
System.out.println("Valor de p:" + p.getX());
System.out.println("Valor de p3:" + p3.getX());

Copia en Java
La clase Object incluye el mtodo
protected Object clone( ) {..} ..}
que implementa una copia superficial.
Para poder clonar objetos de una clase se
debe
Declarar que implementa la interfaz Cloneable
Redefinir y hacer pblico el mtodo clone()
Dejar la versin original (copia superficial) o
bien hacer una copia de mayor profundidad.

Paso de Parmetros
class PassByValue {
public static void modifyPoint(Point pt, int j)
{
pt.setLocation(5,5);
j = 15;
}
public static void main(String args[])
{
Point p = new Point(0,0);
//1
int i = 10;
modifyPoint(p, i);
//2
//3
}}

Arrays y Clases
Cuenta lista_cuentas [] = new Cuenta[10];
O bien:
Cuenta lista_cuentas[];
lista_cuentas = new Cuenta [10];

Qu ocurre si ahora intento hacer lo siguiente ?


lista_cuentas[0].ingreso(100);

Arrays y clases
La inicializacin del array no instancia n
objetos del tipo establecido !!!
Los deja a null por defecto
Cuenta lista_cuentas [] = new Cuenta[10];
Cuenta micuenta = new Cuenta(pedro);
Cuenta sucuenta = new Cuenta(pepe);
lista_cuentas[0] = micuenta;
lista_cuentas[1] = sucuenta;
lista_cuentas[0].ingreso(100);

Arrays: Tipo parametrizable


int lista [] = new int[100];
lista[0]=1;
for (int i=0;i<lista.length;i++)
lista[i]=0;
int lista[] = {1,2,3,4};
Perro lista2 = new Perro[100];
lista2[0] = new Perro ();
Object lista3 = new Object [100][100];

Tipos bsicos y clases


Tipos Wrapper, una clase por cada tipo
bsico, permite conversin Clase <-> Tipo
primitivo (Integer, Float, Char, Double)
int a =1;
int b= 2*3;
Integer awrap = new Integer(a);
int x = awrap.intValue();

La clase java.lang.String
Es una clase, pero tiene facilidades con el
constructor
Si se quiere eficiencia en la concatenacin y
manejo de cadenas usar StringBuffer.
String nombre = new String(pedro);
Es equivalente a:
String nombre = pedro;
String total = nombre + garcia;

Concepto de Metaclase: RTTI


Run Time Type Identification
Object
Class getClass()

Class

getFields
getMethods
getName
(...)

Cuenta c = new Cuenta(pedro);


Class miclase = c.getClass();
System.out.println(miclase.getName());

Agrupacin de clases: Package

package pedro.utils;
import pedro.utils.*;
import pedro.*; // No es jerrquico
import pedro.utils.Cosa;

Paquetes Java

java.lang --- general


java.awt --- GUI
java.io --- I/O
java.util --- utilities
java.applet --- applet
java.net --- networking

Relaciones entre clases


Composicn: Tiene - Un
Student
-name : String *
-gpa : float
*

Faculty
1
1

Address
-streetAddress : String
-city : String
-state : String
-zipCode : String

Relaciones entre clases


Herencia: Es -Un
Student

GraduateStudent

MasterStudent

PhDStudent

UndergraduateStudent

Clientela
Una Cuenta tiene un propietario de tipo Cliente:
Class Cuenta {
private Cliente propietario;
() }
Un Banco tiene N cuentas:
Class Banco {
private Cuenta lista_cuentas[];
() }

Herencia en Java
public class X extends Y {...}

Sintaxis de clase

[ ClassModifiers ] class ClassName


[ extends SuperClass ]
[ implements Interface1, Interface2 .
ClassMemberDeclarations
}
La clase Object
this y super

La clase Object
protected Object clone()
Creates and returns a copy of this object.
boolean equals(Object obj)
Indicates whether some other object is "equal
to" this one.protected
void finalize()
Called by the garbage collector on an object
when garbage collection determines that there are
no more references to the object.
Class getClass()
Returns the runtime class of an object
String toString()
Returns a string representation of the object.

Object
Todas las clases heredan de Object
Class Cuenta [extends Object]

Se pueden redefinir los mtodos equals,


clone y toString.
Hay que tener mucho cuidado al comparar
objetos entre si, no es igual que comparar
tipos bsicos:
int x = 3;

Cuenta c = new Cuenta(pedro);

int y = 5;

Cuenta d = new Cuenta(pepe);

if (x ==y) then ()

if (c ==d) then () NO !!!!

Ejemplo
Class Coche {
private String marca;
private int precio;
public Coche (String marca, int precio){
this.marca = marca;
this.precio = precio;
}
public int getPrecio(){
return precio;
}

Ejemplo
public String getMarca(){
return marca;
}
public boolean equals (Object obj){
Coche otro = (Coche) obj;
return
(otro.getPrecio()==this.precio)&&(otro.getMarca().equals(this.m
arca);
}

Ejemplo
protected Object clone(){
return new Coche (marca, precio);
}
public String toString (){
return (+marca+,+precio+);
}

Ejemplo
public static void main (String args[]){
Coche micoche = new Coche (bmw,100);
Coche otrocoche = new Coche (seat,10);
if (micoche.equals(otrocoche))
System.out.println(iguales);
System.out.println(micoche);
}

Tipos de herencia
Para referirse a la instancia actual usamos this y
para referirnos a nuestra clase padre usamos
super.
Herencia de redefinicin de mtodos
Refinamiento
Reemplazo

Herencia abstracta
Herencia de interfaces

Ejemplo: La granja de animales

Herencia de reemplazo

Herencia de refinamiento

Clases abstractas

Algn mtodo no se implementa


No podemos instanciar una clase abstracta
La clase abstracta puede tener mtodos no abstractos
La clase abstracta debe ser heredada.

public abstract class Figura


{
public abstract dibujar();
}

Ejemplo herencia abstracta

Cuidado con la herencia abstracta !


Si la clase Animal tiene aunque sea un mtodo
abstracto entonces es ua clase abstracta:
Animal mianimal = new Animal (); ERROR !!!!
No podemos instanciar una clase abstracta !!
Qu pasara si hacemos :?
mianimal.habla();

Si una clase hereda de una clase abstracta ha de


implementar los mtodos abstractos de la clase
padre, o ser tambin abstracta

Polimorfismo
Tipo esttico:
Tipo asociado en la declaracin

Tipo dinmico:
Tipo correspondiente a la clase del objeto conectado a
la entidad en tiempo de ejecucin

Conjunto de tipos dinmicos:


Conjunto de posibles tipos dinmicos de una entidad

Ejemplo:

A
B

C
E

oa: A; ob: B; oc; C;


te(oa) = A
ctd(oa) = {A,B,C,D,E,F}
te(ob) = B
ctd(ob) = {B, D, E}
te(oc) = C
ctd(oc) = {C,F}

(antes)

Conexin polimorfa
(despus)

(POLIGONO)

p:POLIGONO; r:RECTANGULO

(RECTANGULO)

Cuando el origen y el destino tiene tipos diferentes:


a) asignacin:
p = r;

-- p es una entidad polimorfa

b) paso de parmetros:
comer (Animal a ) f es una rutina polimorfa, me puedo comer
cualquier animal (perro, gato, )

Slo se permite para entidades destino de tipo referencia

Polimorfismo y ligadura dinmica


Java es un lenguaje tipado estticamente
La ligadura de un mensaje a un mtodo
concreto se realiza en tiempo de ejecucin
Qu versin de permetro se ejecuta
en cada mensaje?
f= new Poligono ();
f.perimetro();
r = new Rectangulo();
r.perimetro();
f=r;
f.perimetro();

{i}
{ii}
{iii}

Ejemplo polimorfismo

Ejemplo polimorfismo (2)

Polimorfismo
Animal a = new Animal();
Perro p;
a = p;
Object x;
Perro p = new Perro();
x = p;
Perro p2 = (Perro) x;

Polimorfismo y castings
Object list [] = new Object[3];
String s = lala;
Perro p = new Perro();
list[0] = s;
list[1] = p;
Object x = list[0];
Perro p2 = (Perro) list[1];

Polimorfismo
Object list [] = new Object[3];
Integer i1 = new Integer(3);
int z = 74;
Integer i2 = new Integer(4);
list[0] = i1;
list[1] = i2;
Object x = list[0];
Integer r2 = (Integer) list[1];
int resul = z2.intValue();

Interfaces
Son clases en las que todos las propiedades son estticas y
finales y todos los mtodos son abstractos.
Permiten la herencia mltiple, y separacin de
especificacin e implementacin.
Se aplican las mismas reglas que la herencia de clases en
las asignaciones polimrficas

interface Persona

interface Perro

{
public void habla();

public void ladra();


}

Interfaces y herencia
public class Mutante implements Persona, Perro
{
public void habla()
{

System.out.println(Soy una persona);

}
public void ladra()
{
}
}

System.out.println(GUAU);

Interfaces y polimorfismo
Mutante m = new Mutante();
Persona p = m;
p.habla();
Perro p = m;
m.ladra();

Interfaces
class Prueba
{
public static void ladra (Perro p)
{ p.ladra();
{
public static void habla(Persona p)
{ p.habla()
}

Interfaces
Mutante m = new Mutante();
Prueba.habla(m);
Prueba.ladra(m);
No podemos instanciar una interface, pero si asignarle una
instancia de una clase que implemente esta interface:

Persona p = new Mutante;

Excepciones Java
Proporcionan una manera limpia de comprobar
errores sin complicar el cdigo
Proporcionan, adems, un mecanismo para sealar
directamente los errores sin necesidad de usar
indicadores (atributos, parmetros).
Son lanzadas cuando se detectan situaciones
imprevistas de error.

Excepciones Java
BufferedReader br;
int codigoProducto = Integer.parseInt (br.readLine() )

Puede suceder algo inesperado como que:


br represente un fichero sobre un disco flexible que se ha extrado
br represente una conexin en red y se produzca una cada de la
red
br represente un fichero en mal estado sobre el disco duro
el usuario introduzca un carcter no numrico
el usuario introduce un cdigo numrico incorrecto

Situaciones que deben ser manejadas por


excepciones

70

Excepciones Java
Las excepciones son objetos.
Hay dos tipos:
Comprobadas
No comprobadas
Necesidad de definir subclases de Exception o
RunTimeException.

Jerarqua de Tipos de Excepciones


Java
Object
Throwabl
e
Error

Exception

RunTimeException

No comprobadas

Comprobadas

Excepciones Comprobadas
Subclases de Exception
Un mtodo que lance una excepcin comprobada,
debe especificarlo en su signatura.
El cdigo que invoca un mtodo que puede lanzar
una excepcin comprobada debe manejarla
mediante una clusula try-catch.
Situaciones comprobadas por el compilador

Excepciones No Comprobadas
Subclases de RuntimeException
Un mtodo puede lanzar una excepcin no
comprobada, sin especificarlo en su signatura.
El cdigo que invoca un mtodo que puede lanzar
una excepcin no comprobada no debe manejarla.
Es recomendable listar todas las excepciones en la
signatura para facilitar su uso.
Cmo elegimos si una nueva excepcin es
comprobada o no comprobada?
74

Uso de Excepciones
Comprobadas
public class ClaveNoExiste extends Exception {
public ClaveNoExiste() { super(); }
}
// mtodo en TablaHash
public void cambiarValor (String clave, Object valor)
throws ClaveNoExiste
{ if (obtener(clave) == null)
throw new ClaveNoExiste ();

}
TablaHash unaTabla;
...
try { unaTabla.cambiarValor(s,v);}
catch (ClaveNoExiste e) {...}

finally {...}

75

Excepciones Comprobadas
Qu puede hacer el cliente de un mtodo
que lanza una excepcin comprobada?
1) Capturarla y manejarla
2) Capturarla y asociarla a una de las excepciones declaradas
en el mtodo.
3) Declararla en la clusula throws y no manejarla, con lo que
se propaga al mtodo que lo invoc.

Excepciones No Comprobadas
Qu puede hacer el cliente de un
mtodo que lanza una excepcin no
comprobada?
1) Si no la captura se propaga al mtodo que lo invoc.
2) Tambin puede capturarla y manejarla.
3) Capturar la excepcin y asociarla a una de las
excepciones declaradas en el mtodo.

Excepciones Java
try {
Sentencias con mensajes que pueden provocar
excepciones
} catch (unaExcepcion e) {codigo manejo excepcin
} catch (OtraExcepcion e) {codigo manejo excepcin
} finally {...} // se ejecuta se lance o no una excepcin

Excepciones en Java
den
r
o
n
an e a una

l
a
v
-Se e se ejecut
- Slo

try{
//sentencias
}catch (TipoExcepcion1 e){
//manejar excepcin
}catch (TipoExcepcion2 e){
//manejar excepcin
} ...

Una excepcin
es un objeto!

Ej: cerrar ficheros

finally{
//sentencias que se ejecutan SIEMPRE
//salte o no una excepcin
}

Ejemplos
public static int factorial (int n) throws NonPositiveException
{
if (n<=0) throw new NonPositiveException (Num.factorial);

}
try { Num.factorial(y);
} catch (NonPositiveException e) { }

Ejemplos
public static int search (int [] a, int x) throws NullPointerException
NoEncontradoException
{}
try { ;
try { x = Arrays.search(v,7);}
catch (NullPointerException e) {
throw new NoEncontradoException(); }
} catch (NoEncontradoException e) {..}

Debo declarar NullPointerException en la signatura?


Es acertado considerar la situacin de elemento no
encontrado como una excepcin?

Captura de excepciones no
comprobadas
try { x = y [n]; i = Arrays.search(z, x);}
catch (IndexOutOfBoundsException e) {
manejar la excepcin en el caso del acceso y[n] }

No se sabe la procedencia exacta de la excepcin no


comprobada IndexOutOfBoundsException
Restringir el mbito de la sentencia try

Ejemplos
public class Arrays {
public static int min (int [] a) throws NullPointerException,
EmptyException
{ // EFECTO: Si a es null lanza NullPointerException, si no si a
// est vaco lanza EmptyException, si no retorna el valor
mnimo // del array a
int m;
try { m = a[0]; }
catch (IndexOutOfBoundsException e) {
throw new EmptyException(Arrays.min); }
for (int i = 1; i < a.length; i++) if (a[i] < m) m = a[i];
return m; }

Ejemplos
public class Arrays {
public static boolean sorted (int [] a) throws
NullPointerException, EmptyException
{ // EFECTO: Si a es null lanza NullPointerException, si no retorna
// true si el array est ordenado en orden ascendente si no false
int prev;
try { prev = a[0]; }
catch (IndexOutOfBoundsException e) { return true; }
for (int i = 1; i < a.length; i++)
if (prev <= a[i]) prev = a[i]; else return false
return true; }

Ejemplo cdigo genrico


java.util.Collection
C o lle c t io n
A b s t r a c t C o lle c t io n
A b s t r a c t L is t
V e c to r
S ta c k

A r r a y L is t

A b s tra c tS e t
L in k e d L is t

A rra y S e t

H ashS et

Ejemplo: cdigo genrico

boolean add(Object)
boolean addAll(Collection)
void clear()
boolean contains(Object)
boolean containsAll(Collection)
boolean isEmpty()
Iterator iterator()
boolean remove(Object)
boolean removeAll(Collection)
boolean retainAll(Collection)
int size()
Object[] toArray()

Iteradores

boolean hasNext()
Object next()
void remove() [implementacin opcional]
Por ejemplo:
public void escribir (Collection c) {
for (Iterator it=c.iterator(); it.hasnext();) {
System.out.println(it.next());
}
}

Genericidad y Java
Java no posee genericidad (hasta el Jdk1.5)
Necesidad de declaraciones de tipo Object
Problemas:
Necesidad de conversiones de tipo
No se asegura homogeneidad

Incluye genericidad para arrays


private Cuenta[ ] cuentas = new
Cuenta[100]
private int[ ] valores = new int [4]

Estructuras de datos polimorfas


Contiene objetos de diferentes clases
Ejemplo: Array con cualquier variante de Figura
Figura conjFig = new Figura[10];
p= new Poligono();
r = new Rectangulo();
c = new Circulo();.
t = new Triangulo();

conjFig[0]=p;
conjFig[0]=r;
conjFig[0]=c;
conjFig[0]=t;

conjFig

1
2
3
4

Estructuras polimorfas y cdigo


genrico
public void dibujarFiguras()
{
for (int i=0;i<conjFig.length;i++)
conjFig[i].dibujar();
}

Ejemplo colecciones

Ejemplo HashMap

Ejemplo Cdigo genrico


java.util.Comparator
int compare(Object o1, Object o2)
Compares its two arguments for order. Returns a
negative integer, zero, or a positive integer as the first
argument is less than, equal to, or greater than the second.
boolean equals(Object obj)
Indicates whether some other object is "equal to" this
Comparator.
java.util.Collections
static void sort (List list, Comparator c)
Sorts the specified list according to the order induced
by the specified comparator.

Ejemplo

Das könnte Ihnen auch gefallen