Está en la página 1de 143

Facultad Politcnica, UNA

Algoritmos y Estructura de datos III

Java: una breve introduccin


Cristian Cappo (ccappo@pol.una.py) Ao 2013 2do. se!estre

"arte #

$otivaciones de Java %ecnolo&'a Java (istoria )*e!plo

Algoritmos y Estructura de datos III

%ecnolo&'a Java

J,- .

un vista+o

Algoritmos y Estructura de datos III

Java : (istoria

Java

#deado en1//1 y o0iciali+ado en 1//1 por 2un por Ja!es 3oslin& et al. de 2un $icrosyste!s.

(pas unos cuatro aos antes Sun aceptara liderar el proyecto propuesto por un grupo liderado por Gosling)

#nicial!ente lla!ado Oak4 en 5onor a un 67rbol8 9ue 3oslin& ve'a desde de su ventana en 2un4 este no!bre 0ue ca!biado lue&o a Java debido a 9ue ya e:ist'a un len&ua*e con el no!bre ;a<. )n 200= Java 0ue liberado ba*o 3>? 3"@ )n 200/ 2?> 0ue ad9uirido por ;racle y as' ta!biAn Java
4

Algoritmos y Estructura de datos III

Java : (istoria

$otivacin ori&inal para Java

@a necesidad de un len&ua*e de plata0or!a independiente 9ue deb'a ser 6incrustado8 en productos electrnicos de consu!o co!o tostadoras4 %Bs4 etc. )l pri!er proyecto 0ue un entorno para una especie de ",A deno!inado 2tar. )n ese !o!ento4 CCC e #nternet estaban ad9uiriendo &ran popularidad. 2e propuso entonces 9ue Java podr'a ser usado para la pro&ra!acin orientada a #nternet.
5

"ri!eros pasos

Algoritmos y Estructura de datos III

@e!a de los creadores de Java

Crite once4 run anyD5ere

Algoritmos y Estructura de datos III

Java: !otivaciones de su diseo


):tra'do del paper de Ja!es 3oslin&E(enry $c3ilton The Java Language Environment !ayo "##$

2i!ple4 orientado a ob*etos y 0a!iliar Fobusto y se&uro ,e ar9uitectura neutral y portable ,e buen rendi!iento #nterpretado4 !ulti5ilo y din7!ico

Algoritmos y Estructura de datos III

)volucin de las versiones de Java

Java 1.0 (eneroE1//=) G pa9uetes4 212 clases Java 1.1 (!ar+oE1//.) 23 pa9uetes4 10H clases Java 1.2 (dicE1//G) 1/ pa9.4 1120 clases Java 1.3 (abrE2000) .. pa9.4 11/1 clases Java 1.H (2002) 103 pa9.4 21.1 clases Java 1.1 (octE200H) 131 pa9.4 2=1= clases Java = (200.) update H1 (Java 2) = ) Java . (2012) update 21 (Java 2) .) Java G (anunciado para 0/E2013)
(aun9ue ya e:iste adelantos: J,- G 2naps5ots) 5ttps:EEblo&s.oracle.co!E*avaoneEresourceE*avaI<eynoteEslideI1=I0ullIsi+e.&i0

Algoritmos y Estructura de datos III

"or 9uA deci!os tecnolo&'a JABAJ

@a tecnolo&'a JABA incluye:


?n len&ua*e de pro&ra!acin ?n entorno de desarrollo ?n entorno de e*ecucin ?n entorno de distribucin

Algoritmos y Estructura de datos III

@en&ua*e de pro&ra!acin

%ecnolo&'a Java:

Java es un len&ua*e de pro&ra!acin de propsito &eneral 9ue puede ser usado para crear cual9uier tipo de aplicacin4 co!o cual9uier otro len&ua*e de pro&ra!acin convencional.

Algoritmos y Estructura de datos III

10

%ecnolo&'a Java:
)ntorno de desarrollo

@a tecnolo&'a Java incluye una serie de 5erra!ientas para crear aplicaciones co!pletas: un co!pilador (*avac) un intArprete (*ava) un &enerador de docu!entacin (*avadoc) un con*unto co!pleto de librer'as entre otras cosas...

Algoritmos y Estructura de datos III

11

%ecnolo&'a Java:
)ntorno de e*ecucin

@as aplicaciones Java son pro&ra!as 9ue corren en cual9uier !79uina donde el entorno de e*ecucin Java (JF) Java Funti!e )nviron!ent) se encuentre instalado.

Algoritmos y Estructura de datos III

12

%ecnolo&'a Java
)ntorno de distribucin

):isten dos principales entornos de distribucin:

%5e JF) 9ue viene con el J,- (Java ,evelop!ent -it) y contiene una co!pleto con*unto de librer'as para aplicaciones b7sicas4 &r70icas4 Deb4 etc. )l otro principal entorno de distribucin es el nave&ador Deb. $uc5os nave&adores ya contienen el entorno de e*ecucin Java.
13

Algoritmos y Estructura de datos III

Al&unas caracter'sticas de Java:


JB$ ( Java Birtual $ac5ine) Colector de basura (3arba&e collector) 2e&uridad en el cdi&o e*ecutado

Algoritmos y Estructura de datos III

14

Kases de la creacin y e*ecucin de un "ro&ra!a Java

@a si&uiente 0i&ura !uestra el proceso de co!pilar y e*ecutar un pro&ra!a Java

Algoritmos y Estructura de datos III

15

Kases de un "ro&ra!a Java


Tarea )scribir un pro&ra!a Co!pilar un pro&ra!a Herramienta Cual9uier )ditor de %e:to Co!pilador *ava Salida ?n arc5ivo con e:tensin %&ava ?n arc5ivo con e:tensin %class (*ava bytecode) 2alida del pro&ra!a

)*ecutar un pro&ra!a

#ntArprete de *ava

Algoritmos y Estructura de datos III

16

Java: ?n solo cdi&o4 varias plata0or!as

Algoritmos y Estructura de datos III

17

)*e!plo de un cdi&o Java


Programa en C ue im!rime el "amoso #$ola %undo&&'
$include %stdio.&' int main { print((Hola # undo!!)n"); Compilamos y ejecutamos * gcc +o test test.c * .,test Hola undo!! *

Ahora en Java. El archivo fuente igual que el nombre de la clase: Test.java


import java.io.*;

