Lenguajes de Programacin
Tema 3. Paradigma Orientado a
Objetos
Pedro Garca Lpez
pgarcia@[Link]/
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) {
[Link]("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< [Link]; i++){
lista[i] = lista[i] + 1;
[Link](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);
[Link](10000);
[Link](20000);
int x = [Link]();
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) {
[Link](12);
[Link](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;
[Link](120,120);
//Aliasing
[Link]("Valor de p:" + [Link]());
[Link]("Valor de p2:" + [Link]());
Point p3 = (Point)[Link]();
[Link](40,40);
[Link]("Valor de p:" + [Link]());
[Link]("Valor de p3:" + [Link]());
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)
{
[Link](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<[Link];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 = [Link]();
La clase [Link]
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 = [Link]();
[Link]([Link]());
Agrupacin de clases: Package
package [Link];
import [Link].*;
import pedro.*; // No es jerrquico
import [Link];
Paquetes Java
[Link] --- general
[Link] --- GUI
[Link] --- I/O
[Link] --- utilities
[Link] --- applet
[Link] --- 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 [Link]
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){
[Link] = marca;
[Link] = precio;
}
public int getPrecio(){
return precio;
}
Ejemplo
public String getMarca(){
return marca;
}
public boolean equals (Object obj){
Coche otro = (Coche) obj;
return
([Link]()==[Link])&&([Link]().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 ([Link](otrocoche))
[Link](iguales);
[Link](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 :?
[Link]();
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 ();
[Link]();
r = new Rectangulo();
[Link]();
f=r;
[Link]();
{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 = [Link]();
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()
{
[Link](Soy una persona);
}
public void ladra()
{
}
}
[Link](GUAU);
Interfaces y polimorfismo
Mutante m = new Mutante();
Persona p = m;
[Link]();
Perro p = m;
[Link]();
Interfaces
class Prueba
{
public static void ladra (Perro p)
{ [Link]();
{
public static void habla(Persona p)
{ [Link]()
}
Interfaces
Mutante m = new Mutante();
[Link](m);
[Link](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 = [Link] ([Link]() )
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 { [Link](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 ([Link]);
}
try { [Link](y);
} catch (NonPositiveException e) { }
Ejemplos
public static int search (int [] a, int x) throws NullPointerException
NoEncontradoException
{}
try { ;
try { x = [Link](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 = [Link](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([Link]); }
for (int i = 1; i < [Link]; 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 < [Link]; i++)
if (prev <= a[i]) prev = a[i]; else return false
return true; }
Ejemplo cdigo genrico
[Link]
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=[Link](); [Link]();) {
[Link]([Link]());
}
}
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<[Link];i++)
conjFig[i].dibujar();
}
Ejemplo colecciones
Ejemplo HashMap
Ejemplo Cdigo genrico
[Link]
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.
[Link]
static void sort (List list, Comparator c)
Sorts the specified list according to the order induced
by the specified comparator.
Ejemplo