0% encontró este documento útil (0 votos)
676 vistas

Libro Programación PDF

Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
676 vistas

Libro Programación PDF

Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF o lee en línea desde Scribd
Está en la página 1/ 302
~ 6S BECO Mamma as AUER Pa Mise UPEHLOT Ae Recto ea JUAN CARLOS MORENO CAE (l CARRERAS Programacion JUAN CARLOS MORENO PEREZ A> JUNTA DE ANDALUCIA ‘CONSEIERIA DE EDUCACION IES, PUNTADEL VERDE [Dpto INFORMATICA g9-1944 ~~ Ra-Ma’ Ley prohibe fetocepiarest libro PROGRAMACION ‘©duan Carlos Moreno Pérea (© Delaedeién: Re-Ma 2011 MARUAS COMBECIALES, Lnsdesignaciones uilizadaspor las ermpresas para dstinguir sus productos {unrdware, software, sistemas operativos, otc) suelea ser mazcas registradas. RAMA ha intentado a ‘targa de este lbxo distingus las marcas comerciales de lye taminos descriptive, siguiende el estila ‘que utilize el fabricante sin inteneS6n do infringie la marea y solo en benaficio del propiotavio de la risa, Loe datos de lor ejemplos y pantallas con fctsios & no ser que se especifique lo contearo, RAMA en marca commercial tegistrada, ‘Soha paseto of méximo empao en nfvecer al leetor una informaeién completa y precise. Sin ember, RAMA Editorial noastme ninguna rosponabilidnd derivada de su uso nitampoeo decualquier violaciin dp patentes ni otros derectnsde terceres partes que puulieran ocurrir- Esta publicacion tiene por objeto ptoporcionar unos conucimieatos precinos y acceitaos sone el tema tratade, 8u venta No supone Pr ef editor nitgzana forma de asstonci legal, adminiotrativa ode ningin otro tipo. En caso do provisarse ‘aseoora loge uta fra de ayuda experta, doben hysearse os servicins de un prafosional competente, Reservacls todas is derechos de publicacin en cualquier idioma, Sogunlo dispuesto ene! Cédigo Penal vigento ninguna parte de estedibry puede sernepradvcide, grabadt fen sister de slmacenamiente o transmitida en fornia sleuna ni por custquive procenaionto, va sex lertrénico, mesinicn reprografico, magniéticoo evalquier otro sin autarizacidn previa v por escrito de RA-MAsucontenidoesté protegido porlaLey Vigente quecstablecepenas de prisiényemmultaca guinea, intoncionadamente, reprodujaren opagiaren, en todo en par, na sbra lterunia atitienocentiion. BAicade por: RAMA Editorial Calle Jara, 3A, Poligona finductral Tgarse 28860 PARACUELLOS DEUARAMA, Madsic ‘Teléfono: #1 458.42 80 Fax: 91 66281 39 ‘Cone ebcetrinio:editoriaaea-ma.com Internet: www.ra-ma.es y www.rama.com ISBN: 978 84.9064-088-4 Dopésita Logal M-24.444.2011 Maquetariin: Gustavo Sen Roman Barranco Diseno de Portada: Antonio Gareia Tomé Filmacién e impresidn: Closas-Orcoyen, & Le Impreso en Espafia indice [aN INTRODUCCION ... CAPITULO 1. ELEMENTOS DE UN PROGRAMA INFORMATICO.. 1.1 PROGRAMA Y LENGUAJESDE PROGRAMACION LL ELLENGUAJE JAVA 112 ELJDK.... 1.13 LOS PROGRAMAS EN JAVA 1.2 ESTRUCTURA ¥ BLOQUES FUNDAMENTALES DE UN PROGRAMA 1.8 ENTORNOS INTEGRADOS DE DESARROLLO . oe 1.4 TIPOS DRDATOS SIMPLES... 1.4.1 {COMO SE UTILIZAN LOS TIPOS DEDATOS? s.r 1.5 CONSTANTES ¥ LITERALES 1.8.1 LAS CONSTANTES 1.5.2 LOS LITERALES 1.6 VARIABLES 1.6.1 VISIBILIDAD Y VIDA DE LAS VARIABLES, 1.7 OPERADORES Y EXPRESIONE3..... 1.7.1 OPERADORES ARITMETICOS... 1.7.2 OPERADORES RELACIONALES.. 1.7.3 OPERADORES LOGICOS.... 1.3.4 OPERADORFS UNITARIOS 0 UNARIOS. 1.78 OPERADORESDE BITS... 1.7.6 OPERADORES DE ASIGNACION 1.7.7 PRECEDENCIA DE OPERADORES. 1,8 CONVERSIONES DE TIPOS (CAST) sn RESUMEN DEL CAPITULO oe so 31 BJERCICLOS RESUBLTOS ~ ~ al EJERCICIOS PROPURSTOS - - ene CAPITULO 2. PROGRAMACION ORIENTADA A OBJETOS. OBJETOS...... seonnsnnnanante BT 2.1 INTRODUCCION AL CONCEPTO DE OBJETO 38 2.2 CARACTERISTICAS DF LA PROGRAMACION ORIENTADA A OBJETOS, 41 2.8 PROPIEDADES Y METODOS DE LOS OBJETOS .. 42 2.4 PROGRAMACION DE LA CONSOLA: ENTRADA Y SALIDA DE INFORMACION sree 2,5 PARAMBTROS Y VALORES DEVUELTOS - 45 2.6 CONSTRUCTORES Y DESTRUCTORES DE OBJEXOS - 45 2.7 USO DE METODOS ESTATICOS ¥ DINAMICOS . 46 2.8 LIBRERIAS DE OBJETOS (PAQUETES)........ ~ z AT 2.8.1 LOCALIZACION DE LIBRERIAS. RESUMEN DEL CAP{TULO EJBRCICIOS RESUELTOS BJERCICIOS PROPUESTOS .... CAPITULO 8. ESTRUCTURAS BASICAS DE CONTROI 3.1 ESTRUCTURAS DE SELECCION 8.1.1 ESTRUCTURAS IF... 8.1.2 SWITCH. 3.2 ESTRUCTURAS DE REI 3.2.1 BUCLE WHILE.. 3.22 BUCLE DO WHILE . 3.2.8 BUCLE FOR 8.8 ESTRUCTURAS DE SAL’ 3.8.1 SENTENCIAS BREAK Y CONTINUE, Ce EU GAS Oe CO CON EAE 3.3.3 SENTENCIA RETURN an . 3.4 CONTROL DE EXCEPCION! 8.5 PRUEBA Y DEPURACIONDE APLICACIONES .. 3. FALLOS DEL SOFTWARE... sn 3.5.2 TIPOS DE PRUEBAS 8.6 DOCUMENTACION DE PR RESUMEN DEL CAPITULO EJERCICIOS RESUELTOS . EJERCICIOS PROPUESTOS CAPITULO 4. PROGRAMACION ORIENTADA A OBJETOS. CLASES 4.1 CREACION DE PAQUETES 4.2 CONCEPTO DECLASE .... 4.2.1 CONTROL DE ACCESO A UNA CLASE 422 REFERENCIA AL OBJETO THIS. 4.28 LACLASE OBJECT. 4.8 ESTRUCTURA Y MIEMBROS DE UNA CLASE 4.1 MIEMBROS ESTATICOS (STATIC) DE UNA CLASE/ MIEMBROS DE CLAS! 4.3.2 METODOS DE INSTANCIA ¥ DE GLASE... 2 4.8 METODOS DE INSTANCIA 4.3.4 METODOS ESTATICOS 0 DE CLASE 4.4 TRABAJANDO CON METODOS 4.4.1 PASO DE PARAMETROS POR VALOR ¥ POR REFERENCIA 4.4.2 LOS METODOS RECURSIVOS 4.5 LOS CONSTRUCTORES . 4.5.1 SOBRECARGA DEL, CONSTRUCTOR 4.5.2 ASIGNACION DEOBJETOS. 4.5.3 CONSTRUCTOR COPIA... 4.6 LOS DESTRUCTORES ... 1 4.6.1 LOS FINALIZADORES ... : 4.7 ENCAPSULACION Y VISIBILIDAD INTERFACES... 4.8 HERENCIA a RESUMEN DEL CAPITULO «0. se nuntnnanmanesinisie ssn v9 EJERCICIOS RESUELPOS «.....sonnnenninnninnn cone so so 109 BJERCICIOS PROPURSTOS ... seen son os 15 CAPITULO 5. P.0.0, UTILIZACION AVANZADA DE CLASES... 5.1 WRAPPERS... 0 . . 5.1.1 CLASE WRAPPER INTEGER ..... 5.2 TRABAJANDO CON FECHAS Y HORAS (LA CLASE DATE) 5.3 CLASES ¥ METODOS ABSTRACTOS Y FINALES 1 CLASES Y METODOS ABSTRACTOS .. 5.5.2 OBINTOS, CLASES Y MITODOS FINALES. POLMORFISMO.. 3.5 SOBRERSCRITURA DE METODOS 5.8 SOBRECARGA DE METODOS (OVERLOADING)... 5.7 CONVERSIONES ENTRE OBJETOS(CASTING) 5.8 ACCESO A METODOS DE LA SUPERCLASE . 5.9 CLASES ANIDADAS. ss RESUMEN DEL CAPITULO BJEROICIOS RESUELTOS EJERCICIOS PROPUESTOS ... 147 M49 149 152 156 sn V5 159 son 162 165 170 173 174 CAP{TULO 6. LECTURA Y ESCRITURA DE INFORMACION... 6.1 FLUMOS DE DATOS yt 6.2 CLASES RELATIVAS A FLUJOS «1. 6.3 UTUZACION DE FLUJOS.. 6.4 FICHEROS DE DATOS.... 6.4.1 LECTURA ¥ ESCRITURA SECUENCIAL EN UN ARCHIVO 6.4.2 LACLASE FILE... . 6.43 CLASES FILEWRITER ¥ FILEREADER.. 6.44 FLUJOS DE DATOS DATAOUTPUISTREAM Y DATAINPUTSTREAM.- 6.5 ALMACENAMLENTO DE OBSETOS EN FICHEROS, PERSISTENCIA. SERTALIZACION... 66 INTERFACES DE USUARIO... itn ct 6.6.1 NUBSTRA PRIMERA APLICACION CON SWING. 66.2 LOS COMPONENTES SWINC 6.6.3 LOS CONTENEDORES SWING «0. 8:64 ORGANIZACION DE LOS CONTROLES EN UN CONTENEDO 6.8.5 APARIENCIA DE LAS VENTANAS 6.1 CONCEPTO DE EVENTO ¥ CONTROLADORES DE: EVENTOS 6.8 GHNERACION DE PROGRAMAS EN ENTORNO GRAFICO. RESUMEN DEL CAPITULO ...., 178 179 183 187 BJERCICIOS RESUELTOS EJERCICIOS PROPUESTOS ... CAPITULO 7. ESTRUCTURAS DE ALMACENAMIENTO. 7.1 ARRAYS O VECTORES.... : 7d DECLARACION DE VECTORES 7.1.2 CREACION DE VECTORES.... 7.1.3 INICLALIZACION DE VECTORES... 7.14 MBTODOS DE LOS VECTORES....... 7.1.8 UTILIZACION DB LOS VECTORES 7.2 ARRAYS MULTIDIMENSIONALES O MATRICIS.. 7.3 CADENAS DE CARACTERES 7.3.1 LA CLASE STRING. 7.3.2 LACLASE STRINGBUFFER 7.4 ARRAYS O VECTORES DE OBJETOS STRING .. 7.5 ALGORITMOS DE ORDENACION... 7.5.1 ORDENACION POR EL METODO DE LA BURBUJA.. 7.5.2 ORDENACION POR EL. METODO DE INSERCION DIRECTA . RESUMEN DEL CAPITULO i Deas taiatenos nels 219 EJERCICIOS RESUELTOS 219 EJERCICIOS PROPUESTOS ...... sn . ee) CAPITULO 8. BASES DE DATOS RELACIONALES.. 8.1 LAARQUITECTURA JDBC 8.1.1 QUIESE NECESITA PARA TRABAJAR CON BASES DE DATOS ¥ JDBC .rrensontonvnns BBR 8.2 CONEXIONES CON BASES DE DATOS 8.3 MANEJANDO SQLEXCEPTIONS... ‘ 8.4 CREACION Y CARGA DE DATOS EN TABLAS.. 8.4.1 CREACION DE TABLAS CON JDBC. 8.4.2 CARGA DE DATOS ENLAS TABLAS CON JDBC. 9 RECUPERACION DE INFORMACION ....... 8.5.1 OTRAMANERA DE RECUPERAR LOS DATOS DE UNA TABLA... 8.6 MODIFICACION Y ACTUALIZACION DE LA BASE DE DATOS ....0--- 8.6.1 MODIFICACION CLASICA DE DATO! 8.62 MODIFICAR DATOS EN LAS TABLAS UTILIZANDO RESULTSET... 8.6.3 INSERTAR DATOS EN LAS TABLAS UTILIZANDO RESULTSET. 8.7 OTRAS OPERACIONES SOBRE BASES DE DATOS RELACIONALES 7. TRANSACCTONES : 8.7.2 FUNCIONESDE USUARIO... 1/3 PROCEDIMTENTOS ALMACENADOS RESUMEN DEL CAPITULO EJERCICIOS RESUELTOS .... EJERCICIOS PROPUESTOS CAPITULO 9, PERSISTENCIA DE LOS OBJETOS EN BASES DE DATOS ORIENTADAS A ‘OBJETOS.... 9.1 BASES DE DATOS ORIENTADAS A OBJETOS 9.1.1 BASES DE DATOS ORTENTADAS A OBJETOS COMERCLALES ) 92 CARACTERISTICAS DE LAS BASES DE DATOS ORIENTADAS A OBJETOS 9.3 INSTALACION DEL GESTOR DE BASES DE DATOS ...... = 9.3.1 INSTALANDO EL MOTOR DE BASES DE DATOS 9.4 ELAPI (APPLICATION PROGRAM INTERFACE)... 9,5 OPERACIONES BASICAS CON LA BASE DE DATOS, 95.1 OREAR/ACCEDER ALA BASE DEDATOS........ 9.5.2 ALMACENAR OBJETOS...... 9.5.3 RECUPERAR OBJETOS DELA BASE DE DATOS... 9.5.4 ACTUALIZAR OBJETOS EN LA BASE DE DATOS... 9.54 ROKRAR OBJETOS DE LA BASE DE DATOS 9.6 CONSULTANDO LA BASE DE DATOS 9.6.1 LIBRERIA API SODA.. 9.7 TIPOS DE DATOS ESTRUCTURADOS... 9.7.1 CONSULTA Di DATOS ESTRUCTURADOS CON SODA 9.7.2 CONSULTA DE DATOS ESTRUCTURADOS CON QBE. 9.7.8 BORRADO DE DATOS ESTRUCTURADOS. 9.8 ARRAYS DE OBJETOS. 98.1 ALMACENAMIENTO DE OBJETOS Y ARRAYS 9.8.2 RECUPERACION DE OB, ETOS Y ARRAYS. RESUMEN DEL CAPITULO BJERCICIOS RESUELTOS EJERCICIOS PROPUESTOS . DIRECCIONES DE INTERES. MATERIAL ADICIONAL... INDICE ALFABETICO.. TTI Rt SNE | Introduccisn je Esto libro tiene como objetivo el servir de referencia al alumno en ef médulo de programacion. Weta médly es de los miis pricticns del ciclo y por lo tanto he procurado hacer un libro en el que se complemente la parte préetica con los contenidos toéricos. Hay que tener en cuenta que esto libro dobe de servir para formar a profesionales, por lo tanto debe de sex lo mis itil posible para el alumno y debe proporcionsr conotimientos practicas y actualizados, La estructura del libro es lo mas didictiea posible, He intentado que los conceptos en el libra sean facies de comprender acorapaiiéndolas de muchos ajemplos, consejos, notas, aclaraciones, ete. Como profesor, akimno, prokvamador, consumidor de libros, tutoriales, ete. He intentado seguir los siguientes prinejpios a la hora do eserihir of libro: ® Mirando se aprende. © No ecexibas pora otros lo que a ti te costaria entender. Pareco absurdo pero a veces ocurre. © Los ejemplos tienen que ir al grano y ser cortos. Loo ejemplos largos aburren ® No compliques los ejemplos, ya habré otro que lo tome y lo complique En realidad sstos prineipios son simplemente lo que yo desearia gue fuera el libro si tuviese que trabajar con él apere que tu y yo coincidamos en esto. En el libro se ha optado por utilizar Java como lenguaje para dosarrollar todos los conceptos del deereto. Se podria haber utilizado C++ como lenguaje base, pero dada la proyeceién de Java no me parecin lo més titil a largo plazo. ‘Tampoco es operative utilizar los dos lenguajes porque coma dicen, los abuslos: “Et que mucho alrarca poco aprieta ‘Alguna de fas razanes para utilizar Java son ta independeneia do la plataforma, la gran variedad do herramientas de desarrollo, la modularidad y routilizacién, la gran cantidad de recursos disponibles, la facilidad para programar en. Internet con este lenguaje, ete. BI alumpo ademés de mangjar el libro y el material adicional, deberst de invostigar, documentarso y ampliar conocimiientos par si mismo, puesta que este libro solamente es el empjén on Ia sala de una carora ciclista. Luego el alumno tendré que pedalear y recorrer muchos iilémetts so. [Bn el material adicional vas a encontrar todo el software utilizade y novesarie para pructicar con este libro y mucha mds informuciin prictica. Te recomendamos quo lo examines para conocer la informacién que contiene, Verds las intrucciones de descarga en ol apartado "Material adicional”: Los ejercicios propuestos con un nivel de dificultad alto se han especificado a} pomionr0 de sx exposicidn indicanda entre paréntesis el texto "Rjorcicio de dificultad alta’, Ss han catalogsdo de esa forma aquellos ajersiciog que con mas complicndas o que requieren de un mayor tiempo de programacién que los demas del capitulo. Obviamente esto nivel de dificultad cs relative al nivel exigide en cada capitulo, , Elementos de un YF Conocer qué es un programa, un lenguaje de programacién y las diferencias entre lenguajes de programacién como Java y Co CH ¥ Reconocer el aspecto de un programa basico en Java y sus caracteristicas principales, ¥ Instalar y utilizar un DR, ¥ Compilar y ejecutar programas sencillos en Java dentro y fuera de un Entorno de desarrollo, ¥ Conocer y utilizar fundamentos biisicos de! lenguaje Java como Ios tipos de datos, constantes, literales, variables, comentarios, operadores y expeesiones. ¥ Identificar las ventajas y limitaciones de Java frente a otros lenguajes de programacién. La informacién de este capitulo muchas veces es un resumen y en ocasiones io trata en profundidad ciertos _aspectos, No obstante, cl alumno en la seceidn de bibliografia pueds encontrar libros y paginas aconsejadas en Tos que puede ampliar o contrastar In informacién en este libro proporcionada. 1 PROGRAMA Y LENGUAJES . DE PROGRAMACION c~ Definicién de programa Un programa es una serie de érdenes 0 Instrucciones ordeniadas con una finalidad concreta que realizen tuna funcién determinada ‘Todo e} munclo estamos familiarizados con In ejecucién de programas (editores de textos, navegadores, juegos, reproductores de mmisica o peliculas, ete). Por rogla general, cuando queremos ejecutar un programa s¢ Io indicamos al sistema haciendo doble click sobre él ineluso algunos usuarins més avanzados ejecutan eomandos desde un intérprete de comandos © eonsola. Si una ver hoa tonide Ta euriosidad do abrir un programa con un blac da notas 0 editor de texto te habris daso cuenta que aparece algo horrible en cl editer, una serie de simbolos ininteligibles (por Jos humanos). Eso es porque los programas catsn ex hinario, que os ol lenguaje que entienden las maquinas. Entonves te preguatards: si al final de wste libro seré exiaz de escribir programas, {podré entender esos eédigos? La respuesta es No. En este libro vamos # aprender un ienguaje de programacién para escribir programas de manera entendible por Jos humanos que luego traduriremos al lenguaje maquina entendible por loy ordenadares mediante otros programas Hamacdos intérpretes 0 conrpiladores. En la siguiente figura se vera todo esto de modo mas grafic (epee noi gars mica vin dn Figura ff Programe sig funtey nde Como se pnode observar, el cédigo fuente es cl que escribe el programador que luego lo compila a eédigo maquina ‘Compitae equivale a transformar el programa intsligible por el programador al programa inteligible por la maquina. EY ciidigo fuente o programa fuente esta oscrito on un lenguaje de progeamacién y ol compiladoy es win programa que se encarga de transformar el eédigo fuente en cddigo miquina, Los compiladores son programas especificos para un lengutie de programacién, lox cuales transforman al programa fuente en un programa directa 0 indirectamente ejecutable por Ia miquina destino, No ex posible compilar un programa escrito en lenguaje Java eon un eompilador de C porque éste no lo entendoria, Elenguaje maquina que genera Java es un lenguaje intermedio interpretable por una méquina virtual instalada cen et ordenador donde se va a gjcentar. Una nniquina virtual es una maquina ficticia que traduce las instrueciones ‘maquina ficticias en instrucciones para Ia miquina real. La ventaja de la misma es que los programas #e pueden ejocutar en cualquier tipo de hardware siempre y cuando tenga instalada In méguina virtual correspondiente, Los programas no van a cambiar, lo que cambiar es la méquina virtual dependiendy del hardware (no seré igual la miiguina viratal de un smaryphane que la de un PC). ‘Compiladores e Intérpretes AA iferencia de Jos compiladores, los intérpretes leen linea a linea el cédigo fuente y lo efecutan. Este proceso es muy lento y requiere tener cargado en memoria el intérprete, La ventaja de los intérpretes es ue la depuracién y correccign de enrores del programa es mucho ras sencilla que con los compiladores. (UN) et Lencuase sava Java ¢9 uno de los lenguajes mas utilizados en la actualidad, Es un lenguaje de propésito general y su éxito radica en que es el lenguaje de Intemet. Applets, Serviets, piginas JSP o JavaScript utilizan Java como lenguaje de programaciin. El dito de Java radica en que es un lenguaje multiplatafoxina. Java atiliza una méquina virtual en el sistema destina y por Jo tanto no hace falta recompilar de nuovo las aplicaciones para cada sistema operativo, Java, por lo anto, es un Jenguaje interpretads gue para mayor efielencia utiliza un eddign intermedio (bytecode), Bate ebdigo intermedio a bytecode es independiente de la arquitectura y por lo tanto puede oor ajgeutada en cualquier sistoma Process (creator) ‘cpt compan eal 1 ‘eecuTasie eiecraLe | Sree Pomme, roe une sion mac 086 Pegs 2. feoensiecifn a prgeame parca sistema oorativo x em menor entac8 Fgura 18. Bn tava wnaini compton ‘Como puede apreciarse en las figuras anteriores, en Java, una vex compilado el programa, se puedo ejeeutar en cualquier plataforma solamente con tener instalada la maquina virtual (Virtual Machine - VM) de Java, Sin embargo en C, C+ u otro lenguajo, deberemes recompilar el programa para el sistema destino con la consiguiente pérdida de floxibilidad. Por lo tanto, Java es un eompilador y a la vex un intérprete. El compilador compila a bytecode y el intérprete se encargaré de ejecutar ese cidigo intermedio en Ia maquina real. a Java es multiplataforma y programas an Java pueden ser ejecutados en Windows®, GNU/Linux y Mac OS X entre otros sistemas. James Gosling trabajaba para Sun Microsystems y ftv el disefiador de Java en 1990. E] primer nombre que tuvo Java fue OAK y tuvo como roferentes C y C++ (de hocho se parece mucho a ellos en el aspect, pero la flnsofin de funcionamiento os totalmente distinta), SUN desarrollo este lenguaie en principio con otra orientacién, la idea os que fueso utilizado en microelectrénica y sistemas embebidos, Lo que nunes se pensé SUN" es Ja repercusion y evolueién que tendria. mas tarde este lenguaje, aa ‘Cuatro razones para aprender Java 1 Por el futuro y presente que tiene, 2. £5 un lenguaje sencilo 3. Es un lenguaje orientado a objetos. 4, Es independiente de Ia plataforma. EL JDK EL IDK (Java Development Kid, aunque no contione ninguna hertamienta gréfica para cl desarrollo de programas, ‘si que contiene aplicaciones de consola y herramientas de compilacién, docamentacién y depuracién. R2.1VVK incluye el IRE (Java Runtime Environment) que consta de los minimos componentes necesarios para ejecutar usta aplicacion Java, como son la maquina virtual y Tes librerias de clases, EL IDK contione, entre otras, Ine siguientes herramientas de cansola: © java. Es la maquina virtual de Java, © javac. Bs ol compilador de Java. Con él es posible compilar las clases que desarrollemos. © javap. Es un descnsamblador de clases. © jab. EI depurador de eonsola de Java © javadoe. Es el generador de documentacién. © appletviewer: Visor de Applets aa Importante Una vex descargado e iastalado el JDK hay que modificar los valores de dos variables de entomo: “= Variable PATH. Apunta donde esté situado el directorio bin del JDK, «Variable CLASSPATH. Apunta donde estan situadas las clases del JDK. Podemos descargar y utilizar varios JOK simplemente modificando los valores de ambas variables. CONOCIENDO LA VERSION DE JAVA Para conocer la versién de java con la que estamos trabajando basta con ejecutar lo siguiente en una shell o intérprete de comandos: java -version YY apareceré en la ventana algo parecido 2 esto: @:\Documente and Settings \IUAN CARLOS>javs -versicn ava version "1.6.0_20" Java(TM) S& Runtine Fuvironment {bU11d 1.6.0 20-boz) Java HotSpot(TM| Client VW [build 16.3-bo1, mixed wodk LOS PROGRAMAS EN JAVA {Los programas o aplicaciones en Java se componen de ina sori deficheros class que son ficheros en hytecode que contionon le anes del programa. Estos Gicheros no tienen por qué estar aituadox en tin directorio conereto sino que pteden estar dsteihuidos en varios discos o incluso en varias maquinae, La aplicacién se ejecuta deseo ol métndo principal o maind situnda en une clase. A partir de aqui se van crcando objets « partir de las clases v se va ejecutando la aplicacién. El main() os un métedo estatico (ya se explicaré esto mais adelante) ¢l cual puede empezar a crear los objetos, incluidos los cle su propia clase, co01Go FUENTE -- APLIACION 1 Ctctess| \C2eiees ‘cactass | |céciass ‘Compitacion evecucién java Cmain.class igure 1 Process de comple cd wh progronn il 2 ESTRUCTURA Y BLOQUES FUNDAMENTALES DE UN . PROGRAMA En este apartado se va a ver el programa de inicio por excelencia eu cualquier lenguaje de programacién y se ‘comentara cada una de sus lines. Kl proceso de compilacién y ejecucién se explica en el siguiente apartado. public class holamunds { /* programa Folawundo*/ public atstie n(String{] args) | J+ lo tnico qua hace este programa os mostrar Ja cadena “Hola Mundo” por pantalla*/ system.out.printin(*Hola Mundo") 5 ca Los comentarios Existen comentarios de una lines solamente (//) y comentarios multilinea (/* */). * /J. Estos comentarios comienzan en la doble barra y terminan hasta el final de la linea +7" */ €stos comentarios comienzan con los carscteres /* y terrminan can los caracteres */ y se pueden ‘extender miltiples lineas. © Lactase holamundo En java generalmente cada clase es un fichero distinto. Si existicran varies clases en el fichero, la clase cuyo nomibs coincide con el nombre del fichero deheria de leva cl modifieador public (public elass halamudo) y &s la que 80 puede utilizar desde fuera del fichero. Las clases tienen el mismo nombre que su fichero Java. es importante que maytisculas y mindsculas coincidan, La clase abarca desde la primera lave que abro hasta la tiltima que eierra, public clase holamundo { © La funciéin 6 método main static void masa (Strin Bl cédigo Java en ins clases se agrupa en métodos o funciones. Cuando Java va a ejeoutar el eédigo de una clase, lo primero que hace es buscar el mésato main de dicha clase para. ejecutarlo, El mGtodo main tiene las siguientes pusticulasidades: © Es piiblico (public), Esto es ast para poder llamario desde eualquier lado. Us estatico (tatic) Al ser static 9 Te puede Hamar sin tener que instanciar Ia clase. © No devuelve ningiin valor (modifieador void). © Admite una sorie de pardimettos (String [] args) que en este ejemplo conereto no Son utiizados. Como puede verse en el ejemplo, ef método main abarea todo el eddigo contenido entre tas Naves. Mostrar texto por pantalla Parece intuitive saber que el texto se mostra por pantalla ecutando la siguicnte linea Systen-out.printin ("Hola Mundo"! Para sacar informaciin por pantalla en Java so utiliza la clase System que puede ser Uamada desde cualquier punto de un programa, la cual tiene un atributo out que a eu vez tiene dos métodes muy utilizades: print y printind. La diferencia entre estos dos itimes métodas e» que en el segundo so atade un retorno de linea al texto introducido. Como se puede ver Ia orden termina en ; (todas las crdenes en Java terminan en ; salvo los eierres do llaves a los cuales no hace falta ponérsela pues se sobroentiende que se finaliza Ia orden). 1 3 ENTORNOS INTEGRADOS DE DESARROLLO Un IDE @ Entorno Integrado de Desarrollo es tina herramienta con el eual poder desarrollar y probar proyectos ep un lenguaje determinado. Development Kit a Recuerda OK © Java Development Kit es e! software necesario para poder desarrollar y ejecutar programas java. También se denomina SDK (Standard Development Kit) 0 incluso 12SE (Java 2 platform Standard Edition} Lo primera que hay que hacer cuando se instala un IDE es canfigurar como neinimo la ruta del IDK (Java ). Sino se tiene el JDK no se podra trabajar con Java, luego habré que instalavlo primera, Bn Ubuntu, Linux basta con ejecutar desde eonsola el siguiente comando: $ pudo apt-get install sun-java6-jde a~ Importante Cuando $e instale un entorna integrado de desarrollo hay que asegurarse que las opciones que indican las rutes de las bibliotecas, el JDK y demis recursos son correctas. Sino se hace esto el programa nunca podrd ejecutar ni compilar programas. ‘Una buena opeién para ompexar a programar en Java es instalar Geany. Geany es un IDE muy Ii intuitivo y su instalacién es sumayoente sencilla. Bn Ubunns Linux se instala ojecurando desde consola el siguiente ‘Una vee instalado el programa, hay que configura Ia variable PATH en Windows" (Panel de control > sistema > Opciones Avanzadas -> variables de entorno) o las variables JAVA_HOME y JAVA en Linu, ~ 2Necasitas ayuda para instalar Geany en tu equipo? ‘En et material adicional del libro tienes un manual paso a paso para instalar Geany y el JDK en Windows® yen Linx, eter le Dew ae Genes Hate Gout feranetae Anan 2 ©. @ . ces ace ea a |e a |e tl te cd eee Soe nat [wamachine ® lama 9 - [= cine | A Gpomie etaee pores 2 Sram) | i asn(seesnat) age) rant} me peinelat {BONE stew Gory 03824 {ato eon: neve C\becurants nd Setngs YUAN ALCS catorebsannd a 2) Cod) 1681 Jeo Deere ae! Sst LAN ARLES a2) eee at as Tea aS Figurs 15: Geary, Unentormo ce desarole ier vert La seeuencia de ereaeidn y elecvicidn de un programa en Java es un proceso que sigue lox siguientes pasos: EDITAR GUARDAR —COMPILAR EJECUTAR, Esxisten muchos IDE para trabajar eon Java. fn todas los ejemplos se ha utilizade Geany para si se quiere also ‘mas potente, sina Buena opcién e Bolinse. Helipse Fue desarrollade primeramente por IBM, aungue actualmento es un IDE de cédigo abierto desarrollade ¥ mantenido por Ia Fundacién Kelipse (http:/hwarw aclipse.orgy). Befips: puede utilizarse para Java y afadienslo pluxins pueden utilizarse otros lenguajce de progamacién. Relipse ha dvsacrellada ‘mumerosas versiones, todas con nombres estelares (Callisto, Europa, Ganymedo, Galileo, Helios...). Otra opeién no menos interesante: es NetBeans de la extinta SUN® ahora Oracle". NetBeans os una splicacién de eédigo abiorto y muchos desarrolladores Java Ia utilizan, Como consojo, se rocomienda Geany para pequefios proyectos y programas como NetBeans o Belipse para proyectos mis serios. java holamun Y saldvé oe la pantalla la cadena que queremos “Hola Munda”, Joo: ‘© Instala Geany y el JDK an tu maquina. Una vez inételadas estas dos cosas configura las variables PATH y CLASSPATH en a maquina. | Prueba a compilar dentro y fuera del IDE e! programa holamundo y compruebe que funciona ejecutdndalo. ORA-MA 1 = ELEMENTOS DE UN PROGRAMA INFORMATICO TIPOS DE DATOS SIMPLES 8 de datos se utilizan generalmente al declarar variables y son nevesarios para que el intérprete o compilador conozea de antemane el tipo de informacién que ve a contener una variable. Los tipos de datos primitives cen Java son los siguicstes: Tabla 1.4, Tipos de datos simples oro parry ee cn CoE ‘Se utlizan 8 bits (1 byte) para byte Datos enteros “128. +127 ences Dato de 16 bits de longitua short Datos enteros ~32768 + +32767 {inciegendientemente de la plataforra). Dato de 32 bits de longitud (indepencientemente de ia Plataforma) -2147483648 Int Datos enteros Benhenee -8223372036854775808 Dato de 64 bits de longitu tong Datos enteros = (indepencientemente de la +9223372036854775807 _plataforma), Este rango es para representar Data eneerte', numeros en unicode, los ASCH se char peor one 0 «+ 55535 representan con los valores del 0 al : 127, ASCII es un subconjunto del juego de ceracteres Unicode. Date en coma flotante de 32 bits en oe Datos en coma Precisi6n aproximade de 7 formato IEEE 754 (1 bit ¢e signo, i flotente de 32 bits digitos 8 para el exponante 4 24 para la mantisa), ato en conta flotante Ge 64 bits en ete Datos en come Precisin aproximade de formato [EEE 754 (1 bit de signo, flotante de 64 bits 16 digites 14 para el exponente y 52 para la mantisa, Ubiizado para evalusr si el resultado de boolean Valores booleancs true/false tuna expresién booleanas es verdadero (true) 0 faiso(false), 24 PROGRAMACION RAMA I ACTIVIDADES ‘Se propone el alumno que investigue y recoplle informacién sobre el juego de caracteres Unicode y ASCIE con especial detenimiento en este Gitimo. {COMO SE UTILIZAN LOS TIPOS DE DATOS? acion de variables. A cantinuacion, se muestran ejemplos de utilizacién de tipos de davs en Ta deck Tabla 1.2. Utilizacin de tipos de datos Ro byte byte 2 short short b, Ae Int d = -30; inte = oxci25; long b=434123 ; long long b=SL; /* la Len este caso indica Long*/ ea char cari='¢; cher car2=99; /*cart y car2 son lo miseno porque el $9 en decimal es lec’ */ float pi=3.1416; float float pi=2.1416F; /* la F en este caso indica Float*/ float medio=1/2F; /*0.5*/ “oe double milén=te6; /* 1x108 */ double medio1/2D; /*0.5 la D en este ceso indica Double*/ CONSTANTES Y LITERALES LAS CONSTANTES ‘Cuestién de estilo ‘Las constantes se declaran en maylscula mientras que las variables Se hacen en miniscule (esto se realiza como narma de estilo) 22 Las constantes se doclaran siguiendo el siguiente formato: de Je constante = En Java las variables no pueden declararse fuera de una clase. Por regla general, en Java todas Is varinbles que estdn dentro de un bloque (entre { y 3) son visibles y existen dentro de dicho bloque. Las funciones miembeu de una clase, podrin acceder a todas las variables mieabro de dicha clase pero no a las variables locales de otra funeién miembro. 1.7 Yexpnestonns ©) OPERADORES ARITMETICOS Los operadoves aritméticos son utilizados pars realizar operaciones matematicas, Tabla 1.3. Operadores aritméticos Ciera a r En el siguiente ojemplo se puede cboervar a utiliracién de operadores aritmétions: ine ale2, naz ng“ni * nis fi nash ngene-nis ff n29a 7f mz910 fi 1999 Mf naar OPERADORES RELACIONAL (Con los operadores relacionales se puede evaluar la igualdad v Ia magnitud, Bn la siguiente tabla A y B no son los operaciares, kino gue son los operandos camo se puede ver: Tabla 1.4. Operadores relacionales Crete Creed a>=8 ‘A mayor o igual que B A==8 A igual que 8 En el siguiente ejemplo se puede observar la utilizacién de operadores relacionales: (EE oreranores .6cIc0s Con los operadares lépicos se pueden reatizar operaciones logieas. En la siguiente tabla A y B no son los operadores, sino que son los operandos como se puede ver: Tabla 1.5. Operadores légicos Cor) OR B, El resultado seré false si aribos operandos son false y true en Wet AWBOARS | Oe o ne a a ‘A XOR B. El resultado sera true si un operando es true y el otro false, ace __false en caso contrario, oS “! x in el siguiente ejemplo se puede observar Ia utilizacién de operadores logicos: > n & > ni//xes-talse OPPRADORES UNITARIOS 0 UNARIOS Tabla 1.6. Operadores unitarios Cert Cnet) (QOH oPeRapones ve. arts Tabla 1.7. Operadores de bits rere Coco ale OR Wigieo. A OR 8. ee Desplazamiento a la izqulerda de & 8 bits rellenando con ceros por la derech. esplazamienta 21a derecha de A 8 bis rellenando con eros por a , A>>>B ee En ol siguiente ejemplo sa puede observar la utilizacién de operadores de bits: af nnné? num = nun Coa; num = 10, equivale a num - nun + 2 m= 5, equivale a num - aun / 2 (2) OPERADORES DE ASIGNACION Tabla 1.8. Operadores de asignacién b= A%= B Médulo y asignacién. La operacién A%=B equivale 2 A=A%S. eS A Resta y asignacién. La operacién A-=B equivale a A=A-B. En el siguiente ojemplo se puede ohservar la utilizacién de operadores de asignacién: . nun += 5; // num 10, equivale a nun = num + 5 |) PRECEDENCIA DE OPERADORES ~~ Consejo Utz paréntesis y de esa forma puedes dejar los programas mas legibles y controlar las operaciones sin tener que depender de la precedencia. o La precedencia de operadores se resume on la siguiente tabla: OPERADORES was OPERADORES promos [() 11. Pew | ‘ew (tipojexpresién “1% | ppitracincl Piura 16, Priore dos operadores Imaginemos que se tiene un eédige como el siguionte: ata 4: Se desea conocer el valor que tomard a, Para ello se mira en la tabla y we puede observar que el operador * tiene ds precedencia quo al operador +, con lo cual primero se ¢jecutari 5 *a, yal reaultado de esta operarin se le sumard 3, El vesultado de Ia expresin sera 29 y por lo tanto el valor de a serd 23 al ojecutar este cédigo, 1 CONVERSIONES «© DE TIPOS (CAST) Existen dos tinos de conversions, las conversie © Conversiones implicitas. Se realiza de forma automitica entre dos tipos de datos diferentes. Requiore que la variable destino (la colocadta a la izquierda) haga maa procisivin que ta variable origen (situada a la derecho). ss explicitas e implicitan, byte dato? = 3; short dato: dato2 = dato1; a “, peopel ppp oop] <—— Figura 7. Biemplo deconversisn imps © Conversiones explicitas. En este caso 0: el programador el que fuerza la conversién mediante una operacidin Hamada cast eon el formato: (ipo) expresién a~ Recuerda ‘Camo puede ser comprensible no se pueden realizar conversiones entre enteros y booleanos o reales y booleanas. Un ejemplo de conversidn explicita seria el siguiente: byte baato: hdato ~ (byte) idato; com.out .printin(bdato); // sacaté 5 por pantalla “ —_ Consejo Intenta evitar las conversiones de tinas en la medida de lo posible. En algunas conversiones explicitas ‘como ya supondrés pueden perder informacién en algunos casos. En este toma se infroduee al alumno en los Jenguajes de programacién, y mis concretamente, al Ienguaje Java. Rate tema es una primora toma de contacto del alunno con la programacién y se hace desde tuna posicién global viendo edime funciona un peexrama muy seneillo (el famoso Hola Mundo) y desde los _aspectos biisivos como sin las variables, los tipos de datas, los comentarios, los operadores, et. Es posible que ¢] alumno en estos primeros temas vea sotmeptus que Inega estudien con mix profundidad en apartados siguientes. Kl alumno en este tema debera do entender Ia estructura, eéine fimciona Java y poner énfasis en el estudio de los aspectos basicns det Lenguaje, os distintos tipos de datos yen Ia utilidad ¥ ten de los operasiores y expresiones, ‘Tambien es importante para el capitulo que el alamno supa inetalay y utilizar un IDE, La instalacion, compilaciin y ejeeueién de programas ea una cuestibn bésiea que dehe de manejar el ulomno para el resto tel libro. EJERCICIOS RESUELTOS = 1, Realiza un método para la clase Test que genere letras do forma aleatoria. Como ejercicio complomentario inves tiga el funcionamiento y uso de Ia funcién Math.random() Solncign: © Teast f ic stati char gettetzae (){ 1 (char) (Math, zandom()#26 + !a%)s pul ) public st System.our.printiu(gettetras (J): c void pain (string {I fen.out print In (gethetras(}); syeten.aut printin(gettaty system. out. printin(getLetras()); ) 32 PROGRAMACION RAMA 2. Bl objetivo de este ejercicio es cumplimentar In segunda columna de la siguiente tabla, Como puedes observar xa estd cumplimentada pero en los ejercicios propuestos tears que comprobar y curcplimentarla ti. Tabla 1.9. Tabla ejercicio 2 nay funcie Creek ue DE AMC eee tree int ="; EXrunciona 1 csaigo introduce 97 en la variable 2 que es el valor del System.out printin(a}; Ano tunciona S480 ASCH 2" y lo muestra por pantalla int pi = 3.14; Thunciona No funciona. Ko es posible introdcir wn nimero eal en System.ouk.prrtin(p); Fino tunciona Un EFA: de precision enters double pi = 3,14 Dirunciona System out println(p!); Mercere Para que funeione basta con cambiar la coma por un Correcto, Muestra faise por pantalla porque los Gos valores no son iguales. boolean adivina = (1 == 4) System.out-printinfediving);——1N gunciona boolean adivina = (97 =="3'== G}runcona —_No funcionard porque ia primera parte de la comparacién 97); 5? =="a' genera un boolean, y si comparar un Systemcur.printin(adivina); ‘No funciona _b90leano Con un entero (97) #! compilador daré un error booleen adivina = (97 =="a'== [lrunciona —_Muestra true por pantalla porque 97 es el cédigo ASCIL true}; dea’ y por lo tanto dara true. Al comparar true con otro System.out:printin(adivina); [Eno funciona valor boolean coma true el resultado serd true, 8, Averigua si las siguientes afirmaciones son verdaderas o falsas: En Java genoralmento un programa consta de varias clases las cuales s¢ compilan en un dnice fichoro. 15] método main puede ser statie @ no, En casa de no ser static pueda haber varios en un mismo programa. Los métodos y funciones differen en Javat en queen Tox primeras no devuelven ninssin valor, s posible hacer byte a = 2003, El nico problema es que-como una variable byte solamente almacena hasta cl valor 127 la variable a valdré solo 127. La solucién a este ojorcicio esté al final de los ejercicios propuestos. 4. Realiza un peagrama en Save que dada dos variables a yb, intercambie las valores de w yb. Solueion: > class iutercambio { public static void main(stringli acga) { > int ae b, be 6 tot tps wepsai ach: mens Byscom.out printin (*B1 vale en.out-printIn(*®1 valor da » ahora es “© 5. Dentro de una clase joven lenemos las variables enters edad, nivel de estudioy e ingresas. > 9 Nevositamos almacenar en la variable booltana jasp el valor: ‘Verdalero, Si i edad ex menor 0 igual 2.28, el nivel de_estudios es mayor que tave y las ingress superan Jos 281900 (euros) also, Bn caso contain. 1 Bscribe et ebdign necesario 2 Knsas, Solucion: Jasp + false; > Jaap = (ledad <= 26) Sé (nivel_deeatudios > 3) £6 (Ingresos > 29000)) iQue mostrar este programa por pantalla? public Class Teet { public static vold main(String {) Oet00; Syaten.out.prantin(i) 7 Soluci6: 128, EJERCICIOS PROPUESTOS © 1. Modifica el siguiente progeama para hacer que compile y funcione: ( static public ( int n2-30, suma-D, n3 surasnii"n2 SYerem.OuL-DEintIn ("LA SUMA ES: * + Gua); Suita=suma+nis; System, out.printin(suma) ; } ae aL=50: atic void main(String |] azge) © 2, {Por qué no compila el siguiente nievgrama? Modificalo para hacer que funcione. public static void main(String [1 args: int n1-80,n2-30, boolean sun Systen.out.printin ("LA SIMA ES: * + suma}; , © 8. El siguiente programa tiene 8 fallos, averigua euéles son y modifica el programa para que funcione. clans cuadrado [ publie static yold nain(steing {] ax: ¢ int nunezo-2, a ("B, CUADRADO BE *+NDME} System.out-print oo" St * + cud); ) © 4, .Qué mostrara ol siguiente eédigo por pantalla? sun & 7 * mum @3¥ 79 a; em.out-printla (num) ; “© 5, Realiza un programs que calcale le longitnd do una eineunfereneia de radio 3 metros, ) = 6. Reatiza un programa que caleule el éxea de una cirounferencia de radio 5.2 centimettos, ) © 7. Realiza un programa que muestre en pantalla, respetunde los retornas de linea, el siguiente texto: ‘Me gusta la programacién cada dia mas “© 8. (Ejercieio de diftcultad alta) Realiza un programa que genere letras aleatoriamente ¥ determine si son voeales 0 consonantes, © 9. Cumplimenta Ia siguiente tabla: Tabla 1.10, Tabla ejercicio 9 a intent; Grunciona int b = a>>a2; ‘System. out.printin(b); Dino funciona ita e784; a Syste out pita) Girunciona int =3 8. 2 System-out.printin(S}; [Mino rancona into = (ma * 581; Branciona ‘System out.printin(a)s Dino turciona © 10, Dentea do una clase jocen toocmos lax variables enteras edad, nivel_de_estudios @ ingresos, Necesitamos almacenar ea la variable booleanc: jasp el valor: Verdaclero. Si ln edad! es menor o igual a 28 y el nivel_de_estudios es mayor que tres, 0 bien, la edad es menor de 30 y los ingresos superan los 28,000 (euros). 5 Falso, En caso conteatio. © Becribe el cédige neces rio (2 ineas), © 11. Realiza un programa con una variable enteca tla cual contiene un tiempo en segundos y queremos conocer este tiempo pero expresade en horas, minutos y segundos, © 12, (Bjercicio de dificwlisd alta) Reatiza wn programa que dado un importe en euros nos indique el mfnimo nimero de billetes y la euntidad sobrante que se pueden utilizar para obtener dicha cantidad, Por ejemplo: 232 euros: 1 billete de 200. 1 billete de 20, 3 Lhillete de 10 Sobran 2 cures, Solueién al ejercicio resuelto niimero 3: ‘Todas las afirmaciones sou falas. Programacion orientada a objetos Conocer fas caracteristicas biisieas de la programacion orientada a objetos. ¥ Volorar las ventajas dela programacidn orientada a objetos frente a la tradicional. ¥ Conover la estructura basica de Jas clases. ¥ Reconocer las diferencias entre van objeto y wna clase. Cémo se inicializan y cémo finalizan. Diseiier clases senciflas. Organizar clases en paquetes y utilizar Yos mismos: Programar y diseilar métodos que acepten parametros. Tha programacién orientada a objetos es un paradigma de programacién totalmente diferente al método clisivo de programacién, el cual utiliza objetos y su comportamiento para tesolver problemas v generar programas y aplicaciones informaticas, Con Ia programacién oriontada a objetos (POO) so aumenta In modularidad de los programas y Ia reutilizacion de los mismos. Adomas, Ia POO se diferencia dv la programacién clisiea porque utiliza \éenicas nuevas como ol polimorfismo, ef encapsulamiento, la herencia, ete Generalmente, Jos lenguajos de progeamacién de tltima yeneracién permiten Ia programacién orientada a objetns, asi como también Ta programacidn elisiea, con lo cual puede entonderse 1a POO enmo una evolucién de la programacién clisica, 2 INTRODUCCION AL »-. CONCEPTO DE OBJETO Los programas reafizados mediante el paradigma de la POO solamente tienen objecas. Todas ls objetos perteneceri a una clase, por ejemplo, mi loro Felipe perteneeeria a 1a clase pdjaro. Tortas los objetos de la elaxe pdjaro se identifieardin, entre otras atributes, con un nombre (en su easo Felipe), un color de plumaje (verde), una edad (en su caso 2 aiios) y si son domésticos 4 no (Felipe siies doméstico pres lo tengo ahora en mi hombra). fa Recuerda En un simil con la costura, las clases serian los patroes y los objetos las prendas. Clases Las closes son los moldes de los cuales se generan los abjetos. Los objetos se instancian y we xeneran, instancia y objeto son sindnimos. Por ejemplo, Felipe ser un objeto canereto de Ia clase pdjaro. a Recuerda ‘Cuando se escribe un programa o aplicacién 0, lo que se hace es definir las clases de objetos doténdolas de estado y comportamiento y cuando se ejecute el programa se crearan los objetos, ya sea estética o dinamicornente. Cuando se programa, las clases se excriben en ficheros ASCII con el mismo nombre quo la clase y extensién java Las clases tienen una estructura pareeida a la siguiente ass nonbre_de Je lalgo2i 1 latzibutos! fo 70 Como puedes observar we ba, etiquetadn con corchetes [J los elementos opeionales de la clase. Tambin hay dos elementas opcionsles otiquetades como algo.1 y algo_2 aue convendrén walabras reservadas que se estudiar en Jos siguientes capitulos, Es muy comiin ver definiciones de clases como public class nombre.de_ta_clase. La palabra reservada public indica que Ia clase puede ser accedida por cualquier clase que necesite de su utilizaciOn. Entre los corchotes, dentra de te clase, encontraremos Jus atributos (una clase puede taner de core a muchos atributos) y los mtodos (ana close puede tener de cero a muchos métodos), Los métodos para la gente que haya programado en cualquier lengusje de progratnacién son log Hamados provediinientos o Funciones. ca Recuerda EL nambre de la clase y el fichero que la contiene debera de ser e! mismo. Odjetors Un objeto tiene una serie de earactoristicas como son las siguientes: © Identidad. Cada objeto es tinico y diferente de otto objeto. Mi loro Felipe es diferente a otros lores aunque estos sean vertles, tenga 2 arios y sean también domésticos. © Estado. El estado coran loc valores de los atributos del objeto, en el caso de los objetos de la clase pdjaro serian ‘nombre, color, edad, doméstico, ete © Comportamiento. £1 comportamionty serian los métodos 0 procedimicntos que realize dicho objeto. Dependdiondo del tipo o clase de objeto, estos realizaran unas operaciones u atvaa (cantar, volar, hablar, et). oaieto IM iN uero008 sareauros Figura 2.1. Btrusinadan jc | Mensajes Como Se dijo antes, los programas 0 aplicacionos oriontadas a objetos estin eompucstos par objetos, los eusles internetiisn unos eon otras 2 través del paso de mensajes. Cuando un objets recibe un mensaje lo que hace es cjucatar el método asociado, Métodos Los métndas son los procedimientas que ejecta el objets cuando veeibe un mensaie vinculado a ese inétodo concrete. Bn veasiones este métado envia mensajes a otros objetos, solicitando acciones o informacion, Recuerda En un programa OO primeramente se crean los objetos y entre ellos se enwvian mensajes proceséndose la informacién para luego destruirse y liberar la memoria que estaban ocupando. A FONDO LOS OBJETOS Los objetos del mundo reat tienen dos caracteristicas principales: = Estado. = Comportamiento. Los loros, por ejemplo, tienen un estado que puede ser el color del plumaje, el nombre, si hablan 0 ro, etc. ¥ también un comportamiento (hablar, piar, comer, etc.) ‘Algunos objetos son més complejas que otros, por ejemplo, mi consola es mucho mas compleje que mi linterna de espeleologia. Mi linterna tiene solo dos estados (encendida y apagada) y Ia interfaz es ‘sumamente sencilla (apagar y encender). [Ai programar una aplicacién en Java deberemos de modelar estos estados y comportamientos en clases y objetos. La programacién orientada a objetas proporciona los siguientes beneficios: * Modularidad. €1 cédigo fuente de un objeto puede mantenerse y reescribirse sin que ello implique la reprogremacién del c6digo de otros abjetos de la aplicacién, # Reutilizacién de cédigo. €5 muy sencillo utilizar clases y objetos de terceras personas. La ventaje de esto es que no tenemos que conacer los detalles de su implementacion interna sino solamente su interfaz. « Facilidad de testeo y repragramacién. Si tenemos un objeto que esté dando problemas en tuna aplicacién no tenemos que reeseribr el cédigo de toda la aplicacién, sino que tenemos que reemplazar el objeto por otro similar, 0 bien reprogramario. # Ocultacién de informacién. En l2 POO se ocultan los detalles de implementacién y lo que priva es fa interfaz. 2 2 CARACTERISTICAS DE LA PROGRAMACION ORIENTADA A ~& OBJETOS A continuacién, se citan algunas de las caructesisticas fundamentales de Ia programacin orientada a objetos: © Abstraccién. Sexiin la RAB abstraar es “separar por medio de una operacién intelectual las cvalidades de un objeto para considerarlas aisladamente o para considerar el mismo ahjeto en » pura esencia o nocién”. Cuando s0 programa oriemtado @ objetas lo que se huce ea abstrer lag caracteristicas de lng objotos que van a tomar parte del programa y erear las clases con sus atvibutos y sts mStodos, “© Encapsulamiento, El encapsulamicntaes una de las propiedades hundamentales de la programacién orientada a objetus. Cuando se programa orientada a cbjetos, los abjoton se ven sapin su compurtamiento externo, Por elempla, en Ia clase pdjarn se Ye puede enviar un mensaje para que canta y el objeta pdjaro ejecutard su método cantor. Lo mis interesante de toda osto ws que eh programador no tiene por qué saber emo fianciona internamente el método cantar, simplemente lo ejecuta. i ) Recuerda En fz POO las clases son vistas coma Ura caja negra. Los programadores no tienen por qué saber nada de Jos datos que almacenan y el interior de los métodos que permiten maniputarles, salamente tienen que ‘conocer su intarfaz. © Herencia. Todas las clases se ostrnetnran foemando jerarquias de clases. ana ee porn Paseo ano s+ coo camaro Figure 22 derarguia de tesee ‘Las clases pueden tener supervlases (la clase pdjaro tiene 1a superclase animal) ¥ subclasos (ta clase péJaro tone das subelases lace v canarin), Tambiéx existe In pasibitidad que una elase herede de varias superciases, ‘Smportante En Java una clase SOLO puede tener UNA superciase. Este hecho se denornina herencia simple. En C++ se permite la herencia miitiple. Java puede simular la herencia mille utihzando interfaces, Cuando una clase hereda do una superciase abtione los métodos y las propiedades de dicha superclase, Ademés, la funcionalidad propia do la misma clase se combinaré con fa heredada de Ia superelase, ® Polimorfismo, Hi polimorfisma permite crear varias formas del misma método, de tel manera que un mismo } método ofrezea comportamientos diferentes. . 2 3 PROPIEDADES Y METODOS DE «LOS OBJETOS Recuerda ‘Datos, propiedades 0 atribstos son sindrimos y referencian alas variables de una clase ¥ 3 En ung clase se agrupan datos (variables) y métodos (funciones). Todas las variables o funciones ereadas en Java deben pertencesr a tuna clase, con lo cual no existen variables o funciones globales como en otros lenguajes de programacién, a~ Recuerda En una clase Java los atributos pueden ser tipos primitivos (char, int, boolean, etc.) 0 bien pueden ser jobjetos de otra clase. Por ejemplo, un objeto de la clase cache puede tener un objeto de |e clase motor. Un La siguiente clase ve puede ebservar perfectamente los attibutos de la elase y los métados: i am DEIR { //*** gtxibutoe © propiadadas wee pr ‘puto color private int edad; //propiedad 6 atripuro edad +** névodos de 1a clage **** pubLic void setedad(int ¢) {edad = o) public Yoid printedad () {syatem.o public void setcolor (chaz c) (color: Public void printcolor (4 switch (color) ( //tos pajaros son verdes, anar /ISe existen pajaros de otros case 'Y": syste.out vate cher color; //propiedad o at case 'g': system.out.println (“grie") sbroak; case ‘hn’: Systen.out-printin(*neqro") break case *b': Systen.out.printIn ("blanco") ;breaki rr System.out.println(*color no establecido") : public static void main(seringl] acgs) 1 pajaro p: penew pajaro |: p-sotedad(5) ; peprintedad () 7 Como se puede ver en el eddigo anterior existen dos clases diferontes (pdjaro y test), las cuales residirén en dos ficheros diferontes (pajaro.java y testjaval. En kaclase test se erea un objoto de la clase pefjare y ae ana a Jos mntodos para sctualizar la edad y mostrurla por pantalla. Un ningin momenta la clase test puede acceder a lox métodos tributes privaie de la clase pdjaro (esto es gracias a la abstraccién), ni falta que le hace porque lo tinico que debe de conocer la clase feat eon lus indcodas pablioos para utilizar Ia clase. 2 4 PROGRAMACION DE LA CONSOLA: ENTRADA Y SALIDA DE . INFORMACION ) Java permite la entrada por tectado y la sala de informacién a través de ta pantalla mediante la elase Sytem del payuete java.lang, La clase System contiene, antre otros tres ubjetos los cuales estin asoeiados a tres fujos estindar ‘que se aheen cuando se Gueuta ol programa y se civtyan ewando éste finaliza, Estos objetns static son los siguientes: © System.out. Roforencia a la salida cstinday (pantalla), © System.in. Referencia a la entrada estdindar (teclada), Ul objeto System.in pertenece a Ja elage InputStream. Un ejemplo de utilizacién es w! siguiente: teyt © = char) System.in.read(); catch isxception ¢) { °, Stacktrace() Recuerda El método void printStackTrace() indica el mdtodo donde se lanzé la excepcién. >= En el wjemplo anterior se llama al método read) del objeto System.in que es el método basco de lectura de un carécter por te:lado, Generiimente, le que se huce es leer una linea completa desde teclado, no un earécter nada més. Por lo tanto hay que utilizar el siguiente ebdign nputStreaRaadsr ist = new InputStresnteader (System in) : BufferedReadar buff = new BufferedReader (isr): string In roadbinet) : En este cig ne crea tin objeto det tipo InpurStreamRenser al cual se fe pasa como parimetro en el constructor 1 objeto Svstem.in (gus es un InputStream). Es una clase derivada ie Reader y acepta en el eomstructor come pardmetro un InputStream, En la siguiente Hnea, el objeto buff va a pediv un reader al erearse y apravechamos para pasirle coma parémetre el JnputStreamReader (iss) que hemos exeado auteriormente. a ‘Tuco ) tra forma de leer datos desde teclado es el siguiente: ‘String sdato = System.console().readlLine(); /flectura de un string dato = Integerparselnt(sdato); //transtormacién del string en entero, © System.err. Roferencia a la salida de error estindar que, al igual que la salida estindar, es la pantalla, Utilizado para mostrar mensajes de error, Al igual que System.out tiene lox métocdos print) y printing). Un cjomplo de utilizacién de este objeto es el siguiont int arto, b-o, €; ea/bs cateh (Ari thmeticException e) ( syaten.e::.printin|*Error: * eage()) 7 1 system, out printin{-Resultado:*+ } 2 5 PARAMETROS ¥ «2 VALORES DEVUELTOS Los métodos pueden permitir que se los Tame especificanto sui serie de valores. A estos valores se les denoming, pardmettos. Los parimettas puodos tener un tipo Uasico (char, int, boolean, etc.) a bien eer un objets, Adams, los :métodos (salvo el constructor) pueden retornar un valor 0 no (en exe caso se pone void) Pardmetro del tipo char at public void setcol6r(chir c}{color=c:} pubfic char getcolor(j{return cotpr,} “ipo ae valor Vator doweto dente Tone gu er al tipo en Piguve: 2.2, Porinntrasvloreadecurtion por us mitts Ba la figura anterior se pueden ver dos métodos para la dase pio, setcolor la cua) admite un pavdmetio y getcotor\n cual deruelve un vator de tipo char Zo 6 CONSTRUCTORES Y DESTRUCTORES: . DE OBJETOS Hy Java existen unos métodos especiales que sox los canstruetores y destructores del objeto. sus mltndos son apcionales, es decir, no es obligaturie prograniarlos salvo que se neeesiten, © Fleonstructor del objeto es un procedimiento llamada automiiticamente cuando se crea wn Sbjeto diosa elas Sie! programador no Jos deciara, Java genoyard uno por defecto. La funcién del constructor os inicializar el objeto, © El destructor, por «i contrario, se sjecutari automiticamente siempre que se destruye un objeto de dicha clase, Los destructores, genevalmente, se utilizan para \berar yeoursos y covrar flujos abiertos (realiza una Rimpiora Final), Los dest uetores no reciben pacémeitos, al eontraria que los conetructores, la sobrecarga wa est, permitida. En C+ destructor se denomina igual que el constructor nada mas que se Ie eoloca delazce el simbola ~. Bn Java, In dostruceidn de objetos sigue atra filosofia distinta a la de vives leaguajes de programacidn. Bl sistema de dostrseckén de objeios ya se Ver mis adelante en profundidad. rc Importante: Destructores en Java En lava NO hay destructores como en C++. En ol siguiente eddigo se vordn los constructores pars la elase pajaro: class pajaro ( //*** acclbutos 0 propiededes **** privata char color; //propiedad o atributo color private int edad; //propiedad o atributo edad //*** nécodos de la clase **4* pajaro() ( = vi edad = 03) //constx; or de 1a clase pajare pajaro(ch. int ¢){eoler = c; edad * @:) // constructor de la clase péjaro 7 Bai denis métodes de la clase */ public static void main{string{] args) ( //mbtodo main pejere p1.p2: pisnew pajero() 7 pasnew pajara(ta’,3) Como se puede ver, el constructor de la clase pajaro eaté sobrcenrgado. Ex posible crear objetos de In clase péjaro de distintas formas. 2 7 USO DE METODOS ESTATICOS Y DINAMICOS En este apartado se va a ver cudinds un métedo o atributo dohe do ser estiitieo y cudnda no, Cuando un métado atributo s0 define como stetic quiere decir que se va a crear para esa clase solo una instancia de ese método o atriturto. En ol ciguiente cam so ve como se ha creado un atributo numpajaros que contara ol miimero de pAjaros que se van enerands- Sirs» atributo no fuera estatien seria imposible contar los pajaros, puesto que gn cada instaneia del objeto se crearia una variable numpajaros, De la misma manera, el método nuevopajara(). muestrageajaros() 0 el método main( tienen sentido que sean ostitivor class pal ( //*** atributos o propiedades +s## private stal numpajaros-0; private char color; //propiedad o atributo color private int edad; //propiedad o atributo edad //-** wétodos de la clase * static yold nuevopajaro(} (numpajaros++:1: pajaro() {color = ‘v"; edad = 9; nuevopajaro();) pajaro(char ¢, int e}(color = cj edad = e; muevopajaro();} static vold mescrapajaros|) (system.out.printin(numpajacas) 7}: public static vold main(string[] args) { Pajaro p1,p2; pisnew pajaro() pa-new pajaro(*a™,3); pl.muestragajaroa(); apajaroa(}; a a) oer) igure 24. Glow pajavayobiets dedi le Como se puede ver en la Sigura anterior, el atributa aumpajaros y los métodos nucvspajaro(}, muestrapajaros() y ‘matinO) se comparten por todos los abjetos creados de Ia clase péjero, 2 LIBRERIAS DE OBJETOS j »© (PAQUETES) a Recuerda Libreria a paquete es le mismo. Un paquete v package es un conjunto de clases velscionadas entre si, las cuales extn ordenadas de forma avbitraris, Las cases que forman parte de an paquete no derivan todas ellas de una misma superclass. Por ejemplo, el paquete java.io ngrupa laxckases que permiten x an programa realisar In entrada y salida de informaciém, Un paqueve también puede contener a otvos paquetes. Can el uso de paatietes se avitan eonflictos, como amar das clases cat el mismo nombre (si existen, estardn cada una en paquetes diferentes), Al esiarren of mismo paquete, Jas clases de diehos Paquetes tendrin un acceso privilegiato a los miembros de dato ¥ métodas de otras clases del mismo paguete. a Recuerda Gracias 2 los paquetes €s posible organizar las clases en grupos, Las clases de un misma paquete estén relacionadas entre si, > LA SENTENCIA IMPORT Imaginemos que queremos utilizar una clase contenida en algiin paquete, la forma de utilizar dicha clase es generalmente utllizando la sentencia import. Podemos importar una clase individual, como por ejemplo: ) © bién podemos importar todas las clases de un paquete: En este caso podremos utilizar todas las clases del paquete, Un ejemplo de esto seria et siguiente: mport javx.awt ‘También es posible utilizar la clase sin utilizar la sentencia impor java.awt.Frame fz * new java.awe.Prane( “Panel ejemplo" } Generalmente, cuando se van » crear varios objetos de una o varias clases de un paquete no se utiliza esta Ultima opeién poraue hay que escribir mucho cédigo. Un applet. Un applet es una aplicacién Java que se ejecuta en la ventana de un navegador: Los applets se ejecutan cen fa maquina del cliente y nunea en el Servidor. @RA-MA 2 PROGRAMACION ORIENTADA A OBJETOS. OBJETOS Pree ey 3. Permite Ia’comunicacién del pragrarma con ficheras Jptalo Sialiy Pagyete con clases evenciales de Java, No-hace falta ejecutar le sentencia Import para utilizar sus clases. Libreria por defecto. java.uti Libreria con clases de utlidad general pare el programador. java.applet Libreria para desarroliar applets. Javacant Librerias con componentes para el desarrollo de Interfaces de usar. ae Libreria con componentes para el desarrollo de interfaces de usuario. Similar Java.swing al paquete aut. ree: En combinacién con la librerfa java.io, va a permitir crear aplicaciaries que aren realicen comunicaciones con la red local € Internet Javesnatin Ubreria con todo tipo de utmidaces matematicas, Jevasal Libreria especializaca en el manejo y comunicacién con bases de datos, sava.secunty Libreria que implementa mecanismos de seguridad. Java.rmi Paquete que permite el acceso a objetos sittuades en otras equipos (objets remotos), jeva.beans Libreria que permite la creacién y manejo de componentes javabeans. Un javabean Un Javabean es un componente reutiizable que encapsula varias objatos en uno solo, Bean es una vaioa en inglés y, como su nombre indica, permite tener un tinieo objeto en vez de varios més simples, LOCALIZACION DE LIBRERIAS ara encontrar una elise u otru recurs Java necesita daz ensas: El nombre del paquets, Las rutas donde estsn situados los paquetes y Ins clases (path de biisqueda mas conocido como CLASSPATH, E] CLASSPATH sieve para locatizar clases croadas por el usuario o terceras porsonas que no son parte de Ia platatorma Java, Establecer el valor de esta variable es nevesario cuando se va a utilizar wna clase que no esti en 49 el mismo directorio ( subdirectorios) de la clase donde se esis trabajando 0 ne estd en ningtin lugar definide por el mocanisme de extensiones Una alternstiva a eatablecer el valor de la variable de entorno CLASSPATH es utilizar las opciones -ep 0 classpath (es lo misma) al ejecutar Java Gaya, javac, javah o jab. Imaginemos que tenemos un paquote utilidades-proyecte y dentea de él una clase que se Hama progemnn class. Esta clase ae encuentra on la siguiente ruta; Sava/Misclases/utilidades/proyecto Para ejecntar la clase deberiamos de ejecutar el siguiente comanda: Lidades, yecto-pregrama & Java sclasspath /Yava/Miscl Otra opcién es establecer Ta variable de enterno CLASSPATH CEASSPATH - /java/Miaclasesspath2ypatha expOre CLASSPATH Y lucgo ejecutar el siguiente comando: % java utilidades. proyecto. prograna Java ya se encargarin de buscar la clase en el directorio especificada por la variable CLASSPATH. cr» Importante os valores de la variable de entorno CLASSPATH estén separados por dos puntos *:" en Linux/Unix y por unto y coma ";" en sistemas Windows®. RESUMEN DEL CAPITULO Fin oste tema se va a abordar las earncteristieas basicas de la programacién orientada a objetos. El objetivo del misma es comenzar a trabajar ean ta orientacién # objetas mediante las caracteristicay mas baisieas de la misma, El alumno deberd de poner incerds en vl aprendizaje de estos conceptos que serdin desarrollados mas en profinndidad en los eapitulos 4 y 5 de este libro. Una ver. trahajado cl toma, el alumno sord capaz de resolver problemas basicos utilizando clases con métodos sencillos. EJERCICIOS RESUELTOS © 1. Realiza una clase Temperature, ta cual convierta grados Celsius a Farenheit y viceversa, Para ello crea dos métodos double celsius ToFarenheit(double) y double farenheitToCetsius(double). En Ja construceidn ten en euencs tae siguientes firmulas: Fabrenheit a Celsius C= (F-82V/1,8 Celsius a Fahrenheit P= (1,80+ 92, Soluetén: clase Tonperatuca { public static double celsiusToParenheit (double temp) { return {i.2)*temp + 327 ) public starie double farenheitToc: { ius(double tem) return (tema — $2 (1.85 static void main(Steing!] args) ( System.out-p System.out.arintin(#15 gradoe Celeius son ~scelsiv belt") System-our.printin("a0 grades Celsius gon “-celeiusTorsrenkeit(20)>*" Grados rarenheit”); acem.out.printin("0 grados Farenheit son “+farenheitTocels ceisiuer): intin(*@ grados Celeiue gon “rcelsiusToFarenhest (o}s" Grados ‘eParenhest{is)+* Grados wr Systen.out.printin(*40 gfatios Farenkeit oon */farenheitTocelsius|s5)+* Grados Celeiuet); System.cut.printinir70 grades Farenheit son “tfarenheitToCeisiue(70)+" Grados celsius“); 1 1 programa anterior dard la siguionte salida: © gradas Celsius son 82.0 grados Farenheit. 15 grados Celsius son 59.0 grados Farenheit, 20 gradoe Celsius son 65.0 grados Farenheit. 0 grados Farenheit son -17.77777777777778 grados Celsius, 40 grados Farenheit enn 7.222222222272222 grados Celsius, ‘70 grados Farenheit son 21.1111 11111 £1111 grados Gels, ; © 2. Tenomos la siguiente elase eoeke: 5 claee coche ( Pi coche () {velocidad-o vate int velocidad; Aiade a la clase coche los siguientes métodos: int getVetocidad), Bate método devuelve la velocidad actual oid acelerafini maa). iste método actualiza Ia velocidad a mas kilémotros mis. void frena(ine menos). Este métado actualiza la velocidad a menos kilémetzos menos, s Solucton: “private int veloc: coche () {velocidad=0;} public int getVelocicad() {return vsiocidad:} public void acelera (int mas) {velocidadt=mag? frena (int m public vo pos) {velocidad- =meno: © A Avorigna si son vordaderas o falsas las siguientes afirmaciones: ° 2. Lasclases que forman parte de un paquete deben derivar todas ellas de una misma superslase 2, Bn una elase Java los atributos pueden ser tipos primitives o bien pueden ser objews de otra clas, 3. Cuando se escribe un programs o aplicacién orientada a objetos, lo que se hace es definir Ins clases de objetos dotindolas de estado y eomportamiento y cuando se ejecute el programa seerearin los objetos, ya sea estatien o dindmicamonte. 4. La ocultacisn de informacién significa que al proporcionae los Gcheros class el programador no tione por qué proporeionar los ficheros java donde reside todo el viigp, Un paguete 0 package es un conjunto de clases relacisnadas ontre sf, las cuales estén ordonadas de forma, arbitravia, Un javabeun es un componente reutilizable que encapsila varios objetos en uno solo. 7, Til método void print Stack Trace() indica el método dane xe Lanz la exeepeidn. 8. La absteaceién en POO es una de las propiedades fimdamentales de la misma mediante la eual los objetos ce ven seugin su comportamtionto extorno. 9. El polimortisma permite croar varias formas del mismo métedo, da tal manera que an mismo métade ofrezca ’ cumportamientas lddnticas pore oon distinta forma. 10. Las clases se escriben en fieheros ASCII. Fl nombre del fichero puede ser eualqstiera, pero lo importante es que la extonsién sea java 1. En un programa orlentado a abjetos primeramente ze crvan los objetes y entre ellos co onvian mensajes > proceaindose la jnformecidn, para luego destrairse y libevar la memoria quo estaban veupanda. 4, {Hist correctamente dofinida la siguiente clase? {Compilaré 0 habrd que modificarls para poder gunerar el fichern clase? class pajaro 4 public yold setedadlint ©) (edad public void printBdad() (Syavem,qut-prinkin {edad} +> public void setcoler (char c) {color privete char eclor; ) private int edad; > 1 Soluctén: Realmentn ln clase compila y fumeionara xin problemas, No obstante, los atributes se suelen colvear yor eonvenio cen la parte superior del euerpo de la clase ¥ los métodas en la parte inferior. No es comein encontrarse los atributos al final “© 5. La siguiente clase tiene problemas de compilacibn’ public class satelite { > private double meridia: private double paralel private double distancla_tierr sacelite (double m,double p.double 4) ( ) paxalelo-p; distancia _cherrasd; s satelite (){ set \dlano-para lelo-distancia_tierzs-4; Daraiele distancia riorra-d: ) public yold printPosician() ( e-println(«El satélite se encuentra en el paralelo *+ paralelo+* ge la tierra de ‘+d iano“ a una ancia_¢ierra diano KLlonetros*} > x > = 6, Crea una clase rebajas con un método deseuhrePorcentaje() que deseubra el descuento aplicade en un producta. El método recibe el precio original del producte y el rehajado y haya el porcentaje. > y ‘ > y > i e bs yA = a > EJERCICIOS PROPUESTOS > i ou ia = tw > 1, Realiza una clase finaneas que conviesta dalares a euros y viceverss. Corlifiea los métodos dolaresToBuras v euroeToDolares. Pruche uv dicka clase funciona correctamerts haciendo ronversiones entre euros y délares. Lat clase tiene que dener Un constructor finanzas() por defocto cl cual establecers el cambio Délar-Ruro en 1.36, ‘Un cunatructor finanzas(double), el cual permitiré configurar el eambio délar-euro. © 2. Realiza una clase ménumer que proporcione el doble, triple y cuddruple de un niimere proporcionado en st constructor (realiza un métado para doble, otto para triple ¥ otro para cuddruple). Ha que laclase tenga un mitodo ‘main y comprucha los distintos métodes. © RAMA 2. PROGRAMACION ORIENTADA A OBJETOS, ORJETOS 3. Realize uns clase ndznero que almucene un niimera entero ¥ tong les siguientes earactovioticas Constructor por defect que inieializa a 0 el nétmero interno. Constructor que inicialize ol ntimoro interno. Método aniade yue permite samarie un nlimeso al valor interno, Método resta que rosta un némero al valor interno, Método getValor, Devuelve el valor interno. Método gotDable, Devuelve el doble det vator interwa “Método yet'Triple, Dewarive el triple del valor interno. ‘Método setNumero, Inicializa de nuovo el valor interno. 4. Emparcia ada paquete con su correspondiente deseripeisa: Tabla 2.2. Tabla ejercicio 4 or ja cy eG Tr Paquete con clases esenciales de Java. No hace falta ejecutar la sentencia devavescitty, import para utllizer sus cleses, Libreria por defacto, javesrmi \Ubrerie especializada en el manejo y comunicacién con bases ce datos. fave.beans Libreria con clases de utiidad general par ol programador. Java.applet Ubreria para dessrroliar applets jevaumath Ubrerfa que implementa mecanismos de seguridad, Paquete que permite | access) 3 objetos situados en otros equipes (abjetos java.sql re ae Libreria de Entrada/Salida, Permite la comunicacién del programa con Ficheros § y pesifericos. Jave.awe Librerias con componentes para el desarrollo de interfaces de usuario, Java.cwing LUbreria que permite ip creacin y manejo de componentes favabeans ae Lbcerias con camponentes para eb desarrallo de interfaces de usuario, Similar ya al pequete avrt naa En combinacié | con ta lbreria java.io, va a permitir creur aplicaciones que xen realicen Comunicaciones cor la red local e Internet pva.util Libreria con todo tipo de utiidades mateméticas. 55 © 5. Madificacivin del ejercicio resuclto mimero 8. “» Modifica la clase satélite y aitédele los siguientes métodas: y Método void variaAltura(double desplazamiente). Esto método acepta un pardémetra que sera positive 0 7 negativo dependiendo de si el aatélite tiene que alejarse 0 accrearse a La Tierra, Método boolean enOrbita). Este métado devolverd false si el satélite esti en tierra y true en caso > contrario. Método void variaPosician(clouble variap, double variant). Bate étodo permite modificar lve abributos de posicin (meridiane ¥ paralolo) mediante les pardrsetros variap y variam. Estos pariimetzos serin valores positives » negitivos relatives que havin al satélite modilicar su pasiei6n. © 6. (Bjorcicio de diticultad alta) Crea la clase peso, la cual tendiré las siguientes caracterfsticas: “+ Deberé toner un atributo donda se almacene el peso dte un objeto en kilogramos. © Encl constructor < le pasaré ¢l peso y Ia medida en Ta que se ha tomado CLD" para libras, 4! para lingotes, ‘Oz! para ontzas, ‘P” para peniques, “K’ para kilos, "G' para gramos y Q’ para quintales). “© Debers de tener los siguientes métodos: > getLibras, Devuelve ol pese en libras. > getLingofes. Devuelve el peso on lingotes. > netPeso. Devuelve el peso en la medida quo 2e pase como parimetro (Lb para libras, Li’ para lingotes, Oz’ ara onzas, P' para peniques, ‘K’ para kilo, ‘@’ para gramos y'@ para quintalo), © Para la realizacién del ejereicio toma eomo refeencia los siguientes datos: ) 1 Libra = 16 onaas = 483 gramos. 1 Lingote = 82,17 libras = 14,59 kg. ) 1 Ona = 0,0625 libras = 28,45 gramos, > 1 Penique = 0,05 onzas = 1.55 gxamos. > 1 Quintal = 100 libras = 43,3 kg, > "© Crea ademis un métoda main para teateat y yerifiear los métodos de ests clase, © 7. Crea una clase con un método millasAMetros( que toma como pardmetro de entrada un valor en millas mayinas y las convierte a moiros. “© Una vez tengas este métoda escribe otro mitiasAKilometros() que vealice la misma convorsin, pero osta vex exprese ef rasultads en kilémeteos. Nota: | milla marina equivale a 1852 metros. © 8. Croa la clase ence con dos constructores. Uno no toma pardmetros y ol otro «i, Los das constructores inicializarn Jog atvilvutas marea y modelo de la clase. Crea dos objetos (cada objeto llama a un construetor distinto) y verifiea que tode funciona correctamente. © 9. Implomenta una clase consumo, ta cual forma patve de la centralita electrénica de un coche y tiene las siguientes caracteristions: & Ateibutos: kms. Kilémetros recorvidos por el cache litens. Littos de combustible eonsumida, vmed. Velocidad media, pas. Precio de Ia gasolina, & Métodos: gotTiempo, Indicar‘ el tiempo empleado en realizar el viaje ‘consumoMedio, Consumo medio del vehiculo (en litros cada 100 kilémetros). ‘eqnewmoBurs. Consumo medio del vebiculo (en euros cada 100 kildmeteas). No olvides crear un constructor para la clase que establezea el valor de los atributos. Elige el tipo de datos mas apropiado para cada atributo. ) 10, Para la clase anterior implementa tos siguientes métadns, Ios cumlea podrén maditiear ls valores de los atributos de Ia clase: setKms sothiteos setVned setPgas © 11. @Bjerciio de diicnltnd alta Bl vestaurante mejieano de seael cuya especilidad aoa Tas papascan chocos nos pide disefiar un métado con el que se pueda saber exntos clientes puedon atender con fa materia prima que tienen en almarén. Bl métad recibe In eantidad de papas v chocos en kilos y devuelve el ndmero de clientes que puede atender ct vestaurante Ceniondo on cuenta que por cade tres personas, Israel utiliza un kilo de papas y medio de chocos. © 12, Modifica el programa anterior creando una clase gue permita almacenar los ilos de wpa ¥ ehacos ded ) restaurante. Implementa los sigiiontes métodos: Public void addChocos(int x). Aftade s kilos de chovas a los ya existontes. public void addPapasfint x). ASade » kilos de papas a los ya existentes, public int getComensales(), Devuclve el nimero de clientes que puede atender ol restaurante (este es el método anterior) publie void showChoros0. Muestra pot pantalla los kilos de choeos que hay en el almacén, publie void showPapas(. Aiude Muestra por pantalla Jos kilos de papas que hay en e slmacén, Solucién al ejercicio resuelto mimero 3: 4. Foleo 5. Verdadera 9. Falsa - 2. Verdadera 8. Verdadera 10. Faisa 3. Verdaders 7. Verdadera AL. Verdadera 4. Fala 8 False Solucién al ejercicio resuelto mimero 6: class satelive { //elass se escribe con doble « privete double mezidiano: private double paraleloy //faita el ; del £inai private double distancia tierray satelite (double m,double p,wouble 4) ( meridiano-m publ paralelo=p; Aistancia tierra-d; ) satelite [){ //cutdade con los acentos neridiano-paralelo-distancia_tierra=0: } public void satPosiclon|double m,double p,double a) { //os parénetzos siempre separados por comas pazalelo-p; distancia ticrea-d; //variable mal escrita void princPoaicion{) ( system.out.printin(«El setélite se encuentra en el paralelo «+ paralelo+ « Merisiano «+meridianoss a una distancia de la Cierra de «sdistancia_tierra+» Kilénetros») : // forna correcta de mostrar e1 estado del satélite } pub eeeeeeeneseod ¥ Conover y saber aplicar las estructuras basieas del Fenguaje de programacién Java. ¥ Controlar las excepsiones bésions que pueda generar un programa. ¥ Reconocer la importancia de ta documentacién en el desarrollo de aplicaciones. F Conocer el proceso de prueba y depuracidn de programas. a~ tas seatencias Una expresién es una serie de variables/constantes/datos unidos por operadores (por ejemplo 2"PI=radio). Una sentencia es una expresién que acaba en ; (per ejemplo area = 2*PI*radio;). 3 1 ESTRUCTURAS DE SELECCION SO esreucrunas ir Bin Java hay tres tipos de estructuras if (if stele y itelseif-else), el formato de este tipo do estrueturas es el siguiente: ~ igure 24 etretuoa En los casos anteriores boolexp es una espmesidin booleana que pede ser verdadera o falsa, ejemplos de expresiones booleanas pueden ser: (a > 20 6 2*PI*radio>90). Depondienda si es verdadera o falsa co cjecutarin 9 no unas sentencias. Coms se puede aprociar, en el easo 3, seria product de combinar o anidar un if denteo do otro, 3 En la siguiente figura se puede observar edmo se ojecutaré ol flujo del programa para los casos anterinres 1 y 2 z Qo e : ae erica a Figura 32. ago de eeuidn en estructuros I 3 Un ejemplo de la utilizacién de estas extructuras es ol siguiente: it (as=4) t systen.out-printin| “la variable es igual a 47): > ) if (a> sit systen.out.printin(*"La Variable es mayor a 3* lelee{ systen.out printin(*La variable ep meno: if (a> sh system-out.printin(“La variable es mayos 3S"); jelse if(a = = 5)( system.out.printLa(‘ta variable es igual a 5") jelaer 9 Syotem.out.println("La variable es menor que 5"); System, out .printin (*gnhorabuena” jelset Syeren. out -println ("No has aprobado todas las asignaturas”)+ lelee| System.out.printin(*No has aprobade codas las asignaturas*): ) 0S swaren Rass Soe eae ee pee ree eae eee eee es ) cédigo limpio y facil de interpretar. Otra opeidn, es utilizar estructuras if para reso'ver este problema. El formate de Sade tene ive Figura 2.2. Batrsetire SWITCH Recuerda Si no se escribe la sentencis break, el programa seguird ejecutando as siguientes sentenclas hasta ‘encontrarse con un break o el fin del switcn. Dn ejemplo de utilizacién de esta estructura es cl que se muestra a continuacién: switch (posicion) ( case 1: System,out.printin{(*OR0") : break: case 21 System.outprintn (“PLATA”) ; break: case 3: Systen.out.printin(“BRONCE") ;break; case 4: System.out-printin ("DIPLOMA") ;break case 5: System.out.printin(*DreLoMA") sbreak: EN PREMIO") sbreak: default: Syatemout.prinzin( 3 ESTRUCTURAS ” DE REPETICION Las eatructuras de repeticién » bucles son utilizadas euindo una o varias sentencias han de ser ejecutidas cero. ‘uma o més veves. a Cuidado: ‘Ten culdado con los buctes Infiites. Los bucies infnitos son aquellos que no terminan nunca (aquellos cuya expresion booleanas siempre os cierta 0 true). En el cas0 de producirse un bucle infinito, e! programa se seguiré ejecutando y se quedars “colgado” hasta que el usustio mate el proceso, e o @e606 OEE) secre wane Elbucle while se utiliza cuando se tiene que ejecutar un grupo de sentencias un mimero determinade de veces ‘0 mais veces). Bl formato de estructura del buele while igure Sa, Ketracturn del bucle WHILE Un ejomplo de otilizacidn de esta estructura es el que se muostra a continuacidn: whilefnunero<-10){ /feucle que cuenta hasta 10 syatem.out.println (numero) ; numerar: » Este codigo anterior lo que hace es mostrar por pantalla }os aiimeros del 1 al 10. BUCEE DO WHILE P numero. $) gueremos que se incremente de 2 en 2 haremas entonces numero+=2. 3 ESTRUCTURAS DE SALTO , Consejo. Se desaconseja el uso dé las sentencias greak y continue salvo la Sentencia break para la estructura Swat. Lag sentencias de salto dificultan la legibilad de los programas y evitan que la programacién sea estructurada. SENTENCIAS BREAK ¥ CONTINUE La sentencia break ya vista antoriormente, sirve tanto para las estructuras de seleecidn como para las estructuras de repeticidn. El programa al enemntrar dicha sentencia se saldrsi del bloque que est giscutand 14 sentoncia continue, por el contsexio, solo 6 utiliza en las estrueturas de repetieiin (bueles) y To que hace es ‘orminar Ia iteracién jy eontinéa por la teraction i. Un ejemplo de utilizacién de continue seria el siguiente: int while(i¢t0){ {Jeste programa miestre los ntneros del 1 @ iu1; // sin mostrar el 5 8) feontiaues ©) SENTENCIAS BREAK ¥ CONTINUE CON ETIQUETAS Lay sentoncias break y continue on etiquetas mantienen of mismy fyncionsimiento salvo que en esta ocasidn el programador puede controlar qué bucle es el que se deja de ejecntar o on qué bucle continua. Un ejomplo de break von etiquetas es el siguiente: bucleest : while(icioo) (ant d-Orgetejerd systen.our.peint(**): Af (i=*5) {break bucle 1 System.out printin(*) ; En este oidigo se puede aproviar que solamente se ejecutaniin cuatro iteraciones, an la quinta Ge deja de ejecusar el hucle while principal. . La Consejo Ejecuta y estudia detenidamente el siguiente cédigo. Modificalo para crear le pirdmide con mas © menos {ineas, Bn el siguiente ejemplo se combinan las sentencias break y continue can etiquetas: int 4 bucleext + while (i<20) { for [int keLsk¢(20-1); if (Lez >= 0) {cont systen.out.print\*_") for (int jmo:jciisrr systen-out-print 2s ‘system,out.printin(*=) 9) break bucleext; , SENTENCIA RETURN Ja sonteneta return es otra forma de salir de una estructura de control. La diferencia eon break ¥ continue es jecutando y permite devolver un valor. Por ejomplo: que return sale de Ia funcidn 0 método que est 2 return $; {/eale de la funciéa o mévodo y devuelve el valor 5 3 4 CONTROL DE . EXCEPCIONES El control de excepciones va u permitit al programador controlar la ejecucién del programa evitando quo fate falle de forma inesperada, ‘La ostructura del control de excepeiones tiene el siguiente formato: Piguces 23. Chair de scepcioner, xrucira THECATCE-FINATLY El programa intentara proteger las sententiss situadas dentro del bloque try, en el easo de que ocurrs un error se intentaeé controlar Ia escepcién mediante los blogues catch (dependiends de la excepeisin se ejecutaré un hloque de céigo u otx0), E'bloque finally vs opeional, pero en caso de existir date ve ejecutard siempre. ‘Seva a vor un wjempla del control de excepeianes on los doe siguientes ejemplos. ‘Veamos el siguiente progeama: class Test pubic static void main(String [] args) { ine @-10, b*0, os manuals do usuario y los manuales téeniece para los mecdinicos. Para qué quiero yo saber diene ostin situadion Jos inyectores, tus buns 0 fa trécata si ntinca la voy a cambiar. A milo que me interesa es saber emo se regula ol volante, eémo funciona la radio, ee.) ‘Vista esto, decir que en cualquier aplicacién, como minimo, se deberin de gonerar los siguientes documentos: ) © Manual de usuario. Ba, como ya se comenté anteriormente, cl manual que utilizerd el usuario para dosenvolverse con ol prograina. Dehers ser autoesplicativa y de ayuda para el usuario, Este manual debe de servirle al usuario para aprender cémo se maneja In aplicacién y qué os lo que hay que acer y lo que no, Si ‘como téenieo no vas a hacer un manual que le sirva al usuario en st comienso o préctica diaria es mejor mo hacerlo o realizar otro tipo de dacumentaeidn. © Manual téenieo, Ks el manual dirigido a tos tdenicos (el manual para los mecnices eitado anteriormente). Con esta documentaciin, cualquier ténico que conozea el lenguaje con el que la aplicacidat ha sido cree doberia de poder conocerla casi tan biew como el parsonat que fa cred. © Manual de instalactén. Kin este manual se explican paso a paso los requisites ¥ eémo se instala y pone en funcionamiento la aplieacién, Desde Ia experiencia, recalear una vex més la importancia de la doeumentacién, puesto que sin documentacién luna aplicacién o programa es eamo tn cocke sin piezas de repuesto, cuando tenga un problema o haya que reparatlo no se podré hacer nada RESUMEN DEL CAPITULO Em este capitulo se trabaja con tag estructuras bitsieas de control del lenguiaje de prosramacidn Java (cstructuras de veleccién, repeticiin, ealto, control de excepciones,..} que son ka Vase de todo lenguaje de programacién. El alumno, una vex trabajado este tema, podré abordar y resolver uma gran cantidad de ‘problemas. Es importante que el alumno comprenda y valore Ia importancia de ia documentacién, praca ¥ depuracign do programas puesto que son pilaras baisicos de Ia ingenierfa del software y su aplicaciim es de obligado eumplimiente en proyectos de envorgadura.. EJERCICIOS RESUELTOS © 1. Transforma el siguiente bucle for en un buele while: Solucion, © 2, Realiza un programa utilirando buctes que muestre la siguiente figura por pantalla: Solucion: Liaeks (rtsdse3sd4+) { //bucle que caeata hasta 1¢ for (k=1;k a-Lake+} 1 system-out.print(* |; } for (ja4sJen2"(i-1) 411504 syatem.out.print ¢ 1 nt); © 8, Realiza un programa que muestre por pantalla Jos 5 primexas niimeros pares. Solucién: 5 int nunexo = 27 nunero=0 ;nunero<=10, Syotem.out numero+=2) { © 4. Realiza un método que, dado un nimero de tres cifras, averigie si es un ntimero Armattong. Un niimero es Armstrong cuando In summa de ead uno de los nsimeros que lo componen elevacio al nimero de digitos de dicho _nimoro da como resultado el propio nsimero, Como est dofinicién es algo compleja, con la siguionto imagen se ver ras claro qué os un niimoro Armstrong: Som ~«id~«d 153 = 1553 Boe ean cece: Solucién: class armstrong { public static int potencia(int base, int exvonentel { int res-basi ne i-0;isexpon nte-tzies} tes - zen + hase? © 90e@00 @0o ‘Solucién: public static int emstrong(int numero) ( int ~ mumero/100; int cifra2 - (numero - 100%cifrat! /10; int eifra3 - mumero - 100%cifrat Lorestraas int dat - potencia(cifrai,3) +patencia (eifra2, 3) spotencia(ciéras 31+ Af (dat =+ numero) return return 0; public static void main(string{] args) { yt printin Af (armerreng (371) sys lelee! 1 ntimero. a7 2 system.out.printin(*F] niémero 371 No 3 Af (exwstrong (423) sv lelset <1) Systen.out-printin(“El némero i out-printin(*#l némero 423 ©0 429 No Armatrong") un niimere Armstrong"); nimero Arsstrong”); un nGnero Armstrong’? © 5. Realiza una clase letras que almacene una letra y la cemvierta a mastisculas, La clase tended Ins siguientes métodos: get Letrat) oh cual devolvers la letra printLetra() el cual muestra Ie letra por pantalla. public class letras ( private char letra; Jeeras(char 1) { Jetrs = 2 if (1 = tay letra ~= ta’; decra t= A: ) } Dublic char getietra() frerurn letra? Dublic void printhetsa()1 Syaten.our-peiniln(lecra); , Come ejercicio complemencatio, modifies ol programa anterior para que solamente aeapte letras vilidas (a-z A-2). Ein caso contraria, {a clase imprimiré “letra no valida” cuando se invoque el mé:ndo printietra(). © 6. Beoribo un programa gue cuente en pantalla de 200 a 300. Solucion: public clase cuenta | public static void main(String!] args) for(int 4 = 200; i ¢ 3027 ise! { System, out.printin{1); i “= 1. Bscribe un programe que cuente por pantalla del 1 al 10 en inglés. Utiliaa une estructura ssiteh que ineluya ta cldusula default Solucion: public class cuentaingles { public static void main(string{] args) { for(int i= 2¢ i ang ins) J switen(i) ¢ case 11 System.out-printin(*one"); break; ase 2: System. out.printin(*two"); breal case 3; Syston. out.printin(*three”); break: case 4: system.out.printla ("four"); break 2 case 5: System. out.printin ("five"); break : case 5: Systen.out.printin(*eix"); breakr S case 7: System. out,printia ("seven"); break 3 case 8: System.out.printin(*eight"); breaks case 9: Systen.out.printin(*nine”); breaks default: systen.out.printin (*ten") © 1. Realiza un programa con tres variables do tipo enteroa, by e. Bl programa deberd mostrar por pantalla el valor menor y mayor. = 2, Realiza un programa utilizando bucles que muestxe la siguiente figura por pantalla: © 3. Ejercicio de diticulsad alte} Realiza un program utilizande bucles que muestre la siguiente figura par pantalla: © 4. (Bjorcicio de dificultad alta) Roaliza un programa utilizando bucles que muesize la siguiente figura por pantalla: 5. (Bjorcicio de dificultad alta) Se desea conocer el lucky number (mimero de la sucrte) de cunlquicr persona, El rmimero de la suerte se consigue reduciendo la fecha de nacimiento a un niimero de un solo digito. Por ejemplo, ly fecha de nacimionta de Emma os I siguiente: 16.08.1973 + 1Gt8+1973 = 1997 + 1+949+7=26 + 246 =2, Bl timer de la suexte do Emma sora el 8. © Realiza un programa que caleule el lucky number de cualquier persona. © 6. Realiza um programa que muestre por pantalla las tablas de multiplicar del 1 a1 10 von el siguiente formato: Tabla del 1 , eo sectee 2 1x1 ° 2x1 2x2: , 2sa= 2x4 2x5=10 ) 2x6-12 237-14 2x8=16 2x9=18 2510-20 2 © 7, Tenemos la siguiente clave: 2 ) java.uth1ts ) ¢ void main (string!) args) { Random end = new Random() 7 > int valor = ind.nextint(): } , ) o Modis el programa para que talor est entree rang [100-20] y mucstre por pantalla si calor es par ome par > © 8 Realiza una clase con un método decimal ToRomano que transforme mimeros en formato decimal a nimeros en formato romano. © 9. (Bjercicio de dificuliad alta) Reuliza una rlase meicumera com.un métla esOmirp que diga vi un wimers oe Omirp ‘0 np. Un adiero es Omirp si es un mimeo primo y, acemsis, al invertir sus digitos da otzo ntimero primo, Por ‘ejomplo: 7951 y 1597, © 10. Realiza una clase minumero con un méinds exVampire que diga si un néimero es vampiro o no, Un ndémero es vampiro si es obtenida a partir del producto de dos ndimetos que se obtienen a partir de las digitos del mismo (los og colmillos). Por ejemplo: 2187=27x81 6 1260=21%60. © 11. Realiza un programa que muestre por pantalla los 50 primeros miimeros pares 12, Realiza un programa que muestre por pantalla los ntimeros del 1a 100 sin mostrar aquellos nsimeros mvitiplos des, Programacion 4! | orientada a objetos. Clases ¥ Comprender el concepto de recursividad y saber aplicarlo en la resolucién de problemas. ¥ Agrupar los programas y clases generadas en paquetes para crear una estructura mas l6gica y util. Trabajar en profundidad con el concepto de clase ¥ Disefiar ¢ implementar la estructura y miembros de una clase. ¥ Estudiar y comprender el concepto de constructor y finalizador ¥ Aplicar el concepto de herencia en la resolucién de problemas. ¥ Comprender el concepto de interface y su aplicscién en Java, 4 CREACION «DE PAQUETES a El concepio de paquete y CLASSPATH se ha visto en el eapftule 2, Sobre los paquetes hay que tmer en cuenta los siguientes conceptos: © Un paquete os un conjunte de clases relacionadas entre sf ‘Un paquote puedo contener a su ver subpaquet = ® Java raantiene su biblioteca de elaces on una estructura jenirguica, . ‘Cuando 208 referimos a una clase de un paquete (salvo que ee haya importad el puquete) hay que vefesitsc a In misma eepecificanda el paquete (y subpaquete si es necesario) al que pertenece (por ejemplo; java.io File). © Los paquetes permiten reducir los conilictos con los nombres puesto que dos clases que se Haman igual, portenocen a paquotes distintos, no deberian de dar problemas. | Los paquetes permiten protoger cicrtas clases no pablicas al acoaso desde fuera del mismo. = Para la creacién de un paquoté muy sencillo vamos a seguir los siguientes pasos: La idea es crear un paquete con dos clases y i mar a dichas clases destle un programa aparte. To primero que hay que hacer es crear en el directorio donde estamos compilando los programas un subdirectorio con nombre, por ejemplo, Whilidades. En esto subdirectorio vamos a tener varios paquetes (serdn subpaquetes del paquete utitidades). El prienero de ellos se va a llamar educacisny vamos. tener dentro de dos clases ya compiladas amadss saludar y despedirse (ealudar-class y despedirse.class), igure 41: Bsrustunsdertiwctovoa de Coa Cada subpaquete estar situado en un subdireetorio aparte del subdirectorio Utilidades. Como se puedo observar en Ia imagen anterior, se esté utilizando ol compilador Geany. En este directorio (Geany) se guardan los programas ¥ las clases, y es aqui donde cxcaremos estos subdirectorios. J Dieiire areeres lacs ence package Utilidades. educacion; impart java.io public class saludar! public void saludet systen.out-printia(*Hola"}; : 1 J) ** Bin cbdigorees //** Inicio cbdigor*** packaye Utilidades educacion; import. Java.io."s public class despesirse{ pile void despedida() { System.out.printin{“adios"? : > package Utilidades.edueacion; Notege que, con la gertencia anterior, ambas clases indiean gue pertenecen al paquete educacién. Una ver que he hecho esa, el siguiente paso ord importar ef paquete con Ja sontencia import. import: Utilidades .educacion.*7 public class test { public static void main(stringl] args) ( paludar e-new saludas (17 despediree a: oF s-ealudo(); d.despedida () Se ereardn dos objets, uno de cada clase (saludar y desperdirse) y se haco una llamada a un métado de cada clase ‘para verificar que el paquete funciona correctamente. Si se han realizado vckoe pasos eoereeiamente la compilaciét, no deberia dar ningiin error. 4 CONCEPTO . DE CLASE En Ja programacién orientada a objetos Ins clases permiten a los programadores ubstraer el problema a resolver ‘couleandi los datos y la manera ev ts que estos se manojan para legar a ix eoluetn (se oculta la implomentacién), In ‘un programa orientado a objetos es impensabte que desde el mismo programa se accedn directamente:a las variates Interna de una clase si no es a través de métodos getters y setlers (por cjemplo get iud() 0 setRdad). a Importante La abstraccién es importante en el andlisis y disefio de aplicaciones orientadas a objetos. La finalidad del ‘A&D 2 crear un conjunto de clases que resuelvan él problema que se est abordande. Por Io tanto, en la dafinicién de nuestras clases deboremos de cuidar lo signtiente: © No se deberd tonor acceso directo a la estructura interna de las clases, Bl acceso a los atributos sora a travis do getiors y setters, © Enel supuesto que haya que modificar el cétivo sin modificar c] interfaz con atvas clases o programas, esto deberia poder haverse sin tener ninguna repereusién eon otras clases o pgramas, Se busca que las clases tengan un alto grade de cobesién (independencia). En Java hay varios nivelos de aceuso a lox miembros de wna clase: © public (acceso publico) © protected (acceso protegido). © private (acceso privada), © no especificado (eccoso on sui paquete) ‘Cuando eapecificamos ol nivel de aoreao x un atribute 0 método de uns elase, lo que estamos especificando es el nivel de accosibilidad que va a tener exe ateibuto © métoda que puede iv dosde ol areoso mvs restrictive (private) al rmonos restrietivo (public). a Recuerda Una subciase es una clase que hereda ciertas caracteristicas de la Clase padre aunque puede afiadir algunas propia, Las subclases se estudtardn en profundidad mas adelante. Dependiendo de la finalidad dela clase, utilizaremos un tipo de aceesy u otro, © Acceso piblico (public). Un iniembro piiblico puede ser acceido desde cualquier otra clave o subelase que necesite niilizarlo, Una interlitz de una clase estié compuesta por todos los miembros piblicns de la misma. © Acceso privado (private), Un miembro privado puede ser accedido solamente deste los métndas internos de su propia clase. Otro acceso ser denegado. © Acceso protegido (protected), Bl acueso a estos miembros es igual que el soceso privada. No obstante, para Jas subclases.o chases del mismo paduete (package) ala que pertencee la clase, se consielerardn estos miembros como piiblicos. RAMA 4.* PROGRAMACION ORJENTADA & OBSETOS, CLASES, Acceso no especificado (paguete). Los miembros no etiquetades potrin se pertenociente al mis paquet Consejo Para un mayor contrat de accesa se recomienda etiquetar Tos y protected. acvedidos por cualquier dase smibros de una clase camo public, private ‘A modo de resumen se especificarin los niveles do seceso vistos anteriormente en Ia siguiente tabla: Tabla 4.1, Modificadores de acceso en Java De eee eed Pras | protected Poet eu oo) 4E] métado o atributo es accesible desde Ta propia case? EE] método o atributo es accesible desde ‘Otras clases en el mismo paquete? LEI método 0 atributo es accesible desde tuna subctase en el misma paquete? El método 0 atributo es accesible desde subclases en otros paquets? EI método 0 atributo es accesible deste ‘Obras dases en otros paquetes? (*) Bate caso na se suele da ‘pero no asi por objetoe de la superclase, con frecuencia si si st si CONTROL DE ACCESO A UNA CLASE Cuando ex que tendrs osa clase von las clasos de su mismo paquete, si si uo no No no si si no Se podria aeceder al atributo ¢ métndo desde objetea de la subclase mos una clase en Java es posible definir la relacién que esu clase tiene ean otras clases o Ia relacid 83 a Recuerda Una clase definida como pablica puede ser utlizada por fas clases de su paquete y otros paquetes mientras que una clase no definida como pila solamente podrd ser utilizada por las clases de su propio paquete. Cee oi) ee Cee ie) © REFERENCIA AL OBJETO THIS Java, al igual que C++, proporciona uns referencia al objeto con que so eaté trabajando. Bxta referencia se nomina this, que no es-ni més ni menos que el objote que est wjeeutaneda el método, Bn los ejemplos que hemos estado utilzando en muchas ocasiones se obviaba cata refsrencia puesto que se sobreentiende que el objeto ests invocando al método, Ko algunas aeasiones nos va a servie para resolver ambigiiedados o para devolvor referencias al propio objeto, Bn ef siguiente eiomplo so ve charamente el uso del QS observa En ef siguiente cécigo vas a poder apreciar que fa referencia this en ocasiones se puede omitiz Observa también cOmo se devueive una referencia al propio objeto en los métodos /acrementarAncho() incrementarAlto() class rectangule private int ancho - 0; private int alta = 6; rectangulo(int an, int al) f ‘anche = an; //se puede omitir el this thie.alto = al; } public int getancho() (ceturn this.ancho: Public int getaito() (return alto:} //se puede omitir el thie cangulo incrementar jentaraLtot) | (ED 14 chase opsEct aa Importante a clase abject es Ia raiz jerérquica de Java, Cualquier clase implementada en Java siempre va a ser una subelase de la clase object. Kep quiere decir que va ‘a hevesdar todos los métodos de object. De todas ioe métodos de la clase object vamos a ver evn miis profundidad los siguientes: Tabla 4.2, Métodos de la clase Object Cre Peay equals() Permite comparar un objeto con otra. Método invocado por el recolector de basura (garbage collector) para preein (ea ani pa teens nad z Método clone() El método clone nos permite eopiar un objeto en otro. Utilizar este método equivadtia a utilizar un constructor de copia, La clase bas» object tien oh métado clane()que esl mecanismo gue utiliza Java para clonar objetos. Es posible yen muichos casos necesario implementar un métoda elone, el cual sobrescribini al métode elone de su superclase ¥ podré actuar de una forma més especitiea que el método genériea cloned. superficial del objeto, El métudo genérivo clone) hace wna co he] ms? ear CLONAGION oat oB2 Figure 42. Copia enporiiat Como se puede ver en la figurs anterior, la copia superficial Gnieamente hace una copia del contenida de un objeto 8 otto, lo que en algunas ocasiones provoca que Ia modificaciin del contenide de un objeto implique el eambio en el clonado y viceversa, Ost _ rari] 802) ela CLONACION - Figure £3. Copla on profudiid Por ol contrario, las e2piaa en profundidad pueden hacer una copia selective dol contenido de un objeto-en otro, En este caso ambos objetas viviran “vids indepundiontes”. ‘Un ejemplo de realizar una clonacién da un objeto en dava seria el siguiente: 3 public e1as© cectangulo implements Cloneable { a private int ancho; private String nombre: ) public Object clone() | Object objeto=nulis try( objeto ~super.clone(); Jeatch(Clonettotsupportedexception ox) system.out .printIn(* frror al duplicar); return objeros 1 ctase teptecclone { public static void main(string() args) { rectangulo £1 = new rectangula($.7)7 rectangulo 12 > (cectangule) r1.clone(); 2, 4ncrementarancho() ntarALco() ; Nombre (“Chiquite’) seNombre ("Grande") system, out printin {alter *+rt-getalto()); Syatem.our.printin(*anehor *¥21,getancho()); Systom,out.printin (tale: “rc2-qetalto()); Systopl.out,printin("Ancho; *r2.aetancha()) 7 Syatem.out.printin(*Nombre: *+r1.getNonbre() er2.getNomb-e( in (Noms Systen.out.pt Como s¢ pusde absorvar, la clase objeto de la elonacidn deberd de implementar tx intoxfaz cloneable. Si no s¢ implementa esta interfaz, el programa lanzaré wna excepekin del tipo ClneNot Suppartedtexcention, Panabien se hs implementado et método elone(, el cual hace una llamada al métado cloned) de au clase base a Importante ) Muchas veces es mas cOmodo para el programador uttizar el constructor de capita que el método cione(). ‘Método equals) El método equals permite realizar una comparacién entre un objeto y otro. Le que hace es comprobar qu aimbas referencias sean iguales, con lo cual nu obtenemos mas ventaja que con el operadar = =, No huce una eomparacién en profundidad sino que se limita a comprobar las referencias de los objetos, Si se quiere realizar una comprobacién en profundidad habra que reeseribir este método. Un ejemplo de utilizacién de este método es el siguiente: rectangule ri = nev rectangulo(5,7); system-out -println(«Tguales 2(equals}>): 1 if (r1,equa: System.cut .printin(«rauales 11 y 13 (equals) BI resultado en pantalla de ejecutar ei eédigo anterior sev: “Iguales rly r3(equals) comprobacién sea verdadera habra que reeseribir ol método equals Para que la primera Método toString) B mitodo toString) permite obtener ol nombre de la clase desde el eual fue invocado, Ademds del nombre de la claxe, devuelve ol carécter ‘a’ y la ropresentacién hexadecimal del cédigo hash del cjeto, Un ejemplo de la Lamada a este métado es ol sixuiento: cangulo ri ~ ney rectangula(§.7) yetangulo r2 = new rectangule (5,7); gectangulo e3 = rly printin(s1. tostring()) + Systen.out.printin(r2.tostring\)) i System, out -printin(r3, testring()) + Este eédigo devolvers por pantalia lv siguionte: roctanguloa19saié rectanguloeaddbf1 rectanguice1se2 Como podemas observar en él cidigo, al hacer r3 = rl lo que hacemos es que ambas referencias apunten al misnio ‘objeto.con Io cual al invocar al metodo toStringO el resultado sord el mismo, “Mewde finalized ‘Cuando ol recolector de basura de Java (garbage collector) tione constancia de que no existen més referencias a un objeto concreto, invoca a axte método y se encarga de liberar 2x1 memoria ocupada. Si el programaitor necesita realizar una aceién una ver destruido un objeto deberd reescribir este método. 4 ESTRUCTURA Y MIEMBROS * DE UNA CLASE En osta sccvign so va a trobajar en profundidad con los miembros static, asf como con los métodos de instancia y de clase. Es importante que el alumno comprenda y axa diferenciar estos miembros y ambos métodos. ) MeMeRos EsTATICOS (STATIC) DE UNA CLASE / MIEMBROS DE CLASE Bn Java no existon variables globales, por lo tanto, «i queremos utilizar una variable tniea v que puedan utilizar terlos los objetos de una clase deberemos de declararla como exttica (static). a Recuerda A diferencia de los miembros normales o miembros de instancia, los miembros ge clase tienen la cléusula static y todos los objetos de la misma clase compartiran dichos miembros. ‘Veamos camo funcionan los atributos estiticos de una clase con el siguiente ejemplo: public class cohete! private static int nuscohetes=0/ ephete()( sumcohetest+: | public int getcchetes(}4 tetucn aumcohetes; ‘Tenemos una clase Ja cual tiene tun micmbro estitico. Esta variable numeohetes almarenari el nimero de objotos cohete que se van ereando, public class testestaticos | public static void main(Spring(} args) | cohete neta; cohete c2 = new cohete(); cat new cohete(); System.out .printin (ci .wetcohi systen.out.printin (c3.getcohetes() Cuando desde otra clase, por ejamplo la anterior, eo croan varios objeton do la clase cohete (9 objefos) y se Hama al método etcohetes() jqué valores devolveré dicho métoda? Systen. out. printIn(er.getcohetes()) + systenout.println (c3.getcohetes ())s La solucide es 3 en ambas Hamadas. La vasiable numeohetes so inieializa a 0 sole una vor (cuando public static void maia(string!} args) { ; for (int 1-0; 4 < 20; i+) { rectangulo r= new rectensulo(s, ) ? System.runFinalization() ; system.gc() y ‘Como se puede observar en et digo se ha definido el método finalized) como protected para evitar que pueda ser , invacada desde fuera de Ia clase. Bn of eédigo Jo que se hu hecho es crear una serie de abjotas cuyo scope o Ambito est reducido a un bucle for. > ‘Una vez realizado esto hay que tener on cuenta que finalized) no se invoca euando termina su scope (cuando termina el bucle). Bste método se ejecutani justo antos de ejecutarse ol garbage collector por la que en nueatro eidigo hemos tenido que forzar este hecho con las siguientes lincas ) System.runpinalization(} stem.cc 1) ‘Sin las anteriores lineas el programa no mostrar nady gor pantalla, ca Importante Ei garbage collector, gc 0 recolector de basura, se ejecuts en segundo plano en un subproteso paralelo 2 [a propia aplicaci6n. Le llamada al recolector de basurs se hace ejecutando e| método ge{) de la clase System, Resumiendo: © El método finalize) no os el destructor de C++, En Java no existe el destructor, existe Ja recolecciéin de basnra, © Bl método finatize() tiene que estar asociade a recuperar ta memoria que ha sido wtilizada y'ya no sirwo, mp hoy que programar otto tipo de cosas aqui © Bs el sistema y no el programador el que decide cudndo se ajecuta ol recolector dle basura. “ef Los objores pueden o no ser eliminados por el recolector de basura, Bn algunos ea¢os no se eliminan si no existe ‘una nocesidad de memoria. © Generalmente, se utiliza finalized cuando se hacen lamadas a métados nativos (por ejemplo en Co C++) para reservar memoria y luego ésta necesita ser liberade, © Visto lo anterine, as narmal pensar que el mustoda foralize() no se va a utilizar mucho en Java y,salvo neeesidad cospecifica, esto es siempre ast 4 7 ENCAPSULACION Y VISIBILI i . INTERFACES ‘Como ya sabemos, un objeto intetaetia con el mundo exterior a teavée de su interfaa, En vl easo de un ordenador, por ejetplo, 1as interfaces con ol mundo exterior serin a pantalla, el ratbn, el toclado, ete. Cuando nosotros tedleamos fen un ordenador, las tociag 0 a pantalla sitven para comunicarnos con Ja parte interna dal equipo. Imaginemos ue actualizamos 1a memoria, ol procesador y la placa base del vquipo conservando Ja parte software del mismo, La interfaz sord exuctamente Ia misma y las personas intoractuardn exactamente igual con ella. Lo nico que notardn ‘es uma mejora del rendimionto. Con Tos objotos pasa exactamenteTo misma, ia intorsecién von €) mundo exterior es 2 través de sus métodos. Los métodos eamponen la interfaz del objeto con el mundo exterior. Una interfaz es un grupo de métodos con sus euerpos vacios. Por ejemplo, la interfaz Figura (intfigura) podria ser ol siguiente: public dnterface in’ ant area(); iguza La intorfax dafine ol método area, para su posterior desarrollo en las clases que implementen esta interfaz. Una do las clases que podria implementar esta interfaz es la clase roctingulo: public @lase rectangule implementa int figura private int ancho; private int alts; rectangul (ine an, this.alto public int area(){ return anchotalto; ) Como se puede observar et I declaracién, la case recténgulo implementa la interfaz intflzura a Recuerda ara compllar corractamente una clase que implementa una interfaz, ésta debe contener los métodos declarados en dicha interfaz. 48 HERENCIA La herencia es ta base de la reutilizacién del eédigo, Cuando una clase deriva de una clase padre, ésta hereda todos Jos miembros y métados de au antecesor. También es posible redefinir (override) los miembros para adaptarlos a la nueva clase o bien ampliarlos. Kin general, todas las subclases no solo adoptan Ins variables y comportamiento de las superclases sino que los amplian, ~~ Recuerda En Java al contrario que en C++ no Se permite la herencia miltiple, Es decir, una clase no puede heredar de varias clases. En la siguiente figura ge muestea um ejemplo de herencia: figura cuadrado circule rectangula Figura 48, Baractanadestoncs dscondintos de igure, ‘Come se puede vor en la figura, en este ixbol do herencia tendremos la clase figure de las que heredan las clases cuadrado, cércula y recténgulo. Como es obvia, cuadrado, eéreulo y rectingulo tienen wna extacteriatien en comin 5 que todas son figuras. Otra caracteristiea que presenta este arhal es que, en este caso, las figuras por si mismas: no existen, es decir, existindn pero siempre deberd de ser a través de una clase de nivel inferior (eusdrado, eireulo © rectingulo). I Para indiear que una clase horeda de otva a0 etiquota con Ja cliusula extends detras del nombre de la clas ejemplo, pava indiear que la clase reeténgulo hereda de a cla figura escribiremos lo siguiente: Por clasg rectangulo extends figuea L +2.) Tqwal podremos hacer para las demas class: Jo extends figura ( --. | figura (... 1 a > Rpeaeee ‘Todas las clases tienen une superciase o clase Padre. Cuando escribas una clase, si sta no hereda de ninguna clase conereta en realidad hereda de la clase Object (java.lang.Object). class cuadrade extend Imayinemos que queremos realizar una estructura de cases como a que se muesira a continuacién, Bi eédigo de 1a clase figura y euadracio se muestra junto a la siguiente imager: ‘onject eusarado Figurad.s.decarguiode clases public class figural ing color: public void setcolor (String = public ug getColor() tretuen polars] public clase cundrado extends #igura{ private int Lado; cuadrado(int 1) ( thie-lado = 1; 3 public int getArea() ( return ladotlado Al utilizar la cldusula extends lo quo indicamos lo siguiente: La clase ewacirado os una subcluse de la clase figura. © La clase cuadrado puede utilizar los métodos dela close igure aunque no estén declavados un la case cuadrado (Giempre y euando no estén como private en la clase figura) “® Obviamente, los métodos de la subelase no pueden ser utilizados en fa superelase o clase principal, an Recuerda Las clases heredan el comportamianto de Sus antecescres (padres) pero no fo heredan de otras subclases (hermanos). Imaginomos que queremas testear el comportamiento de la jerarquia anterior, Para ello crearemes la siguiente ( void main(string{] args) { nev cuadrado(5) + e.setColor |*Verde") 5 system.out printin (C.getColo: () ) System. out.printin(c-getarea(}); class test®igura public stati cuadrado En esta clase se puede observar como se Hama a métodos de la superciase figure y de Ja subelase cuadrado. Solamente hemos tenido que crear wna clase euadrado pesto que los ateibutos y métodos de la clase figura los hn Tieredado Iu elase excadrado, tC) RESUMEN DEL CAPITULO Bn este capitulo se prafiundiza y se amplian los conceptos que se vioron en el Capitulo 2. Una vex ‘estoiado este eapituto et alumno se dari cuenta que en el Capitula 2 <6 vieron solamente los conceptos basicos para poder realizar nuestros primetos programas. Bn este eapitulo se entrard a estudiar en profundidad el eoncepto do clase asi com los miembros y estructura de una clase. Se verdn los métodos recursivos. Rl alunmo debera de comprencder a fondo el concrpto de recursividad para poder realizar Yow Gjercicios propuestos. También se veriin en este eapitulo algunas de las earacteristicas mis importantes de Java, como son tas interfaces y la herencia, Se recamiensda al alumno un estudio exhaustive de todas los apartados para luego poder profundizatr mis @ lo argo del siguiente tema. EJERCICIOS RESUELTOS © 1A. Realiza una clase con un método factorial que utilizando la recursividad yenere vl factoring de way mdimers ado, Solucion: Cama se dijo antes en el desarrolls del eapitulo, para resolver un ease recursive debemos encontrar; a. Una formula 0 proceso que reduzea La complejidad y nos vaya acorcando a la solueién, En nuestro caso sabemos quo por cjemplo factorial( es $* factorial), to quo os igual fastorialfoum) = mum * factorialinum -1), . Un casa bnse que hace que nuestra recursividad no sea infinita. Jn nuosteo caso sera factorial() En la siguiente figura se muestra el factorial de una manera més matematica: Sins0~4 nt Sin>=45(n-}t-n Pigura 410. Agari fatorta [El cédigo que resuelve of factorial es el siguiente: class Test { public static int factoz‘al (int num) 4£ (oun -= 0} return 1) return nun * factorial (num-1) ; : public static void main(stringl] args) ¢ System.out.printin(*Fl factorial de @ es : *+factorial(0)); Systom.out.printin("Fl factorial de 1 es : "tfactorial (1)): System, out.printin("El factorial de 2 es : "rfactorial(2)): syetom,out.printin(El factorial de 3 es : "rfactorial(3)): Syston, out.printin ("EL de 4 es : "*factorial (4); System.out.printin (“EL dg 5 e6 + “ttactorial (5); © 1B, Para el programa anterior, modifica el método pata. generar el factorial de forma iterative, Solucién: class Test [ public static ¢ it factorial (int num int factorial=1; whi le (rmum>0) | Factorial ++ num; ) return factorials , public static void main(stringt] args| { Systen.out.printin(#El factorial de Q es : “+factotial |0)): System.out.printin(*Bl factorial de 1 es : *+facterial (1): System.out.printla(“El factorial de 2 *sfactorial (2)): Sysvem.out.printin(¥El factorial de 3 es : “factorial (3)h System-out-printin(*81 factorial de 4 “yCactorial (4))i System,out-printla(*el factorial de 5 “stacvorial (5))1 2Qué vontaja tiene Ia soluctén iterativa frente la recursive? La soluci6n iterativa tiene la vontaja de la rapiden de ejecucisn (mas eficiente). La solucidn recursiva es més lenta pero en muchas pessiones (en esta coneresamente no) 26 ntucho mis fécil de entendar y mis facil de codifiear com lo cual, aunque tengamos un ciidigo menos afieiente ex mucho mas fécil de compronder y mantener. Como ejericio eomplementario modifi los métedos anteriores para que cuando se introdurca wn nimero rence 0.cl método muestre un mensaje de error y no eealice ningtinefleul. © 2. Realiza up programa con un método recursive que muestre por pantalla la siguiente sori: 0,1, 1,2 8,5, 8,13, 21, 34, Solucién Esta serie es un problema ampliamente conocido como serie de Figonacei. Se earactoriza por lo siguiente: Fibonacei(a , Fibonacci Y para todos loe demés nimeres: Fibonacci(n) = Fibonacei(n-1) + Fibonacci(n-2) El céiligo que resuclve la serie es el siguiente: class Test { DubLic static int fibenacci (int num) ( S£ (mum -= 9) return 0: 4€ (nun == 2) recurn 1; return fbonaces (num: 1) +£ibonaces (num-2) j a public static void main(string{} args or (int i=0;{¢10;4++) System.out.print (fibonacci(i)+*, “14 © 3. Realiza un programa que utilizando recursividad muestre por pantalla la siguiente pirdmide: 4 ve aA 1334 14641 Fgura 411, Tingatermrce BI programa podra yenerar una pirdmide de cualquier nimero de Glas, Solucién: z Céimo resolver el problema? El primer paso, desde mi punto de vista, es observar el problema desde otra perspectiva, Hl mirar el problema como una pirimide evita podorresalverio de forms satisfactoria. Si medificamos el programa e intentams resolwexo.como si fuese una pirimide tondrin mis sentido. La pirdmide antevior on forme matricial seria la siguieube: De esta maériz podemos conchae lo siguiente: © Los clementos con valor 0 no we mostratin, } © El primer elemento de cada fila vale 1. 5 © Los elementos cuya columna sea menor de 1 valen 0. © Los elementos euya columna sea mayor que la fila valen & © Para los demis clementos, el elemento(fila, columns) es igual al clemento(fila-1,columna)+elemento(fila- ,columna-1) Una ver que tenemos claros estos principios ul signiente paso es programar el método. Observa que es la iiltima rregla la que implica que este método sea recursive, Com esto va tonemos casi realizado el progyama, La programacisn de los bucles no parece compfeja s eotas alturas pero lo gue pueds roqultar mis complejo ex “envlerezae” la piramide introduciendo expacios en blanco antes de imprimir cualquier niimero, En nuestro caso sea resuelto el problema affaiersdo nusrilasfilaectual o mejor dicho) ‘numfilaei espacios en blanco ea eada linea y de esta manera se impeimirdn 4, 3,2, 1y Oespacios en blanco en cada linea. > class piramide ( public static int elenentolint fla, int colunna) | if (columa == 3) return 17 if (columa <2 || columia > erurn OF xeturn elenenta (Fila-1,columa) +elenento(file-1,celuma:t 1 public ctatic void main(Stringl] args) { ine nunfiles - 5; fox (int i-1) i¢(mumfilase) ¢ i++ for (int 2-07 e¢ (munéilae em -out print (* *); for (int j-tr }<(muméilaasa) 7 $44) int dato ~ elemento (i.4)+ 3 SE {dato > 0) Sy m.out-priat(dator* *) ; , System-out.printin(*| eo ) - ) > Este programa funcionard con una piramide de cualquier ntimero de filas, bastard solamente con cambiar el valor a Ia variable numfilas por el ntimero de filas deseado. Nétese que cuando se comienzan a mootrar nimeros de dos y ‘mas cifras la alineacién de la pirdmide se pierde. Se pide al alumno como ejercicio complementario que solvente este problema. © 4, Realiza un programa que utilizando la recursividad muestre por pantalla !a siguiente pirdmide: < 1 : 414 12321 , 1367631 Figura 612. Tinga sunseio Bl programa podri generax una piximide de tualquier aiimero de las, Solucién: class piramide { public static int elenento| fe fila, int columna) { if (fila ¢ 1 || colunna ¢ 1) return 7 if (columna == t | return 1; roturn elemonto(Fila-1,colunna)+elenento(fila-1,columa-1)-elenento(fila-1,columa-2) ; 1 public static void main(string{] eres) nt numfilas = 4; for (int i=1y 4<(numetlasea) ¢ i++) for [iat e=p) ec (num i) 644) Syst air for (int jel: je(atnumftlaes1) 7 44+) ( int dato = elemento(i, 3); if [dato > 0 ) Systomour,print (datos™ "); 1 Byatem.out.peintin\!)y sce programa funcionard con una pirémide de cualquier niimero de fils, bastard solamente con cambiar el valor ‘4 lu variable numfilas por el némero de (las deseade. Notese que cuando se comienza ‘mostrar niimeras de dos 0 is cifras la alineacidn de la pirdmide se pierde. Se pide al alumne enme ejercivin complementario quo soivento este problema, 5. Realiza una clase TeansformaBase la cual traslorme yeambie de base niimeros decimalen, Solucion class TransformaBase { public static void muestracifra(int dati it (datcio) { systen.out print (dat) + j else { dat-*16; char © = (char) ("A's dat); Systen.out.prin=(2)} } } public static void transforma (int dat if {base > dato) [ int base! transforma (dato/baze, bas muestraCifre (datotbase) + public static void main transforma (B,2) 1 syetem.out.printin(**) trance forma (12/16) 7 -printin(*") transforma (13,8) 7 system-out.printin(*); (stringt) args) ( Como ejerc forma iterativa, complementario se pide al alumno que ereo otro método en el cual se transformen lox nbmeros de “= 6. Rn [a siguiente elase indica cual os el atrihuto de instancin y cual es el atributo de claso: public class unaclass { public static int a - 20; public int b = 13; 0090 Solucion: © La variable de clase es la a. © La variable de instancia os lab. EJERCICIOS PROPUESTOS © 1. Realiza un programa que muestre por pantalla el siguiente euadrade: Pw FT 2345 3.6 10 15 4 10 20 36 5 15 35 70 Figure 18. Mote mumérice ee ae El programa podrii generar un cuadrado de cualquier dimensién, Utilizn la recaraividad pars resolver el rol © 2. (Bjereivio de icultad alta) Realiza los ejercicios resueltos de forma recursiva de tal forma que la solucién ahora 0a iterativa. © 8. Ejorcicio do dificultad alta) Para los vjercicios resweltos de pirdmides crea como afladido un métixto recursive que moestre la sum de Jos valores mostrados poe pantalla. 4, Crea en ta equipo un paqueto Utilidades.mates can das clases stmar y potenciar, La clase sumar tendrdi un ‘método int sumatint,int) cl cual devolverd la suma de los dos parémetros introdueidos y la clase potenciar tendr’ ‘un método int poteneiatins,int) el cual devolveri cl vesultado de olevar ol primer pardmetzo al segundo parametro. Realina wn programa que haga uso de este paquete, 5. Realiza una clase pee ja eual tendra un miembro nombre de tipo String el cual podré ser hneredado por sus sub- clases, Roaliza un método getNombrey otto setNombre, Utiliza el abjeta tis en estos méiedos. Implementa en esta clase ul método clone() asi como el método equals() para poder hacer una comparacién en profundidsd. Realiza un programa que haga un testeo on profundidad de las caracteristivas de esta clase “= 6. Para la clase pez anterior, crea un miembro privado entero numpeces comiin a todos los abjetos pez el cual cuente cl imero de peces crmados. Crea tin programa que compruche que esta variable se inevementa cada vex que se eres tun objeto pez 5 . 1 WRAPPERS ‘La principal diferencia entre un tipo primitivo y un wrapper es que ste iltime es una clase, Cuando trahajamos con wrappers estamos trabajando con abjetos mientras que cuando trabajamos con un tipo primitive abviamwnte no. A simple vista un rapper siendo un objeto, puede aportar muchas ventajas pero, {qué problemas nos puede plantear utilizar objetos en vez de tipes primitivas? Bl problems que nos podemos encontrar es que cuando le pasames wna variable a un métode como argumento yy esta os do un tipo primitiva se le pasa siempre por valor mientras que cundo pasamos Un trapper (objeto) se Io estamos pasando por reforencia, a Consejo Echa un vistazo al apartado del tema 4 en el que se explica el paso Ge pardmetros por valor y referencia. Una de las grandes ventajas que tierien estos wrapper es In facilidad de conversion entro tipos primitives y eadenas do caracteres en ambos sentidns. Existen wrappers ce codos los tipos primitives numéricos (Byte, Short, Integer. Double, etc) Tabla 5.1. Tipos primitivos y wrappers asociados eer ue rrt ry Seveeeseesesoscoesecues CLASE WRAPPER INTEGER El wrapper Integer tiene das constructores: Integor( int ) Intoger( String ) 5 P.0,0. UTILIZACION AVANZADA DE CLASES En la siguiente tabla se muestra un resumen de algunos deles métodos del wrapper Integer: Tabla 5.2. Métodos del wrapper Integer prety Peersrh Integert(int) Integer(String) bytevalue) shortvalue() intvalue() fongValue() dounlevalue() floatvatue() Integer decoae(String) rteger parselnt(String) Integer parseInt(String,#t) Integer valueor(String) String tostrng() String toBinaryString(int) String tortexStringCint) String toOctalString(int) MAX NALUE, MIN_VALUE, TYPE La creacion de un objeto Zrreyer es Constructares Funciones de conversién con datos primitivos Conversién a string. Conversion 9 otros sistemas de numeracién. Conetantes, misma que para ctalquier otro tipo de objeto: 119 a Recuerda Una ver asignado un valor al objeto Integer no puede cambiarse, Si queremos utlizar otro valor deberemos crear otro objeto integer En ol siguiente programa ee muestra la utilizacién de algunos de los mé+odos expuestos en Ia tabla anterior: class test | public static void maln(string{] args) { ~ new intecer (5) Integer i2 = mew Integer (77"? String 81 = i2.testring(); Systom.out.printin(e1);//muestra 5 por pantalla int i3 = Tntegar,parseznt {710", 10); int id = Tteger-parsetnt {*10",8) Int 15 = Tnteger-parseTnt (“BABA 16)7 System.out.printin(i3);//muestra 10 vor pantalla cem.out printin(i4)s//mestra & por pantalla Systen.out.printIn(i5);//mieatra 47.802 por panta Syoton.out.printin (Integer ,todctalstring(i4)) ¢//suestra 10 poz pai System. out.println (Integer. totonstring(i5)) ;//mx lat 16 = Tateger.valuect ("22") inevalue() 1 SteM.OUL.printin (16); //muestxa 22 por pantalla stta bebe por pantalla Précticamente la totalidad del eédize mostrado anteriormente us facilmente ineerpretablepor el alumno, pasaresnos a comentar solamente algunas de estas linens: nteger.parselnt ("10",10) 7 teger .parseInt (“10", a); integer .porseint (*BAEAT, 16) En fas anteriores inoas se wlliza el método parvelnt(Strings, int base), el eval permite introducir la base en la ‘ave esta codifieado ol mimero det primer parimetxo. systen, out, printin (15 // questea 47.802 por pantalla En ests lines mucetra el nsimero 47.802 que equivale en decimal al wimero BABA en hexadecimal, Para mostrar dicho mimero vn su base correspondiente hay que hacer uso de} métndo toHexString(). int 36 = Integer. valueot ("22") intvalue( En la linea de cédigo anterior se puede ver como el ubjete Integer hace una conversién de un String (valueO)) almacenando dicho valos on una variable miembro interna para luego devolveria mediante el miétodo éntVadue(). Recuerda Los wrappers para los demés tipos primitives tlenen una funcioni wrapper Integer. ¥ modo de utilizacion simifar al 5 TRABAJANDO CON FECHAS Y HORAS . (LA CLASE DATE ) La clase Date es una clase de utilidad contenida en el packege java.util. Con |a clase Date podemos representar un ) instante dado con precisién de milisegundos. La fecha y hors ce alinacenian en un entero de tipo Long que registra los milisegundos transcurridos desde cl 1 de enero de 1970 GAT (Tiempo del meridiano de Greenwich) a las 0:00:00. i Recuerda Existen otvas clases que permiten obtener informacién del afi, mes, dia, hora, minutos y segundas dé un objeto Date. > Para la utilizacién de fochas se suelo trabajar con otro tipo de clases, eomo fa clase GregorianCatendar, 1a cual deriva de ls clase ubstructa Calendar, Al wer Calendar una clase abstracta, cuande quecamos utilizar variables de tipo fecha en nuestra programa lo haremos a través de objetos de la vlase GreaorlanColeadar. Bn la elese Gregorian Calendar las horas se representan por un nimero entre Oy 23, las dliagentre 1y 1 lx aos se representan con cuatro digitns. BI problema radica en que lex meses dela se represemtan om wa.entena que vA de 0 a 11, En el ejempto siguiente se puede ver como se afade 1 al mes puesta que onera es el 0 y diciembre el 11 Bata elase tiene muchas variables entoras entre otras las siguientes: DAY_OF_WIEK, DAY_OF MONTH, YEAR, MON''H, HOUR, MINUTE, SECOND, MILLISECOND, WEEK_OF MONTH, WEEK OF YEAR. ote. Enel siguiente efigo se muestra un ejemplo de utilizacién dela clase Date class fecha [ public static void main(string!} azss) f Date d < new pate(}i Gregoriancalendar c = new Gragoriancalendar () cisetrine (a): System, out. print (c.gét (Celendar.DAY_OF_MONTH)) System. ouv.print ("-"); out, print (e-get rout. primt|*-") 7 Out printin (c.get (Celendar. YEAR) } lendar . MONTH) +2) El programa anterior muestra par pantalla la fecha actual 5 CLASES Y METODOS ABSTRACTOS «2 YFINALES La abstraccién es una de las caracteristicas principales de la programacién orientada a objetos. Mediante la abstraccién lo quo se hace es extracr la esoncin hsisica y eu comportamiento para luego después representarla en tin Lenguaje de programacién. a Recuerda Abstract en lava es sindnimo de genérico. CLASES V MiTODOS ABSTRACTOS 7 Las clases abstructas sou clases que von y han sido pensadus para ser wenéricas, Esto quiere decir que no va 1a haber objetos de esas clases puesto que no tiene sentido, Por cjemplo, In Case vehiculo es earaments una clase enérica porque cuando implemente un programa com esta clase no voy & eteur vehiculos sino objetos de In elase coche u objetos de la clase moto, ete. Bx obvio que todos son wehfetilos ¥ por lo tanto wsta clase absteacta solamente definira los atriutos y comportamientas (métodos) comes. Kjemplos de dichos atributos pueden ser color, peso, fete. y ojemplos de estos métodos pueden ser get VelocidadtActuai(. Obviamente, la velocidad se calculari de manera diferonte para cada tipo de vehiculo. Un ejemplo de la elase abstracts vehfeute pods sor cl siguiente: int. pesos setPeso (int p) {peso-p: 1 public abstract int gotVelecidadActual (I: 3 Como puedes observar en el ojemplo anterior, una elase abstracta puese implementar métodos shstrneias y 0a abstractos: 2 re Recuerda * De las clases abstractas no pueden crearse objetos; Si una clase tiene métodos abstract por fuerza tendré que ser una clase abstracta, + Un metodo abstract no puede ser static. + Las subciases que implementen esta clase absteacta tendrén que redetirir estos métodos bien declararios también como abstract. _ GEE ossrros, cLases Y METODOS FINALES Objetos finales ‘Cuando an objeto se doclara como final, Seto impedirs que haya otro objeto eox la misma referencia. Par ejemplo ‘euando se realice algo paxecido a esto: final cuadrade ci-new cuad cuadzado c2=new cuadcado (15); 24 E} compilador mostrarii un mensaje de error en la tercera linea. Mais coneretamente Geany dard ol siguiente monsaje de error: pruebaJavais: cannot assign a value to Final vaziable cu 1 error La compilacién fallé Métodos finales Cuando declaramos un métoda came final, le estamos diciend al eampilador que ese métado no va a cambine. No vaa ser sabreseritn, con lo cual el compilador puede colocar el bytecode del méiedo justo en el sito del programa donde va a ser invocado con Is consiguiente ganancia de eficiencia. public final yold setcolor (string s) {eoloe=ss1 Clases finales Cuando una clase se decltza eomo final, esa clase no peste tener descendencia (no puede tener aubelases). Por ejemplo, Ia siguiente clase triangulo no padira tener subelases que deriven de ella: public floaa class criangulo( 5 4 POLIMORFISMO ‘Sogiin la RAE, el polimorfisino os lo “eualidad de lo que tiene 0 puede tener distintas formas". El polimorfismo en Programacién Orientada a Objetos permite abstracr y programar de forma general agrupando objotos con caracteristicas comunes y jerarquizindolos en clases. Como se ha dicho antoriormonte, oxiate una clase quo os la clase padre dle todas las demas y esta es java.lang.Object. Cualquier clase ereada descendera de Object. a El polimorfismo se consigue en Java mediante las clases abstractas y las interfaces. Concretamente las Intecfaces amplian enormemente las pasiblidades del polimorfismo, Un aspecto muy importante del polimorfismo es cuando se crea una referen misma referencia puede servir para refurenciar a objetos de clases derivadas. a um objeto de una clase hase, esa Imaginemos que tenemos este dro} jerdrquies: persona cempleaco sencargado, iqura 54. serarqusa cectases ‘Tentemos Ia elase persona de la cual desciende la clase empleado. La clase persona tendrii métodos genérieos que puedan ser utilizados por cualquier persona como por ejemplo establocer y devolver el nombre. La clase emploado tenclr’ otee tipo He métodas mais especificos eemo oblenerSveldo, ol eval devolverd ol sueldo base asi come netSueldabase, que establesert el sueldo base del emnpleado, Los encargudos son personas cca responsabilidades en la empresa ¥ sea cual sea st trabajo cobrarin un 10% nis quo um empleado normal La implementacién de Is jerarqula anteriur ser la siguiente: public class persona { private String no public void setNombre(String nem) nombre = non; 1 public String getionbre() return nombre: : 1 public clase ompleado extends persona{ protected int sueldoBase: « public int getsueldo{){ return sueldobase; } Public void ectSueldosase (int §)1 suaidobace = 5: | ) public class encargado extends empleado( public int getsueldo() { Double d= new D xeturn d.intval 19 (eueldoBacets © Tmaginemos que realizamos lo siguiente cop la clase teat: class test { public atic void min(st persona pl) pl * new empieaao| pl.setNonbre(*isaac Sanchez"): pli sevsueldoBase (100); //dara error al compilar ‘empleada el: fe) mew encargado(): et. setsueldobase (500) ‘el-setbuesto(%lefe almacan"), //dara error al compites System.out .print{n(et -getsuelde ()): ing(] args) ¢ ‘Vamos a comentar el eétigo de Ia clase anterior: pL = new empleado |); pi.settlonbre |*Isaa. chez") ¢ pi,setSueldoBase(100); //daré error al compilar En ol oédigo anterior ereamos una referencia persona que apunta sun objeto de la clase empleado, La variable pl podré hacer Hamadas a métodos de la clase persona pero no de la clase empleado, por lo tanto, la lamada al método sotSueldoBase dara un error de compilucion empleado e1; eb) = mew encargado() ; el. setSueldoBase (500) 2 setPuesto (‘Jefe almacen"); //darA error al compilar ot): System.out .printIn (ot Por otra parte, vemos que el cédigo anterior erea la referencia a empleado pero apunta x un abjetn del tipo encargado, La llamada al método setPuesto daré error por lo explicado anteriormente pero no axila Hamada al método _getSueldo(). La pregunta quo nos hacemos es la siguiente El programa mostrara por pantalla 500 6 550? de dicha clase, La solucién es 550. Aunque la referencia se creo para la clase empleatio y solamente se pueden lamar a métodos el métado getSueldo( esta sobrescrito y como el apunta a un objeto de la clase eneargado Java resuclve que tiene que ejecutar el método de dicha elase. La sobreescritura de métodos se ve con mis profundidad en el siguiente apartado, a~ Recuerda 5 Cuando la referencia se creo para la clase base, solamente se pueden hacer lismadas 9 métodos de dicia clase base. 5 Vamos a ver en nus detalle por qué-el programa mostrd 550 y no 500 por la walida estindar: En Java existen dos tipns de vineulaciones (con vinculaci6n nos referimos a la llamada realizada a an método y el cédigo que se va a ejecutar en dicha llamada), fa vineulaci6n temprana y la vinculacién tardia, © Vinculaci6n temprana, Se realiza en tiempo de compilaci6a. Con métodos normales o sobreeargades Java utiliza la vinculacién temprana. © Vinculacién tardia. Se rvaliza en tiempo de ojecucién. Cuando se redefinen métodos se realizar dicha -vineulacién (salvo métodos definidos como final). En nuestro caso so ha declarado el método getSuoldo() en la clase empleado (clase padre) x ¢e ha sobrescrito en la clase dorivada encargado (clase hija). Cuando en tiempo de ojecucidn se Hama a este método, el tipo de objeto al que apunta la variable prima sobre el tipo de la referencia. Bx en tiempo de ejecucidn cuando se comprueba que aunque {a referencia es de tipo empleado, la variable e1 apunta a un objeto de tipo encangado y el métoda de esta clase es el que se wi a ejecutar: ‘Aunque el polimorfismo confiere muchas ventajas para el enguaje, hemos descubierto uns limitacién, ves el tipo de la refisrencia Ia que limita los métodos que po-lemos ejecutar (en nuestro ejemplo la llamada al método setPuesto, dard error) o las variables miembr0 accesibles ce Recuerda ‘Se puede crear un objeto cuya referencia sea una inte-faz. Este objeta solamente podré ejecutar los ‘métodos de dicha interfaz pero no podré utilizar los métodos y miembros de dicho objeto. La interfaz concebido asi es una forma de unificacién de uso entre clases muy diferentes. Coma hemos visto anteriormente nuestro programa va.a dar errores de eompilacién, Bnionees, qué haces para que el cédizo anterior compile y funcione? La vespucsta a oota progunta es utilizar un cast explicite @bliger al compilndor a transformar abligatoriameate el objcio en otrc). El cast entre objetos se verd en profundidad en un apartado posterior y por l Lanio, de momento se incluyen las Lineas que dan problema y debaje la linea reprogramada solventando dicho problema: pl. setsueldowase (100): //dard error al compilar Utempleada} pl) -setsueldofasa (190); //corregica eL.setmiesto| "Jefe almacent); //daza error al compilar ((encatgado}@)) .setPuesta ("Jefe almacen*); //corregida 5 5 SOBREESCRITURA . DE METODOS ‘Una de las propiedades fundamentals de los lenguajes Orientados a Objetos es la sobreescritura u overriding de miétodos, Obviamento, los métados son lor finieos que se pueden sobreseribig; con los elementos miembro esta técnica nna es posible. La scareseritura permite modificar ¢] comportamiento de Ja clase padre ((ambién llamada claxe principal superclase), Para que dicho método con diferente funcionalidad sea sobrescrito, deberi cumplir los siguientes preceptor: © Tiene que toner el mismo nombre (esto es obvie). 1 Elretarno de la clase padte « hijo deberi do ser del mismo tipo. 8 Debord de eonservar la misma lista de argumentos que el misma método en la clase padee. Un cjemplo de sobrecarga de métodos seria el siguiente: package © public claas Pajaro | protected String nombre; Protected String color saan ihe; v4 public st ng ge return ‘Nonbre: " + ronkre + "\n* + “Colors “ + colors 1 1 package sobreescr ibe; public clase toro extends Pajaro | protected 3 public String gerpetalles() { ” -o\nt + “+ color + *\n" + os return "sionbres Sein o! ejemplo anterior se puede oliservar Ta siguiente: © Laclase Loro desciende de ln clase Pajaro © La clase Loro sobrescribe el método getDetalles(), ambas con el mismo nombre, © Elmétodo getDetallea( de clase padre ¢ hija tienen Ia misma lista de arguments. © El método getDetaltes() de clase padre ¢ hija devuelven un objeto String (mismo tivo) © El método geiDetaltes() de clase padre e hija tienen el mismo modificador de acceso (public. 5 6 SOBRECARGA DE METODOS «2 (OVERLOADING) Recuerda La sobrecarga es la implementacién varias veces del mismo método cor ligeras diferencias adaptadas 2 las distintas necesidades de dicho método. ‘Como se ba dicho antes, la sobrecarga implica una implementacién repetida del mismo método, Para erear métodos sobreeargados deberemos crear métodos con el mismo nombre pero con distinta lista de parémetros. A continuacion, ‘se enumeran las reglas para sobrecargar un méiodo: Los métodos sobrecargados deben de cambiar la lista: de argumentos obligatoriamente, © Un metodo puede estar sobrecargado en la clase 0 en una subelase, © Al sobrecargar un método se pueden utilizar las mismas excepciones o afiadir algunas. | Los métodos sobrecargados pueden cambiar el tipo de retorna o el modificador de acceso, Imaginemos que tenemos una clase persona en la que vamos a almacenar datos de ciertas personas como el nombre, teléfono, direccién, ete. Tenemos wu problema y es que vamos a almacenay para su posterior tratamiento el primer y segundo apellide de todos los individues. Lmazinemos que tenemos un inglés 0 Un italiano de los que por costusibre no se utiliza su aogundo «pellido, F > sjempla do esto 08 ol siguionte: sombre; string apell ido! Liido2 private ng apez) { public void setNombre (String non,String apel, 8! apellidot = apel; apellidea = ape2s public void setiionbre (String nor,string apel) { nombre - nom; Obsérvese que el eddigo anterior cumple con todas {a8 reglas enimeradas antoriormente, i Recuerda Los métodos sobrecargados deben de cambiar la lista de argumentos del método, 5 4 CONVERSIONES ENTRE OBJETOS . (CASTING) a ea wna buena ocasion de utilizar un métoxo sobrecargado, Un En capitulos anteriores hemoe visto la esenein del casting cuando convertiauios un tipo primitive en otx (generalmente con mds pretisiin), El casting es la conversién de unos tipos u objetos en otras, Coma hemos visto, para convertir un objeto en otra debe de baber entre ambos objetos una relacién de herencia (uno debe de ser una, subelase dol otro). Dado que ia subclase contione tod ta informaciin que pueda contener su superclase es légico pensar que ol casting es pasible, En esto caso no es necesario bacer casting dada la vorrespondencia de informaciéu entre una clase y otra, Hn el siguiente eddigo so muestra un ejemplo de easting de un tipo primitive (conversion de ineeger a long int 1 = 50) Tong 1; A=(long)i; = a Imaginemos el siguiente érbol de jorarquis: vcargada igure 52 Jcorquia de ctases Si por ejemplo tenemos un método m() que espera un argumento tipo empleado, podemos pasarle un objeto de tipo ‘persona (1) 0 un objeto de tipo encargado (2) Opeién 1. Si le pasamos un objeto de tipo persona nos encontramos con una pérdida de procisién puesto que no se pueden ejecutar todos los métodos de los que dispone un objeto de tipo empleado. Recuerda que persona eontiene ‘menos métodos que la clase empleado, Fn este easo os necesario hacer un casting. sino el compilador dara error. Imaginemos el siguiente cédigo: public static void n(emp systen-out.printin(e.gecNombre()}4 leade €) | ) public static yoid main(string!) args) { persona pl = new empleado() s pi-getNombre ("Is de eneargado eni = new eneargado(); oni setNombre ("Andrés Rosiqus’) ; mena): imipi)s //esta Mamada sin casting dard 1 my (empreado) pi] + persona pz = new persona (} p2.setNombre(*Juan Serrano"); /’m((enpleado)p2); //esta llamada dard error en ejecucién © Sanch ‘or de compilacién Como ee puede observar tenemos un midtodo m() que espera como panionetea un objeto de tipo empleado. En primer jugar haremos que la referencia pl a persona upunte al objeto de tipe empleado(). Una vex hecho esto no tendremos problemas para utilizar esta referencia en el mésodo. Para ejeeutar el método tendrenine qiehacer explici¢amente ‘un casting como se puede ver en la siguiente linen do eddigo: ‘u({empieado) p32: + ste casting x sisailar a lo que hemos visto antes con los métodos primitives. Si la vofimencia pl en vez de apuntar a un objeto de tipo empleado apuntase a un objeta de tipo persona. En ese caso atilizando siguiente lines do eédigo: pl = new pe! Java dard un exror en ejecueién, Java lanzaré una exeepeidn del tipo CiassCastException y avisari que ng es posible realizar el casting “persona cannnt be vaet ta emploade”. 7 Opeiéa 2. Pasamos un objeto de tino eneargads, En este case al ser una suhelase no tendremos problemas. Recuerda Los errores se producen cuando se llama a métodos que el objeto destino no tiene. Resumiende: empleado emp = new empleedo() ; sncargado enc = ney oncargado() > comp - enc; //No necesita casting : enc ~ (encargado)emp; //necesita casting explicite S gado) emp 9 exp! ‘Las reglas seguidas en el ejemplo anterior son las siguientes: © Cuando se utiliza una clase més espeeifica (avis ubsjo on Ia jerarquia) no hace falta casting. © Cuando se utiliza una elase menos especifica (mas arviba en la jerarquia) hay que hacer un casting explicitamente, 5 ACCESO A METODOS . DE LA SUPERCLASE Para accede a los méondos de la superclase se utilizard la palabra reservada super. Esta palabra reservada ext Aisponible en cualquier métiks au estaten de una subelase. Es importante toner en cuenta que super es una referencie al abjeto actual teniendo en cuenta Ia instancia de su superelase. Hehemos tin vistazo al siguiente ebdigo: clase padre ( protected int dato; public void m()( syeten.out pe } class hijo extends paare( private int dato; public void m(} { Syaten.out-printin(*"método clace hijo super.dato = 210; date ~ 20, 1 publi void getdate () { Systeri.out.pr int La (auper date: 1 public veld mostrar (| this.o(): 20; super.m(): class test public static void main(atring!] erga) { hijo h = new nijo( bemostrar(): B.getbaco(): El resultado en pantalla de ejocutar este cédigo sort el siguiente: nétedo elase hijo nétedo clase hijo nétodo clase paire 10 Fresion# una vecla para continuar . De este cédigo extraemes lo siguiente: © Para acceder a métndos sobreseritns dela superelase utilizamas la palabra stuner © Ss posible aecedor a miembros protected de ta superclase utilizando la palsben super. a Recuerda this se utiliza pare acceder a campos y métodos de la clase y super para la superciase. No importa que estos estén sobrescritos. Cambiemos un poco el eédigo anterior y veamos eSano lp visto anteriormente con super y this es aplicable también en las lamadas a los constructares de los abjetos. class padre | protected int datot, dato2: padre [int x,int y) (datol = x; date2 = yy} > padre () { > this (5,5 } class hijo extends pacre| private int datol, dato2: Bjo(int x,int y) ( super (2,2)? datol = x: dstoa = yi ) btio(){ dato = 3; e datog = 3: public yoid getnatot) ( System. out,printin|*Padre datol:" + super-datol); system. out.printin(*Padre datoz:" + super-dato2) ; system.our.printin(*hijo datol: + this.dato1) ; syste $ this.datoz); ouE-printin(*hijo datoz: class tect | public static void main(String!) args) { hijo bl = new bijoia,2); hi.getDato(); hijo ha = new hiso(); 2. get Dato); El oddigo anterior mostan por pantalla to siguiente: Padre datol:2 Pa datozi2 Lol Padre daroi:5 Padre dato2:5 hijo datoi:3 hijo datoasa 1a pai mnadas a los vonstruetores, Obsérvese come se utiliza this y super en las Te MAS UPCASTING, DOWNCASTING Y UTILIZACION DE METODOS AVANZADOS Tenemos la clase abstracts forma la cual es antecesora de la clase hijo cireulo. En el siguiente cédigo esté implementada esta relacién jerérquica. Echa un vistazo al cédigo y pon atencién a lo siguiente: + Observa cémo se hace el upcasting y downcasting en et método main. + Onserva cémo se utiliza el operador instanceof. ‘+ Detente a observar y comprender el método jerarquia de la clase circulo y fijate en la utilzacion de los métodos getClass(), getSuperciass() y newinstance(). El método jerarquia va a intentar mostrar el érbol genealégico de la clase circulo pera como la clase forma es abstracta (abstract), éste no podra ser instanciada y lanzard una excepcion al intentar crear una Instancia suya, clase Fozma ie identidad() { Syetem.ou abstract public String co: class eirculo extends torma ( public String tostring() plic static void Jer Obiect 0 = ob}; quia (Obiect ob4) s().getSupecclass()!* null) { white (o-gete: cry 4 Syatem.out println ( getclass() + * e¢ una subclase de “so.getClass() erclass() .newInetence ()« jonExXception 6) { stem, out.printin(*Imposible instanclar 1a , getSuperclass()}: break; oO catch (TllegalAccessException e} { System,out.printin(*No hay acceso"); . breaks public static void main’ efreule c - new circulo(|; ring!) axge) { 1] Haciendo €1 Torna f - (formale fidentidad () aciendo el dowca: instanceof circulo! 2 Ucircule)£) identidad(; else if(1(E instanceo® cireulo}) Systen.out.printla(* £ (forma) no 08 un > Jezazquia(e) i BD nit, Una clase snidads es una clase que es miembro de otra clase, - Cr _ = ‘Antes de anidar una clase pregiintate antes lo siguiente: ZEs necesario anidar la clase? {La definicin de una clase anidada seria Ia siguiente: ) class externa { clase anidada { ) “+o, getClass () Dado que Ia clase anidada es un miembro de Ia claze oxtorna, tended access 4 todne vie métntios y atributos (nchuse a Tos privados). Y camo ee Iéico, al ser un miombro de In clase externa, Ia clase aniclada podr ser private, public, protected o privala al paquete. Tipos de clases anidadas. + Estaticas: + No Estaticas (Clases estiticas (Clases intermes) ‘anidadas) Figura 6.2, Closicorin de classe cniado Como se puede observar on Ia figura anterior, existen dos tipos de clases anidadas: © Estaticns, También thunadas clases estatiens enidadas, © No estitiens, Clases internas, class externa atatic class esteticaanidada { Recuerda Las clases estaticas anidades se diferencian de las internas per la cléusula static. Para instanciar una clase interna ce seguiri el siguiente formate: externa. interna objetointerno ~ objetoexteino.new in! De esta manera, como se puede cbservar, hay que instanciar primer la clase externa para luego instanciat la clase interna dentro del objeto externo. ee {Cuando se pueden utilizar clases anidadas? ‘Cuundo la clase solo se va a utilizar en un tinico higar, en ese caso el definir la clase como anidada puede hacer que el efnligo sea mas legible y su mantenimiento sea mas sencillo. También se incrementa la encapsulacién dado que lase anidada solo se necesita en La clase externa y de esta manera se mantienen juntas. SISTEMAS DE OBJETOS DISTRIBUIDOS Y CORBA Actualmente, las organizaciones y organismos funcionan de un modo distribuido. En grandes empresas, proyectos de investigacién, comunicaciones, es necesario una légica de procesamiento distribuido. Los sistemas distribuidos son componentes légicos que se ejecutan en miltiples computadores pero de una forma integrada entre unos y otros para conseguir un objetivo comin. En sistemas operatives es muy Importante la estructura de comunicaciones subyacente al sistema. CORBA es el acrénimo de Common Object Request Broker. En este esténdar de OMG (Object Management Group) se exponen las especificaciones dirigidas a disefiadores y desarrolladores de software que permiten desarrollar aplicaciones distribuidas y heterogéneas basadas en la interoperabilidad de objetos. CORBA es un esténdar basado en una arquitectura distribulda y abierta que esté basada en tres conceptos fundamentales: + El ORB (Object Request Broker). Forma parte de! nticleo de CORBA y es un gestor de objetos que se comuniquen fos objetos de uns manera independiente a la plataforma siguiendo una estructura cliente-servider. + Mecanismos para la especificacién de interfaces como por ejemplo: © IDL (interface Definition Language). Es un lenguaje puramente descriptive utilizado para escribir interfaces a los cuales los objetos cliente puedsn llamar y puedan ser implementados por alatin objeto, DII(Dynamic Invocation Interface). Es una API (Application Frogramming Interface) utilizada en tiempo de compilacién que permite la construccién dindmica de llamadas a objetos CORBA, + Protocolos binarios para comunicacion entre ORBS = GIOP. Protocolo abstracto para le comunicacién entre ORBS en la que ETOP es [a implementacién de GIOP para TCP/IP RESUMEN DEL CAPITULO x Este tema e¢ una continuacién del Capituly 4. En este Inma xe verdn mis eonceptes de la Programacién Orientada a Objetos como es of polimorfismo, overloading, casting, clases anidadas, ete. También we estudiarin clases de utilidad como son los wrappers y clases para el manejo de Ia fecha y la hora, Otros coneoptos como las elasos y métodos abstractos y finales también ge abordan on este capitulo, EJERCICIOS RESUELTOS 1. Crea una clase empleado y una subclase encargado. Los encargados reciben un 10% mass de sueldo ba~ se que un empleado normal aunque realicen el mismo trabajo. Implementa dicbas clases en el paquete sobrescribe y sobreseribe el método getSueldo() para ambas clases, Variables miembro no deberan de poder ser accesibles desde el exterior. Solucién: package schres: public elas Enpleado ( protected int cucldssaso: public int ge! i return eueldobase; ) ) package cobreescr ibe; public cli cargado extends public int getsueld: return suclds © 2. Compilard ol ciguionte eédigo: ® class prueba { protected String nombre; ® protected int 1D; public string getrdenc() ( return sombre; 3 public int gerident()( return 10: } , En caso de que no compile expdn las razon Solucién: En el efdigo anterior parece que se quiere hacer una especie de sobrecarga de} métoro getdent/) pero la clase no compilart dado gue el eompilador se va'a encontrar dos métndos con el roismo nombre y con ta misma lista de = parimetros, con lo cual, para é va a ser una implementacidn repetida, Concretamente con el compilador Geany dara »— elsiguiente error: > Prisha SavarSe qetidenet) 12 aleeady defined in prucha Recuerda que para Ia sehrecarga de un método era necesario cambiat Is lista de argumentos del mismo, 8, Reuliza una funeién que dada ta fecha de nacimiento de una persona indique cuantos aos tiene Solucion: public static int edadistring & /tmparvantes £ formato dd/sm/yyyy “ java.util.Date hey = new Date(); //Fecka ectual Stringt) tokens = fecha nac.split!*/*): o Calendar cal > new Gregor lancaiendar (Integer nt (21), Tnteger. parserat(tokens(1))-1, Integer.parsernt (tokens {0))) //S@ resta 1 porque los meses conienzar en 0 Java-sqi.Date fecha = new java.sql ate (cal cetTinernmiltis()): long diferencia = ( hoy.getTine() - fecha.cetTime() )/(24 * 6D * 60 * 1000): 1 divide por los miliseguades que tiene un dia, Se obtiene la diferencia en atas return (int)diferencia/s65; <4. "Tenemos wna clase con win métode metodox() que debe devolver un valor entero y da problemas al compilar. Parte del cuerpo do la clase es el siguiente: int: dato: > public int metodox!) { Se pide la reeseritura del método utilizé ‘compilacién. do un wrapper Double que solvente el problema de Solucion: public int metodox() { Double d = new Double (dato*1 return d,intvalue(| ; © 5. Realiza una clase huevo que esté computesta por dos clases internas, una clara y otra yema, Crea dos métodos hazYema() y hasClara() que generen objetos de las clases yema y clara respectivamente, Realiza un método main en el que se creen objetos de cada una de las clases. Solucién: public clase huevo { claee yena ( yena() ( Systom.out,printin(*tnicializando yer: class clara { Jaza() ( System.out.printia("Zaicializands buevo(} { System.uut.printin{*inicializando huevo"); } yena hazvena() { turn new yema() : clara hazClara() { return now clara); public static void main(stringf] args) ( huevo h = new huevo(): yera y = h.hazvema(]: clara c = H.hazclara() i »@ = 6, Avorigaa si son verdaderts o filsas las siguientes affrmaciones: © Una clase abstracta es una clase que na se puede instancian, © Una clase abstracta es una clase que se usa dnicamente para definir superclases. . © Los métodos de las clases abstractas no tienen implementacién. a Bn ln doclaraeidin de wna intertiz solamente puscion aparecer declaraciones de métndo y acributes pero nunca implementacién de métodos. “© Las intorfanes no eneapsulan datos. ‘© Las interfaces puedion definir constantes simbélicas. La solucién a este jercicio se encuentra al final de los ejercicios propuesios © 7. Implementa le siguiente estructura de clases. | create | [euadiade| |titngulo | rome Figura dolerarqutadeclaver desdencenie debeease are Esta jerarquia debera de tener las siguientes earacteristiens: © La clase forma debera de ser abstractu, © La clase forma tendra el método abstracto toString). o © La clase forma tendra un método identidad que muestre el identificador interno de la clase, © Circulo, cuadrado, tridngule y rombo descienden de la clase forma, © Estas clases implementardn el método sbstvacto de la clase padre. Solucién: shstract claas Forma void identidad() { System. abstract public string tostr-ng(); ' cless cixculo extends forma { public String tostring() { return 1 clase cuadrado extends form { public String tostring() { return * cuadrado "1 ) class triangula extends forma ( public String tostring , Glass rombo extends forma { Public String toString() { return “ronbo"s } , = 8. Enel siguiente ejercicio puedes ver cémo se utiliza el upeasting y downcasting, pero. class testforma. { public stacic void main(string|] axgs) ( forma £ = new circulo(}; F.identidad (): cizcule © = new circulo(}s ((forma)e) ,identidad () ‘circulo) f) .Adenticad ()7 forma 12 + new torma()i 0% ena) f identidad() © Para completar el ejercieia deberds de hacer lo siguiente: Modificar la sintaxia de las lineas que dan problema, Bliminar aquelias fineas que aunque coan cintécticamente eorrectas nunca pueden funcionar, class cestrorna public static vold main(String|] args) [ Forma £ = new cixeulol) + £.identidad() eizcule ¢ > new cizculo(); [|forma}e) identidad() ; ((circulo) £) .identided |); //torma 2 = new forma(): 1482 Adentidaa(): //sas clases abetrectaa nunca pueden ser inetanciadas ee 66 ((forma)€) identidad() ® ©) sQué mostrara el programa por pantalla tras los cambios? Soluci6n: cireulo cireulo efreulo circulo 1. Averigua sin gjecutar ol eddigo qué mostrard ol siguiente progeama por pantalla public clase bebe 1 static void pedir|) Systen.out.pr eln(stra +", "+ gtras* , +4 strays , static { stz2 + “mama pipi*; © stra = ’mama agua’: a 1 bebe() ( Systen.cut.printin(*Naciniente del bebe"); } static String ste2, ste3,stel + ‘papa tengo caca’; public’ static void main(String] args) { systen.out.printin{*E] hehe se ha despertado y va a pedir cosas"); ) Systemvout,printin|"E1 bebe dice: * + hebe.stri) ; bebe .pedix ()7 1 ) static bebe bebed + new bebe) static bebe bebez = new bebe( 2 ‘static bebe bebes + new bebe(]; > t 2 > Una vez que tengas claro Ip ine e} programa deberia de mostrar por pantalls gocuta el esdigo ¥ verifica que lo ‘que has pensado se cumple, = 2. «Compilars el siguiente programa? caso afirmative averigua si sjecutar el cédigo qué mostrar por pantally public static void main(str pedir (nama pipi", pedir (new Strina{l { ma me aburro", "papa eed", “papa dormir* = 3. ‘Tenemos la siguiente clase: public abacract clase sorteo| protected int posibilidades; Se pide: © Crear la clase dado, la cual desciende de la clase sorteo, La clase lado, en ta Yamada lanzur) mostrar un nis ‘mero aleatorio del 1al 6 © Crear la clase moneda, Ja cual deseiende de Tn clase sorteo. Esta clase on ta Hamada al método Lanzar) mostraré las palabras cara 0 eruz, © 4, Realiza una clase conversor que tenga las siguientes earacteristiens ‘Toma como parimetro en el constructor un valor enters. ‘Tiene un método getNumery que dependiendo del pardmetro devolvers el mismo nti Fensnater ero en el siguiente © Realiza un método maiz en la clase para penbar todo lv anterior, Realiza una clase conversorfechas que tent los siguiontos métodos: > String normatToAmericano(String), Este método convierte una fecha en formato normal dd/mm/yyyy a ® formato americano maviidiyyyy > String americanoToNormal( String). Este métndo realiza el poco contrurio, convierte fechas en formato americano a formato normal Estoy intentando hacer lo siguiente en mi programa: nal string si- String s-new String(~ M © Elcompilador muestra un mensaje de error. {Qué podra estar sucediendo? © 7. Tenemos la siguiente clase: @ public sbstract class vehiculo[ a private int peso; public tinal void serreso(int pl (pes: ) public abstract int gatvelocidadActual ()s ' © ePovdra toner descendencia esta clase? “© ¢Se pueden sobreseribir toilos sus métodos? © Razona tus respuestas, © 8. Realiza uma elas Test en con un nustado main que tome por teclado dos ntimeros y muestre la suma, multiplica- cidn, divisién y médulo, En el easo de que e! segundo miimero ¢ea 0, el programa deberd de atrapar las excepciones que 50 puedan producir. Para la resoluciin de ects problema necesitards utilizar wrappers. (9. Disona una elase con un método que permita averiguar la ditima cifra de un mémero intruducido por teclado, Para la resolucidn do este problema deberds utilizar wrappers de tipos numérieos. Solucion cjercicio resuelto nimero 6: (Verdladera) Una clase abstracta es una clase que no se puede instanci (Falsa) Una clase abstracta es una clase que se usa tinicamente para dofinir superclases, (Balsa) Los mitodos do las clases abstractas no tienen implementacién, (alsa) En la dectaracisn de un interfa solamente pueden aparecer declaraciones de método y atributos pero nunca implementacidn de métodos. (Verdadera) Las intertnees no eneapsulan datos. " (Verdadera) Las interfaces pueden definir constantes simmbi e- Lecturay escritura az ©) | de informaci Conocer todas las clases relativas a flujes. ¢ Valorar la importancia de la persistencia. ¥ Almacenar datos y objetos de forma definitiva utilizando ficheros, ¥ Recuperar datos y objetos de ficheros. ¥ Disefiar aplicaciones con interfaz grifica ¥ Construir y controlar los eventos, producids en aplicaciones con interfaz gréfica. TORRE Te EES Cuando se realiza un programa como los que hemos hecho hasta ahora, los datos los proporeiona el usuario © estarin en el programa y éste devolverd una serie de datos como respuesta a los datos recibidos. Generalmente, los programas len datos y los almacenan en estructuras persistentes coma bases de datos o ficheros. Las bases de datos son estructuras mis complejas y avanzadas que los ficheros. Una vor almacenados osos datos los hacemos disponibles para otros programas o para el inismo programa, con To cual se hacen ostrusturas muy necesarias en programacién, CONCEPTO DE REGISTRO Cuando se aimacenan datos en los ficheros aparece el concepto de registro. Un registro es una agrupacién de datos, Por ejemplo, en un programa que gestione alumnos, un registro podria ser la ‘agrupacién de (numero de matricula, nombre, apellidos y curso). Cada uno de estos elementos se denomina campo. Estos campos pueden ser tipos elementales (int, char, etc.) 0 bien pueden ser a su vez otras estructuras de datos, Numer womtre [Aptos] curso AAS [Nombre |apedos] euro f Matric Registro igure 6 Brace deun regard Los registros, come se puede observar en la figura anterior, son una agrupacién generalmente heterogénea de campos (por ejemplo el nimero de matricula sera diferente a nombre, el primero es numérico y el segundo seré alfabético) tanto por sus tipos de datos como por su contenido. No obstante, pueden existir registros que contengan solamente un campo y, en ese caso, la estructura seria homogenea. Como en este libro nos estamos centrando en Programacién Orientada a Objetos, lo normal es que en un fichero almacenemos objetos y no registros, y que en vez de almacenar campos almacenemos atributos. Una vez visto en este capitulo los ficherus y flujos de datos como concepto previo a los ficheros, veremos las interfaces de usuario en Java y la generaciOn de programas en entorno grafico, el programa y es¢ origen 0 destino de la informacion. Los tujos Serviran entonees pura ausuacs y ovnyesscs a programacidn, Las programas ve encaryan de leer y escribir en los flujos sin importarles dénde se leon y se eseriben los datos, ‘Los programas. euande quieren teer datos de un fichevo, lo primero que hacen es abrir un flujo de entrada y len Ja informacién que contiene el fichero mediante el flujo de datos de entrada. Para grabar datos la oporacién es similar se abro un flujo de calida y el programa va escribiendo los datos en el flujo de salida y de esta forma se almacenan Tos datos, po igure 6.2. Algriimosdelecureyeuritarade fcheros eon Generalmente, la forma de leer y escribir datos en un fichero sigue unde algoritmos sitnilares: 8¢ abre el flujo, se realizan una seria de operaciones y por iltimo se cierra el flujo, En la figura antorior se muestran los algoritmos de Tectura y escritura de datos en un fichero que como se puede ver son muy similares, 6 CLASES RELATIVAS . A FLUJOS El paquete java io estd en Ja biblioteca estindar de Java y es el que tiene todas las clases nocesaries para leer y ‘escribir datos en flujos y en el sistema de Ficheros. Este paquete tiene una serie de interfaces, clases y excepciones, todas relacionadas con la entradalsalida de datos, 8) Derecho a la promocién y la formacién profesional_en el trabajo: El trabajador tiene derecho a una promocién profesional, a través de ascensos, y segtin lo dispuesto en el En la siguiente figura se muestra Ia jerarquia le clases del paquete java.io, Camo se punde apreciar, estas clases se dividen en dos grupos. El grupo de la derecha (las clases abstractas InputStream y OutputStream y sus subclases) ‘est pensado para trabajar con datos de tipo byte, mientras que el grupo de la izquierda (las clases abstractas Reader xy Writer y sus subelases) esta pensado para trabajar con datos de tipo char, Las interfaces de ambos grupos son muy arecidas, - Omect a (—Ferausinan—) {crenreyeae So) witer { euaputstan {singe} Ponecepusiean | Figura 63.deroraui detonclases Reader, Writer, InputStream yOutputSirean fa Las tuberias Las tuberias 0 pipes son flujos de datos que permiten conectar dos programas o procesos entre sf transmitigndose informacion entre uno y otro. Su funcién es canalizar a salida de un programa para que sirva come entrada de oro programa. La siguiente tabla muestra las subslases que pormiten leer y escribir caracteres 9 bybis ex an Wwetnt 9 matrix en ‘memoria, en un archivo 0 en una tubersa 0 pipe: B) Derecho a _la_promocién y la formacién profesional en el trabajo: 1 trabajador tiene derecho a uma promocién profesional, a través de ascensos, y seqtin lo dispuesto en el Tabla 6.1. Medios y flujos asaciados a los mismos. oor pa Cd FileReader FileInputStream Fllewriter FileOurputStream Archivo El siguiente ejemplo muestra la utilizacién de la subclase StringReader y la clase CharArrayWriter: mport java.io.) public class ajemploFlujoe { public static vold mainistring!} args) t String s = new String(“En un lugar de Ja mancha de cuyo nonbre no quiero acordarne, : @ = 8+ “no ha mucho tlenpe que vivia un hidalgo de los de lanza en asti f= s+ “adarga antigua, rocin flaco y galgo corredor...%7 char[] arr - new cnar |s-lergth()]; int car = 0; Stringkeader flujoinput = new stringReader (a); flujoourpat srArrayWriter (); ery i while (sa: = Elujotnput.read()) t+ -1)( Elujooutput.write (ear) 7 = Clujoourpur. tachararray (| en.out print In (arr) : exception ©) { ackTrace () E] programa anterior eres un String con los datos que se quieren procesar y un array con la misma longitud que ef Siring anterior. Se utilizaré un objeto flujolnput de la clase String Reader para leer el String eardcter a earécter. Los caracteres leidos se van almacenando en el objeto FlujoQutput uno a uno hasta que se lee el eardicter -1 que indica el final del String. Una ver se han leido todos los caracteres se copian al array arr mediante el método loCharArray() del objeto fluioQutput de Ia clase CharArrayWrier. Por Gltimo y no menos importante se cierran los flujos abierto ‘mediante los método cloge() de cada uno de ellos. 6 UTILIZACION . DE FLUJOS. Existen clases que alteran el comportamiento de un stream ya definida, estas clasos pueden afedir un buffer, realizar una conversién, aiiade un filtro, etc, Estas clases son ias siguientes: Tabla 6.2, Clases de flujos ore ce eae Cece Con cts InputStreamReader(C) UUutizadas como clases puensas Jas cuales transforman OutputStreamWriter(c) streams que utilzan bytes en otros que utlizan caracteres, Filterleader(C) c Pueden aplicarfitros 2 ls stream de datos, FilterinputStream(B) filter QutpatStream(6) PushbackReader(C) Tienen ta capacidad de poder mirar cud es el siguiente Pushbackinputstream(B) Tardcter dela entrada y ev jevoweno. _SequenceinpueStream(B) (C) Oporan con flujos de caracienes (B) Operan con Alujos de bytes ‘A continuacién vamos a ver ejemplos simples de algunas de las ehises anteriores. En el siguiente programa se muestra como se utiliza las clases InputStreamReader y BufferedReader: import java.io.*7 public Class EjomploLecturaPorConcola { public static String leercadenat) { BufferedReader br br = new Bufferedeader (new InputstreanReader (System. in)); tryt cad = br.readiine|)s Jeateh (TOExcaption ¢) e.printstackTzace () + 1 return cad; 1 pub string cad; System. out.printIn(*Bate programa hace eco hasta que escribas para" ot cad = Leercadena() ; en.out.peintin (cad) ; de (cad.equals (*para"}) ; static vold main(string args(]} throws Loxception { El ejemplo anterior lee cadenas por teclado y las repite por pantalla hasta que el usuario teclea “para”.

También podría gustarte