Compilamos y ejecutamos public class Test { * javac -est.java public static void main ( String [] args ) { * java -est Hola undo!! System.out.println(Hola undo!!"); * #
# Algoritmos y Estructura de datos III
18

"robe!os el co!pilador
)ditar el arc5ivo con cual9uier editor de te:to4 use!os un editor denominado 'otepad(((5ttp:EEnotepadLplusLplus.or&E)

Algoritmos y Estructura de datos III

19

"robe!os el pro&ra!a
)l co!pilador es &avac y el intArprete &ava
Compilamos (sin errores) E ecutamos v!a el int"rprete

Algoritmos y Estructura de datos III

20

Al&unas caracter'sticas

2inta:is es !uy si!ilar a C y CMM4 de 5ec5o casi i&uales. %ipo de datos pri!itivos se !antienen entre plata0or!a y plata0or!a. Co!entarios al estilo C y CMM: EE unil'nea y EN NE !ultil'nea

Algoritmos y Estructura de datos III

21

Al&unas di0erencias con C


Caracterstica %ipo de len&ua*e ?nidad b7sica de pro&ra!acin "ortabilidad del cdi&o 0uente "ortabilidad del cdi&o co!pilado 2e&uridad %ipo nu!Aricos %ipo booleano %ipo caracter ,ireccin de !e!oria Arre&los $Atodos de obtener y liberar !e!oria Conversin e:pl'cita Conversin i!pl'cita Cadenas Asi&nacin de !e!oria para estructura de datos y arre&los C ;rientado a 0unciones Kuncin "osible con disciplina >;4 dependiente de la ar9uitectura @i!itada ,ependiente de la plata0or!a int A2C## "untero )st7ticos malloc() y )ree() 2ie!pre es posible 2ie!pre "or convencin (eap4 2tac<4 ,ata Java ;; Clase O %A, 2ie!pre 2# "arte del len&ua*e Ki*os boolean ?nicode Fe0erencia ,in7!icos de (eap con ta!ao est7tico ne* y liberacin auto!7tica 2e controla ,ebe ser e:pl'cita si es con pArdida de precisin #ncluido co!o tipo in!utable (eap
22

Algoritmos y Estructura de datos III

Parte II

"ro&ra!a e*e!plo @iterales4 identi0icadores4 palabras reservadas Co!entarios en Java %ipo de datos Bariables: declaracin e iniciali+acin 2entencias y blo9ues de sentencias 2alida de datos ;peradores: arit!Aticos4 relacionales4 l&icos.

Algoritmos y Estructura de datos III

23

)*e!plo4 un repaso
. 2 3 import java.io.*; public class -est { ,** * i 1rimer programa 2ava *, public static void main( String[] args ){ ,, 7mprimo el mensaje Hola undo!!" System.out.println(Hola undo!!"); ,, 1uedo &acerlo tambien como en 9 ;) System.out.print((;s"< Hola undo!!"); #
24

/ 0 3 4 5 6 .8 .. .: .= ./ .0 #

Algoritmos y Estructura de datos III

)*e!plo...
1 2 = / import java.io.*; public class -est{

?na declaracin import per!ite 9ue un no!bre de tipo pueda ser re0erido por un no!bre si!ple (sin la especi0icacin co!pleta). )n este e*e!plo no es estricta!ente necesario el uso de i!port ya 9ue no tene!os nin&Pn tipo 9ue co!ience con &ava%io.N (a9u' !ostra!os solo para e:plicar el sentido de import)
25

Algoritmos y Estructura de datos III

)*e!plo...
. 2 3 / import java.io.*; public class Test{

#ndica 9ue el no!bre de la clase ser7 %est )n Java4 todo el cdi&o debe ser puesto dentro de la declaracin de una clase. @a clase utili+a un !odi0icador de acceso 6public84 9ue indica 9ue la clase es accesible desde otras clases del !is!o pa9uete (pa+uete,es una coleccin de clases agrupadas en un directorio ).
26

Algoritmos y Estructura de datos III

)*e!plo..
. 2 3 / 0 3 4 5

import java.io.*; public class -est { ,** * i 1rimer programa 2ava *, public static void main( String[] args ){

#ndica 9ue el no!bre de un !Atodo en %est 9ue se lla!a !ain. )l !Atodo !ain es el punto de entrada de un pro&ra!a Java. Ase&urarse de 9ue el 6signature8 o 6)irma8 del !Atodo ten&a esta 0or!a.
27

Algoritmos y Estructura de datos III

)*e!plo..
. 2 3 / 0 3 4 5 6 .8 .. .: .= ./ import java.io.*; public class -est { ,** * i 1rimer programa 2ava *, public static void main( String[] args ){ ,, 7mprimo el mensaje Hola undo!!" System.out.println(Hola undo!!"); # #

2yste!.out.println()4 i!pri!e el te:to encerrado entre co!illas dobles en la salida est7ndar con un enter al 0inal
28

Algoritmos y Estructura de datos III

)*e!plo..
. import java.io.*; 2 3 public class -est / { 0 ,** 3 * i 1rimer programa 2ava 4 *, 5 public static void main( String[] args ){ 6 .8 ,, 7mprimo el mensaje Hola undo!!" .. System.out.println(Hola undo!!"); .: ,, 1uedo &acerlo tambien como en 9 ;) .= System.out.print((;s"< Hola undo!!");

2yste!.out.print0()4 i&ual 9ue print) de C


Algoritmos y Estructura de datos III
29

Fepasando..

Fecordar 9ue:

@a e:tensin de los arc5ivos 0uentes es .java )l no!bre del arc5ivo sie!pre debe coincidir con el no!bre de la clase. Conviene sie!pre 9ue nuestro cdi&o ten&a co!entarios Ptiles

Algoritmos y Estructura de datos III

30

Java: sinta-is y otras cosas

Fecordar 9ue !ayPsculas y !inPsculas son di0erentes4 as' .ola es di0erente a .OL/4 hola4 etc. @as sentencias sie!pre ter!inan en Q (punto y co!a) i&ual 9ue C y CMM. ?n blo9ue es un con*unto de sentencias 9ue se inicia con un 0 y ter!ina con un 1. Java es de 0or!ato libre4 es decir pueden *u&ar con los espacios4 aun9ue es reco!endable !antener sie!pre un estilo de pro&ra!acin (ver el documento Java 2ode 2onventions)
31

Algoritmos y Estructura de datos III

Java: identi)icadores

2e utili+a para no!brar variables4 !Atodos4 no!bre de clases4 etc. ,eben e!pe+ar sie!pre con una letra4 el si&no I o el si&no 3. >o pueden utili+arse palabras reservadas (<eyDords) 2e reco!ienda:

Rue los no!bres de clase e!piecen con $ayPscula. Rue los no!bres de !Atodos y variables e!piecen con !inPsculas. 2i es un no!bre de !Atodo tiene dos palabras4 el inicio de la si&uiente palabra es en !ayPscula. "or e*e!plo: es4rimo5 calcularSalario5 etc%
32

Algoritmos y Estructura de datos III

Java: key*ords
abstract assert boolean break byte case catch char class const continue default do double else enum extends final finally float for if goto implements import instanceof int interface long native new package private protected public return short static strictfp super switch synchronized this throw throws transient try void volatile while

Algoritmos y Estructura de datos III

33

Java : literales

,el tipo enteros4 pueden ser en di0erentes 6bases8.

,eci!al : nor!al: 121214 12G12. )s del tipo lon& con el su0i*o @4 as' 10@ es lon& no int. (e:adeci!al : precedido por 0: 0S . 0:AT ;ctal4 precidido por 0 (cero): 01H 1G3.H1 (estandar) 1.G3H1e2 (cient'0ico) 0.0d (double) 0.00 (0loat) true o 0alse (en !inPsculas)
34

,el tipo punto 0lotante


,el tipo l&ico

Algoritmos y Estructura de datos III

Java: literales (cont.)

,el tipo caracter

)ncerrados entre co!illas si!ples UaU4 UbU UVnU4 UVbU (con secuencia de escape co!o C y CMM) O6s7 son del tipo 8'92O:E ("$ 6its) no /S299

Cadenas ()n Java no es pri!itivo pero tiene un trata!iento especial4 el tipo de dato es String )

2ecuencia de caracteres encerrados entre co!illas dobles. "or e*e!plo 6Al&orit!os y ), ###8.

Algoritmos y Estructura de datos III

35

Java : tipo de datos pri!itivos

Algoritmos y Estructura de datos III

36

Java: tipo de datos enteros

Algoritmos y Estructura de datos III

37

Java: tipo de datos en punto )lotante


Tipo Kloat ,ouble Valor Tamao por Mnimo defecto 32 bits 0.00 1.H012/GH=H32HG1.0.eLH1 =H bits 0.0d H./H0=1=H1GH12H=1HHeL32H Mximo 3.H02G23H==3G12GG=0eM3G 1../.=/313HG=2311.0eM30G

#))) .1H

Algoritmos y Estructura de datos III

38

Java: varia6les

?na variable es un 'te! de dato asociado a un ob*eto en !e!oria. %iene sie!pre un tipo de dato y un identi0icador o no!bre. ,eclarar una variable
%tipo>dato' %identi(icador' [ ? %valor>inicial' ]

Algoritmos y Estructura de datos III

39

Java: tipos de varia6les

)n Java e:isten dos tipos de variables


"ri!itivas Fe0erencias )*e!plo: int a4 0loat b4 boolean es"arQ

"ri!itivas: asociadas a tipos pri!itivos

Fe0erencia: es un puntero 9ue en realidad esta asociado a un dato en el ()A" (7rea de datos de la !e!oria). Asociado a ob*etos (de clases) y arre&los.

String cad ? Hola"

,,cad es del tipo re(erencia.


40

Algoritmos y Estructura de datos III

Java: operadores

%ipos de operadores disponibles:

Arit!Aticos: binarios(N4 E4 M4 L4 W4 MO4 NO4 ..) unarios (MM4 LL4 L ) Felacionales: X4 Y4 YO4 XO4 OO4 ZO @&icos: [[ (and)4 [ (and en sc)4 \\ (or)4 \ (or en sc)4 ]4 (or e:clusivo)4 Z (not) Condicionales: J:

Algoritmos y Estructura de datos III

41

Parte III

Ar&u!entos de la linea de co!andos @ectura de datos desde la consola )structuras de control

Algoritmos y Estructura de datos III

42

Java: conversiones

Conversin e:pl'cita: a travAs de !Atodos espec'0icos (Math.round(), Integer.parseInt(),

etc)

Conversin auto!7tica: para tipos pri!itivos y solo cuando es 6le&al8 (de un tipo de ran&o !enor a otro de ran&o !ayor) Castin& (conversin e:pl'cita): re9uerida por el pro&ra!ador y 9ue i!plica pArdida de precisin Conversin auto!7tica para 2trin&: un tipo puede ser convertido a 2trin& auto!7tica!ente v'a M
ystem.out.println(!"ola# $ %&.'(f $ )true)*
43

Algoritmos y Estructura de datos III

Ar&u!entos de la linea de co!andos


. import java.io.*; 2 3 public class @ibo2ava: / { 0 ,** 3 * Aectura de param. desde la linea de comandos. 4 *, 5 public static void main( String[] args ){ 6 .8 i( ( args.lengt& % : ) { .. System.out.println(BCebe ingresar dos valores..B); .: System.eDit(.); .= # ./ .0 E ? 7nteger.parse7nt(arg[8]); .3 F ? 7nteger.parse7nt(arg[.]); ....
Algoritmos y Estructura de datos III
44

@ectura desde la Consola


private static int leer>int() { Fu((eredGeader stdin ? neH Fu((eredGeader( neH 7nputStreamGeader(System.in)); String linea ? BB; int n ? 8; H&ile ( true ) { try { System.out.print(B7ntroduIca un valor enteroJB); linea ? stdin.readAine(); n ? 7nteger.parse7nt(linea); breaK; # catc& (LDception e) { System.out.println(BLrror...intente de nuevoB); # # return n;
45

Algoritmos y Estructura de datos III

@ectura desde la consola (!7s sencilla)


import java.util.*; ... .. class ..{ private static int leer>int() { int n; Scanner s ? neH Scanner(System.in); n ? s.neDt7nt(); return n; # #

Algoritmos y Estructura de datos III

46

)structuras de control

"er!iten el ca!bio del 0lu*o de e*ecucin de un pro&ra!a. ,os posibles tipos:

Condicionales o de decisin : per!iten seleccionar un tro+o de cdi&o (i04 i0Lelse4 sDitc5) #teracin: per!iten repetir una porcin de cdi&o (D5ile4 0or4 doLD5ile).

Algoritmos y Estructura de datos III

47

)structuras de control
Condicionales
if ( %eDpresion>booleana' ) %sentencia'; if ( %eDpresion>booleana' ) { %sentencia'; %sentencia'; ... #
Algoritmos y Estructura de datos III
48

#loque

)structuras de control
Condicionales
if ( %eDpresion>booleana' ) %sentencia' M %bloNue>sentencias' else %sentencia' M %bloNue>sentencias'

Algoritmos y Estructura de datos III

49

)structuras de control
Condicionales
if ( %eDpresion>booleana' ) %sentencia' M %bloNue>sentencias' else if ( %eDpresion>booleana' ) %sentencia' M %bloNue>sentencias' else if ( %eDpresion>booleana' ) %sentencia' M %bloNue>sentencias' .. else %sentencia' M %bloNue>sentencias'
Algoritmos y Estructura de datos III
50

)structuras de control
Condicionales L sDitc5

"er!ite la seleccin de varios blo9ues se&Pn el contenido de una e:presin 6entera8 o una cadena (desde la versin .).
switch( %eDpresion>entera>cadena' ){ case %constante>entera>cadena>.'J statement.;,, statement:;,,bloNue . break; case %constante>entera>cadena>:'J statement.;,, statement:;,,bloNue : break; defaultJ statement.;,, statement:;,,bloNue = #

Algoritmos y Estructura de datos III

51

)structuras de control
Condicionales L sDitc5

Java evalPa pri!ero la e:presin del sDitc5 y salta a la secuencia de sentencias del case 9ue 5ace !atc5. Ki*arse 9ue la secuencia no tiene 6llaves8.. 2e e*ecuta las sentencias 5asta 9ue se encuentre un 6brea<8 (;J;: el brea< es opcionalZZZ). 2i nin&Pn case coincide entonces se e*ecuta la secuencia de sentencias asociadas con el de0ault. @a clausula de)ault es opcional
52

Algoritmos y Estructura de datos III

Condicionales

)structuras de control
sDitc5

)*ercicio (co!pletar...)

2e lee un nP!ero 14 L1 o cero y se debe i!pri!ir la e:presin 6Cero84 6>e&ativo8 o 6"ositivo8 se&Pn el valor.
switch( n ){ case 8J System.out.println(9ero"); break; case .J System.out.println(1ositivo"); break; case +.J System.out.println(Oegativo"); #

Algoritmos y Estructura de datos III

53

)structuras de control
Fepeticin L D5ile
while ( %eDpresion>booleana' ) %sentencia' M %bloNue>sentencia'

Caracter'sticas:

Ciclo se e*ecuta 0L> veces. 2i la e:presin booleana es true entonces se e*ecuta la sentencia o el blo9ue de sentencias

Algoritmos y Estructura de datos III

54

)structuras de control
Fepeticin L doLD5ile
do { %lista>sentencias' # while ( %eDpresion>booleana' );

Caracter'sticas

@a lista de sentencias se e*ecuta 1L> veces $ientras la e:presin es true se !antiene en el ciclo

Algoritmos y Estructura de datos III

55

Fepeticin

)structuras de control

doLD5ile ()*ercicio)

#!pri!ir la cantidad de d'&itos 9ue tiene una variable entera n. A9u' una posible solucin en Java.
c ? 8; ,,Ln c dejamos la cantidad de dPgitos do { n ? n , .8; ,,n es el nQmero cRR; # while ( n ' 8 ); ,, 7mprimir c

Algoritmos y Estructura de datos III

56

)structuras de control
Fepeticin 0or
for ( %eDpr>.'; %eDpr>:'; %eDpr>=' ) %sentencia'M%bloNue>sentencia'

@a se!7ntica del 0or es:


<expr_1> while ( <expr_2> ){ %sentencia' M %bloNue>sentencia' <expr_3>; #
Algoritmos y Estructura de datos III
57

Parte IV

Arre&los Cadenas

Algoritmos y Estructura de datos III

58

Cadenas..

)s un ob*eto.. es decir no es un tipo pri!itivo. 2on din7!icos. )s tratado por el co!pilador de una !anera especial en relacin a los otros 6ob*etos8 de otras clases. "or e*e!plo el trata!iento de la concatenacin ( M ) y otras cosas (es in!utable.. +ue es estoJ) @os caracteres co!ponentes son ?nicode no A2C##. 2u tipo es 2trin&
String s String s ? neH String(Hola"); ? Hola"; ,, 1re(erible para constantes. ,, Ll compilador optimiIa el espacio.
59

String s. ? Hola"; Algoritmos y Estructura de datos III

Cadenas (!Atodos usuales)

Algoritmos y Estructura de datos III

60

Cadenas
)*e!plo: dada una cadena i!pri!ir un 6L8 (&uin) entre cada caracter de la !is!a. A9u' una posible solucin en Java.
String s ? HSAE"; for ( int k= ; k ! s.len"th(#; k$$ ) System.out.print(s.c&arEt(K) R +");
Este cdigo produce para la cadena ;.OL/< 7 .=O=L=/=5 haga +ue no apare>ca el ?ltimo guin (.=O=L=/)% Qu pasa cuando hago <= s.length()?
Algoritmos y Estructura de datos III
61

Cadenas

e*ercicios

@eer una cadena4 desde la Consola4 e i!pri!ir todo en !ayPsculas4 lue&o todo en !inPsculas4 lue&o el pri!er caracter en !ayPscula y el resto en !inPsculas. Codi0icar un !Atodo 9ue reciba dos cadenas 21 y 22 y retorne la pri!era posicin4 en 214 donde 22 se encuentra en 21. Asu!ir 9ue 21 XO 22. Fetornar L1 en caso de 9ue no e:iste 22 en 21 o 9ue 22 X 21. Codi0icar un !Atodo comprimirEspacios 9ue reciba un cadena 2 y retorne otra donde se 5aya convertido los caracteres de espacio conti&uos de 2 en un solo caracter de espacio.

)*e!ploJ

S ? Hola

Nue

tal" ++' Hola Nue tal".


62

Algoritmos y Estructura de datos III

Arre&los

^RuA es un arre&loJ ,ato estructurado cuyos co!ponentes son del !is!o 6tipo8. ):isten en todo los len&ua*es y es una 0acilidad 9ue se !e brinda para solucionar !7s 07cil!ente al&unas cuestiones. _a lo vi!os con el !Atodo !ain
public static void main (String [] arg)

,eclaracin:
%tipo>dato' [] %identi(icador' int [] E ; ,, Erreglo de ints. String [] 1alabras; ,, Erreglo de 9adenas.

Algoritmos y Estructura de datos III

63

Arre&los

?n arre&lo es en realidad un 6ob*eto8 para Java. )s un tipo de dato 6re0erencia8 (un puntero) Cuando yo declaro un arre&lo 0i*arse 9ue no le di&o la cantidad de ele!entos 9ue contendr7 (co!o en C o CMM). #nstanciacin (en Java 9uiere decir 6creacin8)
%var>Erreglo' ? new %tipo>dato>arreglo' [%tamaTo'] int [] E; E ? new int [.88] ; ,, E a&ora tiene .88 ints.

@a variable de tipo arre&lo declarada pero no instanciada contiene tiene por de0ecto el valor 6null84 9ue es co!o decir 6no apunta a nada por ahora8.
64

Algoritmos y Estructura de datos III

Arre&los

Acceso a co!ponentes:
%var>Erreglo'[%indice'] int [] E ? new int[.88] ; ,,podemos inicialiIar. E [8] ? .88 ; ,,(ijarse Nue el .er. elemento esta en 8.

#nstanciacin (7nicialiIaciUn
int [] E ? {.8<:8<=8</8<08#;

estVtica)

String [] 1alabras ? {Hola"< Nue"< tal"#; boolean [] Gesultados ? {true< (alse< true< true#;

Cantidad de ele!entos:
%var>Erreglo'.len"th ,,@ijarse Nue no tiene ()
65

Algoritmos y Estructura de datos III

Arre&los

)*e!plo: int `a A O new int`100aQ


A

O6&eto /rray
Algoritmos y Estructura de datos III
66

Arre&los

e*ercicios

#!pri!ir el !ayor4 el !enor y el pro!edio de un arre&lo de co!ponentes enteros (int). @eer la cantidad de ele!entos a introducir4 lue&o cada co!ponente del !is!o (usar leerIint()) Codi0icar un !Atodo 9ue reciba un arre&lo de enteros y los ordene. (/+u@ veremos el paso de arreglo a mAtodos y su )uncionamiento). Codi0icar un !Atodo 9ue reciba un arre&lo A y un entero > y retorne true si > esta en A.

Algoritmos y Estructura de datos III

67

Arre&los !ultidi!ensionales
int [] [] E ? { { .8<:8<=8</8<08# < { .8<:8<=8</8<08# #; System.out.prinltn(E[8][8]); ,, 7mprimirPa .8 String [] [] 1alabras ? { {Hola"#< {Nue"#< {tal"##; ,, imprimir todo el contenido de 1alabras. for (int (?8; ( % 1alabras.lengt&; (RR ) for ( int c?8; c % 1alabras[(].lengt&; cRR ) System.out.println(1alabras[(][c]);

Algoritmos y Estructura de datos III

68

Arre&los !ultidi!ensionales e*ercicio de pr7ctica

@eer los co!ponentes para un arre&lo bidi!ensional de enteros de 10:20. Codi0icar un !Atodo 9ue reciba el arre&lo !ultidi!ensional y retorne el valor mini!a- de las colu!nas. !inima- es el valor !'ni!o de los !7:i!os de las colu!nas.

Algoritmos y Estructura de datos III

69

Parte V

Conceptos b7sicos sobre "ro&ra!acin ;rientada a ;b*etos. Clases. ,e0inicin. ?so. Caracter'sticas en Java. )*ercicios sencillos de de0inicin de clases y de uso.

Algoritmos y Estructura de datos III

70

Fepaso

Cadenas. Fecordar 9ue es un tipo de dato 9ue en Java es in!utable.

Fecordar la di0erencia entre utili+ar new y asi&nacin directa con el operador = )s un tipo de dato estructurado de ta!ao din7!ico. )s !utable. "ara Java es un tipo de O6&eto particular. )l pri!er ele!ento sie!pre e!pie+a en la posicin cero. 2e 6instancia8 (recordar 9ue es esto) con el operador new

Arre&los.

Algoritmos y Estructura de datos III

71

Conceptos b7sicos sobre ";;

Fecordar 9ue la ;; es un tAcnica cuyo ob*etivo es de al&una 0or!a 6!odelar8 el !undo real de una 0or!a !7s natural. ,etr7s de esto e:iste una serie de venta*as:

)scribir !enos4 !e*orar el !anteni!iento del cdi&o4 aprovec5ar el cdi&o ya escrito entre otras cosas.

):isten tres caracter'sticas b7sicas para 9ue un len&ua*e sea considerado orientado a ob*etos:

Encapsulamiento de datos ( asociar dato y proceso aplicables a los datos). Ocultamiento de in)ormacin. .erencia . Enlace dinBmico (poli!or0is!o).
72

Algoritmos y Estructura de datos III

Conceptos b7sicos

Clase: se puede decir 9ue es la de0inicin de las caracter'sticas de cierto tipo de ob*eto del !undo real. "or e*e!plo 4ersona es una clase. /uto es una clase. !"#eto: es una instancia 6viva8 de cierta clase.

4ersona es la clase y Juan 4ere> es una instancia de la clase "ersona.

@as clases tienen dos co!ponentes 0unda!entales:

Atributos (caracter'sticas del ob*eto) o datos !ie!bros

)n "ersona ser'a: apellido4 no!bre4 estatura4 peso4 etc. )n "ersona ser'a: ca!biar"eso()4 ca!biarApellido()4 etc.
73

$Atodos (9uA puedo 5acer o 9ue puede 5acer el ob*eto).

Algoritmos y Estructura de datos III

2inta:is de creacin de clases

"ara de0inir un clase en Java


%modi(icador' class %identi(icador>clase' { %atributos'* %constructores'* %mWtodos'* #

donde

Y!odi0icadorX indica es el !odi0icador de acceso a la clase (public4 private4 protected4 pac<a&e)

Algoritmos y Estructura de datos III

74

)*e!plo: "ersona

RuA caracter'sticas co!unes tienen las "ersonas (atributos) RuA acciones pueden 5acer las personas o pueden aplicarse a las "ersonas. (!Atodos aplicables).

"ersona:

apellido4 no!bre4 cedula4 0ec5a de naci!iento4 etc. i!pri!ir sus datos4 asi&nar su nuevo no!bre4 ca!biar su cAdula4 corre&ir su no!bre4 etc4 etc.

RuA pode!os 5acer

Algoritmos y Estructura de datos III

75

"ersona. ,e0inicin Java


public class 1ersona { private String nombre ; private String apellido ; private String cedula; ,* 9onstructor de persona *, %ersona ( String nom< String ap< String ced ) { t&is.nombre ? nom; t&is.apellido ? ap; t&is.cedula ? ced; # public void imprimirCatos(){ System.out.println(9edula J R t&is.cedula R EpellidoJ R t&is.apellido R Oombre J R t&is.nombre ); # ......

Algoritmos y Estructura de datos III

76

?sando la clase "ersona


import 1ersona; ,, Oo es necesario si estoy en el mismo ,, directorio public class Xso1ersona { public static void main (String [] args ) { 1ersona per. ? neH 1ersona (."< 2uan"< 1ereI"); 1ersona per: ? neH 1ersona (:"< aria"< AopeI"); per..imprimirCatos(); per:.imprimirCatos(); # #

per%
ced$la : 1 apellido: Juan nom"re: "ere+

per&
ced$la : 2 apellido: $aria nom"re: @ope+

$ersona imprimirDatos()
77

Algoritmos y Estructura de datos III

Bariables de instancia vs. Bariables de clase

Algoritmos y Estructura de datos III

78

Bariables de instancia

>o tienen el !odi0icador 6static8 por delante.


public class Euto { private int color; private int cant1uertas; private String private String .....

arca; odelo;

)stas variables e:isten por cada instancia creada de la clase (por cada new 9ue 5a&o)

Algoritmos y Estructura de datos III

79

Bariables de clase

%ienen el !odi0icador 6static8 por delante.


public class Euto { private static int cantidad>Eutos>Ce(inidos; ..... ,, Ls una sola instancia para toda la clase.

Clase
Instancias
,atos de #nstancia ,atos de #nstancia ,atos de #nstancia

,atos est7ticos

Algoritmos y Estructura de datos III

80

$Atodos de instancia vs. $Atodos est7ticos

M%todos de instancia: actPan sobre variables de instancia o variables de clase. >o tienen 6static8 co!o !odi0icador. M%todos de clase: actPan solo sobre variables de clase y pueden ser invocados sin necesidad de instanciar nin&Pn ob*eto.

)*e!plos:

2yste!.out.println(...) EE $irar en la docu!entacin la clase 2yste! EE y el dato !ie!bro out. #nte&er.parse#nt(..) EE $irar la docu!entacin.

Algoritmos y Estructura de datos III

81

Accesos a variables y !Atodos

public

Cual9uier clase puede acceder.

pac<a&e o 0riendly (cuando no se de)ine modi)icador este es el acceso otorgado)

"ueden acceder clases del !is!o pa9uete (y la !is!a clase) "ueden acceder solo clases 65i*as8 (y la !is!a clase) 2olo la propia clase puede acceder
82

protected

private

Algoritmos y Estructura de datos III

Constructores

)s un !Atodo especial 9ue tiene el !is!o no!bre de la clase. 2u ob*etivo es e*ecutar cdi&o de iniciali+acin sobre el ob*eto 9ue se est7 creando. 2e le lla!a *usto en el !o!ento de instanciar al ob*eto. 2i no coloca!os nin&Pn constructor Java coloca uno por de0ecto. "ueden e:istir !uc5os constructores 9ue se di0erencian por la cantidad y tipo de los par7!etros 9ue recibe .

Algoritmos y Estructura de datos III

83

Constructores L e*e!plo
definici&n

public class 1ersona ... %ersona ( ) {

apellido ? "; nombre ? "; cedula ? ";

%ersona (String a< String n< String c) { apellido ? a; nombre ? n; cedula ? c; # ....
Algoritmos y Estructura de datos III
84

Constructores L e*e!plo
lla!ada
import 1ersona; public class Xso1ersona { ....... public static void main (String [] args ) { 1ersona per. ? neH 1ersona(); 1ersona per: ? neH 1ersona (."<"2uan"<"1ereI"); .......

Algoritmos y Estructura de datos III

85

,e0inicin de clase L e*ercicio

,e0ina!os una clase Craccin4 cuyos datos !ie!bros son el nu!erador y el deno!inador. $Atodos a de0inir:

!2: : un !Atodo est7tico (por9uA est7ticoJ) 9ue dado dos nP!eros enteros retorna el $'ni!o Co!Pn ,ivisor entre a!bos. #!pri!ir en 0or!a de 0raccin 2i!pli0icar. 2i!pli0ica la 0raccin. 2u!ar con otra 0raccin. Festar con otra 0raccin. ,ividir con otra 0raccin. $ultiplicar con otra 0raccin. Ca!biar el nu!erador y el deno!inador.
86

Algoritmos y Estructura de datos III

?so de la clase Kraccion


import @raccion; public class Xso@raccion { ....... public static void main (String [] args ) { @raccion (. ? new @raccion(.8<68); @raccion (: ? new @raccion(0<4); @raccion (= ? new @raccion(5</8); (..imprimir(); (:.imprimir(); (..sumar((:); ,, Suma .8,68 R 0,4 y deja en (. (..imprimir();
Algoritmos y Estructura de datos III
87

#ndicaciones sobre Kraccion


$C, pseudocdi&o obvio
subrutina 9C (a< b J numerico ) retorna numerico var smcd J numerico; salirJ logico ? OS inicio )l $C, de dos nP!eros es el !7:i!o si ( a % b ) nP!ero 9ue divide e:acta!ente a smcd ? a a!bos. "or e*e!plo el $C, entre 2. y sino smcd ? b 21 es /. fin&si mientras ( smcd ' . and salir ?? OS ) si ( a ; smcd ?? 8 and b ; smcd ?? 8 ) salir ? S7 sino scmd ? scmd Y . fin&si fin&mientras retornar smcd fin&'() Algoritmos y Estructura de datos III
88

$as sobre Craccion

Fecordar 9ue:
4 5 (3=,6)*4 R (3=,4 * 5) /6 R 4: .:. +++ R +++ ? ++++++++++++++++++++++ ? ++++++++ ? ++++ 6 4 3= ( 9 ) /6 /6 9 a * b (a<b) ? +++++++++ 9C(a<b) ,, VDimo 9omQn Qltiplo

4 5 (3=,6)*4 + (3=,4 * 5) /6 + 4: +:= +++ + +++ ? ++++++++++++++++++++++ ? ++++++++ ? ++++ 6 4 3= ( 9 ) /6 /6 4 5 +++ * +++ ? 6 4 4 5 +++ , +++ ? 6 4 03 +++++ 3= /6 (4*4) +++++++++ 4: (6*5)
89

Algoritmos y Estructura de datos III

)*ercicio

,e0ina la clase 'ista(nla)adaSimple con las si&uientes operaciones:


A&re&ar ( por el 0rente de la lista ) Fe!over ( del 0rente de la lista ) #terar sobre la lista ( !Atodos: has'e-t5 ne-t ) ne-t() retorna el dato actual y avan+a. has'e-t() retorna true si 5ay un dato si&uiente
dato sigte dato null sigte

cabe'a
Algoritmos y Estructura de datos III
90

)*e!plo de uso de ListaEnla>adaSimple

)*e!plo de a&re&ar a un lista varios no!bres.


AistaLnlaIadaSimple amigos ? new AistaLnlaIadaSimple(); amigos.agregar(2uan"); amigos.agregar( aria"); amigos.agregar(1edro"); ,, E&ora listamos el contenido for ( ; amigos.&asOeDt(); ) System.out.println((String)amigos.neDt() );

Algoritmos y Estructura de datos III

91

Parte VI

(erencia. Conceptos b7sicos y 0or!a de aplicarlo en Java. )*ercicios sencillos de de0inicin de clases y subLclases.

Algoritmos y Estructura de datos III

92

(erencia (usaremos poco en el curso)

!"#etivo principal: reutili+acin de cdi&o

?no de0ine caracter'sticas &enerales en una clase y se 5eredan en las clases 5i*as

@as clases 5i*as 5eredan todas las propiedades y !Atodos4 pueden de0inir sus propios atributos y !Atodos o ca!biar 0uncionalidades ya e:istentes.

,e0iniciones

superclases subclases o clases 5i*as

Algoritmos y Estructura de datos III

93

0i*arse 9ue se 0or!a una *erar9u'a

)*e!plo
(igura

(igura$lana

(iguraEspacial

Circulo

)ri*ngulo

Esfera

Cubo

Algoritmos y Estructura de datos III

94

(erencia en Java
public class *i"ura { private String nombre; public (loat dibujar (); # public class *i"ura%lana eDtends @igura{ private int D; ,, 9oordenada private int y; ,, public (loat super(icie(); # public class (irculo eDtends @igura1lana { private (loat diametro; public (loat super(icie () { (loat radio ? diametro,:; return at&.17*radio*radio; # ...
Algoritmos y Estructura de datos III
95

Al&unas cuestiones de Java

%odos los !Atodos son virtuales (!odi0icables en las clases 5i*as) e:cepto cuando se coloca el !odi0icador 6)inal8. 2olo e:iste (erencia si!ple (en CMM 5ay 5erencia !Pltiple). (8na clase puede tener un solo ;padre<) Cual9uier clase en Java sie!pre es 5i*a de la clase ;b*ect ( esta clase tiene al&unas 0uncionalidades ya de0inidas). @os constructores no se 5eredan.
96

Algoritmos y Estructura de datos III

)*e!plo de (erencia

(xtender la clase Persona: de 0or!a 9ue a5ora ten&a!os tres clases derivadas. )!pleado y este ten&a dos subclases 9ue sea ;0icinista y Bendedor.
$ersona Empleado

+ficinista

,endedor

Algoritmos y Estructura de datos III

97

Parte VII

):cepciones. Concepto. ,e0inicin y uso de e:cepciones. A&re&ar e:cepciones a la *erar9u'a de clases i!ple!entada.

Algoritmos y Estructura de datos III

98

$ane*o de ):cepciones

^RuA es una e:cepcinJ

)vento inusual 9ue ocurre en tie!po de e*ecucin y 9ue causa una interrupcin en el 0lu*o nor!al de e*ecucin )*e!plos:

,ivisin por cero Acceso 0uera de los l'!ites de un arre&lo )ntrada inv7lida "roble!as en el disco Arc5ivo no e:iste >o 5ay !7s !e!oria >o 5ay cone:in de red )tc4 etc

Algoritmos y Estructura de datos III

99

)*e!plo de una e:cepcin


1 2 3 / 0 2 3

class )ivision%or(ero + public static void main(,trin" ar"s-.# + System.out.println(=,8); System.out.println(/ue"o de la division."); 1 1 44 (omo reacciona este pro"rama5

Algoritmos y Estructura de datos III

100

):cepcin

2alida del e*e!plo

LDception in t&read BmainB java.lang.Erit&meticLDceptionJ , by Iero at Civision1orZero.main(Civision1or9ero.javaJ=)

)n Java el !ane*ador de e:cepciones por de0ecto:


)s prove'do por el runti!e #!pri!e la descripcin de la e:cepcin. #!pri!e la lla!ada de los !Atodos 9ue caus la e:cepcin %er!ina el pro&ra!a
101

Algoritmos y Estructura de datos III

):cepciones

^RuA ocurre cuando e:iste una e:cepcin en un !AtodoJ

2e crea un 6ob*eto8 de ):cepcin 9ue es pasado al intArprete. )sto se lla!a 6lan+a!iento de una e:cepcin8 (thro*). )l ob*eto de e:cepcin contiene in0or!acin acerca del error 9ue ocurri. )l Funti!e busca en la secuencia de lla!adas el !Atodo 9ue !ane*ar'a la e:cepcin4 0inal!ente si no lo encuentra el pro&ra!a ter!ina.
102

Algoritmos y Estructura de datos III

):cepciones

Algoritmos y Estructura de datos III

103

):cepciones

2i e:iste un !Atodo 9ue pueda !ane*ar la e:cepcin

)l Funti!e pasa el ob*eto de ):cepcin a este !Atodo. )l !Atodo en este caso de0ine las e:cepciones 9ue se atrapar7n. (catch)

Algoritmos y Estructura de datos III

104

):cepciones

Algoritmos y Estructura de datos III

105

):cepciones L Tene0icios

>o !e+cla!os el !ane*o de errores con el cdi&o 6nor!al8. @os errores pueden propa&arse "ode!os a&rupar o cate&ori+ar los tipos errores (ya 9ue las e:cepciones son ob*etos de la clase E-ception)

Algoritmos y Estructura de datos III

106

):cepciones

Atrapando e:cepciones
tr6 { %codigo>protegido' # catch (%-ipoLDcepcion' %[ariable') { % anejador de la eDcepciUn' # ... # catch (%-ipoLDcepcion' %[ariable') { % anejador de la eDcepciUn' #

Algoritmos y Estructura de datos III

107

):cepciones
1 : = / 0 3 4 5 6 .8 .. .:

tryLcatc5 (e*e!plo)

public class CivisionFy9ero { public static void main(String args[]) { try { System.out.println(=,8); System.out.println(Auego de la division."); # catc& (Erit&meticLDception eDc) { ,,Civision por Iero es Erit&meticLDception System.out.println(eDc); # System.out.println(Auego de la eDcepciUn."); # #
108

Algoritmos y Estructura de datos III

):cepciones
. . : = / 0 3 4 5 6 .8 .. .:

!Pltiples catc5

public class

ultiple9atc& {

public static void main(String args[]) { try { int den ? 7nteger.parse7nt(args[8]); System.out.println(=,den); # catc& (Erit&meticLDception eDc) { System.out.println(Civisor (ue 8."); # catc& (Erray7ndeDSutS(FoundsLDception eDc:) { System.out.println(@altan argumentos"); # System.out.println(Auego de la eDcepciUn."); # #
109

Algoritmos y Estructura de datos III

):cepciones L 0inally
tr6 { %codigo>protegido' # catch (%-ipoLDcepcion' %7denti(icador') { % anejador>de>la>eDcepcion' # ... # finall6 { %(inaliIaciUn' #

Cdi&o se e*ecuta antes de 9ue el blo9ue tryLcatc5 ter!ine (e:ista o no e:cepcin)

Algoritmos y Estructura de datos III

110

@an+ar e:cepciones

?n !Atodo sie!pre debe atrapar las e:cepciones o listar las 9ue va a de*ar pasar. ):cepto para las clases )rror o Funti!e):ception o sus derivados. 2i un !Atodo puede causar una e:cepcin y no la atrapa entonces debe !encionar en su de0inicin 9ue tipo de e:cepciones de*ar7 pasar (usando la claPsula t5roDs)
%tipo' %Oombre> etodo' (%lista>parametros') t&roHs %Aista>LDcepciones>no>atrapadas' { %cuerpo>mWtodo' #

Algoritmos y Estructura de datos III

111

)*e!plo de t5roDs..
public static int leer>int ( ) { Fu((eredGeader stdin ? neH Fu((eredGeader( neH 7nputStreamGeader (System.in)); String linea ? BB; int n ? 8; H&ile ( true ) { try { linea ? stdin.readAine(); n ? 7nteger.parse7nt(linea); breaK ; # catc& ( LDception e ) { ,,Oo &acemos nada # return n;
112

Algoritmos y Estructura de datos III

)*e!plo de t5roDs
public static int leer>int ( ) throws 78ception { Fu((eredGeader stdin ? neH Fu((eredGeader( neH 7nputStreamGeader (System.in)); String linea ? BB; int n ? 8; linea ? stdin.readAine(); n ? 7nteger.parse7nt(linea); return n;

public static void main(String[] args) throws 78ception { int n ? leer>int(); System.out.println(Ll valor leido (ue R n); #

Algoritmos y Estructura de datos III

113

Creando nuestro propio tipo de e:cepcin

"or e*e!plo en el caso de Cecha crea!os una e:cepcin en caso de 9ue los par7!etros de an5o4 !es y d'a son incorrectos. Asu!ir 9ue el ao debe estar entre /00 y 20//4 el !es debe estar en 1 y 12 y el d'a debe estar entre 1 y 31.

@a cantidad !7:i!a para cada !es (de enero a dicie!bre) es:


314 2G4 314 304 314 304 314 314 304 314 304 31.

"ara Kebrero es 2/ el tope si el ao es bisiesto. ?n ao es bisiesto si es !Pltiplo de H pero no de 100 (a no ser 9ue sea de H00).

Algoritmos y Estructura de datos III

114

)*e!plo de de0inicin
class @ec&a7nvalida e8tends LDception { @ec&a7nvalida ( String msg ) { super(msg); # # public class @ec&a {

public @ec&a ( int a< m < d ) t&roHs @ec&a7nvalida { si ( (ec&a es invalida .. ) { t&roH neH @ec&a7nvalida(Aa (ec&a es incorrecta"); # # .... Algoritmos y Estructura de datos III
115

@a *erar9u'a de ):cepciones en Java

%5roDable

)s la ra'+ de todas las e:cepciones ,os subclases


)rror : &eneradas por el propio runti!e4 ):ception : las 9ue pueden ser 6controladas8 por el pro&ra!ador.

Algoritmos y Estructura de datos III

116

Algoritmos y Estructura de datos III

117

A tener en cuenta

):isten dos tipos de e:cepciones:

C5ec<ed:

)l co!pilador detecta 9ue sean atrapadas o de*adas pasar. ,erivan de E-ception e-cepto DuntimeE-ception 2e re0ieren a e:cepciones 9ue no se detectan en tie!po de co!pilacin Error5 DuntimeE-ception (por e*e!plo division por cero).

?nc5ec<ed

Algoritmos y Estructura de datos III

118

Parte VIII

Clases *"stractas. ?so y de0inicin en Java. Interface. Concepto. ?so y de0inicin en Java. )*e!plo sencillo de uso. +enerics. Concepto. ?tili+acin. 2inta:is y e*e!plos sencillos.

Algoritmos y Estructura de datos III

119

Clases abstractas

?na clase abstracta es 9ue a9uella 9ue tiene uno o !7s !Atodos abstractos4

?n !Atodo es abstracto si no tiene i!ple!entacin o cuerpo public abstract float "et,ueldo(#;

?na clase abstracta ta!biAn puede ser de0inida co!o:


public abstract class 7mpleado +..1;

)stas clases no pueden ser instanciadas. 2us descendientes tienen 9ue i!ple!entar los !Atodos abstractos. "er!iten 6de0inir8 0uncionalidades b7sicas 9ue deben tener las clases 5i*as4 sin decir todav'a 6co!o8.
120

Algoritmos y Estructura de datos III

Clases abstractas

?n e*e!plo de esto puede aplicarse a la clase Empleado. )n la e!presa no e:iste un )!pleado 9ue no sea ;0icinista4 Bendedor u otro. "ero necesita!os de0inir las 0uncionalidades &enerales de )!pleado para tener !Atodos 9ue actPen sobre cual9uier tipo de )!pleado. )*e!plos:

Ca!biar en la clase )!pleado los !Atodos de getSueldo y getTipoEmpleado aadiAndoles el !odi0icador a6stract RuA pasar'a si intenta!os instanciar la clase )!pleadoJ
Lmpleado e ? neH Lmpleado(."< -orres"< 2uan");

Algoritmos y Estructura de datos III

121

#nter0aces

)s una 0or!a de de0inir el co!porta!iento de las clases4 es lo 9ue se deno!ina 6so)t*are por contrato8. )s co!o una clase abstracta pero sin nin&una i!ple!entacin. 2e pueden de0inir en una inter0a+ !Atodos y constantes. %odos los !Atodos son abstractos4 es decir4 sin i!ple!entacin ?na clase concreta puede 6i!ple!entar8 una inter0ace4 lo 9ue le obli&a concretar los !Atodos de0inidos en la inter0a+. ?na clase puede i!ple!entar !7s de una inter0ace.
122

Algoritmos y Estructura de datos III

#nter0ace
(#emplo de definici&n
public inter(ace Serial { int siguiente(); void reset(); void reiniciar(int D); # public class Ce+E+Cos implements Serial { private int actual; private int inicio; public 1orCos(){ public void reset(){ reset(); actual ? 8; inicio ? 8; # # public int siguiente(){ public void reiniciar(int D){ actual R? :; actual ? D; return actual; inicio ? D; # # # ,* @in de 1orCos *, Algoritmos y Estructura de datos III
123

#nter0ace
)*e!plo 2
public inter(ace LmiteGuido { public void &acerGuido(); # public class Humano implements LmiteGuido { private String nombre; public Humano (String s) { t&is.nombre ? s); public void &acerGuido() { System.out.println(HSAE< yo puedo &ablar y soy R nombre); #

public class Euto implements LmiteGuido { public void &acerGuido() { System.out.println(GGGGGGGG "); # # Algoritmos y Estructura de datos III
124

#nter0ace
public class 1erro implements LmiteGuido { public void &acerGuido() { System.out.println(\EX+\EX"); # # public class \ato implements LmiteGuido { public void &acerGuido() { System.out.println( 7EXXXX"); # # public class Sirena implements LmiteGuido { public void &acerGuido() { System.out.println(XXXXXXHHHHH"); # #

Algoritmos y Estructura de datos III

125

#nter0ace
public class 9iudad { private ErrayAist%LmiteGuido' cosas; public 9iudad () { cosas ? new ErrayAist%LmiteGuido'(); # public void agregar(LmiteGuido e) { cosas.add(e); # public void escuc&arGuidos() { (or ( LmiteGuido e J cosas ) e.&acerGuido(); # #

Algoritmos y Estructura de datos III

126

#nter0ace
public class Xso9iudad { public static void main( String [] args ) { 9iudad c ? neH 9iudad(); LmiteGuido r ? neH \ato(); ,,1uedo usar como tipo". c.agregar(r); c.agregar(neH 1erro()); c.agregar(neH Humano( aria")); c.agregar(neH Humano(Auis")); c.agregar(neH Sirena()); c.agregar(neH Euto()); # # c.escuc&arGuidos();

Algoritmos y Estructura de datos III

127

#nter0ace Lbene0icios

$uy interesante cuando se 5ace traba*o en e9uipo. Fevelar los re9ueri!ientos no la i!ple!entacin Concepto de encapsula!iento @a i!ple!entacin puede ca!biar sin a0ectar a los usuarios )l 9ue usa la inter)ace no necesita de i!ple!entacin tener la i!ple!entacin durante el desarrollo. "ode!os relacionar clases 6no conectadas8 (co!o el e*e!plo). ,e al&una !anera suple la 5erencia !Pltiple.
128

Algoritmos y Estructura de datos III

#nter0ace

"ara de0inir una inter0ace


public inter(ace %identi(icador' { ,, mWtodos sin implementaciUn #

?na inter0a+ puede e:tender otra


public interface LmiteGuido as@uerte e8tends LmiteGuido { void &acerGuido@uerte(); #

@as inter0aces no son parte de la *erar9u'a de clases


129

Algoritmos y Estructura de datos III

3enerics

"roveen abstraccin sobre tipos

2on clases4 inter0aces o !Atodos 9ue son para!etri+ados por tipos

$e per!iten lo&rar i!ple!entaciones independiente del tipo de dato 6base8 a utili+arse $uy usado en Colecciones de ob*etos.

Algoritmos y Estructura de datos III

130

3enerics
Ejemplo -Lista simplemente enlazada de!inimos una lista de tipo genrico
public class Oodo%L' { public L dato; public Oodo%L' neDt; public Oodo ( L d ) { t&is.dato ? d; # # public class AistaLnlaIada %L' private Oodo%L' &eader ? null; public L agregar Oodo%L' tmp &eader &eader.neDt # # Algoritmos y Estructura de datos III ( ? ? ? L dato ) { &eader; neH Oodo%L'(dato); tmp;
131

-ecibe como par*metro un tipo

3enerics
,* Ljemplo de uso de nuestra AistaLnlaIada* , public static void main ( String [] args){ /ista7nla9ada%String' AS ? neH /ista7nla9ada%String'(); AS.agregar(BHolaB); AS.agregar(B]ue talB); AS.agregar(B9omo estanB); #

Algoritmos y Estructura de datos III

132

3enerics
$Atodos &enAricos
)*e!plo de un !Atodo &enArico 9ue encuentra el !7:i!o en un arre&lo de tipo &enArico pero con cierto tipo de restricciones. public static !T e8tends (omparable !5 super T:: T find'a8( T-.a # { int maD7ndeD ? 8; (or( int i ? .; i % a.lengt&; iRR ) i(( a[ i ].compare-o( a[ maD7ndeD ] ) ' 8 ) maD7ndeD ? i; return a[ maD7ndeD ]; #

Algoritmos y Estructura de datos III

133

3enerics
public static void main( { String [ ] sA ? 7nteger [ ] iA ? Couble [ ] (A ? ,trin" - . ar"s # { B2oeB< BFobB< BFillB< BZeKeB #; { .8< :8< =8< 08#; {.8.:8< .8.=8=< :=.::#;

System.out.println( (ind aD(sA) ); System.out.println( (ind aD(iA) ); System.out.println( (ind aD((A) ); #

Algoritmos y Estructura de datos III

134

)*e!plos utili+ando 3enerics


Array@ist
public class \enericSimpleErrayAist%-' { private static final int 9E1E97CEC>1SG>CL@L9-S ? .8; private int t&eSiIe; private T [ ] t&e7tems; ,** * 9onstructor por de(ecto *, public \enericSimpleErrayAist( ) { clear( ); # ...
135

Algoritmos y Estructura de datos III

)*e!plos utili+ando 3enerics


Array@ist
,** * Getorna en el nQmero de items en la colecciUn *, public int siIe( ) { return t&eSiIe; # ,** * Getorna el item en la posiciUn idD *, public - get( int idD ) { if( idD % 8 MM idD '? siIe( ) ) throw new Erray7ndeDSutS(FoundsLDception(B^ndice B R idD R B; siIe B R siIe( ) ); return t&e7tems[ idD ]; #
Algoritmos y Estructura de datos III
136

)*e!plos utili+ando 3enerics


Array@ist
.. ,** * 9ambiar el item de la posiciUn idD. Getorna el valor * anterior *, public - set( int idD< - neH[al ) { if ( idD % 8 MM idD '? siIe() ) throw new Erray7ndeDSutS(FoundsLDception( B7ndice B R idD R B; siIe B R siIe( ) ); - old ? t&e7tems[ idD ]; t&e7tems[ idD ] ? neH[al; return old;

# ..

Algoritmos y Estructura de datos III

137

)*e!plos utili+ando 3enerics


Array@ist
.. ,** * Egregar un item a la colecciUn< al (inal. *, public boolean add( - D ) { if (t&e7tems.lengt& ?? siIe() ) { - [ ] old ? t&e7tems; t&e7tems ? (- []) new Sbject[t&e7tems.lengt& * : R .]; for( int i ? 8; i % siIe(); iRR ) t&e7tems[i] ? old[ i ]; # t&e7tems[ t&eSiIeRR ] ? D; # .. return true;

Algoritmos y Estructura de datos III

138

)*e!plos utili+ando 3enerics


Array@ist
.. ,** * Gemueve el item de la colecciUn< se desplaIan * los componentes. *, public - remove( int idD ) { - removed7tem ? t&e7tems[ idD ]; for( int i ? idD; i % siIe( ) + .; iRR ) t&e7tems[ i ] ? t&e7tems[ i R . ]; t&eSiIe++; return removed7tem; # ..

Algoritmos y Estructura de datos III

139

)*e!plos utili+ando 3enerics


Array@ist
.. ,** * 7nicialiIa la colecciUn *, public void clear( ) { t&eSiIe ? 8; t&e7tems ? (- []) new Sbject[ 9E1E97CEC>1SG>CL@L9-S]; # # ,* @in de la clase

Algoritmos y Estructura de datos III

140

)*e!plos utili+ando 3enerics


Array@ist
public class Xso\enericAist { public static void main ( String [] args ) { \enericSimpleErrayAist%String' sa ? new \enericSimpleErrayAist%String'(); sa.add(BHolaB); sa.add(B]ue talB); (or ( int i ? 8 ; i %? sa.siIe() ; iRR) System.out.println(sa.get(i)); # #

Algoritmos y Estructura de datos III

141

Tiblio&ra0'a

):isten !uc5os libros de Java4 al&unos son:

Klana&an4 ,avid. Java in a >ut25ell4 1t5 edition. ;UFeilly. 2001. (En 6i6lioteca edicin antigua en espaol). ,eitel (. y ,eitel ". Co!o pro&ra!ar en Java. ( en Ei6lioteca). ,ean J y ,ean F. #ntroduccin a la pro&ra!acin con JABA. 200/ (en Ei6lioteca)

Algoritmos y Estructura de datos III

142

?na buena 0uente de inicio de uso del len&ua*e %5e Java


%$

%utorials

5ttp:EEdoDnload.oracle.co!E*avaseEtutorialEinde:.5t!l 5ttp:EEdocs.oracle.co!E*avaseEspecsE*lsEse.E5t!lEinde:.5t!l

)speci0icacin del len&ua*e: