You are on page 1of 376
DESARROLLO DE APLICACIONES JAVAS ORIENTADO A OBJETOS ECLIPSE # NETBEANS Manuel Torres Remon MACRO Pera - México - Colombia - Chile - Ecuador - Espafia - Bolivia - Uruguay - Guatemala - Costa Rica EDITORIAL MACRO Desarrollo de aplicaciones con Java 8 Orientado a objetos Autor: Manuel Torres Remon © Derechos de autor registrados: Empresa Editora Macro EIRL © Derechos de edicién, arte grafico y diagramacién reservados: Empresa Editora Macro EIRL Jefe de edicién: Magaly Ramon Quiroz Disefio de portada: Fernando Cavassa Repetto Correccién de estilo: Dina Duefias Calderén Disefio y diagramacién: Fernando Cavassa Repetto Edicién a cargo de: © Empresa Editora Macro EIRL Av. Paseo de la Reptiblica N- 5613, Miraflores, Lima, Pera & Teléfono: (511) 748 0560 = E-mail: proyectoeditorial@editorialmacro.com © Pagina web; wwweeditorialmacro.com Primera edicién: Febrero 2018 Tiraje: 2000 ejemplares Impresion: Talleres gréficos de la Empresa Editora Macro EIRL Jr. San Agustin N” 612-624, Surquillo, Lima, Perc Febrero 2018 ISBN N’ 978-612-304-552-4 Hecho el Depésito Legal en la Biblioteca Nacional del Perd N 2018-01252 Prohibida la reproduccién parcial o total, por cualquier medio o método, de este libro sin previa autorizacién de la Empresa Editora Macro EIRL. MANUEL TORRES REMON Licenciado en Informatica. Se ha dedicado a la consultoria y docencia de cursos de tecnologia desde hace 17 afios. A su vez, ha brindado diversos talleres de capacitacién en las instituciones més impor- tantes de Lima (Pert), Realizé sus estudios en la Universidad Peruana del Norte, en la Universidad Alas Peruanas y en el, Instituto de Educacién Superior Manuel Arévalo Caceres, en las cuales siguié las carreras de Ingenieria de Sistemas, Educacién y Computacién e Informatica, respectivamente. En todas estas instituciones recibié una esmerada formacién profesional que ha podido demostrar ampliamente a lo largo de su trayectoria docente. Actualmente, se desempefia como docente de tecnologia en instituciones de educacién superior ‘come Cibertec, Manuel Arévalo Caceres y Unimaster de la Universidad Nacional de Ingenieria (UNI); en todas ellas imparte los cursos de Programacién, Base de Datos y Analisis de Sistemas. Dedicatoria Este libro esta dedicado con mucho carifio y aprecio a mis pequefias Angela Victoria y Fernanda Ximena, quienes son y seguiran siendo mi fuente de inspiracién; y también a mi esposa Luz por comprenderme en todo lo que me propongo. Agradecimientos Todo libro escrito es un sacrificio que debe ser valorado, y ello solo se dara si usted aprecia este material tanto como lo aprecio yo mismo. Escuché alguna vez decir: «la lectura de un libro enriquece de conocimientos y empobrece la ignoranciay. Esto es muy cierto, aunque hoy en dia un libro impreso es dificil de leer. Son pocas las personas que cargan un libro en la mano, pues han sido reemplazados por los dispositivos méviles. Por eso, mi primer agradecimiento es para usted, amigo lec- tor, por adquirir este material, que ha significado tiempo y esfuerzo para mi. Asimismo, deseo agradecer a la gran familia Macro por confiar nuevamente en mi persona para el desarrollo de este libro: Desarrollo de aplicaciones con Java 8. indice Introducci6n.......... = Capitulo 1; Introduccién al lenguaje Java a 12 13 14 1s 16 17 18 19 1.10 ain 112 1.13 114 CaSO DesARRoLLADO 1: Monto de capital usando NetBeans... caso Desanno.tAno2: Venta de productos usando Eclipse Mars 2. = Capitulo 2: Fundamentos de programacién 24 2.2 Generalidades Lenguajes de programacion ... Java . Versiones Java Origenes del lenguaje Java... Caracteristicas de la tecnologia Java.. Los programas en Java La méquina virtual Java (VM) . JOK ARE. Aplicaciones Java Instalando Java on 1.12.1 Instalacién de JOK. 1.12.2 Instalacién de NetBeans (versién 8.2)... 1.12.3 Descarga de Eclipse (versién Mars 2) EIDE NetBeans y su primera aplicacién de plataforma.. 1.13.1 Crear una nueva aplicacién.. 1.13.2 Afiadir paquetes al proyecto. 1.13.3 Afadir un formulario al proyecto - EIIDE Eclipse Mars ysu primera aplicacion de pataforma.. 1.14.1 Crear una nueva aplicacién. 1.14.2 Afiadir paquetes al proyecto. 1.14.3 Aftadir un formulario al proyecto Generalidades Proceso de solucién mediante una aplicacién Java 2.2.1 Fase 1: Andlisis del problema 2.2.2 Fase 2: Disefio del algoritmo. 2.2.3 Fase 3: Codificacién del problema... 2.2.4 Fase 4: Ejecucién del programa 2.3. Asociar el pseudocédigo al formulario €N JV .remnnn 2.4 Metodologia de programacién con Java 2.4.1 Programacién estructurada 24.2 Programacién modular 2.4.3 Programacién orientada a objetos 25 Elementos que componen una aplicacién Java 2.6 Los comentarios... 2.7 Elementos léxicos en Java: 2.7.1 Palabras reservadas 2.72. Identificadores 273 Literales 274 Operadores. 275. Delimitadores . 2.8 Los paquetes y las importaciones 2.8.1 java.lang.... 2.8.2 Java.awt 283. Javax.swing 2.8.4 java.io, 285 java.util 2.9 Tipos de datos 2.10 Las variables... 2.10.1 Inicilizacin de variables 2.10.2 Conversiones de tipo. 2.11 Laclase integer 2.12 La clase String.. 2.13 Manejo de la clase JOptionPane.-.. cnc 2.14 La clase Math... i 2.14.1 Métodos que representan aPl ya E 2.14.2 Métodos de conversién entre grados y radianes. 2.14.3 Métodos de la clase Math caso oesrwoutaoo: Modelo de cotzecin bancaria(programnacinestructurad).. caso Desarnot.An0 2: Modelo de cotizacién bancaria (programacién modular)... ‘caso pesaaRoLLAOO 3: Modelo de cotizacién bancaria (programacién orientada a objetos).... m Capitulo 3: Clase Swing... 3.1 Generalidades 3.2. Clases Swing... 3.3. Laclase JFrame. 3.4 Laclase JLabel 3.5 Laclase JTextField...... 3.6 Laclase JTextArea. 3.7 LaClase JPasswordField. 3.8 Laclase JButton 3.9 Laclase JCheckBox 3.10 La clase JRadioButton.... 3.11 La clase JComboBox.... : 3.12 La clase DefaultListModel, 139 3.13 La clase JL 3.14 La clase JMenuBar. 3.15 La clase JMenultem, 3.16 Clase Desktop Pane caso Desarnot.ano 1: Manejo de la clase JList ‘caso Desannot.a002: Manejo de la clase JComboBox ... caso vesarno..ao03: Manejo de la clase JMenuBar. m Capitulo 4: Programacién orientada a objetos. 4A Generalidades ncn nnnnn 4.2. Conceptos iniciales de programaciin orientada a objeto. 4.2.1. Abstraccién. 4.22. Encapsulamiento.... 4.23. Herencia.. 4.2.4 Polimorfismo 4.3. Paquetes lava 4.3.1 Creacién de un paquete.. 4.3.2 Importaci6n de paquetes....unemnnsmnnnnrnnnnnnn 4.3.3. Alcance de los elementos contenidos en un paquete 157 4.4 Clases en Java... 4.4.1 Estructura de una clase.. 44.2. Agregar una clase a un paquete en NetBeans 4.4.3 Atributos de una clase.. 4.4.4 Métodos en las clases 4.45 Métodos sin valor de retorno. 4.8.6 Métodos con valor de retorno..... 4.5 Método constructor 4.6 Referencia this.. 47 Objetos en Java 471 Referenciar alos atributos de clase 4.7.2. Referenciar a los métodos de clase 4.8 Métodos get yset 4.8.1 Método set... 4.8.2 Método get 4.8.3 Implementacién de métodos get y set con NetBeans. ‘cas0 vesarot.Avo s: Casa de cambio (con atributos puiblicos de clase)... ‘caso DesARRoLLADO2:; Casa de cambio (con atributos privados de clase) caso DesannoL.AD03: Casa de cambio (con métodos get y set) caso pesannotiano4: Casa de cambio (con método constructor). m Capitulo 5: Estructura de secuencia. 187 5.1 Generalidades 189 5.2 Estructura secuencial. 189 5.3 Componentes de una estructura secuencial 190 5.3.1 Declaracién. ss i oes a 190 5.3.2 Asignacién 190 5.3.3. Lectura u obtencién de datos... ESET OU) 5.3.4 Escritura de dat0S.nnnue 191 caso oesattouiaoo 1: Cambio de temperaturas.. 192 caso Desagno..a002: Conversién de medidas 195 caso Desarnoiiano 3: Pago de empleados 198 caso Desarno..ano4: Venta de productos sae OH, 207 = Capitulo 6: Estructura de seleccién 6.1 Generalidades 209 6.2. Operadores de relacién 209 6.3 Operadores ldgicos ne eens su 6.4 Instruccién if simple... 212 65. Instruccién if doble... 3 213 6.6 Instruccién if doblemente enlazada 214 6.7. Sentencia switch 215 6.8 Implementar una condicién ldgica.... 216 caso vesarwou.Aoo Renta de autos (usando if doblemente enlazado} 20 ‘caso Desarnou.ano 2: Pago de trabajadores (usando if simple) 228 ‘caso Desanno..ano 3: Control de hectéreas de algodén y maiz (usando if doble)....mrnm 228 ‘caso Desanno.iAno4: Control de consumo de agua (usando if doblemente enlazado) on. 232 235 Capitulo 7: Estructura de repeticién 2a 7.1 Generalidades.... reheat ane oatescaehinestheotennoas aniston seve 243, 7.2 Contadores. 243 7.3 Acumuladores we 244 ‘caso DESARROLLAOO s: Control de pensién de estudiantes (usando switch)... 74 Estructuras repetitivas.. 204 74. Estructura de repeticién for 245 74.2. Estructura de repeticién while . . snes 247 743 Estructura de repeticién do... while. 248 75. Variables y métodos de clase: modificador static... eens 250 75.1 Variable de laS€...unneenen aap 250 75.2 Métodos estaticos. 251 75.3 Inicializadores de variables de clase... 252 caso oesarwo..A001: Control de registro de participates (usando contadores) caso Desagnouiano 2: Registro de alquiler (usando acumuladores) 258 ‘caso DESARROLLADO 3: Registro de venta (usando for) . . 1a 264 caso besanR0t1A004 Control de pago (usando modifcar static)... 270 m= Capitulo 8: Lambda y manejo de excepciones . 279 8.1 Generalidades 281 8.2. Expresién Lambda 281 8.3. Bloque try-catch.. 283 84 Cléusula throw 284 8&5 Bloque finally 5 286 ASO DESARHOLLADO: Resto de lbros.. 2 286 caso oesastoutac02: Control de pago de empleados usando Lambda. sisi BOL m Capitulo 9: Arreglos.......sssssssssseessseee 297 9.1 Generalidades 299 9.2 Arregios.. ssi = 300 9.3. Arreglo unidimensional Co 301 9.4. Arreglo bidimensional.. 303 caso DesarwouLA00 1: Listad de meres BSI. 306 caso vesanno..A002: Listado de numeros usando clase 309 caso pesanno..Av0 3: Certamen de belleza.. 314 caso vesannou.aoo 4: Matriz de nimeros enteros.... 319 = Capitulo 10: Vector de objetos y ArrayList 327 10.1 Vector de objetos. tana arn te pearessnsnsueciDS) 10.2 Clase ArrayList. 330 ccasO DesARROLLADO 1: Mantenimiento de empleados (vector de objetos)... 331 ‘caso DesAnRoLLADO2: Mantenimiento de facturas (ArrayList) ...00 - se 339 ‘ASO DesaRfoLLADO 3: Mantenimiento de productos (ArrayList y Lambda) 349 m Capitulo 11: Archivos de texto 357 11.1 Configuracién del JOK... 359 11.2 Libreria a utilizar para el manejo de archives 7 362 11.3 Clases y métodos para el manejo y control de archivos de texto 363 ‘caso DesARROLLADO 1: Mantenimiento de alunos... 365 ‘caso besanRou.ago 2: Mantenimiento de productos 374 383 Referencias bibliogréficas. ‘caso DESARROLLADO 3: Registro de venta (usando for) . . 1a 264 caso besanR0t1A004 Control de pago (usando modifcar static)... 270 m= Capitulo 8: Lambda y manejo de excepciones . 279 8.1 Generalidades 281 8.2. Expresién Lambda 281 8.3. Bloque try-catch.. 283 84 Cléusula throw 284 8&5 Bloque finally 5 286 ASO DESARHOLLADO: Resto de lbros.. 2 286 caso oesastoutac02: Control de pago de empleados usando Lambda. sisi BOL m Capitulo 9: Arreglos.......sssssssssseessseee 297 9.1 Generalidades 299 9.2 Arregios.. ssi = 300 9.3. Arreglo unidimensional Co 301 9.4. Arreglo bidimensional.. 303 caso DesarwouLA00 1: Listad de meres BSI. 306 caso vesanno..A002: Listado de numeros usando clase 309 caso pesanno..Av0 3: Certamen de belleza.. 314 caso vesannou.aoo 4: Matriz de nimeros enteros.... 319 = Capitulo 10: Vector de objetos y ArrayList 327 10.1 Vector de objetos. tana arn te pearessnsnsueciDS) 10.2 Clase ArrayList. 330 ccasO DesARROLLADO 1: Mantenimiento de empleados (vector de objetos)... 331 ‘caso DesAnRoLLADO2: Mantenimiento de facturas (ArrayList) ...00 - se 339 ‘ASO DesaRfoLLADO 3: Mantenimiento de productos (ArrayList y Lambda) 349 m Capitulo 11: Archivos de texto 357 11.1 Configuracién del JOK... 359 11.2 Libreria a utilizar para el manejo de archives 7 362 11.3 Clases y métodos para el manejo y control de archivos de texto 363 ‘caso DesARROLLADO 1: Mantenimiento de alunos... 365 ‘caso besanRou.ago 2: Mantenimiento de productos 374 383 Referencias bibliogréficas. Introduccién Java es un poderoso lenguaje de programacién que se utiliza para desarrollar aplicaciones compu- tacionales en diversos dispositivos. Hasta hace un buen tiempo se pensaba que Java era un lenguaje complejo, pesado y hasta a veces aburrido. Nada mas lejos de la realidad. Hoy en dia, Java se ha convertido en uno de los lenguajes de programacién de més uso en el mundo, gracias justamente a su legibilidad y simplicidad, Ante tantos cambios en el veloz mundo en el que vivimos, las nuevas tecnologias se hacen cada vez més populares, como es el caso de Java, al punto que casi todo el mundo las reconoce ha escu- chado hablar de ellas de una forma u otra, Esto genera que las personas se adapten mas répido a dichas tecnologias, dando paso asi a la necesidad de que estas evolucionen constantemente. De esta manera, es importante que estemos preparados para entender y programar cédigo en Java. La tarea no es complicada, ya que en programacién todo esta basado en la ldgica y en cudn orde- nado se es al programar. Como se ve, no son muchos los requisites, por lo que esta obra, Desarrollo de aplicaciones con Java, est pensado para usuarios iniciales, sin experiencia en programacién, hasta desarrolladores en Java. Ellibro se ha estructurado en once capitulos, cada uno con casos desarrollados. La forma secuen- Cial de los capitulos ha sido disefiada para un mejor entendimiento de una aplicacién Java. En otras palabras, se emplea una metodologia practica, didadctica y visual que facilita el aprendizaje del lector de una manera clara, sencilla y directa En el primer capitulo se presentan los conceptos basicos de programacién, los cuales introducen al lector en la programacién de aplicaciones en lenguaje Java. En el capitulo dos se habla técnica- mente del lenguaje Java, desde los operadores hasta la forma de programacién. En el capitulo tres, se hace un reconocimiento de las principales clases que necesitamos para el desarrollo de nues- tras aplicaciones. En el capitulo cuatro se revisan los componentes principales de la programacién orientada a objetos; asimismo, se sugiere que este sea el punto de partida para el desarrollo de cualquier tipo de aplicacién con Java. En los capitulos cinco, seis y siete se desarrollan las aplica- ciones de las estructuras secuenciales, selectivas y repetitivas, integrdndolas con la programacién orientada a objetos. En el capitulo ocho se aprende a implementar el método Lambda y, ademas, se reconocen algunos aspectos de Java, como el manejo de las excepciones. En los capitulos nueve y diez se hace referencia al manejo de los arreglos en Java. Finalmente, en el capitulo once se examina el manejo de archivos con Java. : Introduccion al lenguaje Java retum ' Reconoce los conceptos basicos del lenguaje Java &_Identifica los componentes de la maquina virtual de lava. '™ Configura e instala las aplicaciones Java en una computadora personal. & _ Implementa aplicaciones basicas usando NetBeans y Eclipse Mars. 1.1 Generalidades 1.2 Lenguajes de programacién 13 Java 14 Versiones Java 1.5. Origenes del lenguaje Java 16 Caracteristicas de la tecnologia lava 1.7 Los programas en Java 1.8. La maquina virtual Java (JVM) 19 JDK 1.0 JRE 41.11 Aplicaciones lava 4112 Instalando Java 1.3 EI IDE NetBeans y su primera aplicacién de plataforma 1.14 EL IDE Eclipse Mars y su primera aplicacién de plataforma > Caso desarrollado 1: Monto de capital usando NetBeans » Caso desarrollado 2: Venta de productos usando Eclipse Mars 2 a Capitulo: Introduccién al lenguaje Java 1.1 Generalidades Los tiempos han cambiado gracias a la nueva era digital en la que se vive, en la cual los aparatos electrénicos han tomado mucho valor. Hoy se puede ver una nueva generacién de equipos inte- ligentes (televisores, autos, lavadoras, etc.), capaces de hacer la vida de sus usuarios mucho mas cémoda, Uno de los puntos importantes para esta revolucién es la programacién, ya que es perci- bida como un segundo lenguaje en la era digital. Asi, se puede afirmar que en el futuro todos los aparatos electrénicos se manejaran mediante aplicaciones desarrolladas que permitiran tener una personalizacién de las actividades que estas realizan, Para lograr estos objetivos es necesario desarrollar aplicaciones, y esto solo se logrard dominando un lenguaje de programacién, lo cual —en realidad— no es una tarea dificil, pues es evidente en la actualidad el gran avance de la informatica; no obstante, la gran mayoria de las personas alin est logrando adaptarse a ello. Asi pues, en la era del desarrollo, desde temprana edad, ya se podrén crear aplicaciones, a medida, que solucionen algin proceso por mas simple o complejo que este sea. Uno de los lenguajes de programacién més conocidos es Java, pues se adapta mucho a los cambios y presenta una mejor performance al momento de aplicarse en aparatos electrénicos: televisores, relojes 0 aparatos méviles, como es el caso de Android, ‘Nuestro futuro esta marcado por la programacién, por eso nos vemos en la necesidad de aprender a desarrollar algo que nos permita dar solucién a un determinado problema, Por ejemplo, en el Reino Unido se ha introducido la programacién de software en el curriculo de los colegios, la cual se desa- rrolla de forma obligatoria a partir de la educacién primaria; este hecho se enfoca en tres fines que resulta importante analizar: el primero es para que los escolares sean capaces de entender el cédigo fuente de cualquier programa; el segundo, para conocer los pilares fundamentales de a programacién; ¥,finalmente, eltercero, para desarrollar sus propias aplicaciones enfocadas a sus necesidades. Esto significa que dentro de unos afios se tendré una nueva generacién de programadores que poseerén tuna vision distinta con respecto a la programacién; para ellos seré como aplicar matematicas al desa- rrollar una aplicacién. Asimismo, Estados Unidos, mediante su organizacién Code.org, promueve un programa llamado la Hora del Cédigo (del inglés Hour of Code), que incentiva a los estudiantes para que opten por un curso alternativo de desarrollo de aplicaciones. En el Peri, Microsoft promueve su campafia #YoPuedoProgramar, dirigida a estudiantes de primaria en un intento por difundir las, posibilidades de programacién informatica con un programa llamado Una Hora de Codigo. Asi pues, se puede advertir que todo lo dicho es un pequefio paso a la formacién de futuros programadores. Finalmente, se puede decir que el desarrollo del software es uno de los principales impulsores de la innovacién en el mundo, lo cual se debe a la nueva generacién de aparatos inteligentes y muchas cosas mas que vendran en un futuro no muy lejano. Todos los profesionales de distintas carreras deberén estar en un continuo proceso de busqueda y aprendizaje de nuevos lenguajes de progra- ‘macién que se adapten a sus necesidades; esto se puede dar usando lenguajes como Cf, PHP 0 Java, los cuales en la actualidad dominan el futuro de la programacién. También se debe considerar que detras de todos los lenguajes habidos y por haber se encuentran empresas muy influyentes como Google, Microsoft, Oracle, que siempre estardn presentes en la evolucién de la programacién. sarro Manuel Torres Remon 1.2 Lenguajes de programacion Para entender el concepto de lenguaje de programacién, se analizarén las palabras lenguaje y ‘programacién por separado: m= Lenguaje. Es un sisterna de comunicacién estructurado que permite la comunicacidn 0 expre- sién de una idea, usando algunos elementos como simbolos, sefiales, etc. = Programacién. Es implementar una aplicacién bajo el proceso de disefiar, codificar, depurary mantener el cédigo fuente de un programa. Entonces, se puede decir que un lenguaje de programacién esta disefiado para realizar procesos que pueden ser llevados a cabo por dispositivos electrdnicos. Asimismo, est formado por un conjunto de caracteres especiales y reglas sintdcticas o formatos que definen su estructura. Finalmente, se puede agregar que el proceso de escribir, probar, depurar, compilar y mantener el cédigo fuente de un programa se llama programacién. Seguin TIOBE, empresa de software holandesa que se especializa en la evaluacién y seguimiento de la calidad de los programas informéticos, en su ultima actualizacién de octubre del 2017, asegura que los lenguajes de programacién mantienen un mismo puesto segiin su popularidad en estos Liltimos afios, tal como se muestra en la siguiente tabla: Tabla 1.1 Listado de popularidad de los lenguajes de programacion, Cerca [tiered Eien 1 1 Java 12431% 2 Tl 8.374% 3 3 oe 5.007% 4 4 Ch 3.858% 5 5 Python 3.803% 6 6 JavaScript 3.010% 7 7 PHP 2790% 8 8 Visual Basic.NET 2735% Fuente: Esevidente que Java es més popular que los otros lenguajes de programacién; quizés este efecto se haya producido en estos ltimos tiempos por la evolucién de la programacién mévil y Android. Sise refiere la demanda de empleo, Java ocupa un gran segundo lugar, como se puede ver en la siguiente imagen Languages ranked by number of programming jobs ata Wom Indeed.com 2016 Javascript ce Ruby/Rails © 10000 20000 30000 40000 50000 G000c Figura 1.1 Listado de empleabilidad de los lenguajes de programacion Fuente: Capitulo 1: Introduccién al lenguaje Java [a 1.3 Java Con la evolucién de la tecnologia surgié un nuevo término en los usuarios, como lo es Java. Es muy probable que se haya escuchado o hasta se haya usado dicho lenguaje, y esto porque el cédigo, Java se encuentra en un gran nmero de dispositivos, especialmente méviles. Java es conside- rado un lenguaje de programacién orientado a abjetos, promovido inicialmente por la empresa ‘Sun Microsystem, que luego fue comprada por Oracle en el afio 2010. La idea principal de Java siempre fue que los desarrolladores implementaran el cédigo una sola vez y que estos pudieran ejecutarlo en muchos dispositivos sin importar su plataforma de trabajo o, mejor dicho, su sistema operativo. Todo lo mencionado con respecto a Java se debe en gran parte a la maquina virtual de Java llamada JVM, la cual brinda la portabilidad necesaria al lenguaje, ya que hoy, para cada dispositivo, existe una maquina virtual que entiende, interpreta y compila todo el cédigo Java de manera efectiva y répida. La empresa Sun Microsystems desarrollé en 1991 el lenguaje de programacién Java; iniciaimente seria usado por los dispositivos decodificadores de sefiales televisivas. El proyecto Java tuvo como primer nombre Oak, luego migré a Green para finalmente denominarse Java. Se toma como base del proyecto Java ala sintaxis C y C++, obteniendo un modelo de objetos simple y sencillo, Asimismo, es importante mencionar que la base fundamental de Java se debe principalmente a la prograrma- cién orientada a objetos, a la multiplataforma, al soporte para trabajo en red, a ejecutar cédigo en servidores remotos, teniendo el control de la seguridad y la facilidad de uso de su lenguaje. En resumen: Nombredel proyecto feeymeneaumrry Pore 1995 Eee Sun Microsystem Seren Oracle (2010), Licencia GNuGPL ery 2 7 —e = ) 1.4 Versiones Java Manuel Torres Remon Las versiones que presenta Java a lo largo de su existencia se deben al incremento de clases y paquetes que componen su biblioteca. Desde la J2SE 1.4 todas las versiones superiores han sido reguladas por la Java Community Process, la cual promueve cambios oficiales en la plataforma Java, Tabla 1.2 Listado de versiones y caracteristicas de Java. ERTS SC 0K 1.0 Enero 1996 . JDK LL Febrero 1997 . J2SE1.2 Diciembre 1998 . J2SEL3 Mayo 2000 . JOSE 14 Febrero 2002 . Reestructura el modelo de eventos AWT. Incorporaclasesinternas Incorpora JavaBeans. Incorpora JOBC (Java Database Connectivity) para la integracion de bases de datos. Incorpora Rll Remote Method invocation) Incorpora la palabra reservada keyword. Implementala reflexion en la programacién,es decir, modifica suestructura.en alto nivel Incorpora a API gafica Swingincialmente con clases basicas. Incorporael compilador JT ala maquina virtual de Java, Incorporacolecciones. Incluye la maquina virtual de HotSpot JVM. £1 RMI fue cambiado para que se basara en CORBA, de modo 4quelas aplicaciones puedancorreren diferentes arquitecturas Incorpora el API JavaSound para gestion de audio en las aplicaciones. Incorpora un conjunto de API Java Platform Debugger Architecture (POA). Incorporala palabra reservada assert Incorpora expresiones regulares modeladas al estilo det lenguaje Per. Incorporala encadenacion deexcepciones,la cual permitea una excepcién encapsulara trade bejo nivel Incorporal API/O paralalecturay escituradeimégenesen formatos como JPG 0 PNG Incorpora Parser XML integrado y procesador XSLT (JAXP} Afiade caracteristicas de seguridad integrada y extensiones criptogréficas como la ICE, la JSSE yla JAAS. Incorpora el Java Web Start, disponible para ejecuciones desde un servidor web. Capitulo: Introduccién al lenguaje Java EEE 42SE5.0 Java Se6 JavaSET JavaSe8 JavaSe9 Septiembre 2004 Diciembre 2006 Julio 2011 Marzo 2014 Septiembre 2017 = Pemtinene Incorpora conversiones de tipos type safety en tiempo de ‘compilacion para colecciones y elimina la necesidad de la mayoria de conversin de tipos (type casting) Incorpora metadatos o también liamados anotaciones, Incorpora Autoboxing/unboxing —Conversiones automisticas entre tipos primitivos (como los int) y clases de envoltura primitivas (como integer) Incorpora enumeraciones como, por ejemplo, os dias de la semana, ‘Actualiza el bucle for que es parecido al ForEach, Incorpora un nuevo marco de trabajo y las API que hacen posible integracin de Java con otros lenguajes como PHP, Python, Ruby y JavaScript. Incorpora.el motor Rhino de Mozilla Incorpora.un cliente completo deservicios web. Incorpora soporte para servicios web como JAX-WS 2.0, JAXB20, STAXy JAXP. Incorpora mejoras en el rendimiento, Incorpora soporte para XML dentro del propio lenguaje Java Incorpora soporte para closures. Incorpora una nueva API para el manejo de dias y fechas, la ‘cual reemplaza a las antiguas clases Date y Calendar, Incorpora de forma completa la liberia JavaFX mejorando la-experiencia RI. Incorpora diferentes mejoras en seguridad. Incorpora diferentes mejoras en concurrencia, Mejora los procesos con el uso de funciones Lambda, Mejora la integracion de JavaScript Incorpora nuevas API para manejo de fechas y tiempo (date-time). Mejora la clase Optional Mejoraa API de Streams, Incorporala herramienta JShel Incorpora los Strings compactes, haciendo que loscaracteres usen solo un byte en vez de dos. Incorpora el JLink que es un sustituto més capaz que los compact profiles. ‘Se puede generar un Unico archivo arcon algunas clases para una o varias versiones de Java, Secambia el recolector debasura clésico porelG1 optimizado para un balance adecuado entre alto un rendimiento y una baja latencia, Manuel Torres Remon 1.5 Origenes del lenguaje Java Afinales de los ochenta, la empresa Sun Microsystems promueve un proyecto de investigacién dirigido ppor James Gosling con el objetivo de desarrollar un software para determinados aparatos electrénicos. Sun Microsystems fue fundada en 1982 por Andreas Bechtolsheim, Vinod Khosla, Scott McNealy y Bill Joy como un proyecto inicial promovido por Bechtolsheim. Su objetivo era crear una estacién de trabajo en red mucho mas eficaz y, especialmente, de menor costo a las de la época; justamente, el nombre del proyecto es el que da el nombre a la compafifa Stanford University Network (SUN). Volviendo a la historia de Java, el equipo de Gosling buscaba crear un software que sea indepen- diente de la arquitectura y que pueda ser ejecutado en otra plataforma sin problemas. Encontraron una base a sus estudios en los lenguajes C y C++, los cuales cumplian los requerimientos buscados. Como resultado de esta busqueda, en 1990, Gosling empez6 a disefiar un nuevo lenguaje de programacién, llamado inicialmente Oak. aa nse e ase 2 ast m5, se st 10K a2 ao *s Privervesén <=> om Java Figura 1.2 Versiones de Java, En el afio 1993, aparece en el mercado informatico la Word Wide Web revolucionando a todo el proyecto, ya que ahora el equipo ponia sus ojos en la Internet debido a la diversidad de compu- tadoras que se encuentran conectadas a la red. Es ahi que Sun Microsystem toma en serio el desarrollo de Java como un lenguaje de programacién orientado a Internet. Para poder ejecutar aplicaciones Java, escribieron un Web Browser que llamaron Hot/ava, el cual tenia como finalidad soportar los applets Java, que eran aplicaciones Java incrustadas en un documento web. Conforme se tenian avances considerables en el proyecto Java, se estaba publicando el navegador NetScape Navigator, el cual soportaria los applets Java. El resultado de esta fusién conllevé a un fuerte aumento de programadores Java en el mundo y, especialmente, desperté el interés de grandes empresas como IBM, SGI y la misma ORACLE, la cual termina haciendo una alianza con Sun para le compra de su tecnologia Java, 7 Capitulo 1: Introduccién al lenguaje Java I Cabe destacar que la tecnologia Java se encuentra respaldada por una gran comunidad de desa- rrolladores en el mundo, que trabajan activamente para mantener al lenguaje Java como uno de los lenguajes de programacién mas usados de la historia de la informatica. Por otro lado, hay que mencionar que existe el Java Community Process establecido desde el afto 1998, el cual nos permite estar informados sobre futuras versiones y caracteristicas de la plataforma Java 1.6 Caracteristicas de la tecnologia Java Java no solo es un lenguaje de programacién orientado a objetos, también presenta otras caracte- risticas que lo convierten en el lenguaje preferido por los programadores y por las empresas que, en la actualidad, optan por su uso. A continuacién, se presenta una lista de estas caracteristicas: = Orientada a objetos Su tecnologia se basa en la reutilizaci6n del cédigo mediante métodos implementados en clases. Todo lo que se use en Java se encontrar encapsulado mediante clases que podran ser usados a través del acceso a objetos. = Funcionalidad dinamica ‘Se podr modificar el cédigo Java sin necesidad de volverlo a crear. Es aqui donde se podra afiadir funcionalidad a las aplicaciones sin realizar cambios en el c6digo inicial, solo sera un tema de actualizacién mediante herencia de métodos 0 atributos. = Multiplataforma Una aplicacién desarrollada con Java se podré ejecutar en diferentes sisternas operativos, pero esta tarea no la realiza el sistema operativo, sino la maquina virtual de Java. Asi, el sistema operativo adopta a Java para aplicaciones en dispositivos méviles. = Opensource Las lbrerias nativas de Java estan disponibles libremente para los desarrolladores; esto implica que lo podran leer, corregir, actualizar y, especialmente, mejorar, haciendo que Java se mantenga siempre actualizado y disponible a todo tipo de usuario. m= Lenguaje robusto Java desarrolla aplicaciones para cualquier plataforma de trabajo, pues su lenguaje es conside- rado como potente y robusto entre otros lenguajes; aqui es posible implementar aplicaciones usando hilos o frameworks como Hibernate, Spring, Struts, SF, etc. = Seguridad La seguridad es un tema importante para todo tipo de aplicacién; por ello, Java continuamente libera actualizaciones que corrigen o previenen cualquier tipo de inseguridad, ya sea a nivel de aplicacién o de redes. = Soporte y documentacién- Comunidad Java Gracias a las multiples comunidades que existen en el planeta, se puede tener acceso a una documentacién completa sobre la funcionalidad Java; en ese mismo sentido, Oracle pone a nuestra disposicién toda la documentacién sobre nuevas clases, métodos y componentes del lenguaje Java. = ESE anu Torres Remon 1.7 Los programas en Java Normalmente, cuando se escucha la frase «programar en Java», se piensa en digitar un codigo yeejecutarlo en un determinado dispositivo, pero detras de ello ocurren muchas actividades que probablemente se pueden suponer; no abstante, seré necesario especificarlas para entender la cultura que maneja Java y asi poder hablar con propiedad la prdxima vez que se escuche hablar de programacién en Java. Seguidamente, se describiran las actividades que ocurren para ejecutar tun programa implementado en Java. 1, Edicién. Esta actividad es conocida con el nombre generacién del script o cédigo fuente, la cual se puede ejecutar en aplicaciones que incluyan un editor de texto como Eclipse, NetBeans, etc. Hay que tener en cuenta que para tener un script se deben respetar las reglas Java como sintaxis, palabras reservadas, variables, asignaciones, objetos de clase, entre otras. La exten- sién del archivo que contiene el script Java es java. Tabla 1.3 Principales editores de cédigo para Java. Eclipse Ventajas: Versién: Mars2 1» Gestiona de manera profesional los proyectos. 1» Presenta un gran soporte para plugins. 1 Presenta opciones de personalizaci6n sobre suentomo ‘= Ofrece herramientas para repositoriosy servidores. Desventajas: 1= Tiene un mayor consumo de recursos en hardware. NetBeans Ventajas: Versén:e2 NetBeans. resenaunecienegesisnsbrelospoectes = Identifica_y soluciona problemas de cédigo comunes ‘= Presenta una libreria visual amigable al usuario, 1= Presenta herramientas de desarrollo integrado. Desventajas: ‘= Genera cédigo basura al usar los controles rrastrar y soltor, '= Las librerias y complementos hacen un poco pesadaa aplicacién, Oracle JDeveloper Versién: 12¢ (a ‘= Genera cédigo de forma semiautomatic. f= Tiene un editor UML 1» Poseeun creadorde interfaces visuals. ORACLE Desventajas: JDEVELOPER = Es lenta y presenta un consumo mayor de hardware, Capita: Introduccién al lenguaje Java Todas las plataformas de desarrollo contienen un editor de cédigo, en el cual se podra digitar el cédigo Java, de modo que se genere el cédigo fuente de la aplicacién. 2 | Editor de cédigo Figura 1.3 Editor de cédigo. sendmail java Compilacién. Esta actividad genera un nuevo archivo de extensién .class, el cual contiene un cédigo llamado ByteCode (‘cédigo de bytes’). Este cédigo es considerado como un cédigo inter- ‘medio, cuyo objetivo es hacer que el dispositivo entienda el cédigo Java. igura 1.4 Cédigo de bytes. » sendmail lass EDIE Desorroto de alicaions con va 8 | Manuel Torres Remon 3, Carga. Esta actividad envia el cédigo de bytes generado a la memoria principal del dispositivo por medio del cargador de clases obtenido desde la unidad donde se guardaron los archivos java yclass. oO ( oO ( ) sendmail.class ( 9 ) O Caveader Memo decases incl Figura 1.5 Cargador de clases. Las clases son envviadas al cargador de clases, el cual apila cada clase para luego ser enviada a la memoria del computador central, y asi agillzar su respectivo proceso, 4, Interpretacién. Esta actividad verifica que el codigo de byte sea valido y lo pueda convertir en un cédigo entendible por el sistema operativo donde se va a ejecutar la aplicacién 0 programa. Cédigo fuente java hs Cédigo objeto class intérprete Windows intérprete“ {"intérprete Macintosh} Capitulo 1: Introduccién al lenguaje Java [a Ejecucién. Esta actividad envia el cédigo de bytes depurado a la maquina virtual Java (JVM) para su ejecucién y visualizacién en el entorno que el usuario crea conveniente; de aqui se desprende el término de portabilidad, ya que dependiendo de la JVM se podré ejecutar la aplicacién de una u otra plataforma En resumen, cuando se crea un archivo con extensién Java, un compilador convierte dicho archivo en un cédigo de bytes y lo almacena en un archivo de tipo class; este cédigo es enviado al intérprete, el cual lo convierte en algo entendible por los sistemas operativos de cualquier dispositivo que lo soporte. rN sendmailclass Intérprete ' Windows Mac wo ira 1.7 Actividades para crear un programa Java, 1.8 La maquina virtual Java (JVM) Es un entorno donde se ejecutan todos los programas Java, normalmente la JVM es nativa del sistema operativo y viene cargada por defecto. Su caracteristica principal es que se puede ejecutar en una plataforma especifica; ademds, es capaz de interpretar y ejecutar cédigo de bytes que luego ser visualizado en el dispositivo. Asimismo, la JVM garantiza la portabilidad de las aplicaciones Java, ya que define un procesador Virtual sobre cualquier dispositivo que lo soporte y especifica qué instrucciones se ejecutardn en este dispositivo. En la figura 1.7 se pueden ver algunas de las caracteristicas que presenta la !VM. Manuel Torres Remon Soporte Seguridad Thread Exception Clases y métodos ‘Motor de ejecucién Procesador virtual de Java Figura 1.8 Estructura de la IVM Se les llama métodos nativos a aquellos procedimientos que fueron escritos en otros lenguajes y que son usados en Java; la mayoria de estos fueron heredados de Cy C++. Las clases y sus métodos, son almacenados de manera légica en forma de pilas dentro de un drea llamada Stream de clases, de la maquina virtual; estas clases contienen la siguiente informacién: = Unidentificador de clase, el cual contiene la direccién del paquete, que incluye la clase més el nombre de la clase, como, por ejemplo, javax.swing.Jlabel, = Un iidentificador de la clase padre. = Informacién que identifica si es una clase o una interface. = Una lista de identificadores de interfaces, El recolector de basura ayuda a una mejor gestién de la memoria; primero identifica qué objetos son necesarios para la aplicacién y elimina los que no son necesarios. La linea de soporte menciona principalmente a tres componentes: la seguridad, los hilos 0 trabajo en concurrencia y el manejo de excepciones, Toda esta informacién es enviada al motor de ejecucién de la !VM para ser enten- dida por el sistema operativo del dispositivo donde se ejecutard la aplicacién Java 1.9 JDK El Java Development Kit (JDK) 0 “kit de desarrollo Java’ contiene un conjunto de herramientas y librerias que son de vital importancia en la creacién de una aplicacién Java. Antes de instalar un entorno de desarrollo como Eclipse, NetBeans o JDeveloper, se tiene que instalar un JDK en su sistema operativo. Es importante mencionar que algunos entornos de trabajo tienen incluido el JDK, pero se recomienda que se instale de manera independiente. Existe un JDK para cada tipo de sistema operativo, esto se debe gracias a la distribucién hecha por Oracle {chttp://wmw.oracle.com/technetwork/es/java/javase/downloads/index.htmi>). A partir de la version Copitulot: Introduccién al lenguaje Java JDK 1.2 se le comenzé a llamar Java 2; en la actualidad, se presenta la distribucién del JDK 1.8, es decir, Java 8, Algunas de las utilidades que presentan, son las siguientes: = Javac. Es el compilador de Java que esta encargado de convertir el cédigo fuente de Java en cédigo entendible por los sisternas operativos (bytecode). m Java. Es el intérprete de Java, desde aqui el sistema operativo entenderé nuestra aplicacién. = Javadoc. Fs el encargado de generar la documentacién de todas las clases en una aplica- cién Java = _Javap. El comando javap desensambla un fichero class. Su salida depende de las opciones utili- zadas. Si no se utilizan opciones, javap imprime los campos y los métodos publicos de la clase pasada. Javap muestra la salida en stdout. = JRE. Es considerado el archivo ejecutable de Java. 1.10 JRE El.Java Runtime Environment (JRE) acta como un intermediario entre el sistema operativo donde reside la aplicacién y Java. EL JDK incluye toda la funcionalidad que ofrece el JRE para laimplemen- tacién de una aplicacién Java. Java Language Java Language Jar_] javap J Scripting Tools & eee eae amc [FR Tol"'5 TpoR [WMT | 101 | _AMI_|Java D8 [Oeployment [internationalization] Webservices | Troubleshooting Deployment | __Java Web Start “Applet/iava Plugin User interface — Toolkits 0K] Integration Libraries Other Base JRE ibraries JAVASE compact]?! Lang and uti Profiles Lang and uni [|_Math_[ Collections |_Ref Objects Regular Expression Base Libraries | Logging instrumentation | Concurrency tities] [Reflection] Versioning [Preferences API] JAR. Zip Java Virtual Machine Java HotSpot Client and Server VM. Figura 1.9 Lista de capacidades que ofrece el JDK y JRE. Fuente: Peers Manuel Torres Remon 1.11 Aplicaciones Java Java es un lenguaje de programacién multiplataforma, por la variedad de procesadores donde se puede ejecutar la aplicacién, y multisistema, porque asimismo se pueden ejecutar en muchos sistemas operativos. Es asi como Java permite construir diversos tipos de aplicaciones que se istan a continuacién: 2) Aplicaciones de consola. Son aplicaciones que se ejecutan en ambientes del tipo DOS 0 un terminal de Linux; la idea principal es crear una aplicacién basica sin enfoque visual. a Figura 1.10 Aplicacién de consola. b)_ Aplicaciones de escritorio. Son aplicaciones que se presentan en forma de ventanas; también son llamadas aplicaciones de plataforma, como, por ejemplo, la aplicacién de control de venta de productos. emi | procucro (Sumy x) curmsn (cow | an susroms m0 ee) Figura 1.11 Aplicacién de escritorio «) Aplicaciones tipo applets. Son aplicaciones que se ejecutan bajo la plataforma de una pagina web; solo se debe tener en cuenta que el navegador web soporte applets e incluya la maquina virtual de lava. Figura 1.12 Applet de Java, i= Capitulo: Introduccién al lenguaje Java ) Aplicaciones tipo servlet. Son aplicaciones que se ejecutan directamente en un servidor web y que, al ser invocado el servidor, se encargaré de compilar y ejecutar el servlet, mostrando asi la informacién al cliente mediante un cédigo HTML. | Aplicaciones JSP. Son aplicaciones embebidas que combinan cédigo HTML y cédigo Java en una sola aplicacién; cuando se realiza una peticion de ejecucién al servidor, este compila y lo convierte a servlet para mostrarle el resultado al cliente. ) Aplicaciones Beans y Java Beans. Son aplicaciones de tipo servlet especializadas en la tecno: logia Cliente-Servidor, es decir, se podré desarrollar aplicaciones con conexin a base de datos. Aplicaciones méviles. Son aplicaciones que se ejecutan bajo un sistema operativo mévil como Android. igura 1.13 Aplicacién Java vista desde un dispositivo mévil 1.12 Instalando Java Para instalar la maquina virtual de Java primero hay que considerar algunos términos de referencia como JRE o JDK. El Java Runtime Environment (JRE) es un conjunto de utilidades de Java que nos permitird configurar e instalar la JVM; sin embargo, no permite el desarrollo completo de una aplicacién Java. Asimismo, el Java Development Kit (JDK), el cual contiene el JRE y la JVM necesa~ rios para implementar las aplicaciones en Java, generalmente se usa como intermediario entre el sistema operativo y Java. Para iniciar con las aplicaciones con Java, se puede usar un Framework que contenga todo lo que necesita una aplicacién, como el editor de lenguaje, compilador lava, JVM, librerias, etc. A conti- nuacién, se presentan los logotipos de los mas conocidos: NetBeans, Oracle y Eclipse. eclipse z & ® a = g ; mn wo Figura 1.14 Frameworks de Java. A Manuel Torres Remon 1.12.1 Instalacion de JDK Es requisito indispensable tener el JDK instalado, ya que este incluye la maquina virtual de Java. Descarga Desde la pagina oficial de Oracle, se descarga el JDK. f Jina SE Development Ki tee lace n nee ‘That yout scetng be Orc nal ae Lees Apes Jve SE you may [newasteeros sa irene Figura 1.15 Listado de JDK para diferentes sistemas operativos. Fuente: Proceso de instalacion = Ubique el archivo JDK descargado. jok-Bu144-win dows-x64 1 Inicie la instalacién ejecutando el archivo jdk-8u144-windows-x64. (Wm sebeneen a tpe Ips eee ent nemn enna tone Capitulo 1: Introduccién al lenguaje Java [a = En estos primeros pasos, solo seleccionara el botén Next. FP a get pa Con a (Soentyurg te hathenee ope ntecmroree en == pemecree ln = Es un entorno de desarrollo integrado (IDE), enfocado al desarrollo de aplicaciones, que usa el lenguaje de programacién Java; pero, asimismo, permite el uso de otros lenguajes bajo el mismo, entorno. Su caracteristica principal radica en la distribucién gratuita sin restricciones de uso. Fue la empresa Sun Microsystems la que funda el proyecto de cédigo abierto llamado NetBeans a ‘mediados del afio 2000. NetBeans soporta el desarrollo de todos los tipos de aplicacién Java como, a J2SE, aplicaciones web, aplicaciones £18 y aplicaciones méviles. Para iniciar con la instalaci6n, se debe descargar Ia version completa del IDE, el cual tiene un peso. de 221 MB. Una vez realizada la descarga, se seguirdn los siguientes pasos: = Aliiniciar la instalacién, se presenta la pantalla de bienvenida en la cual observara una lista de aplicaciones y el tamafio necesario pars el proceso de instalacién. Para continuar con Ia insta- laci6n, con valores predeterminados, seleccione el botén Next. Capitulo: Introduccién al lengu Java [= a ont ca Por otro lado, puede seleccionar algunas aplicaciones particulares de la lista, para esto selec- clone el botén Customize. la instalacién: el cual mostraré la siguiente ventana de personalizacién de ‘epee a an eta |. desarolo de aplicaciones con ova 8) Manuel Torres Remon = La siguiente ventana muestra la aceptacién de la licencia NetBeans, para lo cual solo debe activar el check | accept the terms in the license agreement y seleccionar el botdn Next. m= La siguiente ventana muestra dénde se instalaré la aplicacién, pero es importante que tome principal interés en JDKTM for the NetBeans IDE, ya que segtin el paquete de instalacién también estd instalando Ia versién 1.8.0_91 del JDK. En el caso que la seccién JDKTM for the NetBeans IDE se encontrara vacia, debe cancelar la instalacién del NetBeans e instalar el JDK independientemente a partir de la siguiente URL “ Para realizar la descarga, primero active la opcién Accept License Agreement; luego, a partir del sistema operativo con que cuente, seleccione un paquete de instalacién de JDK; para nuestro caso, seleccione el archivo perteneciente a Windows x64 (64 bits). Capitulo 1: Introduccién al lenguaje Java [iw = Acontinuacién, aparecerd una ventana de resumen con los datos de la ubicacién de la instala~ cin y el tamafio que ocupard en el disco. Se recomienda que active el check correspondiente a Check for Updates, el cual realiza una actualizacién de forma automatica del producto NetBeans cada vez que se encuentre conectado a Internet. Haga clic en el botdn Install para iniciar con la instalacién del NetBeans. = Finalmente, se muestra la ventana de instalacién completa. Seleccione el botén Finish para salir de la instalacién y dar por finalizada la instalacién. Ceres = “Gimareestenterent nt > Nees nsotivon comets nce pore cere ti ae targets Vv Grett beta ont povrg ima a an wyon is abcess ston son a Imeorenertsn hae aus ene ana nt seven gat ens tn a SialGtanrerea pene eneronat Manuel Torres Remon 1.12.3 Descarga de Eclipse (version Mars 2) T October Banton Campaign Seclipse Figura 1.17 Zona de descarga Eclipse Fuente: Eclipse es un IDE de Java, fue desarrollado originalmente por la empresa IBM como una evolucién de su aplicacién VisualAge para Java. Eclipse trabaja bajo licencia de software libre; por lo tanto, su distribucién es gratuita y es una buena alternativa para el desarrollado de aplicaciones Java. En|a actualidad el IDE de Eclipse se encuentra patrocinado por la Fundacion Eclipse, la cual es una organizacién totalmente independiente, sin énimo de lucro, que fomenta una comunidad de codigo, abierto y un conjunto de productos complementarios, capacidades y servicios. Esta aplicacién no necesita instalacién; por tanto, una vez descargada, se debe descomprimir su archivo. Para iniciar Eclipse, solo bastard con dar dable clic sobre el icono de la aplicacién Scclipse. —— TRE Capt de S eclipse Ap cc Ke Deine Ww esdeconigucon 118 ra 1.18 Contenido de la carpeta Eclipse Capitulo 1: Introduccién al lenguaje Java 1.13 EL IDE NetBeans y su primera aplicacion de plataforma Se realizar una revisién de la pantalla inicial que presenta el IDE NetBeans y, ademés, se exar ‘nar cémo se crea una nueva aplicacién de plataforma Java, G NetBeans IDE 8.2 1.13.1 Crear una nueva aplicacién 1 Elja File > New Project. = Seleccione la categoria Java y luego el proyecto Java Application. Q Fier Ce gy o ® o a @ ® @ & = Luego asigne un nombre al proyecto, como, por ejemplo, pjLaboratoriol. Todas las ay caciones, por defecto, se almacenan en la carpeta NetBeansProjects ubicada en Mis Documentos; si desea modificar la ubicacién, seleccione el botén Browse... Por otro lado, desactive el check Create Main Class. «| EEE Manuel Torres Remon m= La ventana de proyectos debe mostrarse inicialmente de la siguiente manera Projects *| Files _| Services Ss © & plaboratorio: | - Nombre de la aplicacién ~ Paquetes del proyecto - Librerias del proyecto 0K 1.8 Wefaut) Los paquetes del proyecto permiten mantener un orden dentro de la aplicacién, pues se podrian crear paquetes para el conjunto de clases, formularios, imagenes que necesite la aplicacién. Las librerias del proyecto muestran una lista de librerias necesarias para el desarrollo de la aplicacién. 1.13.2 Afiadir paquetes al proyecto Los paquetes generan un determinado orden dentro del proyecto, por eso es importante afiadir paquetes a la aplicacién. Para ello se realizan los siguientes pasos: m= Haga clic derecho sobre Source Package, luego seleccione New > Java Package. Clic derecho ° a Entity Clsses fom Database. Web Service Cent. = Asigne un nombre al paquete, como, por ejemplo, pFormulal siguiente imagen: s, tal como se muestra en la Capitulo 1: Introduccién al lenguaje Java [7s m= De la misma forma, puede agregar paquetes como pClases y plmagenes, véase la siguiente imagen: 3 eis Dew 1.13.3 Afiadir un formulario al proyecto Los formularios representan la forma visual de una aplicacién en Java. Por lo tanto, es importante. afiadir un formulario al proyecto; hay que tener en cuenta, no obstante, que deben afiadirse en un paquete determinado. Para afiadir un formula, se realizan los siguientes pasos: = Haga clic derecho sobre el paquete pFormularios, luego seleccione New > JFrame Form... vest ree ae Ca ae a ‘sc. geet = SEE TE ine 2 2] Pate coy |B melee. Pareto Dette Seis | tty Ca = pS Web Seve Chet = Asigne un nombre al formulario, como, por ejemplo, frmVenta, tal como se observa en la siguiente imagen: Capitulo 1: Introduccién al lenguaje Java [7s m= De la misma forma, puede agregar paquetes como pClases y plmagenes, véase la siguiente imagen: 3 eis Dew 1.13.3 Afiadir un formulario al proyecto Los formularios representan la forma visual de una aplicacién en Java. Por lo tanto, es importante. afiadir un formulario al proyecto; hay que tener en cuenta, no obstante, que deben afiadirse en un paquete determinado. Para afiadir un formula, se realizan los siguientes pasos: = Haga clic derecho sobre el paquete pFormularios, luego seleccione New > JFrame Form... vest ree ae Ca ae a ‘sc. geet = SEE TE ine 2 2] Pate coy |B melee. Pareto Dette Seis | tty Ca = pS Web Seve Chet = Asigne un nombre al formulario, como, por ejemplo, frmVenta, tal como se observa en la siguiente imagen: Java’ lanuel Torres Remon = De la misma manera, podria agregar los formularios frmCompra y frmFactura al paquete pFormularios. La ventana de proyectos debe mostrarse de la siguiente manera: 1.14 ELIDE Eclipse Mars y su primera aplicacion de plataforma Eclipse Mars es un IDE para el lenguaje de programacién Java, incluye un editor de texto para crear nuestro cédigo fuente, realiza marca de errores en el cédigo y autocompleta funciones, clases o variables. La versién Eclipse Mars es 2 y presenta algunas nuevas funcionalidades frente a sus predecesores. 1.14.1 Crear una nueva aplicacién = Aliniciar, Eclipse Mars solicita seleccionar un espacio de trabajo para nuestras aplicaciones: Por defecto, se toma como ubicacién la carpeta WorkSpace, pero puede modificarla seleccio- nando el botén Browse... m= Luego seleccione File > New > Java Project. Capitulo 1: Introduccién al lenguaje Java [a = Acontinuacién, asigne un nombre al proyecto, como, por ejemplo, pjLaboratoriol; los demas valores mostrados debe mantenerlos por defecto; por lo tanto, solo haga clic en el bot6én inish de la ventana. Create a Java Project Crete aa project inthe workspace rin an eterna ocation, Projctname: abort Tvsedetast cation Location: [ Aeruerworepae = Laventana exploradora de paquetes inicialmente se muestra de la siguiente manera: If PockageEporer {2 es| 4 @ pjlaboratoric! Bsc mh JRE Sytem Library ovSE-15) 1.14.2 Afiadir paquetes al proyecto Los paquetes generan un determinado orden dentro del proyecto; por eso, es importante afiadir paquetes @ la aplicacién. Para ello se realizan los siguientes pasos: = Haga clic derecho sobre el icono src. Luego seleccione New > Package. = Asigne un nombre al paquete, como, por ejemplo, pFormulai siguiente imagen: s, tal como se muestra en la ee Manuel Tores Remon = De la misma forma, se puede agregar paquetes como pClases y plmagenes, tal como se observa en la siguiente imagen: i Pape 2 =e Baie” 2 pte poms & plemires nae aby Ly 1.14.3 Afiadir un formulario al proyecto Para afiadir formularios en un proyecto Eclipse Mars, se necesita de la instalacién de WindowBuilder. No obstante, la versién Mars descargada ya cuenta con la categoria Window Builder. Para su instalacién se realizan los siguientes pasos: = Haga clic derecho sobre el paquete pFormularios, luego seleccione New > Other... '= Seleccione la categoria WindowBuilder, aperture la carpeta Swing Designer yelja JFrame, tal como se muestra en la siguiente imagen: Introduccién al lengué = Luego asigne un nombre al JFrame, como, por ejemplo, frmVenta, y haga clicen el boton Finish. = Finalmente, el aspecto de la ventana exploradora de paquetes debe mostrarse de la siguiente manera: ¥ © phsbomtoret © ae 1 pCes ¥ Bi promutaos > i ert 1 prmagenes 2 RE Sytem ray E15) = Asimismo, el entorno debe mostrarse como sigue: Manuel Torres Remon CASO DESARROLLADO 1: Monto de capital usando NetBeans Tres socios de una cooperativa han decidido reunir un capital de dinero baséndose en el aporte de cada uno de ellos. Se requiere implementar una aplicacién en Java que determine el monto total del capital reunido entre todos los socios y que, ademas, precise qué tanto por ciento le corres- ponde a cada uno. Soluci6n: 1. Seleccione File > New Project. Luego elija la categoria Java y, enseguida, el proyecto Java Application, 2. Asigne el nombre pjCapitulo2 al proyecto y desactive el check Create Main Class. 3. Agregue el paquete pFormularios. 4. Agregue un JFrame Form dentro del paquete pFormularios y asignele el nombre frmCapital. 18 Op Tetras 5. Disefie la siguiente interfaz y asigne nombres a los controles, tal como se muestra en la imagen: ‘COOPERATIVA- MONTO DE CAPITAL (Bammer) |) vomosec01 somos: somosoons | montod ths Sum me Cenc en op (itcaoal }— $62500.00 rrcevtatsc003 am. Capitulo 1: Introduccién al lengu Java [a 6. Agregue cédigo a los botones; para esto, desde la vista de disefio del NetBeans, haga doble clic sobre los botones. package pformilarios; public class frnCapital extends javax.swing.JFrame < public frncapital() ¢ ‘initComponents() 5 3 private void btncalcularActionPer formed( java.awt.event.ActionEvent evt) { 3 double nontol-ouble. parseDouble(txtMontol.getText()) double monto2-Double. parseDouble(txtHonto2. getText()); double nonto3-ouble. parseDoudle(txtHonto3.getText())} double capital - montolionto2+monto3; double porcentajel ~ (montol*199) /capital; double porcentaje2 - (monto2*189) /capital; double porcentaje3 ~ (monto3*189) /capital; A icapital.setText('s String. format (%.2F* capital); UblPort.setText (String. format( "%.2f* A lPor2.setText (String. format( " porcentajel)+%"); 2 *yporcentiaje2) + "%") UlPor3.setText (String. format ( %.2f*,porcentaje3)+%*); private void bent inpiarActionPer formed(java.awt.event .ActionEvent evt) { ‘txtMontol.setText(""); extHonto2.setText("*)} ‘txtMontos.setText("*)} Iblcapital.setText(*"); VplPori.setText(**); UplPor2. setText(**); VblPor3.setText("")} txtHontol.. requestFocus() ; Manuel Torres Remon 7. Ejecute la aplicacién. Una vez colocado el cédigo en los botones, presione la combinacién de teclas + ; ahora pruebe la aplicacién con los valores que se muestran en la siguiente imagen: CASO DESARROLLADO 2: Venta de productos usando Eclipse Mars 2 Una tienda de venta de productos al por mayor se encuentra promocionando un nuevo producto, para lo cual hace una oferta de descuento del 12% sobre el monto total de productos adquiridos. Se desea implementar una aplicacién en Java que le permita al usuario comprador determinar cuanto debe cancelar por la compra de ciertos productos a un determinado precio; los productos deberdn ser ingresados @ la aplicacién y esta debe devolver el monto subtotal, el descuento y el neto a cancelar en la caja de la tienda, Soluci6n: 1. Seleccione File > New > Java Project. 2. Asigne el siguiente nombre al proyecto: pjCapitulol, 3. Agregue el paquete pFormularios, 4, Agregue un JFrame dentro del paquete pFormularios y asignele el nombre frmVenta, 4 & piCepitulot 2B sc 4B pFormularios > B) FrmVentajava > mi JRE System Library [JavaSE-1.8 5. Disefie la siguiente interfaz y asigne nombres a los controles, tal como se muestra en la imagen: VENTA DE PRooUCIOS PROMOCION Capitulo 1: Introduccién al lenguaje Java [7s 6. Agregue cédigo a los botones; para esto, desde la vista de disefio del Eclipse NEON, haga doble clic sobre los botones. package pFormularios; ‘import. import ‘import import ‘import ‘import. ‘import ‘import. import ‘import ‘import. public java.aut.BorderLayout; Java. aut EventQueve; Javax. swing. JFrame; Javax. swing. JPanel; Javax. swing, border .EmptyBorder; Javax. swing. ILabel; Javax.swing. JTextField; Java.awt. Font; Javax.swing. J8utton; Java.awt.event.ActionListener Java. awt event .ActionEvent; class frnvents extends IFrave implements Action| istener { jate 3Pancl contentPane; private JLabel LblventadeProductos; private JLabel LblPreciobelProducto; private JLabel LblCantidad; private JTextFicld txtPrecio; private JTextField txtCantidad; private Joutton btncalcular; private Jautton bent inpiar; private JLabel UbiSubtotal; BLabel LbLescuento; private JLabel LbletoaPagar; private JLabel Lbtsubtotal_1; private JLabel LblDescuento_i; private Jlabel Lbleto; public static void noin(Stringl) args) { 3 public EventQueue. invokeLater (new Runnable) { public void run) ( try { frmventa frame ~ new fraventa(); Frame. setvisible (true) ; + catch (Exception e) { e.printStackTrace(); + + Ys frmventa() { setTitle( ‘Venta de Productos - Eclipse Mars 2"); setDefaultCloseOperation (JFrame. EXIT_ON_CLOSE) ;, setBounds (169, 100, 504, 244); contentPane ~'new JPanel () ; contentPane.setBorder (new EnptyBorder(S, 5, 5, 5))} setContentPane (contentPane) ; contentPane.setLayout (mull) ; = | EEE Manuel Torres Remon ‘LbWentabeProductos ~ new JLabel ("VENTA DE PRODUCTOS - PROMOCION " TblventabeProductos. setFont (mew Font ( "Tahoma", Font BOLD, 14)); LblventabeProductos. setBounds(28, 22, 324, 25); contentPane. add (LblVentaDeProductos) ; Lb1PreciodelProducto ~ new JLabel( "PRECIO DEL PRODUCTO*) ; LblPreciobelProducto.setfiounds(3, 58, 136, 14); contentPane. add (1bLPrecioDel Producto) LplCantidad ~ new JLabel( ‘CANTIDAD "); I iCantidad.setBounds (188, $8, 79, 14); contentPane. add (LbLCant idad) ; txtPrecio - new JTextField(); txtPrecio.setBounds(28, 83, 138, 25); contentPane. add (bxtPrecio) ; txtPrecio.setColums(16) 5 txtCantidad - new ITextField() ; txtCantidad.setBounds (188, 83, 79, 25); contentPane. add (txtCantidad) ; ‘txtCantidad. setColums(19) ; btnCalcular ~ mew JButton( ‘CALCULAR' btncalcular.addActionListener (this) ; btncalcular.setBounds(269, 83, 112, 24); contentPane.add (btnCalcular) ; btnLimpiar ~ new 3Button( *LIMPTAR") ; btnLimpiar addActionListener (this) ; btnLimpiar.setBounds (385, 83, 89, 24 contentPane. add (btnLimpiar) 5 YbIsubtotal - new JLabel ( ‘SUBTOTAL "); Uplsubtotal.setBounds (28, 142, 79, 14); contentPane. add (1btsubtotal) Lpldescuento - mew JLabel( ‘DESCUENTO") ; Lplescuento.setBounds(28, 178, 89, 14) contentPane. add (LbtDescuento) ; LplNetoAPagar - new ILabel( ‘NETO A PAGAR LbINetoaPagar.setBounds(317, 142, 89, 14); contentPane. add (IblNetoAPagar) ; Tplsubtotal_1 ~ new ILabel ("$426.00"); Ulsubtotal_1.setBounds(123, 142, 79, 14); contentPane add (IbtSubtotal_1) ; Lpldescuento_1 - new JLabel( *$51.12" Ulescuento_1.setBounds(123, 178, 79, 14); contentPane.add (UbtDescuento_1) ; UbINeto = new ILabel( "$374.88 "); UbINeto.setFont (mew Font( ‘Tahoma’, Font.PLAIN, 18); UplNeto.setBounds (327, 167, 89, 14); contentPane. add (IbtNeto) ; Capitulo 1: Introduccién al lenguaje Java [s public void actionPerformed(Actionévent arga) { 4f (argd-getSource() -- btnLimpiar) { actionPer formedBtnLimpiar (arg®) ; } ‘4f (argd.getSource() ~~ btnCalcular) { act ionPer formedBtnCalcular (arg®) ; protected void act ionPerformedBtncalcular(Actionévent arg®) { double precio - Double. parseDouble(txtPrecio.getText()) ‘int cantidad ~ Integer.parseInt (txtCantidad.getText() double subtotal ~ precio * cantidad; double descuento - subtotal * 9.12; double neto - subtotal - descuento; Ulsubtotal.setText('$ "String. format( "%.2F t,subtotal) ); UlDescuento.setText ('$ "+String. format %.2f *,descuento)); UlNeto. setText( 5 String. format (%.2f*,neto)) ; protected void actionPer formedetnLimpiar(ActionEvent args) { ‘txtCantidad.setText(*'); txtPrecio.setText(*"); Ulsubtotal. setText(*); UblDescuento.setText (""); UbtNeto. setText(""); txtPrecio. requestFocus() ; 7. Ejecute la aplicacién. Una vez colocado el cédigo en los botones, haga clic derecho sobre el formulario> Run As> Java Application; ahora pruebe la aplicacién con los valores que se ‘muestran en la siguiente imagen: 0 Fundamentos de programacion | Reconoce los conceptos basicos de programacién estructurada. | Identifica los elementos que componen una aplicacién Java 24 Generalidades 2.2 Proceso de solucién mediante una aplicacién Java 23. Asociar el pseudocédigo al formulario en Java 2.4 Metodologia de programacién con Java 25. Elementos que componen una aplicacién Java 26 Loscomentarios 2.7 Elementos léxicos en Java 2.8 Los paquetes y las importaciones 29° Tipos de datos 2.10 Las variables zat Laclase Integer 242 Laclase String 2.13 Manejo de la clase JOptionPane 2.18 Laclase Math > Caso desarrollado 1: Modelo de cotizacién bancaria (programacién estructurada) > Caso desarrollado 2: Modelo de cotizacién bancaria (programacién modular) > Caso desarrollado 3: Modelo de cotizacién bancaria (programacién orientada a objetos) Capitulo 2: Fundamentos de programacion |"s 2.1 Generalidades ‘Actualmente vivimos en una sociedad informatica gracias a muchos factores, uno de los mas importantes es la evolucién de la Internet. Ello ha permitido que muchas personas usen aplica- clones 0 programas como Facebook, WhatsApp, etc., que han sido desarrollados justamente bajo un lenguaje de programacién. Java es un lenguaje de programacion que nos permitiré implementar aplicaciones que den solucién ‘aun determinado problema o necesidad. Asi, en la actualidad, se cuenta con miles de aplicaciones ara todo tipo de usuario, desde un reloj digital en un dispositivo movil hasta aplicaciones que permiten controlar el inventario de activos en una empresa. Este capitulo se enfocard en reconocer los elementos que componen una aplicacién Java. Se iniciard con una breve explicacién sobre algoritmos y, al final, se implementardn aplicaciones usando como IDE a NetBeans. 2.2 Proceso de solucion mediante una aplicacion Java La solucién a un determinado problema se puede dar de diferentes formas y en diferentes esce- narios; cuando el problema es conocido, se puede solucionar directamente en el lenguaje de programacién, pero siempre se recomienda realizar un andlisis del mismo. Asimismo, en Java sucede algo particular: contiene muchas reglas que es importante respetar. Estas reglas, como, por ejemplo, la sensibilidad de maytisculas y mindsculas que tiene Java 0 el so de métodos que contienen sus librerias, se iran conociendo en el transcurso de este material. Entonces, a modo de resumen, para solucionar un determinado problema se deben seguir las fases que se proponen en la tabla 2.1 Tabla 2.1 Fases para solucionar un problema pene Fases ‘Analizar el problema de tal forma que se entienda cual es el objetivo del mismo, Andlisis del problema Disertar el algoritmo de solucién al problema, de tal manera que satisfaga la Disefio del algoritmo necesidad del problema Codifcar el problema en un determinado editor de codigo Java. Codificaci6n del problema Ejecutarel programa de tal manera que refleje el resultado esperado. Ejecucién del programa \Verficar si el resultado es el esperado y modificarsi fuera necesario, Verificacion y depuracién 2.2.1 Fase 1: Analisis del problema Esta fase tiene por objetivo reconocer claramente a dénde se quiere llegar con el problema, ademas de identificar los elementos necesarios para la solucién. Para ello se requiere de tres capacidades que hay que reconocer y que en el futuro serd muy sencillo detectar. Asi, una vez entendido el problema, se deben responder las preguntas de la tabla 2.2. Manuel Torres Remon Tabla 2.2 Proceso de entrada y sada, eCualesel resultado? Aqui se debe determinar cual seré el resultado emitido por las formulas haciendo: uso de los datos, es decir, se debe lograr una integracion entre la primera y Acontinuacién, se presentan algunos casos para entender mejor como se debe analizar un problema antes de codificarlo en Java, Problema 1. Por enviar un paquete de 5 kg de peso a una poblacién que esté a 60 km de distancia, una empresa de transporte cobré $ 9.00. éCudnto costaré enviar un paquete de 15 ke a 200 km de distancia? = Analizando el problema, se encuentran los siguientes datos: Peso del paquete (kg) eer) 5 © 9.00 15 200 2 m= Seguidamente, se organizan los valores encontrados de tal forma que satisfaga el patron de valores entrada-proceso-salida EMGLOLMM Peso del paquete (peso), distancia dela poblacién (distancia) corer) 100 costo=9x 12x20 360 El costodel transporte es directamente proporcional al peso del paquete; es decir si por '5kg cobran $9.00, se puede decir que por 15 kg el costo de transporte debe ser mayor; Finalmente, el costo aumenta en proporcién al peso del paquete. Dela misma manera se debe comparar el costo con la distancia; es decir, si por 60 km ‘cobran $9.00, por 200 km cobrarén més; por o tanto, el costo también es drectamente proporcional ala distancia, ya que a mayor distancia mayor seré el costo de transporte. Finalmente, se puede concluircon la siguiente férmula de solucion al problema: costong x P22, Sistancia 5 6 Elcédigo Java se muestra della siguiente manera: double costo; costo - 9 * (peso * 5) * (distancia/69); Notese en la formula que para poder hallarel costo se necesita saber cual es el peso yla distancia; porlo tanto, esvalido decir que peso y distancia son datos de entrada, mientras que costo representa el valor de salida EITM Costo de transporte (costo) Capitulo 2: Fundamentos de programacién [a Problema 2. Doce obreros, trabajando 8 horas diarias, terminan un trabajo en 25 dias. €Cuanto tardardn en hacer ese mismo trabajo 5 obreros trabajando 10 horas diarias? = Analizando el problema, se encuentran los siguientes datos: Girne faeces Pa 2 8 25 5 10 @ = Seguidamente, se organizan los valores encontrados de tal forma que satisfaga el patrén de valores entrada-proceso-salida Elana coat) Cantidad de obreros (obreros), horas de trabajo (horas) sx 8 5 "10 Dia Los das trabajados son inversamente proporcionales ala cantidad de obreros; es decir, sipor25 dias senecesitan 12 obreros, se puede decir que por Sobreros senecesitaré mas dias; inalmente, los dias trabajados aumentaran sila cantidad de obreros disminuye, De la misma manera se deben comparar las horas diarias de trabajo con los dias traba- Jados;es decir si trabajando 8 horas diarias se demoran 25 dias, entonces se puede decir ue por 10 horas diarias de trabajo se demorarén menos dias; por lo tanto, las horas de trabajo tambien son inversamente proporcionales a los dias trabajados. Finalmente, se puede concluircon la siguiente formula de solucion al problema: 2 8 ‘obreros “horas Dia 5x: Elcédigo Java se muestra della siguiente manera: Ant dias; dias-25*(12/obreros) * (8/horas) ; Nétese en la formula que para poder halla los dias se necesita saber la cantidad de obreros ylashoras; por lo tanto, es valido decir que obrerosy horas son datos de entrada, mientras ue dias representa el valor de salida Diastrabojados as) 2.2.2 Fase 2: Disefio del algoritmo Eldisefio del algoritmo puede ser representado mediante dos herramientas: los diagramas de flujo yel pseudocédigo. Aqui se hard uso de los pseudocédigos, ya que son los més parecidos al cédigo fuente que necesitamos implementar en Java. Se dice que un pseudocédigo representa el problema en pasos cortos de forma descendente, y que tiene un inicio y un fin, de tal manera que se pueden realizar las pruebas del problema con los datos obtenidos en la FASE 1 A continuacién, se seleccionarén los dos casos expuestos en la FASE 1 para representarlos en la fase del disefio del algoritmo. mal eee Manuel Torres Remon Problema 1, Para poder enviar un paquete de S kg de peso a una poblacién que esté a 60 km de distancia, una empresa de transporte cobré $ 9.00. éCuanto costard enviar un paquete de 15 ke a 200 km de distancia? = Patrén de entrada, proceso y salida del problema: Giinrcny proceso [ipetmenis 9 P25e,, distancia 60 costo Java: double costo; costo-9*(peso*5) * (distancia/6®) ; SALIDA [ety m= Pseudocddigo de solucién: oer INICIO unto de inicio del pseudocédigo Leer peso, distancia Solicita el valor de peso la distancia, Costo=9% (peso/5)x (distancia/60) _Calcula el costo segin o analizado. Imprimir costo Muestra el resultado del célculo. FIN Punto final del pseudocédigo. Problema 2. Doce obreros, trabajando 8 horas diarias, terminan un trabajo en 25 dias. éCudnto tardardn en hacer ese mismo trabajo 5 obreros laborando 10 horas diarias? = Patron de entrada, proceso y salida del problema: EMCLIN obrer0s, horas Porras Pseudocédigo: 2 8 dias=25%. ‘obreres "horas Java: int dias; dias - 28 * (42/obreros) * (8/horas); ET Dies m= Pseudocddigo de solucién: Inicio Punto de inicio del pseudocbcigo. Leer obreros, horas Solicita el valor de obreros y horas. dias=25. (12/obreros)x(@/horas) Calcula la cantidad de dias segin la férmula, Imprimir dias Muestra el resultado del calcuo, FIN Punto final del pseudocédigo. Capitulo 2: Fundamentos de programacién 2.2.3 Fase 3: Codificacién del problema Para completar la fase de codificacién se deben sustituir los comandos del pseudocédigo por las sentencias propias de Java, claro esta, respetando las reglas y los patrones propios del lenguaje. Esto se ird aprendiendo conforme se avance en la lectura del libro. ‘A continuacién, se toman como referencia los casos expuestos en la FASE 1. Problema 1, Para poder enviar un paquete de 5 kg de peso a una poblacién que esta a 60 km de distancia, una empresa de transporte cobra $ 9.00. + Eclipse Mars, Haga clic derecho sobre el formulario, luego seleccione Run As> Java Application. 2.3 Asociar el pseudocddigo al formulario en Java Para terminar de entender el proceso de implementacién se realizar4 una analogia entre el pseu- docédigo y la aplicacién Java. A continuacién, se analiza el siguiente pseudocédigo del proceso que calcula el sueldo de los empleados. toe INICIO Leer trabajador, horas, pago Sueldo=horas xpago Descuento= sueldo * 12% ‘Neto= sueldo -descuento Imprimirsueldo, descuento, neto FIN El disefio de la GUI se muestra de la siguiente manera: Entrada Escribir sueldo Capitulo 2: Fundamentos de programacién El cédigo se debe colocar dentro del botén Calcular, y se muestra como sigue: private void btnCalcularActionPer formed (java.awt.event .ActionEvent evt) { String trabajador ~ txtTrabajador.getText() ; ‘int horas ~ Integer.parselnt(txtHoras.getText()) ; double pago ~ Double. parseDovble(txtPago. getText()) ; double sueldo - horas * pago; double descuento ~ sueldo * 0.12; double neto ~ sueldo-descuento; Vwisueldo.setText('s String. format (%.2f', sueldo)) ; Ulescuento. setText( '5 "+String. format( '%.2t", descuento)) ; Twineto.setText( '$ "+String, format("%.2F", neto)); Proceso de compilacién Luego de haber codificado el cédigo Java se debe traducir a un lenguaje maquina; este proceso la realiza el compilador de Java, llevando a cabo las siguientes actividades: Steen woa ncaa omartrod(jara enn Actonvee 0) 8 (Wistar céaigo foente oes as J (Compitar cédigo fuente sien ewes wie — ee =| Manuel Torres Remon 2.4 Metodologia de programacion con Java El desarrollo de cualquier aplicacién que dé una solucién adecuada a un problema resulta ser un tanto complicado si se tiene en cuenta que existen diferentes formas de programar. Por tanto, sera de suma importancia adecuarse a una metodologia que nos permita programar adecuadamente. Cuando se habla del uso de una metodologia de programacién, se hace referencia a un conjunto de reglas, principios o métodos que permiten tener una forma adecuada de desarrollo, tal conjunto forma parte de la cultura en programacién e indica cémo esta Ultima debe emplearse. Al final de un desarrollo se podrd ver que es posible integrar todas las metodologias en una misma aplica- cién, y estas pueden ser: 2.4.1 Programacion estructurada Es la programacién orientada a mejorar el sentido del desarrollo utilizando solo funciones 0 proce- dimientos y tres estructuras como la secuencial, la selectiva y la repetitiva, Surge en la década de os sesenta, El paradigma de la programacién estructurada se basa en el teorema desarrollado por Edsger Dijkstra, por eso es que solo se usan tres estructuras basicas de control. p' String alunno = "ANGELA TORRES LAZARO' pnt otal double pronedio = (notal + nota2)/2.0; String condicion=""; Af (pronedton FE ‘cond'efon 3 | tse s condicion = "DESAPROBADO"; phfor(int i=1; 1-10; i++) { : B| j'"'system.out.printla(condicion) ; <--! [ie 3 3) Figura 2.1 Cédigo orientado a la programacién estructurada, m= Secuencial. Se caracteriza porque el cédigo sigue una linea secuencial al momento de ejecu: tarse; esto genera una especie de orden dentro del bloque de cédigo, pero no amplia las capacidades que ofrece un lenguaje de programacién como Java. = Selectiva. Se caracteriza porque el cédigo puede tomar distintos caminos segtin una deter- minada condicién. m= Repetitiva. Se caracteriza porque el cédigo puede incluirse en un ciclo de repeticiones que puede ser controlado por algin evento. Capitulo 2: Fundamentos de programacién [Te 2.4.2 Programacién modular Esa programacién orientada a dividir un programa en porciones de cédigo mas pequetias, también llamadas médulos o subrutinas. Surge como una evolucién de la programacién estructurada. Se usa generalmente para aplicaciones mucho mas complejas. Con el uso de la programacién modular no se deja atrds la estructurada; al contrario, esta se integra dentro de los médulos 0 subrutinas y hace que una programacién sea més robusta y esté total- ‘mente controlada por el programador; esto proviene de una técnica llamada divide y vencerds. Médulo principal ‘Médulo 1 terminaCordicion(double pronedio) INGELA TORRES LAZARO™; string String alunno = int 5 5 int nova2 = 18h String condicior 4 (pronedio >= 12.5) double promedio = (notat + nota2)/2.03 String cond'cion= ‘determinaCondicion(promedio); *DESAPROBADO"; finprimie(condicion): ‘Médulo 2 Valor retomnado void Soprinir(String condicion) forint $92; 16629; 444) { Systes,out.println(condicion) ; Fin de médulo Figura 2.2 Cédigo orientado a la programacion modular. Manuel Torres Remon 2.4.3 Programacion orientada a objetos Es la programacién orientada a la definicién de clases, donde, ademas, por medio de abjetos, se puede admit rar la informacién de entrada y salida de una aplicacién, permitiendo el uso de algunas especificaciones nuevas como la herencia, la abstraccién, el polimorfismo, el acoplamiento yelencapsulamiento. public clase ProgramaPrincipat t Pronedio b{P - Pronedio()s 0bje.soeAlunno( "ANGELA TORRES LAZARD" chipsets hpcaetnacia) Ne pronedio ~ calevtaPronedio(): Envia el promedio como valor de retorno Enwia la condicién de aprobado o desaprobado como valor de retorno “pstring condicion ~ determineCondicton(oronedtod: public clase Fromsio t private string slueno} Drivate int nas pte ote sco (String la peblic tnt seth0) public votd soul ine at) pubic dnt 50020) public string deterninscondicton() ( Mf (calculapronedia() >= 13-3) Figura 2.3 Cédigo orientado a la programacién con objetos. Bsigaa Valor lax sibutas prvedos Capitulo 2: Fundamentos de programacién 2.5 Elementos que componen una aplicacion Java Una aplicacién Java se compone de muchos elementos que el compilador tiene que reconocer y, principalmente, diferenciarlos. El desarrollador debe usar todos los elementos posibles para dar solucién a un proceso de negocio, pero siempre respetando las reglas del lenguaje de programa- cién como Java, ‘A continuacién, se muestra el cédigo de una aplicacién basica en Java. private void binCalcularAction?er formed (java.aut. svent -ActionEvent evt) { String trabajador ~ txtTrabajador.getText(); nt horas ~ Integer .parseInt (txtHoras.getText()) ; double pago ~ Double. par seDoubLe(txtPago..getText()) double sueldo - horas * pago; double descuento ~ sueldo * 8.12; double neto ~ sueldo-descuento; Uisueldo.setText( '$ String. format( "%.2f', sueldo)) ; UplDescuento. setText ('$ "+String. fornat("%.2F", descuento) WiNeto.setText( 'S String. format( %.2F*, neto)); Como se puede notar, el cédigo mostrado tiene varios elementos que componen una aplicacién Java. Estos son: = Definicién de método, Permite la definicién de un método o pracedimiento en Java. Dentro de! método se puede especificar un conjunto de sentencias que tienen un abjetivo especifico; por ejemplo, imprimir un resultado o realizar calculos, = Espacios en blanco. Una tabulacién 0 un cambio de linea en el cédigo Java es considerado ‘como un espacio en blanco que no altera la interpretacién del cédigo por parte del compi- lador; sin embargo, se sugiere no exagerar en el contenido con espacios en blanco, a menos que sea necesario, como cuando se definen las sentencias una debajo de la otra mediante cambios de linea (\n), = Llaves. Define 0 enmarca el inicio de un bloque de cédigo en Java, el cual es convertido en una unidad ldgica de cédigo que se puede utilizar en cualquier parte de la aplicacién toméndolo como una sola sentencia, Esto se puede realizar para determinar bloques de cddigo en senten- cias como las repetitivas o selectivas = Comentario de linea. Define una linea de comentario, la cual no serd interpretada por el compilador. = Sentencia. Representa una actividad dentro del proceso que tiene un objetivo especifico como asignar o imprimir un valor. Manuel Torres Remon 2.6 Los comentarios ‘Un comentario es una forma de documentar el cédigo dentro de una aplicacién Java, lo cual conlleva al entendimiento del cédigo frente a otros desarrolladores. Una buena préctica es documentar ciertas partes del cédigo para no olvidar qué accién se esté realizando. Se recomienda colocar un comentario en las siguientes ocasiones: = Alinicio de cada clase, método o antes de una variable = Alinicio de cada fragmento de cédigo, = Alinicio de una estructura selectiva o repetitiva Los comentarios se pueden realizar de tres formas: 3) Comentario de linea. Se usan dos caracteres slash ‘barra oblicua’ (//) antes de iniciar el comen- tario, el cual podria incluir cualquier tipo de cardcter. Algunos casos de referencia son: Contenido del comentario * |..Garacter de inicio de comentario) era forma: String trabajador ~ txtTrabajador.getText(); Segunda forma: String trabajador - txtTrabajador.getText(); js b) Comentario de varias lineas. Se usa la combinacién de un caracter slash y un asterisco para iniciar el bloque de comentarios, y finaliza con un asterisco y un cardcter slash, respetando el mismo orden expuesto. Algunos casos de referencia son: Inicio del comentario maitiple)}~» c Contenido del comentario Fin-del comentario mUtipie )-» I Primera forma: String trabajador ~ txtTrabajador.getText(); Segunda forma: String trabajador - txtTrabajador.getText(); 2! Capitulo 2: Fundamentos de programacién [a ©) Comentario de documentacién. Se usa la combinacién de un cardcter slash y dos asteriscos al inicio, y finaliza con un asterisco y un slash; este tipo de comentario es importante para la docu- ‘mentacién del proyecto en el JavaDoc. Se pueden usar las siguientes referencias de comentarios: = @author. Define el nombre del creador de la aplicacién. = @version. Define la versién del cédigo, normalmente se usa para clases o métodos. = @param. Define un comentario sobre un pardmetro de un método. = @return. Define el valor de salida de un método. = @see. Define una descripcién especialmente cuando un bloque de cédigo comentado se encuentra relacionado con otra clase 0 método. Algunos casos de referencia son: Primera forma: comentario que especifica el objetivo del proyecto y el autor del mismo. ‘Segunda forma: comentario que especifica el contenido de las variables. private void btnCalcularActionPer formed (java.awt.event .ActionEvent evt) { ‘String trabajador ~ txtTrabajador.getText(); int horas ~ Integer.parseInt(txtHoras.getText()) ; double p2go ~ Double.parseDoub Le (txtPago.getText()) Sise necesita visualizar la documentacién JavaDoc de su proyecto en NetBeans, desde el ments principal, se selecciona Run > Generate Javadoc (proyecto). El resultado se mostrard de la siguiente manera: Manuel Torres Remon 2.7 Elementos léxicos en Java Una aplicacién Java contiene un conjunto de elementos que se integran con un fin especifico. Es necesario reconocer dichos elementos para poder tener la administracién correcta de una apli- cacién; entre los principales elementos léxicos se puede mencionar a las palabras reservadas del lenguaje Java, los identificadores, los literales, los operadores y los delimitadores, Operadores Literales YV Cer pubtie elas ProgranaPrincipal { Promedio objP ~ naw Pronedio(): Sb}P setAtumno( "ANGELA TORRES LAZARO"); b}P.setNl (17); ob}P. setN2 (18) } double promedio ~ calculaPromedio() ; String condicion ~ determinaCondicion(promedio) ; Figura 2.4 Elementos léxicos Java, 2.7.1 Palabras reservadas Inicialmente, se debe entender que este conjunto de palabras pertenece a un diccionario interno de Java, el cual no puede ser usado de otra forma que no sea la especificada en su formato original. La lista de palabras reservadas con que cuenta Java es la siguiente: abstract extends protected assert final public boolean finally return break float short byte for static case goto (sin uso) strictfp switch if super catch ‘implements. switch char ‘import synchronized class ‘instanceof this const int ‘throw continue ‘interface throws default Tong transient do native try double void else volatile ‘enum white Capitulo 2: Fundamentos de programacién 1% 2.7.2 \dentificadores Es el nombre que se le asigna a los elementos del cédigo Java, como una clase, un método 0 una variable. Es una secuencia de caracteres que cumple con las siguientes reglas: = Un identificador es nico dentro de un bloque de cédigo como método o a nivel de clase. = Elidentificador debe darle un nombre representative a su valor. = Java distingue entre mayusculas y minusculas. = Normalmente inicia por una letra, un guion bajo 0 el simbolo de délar (S); los demés caracteres del identificador pueden ser la combinacién de letras y niimeros. = No puede ser una palabra que se encuentra en la lista de palabras reservadas por lava A continuacién, se analiza el siguiente problema: Los ingresos mensuales de una universidad particular se recaudan principalmente de las, pensiones de los alumnos. El costo mensual por alumno se determina a partir de los salarios de los docentes, el costo de mantenimiento y otros gastos administrativos de la universidad. Se necesita una aplicacién en Java que permita ingresar los montos aproximados para el afio actual y asi determinar el costo de matricula y la cuota mensual de cada estudiante. = Se determinan los posibles identificadores validos y no validos a partir del caso expuesto: Cen ars Perens Salario dedocentes anual salario salario docentes salario_docentes @salario S_salario 159908 salario$ Costodemantenimiento anual costo costo_nantenimiento costo costo Gastos administratives anuales _gasto gasto administrative gasto_administrativo igasto S_gasto 75980 Gasto Costodematricula matricula costo matricula costo_matricula gnatricula 750 Costo mensual pensién costo pensién costo_pension &pensién 750 Manuel Torres Remon 2.7.3 Literales Un literal en Java representa un valor formado por una secuencia de caracteres vélidos segtin el tipo de datos. Los principales literales en un cédigo Java son: 2). Literal de tipo entero. Se expresa estrictamente como un valor numérico sin valores deci- ‘males. Cuando el valor es positivo, no serd necesario especificarlo por el simbolo + (mas]; por el contrario, si el valor es negativo, obligatoriamente se colocaré el simbolo ~ (menos) Ce Nota 20 Edad “6 Cantidad 150 stock 25000 Pérdida 500 Literal real. Puede expresarse como una parte entera y otra fraccionaria, tanto para valores positivos como negativos Cee ee sueldo_empleado 2500.00 interes_negativo 0.0085 promedio_notas, 1575 )_ Literal cardcter. Se expresa como un valor de un solo cardcter, el cual se referencia por medio de comillas simples. 1G Sirve para especticar una comillasimple. a Sirve para especificar una comilla dable wv Sirve para especificar una barra inclinada, \n Sirve para espectficarun salto de linea. \t Sirve para especticaruna tabulacién 9) Literal cadena. Puede expresarse como un conjunto de caracteres. Peers con Mensaje "Pago registrado correctanente* Condicién *EL estudiante \n no adeuda cuotas* Advertencia ‘\tEsté seguro de salir de la aplicacién \*" ¢} Literal booleano. Se expresa mediante los valores true y false. true Condici6n false Capitulo 2: Fundamentos de programacién WW 2.7.4 Operadores Son simbolos que tienen una tarea especifca al componer una expresin en Java. Este lenguaje cuenta con operadores de asignacion, aritméticos binarios,aritméticos unarios de incremento y decremento, complejos, de comparacién y légicos, ademas del operador de concatenacidn y el ternario. a Operadores de asignacién. Se caracterizan por asignar un valor a una variable; este valor se podria obtener a partir de una expresi6n. a Otra forma de asignacién es mediante el uso de expresiones. Se presentan los siguientes casos: Mensaje ~ ‘Error de ingreso de datos'; Peri eerernnrites double r; > (2+ 27 +15) / 3.0; Finalmente, se puede hacer una asignacién multiple de la siguiente manera: ipte int n,n; n= m= 19; pone b) Operadores aritméticos binarios. Se caracterizan por unir en una expresién dos elementos de programacién. A ee Resp: 25 //Restar dos valores enteros int nl ~ 20; Ant n2 - 19; . Resta Ant resta ~ nl-n: Resp: 10 //Mostrar el producto de dos valores nunéricos . int nl ~ 5; Multiplicacion Ant n2- 9; Ant multiplica - ni * n2; Resp: 45 Manuel Torres Remon a % Division Modulo ide dos valores enteros. int ot - 1; dint n2 - 25 double é ~nl / 92; Resp: © double 91 = 1.95 int 2 ~ 2; double divide = nl / 92; Resp: 0.5 /MMostrar el resto de dividir dos valores int nt - 4; int m2 ~ 3} int resto ~ nl % 12; Resp: 1 ©) Operadores aritméticos unarios. Se caracterizan por tener un solo operando, de modo que destacan la asignacién de signo a un valor, ya sea positivo 0 negativo, y aumentan o disminuyen en uno su valor. Positivo Negativo Prefiia Posfija Prefija Posfija int 2-15 int n - +3; //Resp: n= int 2-1; int n - 2; //Resp: n ~ int i - 9; Resp: 4-1 “//Increnenta i en 1, pero se evalua al valor ‘anterior al increnento. nta 4 en 1, pero se evalua al valor int i - 10; at //Resp: 1-9 //Decrenenta i en 1, pero se evalua al valor sp: 1-9 //oecrementa i en 1 evalua al valor Capitulo 2: Fundamentos de programacién | 1) Operadores complejos. Se caracterizan por aumentar y asignar un nuevo valor a una variable. es Sc i into = 6} int > = 105 Acumuladopositve n= a; nim ay Uskesp: n ~ 26 int n ~ 1960 = eumuadonegatvo IME 2 = 385 //kesp: n - 998 into - 1; Acumuladode — 4RE_9 = 21 productos = Pasa //Resp: double » 2; Acumuladode double b ~ 2; divisones dub : //Resp: ©} Operadores de comparacién. Se caracterizan por efectuar una comparacién ldgica entre dos valores, de modo que el resultado puede ser true o false. Normalmente se usa dentro de una estructura selectiva como if o repetitiva como for. rm a eo 4f (a ~- 10) //evaluer un vator decimal Igualdad 4 (sueldo ~~ 1690.00) numérica —_//evaluar un valor booteano ocarécter 4 (estado ~~ true) //Evaluar si el valor n ya es 10 dentro del ciclo white (n ~~ 16) ar st el valor supera a 10 4f (a> 16) > Mayorque superior a 10 dentro de while (n> 19) = /Evaluar st el valor Mayoro | 1960.06 ‘gualque 4 (sueldo >- 1600.90) 4f (n < 10) / < Menorque —//evaluar while (n < 19) fo es mayor o igual a es inferior a 10 de N es inferior a 19 dentro de rm ea ro //Evaluar si et valor sueldo es menor o igual a Menoro 1990.09 igualque 4 (sueldo <~ 1600.00) //evaluar si el valor de N no es igual 2 10 4# (n 1-16) F Diferente jar si el valor N no Lega al valor 10 en ciclo de //repetictones while (1-19) f) Operadores logicos. Se caracterizan por unir y evaluar expresiones dentro de una estructura condicional o repetitiva. El resultado de la evaluacién puede ser true o false y se basa en los siguientes modelos de tablas: Tabla de verdad para ¥ l6gica pia eer voy v voF F Fo F Aue F Tabla de verdad para 0 légica Tabla de verdad para negacién, : : Af (n>-1 && n<-10) 1 obgee HE Tae pate ser 10 1%/ Af '(n--1) negac sn invierte el resultado a false*/ Capitulo 2: Fundamentos de programacién a 8) Operador de concatenacién. Se caracteriza por unir dos valores cuando estos son de tipo cadena de caracteres. + Concatenar /*Wostrar 1a fecha concatenada a partir de valores como el dia, mes y ao desde variables de tipo String*/ String dia '02'; String mes- 'Febrero'; String ano- '2018"; String fecha ~ diasnes+ano; Resp: 62Febrero2618 Para agregarle espacios entre los valores se tiene que expresar de la siguiente forma String fecha ~ diat' ‘mest "rao; Mostrar la fecha concatenada a partir de valores como el dia numérico, mes de tipo String y ano de tipo int dia-2; String mes- 'Febrero'; ‘int afo-2018; String fecha ~ String.valuc0f(dia) + * ‘+ moste * * +String.valuedf (so) ; Resp: 2 Febrero 2018 h) Operador ternario. Se caracteriza por realizar una actividad dependiendo de una condicién; el trabajo es muy parecido al realizado por la sentencia selectiva if. 2 Condicién /*Mostr y desaprobado dependiendo del promedio de notas */ double promedio - 10; String condicion - "*; condicion>=12.5 2 ‘Aprobado' : ‘Desaprobado'; Precedencia de los operadores Entre los operadores existe un nivel de prioridad que se debe tener en cuenta al momento de crear una expresién. Java los organiza primero por unarios, aritméticos, relacionales, booleanos y, por Ultimo, por los operadores de asignacién. La tabla de precedencias es como sigue: Gieeeos Con COperadores posfiios Operadores prefijosy unarios Aritméticos binarios expr expr trexpr expr expr -expr % 7 | Manuel Torres Remon Aritméticos binarios Comparacion Igualdad y desigualdad Yibogico Olgico Operadores de asignacion 2.7.5 Delimitadores Especifican la separacién entre elementos del cédigo Java, por lo que es importante reco- nocer cuando usar uno u otro delimitador dentro de una aplicacién. Se tiene la siguiente lista de separaciones: a Los paréntesis se pueden implementar para especificar una lista de parémetros y liamadas a un método; asimismo, pueden definir el orden de prioridad de una expre- sion y controlar las conversiones de tipo. 1= Especificacion de pardmetros en un método. Ejemplo: void inprimir(String trabajador, double sucldo) 1= Invocacién deun métoda. Ejemplo: imprimir( ‘Fernanda Torres Lazaro*,4599.00) '= Definici6n de la precedencia en una expresi6n. Ejemplo: double r = (1.0/2) * 2; ‘= Controlando la conversion de tipo. Ejemplo: int n~ 19; float x ~ (float) n; Capitulo 2: Fundamentos de pragramacién s Doowasor PT oescgcsn Las llaves definen un bloque de cédigo dentro de una estructura o definicién de clase; por otro lado, pueden inicializar valores un arteglo. ‘= Asignar valores a una matrz. Ejemplo: int[] edad ~ (45, 23, 11, 9); '= Definicion de bloque de codigo dentro de una clase, método o estructura, Ejemplo: public class Persona [ } public void calculatnporte(){ } String asignaRegalo(){ } Tf (edad>18){ } while (icmi0){ } Los corchetes se usan para definiry establecer valores referenciados a una matriz, Por ejemplo: ‘= Declaracion de arreglo unidimensional y bidimensional String olumnos[); int AC; = Asignar un valor alos arreglos alumos[1] - ‘Fernanda Torres Lazaro e(i)(1] ~ 10; El punto y coma separa todo tipo de sentencia en una aplicacién Java. Este deter. rmina elfin de una actividad para el compilador de Java. //Sentencia de asignacién double sueldo - 15200; //Sentencia repeti dof Jadite(ne19) ; //Separedor de pardnetros en la estructura for. Ejm: For para 40 minero entero for (int i=1;/<-10;5++) Lacoma separa identificadores consecutivos que se pueden realizar en una decla racién de variables o separa pardmetros en un método dentro de una aplicacién Java, Por ejemplo: //oeclarar 5 variables de tipo entero nt _ni,n2,n3,n4,n5; //Especificar 3 pardmetros de tipo entero a un método void calculaPromedio(int nl, int 2, int 3) //éspecificar varios parametros en 1a estructura for. Ejemplo for (int 1-1, int j-@ 5 110, Jo9 5 i++ , J+) El punto separa el nombre de los paquetes de sus clases contenedoras; asimismo, permite invocara atributos o métodos pilblicos de una clase aotra. Por ejemplo: ‘//Inportando el paquet ‘imports javax.swing.*; //Invocando al atributo publico de una clase Persona objPersona ~ new Persona(); ‘objPersona.nonbres ~ ‘Angela Torres L. «| Eee ae Manuel Torres Remon 2.8 Los paquetes y las importaciones Los paquetes son contenedores de clases, interfaces, formularios, imagenes y de conexidn a base de datos, que permiten una administracién mas ordenada en una aplicacién Java, Una de las caracteris- ticas de la programacién orientada a objetos es la encapsulacién y los paquetes ofrecen un mecanismo, de alto nivel. La definicién del paquete a nivel de cédigo se muestra de la siguiente manera: [Nombre del paquete] pClases; [Palabra reserveda para la definicion de paquetes| Figura 2.5 Definicién del paquete pClases. Este cédigo se encuentra siempre antes de la definicién de clases, pues indican que tal definicién se encuentra en dicho paquete. Cuando se necesita invocar a una clase contenida en un determi- nado paquete, se usa la palabra reservada import de la siguiente manera: [Nombre del paquete) p> (Nombre deta clase ‘Amport pClases. producto; [Palabra reservada para la invocacién de paquetes Figura 2.6 invocando a la clase producto dentro del paquete pClases. [Nombre del paquete] [Todas las clases jort pClases.*; [Palabra reservada para la invocacién de paquetes| Figura 2.7 Invocando a todas las clases dentro del paquete pClases, A continuacién, se presenta una lista de clases con sus respectivos paquetes més usados en una aplicacién Java. Capitulo 2: Fundamentos de programacién |" 2.8.1 java.lang, Contiene un conjunto de clases fundamentales pars el lenguaje Java; se caracteriza por su impor- taci6n de forma automatica en una aplicacion. = Boolean m= Integer = System = Byte = Long = Thread = Character = Math = Void = Double = Number = String = Float = Object 2.8.2 Java.awt Contiene un conjunto de clases que permiten disefiar una interfaz grafica de usuario a partir de entornos, graficos, etc. = Composite = Event = Label = LayoutManager = Font = Menu = BorderLayout = Frame = Scrollbar = Paint = Graphics = Dialog = Image 2.8.3 Javax.swing Contiene un conjunto de clases modernas para el disefio de la interfaz grafica del usuario, el cual presenta mejoras con respecto a la AWT. = Action = JApplet = Jlabel = ActionMap = Button = JPanel = Icon @ JCheckBox = STextField @ ListModel = Jframe = JTree = Menuélement = JMenu = Timer 2.8.4 java.io Contiene clases que soportan flujos de entrada y salida en una aplicacién Java. = BufferedReader = Objectinput = FileFilter = Serializable = Bufferedwrite = DataOutputStream = Fllenamefilter Manuel Torres Remon 2.8.5 Java.uti Contiene clases de utilidad para una aplicacién Java como enumeraciones, vectores, fecha, hora, separacién de token, generacin de niimeros aleatorios, propiedades del sistema, etc = Collection = Iterator = Random = Comparator = List m= Stack m= Abstracist m= ArrayList = Timer = Enumeration = Collection = Vector m= AbstractMap = Sortedset = Date m= Eventlistener m= EventObject 2.9 Tipos de datos Representa un conjunto de valores que puede tomar una variable. Al definir un tipo de datos, se define la capacidad que puede tener un valor. Java no cuenta con una variedad de tipos de datos, pero deja la posibilidad de crear sus propios tipos de datos mediante una clase, como es el caso de la clase String. Algunas caracteristicas de los tipos de datos son las siguientes: ® Se tienen ocho tipos de datos primitivos agrupados en valores enteros, reales, caracteres yboleanos. = Un tipo de datos determina el rango que una variable puede tener. 1 Ladefinici6n de una variable en Java no distingue la plataforma de trabajo. = Java es un lenguaje de programacién estrictamente tipado, es decir, toda variable debe ser declarada con su propio tipo de datos. Segtin el tipo de informacién que se almacene dentro de una variable, se asignaré un tipo de datos siguiendo dos tendencias: 2} Tipos de datos primitivos. Estos representan a un solo valor, También son llamados escalares. La forma de identificar un tipo de datos primitivo es que siempre se inicia con una letra minuscula. b) Tipos de datos por referencia, Estos representan a un conjunto de valores, como, por ejemplo, los arreglos, las clases, las interfaces, etc. La forma de identificarlos es que siempre comienzan con una letra maydscula. ‘A continuacién, se muestran los tipos de datos primitivos agrupados por categorias: Enters byte(entero debits) shor (enter de 16s) int (entero de 32 bits) long (enter lagode 64 bts) Reales float (coma flotante de precision simple de 32 bits) double (coma lotante de precision doble de 64 bits) Capitulo 2: Fundamentos de programacién [a Cardcter char (cardcter) Boleanos boolean (\égico) Ahora, se observan las capacidades de los tipos de datos primitivos: Sy Cara byte 28 ar short 32768 $32767 int 2147483648 42147483647 long, 9223372036854775808 +9223372036854775807 float +#3.40282347E+38 +41.40239846E-45, double +£1,79769313486231570E+308 +4.94065645841246544E-324 char \wo000 \UFFFF También se debe considerar el valor por defecto de cada tipo de datos primitivos. Esto podria ayudar en la programacién cuando se declaran variables globales 0 de clase, ya que dicha decla- racién no necesita especificacién de valores iniciales, pues su valor se asigna por defecto. He agul una lista de dichos valores: byte ° short o int ° long o. float oat double 00d char "\uo00" boolean False 2.10 Las variables Una variable es una posicién de memoria destinada a almacenar cierta informacién expresada en valores; dicho valor debe ser del mismo tipo que la variable. Asimismo, toda variable tiene la capacidad de ser modificable durante el ciclo de una aplicacién Java. Java es considerado como un lenguaje de programacién altamente tipado, es decir, todo lo que se use en la programacién debe ser declarado usando identificadores. Al declarar variables, se debe tener en cuenta lo siguiente: = Laasignaci6n de un nombre depende de lo que se va a almacenar; por ejemplo, sise necesita almacenar un salario bruto, entonces se debe declarar Ia variable como salarioBruto. 1= Sila variable declarada es totalmente en mayuisculas, asi deberd usarse dentro de la aplicacién; esto se debe a la sensibilidad de las mayuisculas y mindsculas en Java, Se Manuel Torres Remon mal = Toda variable se compone de un nombre identifcatvo, un tipo de datos y un valor que contendra 1 Eltiempo de vida de una variable dependers del uso que tenga dentro de una clase o método; 8 decir, al finalizar un método, también finaliza la variable, Formato: p--(Nombre de variable ‘ Identificador; fine float ‘double lboolean loyte Ishort long. \char Normaimente la declaracién de variables ocurre en las siguientes ocasiones: a) Antes de asignar un valor. Cuando se necesita asignar un valor a una variable, esta debe ser declarada una linea antes de su uso o hacerlo directamente. Obsérvese el siguiente ejemplo: Espacio de memoria double salario; ‘Salario salario ~ 2500; 2500 ‘Asignado Se inicia por declarar la variable salario de tipo double por tratarse de un monto de dinero, luego se le asigna el valor 2500. Al declarar la variable, la memoria separa un espacio para un determinado valor; y cuando se le asigna un valor, la memoria llena dicho espacio. Si en algun momento de la aplicacién se necesita dicho valor, este sera descargado desde la memoria. b) Dentro de una clase. La variable declarada dentro de la definicién de clase se considera como, elemento o atributo de clase, por lo tanto, se puede usar dentro de cualquier método de la clase. public class enpresa { double salario; en void asignationto() { salario ~ 2509; Asignado } } ©) Dentro de un método. La variable declarada dentro de un método solo sera accesible dentro de él public class empresa { double calculabescuento() { double descuento; < Variable del método descuento ~ salario * 0.12; return descuento; + } Capitulo 2: Fundamentos de programacién [7s 2.10.1 Inicializacién de variables Cuando las variables son declaradas dentro de un método, o son usadas como contadores 0 acumu- ladores, deben ser inicializadas con un valor segiin su tipo de datos. Hay que considerar que el valor de inicializacién debe ser el mismo que se deciara. EI formato de inicializacién es como sigue: Tipo de datos Ant meses - 125 Variable -Valorinicial tra forma de inicializar las variables es declarar la variable y luego asignarle un valor, por ejemplo: Aint meses; meses12; Y, por otro lado, sila variable declarada es parte de un proceso condicional, es obligatorio inicia- lizarlo, por ejemplo: double descuento ~ 0; 4f (monto > 1700) descuento - 8.12*monto; 2.10.2 Conversiones de tipo Cuando se efectiia dentro del cédigo una asignacién de variable, se debe tener en cuenta que el valor cumpla con el rango especificado por el tipo de datos; esto se debe a una evaluacién de compatibilidad que realiza el compilador. Existen dos tipos de conversiones: 1, Conversién automatica Esta se realiza cuando una variable de un determinado tipo se asigna a otro tipo con la restric- cién de que ambos tipos sean compatibles, siempre y cuando no exista pérdida de informacion © que el tipo de datos destino sea mas grande que el origen. Se analiza el siguiente caso: Ant puntos = 2; double pronedio ~ 12.50; promedio - pronedio + puntos; La variable puntos se declara como tipo entero; mientras que promedio, como tipo double. Finalmente, promedio acumula el valor puntos en la variable promedio, haciendo una conversién automética de la variable puntos a tipo double para que sean compatibles en la acumulacién. al i Manuel Torres Remon Conversion explicita Esta se realiza cuando un valor de tipo de datos de mayor capacidad es convertido a uno de infe- rior capacidad. A esto se le llama estrechamiento, debido a que se estrecha explicitamente el valor para que pueda caber en el tipo de datos destinado. El formato de conversion es como sigue: variable - (tipe) valor; Tipo de datos a convertir La variable tiene un tipo de datos especifico, mientras que el valor tiene otro tipo no compa: tible; entre paréntesis se especifica el tipo de datos que sea compatible al tipo de la variable para realizar una conversién correcta. Por ejemplo: ‘int on 10 byte (byte); La variable n de tipo entero tiene como valor asignado 100, y se necesita convertirlo al tipo byte, el cual es de menor capacidad; es aqui donde se realiza la conversién usando la técnica casting sobre el tipo de datos de la variable n. Cuando se realizan las conversiones, se debe conocer exactamente la capacidad de cada uno de ellos, ya que todos los tipos de datos se pueden convertir, pero no se garantiza una conver- sin segura entre ellas. Por ejemplo, sie tiene una variable de tipo integer (32 bits) y se desea convertirlo al tipo byte {8 bits), se perderén 24 bits en plena conversién. Esto podria ocasionar u na pérdida importante al valor original entero. La siguiente tabla muestra la norma que se necesita para las conver- siones sin pérdida de informacion. Tabla 2.3 Norma para las conversiones sin pérdida de informacién Tipo de datos origen Sere Byte double, foat, long, int, char, short Short double, float, ong, int char double, float, ong, int Int double, float, long long double, fioat float double short 5-19; double d - (double) s; al i Manuel Torres Remon Conversion explicita Esta se realiza cuando un valor de tipo de datos de mayor capacidad es convertido a uno de infe- rior capacidad. A esto se le llama estrechamiento, debido a que se estrecha explicitamente el valor para que pueda caber en el tipo de datos destinado. El formato de conversion es como sigue: variable - (tipe) valor; Tipo de datos a convertir La variable tiene un tipo de datos especifico, mientras que el valor tiene otro tipo no compa: tible; entre paréntesis se especifica el tipo de datos que sea compatible al tipo de la variable para realizar una conversién correcta. Por ejemplo: ‘int on 10 byte (byte); La variable n de tipo entero tiene como valor asignado 100, y se necesita convertirlo al tipo byte, el cual es de menor capacidad; es aqui donde se realiza la conversién usando la técnica casting sobre el tipo de datos de la variable n. Cuando se realizan las conversiones, se debe conocer exactamente la capacidad de cada uno de ellos, ya que todos los tipos de datos se pueden convertir, pero no se garantiza una conver- sin segura entre ellas. Por ejemplo, sie tiene una variable de tipo integer (32 bits) y se desea convertirlo al tipo byte {8 bits), se perderén 24 bits en plena conversién. Esto podria ocasionar u na pérdida importante al valor original entero. La siguiente tabla muestra la norma que se necesita para las conver- siones sin pérdida de informacion. Tabla 2.3 Norma para las conversiones sin pérdida de informacién Tipo de datos origen Sere Byte double, foat, long, int, char, short Short double, float, ong, int char double, float, ong, int Int double, float, long long double, fioat float double short 5-19; double d - (double) s; Capitulo 2: Fundamentos de programacién [aw Un ejemplo de pérdida de informacién en la conversién se puede ver en el siguiente caso: double ‘int pron romedio ~ 19.50; = (ant) promedios El resultado de imprimir la variable prom es el valor 10 y pierde todo valor fraccionario, ya que ha sido casteado a entero bajando la precision de su valor. 2.11 La clase Integer Es la clase mas usada ya que posee métodos que permiten convertir un valor de tipo int en otra como long, float o double, La clase Integer envuelve un valor de tip objeto contiene u MAX_VALUE MIN_VALUE parseint(String s) tostring() it en un objeto; este in campo simple cuyo tipo de datos es int. Tabla 2.4 Principales métodos que se usarén en las aplicaciones. Dewelve el valor maximo que puede tener un tipo int. Ejemplo: nt n - Integer. MAX_VALUE; Flresuitado de imprimir el valorn es 2147483647 Dewelve el minimo valor que puede tener un tipo int. jemplo: nt n ~ Integer.MIN_VALUE; Elresuitado de imprimirel valorn e5-2147483648 Devuelvee valor de tipoint desde un valor detipo String, Hay que tener en cuenta que elvalr tiene que sernumérico;caso contrario, genera un error de excepcin lamado NumberFormatException. Ejemplo: String 9 ~ "100"; nt x ~ Integer.parseIat(n); Elresultado de imprimirla variable xes 100, pero como tipo entero; esto quiere decir «que e puede usar dicho valor en una expresion como valor numérico entero. Permite converticun niimero entero en un objeto de tipo String. ejemplo: ‘integer n - 109; String x-9.tostring(); BoptionPane. showMessageDialog(nml1, ‘El Valor de Nes: *n. toString); También e puede epresentar: Integer n ~ 109; BoptionPane.shonMessageDialog(mml, ‘El Valor de N es: "+ toString) Elresultado de imprimirla variable x es 100, como valor de tipo String, Permite convertirun nimero entero en un objeto de tipo String, usando al nimero entero como parametro. jemple ‘int n-Integer .NAX_VALUE; OptionPane. showllessageDialog(mull, ‘El Valor ce N es: ‘aInteger. toString(n)); Manuel Torres Remon 2.12 La clase String Java posee gran capacidad para el manejo de cadenas dentro de sus clases String y StringBuffer. Un objeto String representa una cadena alfanumérica de un valor constante que no puede ser cambiada después de haber sido creada. Un objeto StringBuffer representa una cadena cuyo tamafio puede variar. Los String son objetos constantes y, por lo tanto, muy baratos para el sistema. La mayoria de las funciones relacionadas con cadenas esperan valores String como argumentos y devuelven valores String, Tabla 2.5 Principales métodos de ia clase String. co Ser charat ‘compareTo Retorna el cardcter de una posicién especifica de a cadena. Se debe tener en cuenta {que cada carécter es almacenado en una posicién determinada del arreglo unidimen- sional y que los espacios en blanco también ocupan un espacio. Por ejemplo, sise tiene la siguiente declaracién: ‘String cadena - ‘Programacién Java"; fe[rlole|rlal|mlalclilé|n dlalvia fotatatatetstelrlel [ola] [af fas ue yssenecesita imprimir los caracteres ubicados en la posicién 1, 4y 13; el cédigo sera ‘JoptionPane. showMessageDialog(mull, 'Posicion 1: ‘cadena. charAt(1)); JoptionPane. showMessageDialog(null, *Posicion 4: trcadena charAt(4)); J0ptionPane. showMessageDialog(mmll, "Pos. 13: *rcadena chart (13); ‘Ahora bien, sise quisiera imprimir el reverso dela cadena, seria de la siguiente forma: for(int i-cadena. Length()~ JOptionPane, showlessagedialog (mul, cadena.charat 4)) 5, Primero se debe determinarla cantidad de caracteres que tiene la cadena; para ello se usa el método length() y se implementa la estructura for para que recorra en forma 20) JOptionPane.showMessageDialog(wull, 'CaLificacién no Valida*, ‘Control de notas*, JOptionPane.ERROR_MESSAGE) ; Ejemplo 4, En el siguiente cdigo se muestran los datos de un empleado en un solo mensaje, haciendo un cambio de linea por cada dato, String cliente 'Fernanda Torres L. String ONI- "47521522"; double sucldo-2520.75; JOptionPane, showtlessageDialog (mull, ‘Cliente: "+cliente+"\n* YIDNE: ‘"+DNI+"\n" + 'Sueldo: "+sueldo, ‘Control de Personal’, JOptionPane, INFORMATION._MESSAGE) ; Capitulo 2: Fundamentos de programacién ar) Este método permite mostrar un cuadro de didlogo, en el eva se padrd tener un ‘mejor control dels botones presentados, Cuenta con los siguientes parametros: OptionPane. showopt ionDialog (Destino, ‘Mensaje’, "Titulo", Tipo0pcion, Tipolensaje,Tcono, Opciones; valorinicial) 1» Destino, Aqui se asigna el contenedor del cuadro de dislogo; en forma predeterminada sele asigna null. Mensaje. Esl texto que isualzaréel usuario. 1 Titulo. Es l texto quese mostraré como titulo de la ventana de dialogo. ‘= TipoOpeion. Aqui se indica que tipo de opcionvisualizaré el usuario, como, por ejemplo, DEFAULTOPTION, YES_NO_ OPTION, YES.NO_CANCEL_OPTION OK _CANCEL_OPTION. 11 TipoMensaje. Aqui se indica qué tipo de mensaje se mostrar al usuario; desde aqui se determina que tipo deicono esta asignad al mensaje, como, porejemplo, ERROR_MESSAGE, INFORMATION. MESSAGE, WARNING_MESSAGE, QUESTION_MESSAGE 0 PLAIN_MESSAGE. 1» eono. Aqui se determina el icono a mostrar en et cuadro de didlogo; el valor predeterminado es null ‘= Opciones. El valor predeterminado es null el cual permite defini los textos delos botones segin el TipoOpcion. En otros casos se puede implementar un showOptionDialog Soe ‘= valorinicial.Eslaseleccidn por defecto, la cual define que uno de os objetos del cuadro de dalogo tieneel foco activo. Elmétodo showOptionDialog devuelve un valor entero que determinard qué tipo debot6n ha seleccionado el usuario. Asi, por ejemplo,el bot6n SI tiene el valor, el bot6n No tiene el valor 1; sino se selecciona ningin bot6n, elvalores-1. Ejemplo 2. Mostrar un mensaje de salida al usuario con valores predetermi- rnados, dicho mensaje solicitard al usuario la salida segura del sistema. En caso se seleccione SI, se tendra que salir dea aplicacién; en caso contrario, se seguir enlaaplicacién ‘int r-JOptionPane.showOptionDialog(this, ‘Esta seguro de salir...?', ‘Sistema de Ventas, JOptionPane. YES_NO_ OPTION, JOpt ionPane. QUESTION MESSAGE mWUL wwLL,auLL) ; (r--0) System.exit (0); 0 | eee Manuel Tores Remon showOptionDialog showInputDialog. Ejemplo2. Mostrar un mensaje de salidaal usuario con valores personalizadosen los botones y predeterminando al botén de salida. int r-JOptionPane. shovOptionDialog(this, "Esta seguro de salir...?', ‘Sistema de Ventas’, OptionPane.VES_NO_OPTION, JOptionPane.. QUESTION MESSAGE mulL,new Object{ } { 'si Salgo', ‘no salgo'}, ‘si salgo'); Af (r=-0) systen.exit(@); Este método soicita un valor de tipo cadena al usuario,este dato debe ser captu- rado mediante una variable oatributo.Presenta el siguiente formato: optionPane. showlnputDialog(Object mensaje) Ejemplo 2. Mostrar un cvadro dedlalogo quesolciteelnombrede un determinado ‘empleado deforma basica String nonbre - J0ptionPene. showInputDialog( "Ingrese su nombre"); JOptionPane. showtlessageDialog(mull, ‘El nombre ingresado es: *enombre) ; = a 6 == = El método show!nputDialog permite el ingreso de un valor;en este caso, el nombre es de tipo String, asi que no necesita conversi6n. La siguiente ventana de didlogo ‘muestra el valor capturado a partir del didlogo anterior. Capitulo 2: Fundamentos de programacién [Tor Ejemplo 2. Mostrar un cuadro de didlogo que soliciteelingreso de una categoria ‘al empleado, mostrando de forma predeterminada el valor Operario. String categoria - J0ptionPane. showInputDialog( "Ingrese su categoria’, "Operario"); OptionPane, showessageDialog (ml, ‘La categoria ingresada es: categoria); Ejemplo 3. Mostrarun cuadro de idlogo que permita seleccionara categoria del ‘empieado por medio de un cuadro combinado. String categoriaSeleccionada ~ String. valueOf(J0ptionPane. ‘showInputDialog(nult, "Seleccione Categoria: 1, 'Sistena de Control de Personal ‘JOpttonPane. QUESTION. MESSAGE, mull, new Objectl] {'Operario', ‘administrative’, 'Servicio'}, ‘administrativo")); JOptionPane.showessageDialog (ml, ‘La categoria seleccionada es: '+ categoriaSeleccionada) ; showInputDialog, =I Manuel Torres Remon 2.14 La clase Math Pertenece a java.lang.Math, el cual contiene métodos estaticos que permiten realizar célculos sobre funciones matematicas en una aplicacién Java. Esta clase es de visibilidad publica, es decir, se puede tener acceso a todos sus métodos, en cualquier parte de la aplicacidn. Se consideran los siguientes aspectos: = Los métodos por ser estéticos no necesitan inicializacién de valores. = Los métodos seno (sin), coseno (cos) y tangente (tan) trabajan con angulos radianes; por tanto, sison usados, tendrén que ser convertidos previamente. = Un logaritmo neperiano (Ln) tiene la siguiente expresin en Java: Math.log(x). m= Una exponenciacién neperiana expresada matematicamente como e* tiene la siguiente expre- sién en Java: Math.exp(x), donde e tiene un valor de 2.7182. 2.14.1 Métodos que representan a Pl y aE La clase Math hace referencia, especialmente, a estas dos constantes mas usadas en funciones matematicas, asumiendo una precisién de 15 decimales. Es un método que imprime el valor PI predeterminado en la clase Math de Java. double PI-Hath.Pr; OptionPane. showlessageDialog(ml, EL Valor de PI es: '+PI); PI Es unmétodo queimprimeelvalore predeterminado ena clase Math de Java double e-!9%h. £5 SOptionPane. showessageDialog(nul, ‘El Valor de E es: +e); cate - e e vr ne on 2 ieaseesus 108 Capitulo 2: Fundamentos de programacién 2.14.2 Métodos de conversion entre grados y radianes Se hard referencia ala conversién entre grados y radianes. De grados a double grados ~ 90; jouble radianes ~ Hath. toRadians (grados) ; radianes OptionPane.showtlessageDialog(mill, ‘De Grados a Radianes es: * + radianes); Deradianesa double radianes - 1.5797963267948956; acts double grados - Math. toDegrees(radianes) ; ‘OptionPane.showtessageDialog(mlL, ‘De Radianes a Grados es: grades) ; 2.14.3 Métodos de la clase Math Contiene un conjunto de clases que permiten gestionar los valores numéricos de una aplicacién. Se exponen, a continuacién, una lista de clases implementadas de forma predeterminada: Determina el valor absoluto de un nimero. Por ejemplo, el siguiente cédigo determina el valor absoluto del valor 10 int n - -19; JOptionPane.showessageDialog(m, ‘El valor absoluto de Nes: * + Nath.abs(n)); abs ae Q ~—-.. (ocoees] Manuel Torres Remon Ea Permite redondear un valor decimal al entero mas pequerio,no menorasi mismo. Por ejemplo, cel siguiente cédigo determina el valor redondeado de 10.254. double d ~ 10.254; JOptionPane.showMessageDialog(nult, ‘El valor redondeado d es: * + Math.ceil(d)) 5 ‘Asimismo, se probaré con un valor negativo 10.95: double d ~ -19.95; ‘OptionPane. shonMessageDialog(nult, Math. ceil(d)) 3 *EL valor redondeado d es: * + Permite determinar el seno triganomeétrico de un Angulo expresado.en radianes. Por ejemplo, cl siguiente cédigo permite determinarel seno de 45°. double grados ~ 455 double radianes - Math. toRadians(grados) ; JOptionPane.showMessageDialog(mult, ‘El Seno de ‘+grados +* es: * + Nath. sin(radianes)) ; Mensae ie @itaerea Acoptar Capitulo 2: Fundamentos de programacién 105 Pst owssgn floor Permite determinar el caseno trigonométrico de un angulo expresado en radianes, Por ejemplo, el siguiente cddigo permite calcular el coseno de 45" jouble grados ~ 455 double radianes - Math. toRadians (grades) ; JOptionPane.showMessageDialog(mull, 'El Coseno de 'tgrados +' es: + Math.cos(radianes)) ; Mensa es ‘Aceptar Permite redondear un valor decimal al entero mas grande no mayor a si mismo. Por ejemplo, cl siguiente codigo permite determinar el valor redondeado de9.2. double 9-9.2; OptionPane.showlessageDialog(mull, ‘EL Valor de Nes: ' + Math.floor(n)); double --10.5; OptionPane.showessageDialog(mull, ‘El Valor de Nes: ' + Math.floor(n)); Mensaje @iccaan Permite determinar el maximo valor entre dos valores numéricos. Por ejemplo, el siguiente codigo determina el mayor valorentre 10y 15. int 2-19; int b-15; OptionPane.showMessageDialog(ml, ‘El mayor valor es: * + Math.max(a,b)); a =: Manuel Torres Remon Permite determinar el minimo valor entre dos valores numéricos. Por ejempl, el siguiente cédigo determina el menor valor entre 10 15, int 2-19; Ant b-15; OptionPane.showMessageDialog(mult, ‘El menor valor es: ' + Math.min(a,b))5 Permite determinar la tangente trigonométrica de un dngulo expresado en radianes, Por ‘ejemplo, el siguiente codigo determina la tangente de 45%, double grados ~ 45; double radianes ~ Math, toRadians(grados) ; OptionPane.showMessageDialog(mull, ‘La tangente de ‘+grados +" es: * + Math. tan(radianes)); Mensaje is == (ewer Permitedeterminar la potencian de un valor numérico entero, Por ejemplo, el siguiente cédigo determina la potencia 3 del valor 2. Ant base-2; nt potencia-3; SOptionPane.showMessageDialog(mull, ‘El resultado e Nath.pou(base,potencia)) ; ‘Asimismo, se probaré con laraizcubica de8: int base-8; SOptionPane.showessageDialog(mult, ‘El resultado es: Math. pom(base, (1/3.9))); Capitulo 2: Fundamentos de programacién [07 do. Ca Permite expresar un nlimero real on un numero especifico de decimales aplicando el exceso y defecto matematico. Por ejemplo, el siguiente cédigo aplica el redondeo a cero decimales delvalor2.55, double d=2.55; ptionPane.showessageDialog(null, ‘el valor de D es: ‘+ Math.round(d)) round Permite devolver un nimero aleatorio entre Oy 1 excluyendo a estos valores. Por ejemplo, e siguiente codigo determina un niimero aleatorio cualquiera double d-Hath.randon() ; OptionPane. shouessageDialog(mull, ‘EL valor de D es: ‘+d); random Permite devolver la riz cuadrada de un nmero entero. Por ejemplo, el siguiente cédigopermite ddeterminar a riz cuadrada del valor2 double ¢-2; OptionPane. shouessageDialog(mull, ‘La raiz cuadrada de ‘sd+"es: * + Math. sqrt(d) ); sart Mensne 1D seiercncnccsrcmees [ewes] 708 | Manuel Torres Remon CASO DESARROLLADO 1: Modelo de cotizacion bancaria (programaci6n estructurada) Elérea de préstamos de un banco necesita una aplicacién que permita simular una cotizacién de préstamo bancarioy que, através de los datos de la cotizacién, pueda mostrar a cuanto ascenderd la cuota nical que debe depositar el iente yla cuota mensual a pagar segin el plazo en meses seleccionado por el cliente. Consideracione: = Desarrolle la aplicacién usando la metodologia estructurada. = Use el siguiente disefio de interfaz grafica: Use los tipos de moneda, soles y délares, en un cuadro combinado, = Enun cuadro combinado, use como tipo de bien: un automévil, una vivienda y otros. = Ingrese un nimero entero que represente el plazo en meses a solicitud del cliente. = Ingrese el valor del bien para realizar las célculos. m= Como regla de negocio se tiene que, para calcular la cuota inicial, aplicar el 20% sobre el valor del bien. Asimismo, se debe aplicar una tasa de interés del 12% sobre el monto del riesgo neto del préstamo, = El monto del riesgo neto resulta de la diferencia entre el valor del bien y la cuota inicial m= La cuota mensual resulta de afiadir el 12% sobre el riesgo neto y dividirlo entre la cantidad especificada en el plazo en meses. Solucion: 1, Seleccione la ruta File > New > Java Project. Asigne el siguiente nombre al proyecto: pjMetodologia, Agregue el paquete pFormularios. ‘Agregue un JFrame dentro del paquete pFormularios y asignele el nombre frmEstructurado. Capitulo 2: Fundamentos de programacién [7 5. Disefie la siguiente interfaz y asigne nombres a los controles como se muestra en la imagen: -([binresultados | 6. Agregue cédigo al botén Ver resultados de la simulacién; para ello, desde la vista de disefio, haga doble clic sobre dicho botén. package pformularioss public class frnfstructurado extends javax.swing.JFrane { public frnéstructurado() { “initComponents() ; chotloneda. addi tem "SOLES "); cbotloneda. addi tem *DOLARES *) cboBien. addTtom( ‘AutonoviL*) ; cboBien.addItem( WVivienda*); cboBien.additem( ‘Otro*); 3 private void binkesultadosActionPer formed (java.aut.event.Actionévent evt) { String moneda - String. valueOF (cboMoneda. getSelectedItem()) ; String simbolo ~ moneda.equals( ‘SOLES ")?"S/": '$'; String bien - String. value0f (cboBien. getSelectedItem()) ; nt meses ~ Integer .parselnt (txtHeses. getText()) double tasa - Double. parseDouble(IbLTasa.getText()) ; double inicial ~ Double. parseDouble(LblInicial.getText()) ; double valor ~ Double. parseDouble(txtvalor.getText()); double cuctalnicial - valor * 0.2; double riesgo - valor-cuotaInicial; double cuotaMensual = (riesgo * 1.12) / meses EES Manuel Torres Remon Upicuotalnicial.setText(sinbolorstring. fornat( %,2F *,cuotalnicial)); UL Riesgo.setText(sinbolo+String. format (%.2f*,riesgo)) TicuotaMensual.setText(sinbolorstring. format( %.2F ',cuotaMensual) ); 7. Bjecute la aplicacién. Una vez colocado el cédigo en los botones, presione la combinacién de teclas + . CASO DESARROLLADO 2: Modelo de cotizacion bancaria (programaci6n modular) El drea de préstamos de un banco necesita una aplicacion que permita simular una cotizacién de préstamo bancario y que, a través de los datos de la cotizacion, pueda mostrar a cuanto ascendera la cuota inicial que debe depositar el cliente y la cuota mensual a pagar segtin el plazo en meses seleccionado por el cliente, Consideraciones: = Laaplicaci6n sera desarrollada usando la metodologia modular. = Use el siguiente disefio de interfaz grafica: ‘CUOTAMENSUAL $1493.33 = Use los tipos de moneda, soles y délares, en un cuadro combinado, = En.un cuadro combinado, use como tipo de bien: un automéuil, una vivienda y otros. Capitulo 2: Fundamentos de programacién | TT = Ingrese un niimero entero que represente el plazo en meses a solicitud del cliente. = Ingrese el valor del bien para realizar los célculos. = Como regla de negocio se tiene que, para calcular la cuota inicial,aplicar el 20% sobre el valor del bien. ‘Asimismo, se debe aplicar Ia tasa de interés del 12% sobre el monto del riesgo neto del préstamo. = El monto del riesgo neto resulta de la diferencia entre el valor del bien y la cuota inicial = La cuota mensual resulta de afiadir el 12% sobre el riesgo neto y dividirlo entre la cantidad especificada en el plazo en meses. Soluci6n: 1. Seleccione la ruta File > New > Java Project 2. Asigne el siguiente nombre al proyecto: pjMetodologia 3, Agregue el paquete pFormularios, 4, Agregue un JFrame dentro del paquete pFormularios y asignele el nombre frmModular. 5. Disefe la siguiente interfaz y asigne nombres a los controles como se muestra en la imagen: cn =< (“tors a ‘OTA MICA. $2000.00 RESCONETO $8000.00 i vor mesa. ; 1493.38 TeicuotaMensual Manuel Torres Remon 6. Agregue cédigo al botén Ver resultados de la simulacién; para ello, desde la vista de disefio, haga doble clic sobre dicho boten. package pFormularios; frnitodular witends javax.swing.JFrane { public Frnviodutar() = ‘ni tConponent’s() 5 public clas LlenaTipoMoneda() LenaTipoBien(); void LlenaTipoMoneda(){ ccboMoneda. addT tem( *SOLES") ccboMoneda. addTtem( *DOLARES'*) ; ¥ void LlenaTipoBien(){ cboBien .addTtem( thutomovil) 5 cboBien-addltem( 'Vivienda " eboBien addTten( Otro") ; , private void btnResul tadosAct ionPer formed( java. awt event .Actionévent evt) { String moneda ~ getMoneda() ; String bien ~ getBien(); Ant meses ~ getMeses(); double tasa ~ getTasa(); double inicial - getInicial(); double valor ~ getValor(); double cuotalnicial - calculacuotalnicial (valor) ; double riesgo ~ calculaRiesgo(valor, cuotalnicial); double cuotatensual ~ calculacuotaMensual (riesgo, meses); Uicuotalnicial. setText (moneda+String. format( %.2F*,custalnicial)); LbtRiesgo. setText (noneda+String. format ('.2f',riesgo)); Tblcuotalensual..setText (moneda+String. format %.2F*,cuotaMensual) ); } String getMoneda() { String moneda - String. volueO (cbotoneda. getSelectedItem()); return moneda equals( *SOLES')2'5/":'5%5 } String getBien(){ return String. value0f (cboBien.getSelectedTten()); } int getHeses() { return Integer.parsernt (txtNeses.getText())5 } Capitulo 2: Fundamentos de programacién 118 double gettasa(){ return Double. parsedouble(Lb1Tasa.gerText()); } double gertnicial({ return Double. parsedouble(IbUinicial.getText()); } double gewator()( return Double. parsedouble(txtValor.getText())5 ) double calculacuotainicial (double valor) { return valor * 0.2; } double calculaiiesgo(double volor, double cuotain‘cial) { return valor-cuotalnicial; } double calculacuotallensual double riesgo, int meses) { return (riesgo * 1.12) / meses; 3 7. Ejecute la aplicacién. Una vez colocado el cédigo en los botones, presione la combinacién de teclas + , 77a Menvel ores Remon CASO DESARROLLADO 3: Modelo de cotizacién bancaria (programacion orientada a objetos) El area de préstamos de un banco necesita una aplicacién que permita simular una cotizacién de préstamo bancario y que, a través de los datos de la cotizacién, pueda mostrar a cuanto ascendera la cuota inicial que debe depositar el cliente y la cuota mensual a pagar segiin el plazo en meses seleccionado por el cliente. Consideraciones: = Laaplicacién sera desarrollada usando la metodologia orientada a objetos = Use el siguiente disefio de interfaz grafica: ‘UsADEDTERES 1200 a vOTA Doc $5i00.00 sconeTo $2000.00 '= Use los tipos de moneda, soles y délares, en un cuadro combinado, = Enun cuadro combinado, use como tipo de bien: un automévil, una vivienda y otros. = Ingrese un nimero entero que represente el plazo en meses a solicitud del cliente. = Ingrese el valor del bien para realizar los calculos. = Como regla de negocio se tiene que, para calcular la cuota inicial, aplicar el 20% sobre el valor del bien. Asimismo, se debe aplicar la tasa de interés del 12% sobre el monto del riesgo neto del préstamo, = El monto riesgo neto resulta de la diferencia entre el valor del bien y la cuota inicial. = La cuota mensual resulta de afiadir el 12% sobre el riesgo neto y dividirlo entre la cantidad especificada en el plazo en meses. 77a Menvel ores Remon CASO DESARROLLADO 3: Modelo de cotizacién bancaria (programacion orientada a objetos) El area de préstamos de un banco necesita una aplicacién que permita simular una cotizacién de préstamo bancario y que, a través de los datos de la cotizacién, pueda mostrar a cuanto ascendera la cuota inicial que debe depositar el cliente y la cuota mensual a pagar segiin el plazo en meses seleccionado por el cliente. Consideraciones: = Laaplicacién sera desarrollada usando la metodologia orientada a objetos = Use el siguiente disefio de interfaz grafica: ‘UsADEDTERES 1200 a vOTA Doc $5i00.00 sconeTo $2000.00 '= Use los tipos de moneda, soles y délares, en un cuadro combinado, = Enun cuadro combinado, use como tipo de bien: un automévil, una vivienda y otros. = Ingrese un nimero entero que represente el plazo en meses a solicitud del cliente. = Ingrese el valor del bien para realizar los calculos. = Como regla de negocio se tiene que, para calcular la cuota inicial, aplicar el 20% sobre el valor del bien. Asimismo, se debe aplicar la tasa de interés del 12% sobre el monto del riesgo neto del préstamo, = El monto riesgo neto resulta de la diferencia entre el valor del bien y la cuota inicial. = La cuota mensual resulta de afiadir el 12% sobre el riesgo neto y dividirlo entre la cantidad especificada en el plazo en meses. Capitulo 2: Fundamentos de programacién [8 Soluci6n: 1, Seleccione la ruta File > New > Java Project. 2. Asigne el siguiente nombre al Proyecto: pjMetodologia 3, Agregue los paquetes pFormularios y pClases. 4 Agregue un JFrame dentro del paquete pFormularios y asignele el nombre frmOrientadoObjetos. 5, Agregue una clase llamada Préstamo en el paquete pClases. 6. Disefie la siguiente interfaz y asigne nombres a los controles como se muestra en la imagen: {(btnResultados ) TbicuotaMensual 7. Enla clase Préstamo, coloque el siguiente cédigo: package pClases; public class Prestano { private String moneda; private String bien; private int meses; private double t2:a; private double inicial; private double valor; public string gevvioneda() { return moneda .equals( 'SOLES")?'5/": } Public void sotiioneda(String moneda) { ‘this.moneda ~ moneda; + Manuel Torres Remon public string return bien; tBien() 3 public void setBien(String bien) { this.bien ~ bien; } public int getHleses() { return meses; } public void setHleses(int meses) [ ‘this.meses ~ meses; 3 public double getTosa() ¢ return tasa; 3 public void setTasa(double tase) { ‘this.tasa - tasa; 3 public double getinicial() { return inicial; 3 public void setInicial (double inicial) this inicial ~ inicial; 3 public double getValor() { return valor; } public void setValor (double valor) { ‘this. valor ~ valor; , public double calculacuctainicial(){ return velor * 9.2; 3 public double calculaziesgo(){ return valor-calculaCuotalnicial(); 3 public double calcul aCuotaNensual(){ return (calculaRiesgo() * 1.12) / meses; y Capitulo 2: Fundamentos de programacién iW 8. Agregue cédigo al botén Ver resultados de la simulacién; para ello, desde la vista de disefio, haga doble clic sobre dicho botén. package pFormilarios; ‘import pClases.Prestamo; public class frnOrientadadbjetos extends javax.swing.JFrame { public frnorientadadbjetos() { ‘initComponents() 5 UenaT ipotoneda() ; UenaripoBiend) ; void LenaTipotoneda()£ cbotoneda.addT tem( "SOLES "); cbotloneda. addT tem( ‘DOLARES") ; 3 void LlenaTipobien(){ cboBien.addItem( ‘Autonovil*) ; cboBien.addItem( Vivienda*) ; cboBien.additem( ‘Otro*); 3 private void binkesultadosActiowPer formed (java. nt.event.Actionvent evt) { Préstamo objP - new Préstano() ; objP. setNoneda (String. valueOF (cboMoneda. getSelectedItem())) ‘objPsetaien (String. valueof (cboBien.getSelectedItem()))} objP -setNeses (Integer .parseInt (txtMeses.getText())) 5 ob}. set Tasa (Double. parseDouble(LblTasa.getText())) } objP -setInicial (Double. parseDouble(IbLInicial.getText())); objP-setvalor (Double. parseDouble(txtValor.getText())); cuotalnicial ~ objP.calculaCuotalnicial(); double riesgo ~ objP.calculaRiesgo(); double cuotaNensual ~ objP.calculacuotaMensual (); UblCuotaInicial.setText(objP.gethoneda()+String. format( %.2f *,cuotalnicial) ); LlRiesgo.setText (objP. getHoneda()+String. format (%.2F ', riesgo); LblCuotaMensual.setText (objP.gettoneda()+String Format( %.2f *,cuotaMensual)); 8. Ejecute la aplicacién. Una vez colocado el cédigo en los botones, presione la combinacién de teclas + . retox Reconoce las clases que componen la coleccién Swing. Identifica el uso de las propiedades y métodos de clases contenidas en la coleccién Swing, Generalidades Clases Swing Clase JFrame Clase JLabel Clase JTextField Clase JTextArea Clase JPasswordField Clase Button Clase JCheckBox Clase JRadioButton Clase JComboBox Clase DefaultListModel Clase JList Clase JMenuBar Clase JMenultem Clase Desktop Pane » Caso desarrollado 1: Manejo de la clase JList » Caso desarrollado 2: Manejo de la clase ComboBox » Caso desarrollado 3: Manejo de la clase JMenuBar Capitulo 3: Clase Swing [Tai 3.1 Generalidades Cuando se desarrolla una aplicacion Java, se piensa en diferentes tipos, como las aplicaciones de escritorio 0 plataforma, las aplicaciones méviles o las aplicaciones web; en todos los casos siempre se disefia una interfaz grafica que permite modelar graficamente un proceso de negocio por medio de controles visuales. Inicialmente, en Java, el disefio se realizaba con las clases AWT (Abstract Windows TooIKit), que fueron usadas desde la primera versién de Java hasta el Java SE-2, el cual permitia implementar interfaces gréficas mediante controles, como botones, textos estiticos, cuadros de texto, etc., wocados desde el paquete java.awt. Luego, con la evolucién del lenguaje, nace Swing con una propuesta evolucionada sobre el AWT; esta nueva versién forma parte de la JFC (Java Foundation lass), la cual contiene clases modernas para el desarrollo de aplicaciones visuales. No obstante, se recomienda que no se combinen clases de AWT con Swing en una misma aplicacién; a pesar de que ambas clases son muy parecidas, no es una buena practica integrarlas. Entre los elementos que diferencian a Swing de AWT se tienen los arboles, los tooltips, la barra de progreso, etc Por otro lado, la interfaz grdfica de usuario, mas conocida como GUI, permite mostrar de forma ergonémica una aplicacién. Aqui, para el desarrollo de nuestras aplicaciones, usaremos las clases contenidas en el paquete javax.swing, 3.2 Clases Swing La programacién basada en GUI determina el uso de un conjunto de clases que serén usadas en una aplicacién Java y que desde alse llamaran componentes u objetos. Swing ofrece un conjunto de clases, interfaces, recursos y otros elementos para la implementacién de aplicaciones graficas en Java. Su aparicién se da con la version Java 2 y, hoy por hoy, sigue en uso; ademas, los JDK actuales ya vienen incorporados con el paquete Swing. = Para habilitar el uso de las clases contenidas en el paquete Swing se usa el siguiente cédigo, pero se debe tener en cuenta que el simbolo asterisco representa a todas las clases dentro del paquete: ‘import javax.swing.*} = También se puede acceder a los métodos o atributos de la clase directamente con el siguiente cédigo: import javax. swing. JFrane; Hay que considerar que los framework para Java ya incorporan de forma visual las clases conte- nidas en el paquete Swing. A continuacién, se muestra la estructura de clases que contiene el paquete Swing de Java ES Manuel Torres Remon javaxswing al™“ Dialog Component _jFrame ae — <— mp JPanel AbstrgetButton jLabel_—_jextComponent jslider__jScrollBar Htst 12 [Menultem jButton jToggleButton jTextArea TextField Lf. iMenu iCheckBox jRadioButton _jPasswordField Figura 3.1 Estructura del paquete Swing de Java. Fuente: Finish > Ok, btnProcesar.setIcon(new javax.swing. Imagelcon(getClass() ‘getResource( */Brightness.gif"))); ‘/*Configurar un tamano de 29 puntos al texto mostrado en el control btnProcesar, podemos usar el siguiente codigo: */ binProcesar.setFont(new Font( ‘Tahora',®, 28)); /* Asignar el color rojo al fen el control btnProcesar btnProcesar.setForeground(new java.aut. Color (255,8, ©)); /*Asignar el mensaje ‘Procesando’ al control benProcesar*/ btnProcesar.setToolTipText ( Procesando 1 Capitulo 3: Clase Swing Principales métodos AddActiontistener() Perrite-apregar una accién de evento al JButton, Por ejemplo, para activarel clicsobre elboton btnProcesar, se usacl siguiente cbdigo: btnProcesar.addActionListener (this) ; public void actionPerformed( Actiontvent © ){ ‘4f(e. getSource()=-btnProcesar) { //colocar el cédigo que ejecutara el botén } Permite mostrar ocultare control JButton. Por ejemplo, se puede ‘cultarel botén, por alain evento dentro dela aplicacién, usando el siguiente cédigo: btnProcesar.setVistble(fatst Y para mostrar nuevamente el bot6n, se usard el siguiente cécigo: btnProcesar.setVisible(true). Casos de prueba Elcontrol JButton permite gestionar los célculos dentro de una apli CALCULAR, caciony, asimismo, mostrar los resultados. Para esto, los controle del formulario deben estarbien definidos. ‘También se puede usar como una botonera dentro de a aplicacién, Por ejemplo, al seleccionar un bot6n, sedeben mostrarlos productos. elelula fo pra inicial de la letra seleccionada, 3.9 Laclase JCheckBox Esta clase permite incorporar un control de tipo cuadro de chequeo, en la cual un usuario podré seleccionar una o mas opciones Check. (© jcheckBox1 Principales propiedades Propiedad Desc Script text Defineelcontenidodelcontiol /*Asignar el texto ‘Acepto los términos' al eee control chkOpeton*/ chkOpcion.setText('Acepto los términos ama fee font ‘Asignauntipodeletra,tamafio /*Configurar un ti Manuel Torres Remon fr aio de 2 puntos al texto yestioaltextocontenidoenun 0Strado en el control chkOpcion, podemos JCheckBox. usar el siguiente codigo: */ chkOpcion.setFont (new Font (‘Tahoma ',@, 28)); foreground —Asignauncoloraltextoconte- /*Asignar el color rojo a1 texto contenido nidoenelcontrolscheckBox. 7 el control chkOpcion */ ToolTipText Define un mensaje de ayuda /*Asignar et chkOpcion.setForeground (new java.awt. Color(255,8, 8)); ensaje ‘Seleccione opcién' al que se muestra en un marco control chkOpcion*/ de color amarillo al posicionar chkOpcion, setToolTipText( "Seleccione opcién «el puntera del mouse encima del control JCheckBox. buttonGroup Define que un conjunto de /*Asignar el control chkOpcion al grupo controles JCheckBox se DteFeglas */ encuentren agrupados. begReglas.edd(chkOpcion) 5 selected Define el control /*Asignar el control chkOpcion como un check JIcheckBox aparezca previa- Se leccionado */ mente seleccionado, chkOpcion.setSelected(true) ; Principales métodos AdditemListener{) isSelected() Casos de prueba (Primaria CO secundaria [¥) Técnico C Superior Permite agregar una accién de evento al JCheckBox. Por ejemplo, sise quiere seleccionarel chkOpcion para que realice una actividad en la aplicacion, se puede utilizar el siguiente cédigo: chkOpcion.addItemListener (this) ; public void itemStateChanged( Itentvent e ){ ‘4F (chkOpcion. isSelected()){ [Codigo a ejecutar 3 } Permite determinar si el objeto JCheckBox ha sido seleccionado. Por ejemplo, sise quiere veriicar como el control chkOpcion se encuentra seleccionado, se puede utilizar el siguiente cédigo: 4F (chkOpcion. isSelected()) Elcontrol JCheckBox permitiré seleccionar una o més opciones segin seael caso. Por ejemplo, podriamos marcarlos cuadros primaria, secun- daria ytécnico, ya quees el ciclo de evolucién educativa que tenemos. Capitulo 3: Clase Swing [73 3.10 La clase JRadioButton Esta clase permite incorporar un control de tipo opcién. Comiinmente son usadas para que los usuarios puedan seleccionar una opcién de un conjunto de opciones. © RadoButtont Principales propiedades text Defineel contenido delcontrol /Asignar el texto técepto los terminos* al “RadioButton. control rbTerminos*/ rbTerminos.setText( ‘Acepto los terminos * font Asignauntipodeletra,tamafio /*Configurar un tanatio de 20 yestloaltestocontenidoenun mostraco en el control rbTer ieateiass usar el siguiente cédigo. untos al texto rbTerminos.setFont (new Font (‘Tahoma ',@, 26)); foreground Asigna un color al texto /*Asignar el color azul al texto contenido contenido en el control @” el control rbTerminos */ JRadioButton. rbTerminos.setForeground(new java.awt. Color (0,8,255)); TootTipText Define un mensaje de ayuda /Asignar el mensaje ‘Acepte los términos’ quesemuestraenunmarcode al control rbTerminos*/ color amarillo al posicionarel_ rbTerminos.setToolTipText( ‘Acepte los puntero del mouse encima del términos") 5 control JRadioButton. buttonGroup Define que un conjunto de /*Asignar el control rbTerminos al grupo controles JRadioButton se teRegl2s */ encuentren agrupados. rbTerminos.add(rbTerminos) selected Define que el control /*Asignar el control rbTerminos como un JRadioButton aparezca Adio button seleccionado */ Previamenteseleccionado. _rbTerminos.setSelected (true) ; Principales métodos AdditemListener() _Permite agregar una accién de evento al JRadioButton. Por ejemplo, al seleccionar Imprimiren Pantalla desde el control rbimprimir, se podria usar el siguiente codigo: rbImprimir.addItenListener (this) ; public void itenStatechanged( ItenEvent e ){ 4f (rbInprimir. isSelected()) { /(Cédigo para la inpresién en pantalla } isSelected() Casos de prueba O Viudo O Divorciado Manuel Torres Remon Permite determinar sil objeto JRadioButton ha sido seleccionado. Por ejemplo, para determinar que el control rbimprimir se encuentra activo o seleccionado, se puede usar el siguiente codigo: 4f (rbInprimir. isSelected()) El control JRadioButton permitird seleccionar una sola opcién de un grupo de opciones. Hay que tener en cuenta que siempre debe estar asociada a un control buttonGroup, Por ejemplo, el estado civil de una persona siempre sera una sola opcién, 3.11 La clase JComboBox Esta clase permite crear un objeto de tipo cuadro combinado. Este control permitira controlar muchos valores dentro de un mismo control. Principales propiedades Desi fa model Defineelcontenidoinicialdel /*Asignar las categorias de productos al eonlicomsonont cuadro conbinado choCategorias*/ font Asigna un tipo de letra, /*Configurar un tamafto de 20 puntos al cboCategorias.addItem( ‘Bebidas '); cboCategorias.addItem( 'Golosinas"); cboCategorias .addItem( ‘Lacteos "); tamafoyestioaltextoconte. 0strado en el control cbocategorias, nido en un JComboBox. foreground —Asigna un color al texto /*Asigi contenido en el control €” et control cboCategor podemos usar el siguiente codigo: */ cboCategorias. setFont(mew Font( ‘Tahoma ',@, 26); el cotor azul al texto contenido 3 */ scomboBox. cboCategorias.setForeground(new java.awt. ToolTipText Define un mensajede ayuda /*Asignar el ‘que se muestra en un marco Color (@,6,255)); ensaje ‘Seleccione categoria’ al control cbocategorias */ decoloramariloalposicionar cboCategorias.setToolTipText( ‘Seleccione elpunterodelmouseencima categoria"); del control JComboBox. Define un elemento prede- /*Asignar cono opcién predeterminada 2 terminado de un conjunto lacteos desde el control cboCategorias*/ de elementos por medio de cboCategorias.selectedIndex (2) ; suindice, Capitulo 3: Clase Swing [ta mn Selecteditem Desi Es Define un elemento prede- /*Asignar como opcian predeteri terminadodeun conjuntode lcteos desde el control cboCatego ‘elementos por medio desu cboCategorias.selectedItem( ‘Lacteos"); contenido, ada a Principales métodos additemListener() Permite agregar ala lista contenedora de eventos un elemento de la lista contenida en el JComboBox. additem(elemento) Permite afiadir un nuevo elemento al contenedor JComboBox getitemCount() E]: Agregar las siguientes categorias de empleados: Operario Jefe cboCategoria.addTtem( 'adninistrativo"); cboCategoria-addItem( ‘Operario"); cboCategoria.additem( "Jefe"); Determina el total de items contenidos dentro del control JComboBox. Ej: Mostrar el numero de elementos del control cboCategoria, int n-cboCategoria.getTtenCount() 5 JOptionPane. showessageDialog(null, ‘Numero de elenentos esi ttn); getSelectedindex() Permite retornar el ntimero de indice del elemento seleccionado desde el control JComboBox. Ejz Determinar la posicién del elemento seleccionado en el control ebocategoria, int _pos-cboCategoria. getSelectedindex() ; ‘OptionPane.shoviMessageDialog(nult, ‘La posicién del elemento es: ' + pos); getSelecteditem() Permite retornar el elemento seleccionado desde el control JComboBox. Ej: Mostrar el elemento seleccionado desde el cuadro combi- nado cbocategoria, String categoria- (String) cboCategor ia. getSelectedItem() ; JOptionPane.showMessageDialog(mull, ‘La categoria seleccionada es:' + categoria); O también: String categoria ~ String. value0f (cboCategoria getSelectediten()); JoptionPane.showMessageDialog(null, ‘La categoria seleccionada es: ‘+categoria); ‘setBounds(x,y, ancho, alto) setEditable() setnabled() setVisible() Casos de prueba lcrtorto + Manuel Torres Remon Peimite posicionar el objeto JComboBox dentro del control JFrame. Ej: Posicionarel cuadro combinado en (15,15) y (90,23). choCategoria.setBounds(15, 15, 98, 23)5 en su defecto se puede usar: cboCategoria.setLocation(15,15); cboCategoria.setSize(90,23); Establece a edicién sobre el control JComboBox. &j: Habilitar la edici6n sobre e control eboCategoria. cboCategoria.setédi table (true) ; Permite establecer a habilitaci6n 0 no del control JComboBox, &j: nhabiltar el control cboCategoria, cboCategor ia.setEnabled (false) ; Permite mostrar u ocultarel control JComboBox. Ej: Mostary ocultarel cuadro combinado de Categoria, Mostrar > cboCategoria.setVisible(true) ; Ocultar > cboCategoria. setvisible(fatse) ; El control JComboBox permit’ seleccionar uno de los elementos presen- tados en la lista. Por ejemplo, se podra seleccionar crédito, contado o sin definicién en una aplicacién que control el tipo de pago que el cliente puede realizar. ‘Se puede definir un titulo al contral JComboBox para indicar que valores, podemos seleccionar. Se puede asignarun titulo al cuadro combinada usando elsiguiente cédigo: cboTipo. setBorder (javax. swing. BorderFactory: ‘createTitledBorder (‘TIPO DE PAGO")); CO también realizando los siguientes pasos: 1= Seleccione la propiedad border. = Seleccione Titled Border. '= Coloque un texto descriptivo en Title, Capitulo 3: Clase Swing [3 3.12 La clase DefaultListModel Un DefaultListModel es un tipo de contenedor para listas, que se encarga de administrar los valores de una lista, asi como su incorporacién, eliminacién y actualizacién. Métodos Constructores DeafultListModel () Construye un modelo acio, Por ejemplo, sisenecesitaalmacenarinformacion decategoria en un modelo, se puede usar el siguiente cbdigo: DefaultListHodel moCategor ia ~ new DefaultListModel ( ; moCategoria ~ new DefaultListodel() ; Métodos addetement() Permite atadir un valor al modelo. Por ejemplo, si se aade las categorias deun empleado al modelo moCategoria, se puede usar el siguiente codigo: moCategoria.addf lenent( ‘Jefe '); moCategoria.addELenent *Operario'); moCategor ia. addE lement ( ‘Administrador *); moCategor ia. addElenent ("Tesorero') ; getsize() Permite devolver el nimero de elementos contenidos en un modelo. Por ejemplo, para capturar la cantidad de elementos del modelo moCategoria, se puede usarel siguiente cédigo: Ant elementos ~ mocategoria. getSize(); getElementat() Permite obtener un elemento del modelo desde un indice esp ejemplo, para obtener el primer elemento del modelo moCategoria se usa el siguiente cécigo: int _indice-0; String categoria ~ moCategoria. getElementat indice); ‘fico, Por Si se necesita sumar todos los elementos contenidos en el modelo ‘moSubtotal, se usa el siguiente codigo: Aint _n-moNumero.size() ; double subtotai-0; for(int i-@;i a JRE Ste ibrar east) A continuacién, se presenta el cédigo que permite anexar los formularios internal dentro del control Desktop Pane y mostrarlos dentro de él mediante el método show. package pFormilarios; public class frovenuPrincipal extends javax.swing.3Frane { public fratienuPrincipal() { ‘ini tComponents () 5 3 private void miGeneralProductostctorPer formed java.avt.event.ActionEvent evt) { frmGeneralProductos objG-new frmGeneralProductos() ; ‘épMenu.add(0b]6); 006. show(); private void miProdictosCategoriatctionFer fornad (jave.arrt.event.Actionévent evt) { FrnProductosCategoria objC-new frnProductosCategoria() ; dpMenu.add(objC) ; ‘objC.show() ; y private void miProductosxPrecioctionPer formed java.awt.event.Actionévent evt) { frnProductosPrecio objP-new frnProductosPrecio() ; dplienu.add (obj) ; ‘objP.show() ; Programacion orientada a objeto Povare =>, Reconoce los conceptos bdsicos de programacién orientada a objetos. implementa aplicaciones con atributos privados y puiblicos implementa aplicaciones con método constructor. a2 43 4a 4s 45 az 8 Generalidades Conceptos iniciales de programacién orientada a objetos Paquetes Java Clases en Java Método constructor Referencia this Objetos en Java Métodos get y set > Caso desarrollado 1: Casa de cambio (con atributos publicos de clase) > Caso desarrollado 2: Casa de cambio (con atributos privados de clase) > Caso desarrollado 3: Casa de cambio (con métodos get y set) > Caso desarrollado 4: Casa de cambio (con método constructor) Capitulo 4: Programacién orientada a objetos [Ta 4.1 Generalidades La programacién orientada a objetos surge como un intento de dominar la complejidad que tiene la construccién de un software. Tiene un enfoque especifico con respecto a las aplicaciones, pues se orienta al manejo de objetos, superando el estilo de programacién secuencial o modular. Tradicionalmente, la forma de enfrentar una complejidad del software era usando la programacion modulada, en la cual un bloque de cédigo se podia reutiizar solo dentro de la misma aplicacién. La programacién orientada a objetos tiene el mismo principio, pero lo que la diferencia de los dems estilos de programacién es que va mas alld de la modulacidn de su cédigo. Sus caracteris- ticas fundamentales son: m= Abstraccién = Encapsulamiento = Herencia = Polimorfismo m= Reutilizar cédigo Por tanto, se puede decir que la programacién orientada a objetos en Java es una forma especial de implementar aplicaciones, mas cercana a cémo expresariamos las cosas en la vida real. Con la programacién orientada a objetos se tiene que aprender a pensar las cosas de una manera distinta alo tradicional, ya que nuestras aplicaciones las veremos en términos de clases, objetos y métodos. Si nos remontamos a la historia de cémo nace la programacién orientacién a abjetos, podemos encontrar que surge en Noruega, por los afios 60; se inicia con un lenguaje de programacién llamado Simula 67, el cual introduce los conceptos de clases y subclases en su desarrollo, algo parecido a la programacién orientada a objetos del presente. Uno de los inconvenientes para el desarrollo de un software era que no lograban culminarse con éxito, ya que solo se podia avanzar una parte del analisis, dejando un vacio dentro del desarrollo y mostrando un tanto compleja su termina- ci6n. La programacién orientada a objetos propone una nueva metodologia de desarrollo en la que sobresale el ocultamiento de la informacién; la idea era encapsular cada una de las variables slobales de una aplicacién en un solo médulo que hoy llamamos clases, junto a sus operaciones 0 métodos, siendo asi la Unica forma de acceder a su contenido. A inicios de los afios 80 se ampli el lenguaje Cy se pasé a llamar C+ que tenia como soporte ala programacién orientada a objetos, abriendo un camino hacia los nuevos lenguajes orientados a objetos que contamos en la actualidad. En esa misma década se desarrollaron otros lenguajes orien- tados a objetos como Objective C, Common Lisp Object System (CIOS), object Pascal, Ada y otros. Los afios 90 son considerados como la consolidacién de la metodologia de programacién orientada a objetos, la cual es la forma mds cercana de programar y acercarnos a la realidad. Asi, en el afio 1996, surge lava como una evolucién del lenguaje C++, ya que la primera posee todas sus carac- teristicas y funcionalidades y las explota comercialmente como el lenguaje del futuro. mv Remon 4.2. Conceptos iniciales de programaci6n orientada a objetos 4.2.1 Abstraccion Tiene como objetivo principal mostrar un comportamiento particular de un objeto, pero no detalla ni muestra cudles son las actividades que se realizan para llegar al comportamiento deseado. Es decir, solo se enfoca en la vision externa de un objeto, separando el comportamiento especifico, del mismo. Finalmente, se puede decir que la abstraccién muestra las caracteristicas esenciales de un determinado objeto, las cuales distinguen a este de los demas objetos. la figura 4.1 muestra un ejemplo de abstraccién del objeto automévil Caracteristicas: ™ Color = Numero de llantas = Modelo. = Numero de cilindros = Marca = Namero de placa ~- Funcionalidades ™ Acelerar = Frenar ™ Estacionar ™ Apagar Arrancar Figura 4.1 Abstraccién de un automévil 4.2.2 Encapsulamiento Tiene como objetivo almacenar, en una misma seccién, los elementos obtenidos a partir de una abstraccién, sabiendo que dichos elementos solo pueden ser caracteristicas 0 funcionalidades. El encapsulamiento secciona las caracteristicas 0 funcionalidades de su posible disefio, ello garantiza la integridad de los datos que contiene un determinado objeto. ‘uncionalidades del cajero automitico "= Verificar usuario y clave "= Verificar saldo ™ Verificar sila opcién seleccionads es correcta '™ Mostrar opciones segin la tarjeta ' Validar la tarjeta insertada -» Funcionalidades encapsuladas del cliente 1 Selecciona una opcién Inserta su tarjeta 1 Ingresa la clave 1 Presiona los botones desde el meni Figura 4.2 Encapsulamiento de funcionalidades entre un usuario del banco y su cajero automatico. Capitulo 4: Programacién orientada a objetos [ts 4.2.3 Herencia Tiene como objetivo transmitir cédigo de una clase a otra con cierto grado de seguridad. Para soportar este mecanismo se debe identificar qué clase sera padre, es decir, la clase de la cual here- darn otras; y por otro lado, se deben identificar las clases hijas, las cuales obtienen la informacion de la clase padre, evidenciando la herencia entre ambos. La herencia también es llamada subclase, ya que existen clases que heredaran funcionalidad y caracteristicas de una clase padre, Una de las caracteristicas es que las subclases 0 clases hijas pueden, asimismo, definir nuevas caracteristicas y funcionalidades. Caracterist Cédigo Nombres EMPLEADO SPs” a a OPERARIO. JEFE SERVICIO Caracteristicas: Caracteristicas: "Categoria. Sueldo "= CostoHora —_® Vidticos "Seguro social Figura 4.3 Herencia entre empleados de una misma empresa 4.2.4 Polimorfismo Es uno de los pilares de la programacién orientada a objetos, el cual permite implementar métodos con el mismo nombre, pero de diferente accionar. Se podria, por ejemplo, nombrar la forma para calcular el sueldo de los empleados de una empresa, los cuales se distinguen por el tipo de sueldo que perciben: unos tienen un salario fijo y otros ganan por comisién. En ambos casos se debe calcular el sueldo, pero se tiene que realizar de diferente forma, ewita00 e a EMPLEADO ASALARIADO EMPLEADO POR COMISION determinarbescuer Geterninardi calcutarsuetdo() calcularsuetdo0) Figura 4.4 Métodos polimérficos de los empleados de una empresa, 156 Java Manuel Torres Remon Se puede observar que para implementar polimorfismos se deben heredar los cédigos de una clase base y desde alli sobrescribir sus métodos; haciendo que, en las clases derivadas, dichos métodos tengan diferente implementacién, es decir, diferente accionar desde un mismo método comin, Cuando se ejecuta un programa orientado a objetos, ocurren tres acciones: 1. Se crean los objetos cuando se necesitan, 2, Los mensajes se envian desde un objeto y se reciben en otro. 3, Se borran los objetos cuando ya no son necesarios y se recupera la memoria ocupada por ellos. ‘Mecanismos basicos ‘Abstraccién Encapsulamiento Objetos Mensajes Herencia Polimorfismo Métodos Clases Figura 4.5 Mecanismos y caracteristicas de la programacién orientada a abjetos (POO). Finalmente, se puede decir que la programacién orientada a objetos usa mecanismos basicos para suimplementacién, los cuales interactian entre si, como los objetos, los mensajes, los los métodos. las clases. De igual manera, presenta caracteristicas como la abstraccién, el encapsulamiento, la herencia y el polimorfismo. 4.3 Paquetes Java Las aplicaciones que se desarrollan en Java inicialmente suelen ser de pocos elementos, pero conforme vamos usando Java notaremos que se necesita cierto orden dentro de un proyecto; es decir, las clases y formularios que se pueden crear, o las muchas imagenes que se pueden usar dentro de un mismo proyecto, Unicamente pueden ser organizados por medio de los paquetes, que no son més que simples carpetas. Los paquetes en Java 0 packages son considerados como la forma adecuada de poder organizar clases, interfaces, formularios, conexién a base de datos o imagenes de manera ldgica. Se podria decir que los paquetes: m= organizan las clases que podrian estar asociadas por algiin objetivo especifico; m= evitan la duplicidad de clases; = muestran de manera clara la estructura de un proyecto Java Cuando se crea una aplicacién en NetBeans, los paquetes se encuentran dentro de la carpeta llamada Source Packages. Sino se define un nombre de paquete, automaticamente se le asigna un paquete por defecto; esto es muy similar al hecho de crear una carpeta en Windows y no asig- narle nombre. El nombre mostrado es default package, tal como se muestra en la imagen 4.6. Capitula 4: Programacién orientada a objetos [75 & pPoqetes OB Source Packages (Bi (BD Ubraries Figura 4.6 Paquete por defecto de NetBeans. Una buena préctica es tener una aplicacién organizada; por lo tanto, se podria haber creado una estructura de paquetes tal como se muestra en la siguiente imagen: ira 4.7 Paquetes organizados en NetBeans. La distribucién de paquetes se debe a una conveniencia propia de la aplicacién. Por ejemplo, se crea el paquete pClases para almacenar todas las clases usadas en la aplicacién; de la misma forma el paquete pFormularios almacenara todos los formularios JFrame que se incorporen al proyecto. Asimismo, se podrian crear paquetes dentro de paquetes, que se llamarian subpaquetes, pero esto seré decision de cada quien 4.3.1 Creacion de un paquete La forma para crear paquetes dentro de una aplicacién dependeré muchas veces del framework donde se encuentre desarrollando Java, pero a nivel de cédigo se crea de la siguiente manera package pClases; rr) Manuel Torres Remon Los pasos para crear un paquete en NetBeans = Haga clic derecho sobre la carpeta Source Package. = Seleccione Ia ruta New > Java Package.. Cooorss ef = cate = = Asigne un nombre en la seccién Package Name. Luego haga clic en el bot6n Finish. Cuando se crea una clase dentro del paquete, se notar que la sentencia package pClases se encuentra en la primera linea, como se muestra en el siguiente cédigo: package Clases; public class Cliente { 3 Esto indica que toda la implementacién de la clase se encuentra dentro del paquete pClases; si otra clase tiene la misma linea inicial de cédigo, entonces también perteneceré al mismo paquete, como, por ejemplo, la definicién de la clase Producto en el mismo paquete pClases. package pClases; public class Producto { } Entonces, se tiene que entender que todas las clases especificadas sobre el mismo paquete se encontrardn organizadas dentro del mismo. Cada paquete contendra sus propias clases, pero .es0 no significa que no se encuentren asociadas, ya que un paquete no aisla sus elementos, sino que simplemente los organiza, Capitulo 4: Programacién orientada a objetos [7 4.3.2 Importacién de paquetes La importacién conlleva ala apertura de una o més clases contenidas dentro del paquete; es decir, se podrd usar las clases que fueron implementadas con visibilidad publica. El formato de uso del paquete es como sigue: petases] ooo import: pClases.*5 & Cliente > import pClases.CLientes ‘import pClases.Producto; Figura 4.9 importacién de paquetes. Todos los IDE tienen el mismo formato de importacién; en algunos casos se realiza en forma automética, como sucede con NetBeans, que al momento de crear una clase se especifica a qué paquete se destinard la clase, mientras que la sentencia import aparece de forma automatica dentro del cédigo fuente. En la imagen anterior las clases Cliente y Producto se encuentran dentro del mismo paquete. Asi pues, para invocar a los métodos contenidos en dichas clases, se puede especificar el nombre de la clase al final de la sentencia 0 colocar el operador asterisco, el cual hace referencia a todas las clases contenidas en el paquete, 4.3.3 Alcance de los elementos contenidos en un paquete Si se tiene en cuenta que la construccién de un paquete conlleva a una organizacién de clases, entonces también se debe considerar el alcance 0 la visibilidad que tiene frente a los demas paquetes. Por ejemplo, si se necesita hacer referencia de un paquete a otro, se debe considerar que dicho elemento sea privado, piiblico, protegido 0 sin alcance definido. Se expone, a continua- cidn, un cuadro que muestra la situacién que puede tener un elemento dentro de un paquete: Errerer eres) Te Pee een nent! poet erry Poor (private) ee oe) Dentro dela misma case. si si si si Desde una subclase No sl si No Desde una clase implementada ry r ri dentro det mismo paquete Desdeel exterior dela misma ase. No si No No En la gréfica anterior, se muestra el alcance que pueden tener los miembros de una clase; todo programador debe tener en cuenta que tanto los atributos como los métodos trabajan con un fin en comin, y que la definicién del alcance es muy importante para la aplicacién. esarrollo de a es con Java) Manuel Torres Remon 44 Clases en Java Una clase es el elemento bsico de la programacion orientada a objetos, representa a una plantilla desde la cual se pueden crear objetos. Técnicamente una clase es la descripcién de un tipo de objeto aplicando la abstraccién como pilar de la programacién orientada a objetos; esto quiere decir que la definicién de un objeto es la clase. Cuando programamos sobre un objeto y se le define sus caracteristicas y funcionalidades, en realidad lo que estamos haciendo es programar en una clase. ET] aa] hurr et EQ fens: Ove Ea cedge stg rte Su etios tng Svcs) Sein [guns ee] Tq coago: sing Ta ceage im [Epoecrpcen'Simg |. | Eghazersocal ting Coago Seng a Peco Donte eltono: stg S fps Aare 1 E Groeten) Bin) Simo Figura 4.10 Composicin de clases en un sistema de ventas. 4.4.1 Estructura de una clase En la programacién, la clase es representada por tres compartimentos, como se visualizan en la siguiente figura: Figura 4.11 Estructura de la clase Producto. Capitulo: Programacién orientada a objetos 168 Anivel de cédigo, la implementacién de la clase se visualiza de la siguiente manera: package Clases; Clase public class Produtto { private String codigo private String descr peion; private double precio; ‘asians private int stock; public void afadirProducto() { } public void etiminarProducto() (| sgeagos ? public void buscarProducto() { } Visibiidad Figura 4.12 Cédigo Java implementado la clase Producto. 4.4.2 Agregar una clase a un paquete en NetBeans Cuando se desarrolla una aplicacién Java, se debe tener una estructura de paquetes para dividir, en agrupaciones légicas, todos las componentes de la aplicacién. Ahora vamos a incorporar clases, a nuestros paquetes con NetBeans, Para ello se realizan los siguientes pasos: = Haga clic derecho sobre un determinado paquete. = Luego siga la ruta New > Java Class. Nombre de la clase Nombre de la aplicacién Nombre del paquete destino Ubicacién de la clase m= Class Name. Es el nombre asignado a la clase. = Project. Muestra el nombre del proyecto (no es modificable). = Location. Es el lugar destino de las clases; en este caso debe estar seleccionado Source Packages. = Package. Muestra el nombre del paquete de destino, es decir, en dénde se almacenaré la clase. = Created File. Muestra la ruta del archivo creado (no es modificable), aa Manuel Torres Remon 4.4.3 Atributos de una clase Un atributo de una clase es la caracteristica que puede tener un objeto. Cada atributo soporta un valor Unico dentro de la aplicacién. E1 formato que se presenta para declarar un atributo se muestra como sigue: Visibilidad Atributo lidad. Define la visibilidad que puede tener un atributo frente a otras clases; esta puede ser private, public, protected 0 sin definici6n. = TipoDatos. Es el tipo de datos que se le asigna al atributo, = Atributo. Es el nombre que se le asignard al atributo de clase. Por ejemplo, si se tiene la clase Producto y se necesita declarar el atributo cédigo, podriamos tener las siguientes opciones: a int codigo; Al declarar un cédigo sin visibilidad, solo podra accederse desde la misma clase y no desde el exterior de la clase. = public int codigo; Al declarar un cédigo como public, todas las clases del mismo proyecto podrén hacer referencia al valor contenido en dicho atributo = private int codigo; Al declarar un cédigo como private, solo podré accederse desde la clase que se definid. Hay que mencionar que la implementacién del atributo como privado es lo mas recomendado, puesto que se protege la informacién contenida en el atributo, es decir, no sera manipulada, = protected int codigo; Al declarar un cédigo como protected, solo podré accederse desde la clase que se defini y as clases descendientes de esta; esto se da cuando hay una relacién de herencia entre las clases. Si declaramos la clase Producto, con atributos privados, se veria de la siguiente manera: Codigo: Sting Eg Deserpcion sting Eq Precio Doubie Stock: nt Capitulo 4: Programacién orientada a objetos [Tar En Java se tendra el siguiente script ‘import pClasess public class Producto{ private string codigo; private String descripcion; private double precio; private int stock; Hay que tener en cuenta que al crear un objeto de la clase Producto no se podré tener acceso a sus atributos; para esto debe implementarse métodos de acceso pubblico que se asocien a cada atributo como los métodos GET y SET. El script que declara los atributos de la clase Producto como puiblicas es: Ee Coaigo Sting FB Descripcion Sting Fy Preco: Double Stock: nt En Java se tendria el siguiente script ‘import pCleses; public class Productof public String codigo; public String descr ipcion; public double precio; public int stock; 4.4.4 Métodos en las clases Un método representa a la funcionalidad que puede tener una clase; se podria decir que la ldgica que necesita una aplicacién deberia estar encapsulada dentro de la clase mediante métodos. Se presentan dos formatos para la implementacién de métodos en Java: Visibilidad Tipo de datos de salida public void asignaPrecia() [ « 4 Nombre del método 3 Cuerpo del método Figura 4.13 Estructura de un método vacio. Manuel Torres Remon Visibilidad Tipo de datos de salida public double asignaPrecio() { > return valor; A. } 4 Nombre del método Cuerpo del método Valor de retorno del método igura 4.14 Estructura de un método con valor de retorno. Donde: = Visibilidad, Es el nivel de acceso que se define al método; este puede ser private, public, protected o sin definicién. = TipoDatos. Todo método tiene un objetivo dentro de la aplicacién; al definir el tipo de datos, se le indica al método qué valor debe retornar, y cuando no retorna valor alguno, se coloca la cléusula void, = Nombre del método. Es el nombre que se le asigna al método de clase. Hay que tener en cuenta que existen métodos con parémetros o sin ellos; esto dependers de la necesidad del método, = Valor de retorno. Aqui se define qué valor retornard el método cuando se encuentre asociado ana variable. Hay que tener en cuenta que al definir un método tipo void no se considerara el valor de retorno por tratarse de un método vacio. Por ejemplo, si se necesita declarar el método asignaPrecio de la clase Producto, tendriamos las siguientes posibilidades de implementacién = double asignaPrecio(){} Aldeclarar el método asignaPrecio sin visibilidad, solo sera accesible por los métodos que se implementen dentro de la clase. = public double asignaPrecio() Al declarar como publico el método asignaPrecio, sera accesible desde todos los métodos que se encuentren en cualquier clase de la misma aplicacién. = private double asigna?recio(){} Al declarar como privado el método getCodigo, solo sera accesible dentro de la misma clase. = protected double asignaPrecio(){} Al declarar como protegido el método getCodigo, seré accesible desde la misma clase y las clases descendientes. 4.4.5 Métodos sin valor de retorno Son considerados como métodos vacios y que no devuelven respuesta alguna a quien los invoca, pero sirealizan una actividad dentro de la aplicacién Capitulo 4: Programacién orientada a objetos [Tes Visibilidad Tipo de datos de salida ‘asignaPrecio() { + Nombre del método Cuerpo del método. Figura 4.15 Definicin de un método sin valor de retorno. Estos métodos se pueden implementar cuando se necesite realizar una asignacién a un determi- nado parémetro o para actividades de impresién. Obsérvese, por ejemplo, el método que permita asignar un valor a un parémetro dentro de Ia clase producto: ‘import pclases; public class producto private String descripcion; public void asignabescripevon(String des) { descripcion ~ des; + EI método asignaDescripcion recibe como parémetro la descripcién del producto, y este serd enviado al atributo privado descripcién. Desde la aplicacién, el cédigo se muestra de la siguiente manera: Producto objPro ~ mew Producto) ; objPro.asignaDescripcion( ‘Lavadora 16Kg"); 4.4.6 Métodos con valor de retorno Son considerados como métodos que devuelven un solo valor como resultado, es decir, estos métodos siempre tienen un solo objetivo. Visibilidad Tipo de datos de salida public double asignaPrecio() { FP TERME VEO Aum Nombre de método Cuerpo del método Valor de retorno del método ra 4.16 Definicién de un método con valor de retorno. 7a Monel Tore eron Estos métodos se pueden implementar cuando se necesite realizar célculos sobre determinados atributos de la clase. Obsérvese, por ejemplo, cémo asignar un precio a un determinado producto: ‘import pclases public class productof public double 2signaPrecio (String descr ipeion) { double precio~9; 4f (deseripeién.equals( ‘Lavadora')) precio ~ 1500; return precio; recibe como pardmetro la descripcién del producto para poder deter: minar de qué producto se trata; y usando la estructura selectiva if se le asigna un monto tipo precio. Desde la aplicacién, el cédigo se muestra de la siguiente manera: Producto objPro ~ new Praducto() ; double precio - objPro.asignaPrecio( "Lavadora" 4.5 Método constructor Un constructor es un método especial dentro de la clase, el cual se encargard de asignar valores iniciales a los parémetros privados de la clase. Hay que tener en cuenta que esta actividad solo lo realiza una vez por ejecucién, vale decir que, si necesita actualizar 0 modificar el valor asignado por el constructor, tendra que usar los métodos set. Visibilidad public Producta() { } Cuerpo de! método Nombre del método Figura 4.17 Definicién de un método constructor. Donde: = Visibilidad. Representa el alcance de! método constructor; casi siempre se declara como public, ya que este método seré invocado desde fuera de la clase que se implementé. = Nombre del método. s el nombre asignado al método constructor, para poder ser recono- cido como constructor debe tener el mismo nombre de la clase. = Cuerpo del método. Aqui se pueden definir inicializaciones de atributos privados de clase. 165 Copitule 4: Programacién orientada a objetos Si se cuenta con el siguiente cédigo: ‘import pCleses; public class Productof private String codigo; private string descripcion; private double precio; private int stock; Y se necesita implementar el método constructor de la clase Producto, podriamos usar el siguiente cédigo: public Producto(String codigo, String descripcion, double precio, ime stock) { this.codigo ~ codigo; this.descripcion - descripcion; this. precio ~ precio; this stock ~ stock; 4.6 Referencia this Permite resolver ambigtiedades entre los atributos de una clase y los parametros de los métodos. Muchos métodos de un objeto necesitan acceder a los datos miembros de este y a otras propie~ dades del objeto. Para hacer referencia explicitamente a una referencia desde el método se utiliza la palabra reservada this. La especificacién de la referencia this es de la siguiente forma: this.atributo; this.netodo()} Donde: = this.atributo. Hace referencia a un atributo de clase, m= this.método. Hace referencia a un método de clase. Por ejemplo, sise tiene el método constructor Empleado, que tiene como pardmetros el cédigo, nombres y edad, que casualmente tienen el mismo nombre que los atributos privados de la clase, deberos referirnos a ellos por medio de la referencia t private String codigo; private String nonbre: private int cad; public Fnpleado(String codigo, String nonbres, int edad) [ this .codigo-cod igo; this nonbres-nonbres; this. edad-edad; al] Manuel Torres Remon 4.7 Objetos en Java Los objetos son copias 0 ejemplares de una clase. E! hecho de crear un objeto permite tener acceso a los atributos y métodos definidos en la clase. La accién de crear un objeto de una clase es llamada instancia de clase. Obsérvese la siguiente imagen: objCliente1 >} objCliente2 ~->} Clase: Cliente +Cédigo: String +Nombres:: String +#Telefono : String ‘objCliente3 ~-»] +Agregar(): void +Eliminar(): void Figura 4.18 Objetos de la clase Cliente. Cuando se implementa una clase se definen atributos y métodos que podran ser accesibles mediante objetos; estos tendran la misién de asociarse a la clase. Se presentan dos formas de crear un objeto de clase: Clase I Nombre del objeto Cliente objCLiente - new CLiente(); AA Método constructor Operador ira 4.19 Creando un objeto en una sola linea. Clase i Nombre del objeto Cliente objcliente; objCliente = new Cliente(); * A Método constructor Operador 10 Creando un objeto en dos lineas. Donde: = Clase. Es el nombre de la clase del cual se necesita crear un objeto. Hay que tener en cuenta que dicha clase se debe encontrar en el mismo paquete; en caso contrario, se debe usar la sentencia import. = Nombre del objeto. Es el nombre que se le asigna al objeto, hay que asignar un nombre que haga referencia a la clase de donde proviene. Capitulo 4: Programacién orientada a objetos [Te = Operador. Es el operador new el que permite crear el objeto de clase. m= Método constructor. Fs la especificacién que se realiza para la inicializacién de los valores de clase. Por ejemplo, sise van a crear tres objetos de la clase Cliente, podriamos usar los siguientes cédigos, como alternativa Cliente objClientel ~ new Cliente() ; Cliente objCliente2 ~ new Cliente() ; Cliente objCliente3 - new Cliente() } Los objetos se declaran uno por cada linea, haciendo llamadas multiples a la clase y @ su método constructor. Cliente objClientet, objCLiente2, objCLiente3; objClientel = new Cliente(); objCliente2 - new Cliente(); objCliente3 - new CLiente(); Los objetos se crean baséndose en una sola declaracién de objetos. 4.7.1 Referenciar a los atributos de clase Cuando se crea un objeto de una clase, en realidad lo que se quiere es tener acceso a sus atributos 0 métodos. Aqui se debe considerar la visibilidad que estos tengan, pues solo se podré acceder a los elementos pubblicos. El formato para acceder alos atributos se muestra en la siguiente imagen: Cliente objCLiente ‘objCliente ~ new Cliente(); | objCliente.nonbre ~ “Angela Victoria"; Atributo pablico Valor asignado Objeto de clase Figura 4.21 Accediendo a los atributos de una clase. Donde: = Objeto de clase. Es el nombre del objeto declarado como instancia de una clase, = Atributo pubblico. Es la referencia al atributo piiblico de la clase asociada. Hay que tener en cuenta que se le puede asignar un valor o el resultado de una expresién, solo se debe considerar que el tipo de datos devuelto por el valor o por la expresién sea el mismo que se especificd en elatributo. = Valor asignado. Es el valor que se le asigna al atributo; dicho valor sera usado dentro de los métodos de la clase para devolver algtin valor resultante. = | Manuel Torres Remon 4.7.2 Referenciar a los métodos de clase Los métodos de clase siempre tienen un abjetivo especifico en la aplicacién. E! formato para acceder a los métodos se muestra en la siguiente imagen: Cliente objCLiente; objCliente = new Cliente(); objGLiente. agregaCliente( “Angela Victoria”); Método pubblico Parémetro Objeto de clase Figura 4.22 Referencia a los métodos de una clase. Donde: m= Objeto de clase. Fl objeto es la referencia a la clase. £1 punto es obligatorio al momento de invocar algiin método publico de la clase, tiene que considerar el tipo de valor devuelto por método. = Método publico. Se hace referencia al nombre del método que se implementa en la clase con Visibilidad publica. = Parémetro. Son los valores que necesita el método para realizar un determinado proceso; la cantidad de valores enviados debe ser igual al ntimero de parémetros especificados en la clase y, ademés, deben ser del mismo tipo de datos. 4.8 Métodos get y set Cuando se declaran atributos, hay una diferencia entre una declaracién piiblica y otra privada, ya que el nivel de acceso se refleja al crear un objeto de la clase y tener acceso a los atributos. Entonces, se puede decir que el uso de los métodos get y set permitirén tener un mejor acceso a los atributos privados dentro de una clase. 4.8.1 Método set Permite asignar un valor a un determinado atributo de clase, la idea principal es dar un valor a un atributo que no es accesible por contar con visibilidad privada. Dentro de la clase hace que un atributo privado tenga un valor desde el exterior. Su formato se presenta de la siguiente manera: Nombre del Visibilidad Método. método Valor exterior public void setitributo(tipe pars atributoPrivado ~ Parametro; Atributo Valor exterior de clase of 3 Implementacién del método set. Capitulo 4: Programacién orientada a objetos [Te Donde: = Visibilidad. Representa el alcance del método set; casi siempre se declara como public, ya que los valores provienen del exterior de la clase que lo implementa. = Método void. La misién de este método es asignar un valor desde el exterior y no devolver nada desde el método, 1 setAtributo. Es el nombre del método, siempre se inicia con la palabra set seguido del nombre del pardmetro privado. = Valor exterior. Es el valor recibido desde el exterior, que ser asignado al parametro privado de la clase, = Atributo de clase. Es la referencia al atributo privado definido en la clase. Por ejemplo, si se tiene la declaracién del atributo privado Descripcién de la clase Producto y se necesita implementar su método set, podriamos tener las siguientes alternativas: public class Producto { private String descripcion; } La declaracién del atributo descripcién se realiza después de la creacién de la clase. public void setDescripeion(String desc) { descripcion ~ desc; } EI parémetro desc obtiene el valor que proviene del exterior y le asigna al atributo privado descripeién. public void setDescripcion(String sDescr ipcion) { this.descripcion ~ sDescripcion; d En ocasiones se puede diferenciar el pardmetro del método con el atributo privado colocando la primera letra del tipo de datos en el parémetro. public void setDescripcion(String descr ‘pcion) this.descripcion - descripcion; } Finalmente, siel pardmetro y el tributo privado de la clase tienen el mismo nombre, nos podriamos confundir en la referencia, para diferenciarlos se usa la palabra reservada this, la cual hace refe- rencia a todos los atributos privados de la clase. a | Manuel Torres Remon 4.8.2 Método get Si bien los métodos set tienen la misién de asignar un valor a un atributo privado, es el método get el que hace evidente la asignacién devolviendo el valor asignado a dicho atributo, Tipode Nombre del Visibilidad datos... método * . , public String getAtributo()( Feturn parsnetroPrivaco; » + Valor interno Figura 4.24 Estructura del método get. Donde: = Visibilidad. Representa el alcance del método get; siempre se declara como public, ya que este método serd invocado desde fuera de la clase. = TipoDatos. Es el tipo de datos del valor que devolverd el método. Hay que tener en cuenta que el parametro privado y su método get deben tener el mismo tipo de datos. = getAtributo. Es el nombre que se le asigna al método get, casi siempre se inicia con la palabra get seguido del nombre del parémetro privado. 1 Valor interno. Aqui se especifica qué valor devolverd el método; casi siempre se coloca el nombre del parémetro directamente, pero algunos programadores usan el operador this para hacer referencia a un miembro de la clase. Por ejemplo, sise tiene la declaracién del atributo privado Descripcién de la clase Producto y se necesita implementar su método get, podriamos tener las siguientes alternativas: public class Enpleado { private String descripcion; + La declaracién del atributo descripcién se realiza después de la creacién de la clase. public String getDescripcion(){ return descr ipcion; is El método tiene como valor de devolucién el atributo descripcién. public String getDescripcion(){ return this.descripcion; } La palabra reservada this hace referenciar a todos los atributos privados de la clase, y por este medio se puede especificar qué atributos se devolverdn por los métodos get. 7 Capitulo 4: Programacién orientada a objetos 4.8.3 Implementacién de métodos get y set con NetBeans Se presenta la clase Producto con los atributos Cédigo, Descripcién, Precio y Stock, como se muestra en la siguiente imagen: TEgcoaign Sting [EgDescpcion Sting EgPreco:Doute foc: nt Figura 4.25 Estructura de la clase Producto. Para poder crear los métodos get y set en NetBeans, se deben realizar los siguientes pasos: 1. Declare los atributos privados dentro de la clase Producto. package oClases; public class Producto { private String coxigo; private String descr ipcion; private double precio; private int stock; 2, Haga clic derecho sobre la clase. Luego siga la ruta Refactor > Encapsulate Atributos — Métodos Get Métodos Set Habilita todos los metodos Get y Set Habilita solo los Get Habilita solo los Set Inhabilta el comentario por cada método Figura 4.26 Ventana de encapsulado de campos. Manuel Torres Remon Seleccione los métodos que necesite implementar. Seleccione None en la opcién Javadoc para no mostrar comentarios sobre cada método implementado. Finalmente, haga clic el bot6n Refactor para implementar los métodos. El cédigo se muestra de la siguiente manera: package oClases; public class Producto { private string codigo; private string descr ipcion; private double precio; private int stock; public String getCodigo() ¢ return cod'z0; 3 public void setCodigo(String codigo) { ‘this.codigo ~ codigo; } public String getDescripcion() { return descripcion; 3 public void setDescripcion (String descripcion) { ‘this.descripcion - descripcion; 3 public double gerPrecio() ¢ return precio; 3 public void setPrecio(double precio) ¢ this. precio ~ precio; 3 public int getStock() { return stock; 3 public void setStock(int stock) { this.stock - stock; y Capitulo 4: Programacién orientada a objetos [Ws CASO DESARROLLADO 1: Casa de cambio (con atributos publicos de clase) Una casa de cambio de dinero necesita una aplicacion que le permita agilizar sus procesos de consultas sobre el tipo de cambio. Para ello, la casa de cambio usa solo tres tipos de monedas: soles, délares y marcos, respectivamente, Implemente una aplicacién que determine el monto total del dinero en euros de un cliente que necesita realizar el cambio de soles, euros y marcos. Utilice la siguiente tabla de conversion: dolar 3,51 soles dolar 109 euros Idélar 2.12marcos Consideraciones: = Desarrolle la aplicacién usando la metodologia orientada a objetos con atributos puiblicos. = Use el siguiente disefio de interfaz grafica: i. eae) ‘CONTROL DE CAMBIOS - CASA DE CAMBIO m= Debe ingresar un monto en soles, délares y marcos, respectivamente. m= Cree una clase llamada Casa que defina los atributos referentes a los montos ingresados. Solucion: 1. Seleccione la ruta File > New > Java Project 2. Asigne el siguiente nombre al proyecto: pjAplicacion42. 3. Agregue los paquetes pFormularios y pClases. 4, Agregue un JFrame dentro del paquete pFormularios yasignele el nombre frmCasaCambio. ‘Agregue una clase llamada Casa en el paquete pClases. | EE Manuel Torres Remon 6. Disefe la siguiente interfaz y asigne nombres a los controles como se muestra en la imagen: 2 tatDolares ‘txtSoies £ txtMarcos | btnbrocesar! <~bnsalir “btntimpiar {igtResumen Resumen de controles: 1 label CONTROL DE CAMBIOS - CASA DE CAMBIO 2 STextField txtSoles 3 TextField txtDolares 4 STextField ttMarcos, 5 JButton binProcesar 6 © JButton btntimpiar 7 JButton btnsalir 8 hist IstResumen 7. Enla clase Casa coloque el siguiente codigo: package oClases; public class Casa { public double soles; public double dolares; public double marcos; public double calcul aMontofuros(){ return (soles/3.51+marcos/2.12+dolares)*1.09; 3 Capitulo 4: Programacién orientada a objetos [Ts 8, Agregue cédigo al botén Procesar; para ello, desde la vista de disefio, haga doble clic sobre dicho botén, private void btnProcesarActionPer formed (java.aut event .Actionevent evt) { Casa objC ~ new Casa(); objC.soles ~ Double. parseDouble(txtSoles.getText()); objC.dolares ~ Double. parseDouble(txtDolares. getText()); objC.marcos ~ Double. parseDouble(txtHarcos.getText()); double euros ~ objC.calculaMontoéuros() ; DefaultListModel moR ~ new DefaultListNodel() ; mmoR add lement("** RESUMEN DE CAMBIO ***); moR. addELenent ( ‘$_—____."), MOR. addELement( ‘MONTO SOLES: ' + String. format('%.2F*, objC.soles)); rmoR-addElement (*MONTO DOLARES: * + String. format(%.2F*, objC.dolares)); moR.addELement (‘MONTO MARCOS: * + String. format("%.2f*, objC.marcos) ); oR. addE Lenent (*———__————-") ‘moRaddElement ("EL MONTO TOTAL EN EUROS ES:* + String. format ( euros)); LstResumen. setHodel (moR) ; aft, 9. Agregue cédigo al botén Limpiar; para ello, desde la vista de disefio, haga doble clic sobre dicho botén. private void btnl impiarActionPer formed( java.awt.event.ActionEvent evt) { txtSoles.setText(*") txtDolares.setText("*); txtMarcos.setText(*"); txtSoles.requestFocus() 5 10. Agregue cédigo al botén Sali dicho botén. ; para ello, desde la vista de disefio, haga doble clic sobre private void binSalirActionPer formed (java.awt.event Actionévent evt) { ‘int r - J0ptionPane. showOptionDialog(this, "Estas seguro de salir...?*, "Casa de Canbio', 'JOptionPane.VES_NO_OPTION, SOptionPane QUESTION MESSAGE, mut, mult, mutt); af (r= 0) £ System.exit(@) 3 11, Ejecute la aplicacién. Una vez colocado el cédigo en los botones, presione la combinacién de teclas + . Manuel Torres Remon CASO DESARROLLADO 2: Casa de cambio (con atributos privados de clase) Una casa de cambio de dinero necesita una aplicacién que le permita agilizar sus procesos de consultas sobre el tipo de cambio. Para ello, la casa de cambio usa solo tres tipos de monedas: soles, délares y marcos, respectivamente. Implemente una aplicacién que determine el monto total del dinero en euros de un cliente que necesita realizar el cambio de soles, euros y marcos. Urtilice la siguiente tabla de conversién: idélar 3.51 soles idelar 1108 euros Ldoler 212marcos Consideraciones: = Desarrolle la aplicacién usando la metodologia orientada a objetos con atributos privados. m= Use el siguiente disefio de interfaz grafica: aon sous monobeams muacos ecco || ure) (is) = Debe ingresar un monto en soles, délares y marcos, respectivamente. = Cree una clase llamada Casa que defina los atributos referentes a los montos ingresados. Soluci6n: 1. Seleccione la ruta File > New > Java Project. 2. Asigne el siguiente nombre al proyecto: pjAplicacion42. Agregue los paquetes pFormularios y pClases, 4, Agregue un JFrame dentro del paquete pFormularios y asignele el nombre frmCasaCambio. 5, Agregue una clase llamada Casa en el paquete pClases. Capitulo 4: Programacién orientada a objetos zz 6. Disefe la siguiente interfaz y asigne los nombres a los controles como se muestra en la imagen: ‘txtSoles | ibtnbrocesar’ bbtntimpiar_ | || aesmenceowso= Resumen de controles: ~taxtDolares “wtMarcos | ‘btnsaiir istResumen a 1 dLabel CONTROL DE CAMBIOS- CASA DE CAMBIO 2 STextField txtSoles 3 JSTextField txtDolares, 4 STextFielé twtMarcos 5 JButton binProcesar 6 —JButton btnLimpiar 7 JButton btnsalir 8 dist IstResumen 7. Enla clase Casa coloque el siguiente cédigo: package pClases; public class Caso { private double soles; private double dolares; private double marcos; public void 2signaSoles (double s) soles ~ 5; x public void 2signadolares (double <){ dolares ~ d; } public void asignatlarcos(double m) { ‘ 7 public double calculationtofuros(){ return (soles/3.51tmarcos/2.12+dolares)*1.69; 3 Capitulo 4: Programacién orientada a objetos zz 6. Disefe la siguiente interfaz y asigne los nombres a los controles como se muestra en la imagen: ‘txtSoles | ibtnbrocesar’ bbtntimpiar_ | || aesmenceowso= Resumen de controles: ~taxtDolares “wtMarcos | ‘btnsaiir istResumen a 1 dLabel CONTROL DE CAMBIOS- CASA DE CAMBIO 2 STextField txtSoles 3 JSTextField txtDolares, 4 STextFielé twtMarcos 5 JButton binProcesar 6 —JButton btnLimpiar 7 JButton btnsalir 8 dist IstResumen 7. Enla clase Casa coloque el siguiente cédigo: package pClases; public class Caso { private double soles; private double dolares; private double marcos; public void 2signaSoles (double s) soles ~ 5; x public void 2signadolares (double <){ dolares ~ d; } public void asignatlarcos(double m) { ‘ 7 public double calculationtofuros(){ return (soles/3.51tmarcos/2.12+dolares)*1.69; 3 TM] 2. Desarrollo de aplicaciones con java Manuel Torres Remon 8. Agregue cédigo al botdn Procesar; para ello, desde la vista de disefio, haga doble clic sobre dicho botén. private void binProcesarActionPer formed (java.awt.event.ActionEvent evt) { casa obj¢ ~ new Casa(); objC.asignaSoles (Double. parseDouble(txtSoles.getText())) ; (objC.asignaDolares (Double. parseDouble(txtDolares. getText()))5 ‘0bjC.asignaHarcos (Double. parseDouble( txtMarcos.getText())); double euros ~ objC.calculaMontoEuras(); DofaultListModel moR ~ new DefaultListHodel(); mmoR.addélenent ('** RESUMEN DE CAMBIO ** *); mmoR add€ Lenent (‘-———_____.»; mmoR.addELenent( ‘ONTO SOLES: * + string. format( Double. parsedouble(txtSoles.getText()))); mmoR.addELement('MONTO DOLARES: * + String. format %s.2F*, Double.parsedouble(txtOolares. getText()))); moR.addElement(‘MONTO MARCOS: * + String. format("%.2F", Double. parsedouble(txtMarcos.getText()))) mmoR..addE Lememt ( ?— mmoR.addEenent( "EL MONTO TOTAL EN EUROS ES: af, D5 String. format( %.2f", euros)) ; UstResumen, setModel (oR) ; 8, Agregue cédigo al botén Lim dicho botén. 1; para ello, desde la vista de disefio, haga doble clic sobre private void btnlinpiarActionPer formed java.awt event .ActionEvent evt) { txtSoles.setText(*") 5 txtDolares.setText(**); txtMarcos.setText(*"); txtSoles.requestFocus() } 10. Agregue cédigo al botén Salir; para ello, desde la vista de disefio, haga doble clic sobre dicho botén, private void btnSalirActionPer formed (java.aut.event .Actionfvent evt) { ‘int r ~ JOptionPane.showOptionDialog(this, ‘Estas seguro de salir...?', ‘Casa de Cambio", JOptionPane. YES_NO_OPTION, OptionPane QUESTION MESSAGE, mutL, mul, mull) ; af (r= 0) { System.exit(@); 3 11, Ejecute Ia aplicacién. Una vez colocado el cédigo en los botones, presione la combinacién de teclas + . Capitulo 4: Programacién orientada a objetos ["335 CASO DESARROLLADO 3: Casa de cambio (con métodos get y set) Una casa de cambio de dinero necesita una aplicacién que le permita agilizar sus procesos de consultas sobre el tipo de cambio. Para ello, la casa de cambio usa solo tres tipos de monedas: soles, délares y marcos, respectivamente. Implemente una aplicacién que determine el monto total del dinero en euros de un cliente que necesita realizar el cambio de soles, euros y marcos. Urtilice la siguiente tabla de conversion: délar aSisoles dolar Lo9eur0s, 1 délar 2.12marcos Consideraciones: = Desarrolle la aplicaci6n usando la metodologia orientada a objetos con los métodos get y set. Use el siguiente disefio de interfaz grafica: m= Debe ingresar un monto en soles, délares y marcos, respectivamente. = Cree una clase llamada Casa que defina los atributos referentes a los montos ingresados. Solucion: 1. Seleccione la ruta File > New > Java Project. 2, Asigne el siguiente nombre al proyecto: pjAplicacion43. 3, Agregue los paquetes pFormullarios y pClases. 4, Agregue un JFrame dentro del paquete pFormularios y asignele el nombre frmCasaCambio. 5. Agregue una clase llamada Casa en el paquete pClases. 6, Disefie la siguiente interfaz y asigne nombres alos controles como se muestra en la imagen: al Resumen de controle: ‘ibtnProcesar'- btntimpiar ‘btSoles Manuel Torres Remon £ txtDoiares rxtMarcos bbtnsalir ‘igtResumen | Ds convat 2 label CONTROL DE CAMBIOS ~CASADE CAMBIO JTextField trtSoles TextField ntDolares, TextField twtMarcos Button binProcesar| JButton btnLimpiar Button binsalir Jtist IstResumen En la clase Casa coloque el siguiente cédigo: package oClases; public class Casa { private double soles; private double dolares; private double marcos; public double gersoles() { return soles; 3 public void setSoles(double soles) { this. soles - soles; 3 public double getDolares() { return dolares; 3 public void sctDolares(double dolares) { ‘this.dolares - dolares; ¥ public double gettiarcos() return marcos; } Capitulo 4: Programacién orientada a objetos 11 public void sertiarcos(double marcos) ( this.marcos ~ marcos; 3 public double calculationtozures() { return (getSoles() /3.51+getarcos() /2.12+getDolares())*1.89; + 8. Agregue cédigo al botén Procesar; para ello, desde la vista de disefio, haga doble clic sobre dicho botén, btnProcesarActionPer formed( java.awt event.ActionEvent evt) { private voi Casa objC ~ new Casa(); (0bC. setSoles (Double. par seDouble (txtSoles.getText())); 00]C.setDolares (Double par seDouble(txtDolares. getText())) 00]€. se Marcos Double. parseDouble(txtNarcos. getText())) 5 double euros ~ objC.calculaMontofuros(); DefaultListHodel moR ~ new DefaultListModel () ; mmoR.addELenent('** RESUNEN DE CAMBIO **"); ‘moR add lenent(‘——_______—-»; rmoR. add lement("MONTO SOLES: * + String. format('%.2F*, ob{C.getSoles())); ino adELenent("MONTO OOLARES: * + String. format(*%.2F", objC.getDolares())); mmoR.addELenent(‘MONTO MARCOS: ‘+ String. format('%.2F", objC.getMarcos())) ‘noR addétenent (*————-"); rmoR.addE lement ("EL MONTO TOTAL EN EUROS ES:"'+ String. format(%.2", euros)) ; IstResumen, setModel (moR) ; 9. Agregue cédigo al botén Limpiar; para ello, desde la vista de disefio, haga doble clic sobre dicho botén. private void btnLinp! txtSoles.setText( txtDolares. setText ( txtMarcos.setText(*"); txtSoles. requestFocus() ; ActionPer formed(java-awtevent.ActionEvent evt) { 10, Agregue cédigo al botdn Salir; para ello, desde la vista de disefio, haga doble clic sobre dicho botén. al Manuel Torres Remon private void benSalirActionPer formed (java.awt.eve! ActionEvent evt) { ‘int r - J0ptionPane.showOptionDialog(this, ‘Estas seguro de salir...?', "Casa de Cambio", 3OptionPane.YES_NO_OPTION, JOpeionPane.QUESTION MESSAGE, MULL, nULL, mULL) ; itr) { System.exit(@); } 11, Ejecute la aplicacién. Una ver colocada el cédigo en los botones, presione la combinacién de teclas + , CASO DESARROLLADO 4: Casa de cambio (con método constructor) Una casa de cambio de dinero necesita una aplicacién que le permita agilizar sus procesos de consultas sobre el tipo de cambio. Para ello, la casa de cambio usa solo tres tipos de monedas: soles, délares y marcos, respectivamente. Implemente una aplicacién que determine el monto total del dinero en euros de un cliente que necesita realizar el cambio de soles, euros y marcos. Use la siguiente tabla de conversién’ Ldélar 351soles dolar 1109 euros dolar 2.12marcos Consideraciones: = Desarrolle la aplicacién usando la metodologia orientada a objetos con el métado constructor. m= Use el siguiente disefio de interfaz grafica: smonsurs moans monaco rocco }(_wewe | = = Debe ingresar un monto en soles, délares y marcos, respectivamente. = Cree una clase llamada Casa que defina los atributos referentes a los montos ingresados. Capitulo 4: Programacién orientada a objetos [Ta Soluci6n: 1, Seleccione la ruta File > New > Java Project. 2. Asigne el siguiente nombre al Proyecto: pjAplicacion44. 3. Agregue los paquetes pFormularios y pClases. 4, Agregue un JFrame dentro del paquete pFormularios yasignele el nombre frmCasaCambio. 5. Agregue una clase llamada Casa en el paquete pClases. 6. Disefe la siguiente interfaz y asigne nombres a los controles coma se muestra en la imagen: ‘wtDoiares ‘tatSoies Tae ‘bin rocecar bbinsaiir jeroocuren tse fistResumen ! Resumen de controle: oa ea 1 dlabel CONTROL DE CAMBIOS CASA DE CAMBIO 2 STextfield ttSoles 3 STextField ttDolares. 4 STextField twtMarcos 5 JButton bbinProcesar: 6 — JButton btnLimpiar 7 JButton binsalir 8 dist IstResumen 7. Enla clase Casa coloque el siguiente cédigo: package Clases; public class Casa [ private double soles; private double dolares; private double marcos; public Casa(double soles, double dolares, double marcos) { this. soles ~ soles this dolares ~ dolares; ‘this .marcos ~ marcos; ESS Manuel Torres Remon public double gersoles() { return soles; 3 public void setSoles (double soles) { ‘this. soles - soles; } public double getDolares() { return dolores; } public void setDolares (double dolares) { ‘this.dolares - dolares; 3 public double wettarcos() return marcos; 3 public void setiarcos (double marcos) { ‘this.marcos = marcos; 3 public double calculatontozuros()< return (getSoles() /3.51+getMarcos() /2.12+getDolares())*1.095 3 Agregue cédigo al botén Procesar; para ello, desde la vista de disefio, haga doble clic sobre dicho botén. private void btnProcesarActionPer formed(java.awt.event.ActionEvent evt) { double soles ~ Double. parseDouble(txtSoles.getText()) 5 double dolares ~ Double. parseDouble(txtDalares.getText()) double marcos ~ Double. parsedouble(txtMarcos. gettext ()); Casa objC - new Casa(soles,dolares,marcos) ; double euros ~ objC.calculaontoEuros() ; DefaultListModel moR ~ new DefauLtListwodel (); mOR.addElement( "** RESUMEN DE CAMBIO ***) moR-addELement (‘—_——_—-"); ‘moR.addELement(‘MONTO SOLES: ' + String. format(%.2f*, objC.getSoles())); ‘TOR. addELenent( "MONTO DOLARES: ' + String. format ( %.2f*, objC.getDolares())) ‘wR-addElenent( MONTO MARCOS: * + String. format (%.2F", objC.getMarcos())) ; ‘noR add Lement ( *_—__—"»; ‘woR.addElenent ("EL MONTO TOTAL EN EUROS ES: * + String. format('%.2F*, euros); \UstResumen. setModel (moR) ; Capitulo 4: Programacin orientada a objetos [75 9, Agregue cédigo al botén Limpiar; para ello, desde la vista de disefio, haga doble clic sobre dicho botén, private void btnl inpiarActionPer formed(java.aut event.ActionEvent evt) { ‘txtSoles.setText(""); txtDolares.setText(?); txtMarcos.setText("*); txtSoles. requestFocus() ; 10, Agregue cédigo al botdn Salir; para ello, desde la vista de disefio, haga doble clic sobre dicho botén. private void binSalirActionPer formed (java.awt-event.ActionEvent evt) { ‘int r - J0ptionPane. showptionDialog(this, ‘Estas seguro de salir...?', "Casa de Cambio", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, mull, mull, mutt) ; if (rf System.exit (9); 3 11, Ejecute la aplicacién. Una ver colocado el cédigo en los botones, presione la combinacién de teclas + . Estructura de secuencia lm Reconoce los principales pasos para la implementacién de estructuras secuenciales. '& _Implementa aplicaciones Java usando una estructura secuencial integrada a la programacién orientada a objetos. 54 Generalidades 5.2 Estructura secuencial 5.3 Componentes de una estructura secuencial > Caso desarrollado 1: Cambio de temperaturas, > Caso desarrollado 2: Conversién de medidas > Caso desarrollado 3: Pago de empleados > Caso desarrollado 4: Venta de productos Capitulo 5: Estructura de secuencia [Tar 5.1 Generalidades El cuerpo de un programa en Java est compuesto por un conjunto de sentencias que tienen por misién realizar una 0 mas acciones segiin lo especificado por el programador. Estas sentencias, se implementan en forma de secuencia dependiendo del objetivo de la aplicacién; aqui hay que recalcar que el orden de estas sera responsabilidad directa del programador. ‘También se debe considerar que una sentencia Java hace referencia a un célculo, captura de datos, impresién de valores, almacenado de datos, etc.;y estos se ejecutan uno a uno siguiendo el orden implementado. En la figura 5.1 obsérvese un ejemplo de una estructura secuencial. Declaracién de variables + Sentencias o expresiones Fin del proceso igura 5.1 Diagrama de flujo de la estructura secuencial. Como se vera, la secuencia es proporcional al objetivo de la aplicacién, ya que para todo programa se deben declarar variables que se usaran en la aplicacién. Entre las sentencias 0 expresiones, se pueden capturar los datos desde un formulario; una vez capturados, se debe empezar con los. élculos necesarios en la aplicacién y, finalmente, con la impresién de los resultados. Todo proceso tiene un inicio y un fin, 5.2 Estructura secuencial La estructura secuencial es aquella en la que una sentencia sigue a otra en secuencia; esto permite enviar las sentencias una a continuacién de otra al compilador de Java para que sea interpretado yejecutado en el mismo orden. public class ProgranaPrincipal « Inicio del proceso { Promedio objP ~ new Promedio() ; Secuencia |, obj. setalunno( ‘Angela Torres Lazaro") g suencia f--" 905P-SetN1(17) 5 « Secuencia Secuencia [""> objP. setN1(18) ; Secuencia Secuencia {°° dauble pronedio ~ calculaPromedio(); «~ “> String condicion ~ determinaCondicion(pronedio) i Fin del proceso Figura 5.2 Secuencia de un proceso. Manuel Torres Remon 5.3 Componentes de una estructura secuencial Cuando se implemente un desarrollo de aplicacién, comenzaremos a notar que existen elementos dentro de la programacion que son muy parecidos en todas las aplicaciones. Algunos de los compo- nentes que encontraremos son los siguientes: 5.3.1 Declaracion Java es un lenguaje tipado, por lo tanto, todo lo que se pretenda usar dentro de un cédigo de programacién debe ser declarado antes de usarse. El formato que permite declarar una variable es: NOMBRE DE LA VARIABLE; 5.3.2 Asignacion Laasignacién consiste en asignar un valor a una variable en un determinado momento de la progra- macién, de modo que puede ser usado como un nuevo elemento por la siguiente sentencia. Se puede realizar una asignacién en estas situaciones: ® Cuando se asigna un valor a una variable, como, por ejemplo, n = 15. = Cuando se especifica un contador, como, por ejemplo, c= c+ 1. = Cuando se especifica un acumulador, como, por ejemplo, a = a + valor. = Cuando se especifica una expresién, como, por ejemplo, e = c+ b*(2/4). 5.3.3 Lectura u obtencién de datos La lectura hace referencia a la forma de capturar un valor ingresado por el usuario, para nuestro caso usamos el control Jtextfield. A continuacién, se presentan algunos casos de cémo obtener informacién a partir de controles: = Obtener un valor textual desde un cuadro de texto String descr ipcion; descripcion ~ txtDescripcion. getText(); Lavariable descripcién fue declarada como String, por lo tanto, no necesita ningun tipo de conversion al recibir un valor del mismo, como lo ofrece el control txtDescripcion. Por otro lado, el control a un método llamado getText permite obtener el valor ingresado en la caja de texto, = Obtener un valor numérico entero desde un cuadro de texto ‘int sumero; numero ~ Integer.parselnt (txtNumero. getText()) ; La variable ntimero fue declarada como entero, por lo que su valor asignado también debe ser entero; sin embargo, se entiende que el control txtNumero siempre devolverd un valor textual; por lo tanto, se necesita una conversién de valor usando Integer.parselnt, el cual convierte un valor numérico en forma de texto en un valor numérico de tipo int. Capitulo 5: Estructura de secuencia [Tar = Obtener un valor numérico decimal desde un cuadro de texto double decinal; decimal ~ Double. parseDouble(txtDecimal.getText()); La variable decimal fue declarada como double, por lo que su valor asignado también debe ser double; sin embargo, se entiende que el control txtDecimal siempre devolverd un valor textual; por lo tanto, se necesita una conversién de valor usando Double.parseDouble, el cual convierte un valor numérico decimal en forma de texto en un valor numérico de tipo double. = Obtener un valor textual desde un cuadro combinado String opcion; opcion ~ String. valuedf (cbodpcion..getSelectedrtem()) ; La variable opcién fue declarada como String, por lo que su valor asignado también debe ser String; sin embargo, el control cboOpcion devuelve un valor textual no compatible con ‘String; por lo tanto, se necesita una conversién de valor usando StringValueOf, el cual hace compatibles alas variables String, 5.3.4 Escritura de datos Laescritura hace referencia a la forma de mostrar un resultado por pantalla; esta se puede realizar de varias maneras. A continuacién, se muestran algunos casos de cémo mostrar informacién: = Mostrar informacién en un control JLabel double subtotal ~ 1490; IblSubtotal.setText (‘EL subtotal es: ‘+subtotal); El método setText del control tbtSubtotal permite asignar un valor de salida, es decir, mostrard el valor del subtotal de forma estatica, sin modificaciones. = Mostrar informacién en un control JTextField double subtotal - 1490; txtSubtotal.setText( ‘El subtotal es: ‘+subtotal) ; El método setText del control txt Subtotal permite asignar un valor de salida, es decir, mostrard el valor del subtotal de forma editable, ya que es la naturaleza del control. = Mostrar informacién en un control JList double subtotal ~ 1490; DefaultListMadel moR ~ mew DefaultListNodel(); moR.addElenent( "El subtotal es: ‘+subtotal) ; IstResumen. setModel (moR) ; Para afiadir un elemento de impresién o salida en un control Jlist primero se debe crear un objeto de la clase DefaultListModel. Es a partir de este objeto que se podrd enviar informacién ala lista. Se comienza por enviar toda la informacién al modelo usando el método addElement y,al final, se envia la informacién al control JList usando el método setModel. Manuel Torres Remon CASO DESARROLLADO 1: Cambio de temperaturas Implemente una aplicacién Java que permita leer una temperatura en grados Celsius o centigrados (C) yla convierta a su equivalente en grados Fahrenheit (F), grados Kelvin (kK) y grados Rankine (R) Utilice las siguientes formulas Farenheit 9Celsius/5+32 Kelvin Rankine - 187 Rankine Celsius +460 Consideraciones: = Desarrolle [a aplicacién usando la metodologia orientada a objetos con los métodos get y set. m= Use el siguiente disefio de interfaz grafica: = Enuncuadro de texto, debe ingresar la temperatura en Celsius. = Cree una clase llamada Temperatura que defina el atributo referente a la tempera tura ingresada. = Muestre el resultado de la aplicacién en un control JList. Soluci6n: 1. Seleccione la ruta File > New > Java Project. 2. Asigne el siguiente nombre al proyecto: pjAplicacionSi 3. Agregue los paquetes pFormularios y pClases. 4. Agregue un JFrame dentro del paquete pFormularios y asignele el nombre frmComversion. 5. Agregue una clase llamada Temperatura en el paquete pClases. Capitulo 5: Estructura de secuencia 198 6. Disefie la siguiente interfaz y asigne nombres a los controles como se muestra en la imagen: {[binProcesar’ |‘btnLimpiar | ‘CONVERSION DE TEMPERATURAS | Figura 5.3 Controles del formulario de conversion. Resumen de controle: £binsaiir {iste} co Cr 1 dlabel CONVERSION DE TEMPERATURAS. 2 STextField twtCelsius 3 JButton binProcesar 4 sButton btnLimpiar 5 JButton binsalir 6 dist [stResumen 7. Enla clase Temperatura coloque el siguiente cédigo: package pClases; public class Temperatura private double celsius; public double getCelsius() { return celsius; ¥ public void setCelsius(double celsius) { ‘this. celsius ~ celsius; } public double determinaFarenheit(){ return (9 * celsius)/5 + 32; + public double determinarankine()< return celsius + 469; 3 public double ceterminakelvin(){ return determinaRankine()=187; 3 TT EE Monue Totes Remon 8. El cédigo del formulario frmConversion se muestra como sigue: package pFormularios; Amport javax. swing.DefaultListHodel; ‘import javax. swing. JOptionPane; import pClases.Tenperatura; public class friconversion extends javax.siing.JFrane ( DefaultListHodel moR ~ new Defaul tListModel (5 public frnconversion() { ‘imitComponent's() 5 ) private void btnProcesarAct ionPer formed java.aut.event.ActionEvent evt) { Tenperatura obj - new Tenperatura() ; objT. setCelsius (Double, parseDouble(txtCelsius.getText())) 5 moR.addElement (*** RESUMEN DE TEMPERATURA ** ‘moR.addE Lenent ( moR-addElement ( "TEMPERATURA CELSIUS: ' + String. format(%.2f*, objT.getCelsius())) 5 ‘noR add Lement ( ————"__. ‘mR. addELement( "TEMPERATURA FARENHEIT: * + String. format( objT.determinaFarenheit())); moR.addELement (TEMPERATURA RANKINE: + Strdny ‘obj T.determinaRankine())) ; ‘moR.addElement ("TEMPERATURA KELVIN: ''+ String. format("%.2f*, objT.determinakelvin())) 5 ‘LstResumen. setodel (moR) ; .2f", format( "%.2f*, 3 private void btnSalirActionPer formed (java.aut -event.Actionévent evt) { int r - JOptionPane.showOptionDialog(this, ‘Estas seguro de salir...2", 'Temperatura', JOptionPane. YES_NO_OPTION, Opt ionPane.QUESTION MESSAGE, full, null, mult) ; if (r-- 0) { System.exit(@) + y private void btnLinpiarActionPer formed(java.awt.event ActionEvent evt) { txtCelsius.setText(*"); moR.clear(); txtCelsius.requestFocus() ; 9, Ejecute la aplicacién. Una vez colocado el cédigo en los botones, presione la combinacién de teclas + , Capitulo 5: Estructura de secuencia 195 CASO DESARROLLADO 2: Conversion de medidas Implemente una aplicacién Java que permita convertir una cantidad especificada en pulgadas a pies, a yardas, a centimetros y a metros. Utilice las equivalencias de la siguiente tabla: tyarda Spies Lpie 12 pulgadas 1 pulgada 2.54 centimetros metro 100.centimetros Consideraciones: = Desarrolle la aplicacién usando la metodologia orientada a objetos con los métodos get y set. 1m Use el siguiente disefio de intertaz grafica: * RESUMEN DE WEDIOAS* CCenTETROS 18240 = Enun cuadro de texto, debe ingresar el valor en pulgadas. = Cree una clase llamada Medidas que defina el atributo referente a la temperatura ingresada. = Muestre el resultado de la aplicacién en un control JList. Solucion: 1. Seleccione la ruta File > New > Java Project. 2. Asigne el siguiente nombre al proyecto: pjAplicacion52. 3. Agregue los paquetes pFormularios y pClases. 4, Agregue un JFrame dentro del paquete pFormularios y asignele el nombre frmMedidas. 5, Agregue una clase llamada Medidas en el paquete pClases. 6 binProcesar! “binLimpiar is CONVERSION DE MEDIDAS i ogres var copumatas ‘tPulgadas thom 00 oe a REDUMEN DEMEDOAS™ ira 5.4 Controles del formulario de medidas Resumen de controles: 7 Enla clase Medidas coloque el sig Label CONVERSION DE MEDIDAS TextField twtPulgadas Button binProcesar Button btnLimpiar Button btnSalir Jtist [stResumen nte cédigo: package Clases; public class Nedides { private double pulgadass public double gerPulgadas() { return pulgades; 3 public void setPulgadas(double pulgadas) { ‘this. pulgadas ~ pulgadas; y public double determinaPies(){ return pulgadas/12; 3 public double determinavardas(){ Feturn 3 * determinaPies(); + Manuel Torres Remon Disefie la siguiente interfaz y asigne nombres a los controles como se muestra en la imagen bbtnsalir {istesumen | Capitulo 5: Estructura de secuencia [T97 public double ceterminacentinetros(){ return pulgadas*2.54; 3 public double doterminalletros(){ return determinaCentimetros() /108; 3 8. Elcédigo del formulario frmMedidas se muestra como sigue: package pformularios; import javax.swing.DefaultListModel; ‘import javax. swing. JOptionPane; import pClases.Medidas; public class frniiedidas extends javax.swing.JFrane ¢ DefaultListModel moR - new DefaultlistModel(); public frniiedidas() { ‘initConponents (); 3 private void btnProcesarActionPer formed (java.aut event. ActionEvent evt) { Nedidas objM - new Medidas(); ‘objM. setPulgadas (Double, par seDoubLe( tx tPulgadas.getText())); mOR.addElement("** RESUMEN DE NEDIDAS ** TOR .addE Lenent ( *_——____________-") , ‘moR. addE lement ( ‘VALOR EN PULGADAS: * + String. format (%.2F*, objM. ‘getPulgadas())); moR.addE Lenent (* moR.addElement( "PIES: + String.format('%.2", objM determinaPies())); moR.addE Lement ( *YARDAS: '+String. format ( "% determinaYardas())) ; moR.addELement ( ‘CENTIMETROS: "+String. format (‘%.2f*, objM. determinaCentimetros())); moR.addELement ( 'NETROS: "+String. format( '%.2f*,objM. determinaletros())) ; ‘UstResumen, setHodel (moR) ; 2F*,objm. } private void btnlinpiarActionPer formed(java.aut event .Actionévent evt) { ‘txtPulgadas.setText('*); ‘txtPulgadas.requestFocus() ; moR.clear()} 3 private void btnSalirActionPerforned(java.awt.event.ActionEvent evt) { ‘int r= J0ptionPane.showOptionDialog(this, ‘Estas seguro de salir...2", ‘Medidas', JOptionPane.YES_NO_OPTION, opt TonPane.QUESTION MESSAGE, mL, mull, mutt) | af (r 0) { System.exit(@); ¥ 9, Ejecute la aplicacién. Una vez colocado el cédigo en los botones, presione la combinacién de teclas + , Manuel Torres Remon CASO DESARROLLADO 3: Pago de empleados Implemente una aplicacién en Java que permita calcular el salario de un empleado. Al respecto se sabe que el empleado cobra un precio fijo por hora y se le descuenta el 12.5% por concepto de impuesto sobre la renta. La aplicacién debe pedir el nombre del empleado, las horas trabajadas yel sueldo que cobra por hora. Se pide informacion sobre el sueldo bruto, descuento de renta y el salario a pagar. Consideraciones: = Desarrolle la aplicacién usando la metodologia orientada a objetos con el método constructor. = Use el siguiente disefio de interfaz grafica: iw " ‘CONTROL DE PAGO DE EMPLEADOS. = En cuadros de textos, debe ingresar el nombre del empleado, la cantidad de horas trabajadas yel sueldo por hora. = Cree una clase llamada Pago que defina los atributos referentes a los datos del pago de empleados. = Muestre el resultado de la aplicacién en un control JList. Soluci6n: 1. Seleccione la ruta File > New > Java Project. 2. Asigne el siguiente nombre al proyecto: pjAplicacions3. 3. Agregue los paquetes pFormularios y pClases. 4. Agregue un JFrame dentro del paquete pFormularios y asignele el nombre frmPago. 5. Agregue una clase llamada Pago en el paquete pClases. Capitulo 5: Estructura de secuencia 198 6. Disefie la siguiente interfaz y asigne nombres alos controles como se muestra en la imagen: ‘wtEmpleado! txtPagoHora twtHoras Figura 5.5 Controles del formulario de pago. Resumen de controles: ‘atnSaiir £ btnimpiar | fbtnCalcular | fistkesumen a abel TextField TextField TextField JButton JButton Button list CONTROL DE PAGO DE EMPLEADOS txtEmpleado tutHoras twtPagoHora binProcesar binLimpiar btnSalir IstResumen 7. Enla clase Pago coloque el siguiente codigo: package Clases; public class Pago { private String enpleados private int horas; private double pagoHoras public Pogo (String enpleado, int horas, double pagoHora) { ‘this .enpleado ~ empleado; this horas ~ horas; ‘this. pagotora ~ pagotora; Manuel Torres Remon public String vetenpleado() { return enpleado; 3 public void setEnpleado(String enpleado) £ ‘this .empleado ~ empleado; + public int getHoras() ( return Foras; 3 public void setHoras(int horas) { ‘this.horas ~ horas; 3 public double getPagoiiara() ¢ return pagovora; } public void setPagotiora(double pogotiora) < ‘this. pagoHora ~ pagoHora; 3 public double calculasueldoBruto() { return pagotiora * horas; } public double calculadescuento() { return calculaSueldoBruto() "9-125; y public double calculssalario(){ return calculasueldoBruto() -calculabescuento() ; 3 El cédigo del formulario frmPago se muestra como sigue: package pFormilarios; ‘import javax.swing.DefaultListModel; ‘import javax. swing.J0ptionPane; import pClases.Pag0; public class frnPago extends javax.swing. JFrame { DefaultListModel moR ~ new DefauLtListNodel() ; public FrnPago() { “initComponents (); + private void btnCalcularAct ionPer Formed java.aut .event.ActionEvent evt) { ‘String enpleado - txtEnpleado. getText(); Ant horas - Integer.parseInt(txtHoras. getText ()) ; double pagoHiora = Double. parseDouble(txtPagohora. getText()) § Capitulo §: Estructura de secuencia [Tar Pago objP - new Pago(empleado, horas, pagoHora); moR.addElement(*** RESUMEN DE PAGO ***); oR. addE Lement (* moR-addElement ("EMPLEADO: * + objP.getEmpleado()); wmoR-addELement ( *HORAS TRABAJADAS: * + objP.getHoras()) mmoR-addELement ( "PAGO POR HORA: * + objP.getPagoHora()); mo add Lement (‘*——_—____—-"); moR.addElement(*SALARIO BRUTO:' + String. format('%.2f", 0bjP.calculasueldoBruto())) moR.addElement(*DESCUENTO:* + String. format (*%.2f', ‘obj .calculabescuento(})); moR.addElement(*SALARIO:' + String. format('%.2", objP. caleulasalar io())) 5 ‘stResumen, setHodel (moR) ; } private void btnLimpiarActionPer formed(java.awt .event.Actionévent evt) txtEmpleado.setText(* txtHoras.setText("'); ‘txtPagoHora.setText(**); ‘txtEmpleado. requestFocus() ; woR.clear()} y private void btnSalirActionPer formed (java.awt .event.ActionEvent evt) int _r - JOptionPane, show0ptionDialog(this, ‘Estas seguro de salir...?', "Pago de empleados', JOptionPane. YES_NO_OPTION, BOptionPane. QUESTION MESSAGE, mutt, mull, mutt) ; if (r -- 0) { System.exit (0); 3 9. Ejecute la aplicacién. Una vez colocado el cédigo en los botones, presione la combinacién de teclas + . CASO DESARROLLADO 4: Venta de productos Implemente una aplicacién en Java que permita determinar los montos que se generan de la venta de libros. La aplicacién debe permitir seleccionar el producto y una cantidad para determinar los célculos; asimismo, cuando se selecciona un producto el precio deberd mostrarse de forma auto- matica. Los productos que son parte del proceso de venta son los siguientes: Visual Basic 2015. $50.00, Java Fundamentos. $45.50, Aplicacioneswebcon PHP $55.00 HTMLSy css3 $3550 BOM desaroode aplicaciones con ava] Manuel Torres Remon Asimismo, véanse los siguientes descuentos segin la cantidad comprada: eee <5 0% Entre6y 10 5% Entre ly 20 10% >20 30% Consideraciones: = Desarrolle la aplicacién usando la metodologia orientada a objetos con los métodos get y set. = Use el siguiente disefio de interfaz grafica: = Debe seleccionar el producto a comprar e ingresar una determinada cantidad. = Cree una clase llamada Venta que defina los atributos referentes a los datos de la venta de productos. = Valide todos los valores ingresados mostrando un mensaje de error si fuera necesario. m= Muestre el resultado de la aplicacién en un control JList. Solucion: 1, Seleccione la ruta File > New > Java Project. 2, Asigne el siguiente nombre del proyecto: pjAplicacions4. 3, Agregue los paquetes pFormularios y pClases. 4. Agregue un JFrame dentro del paquete pFormularios y asignele el nombre frmVenta. 5, Agregue una clase llamada Venta en el paquete pClases. Capitulo §: Estructura de secuencia [Tar 6. Disefie la siguiente interfaz y asigne nombres a los controles como se muestra en la imagen: ‘CONTROL De VENTA PRODUCTOS SELECCIONE W PRODUCTO a ‘cboProducto} 2 RECO BL PRODUTO ibiPrecio |b [asso Bom, ‘wtCantidad btnComprar’ PROOUCTO. Java findameros cormono 2 (sta 1 dlabel CONTROL DE VENTA DE PRODUCTOS 2 SComboBox cboProducto 3 STextField twtCantidad 4 dtabel IbiPrecio 5 Button btnComprar: 8 ist Ist 7. Enlaclase Venta coloque el siguiente codigo: package pClases; public class Venta { private String productos private int cantidad; public String getProducto() { return producto; 3 public void setProducto(String producto) { ‘this. producto ~ producto; 3 public int getCantidad() { return Cantidad; } ES Manuel Torres Remon public void setCantidad(int cantided) { ‘this.cantidad ~ cantidad; 3 public double asignaPrecio() { if (producto.equals( ‘Visual Basic 2015")) { return 59; } else if (getProducto() .equals( "Java fundanentos*)) { return 45.50; J else if (getProducto() .equals( ‘Aplicaciones web con PHP*)) { return 55; J else Ff (getProducto() .equals( *HTMLS y CSS3")) { return 25.50; } else { return 3 public double calculasubtotal() £ return getCentidad() * asignaPrecio(); , public double colculabescvento() { 4f (getCantidad() <= 5) { return 0; } else 4# (getCantidad() > 5 4& getCantidad() < 16) ¢ return calculasudtotal() * 6.05; } else if (getCantidad() > 10 && getCantidad() < 28) { return calculasubtotal() * 0.195 ) else { return calculasubtotal() * 0.3; } } public double calculaNeto() ¢ return calculasubtotal()-calculabescuento() } 8. El cédigo del formulario frmVenta se muestra como sigue: package pform:1arios; ‘mport javax. swing. DefaultListModel; import javax. swing. J0ptionPane; ‘import pClases. Venta; public class frni/ente extends javax.swing.JFrane { Venta objventa - new Venta(); public frnventa() ¢ “initComponents(); UenaProductos(); Capitulo 5: Estructura de secuencia [75 void LlenaProductos() { cboProducto.addT tem( ‘Visual Basic 2615"); cboProducto.addItem{ ‘Java fundamentos *); cboProducto.addTtem( "Aplicaciones web con PHP); cboProducto.addI tem( "HTMLS y CSS3"); 3 private void btnConprarActionPer formed java.awt .event Actionévent evt) { Gf (valida) -equals(*")) £ obj Venta. setProducto (String. valuef (cboProducto. getSelectedItem())) 5 obj Venta, setCantidad (Integer .parselnt (txtCantidad. getText())); double precio ~ objVenta.asignaPrecio() double subtotal - objventa.calculaSubtotal() ; ble descuento ~ objVenta.calculaDescuento() ; double neto - objVenta.calculaNeto() ; DefaultListModel moR ~ new DefaultListModel()s moR.clear(); oR addElement (#**Resunen de La venta**); moR.addE Lement (*PRODUCTO: ' + objVenta.getProducto()); oR addE lement ( "CANTIDAD: * + objVenta. getCantidad()) ; oR addE Lement ¢ *——"); moR.addE lement ( PRECIO S/. * + String. format ("%.2F*, precio)); imoR.addELenent ‘SUBTOTAL. S/. ‘+ String. format( %.2f*, Subtotal)); mR. addElenent ("DESCUENTO S/. ‘+ String. format(%.2F?,” descuento) ‘90RaddELement (NETO S/. + + String. fornat(%.2F%, neto)); Ist, setModel (moR) ; } else ( OptionPane. showessageDialog(mll, ‘El error esta en * + valida()) ; y private void choProductoItenStatechanged java. aut event. Ttenévent evt) { String producto ~ String. valucOf (cboProducto.getSelectedItem()) ; ‘objVenta. setProducto(producto) ; double precio ~ objVenta.asignaPrecio(); TblPrecio.setText("" + String. format(%.2F", precio)); 3 String valica() ¢ df (txtCantidad.getText() .equals('")) { return ‘cantidad de producto"; } else 4F (Integer .parseint(txtCantidad.getText()) < @) { return ‘el valor de la cantidad*; } else ( return + 8. Fjecute la aplicacién. Una vez colocado el cédigo en los botones, presione la combinacién de teclas + . Estructura de seleccion '__Implementa aplicaciones usando la sentencia if de forma simple, doble y doblemente enlazada. _Implementa aplicaciones usando la sentencia switch. 61 Generalidades 62 Operadores de relacién 6.3 Operadores logicos 6.4 Instruccién if simple 65 Instruccién if doble 6.6 Instruccién if doblemente enlazada 67 Sentencia switch 6.8 Implementar una condicién logica > Caso desarrollado 1: Renta de autos (usando if doblemente enlazado) > Caso desarrollado 2: Pago de trabajadores (usando if simple) > Caso desarrollado 3: Control de hectareas de algodén y maiz (usando if doble) > Caso desarrollado 4: Control de consumo de agua (usando if doblemente enlazado) > Caso desarrollado 5: Control de pensién de estudiantes (usando switch) Capitula 6: Estructura de seleccién [70 6.1 Generalidades Las aplicaciones que hemos desarrollado hasta el momento se enfocan en la programacién secuencial, es decir, una sentencia se ejecuta después de otra. La ejecucién comienza con la primera sentencia de la funcién y prosigue hasta la ultima, Este estilo de programacién es adecuado para resolver problemas sencillos; pero, conforme se va avanzando en el tema de la programacién y el desarrollo de las aplicaciones, necesitaremos de las sentencias selectivas como elemento estratégico para la obtencién de resultados ldgicos en una aplicacién. Por otro lado, cabe mencionar que la aplicacién con desarrollo secuencial es de gran utilidad cuando la aplicacién asi lo requiera; pero, en determinado momento, la aplicacién requeriré un nimero de posibles alternativas de solucién en lugar de un caso particular. De alli se desprende las estructuras de decisién o también llamadas de seleccién, alternativas 0 condicionales, que se utlizan para tomar decisiones légicas mediante la evaluacién de una condi- cién, donde, luego del resultado, se realiza una u otra instruccién en la aplicacién. La implementacién de una aplicacién conlleva a un flujo de ejecucién de sentencias, las cuales se dividen en tres grandes categorias en funcién del flujo de ejecucidn: las secuenciales, vistas en el capitulo anterior, las selectivas y las repetitivas. En este capitulo se haré referencia al uso de las, estructuras selectivas 0 condicionales usando if y switch en todas sus formas y, asimismo, inte- grandolas a la programacién orientada a objetos. 6.2 Operadores de relacion Es importante reconocer los operadores de relacién porque estos componen una condicién dentro de la estructura selectiva, ya que es por aqui donde la estructura fluye durante el proceso de la aplicacién. A continuacién, se muestra la lista operadores validos para Java: = oan double sveldo ~ 4509 4f (sueldo > 4500) Sedeciara la variable sueldo.con un valor incial de 4500, que luego seré condicionado con aestructura electivaif'simple,comparandost elvalor asignadoa sueldo es superior 4500. ‘int edad - 23; 4# (edad>17) > Mayorque ‘Se declara la variable edad con un valor inicial de 23, que luego sera condicionado con la estructura selectiva if simple, comparando sila edad es superiora 17, Cera ee Mayor igual que < —— Menorque Menor igualque Igual Manuel Torres Remon om double sueldo ~5909; if (suelde >~ 4500) Sedeciara la variable sueldo con un valorinicial de5000, que luego sera condicionado con aestructura selectivaif simple, comparando sel valor asignado asuelda es superior o igual a 4500, ‘int edad - 23; 4f (edad >- 18) Se declara la variable edad con un valor inicial de 23, que luego sera condicionado con la estructura selectiva if simple, comparando sila edad es superior oigual a 18. double precio ~ 59; 4f (precio < 28) Se declara la variable precio con un valor inicial de 50, que luego sera condicionado con la estructura selectivaif simple, comparando i dicho precio es inferior a0 double promedio - 17.103 4f (pronedio < 12.58) ‘Sedeclarallavariable promedio con un valorinicial de 17.10, que luego ser condicionado con la estructura selectiva if simple, comparando si el promedio es menora 12.50, double precio ~ 50; 4f (precio < 19.99) ‘Se declara la variable precio con un valor inicial de 50, que luego sera condicionado con la estructura selectivaif simple, comparando i dicho precio es menor oigual a 19.99. double promedio - 17.16: 4f (pronedio <- 12.49) ‘Se declara la variable promedio con un valor inicial de 17.10, que luego ser condicionado con la estructura selectiva if simple, comparando si el promedio es menor oigual 2 12.49 String categoria - ‘Bebidas'; 4f (categoria -- 'Golosinas*) Se declara la variable categoria con un valor inicial de Bebidas, {que luego sera condicionado para comparar sil valor ingresado es Golosinas;en este caso, el resultado es false, Otra solucién podria ser dela siguiente manera String categoria - ‘Bebidas'; 4f (categoria. equals( ‘Golosinas")) Aint cantidad - 20; 4f (cantidad ~~ 26) Elvalor asignado a la variable cantidad se compara en la estructura condicional;en este caso, el resultado es true. Capitulo 6: Estructura de selecci6n i Diferenteo noesigual 2 Condicional 6.3 Operadores logi String categoria ~ 'Operario’; 4f (categoria != "Operario") Lavariable categoria se verficasies diferente su mismovalor;en este aso, el resultado es false porque el valorsies operario, double nota ~ 2 String condicién ~ nota < 12.5 7 "Desaprobado ': ‘Aprobado '; El cédigo determina sila nota obtenida por un alumno en una evalua ion es aprobada o no. Se debe tener en cuenta que la nota minima aprobatoria es 12.5, mostrando el mensaje Aprobado porque el valor 20essuperiora 12.5. OS Otro factor importante dentro de la condicién de una estructura condicional es el uso de los opera- dores légicos, los cuales permiten unir dos o mds condiciones en una sola unidad légica, es decir, el resultado siempre serd true o false. Cetoa cr) Representala Vlogica, el cual evalda que ambas condiciones 8 sean detipo true para realizar una determi ada accion. Representala Ol6gica, el cual ejecuta una determinada accion solo si una de las condiciones es detipo true. Representa la nega- cién del resultado de una condicién, cin double sueldo ~ 1000; 4f (sueldo>-1099 88 Sueldo<-1500) El cédigo determina silos empleados de una empresa ganan entre $1000.00 y $1500.00 String categoria - ‘Jefe’; 4f (categoria ~"Jefe' || categoria ~~ ‘Gerente Elcédigo determina silos empleados de una empresa tienen la categoria Jefe oGerente. String categoria - ‘Jefe’; if (i(categoria ~~ ‘Jefe’ || categoria 'Gerente")) El cédigo determina si los empleados de una empresa no son de tipo Jefe ni Gerente. Manuel Torres Remon 6.4 Instruccion if simple Si se tiene en cuenta que toda evaluacién emite como resultado un valor légico, ya sea true o false, cuando la instruccidn es simple solo evalia uno de los dos resultados, pero no los dos; eso quiere decir que solo se tomard interés en los valores de un extremo de la condicién. Obsérvese los siguientes formatos: Formato 1: 4f (condicion) sentencia; Formato 2: ¥F (condicion) { sentencial; sentencia2; Falso Verdadero Sentencia Instruccién posterior Dond. = Condici6n. Esa expresién que determina las acciones a realizar siel resultado de esta devuelve true 0 verdadero. Asimismo, hay que considerar que es aqui donde se usan los operadores l6gicos y relacionales. = Sentencia. Es la expresién que se ejecutaré si y solo si la condicién evaluada es verdadera. Se debe tener en cuenta que, sise trata de una sola sentencia, no sera necesario el uso de la pareja de llaves como se observa en el formato uno. Si se implementa mas de dos sentencias, obligatoriamente deben estar encerrados entre llaves, tal como se visualiza en el formato dos. Capitulo 6: Estructura de seleccién [a8 6.5 Instrucci6n if doble Se le denomina doble cuando se especifica sentencias en ambos lados de la condici6n, es decir, habra cédigo cuando el resultado de la evaluacién sea true y también cuando sea false, Se debe considerar que, si son més de dos sentencias o instrucciones, deben estar encerradas entre llaves. Obsérvese los siguientes formatos: Primer formato: 4f (condicion) sentencia_verdadera; else sentencia_falsa; Segundo formato: 4F (condicion) { sentencia_verdaderal; sentencia_verdadera2; } else { sentencia_falsal; sentencia_falsa2; Gréficamente: Instruccién anterior Falso 100 && sueldo < 260) = monto * (18.75/180) ; 4f (sueldo > 200 && sueldo <- 308) = monto * (1215/108) ; 4f (sucldo > 300) descuento ~ monto * (14.65/190) ; t= Aplicar la siguiente tabla de asignacién de costo hora y descuentos con respecto al alquiler de cochera segiin el tipo de auto: Poocemsts | conotors | Deiceeto | ‘Automévil $5.00 12% Camioneta $3.00 10% Omnibus $200 11% Motocicleta $1.00 % String tipo; double costoHora, descuento; Gf (tipo.equals(*Automovil")) { costoHora ~ 5; descuento ~ 8.12; } 4f (tipo.equals('Camioneta')) { costoHora - 3; descuento ~ 0.1 3 4F (tipo-equals( ‘Omnibus ")) { costoHora ~ 2; descuento = 0.11; } 4f (vipo-equals( Motocicleta")) { costoHora - 1; descuento ~ 6.69; otrenee Manuel Torres Remon Para las condiciones if dobles = Determinar los siguientes mensajes seguin la realizacién de los pagos de cuotas en una univer sidad, de acuerdo a la siguiente tabla: Cond Mensaje PAGO stimado estudiante, usted se encuentra al dia en sus pagos’. NOPAGO "Estimado estudiante,recuerde que el retraso en sus cuotas genera moras” String condicion, mensaje; 4f (condicion-equals( ‘PAGO ") mmensaje- 'Estimado estudiante usted se encuentre al dia, en sus pagos'; else mensaje= *Estimado estudiante recuerde que el retraso en sus cuotas generan moras"; = Aplicar descuentos de tipo AFP al importe de sueldo usando la siguiente tabla rad Pears Pearce! Integra 10.0% 2.0% Prima 1.0% 17586 double sueldo, descuentol, descuento2; String Cipoar?; if (tipoAFP -equals( "Integra")){ descuentol - sueldo * (16.8/106) ; descuento2 ~ sueldo * (2.0/180); } else ¢ descuentol ~ sueldo * (11.0/106); descuento2 ~ sueldo * (1.75/108) } Para las condiciones if doblemente enlazadas = Determinar el nombre de la categoria de un empleado segtin la siguiente tabla: A Jefe 8 Administrative c Apoyo D Operario String categoria, descripcion**; 4f (categoria.equals('A")) descripcion ~ ‘Jefe’; else if (categoria-equats('8")) descripcion - ‘Administrative '; else ir (categoria.equals('C")) descripcion ~ 'Apoyo'; else if (categoria.equals('D")) descripcion - "Operario'; otrenee Manuel Torres Remon Para las condiciones if dobles = Determinar los siguientes mensajes seguin la realizacién de los pagos de cuotas en una univer sidad, de acuerdo a la siguiente tabla: Cond Mensaje PAGO stimado estudiante, usted se encuentra al dia en sus pagos’. NOPAGO "Estimado estudiante,recuerde que el retraso en sus cuotas genera moras” String condicion, mensaje; 4f (condicion-equals( ‘PAGO ") mmensaje- 'Estimado estudiante usted se encuentre al dia, en sus pagos'; else mensaje= *Estimado estudiante recuerde que el retraso en sus cuotas generan moras"; = Aplicar descuentos de tipo AFP al importe de sueldo usando la siguiente tabla rad Pears Pearce! Integra 10.0% 2.0% Prima 1.0% 17586 double sueldo, descuentol, descuento2; String Cipoar?; if (tipoAFP -equals( "Integra")){ descuentol - sueldo * (16.8/106) ; descuento2 ~ sueldo * (2.0/180); } else ¢ descuentol ~ sueldo * (11.0/106); descuento2 ~ sueldo * (1.75/108) } Para las condiciones if doblemente enlazadas = Determinar el nombre de la categoria de un empleado segtin la siguiente tabla: A Jefe 8 Administrative c Apoyo D Operario String categoria, descripcion**; 4f (categoria.equals('A")) descripcion ~ ‘Jefe’; else if (categoria-equats('8")) descripcion - ‘Administrative '; else ir (categoria.equals('C")) descripcion ~ 'Apoyo'; else if (categoria.equals('D")) descripcion - "Operario'; Capitulo 6: Estructura de seleccién [738 = Aplicar la siguiente tabla de descuentos con respecto al sueldo de los empleados en una empresa: Menor o igual a $750.00, 750 ‘Superior a $750.00 e inferior a $1400.00, 12.50 ‘Superior a $1400.00 e inferior a $2100.00 1450 ‘Superior a$2100.00 16.50 double sueldo, descuento-9; 4f (sueldo < 750) descuento ~ sueldo * (7.5/100); else if (sueldo > 750 && sueldo <~ 1490) descuento ~ sueldo * (12.5/180); else if (sueldo > 1490 && sueldo <~ 2100) descuento = sueldo * (14.5/108); else if (sueldo > 2109) descuento ~ sueldo * (16.5/108); = Aplicar la siguiente tabla de asignacién de costo hora y descuentos con respecto a la categoria de los empleados en una empresa: om a Jefe $50.00 18% Administrativo $30.00 15% Apoyo $20.00 12% Operario $750 10% String categoria; double costoHora, descuentos 4f (categoria.equals( "Jefe*)) { costoHora ~ 58; descuento - 0.18; } else if (categoria-equals( 'Administrativo")) { costoHora ~ 30; descuento - 0.15; } else if (categoria.equals( ‘Apoyo")) { costoHora - 20; descuento ~ 0.12; } else if (categoria.equals(‘Operario")) ¢ costoHora ~ 7.5} descuento - 8.1; 70 ee Manuel Torres Remon CASO DESARROLLADO 1: Renta de autos (usando if doblemente enlazado) Una empresa renta autos de tres tipos: pequefios, medianos y grandes. La tarifa del alquiler por dia es $ 15 en el auto pequefio, $ 20 en el auto mediano y $ 30 en el auto grande. Ademés, la empresa cobra $ 0.20/km recorrido en el auto pequefo, $ 0.30/km recorrido en el auto mediano y$.0.40/km recorrido en el auto grande. Sila cantidad de kilémetros recorridos por el auto supera los 10 km, se le aumentara un 2.5 % sobre el monto a pagar por el cliente. Consideraciones: = Desarrolle Ia aplicacién usando la metodologia orientada a objetos con los métodos get y set. = Use el siguiente disefio de interfaz grafica: = Desde un control cuadro combinado, debe seleccionarse el tipo de auto. = Debe ingresar el ntimero de dias alquilados y el valor de kilémetros recorridos en cuadros de textos. = Cree una clase llamada Renta que defina los atributos referentes a los datos de la renta de autos. = Muestre el resultado de la aplicacién en un control JList, Solucion: 1. Seleccione la ruta File > New > Java Project. 2. Asigne el siguiente nombre al proyecto: pjAplicacion62 3. Agregue los paquetes pFormularios y pClases. 4. Agregue un JFrame dentro del paquete pFormularios y asignele el nombre frmRenta. 5. Agregue una clase llamada Renta en el paquete pClases. Capitulo 6: Estructura de seleccién |Ta7 6 Disefie Ia siguiente interfaz y asigne nombres a los controles como se muestra en la imagen: cboTipo {Detkilometros: inhesumea} Resumen de controles: a Ena clase Renta coloque el siguiente cédigo: package pClases; public class Renta { private String tipo; private int dies; private double ki lonetros; public String getTipo() return tp0; 3 public void setTipo(String tipo) ‘this.tipo - tipo; 3 Manuel Torres Remon public int gewDias() [ return oias; } public void setDias(int dies) { this.dias - dias; y public double getkilonetros() { return kilonetros; } public void setki lonetros(double kilonetros) { ‘this. kilonetros ~ kilonetros; y public double doterminatarifac) ¢ double tarifa ~ 0.0; if (tipo.equals( ‘Pequerio')) { tarifa ~ 15; } else iF (tipo.equals( Mediano*)) { tarifa ~ 20; } else if (tipo.equals( ‘Grande")) { tarifa ~ 30; } else tarifa ~ 0; } return tarifa; } public double calculacostot) { if (tipo.equals( *Pequeno")) { return °.2 * kilometros; } else if (tipo.equals( Mediano")) { return 6.3 * kilometros; ¥ else ff (tipo.equals( ‘Grande')) { return 6.4 * kilometros; } else { return 0; + y public double calculationto’) [ double monto - (determinaTarifa() * dias) + calculacosto(); double 2urento ~ 0; 4f (kilonetros> 19) { ‘aumento ~ monto * (25 / 169.8); ¥ onto - monto + aumento; return onto; Capitula 6: Estructura de seleccién [a 8. El cédigo del formulario frmRenta se muestra como sigue: package ptormilar jos; ‘import javax.swing.DefaultListModel; ‘import pClases.Renta; public class frnenta extends javax.swing.JFrane { DefaultListHodel moR ~ new DeFaultListHodel() ; public frnenta() { “initComponents() 5 UWenaTiporuto() 5 3 void LlenaTiposuto(){ cboT ipo. addItem( ‘Pequefio") cboT ipo.additem( ‘ediano") ; cboTipo.addTtem( ‘Grande " 3 private void binProcesarAct ionPer formed( java.awt-event.Actionévent evt) { Renta objR ~ new Renta(); objR. set Tipo (String. valuedF (cboTipo. getSelecteditem())) ; objR. setDias (Integer .parselnt(txtDias.getText())); ‘objR. setkt Lometros (Double. parseDouble(txtkilonetros. getText())); double tarifa - objR.determinatarifa(); double costo ~ objR.calculaCosto() ; double monto ~ objR.calculatonto() ; ‘moR.addELement (#** RESUMEN DE RENTA DE AUTOS ***); moR-addElement (‘TIPO DE AUTO: "objR.getT1po()) ; moR-addELement (‘DIAS ALQUILADOS: ‘+objR.getDias()) ; moR-addELement ( *KILOMETROS RECORRIDOS: ‘robjR.getKilometros()) ; mmoR-addELement (‘——————") ; ‘moR.addElenent ("TARIFA ASIGNADA: $" + String. format(‘%.2F*,tarifa)); ‘moR.addElement ( *COSTO POR KILOMETROS: $* + String. fornat( "%.2',costo))} TOR. addElement (‘MONTO A PAGAR: $* + String. format( "%.2f *,monto)) ; Istesumen. setHodel (moR) ; 8, Ejecute la aplicacién. Una vez colocado el cédigo en los botones, presione la combinacién de teclas + . 2h Manuel Torres Remon CASO DESARROLLADO 2: Pago de trabajadores (usando if simple) Determine la cantidad de dinero que recibird un trabajador por concepto de las horas extras traba- jadas en una empresa. Al respecto se sabe que cuando las horas de trabajo exceden de 40, el resto se considera horas extras y estas se pagan el doble de una hora normal cuando no exceden de 8; silas horas extras exceden de 8, se pagan las primeras 8 el doble de lo que se paga por una hora normal, yel resto se paga el triple. Consideraciones: = Desarrolle la aplicacién usando la metodologia orientada a objetos can los métodos get y set. m= Use el siguiente disefio de interfaz grdfica LL »___———= a) || peo ve asasavones semen aDAoOn =e ed ror m= Debe ingresar el nombre del trabajador, las horas de trabajo y la tarifa por hora en cuadros de textos. m= Cree una clase llamada Pago, que defina los atributos referentes a los datos del pago del trabajador. m= Muestre el resultado de la aplicaci6n en un control JList. Solucion: 1. Seleccione la ruta File > New > Java Project. 2. Asigne el siguiente nombre al proyecto: pjAplicacion62. 3. Agregue los paquetes pFormularios y pClases 4. Agregue un JFrame dentro del paquete pFormularios y asignele el nombre frmPago. 5. Agregue una clase llamada Pago en el paquete pClases. Capitulo 6: Estructura de seleccién |" 6 Diseife la siguiente interfaz y asigne nombres a los controles como se muestra en la imagen: txtTrabajador| Resumen de controle: btnSalir binLimpiar binProcesar ‘xtTarifa IstResumen Ae Figura 6.2 Controles del formulario de pago de trabajadores. 2 a 2 3 4 5 6 1 8 Jlabel PAGO DE TRABAJADORES TextField tutTrabajador TextField tatHoras TextField ttTarifa JButton btnProcesar Button btnLimpiar Button binsalir list IstResumen Ena clase Pago coloque el siguiente cédigo: package pClases; public class Pago private String trabajador; private double tarifa; private int horas; public String gettrabajador() [ 3 return trabajadors public void setTrabajador (String trabajador) { + ‘this. trabajador - trabajador; Eee Manuel Torres Remon public double getTarifa() ¢ return tarifa; 3 public void setT=rifa(double tar ifs) this. tarifa ~ tarifa; y public int getHoras() ¢ return Foras; ¥ public void setHoras(int horas) { ‘this.horas - horas; y public int determinaextras() { ‘int extras ~ 0; if (horas > 49) { extras ~ horas-40 } return extras; y public int determinaExcesoExtras() { ‘int excede ~ 0; Ant extras ~ determinaExtras(); if ( extras> 8) { excede ~ extras-8; y return excede; } public double calculatonto() { return ((horas-determinatxtras()) * tarife) + (determinakxtras()- determinaéxcesoExtras()) * (tarifa * 2) + (determinaExcesoExtras()) * (tarifa * 3)5 8 El cédigo del formulario frmPago se muestra como sigue: package pformilarios; ‘import javax.swing.DefaultListModel; ‘import javax. swing. JOptionPane; Jmport pClases.Pago; public class frnPago extends javax.swving. JFrame { DefaultListModel moR ~ new DefaultListtodel(); public FrnPago() { initComponents() y Capitulo 6: Estructura de seleccién [Tar private void btnProcesarAct ionPer formed java.awt.event.ActionEvent evt) { Pago objP ~ new Pago); 0bjP. setTrabajador (txt Trabajador .getText()); objP. setHoras (Integer .parseint (txtHoras. getText())); (0bjP.setTar fa (Double. parseDouble(txtTarife.getText())); 4int extras ~ objP.determinaéxtras() -objP .determinakxcesoExtras(); nt exceso ~ obj?.determinatxcesokxtras(); double onto ~ objP.calculaNonto() ; moR.clear(); ‘moR.addElement (***RESUNEN DE PAGO A TRABAJADORES** *) ; ‘moR-addEement (‘TRABAJADOR: '+objP. getTrabajador ()); ‘moR.addELenent (‘HORAS: "+objP.getHoras()) noR.addElenent (‘TARTFA: ‘+objP.getTarifa()) 5 ‘moR.addELenent ( *———___—__-»); ‘moR.addELenent (‘HORAS EXTRAS: "rextras) ; ‘moR-addETement (‘HORAS EXTRAS DE EXCESO: | 'rexceso! moR.addELement (‘MONTO A RECIBIR: ‘+monto) ; IstResumen. setHodel (moR) ; 3 private void binLinpiarActionPer forned( java.awt event Actionévent evt) { txtTrabajador .setText( txtHoras.setText(""); txtTarifa.setText(""); txtTrabajador.requestFocus() 5 moR.clear(); } private void binSalirActionPer forned (java.aut-event.Actionévent evt) { nt r - JOptionPane, showOptionDialog(this, ‘Estas seguro de salir...?", "Pago de trabajadores', JOptionPane. VES_NO_OPTION, JOptionPane. QUESTION MESSAGE, mu, mut, utd) ; if (r-- 0) { System.exit(®) x 8. Ejecute la aplicacién. Una vez colocado el cédigo en los botones, presione la combinacién de teclas + . ma | ED im Manuel Torres Remon CASO DESARROLLADO 3: Control de hectareas de algodon y maiz (usando if doble) Un granjero tiene 150 hectreas disponibles para plantar maiz y algodén. Las semillas de algodén le cuestan $ 3.00 por hectérea y las de matz $ 5.00 por hectérea. Implemente una aplicacién que permita determinar cual es el costo que invertiré el granjero por la compra de cierta cantidad de hectareas de algodén y maiz, sabiendo que la suma de las hectéreas no debe exceder a 150 hecté- reas. Ademds, deberé determinar en qué semilla se invirtié mas dinero. Consideraciones: = Desarrolle la aplicacién usando la metodologia orientada a objetos con los métodos get y set. 1m Use el siguiente disefio de interfaz grafica: HECTAREAEA.SODOR a0 HECTAREACE Ma 0 TOLOEHECTAREAS 150 [costonea.coodn$ 3000 [costone us 2500 ELCOSTOMASATOES PRAM anmrio ge $300 m= Debe ingresar el nombre del trabajador, las horas de trabajo y la tarifa por hora en cuadros de textos. = Cree una clase llamada Pago que defina los atributos referentes a los datos del pago del trabajador. = Muestre el resultado de la aplicacién en un control JList, Capitulo 6: Estructura de seleccién [as Solucién: 1. Seleccione la ruta File > New > Java Project. Asigne el siguiente nombre al proyecto: pjAplicacions3. Agregue los paquetes pFormularios y pClases. 4, Agregue un JFrame dentro del paquete pFormularios y asignele el nombre frmHectareas. 5. Agregar una clase llamada Calculos en el paquete pClases. 6. Disefie la siguiente interfaz y asigne nombres alos controles como se muestra en la imagen: ‘txtMaiz ili btnLimpiar i ‘etAlgodon ‘CosTODEA.c000N 8.5000 CosTove AZ 2500 .COSTO MASALTOES PARAM aman mig S00 IsResumen i binCalcular binsalir iq = ira 6.3 Controles del formularia de control de hectareas. Resumen de controles: 1 dlabel CONTROL DE HECTAREAS ALGODON YMAIZ 2 TextField twtAlgodon 3 TextField txtMaiz 4 sButton binCalcular 5 sButton btnLimpiar 6 JButton binSalir 7 Mist [stResumen 7 | EE Manuel Torres Remon 7. Enla clase Célculos coloque el siguiente cédigo: package Clases; public class Calculos { private int 2lgodon; private int maiz; public int getAlgodon() return 2 goon; y public void setAlgodon(int algodon) { ‘this.algodon - algodon; } public int getMiaiz() return 9212; } public void setioi2(ine maiz) ¢ this.maiz - maiz; , public double calcul aCostoi\lgodon() { return 2lgodon"3; 3 public double calcul aCostoliaiz(){ return maiz"; 3 public String determinaProductoMasAlto() { 4f (calculaCostoAlgodon() calculacostoMaiz()) return calculaCostoAlgadon() ; else return calculaCostoMaiz(); 8 El cédigo del formulario frmHectareas se muestra como sigue: package pformilarios; ‘import javax.swing.DefaultListtodel; ‘import javax. swing. JOptionPane; ‘import pClases.Calculos; public class frmHectarcas extends javax.swing.JFrane ( DefaultListModel moR ~ new DefauLtListModel() ; public frnitectareas() { initComponents(); y Capitulo 6: Estructura de seleccién [ar private void btnCalcularAct ionPer formed java.awt .event.ActionEvent evt) { Calculos objC ~ new Calculos() ; nt algodon ~ Integer. parselnt (txtAlgodon. getText()); Ant maiz ~ Integer.parseInt(txtMaiz.getText()) ; 4 (algodon + maiz > 150) { JoptionPane.showMessageDialog (null, ‘Modifique los valores para que no exceda a 150 hectareas*); } else { (06jC. setAlgodon(algadon) ; 00}C. setMaiz(maiz) ; int total ~ algodon + maiz; double costoAlgodon ~ 0bjC.calculaCostoAlgodon() ; double costolaiz ~ objC.calculaCostoMaiz(); String productoCostoAlto ~ objC.determinaProductoMaskLto() ; double costoAlto ~ objC.determinacostoMasalto() 5, moR.clear(); mmoR addELenent (*** RESUMEN DE HECTAREAS DE ALGODON ¥ MAIZ **"); nok addt lement (‘HECTAREA DE ALGODON: * + algedon) ; oR. addE Lement (‘HECTAREA DE MAIZ: * + maiz); oR. addE Lement 3 oR addElement (*TOTAL DE HECTAREAS: * + total); mmoR.addE lement (*COSTO DE ALGODON $: * + costoAlgodon) ; foR addElement ("COSTO DE MAI $: ++ costoMaiz); moR.addELenent ("EL COSTO HAS ALTO ES PARA * + productoCostoalto + "con un monto de $* + costoAlto) ; ‘UstResumen.setModel (nok); + private void binLinpiarActionPer formed( java.awt event .Actionévent evt) { txtAlgodon.setText(**) ; txtMaiz.setText(*"); ‘txtAlgodon. requestFocus() ; moR.clear(); 3 private void btnSalirActionPer formed (java.awt event. Actionévent evt) { ‘int r - JOptionPane,shonOptionDialog(this, 'Estés seguro de salir...2', ‘Hectareas', J0ptionPane.YES_NO_ OPTION, JOptionPane.QUESTION MESSAGE, mult, pull, Ault); if (r= 0) { System.exit(9) ; y 8. Ejecute la aplicacién. Una vez colocado el cédigo en los botones, presione la combinacién de teclas + . januel Torres Remon CASO DESARROLLADO 4: Control de consumo de agua (usando if doblemente enlazado) Debido ala escasez de agua en una determinada ciudad, se pone en practica un sistema de cobra de agua que penalizaré su consumo excesivo de la forma que se indica en la siguiente tabla: Menora 100 015 Entre 100 y 499 020 Entre 500y 1000 035 Mas de 1000 080 El usuario deberd ingresar un consumo en metros cuibicos para poder determinar el monto a pagar. Se sabe que ademas se le incrementara un impuesto de 2.5% del monto, solo si sobrepasa los $ 600.00. Consideraciones: = Desarrolle la aplicacién usando la metodologia orientada a objetos con los métodos get y set. 1m Use el siguiente disefio de interfaz grafica: = Enun cuadro de texto, debe ingresar el consumo en metros ctbicos. = Cree una clase llamada Consumo que defina los atributos referentes a los datos del consumo de agua = Muestre el resultado de la aplicacién en un control JList. Capitulo 6: Estructura de seleccién. |"as Solucion: 1. Seleccione la ruta File > New > Java Project. 2. Asigne el siguiente nombre al proyecto: pjAplicacion64, 3, Agregue los paquetes pFormularios y pClases. 4, Agregue un JFrame dentro del paquete pFormularios y asignele el nombre frmConsumo, 5, Agregue una clase llamada Consumo en el paquete pClases. 6. Disefie la siguiente interfaz y asigne nombres a los controles como se muestra en la imagen: binCalcular | oun ira 6.4 Controles del formulario de consumo de agua. Resumen de controle: Manuel Torres Remon En la clase Consumo coloque el siguiente cédigo: package pclases; public class Consumo private double consi; public double zetconsumo() { return consuNo} + public void setConsumo(double consumo) { ‘this.consumo ~ consuno; y public double calculaconsuno() 4f (consumo < 108) { return 9.15 * consumo; J else 4 (consumo >~ 100 && consumo < 580) ( return 9.2 * consumo; } else 4f (consumo >~ 590 && consumo < 1688) { return ©.35 * consumo; } else { Irn 8.8 * consumo; 3 public double calculatnpuesto() { 4f (calculaConsumo() > 609) return 2.5 / 100 * calculaConsumo(); else return 0; } public double catculaNeto() ¢ return calculaConsumo() + calculalmpuesto() ; 3 El cédigo del formulario frmConsumo se muestra como sigue: package pFormilarios; ‘import javax.swing.DefaultListModel; ‘import javax. swing. JOptionPane; import pClases.Consuno; public class frmConsuno extends javex.swing.JFrame { DefaultListModel moR ~ new DefauLtListtodel(); public Frnconsumo() { “initComponents() ; 3 Capitulo 6: Estructura de seleccién |" private void btnProcesarActionPer formed (java. aut.event.ActionEvent evt) { 3 Consumo objC = new Consumo () ; objC. setConsuno (Double. parseDouble(txtConsumo..getText ())) double subtotal ~ objC.calculaConsumo() ; double inpuesto - objC.calculalmpuesto() ; double neto ~ objC.calculaNeto(); moR.clear (); mmoR.addE Lement (#** RESUMEN DE CONSUNO DE AGUA ***); moR -addElement( *METROS CUBICOS: "rabjC. getConsumo()) 5 oR addE lement (*@————-"); moR.addE Lement (‘CONSUMO $ "+String. format ("%.2f subtotal); oR. addE Lement (‘INPUESTO $"+String. format (%.2f*, impuesto)); oR. add Lement( ‘MONTO NETO A PAGAR § "+String, formac( %.2F*,neto)) UstResunen.setodel (nok) 5 private void btnLinpiarActionPer forned(java.awt.event Actionévent evt) { ‘txtConsuno.setText(?'); 3 ‘txtConsuno. requestFocus() ; moR.clear(); private void btnSalirActionPer formed (java.aut-event.ActionEvent evt) { int r - JOptionPane.showOptionDialog(this, ‘Estas seguro de salir...?%, ‘Consumo de Agua", JOptionPane, YES_NO_OPTION, JOptionPane.QUESTION MESSAGE, null, null, mutt) ; if (©) { System.exit(@) ; } 8. Ejecute la aplicacién. Una vez colocado el cédigo en los botones, presione la combinacién de teclas + , CASO DESARROLLADO 5: Control de pension de estudiantes (usando switch) Implemente una aplicacién que permita controlar los pagos que realiza un estudiante de una universidad particular; en donde el estudiante debe realizar un pago mensual por concepto de pensién, de acuerdo a un monto especificado seguin su categoria: 76 | eae Manuel Torres Remon Consideracione: = Desarrollela aplcacién usando la metodologla orientada a objetos con los métodos get y set m= Use el siguiente disefio de interfaz grafica: a ‘CONTROL DE PENSION DE ESTUDIANTES = En cuadros de textos, debe ingresar el nombre del estudiante y su promedio. m= Debe seleccionar la categoria del alumno desde un cuadro combinado. = Aplique un descuento segiin el promedio obtenido: 18.2 20>15% 16a 1799>12% 14a 1599>10% Menor 2 13.99 no hay descuento = Cree una clase llamada Pensién que defina los atributos referentes a los datos del control de pensidn de estudiantes. = Muestre el resultado de la aplicacién en un control JList, Solucio1 1. Seleccione la ruta File > New > Java Project. 2. Asigne el siguiente nombre al proyecto: pjAplicacion6s. 3. Agregue los paquetes pFormularios y pClases. 4, Agregue un JFrame dentro del paquete pFormularios y asignele el nombre frmPension. 5, Agregue una clase llamada Pensién en el paquete pClases. Capitulo 6: Estructura de seleccién iz 6. Disefie la siguiente interfaz y asigne nombres a los controles como se muestra en la imagen: a _— = ‘CONTROL DE PENSION DE ESTUDIANTES. cboCategoria btnProcesar I Sy c— ‘txtEstudiante Figura 6.5 Controles del formulario de control de pension de estudiantes, Resumen de controles: 1 dlabel (CONTROL DE PENSION DE ESTUDIANTES 2 STextField txtEstudiante 3 STextField txtPromedio 4 sComboBox cboCategoria 4 JButton binProcesar: 5 Button binLimpiar 6 Button bbtnSalir 7 dist IstResumen 7. Enla clase Pensién coloque el siguiente cédigo: package Clases; public class Pension { private String estudiantes private string categoria; Private double pronecio; public String getestudiante() { return estudiantes + 238 Manuel Torres Remon public void setEstudiante(String es ‘this estudiante - estudiante; ¥ public String getCategoria() { return categoria; y public void setCotegoria(String categoria) { ‘this categoria - categoria; } public double getPronedio() ( return provedio; } public void sctPronedio(double promedio) ‘this.pronedio ~ promedio; + public double calculaPension(){ switch (getCategoria()){ case 'A': return 950; "81: return 500; ‘Ch: return 460; ult: return 429; } public double calculaDescuento(){ 4f (getPronedio()<-13.99) return 0; else if(getPronedio()<15.99) return @..1*calculaPension(); alse if(getPronedio()<17.99) return @..12*calculaPension(); else return @..15*calculaPension(); } public double calcula\uevaPension() { return calculaPension() -calculaDescuento() ; } 8 El cédigo del formulario frmPension se muestra como sigue: package pformilarios; import javax.swing.Defaultlisttodel; ‘import javax. swing. JOptionPane; ‘import pClases.Pension; public class frnPension extends javex.swing.JFrane { DefaultListModel moR ~ new DeFaul public frnPension() { “initComponents (); Venacategoria(); istModel() 5 Copitulo 6: Estructura de seleccién [Tar void Llenacategoria(){ cboCategoria.addTtem( "A cboCategoria.addItem( *B*); cboCategoria.addItem( *C*); cboCategor ia-addItem( 'D") 5 + private void binProcesarAct ionPer formed (java.awt .event.ActionEvent evt) { Pension objP ~ new Pens ion(); objP. setEstud iante(txtEstudiante.getText()) 5 obj. setCategor ‘a (String. valueOf (cboCategoria. getSelectedT tem())) ; 0b}? setPronedio(Double, parseDouble( txtPronedio. getText())); double pension - 0bjP.calculaPension(); double descuento ~ objP.calculeDescuento() ; double nuevaPension - obj?.caleulaNuevaPension() ; moR.clear(); ‘moR_addElement (*** RESUMEN DE PAGO DE PENSIONES ***); moR.addElenent (‘ESTUDIANTE: 'vabjP. getEstudiante()); ‘moR_addElenent ("CATEGORTA: "+objP.getCategoria())3 ‘moR.addElenent ( *PROMEDIO: "+abjP. getPronedio() ‘moR addElenent (‘\———_——- "); ‘noRaddElenent( ‘PENSION § "+String. format %.2f ',pension) ); ‘moR.addElement ( ‘DESCUENTO $ "+String. format ".2f *,descuento)) ; ‘TOR. addELement( ‘NUEVA PENSION $ "+ String. format ('%.2f *,nuevaPension)) ; LstResumen.setodel (moR) ; private void binLinpi arActionPer formed (java. awt event Actionévent evt) { ‘textEstudiante.setText('"); txtPronedio.setText("*); choCategoria.setSelectedIndex(@); moR.clear(); txtEstudiante. requestFocus(); 3 private void binSalirActionPer formed( java.awt.event.ActionEvent evt) { ‘int r - 3OptionPane,shonOptionDialog(this, 'Estés seguro de salir...?", 'Pensién', J0ptionPane.YES_NO_ OPTION, JOptionPane.QUESTION MESSAGE, mult, putt, Aull); if (r-- 0) { System.exit(®); y 8. Ejecute la aplicacién. Una vez colocado el cédigo en los botones, presione la combinacién de teclas + . Estructura de repeticion | Implementa aplicaciones usando los contadores y acumuladores de programacién. '& Implementa aplicaciones usando estructuras de repeticién. 71 Generalidades 72 Contadores 73 Acumuladores 74 Estructuras repetitivas 75. Variables y métodos de clase: modificador static > Caso desarrollado 1: Control de registro de participantes (usando contadores) > Caso desarrollado 2: Registro de alquiler (usando acumuladores) > Caso desarrollado 3: Registro de venta (usando for) > Caso desarrollado 4: Control de pago (usando modificador static) Capitulo 7: Estructura de repeticion [8 7.1 Generalidades Los contadores y acumuuladores tienen la misién de realizar célculos acumulativos que con una expresidn simple no se pueden implementar, y es que obligatoriamente toda variable contadora ‘© acumuladora debe ser inicializada en un valor. Por otro lado, si estas variables son atributos de clase, entonces deben ser declarados coma estaticos Asimismo, las estructuras repetitivas se utilizan cuando se quiere que un conjunto de sentencias, se ejecute un cierto nimero de veces. También se denomina bucle o ciclo de repeticiones a todo proceso que se repite un cierto ntimero de veces dentro de un método en Java. Principalmente existen dos tipos de estructuras repetitivas: la sentencia for, que define el ciclo de repeticiones claramente en su formato, y la sentencia while, que condiciona el ciclo de repeticiones. 7.2 Contadores Es una variable de tipo entero, cuyo valor acumiula las veces que se pasa por ella. Se suele deno, minar contador cuando la variable incrementa o decrementa de 1 en 1 Formato: Valor constante - contador - contador + 1 t ‘t_variable contadora Variable contadora actual Donde: = Valor constante. Para que se considere un contador, este valor debe ser constante; normal: mente para conteos positivos debe ser +1 y para conteos negativos -1. = Variable contadora. Es el ultimo valor del contador. = Variable contadora actual. Es el nuevo valor del contador después del conteo. Hay que tener en cuenta que cuando vimos el tema de operadores en Java se listé los operadores aritméticos unarios de incremento y decremento, Se presentan, a continuacién, algunas analogias sobre los contadores: Cerne eae! cEmpleados - cEmpleados + 1; cEmpleados++; cEnpleados¢=1; Contar el ntimero de notas registradas, para este caso se aplica un conteo en forma de decremento, Notas ~ cNotas-1; Notas; cNotas--1; ern tote anes Pe eee ee ‘eBoton ~ cBoton + cBoton++; ‘cBoton+=2; cBotont+} a Menvel oes Reon 7.3 Acumuladores Un acumulador o totalizador suele utilizarse para acumular resultados producidos en las iteraciones de un bucle o de llamadas sucesivas. Se parece en estructura a los contadores, con la diferencia que los acumuladores no tienen un valor constante sino més bien variable. Formato: Valor dinémico C acumulador ~ acumulador + x t ‘t__ variable acumuladora Variable acumiuladora actual Donde: = Valor dindmico. Este valor tiene que ser una variable que tenga diferentes valores cada vez que se invoca a un acumulador. = Variable acumuladora. Es el ultimo valor del acumulador. = Variable acumuladora actual. Es el nuevo valor del acumulador después de una acumulacién de valor. Algunos ejemplos de acumuladores son: aes ‘afdad ~ a€dad + edad; ‘aEdad += Edad; eae ores aSueldo ~ aSueldo + sueldos ‘aSueldo + sueldos 7.4 Estructuras repetitivas Son aquellas que permiten repetir una secuencia de instrucciones o expresiones un ntimero deter- minado de veces, dicha cantidad sera especificada por el programador. También son llamados bucles o ciclos que permiten repetir las instrucciones un determinado nimero de veces. Algunos casos donde las estructuras de tipo repeticién pueden encajar son los siguientes: = Imprimir un mismo documento muchas veces. = Establecer un limite de veces de ingreso de un valor a un usuario; por ejemplo, en un cajero automatico solo esté permitido errar 3 veces el ingreso de la clave. Un ejemplo practico podria ser el caso de unos atletas corriendo sobre una pista de atletismo, en la cual tienen que dar cierto nimero de vueltas para completar una carrera. Capitulo 7: Estructura de repeticién [a8 Figura 7.1 ciclo de repeticiones en un circuito de carrera, Una estructura repetitiva tiene un objetivo especifico siempre y cuando se integre a los contadores © acumuladores, por ejemplo: = Determinar el nimero de vueltas realizadas por un atleta. = Determinar el total acumulado de kilémetros por cada vuelta, m= Determinar la maxima aceleracién realizada por toda la carrera Hay que tener en cuenta que las estructuras de repeticién estan presentes en diferentes actividades que realizamos, como, por ejemplo, pasear en bicicleta y dar vueltas en un parque o dirigimnos a nuestro trabajo todos los dias. 7.4.1 Estructura de repeticién for La estructura for ejecuta un nimero determinado de veces un conjunto de sentencias o instruc- ciones y controla de forma automatica el niimero de iteraciones que esta realiza. Su formato se basa en la siguiente estructura: Estructura repetitiva io petit for(int § 0; iss) I tL contador Limite Valor inicial Cuerpo del ciclo for Figura 7.2 Estructura de la sentencia for. Donde: = Valor inicial. Define el punto de inicio del ciclo de repeticiones. Hay que tener en cuenta que solo se puede usar el operador igual para dicha asignacién y que la declaracién de la variable se puede realizar a nivel externo del ciclo for. = Limite. Define el valor final del ciclo de repeticiones. Los operadores que se pueden usar son 2 | Ee Manuel Tores Remon = Contador. indica la forma del ciclo de repeticiones. Asi pues, cuando se dan ciclos de forma ascendente, se usa el operador +; mientras que, en el caso de ciclos descendentes, el operador = Cuerpo del ciclo for. Aqui se definen las sentencias o instrucciones que se repetiran segun el limite impuesto al ciclo de repeticiones. De forma grafica, la sentencia for se muestra de la siguiente manera: Tor(Valorinicial; Valor Maximo; Incremento) Verdad Instrucciones repetidas Instruccién posterior Figura 7.3 Diagrama de la sentencia for. A continuacién, se presenta una lista de situaciones para el ciclo for: = Listarlos 10 primeros ntimeros usando la estructura for. for(int i-1;)<-) sive) Opt ionPane. showessageBox( ‘mult + 3 = Listar los 10 primeros nimeros en forma descendente usando la estructura for. for(int 1-19; > s--) JoptionPane. showMessageBox( ‘mul ', 1) 3 = Listar los divisores de un determinado nimero entero. Gnt 9 - 16; for(int i-1;i<-n;i++) { Gf (1% 1 ~= 6) JOptionPane. showMessageBox (taut, 1) 5 } Capitulo 7: Estructura de repeticién [Tar 7.4.2 Estructura de repeticion wi! La estructura while ejecuta un niimero determinado de veces un conjunto de sentencias 0 instruc- ciones y controla el niimero de iteraciones que esta realiza mediante una condicién logica, es decir, el ciclo de repeticiones inicia bajo una condicién. Su formato se basa en la siguiente estructura le Estructura repetitiva nt j-1; <—— Valor inicial Lg white is10) ¢ vol Ute Le comer Cuerpo del ciclo while Figura 7.4 Estructura de la sentencia while. Donde: = Valor inicial. Aqui se define el valor de inicio que tendré el ciclo de repeticiones con while, = Limite. Define el valor final del ciclo de repeticiones. Los operadores que se pueden usar son =<, = Contador. indica la forma del ciclo de repeticiones. Asi pues, cuando se dan ciclos de forma ascendente, se usa el operador ++; mientras que, en el caso de ciclos descendentes, el operador = Cuerpo del ciclo while. Aqui se definen las sentencias o instrucciones que se repetiran segin el limite impuesto al ciclo de repeticiones. De forma gréfica, la estructura while se muestra de la siguiente manera: "1) Opt ionPane..showMessagetiox( ‘aul, 1); = Listarlos divisores de un determinado niimero entero. ‘nto - 18; ant i - 15 while (io) © 4f (9 % 4 ~~ 8) JOptionPane, showessageBox( ‘null, 4); 7.4.3 Estructura de repet La estructura do... while ejecuta un ntimero determinado de veces un conjunto de sentencias 0 instrucciones y controla el ntimero de iteraciones que esta realiza mediante una condicién légica. La condicién siempre se evalia al final de la estructura, Su formato se basa en la siguiente estructura: nt _i-1; <—— Valor inicial ce OptionPane. showilessageDialog("mull", 4); } white: 4<718) ; Contador Cuerpo del ciclo do... while Figura 7.6 Estructura de la sentencia do... while. Donde: = Valor inicial. Aqui se define el valor de inicio que tendré el ciclo de repeticiones con do.... while. Hay que tener en cuenta que dicho valor se evalda al final de la estructura while; y mientras sea verdadera la condicién, el ciclo seguira Capitulo 7: Estructura de repeticién ["a8 = Limite, Define el valor final del ciclo de repeticiones. Los operadores que se pueden usar son >)5 = Contador. indica la forma del ciclo de repeticiones. Asi pues, cuando se dan ciclos de forma ascendente, se usa el operador ++; mientras que, en el caso de ciclos descendentes, el operador = Cuerpo del ciclo do while. Aqui se definen las sentencias o instrucciones que se repetirin segiin el limite impuesto al ciclo de repeticiones. De forma gréfica, la estructura do... while se muestra de la siguiente manera: | Instrucciones repetidas Verdad Instruccién posterior Figura 7.7 Diagrama de la estructura do while. A continuacién, se presenta una lista de situaciones para el ciclo do while: = Listarlos 10 primeros nmeros usando la estructura do while. int i-1; do { JOpt-ionPane. shouessageBox( ‘null, 1); } white (i<19); = Listar los 10 primeros numeros en forma descendente usando la estructura do while. ‘nt i-19; do ‘JOptionPane. showMessageBox( taut ', 1); ) white (>-1) 5 = Listarlos divisores de un determinado niimero entero. int 9 - 19; int 1-1; do { 4f (n % 4 -= 8) JOptionPane, showtessageBox( ‘mult, 4) 5 3 white lin); Manuel Torres Remon 7.5 Variables y métodos de clase: modificador static En Java, los atributos que contiene el modificador static en su implementacién son conocidos como atributos de clase. Uno de los posibles usos del modificador static es para compartir el valor de una variable miembro entre objetos de una misma clase. Algunas caracteristicas del modificador static son las siguientes: = Sus atributos son compartidos por todas las instancias de la clase. = Permite definir clases que pueden ser llamadas desde otras clases sin usar objetos. = Permite compartir un valor de una variable miembro entre objetos de una misma clase. La referencia por medio de this a las variables estaticas genera un error, puesto que la variable estatica no puede ser accedida por ningun objeto. 7.5.1 Variable de clase Es una variable que se crea una sola vez para todos los objetos de la misma clase. Formato: visibiLidad statfe tipoDatos nonbreatr ibuto - valorinicial; lad. Puede ser asignada como piiblica o privada; si es declarada como privada, necesi- tard un método get que permitiré devolver el valor. i= Static. Modificador que asigna una variable de clase, = tipoDatos. Es el tipo de datos de la variable de clase, = nombreAtributo. Es el nombre asignado a la variable de clase. = valorinicial. Si el tipo de datos es numérico, se le asignaré el valor cero; en caso de ser una cadena, se le asignard comillas dobles. | Ejemplo. Se necesita contabilizar las veces que se crea el objeto Empleado en una aplicacién. La solucién se da en tres pasos: = Primero, se debe implementar la clase Empleado, public class Fnpleadot private String codigo; private String nombres; private int eded; private static int contacor-a; 25 Capitulo 7: Estructura de repeticién = Segundo, se debe implementar el método constructor. public Enpleado(String codigo,String norbres Amt edad) { ‘this.codigo - codigo; ‘this.nonbres - nombres; this. edad - edad; contador++; = Tercero, se debe implementar un método que devolverd el valor que obtiene la variable de clase contador. public int gercontador(){ return contador; y = Para obtener el valor de Ia variable de clase, se coloca el siguiente script: Enpleado objémp ~ new Empleado(); Opt ionPane.showMessageDialog(mull, ‘El total de Empleados es: * + ‘objEnp. getContadar ()) ; 7.5.2 Métodos estaticos Los métodos static permiten optimizar la memoria en tiempo de ejecucién porno tener que crear instancias para acceder a métodos comunes de los objetos. Formato para la implementacidn de un método estatico: Visibilidad statie tipoDatos nonbrettetodo() { return valor; } Donde: = Visibilidad. Es el alcance (publico, privado o protegido) que tiene el método esté- tico implementado. = static. Define el método de clase. = tipoDatos. Es el valor devuelto por el método de clase; hay que tener en cuenta que el valor devuelto a través del return sea del mismo tipo implementado. = nombreMetodo. Es el nombre asignado al método de clase. = return valor. Es el valor devuelto por el método. Formato para la invocacién de un método estatico: Variable ~ NombreClase..Nombr ele tadoEs ico); Para la invocacién del método de clase no seré necesario importar el paquete, ya que el método serd llamado directamente desde la clase. = | Manuel Torres Remon | Ejemplo. Se necesita contabilizar las veces que se crea el objeto Empleado en una aplicacién, Veamos el script = Primero, se debe implementar la clase Empleado. public class Enploadot private String codigo; private String nondres; private int edad; private static int contador-9; = Segundo, se debe implementar el método constructor. public Fnpleado (String codigo, String nondres Ame edad) { ‘this..codigo - codigo; this.nonbres ~ nonbres; this.edad ~ edad; contador m= Tercero, se debe implementar un método de clase que devolveré el valor que obtiene la variable de clase contador. public static int getContador (){ return contador; } = Para invocar al método, se coloca el siguiente script: JOptionPane.showMessageDialog(null, "El total de Enpleados es: + Empleado.getContador()) ; 7.5.3 Inicializadores de variables de clase Los atributos static son inicializados una sola vez dentro de la clase en forma automatica. Formato para la inicializacién de variables de clase: static { var iableClase-valorInicial; } Donde: m= variableClase. Es el atributo declarado como estatico, = valorinicial. Es el valor inicial del atributo estatico. Capitulo 7: Estructura de repeticin Fy CASO DESARROLLADO 1: Control de registro de participantes (usando contadores) Implemente una aplicacién que permita controlar los asistentes a una fiesta; para ello debera ingresar la edad, sexo (masculino y femenino) y estado civil (soltero, casado, viudo y divorciado) del asistente. Luego muestre las siguientes estadisticas: Total de asistentes . Total de personas mayores de edad . Total de personas menores de edad . Total de hombres . Total de mujeres . Total de solteros Consideraciones: Total de casados Total de viudos Total de divorciados Porcentaje de hombres Porcentaje de mujeres = Desarrolle la aplicacién usando la metodologia orientada a objetos con los métodos get y set, el método constructor y los atributos estaticos para los conteos. Use el siguiente disefio de interfaz grdfica: En un cuadro de texto, debe ingresar la edad del participante. El tipo de sexo debe ser seleccionado a partir del control JCheckbox. El estado civil debe ser seleccionado a partir del control JRadioButton. Cree una clase llamada Participants que defina los atributos referentes a los datos del parti- cipante, ademas de definir los atributos estaticos. Muestre el resultado de la aplicacién en un control JList. Manuel Torres Remon Soluci6n: 1. Seleccione la ruta File > New > Java Project. 2. Asigne el siguiente nombre al proyecto: pjAplicacion71. 3, Agregue los paquetes pFormularios y pClases. 4, Agregue un JFrame dentro del paquete pFormularios y asignele el nombre frmParticipantes. 5, Agregue una clase llamada Participantes en el paquete pClases. 6, Disefie la siguiente interfaz y asigne nombres a los controles como se muestra en la imagen: btoLimplar tsi a btnProcesar chatasculing DOTS rCasado reviudo rdivorciado tstResumen igura 7.8 Controles del formulario de control de personas. Resumen de controles: 1 dlabel REGISTRO DE PARTICIPANTES 2 STextField twtEdad 3 Scheckbox chkMasculino 4 JRadiobutton rbSoltero, 5 JRadiobutton rbCasado 6 JRadiobutton rbViudo 7 JRadiobutton rbDivorciado 8 JButtongroup bgestado 9 Button binProcesar 10 sutton bintimpiar 11 JButton btnSalir 12 dist \stResumen tulo 7: Estructura de repeticion [735 7. Enla clase Participantes coloque el siguiente cédigo: package pClases; public class Participantes { private int edad; private String masculine; private string estadocivil; private static int total-0; private static int tHonbro~ private static int cHujercs~9; private static int tHayores-9; private static int tHecores-; private static int tSolteros-9; private static int cCasados-9; private static int cViudos-o; private static int toivorciados-0; public Participantes() { totality 3 public int getéded() { return eda } public void setEdad(imt edad) { ‘this.edad - edad; } public String gettiasculino() { return masculino; y public void setiasculino(String masculine) { ‘this.masculino ~ masculino; 3 public String getestadocivil() { return estadocivil; } public void setEstadocivil (String estadoCivit) ¢ this estadoCivil - estadeCivil; } public static int gotTotal() { return total; } public static int getthonbre() { return tHonbre; y public static int getttujeres() { return ‘ujeres; } public static int gettliayores() { return tlayores; } Manuel Torres Remon public static int gertiienores() { return ‘lenores; 3 public static int getrsolteros() { return ©Solteros; 3 public static int gettcasados() { return {Casados; } public static int gertViudes() { return (Viudos; 3 public static int getwDivorciados() { return (Divore ados; 3 public void determinaSexa() 4f (masculino.equals( ‘Masculino")) Hombres else ‘tHujeres++; 3 public void determinatdad()¢ 4f (edad>-18) tHayorest+ else ‘tHenores++; } public void determinatstado() { if (estadoCivil.equals( "Soltero")) ‘tSolteros++; else if (estadoCivil.equals( 'Casado")) ‘tCasados++; else if (estadoCivil.equals( ‘Viudo")) ‘tViudos++s else ‘Divorciados++; El cédigo del formulario frmParticipantes se muestra como sigue: package pFormularios; Amport javax.swing.DefaultListModel; ‘import javax. swing. JOptionPane; ‘import pClases.Participantes; public class frnParticipantes extends javax.swing.JFrane { DefaultListMadel moR ~ new DefaultListtodel(); public frnParticipantes() { nitComponents() 5 3 pitulo 7: Estructura de repeticién | private void btnProcesarActionPer formed(java.aut .event.ActionEvent evt) { $f (vatsea() equals(*")) Participantes objP ~ new Participentes(); objP . setEdad (Integer .parseInt (txtEdad. getText())) 5 4f (chkascul ino. isSelected()) { ‘obj. setMasculino( Mascul ina") ; } else { objP. setMasculino( *Fenenino'); ¥ 4f (rbsoltero.isselected()) { ‘objP. setéstadoCivil( *soltera " } else 4F (roCasado. isSelected()) { objP. setEstadaCivil( *Casado"); } else 4F (rbViudo. isSelected()) { objP. setEstadoCivil( "Viudo"); | else { objP. setEstadoCivil( *Divorciado ‘0b}P..determinaédad() ; ‘objP.determinaSexo() ; ‘0bjP.determinatstado() ; Ant total - objp.getTotal(); Ant totalMayor ~ objP. gettMayores() nt totalMenor ~ objP.gettMenores() ; int totalHonbres - objP.gettHonbre() ; int totalMujeres - objP.gettMujeres(); Ant totalsolteros - objP.gettSolteros(); Aint totalCasados ~ objP.gettCasados() ; Ant totalviudos ~ obj?.gettViudos() ; Ant totalDivorciados ~ obj?.gettDivorciades() ; ‘int porcentajeHionbres ~ (totalHonbres * 108) / total; nt porcentajeMujeres ~ (totalMujeres * 196) / total; oR. clear(); mmoR -addElement('** ESTADESTICAS ***); oR -addElement( ‘El Total de Asistentes es: * + total); nmoR addELenent(*El Total. de Personas mayores es: ' + totalMayor); nmoR-addElenent( ‘EL Total de Personas menores es: * + totalMenor) smoR add Lenent ( #— mmoR-addElenent (‘EL Total de Honbres es: * + ‘totalHonbres); ‘moR-addElenent (‘El Total de Mujeres es: ' + totalMujeres); smoR -addELenent ( #9, nnoR-addELenent ‘El Total de Solteros es: ' + totalsolteros) ; ‘moR addElenent (El Total de Casadas es: ' + totalCasados); mmoR addElement('El Total de Viudos es: ' + totalv/iudos); ‘moR add lenent (‘El Total de Divorciados es: * + totalDivorciados) ; ‘moR add Lenent (#9; ‘oR, addElenent(% de Horbres es: * + (totalHonbres * 198) / total); ‘oR: addFlenent( % de Mujeres es: + (totalMujeres * 109) / total); ‘UstResunen. setHodel (oR) 5 ) else ( 30ptionPane..shontlessageDialog(mull, valida()); + Manuel Torres Remon private void btn! inpiarActionPerformed (java.awt.event.ActionEvent evt) £ ‘txtEdad. setText(**); txtEdad. requestFocus(); moR.clear(); rbSoltero. setSelected(true) ; chkMascul ino. setSelected (false) 3 private void btnSalirActionPerformed(java.awt .event .ActionEvent evt) £ int 1 ~ JOptionPane.shonOptionDialog(this, ‘Estas seguro de salir...2", ‘Acumuladores y Contadores', JOptionPane.vES_NO_OPTION, JOptionPane QUESTION_MESSAGE, mull, mult, mull) ; if (r -- 0) f System.exit (0) } String valida() ¢ Gf (txtdad. getText() .equals("*) || Integer.parseint(txtEdad.getText()) <0) return ‘Edad del Asistente..! 1!" } else Af (1 (rbSoltero.isSelected() || rbCasado.isSelected() || rbviudo.isSelected() || reDivorciado.isSelected())) { return ‘Estado Civil del Asistente..!!! "5 } else ¢ return "5 3 9, Ejecute la aplicacién. Una vez colocado el cédigo en los botones, presione la combinacién de teclas + , CASO DESARROLLADO 2: Registro de alquiler (usando acumuladores) Implemente una aplicaci6n que permita apoyar al area de recepcién de un hotel. La aplicacién debe registrar los alquileres que se realizan y el nimero de personas que se hospedan. El hotel cuenta con los siguientes tipos de habitacién: Simple $2000 Doble $40.00 Matrimonial $100.00 Consideraciones: = Desarrolle la aplicacién usando la metodologia orientada a objetos con los métodos get y set, el método constructor y los atributos estaticos para los conteos y acumulaciones. Capitulo 7: Estructura de repeticién = Use el siguiente disefio de interfaz grafica: = Desde el control cuadro combinado, debe seleccionarse el tipo de habitacién. = Debe ingresar el total de dias alquilados y el nimero de personas en control de texto, = Cree una clase llamada Alquiler que defina los atributos referentes a los datos del alquiler, ademds de definir los atributos estaticos para los conteos y acumulaciones. = Debe mostrar los siguientes valores: » Costo por alquiler » Total de alquileres por tipo de habitacién » Reporte porcentual de alquileres por tipo de habitacién » Reporte de personas hospedadas por tipo de habitacién » Reporte de montos acumuulados por tipo de habitacién = Muestre el resultado de la aplicacién en un control JList. Soluci6n: 1, Seleccione la ruta File > New > Java Project. 2. Asigne el siguiente nombre al proyecto: pjAplicacion72. 3. Agregue los paquetes pFormularios y pClases. 4. Agregue un JFrame dentro del paquete pFormularios y asignele el nombre frmAlquiler. Manuel Torres Remon 5. Agregue una clase llamada Alquiler en el paquete pClases. 6. Disefie la siguiente interfaz y asigne nombres a los controles como se muestra en la imagen: R = || neoisrno ve aLquitenes ie re ar ae ee eee Dias [| enone — | xewores meen Jatt-{ vinProcesar TaPersonas AT stiesumen IstEstadisticas Figura 7.9 Controles del formulario de control de habitaciones. Resumen de controles: Clase eo 1 dhabel REGISTRO DE ALQUILERES 2 JCombobox cboHabitacion 3 STextield ttDias 4 STextField twtPersonas 5 Jhist IstResumen 6 dist IstEstadisticas 7 sButton binProcesar 8 JButton btnLimpiar 9 sButton binsalir tulo 7: Estructura de repeticion En la clase Alquiler coloque el siguiente cédigo: package pClases; public class Alquiler private private private private private private private private private private private private private { string hab tacion; nt dias; ‘int personas; static static static static static static static static static static public Aiquite: totals ) public String gettiabitacion() { int int int int int int int int int int total; tSimples tboble; tMatrimonial; pSimple; Dob Le; platrimonial; simple; Doble; nlatrimonial; return hab’ tacion’ y public void setHlabitacion(String habitacion) { this habitacion ~ habitacion; } public int getDias() { return dias; 3 public void setDias(int dias) { this.dias - dias; } public int getPersonas() { return personas; } public void setPersonas(int personas) [ ‘this. personas ~ personas; 3 public static int getTotal() { return total; y public static int gettSinple() { return ¢Sinple; } public static int gettDoble() { return toble; } iz 262 Manuel Torres Remon public static int gottiatrinonial() f return + . CASO DESARROLLADO 3: Registro de venta (usando for) Una ibreria necesita tener el control de las ventas de cuadernos escolares para el ao escolar en curso. Implemente una aplicacién que permita controlar la venta de cuadernos, la cual se realiza mediante la seleccién de un producto y una cantidad determinada. Los precios de los productos son como siguen: eee ae Cuadernos LayConsa 150 Cuadernos Justus 1.90 Cuadernos Stanford 350 Cuadernos David 250 Cuadernos College 3.00 Cuadernos Alpha 450 Capitulo 7: Estructura de repeticién Consideraciones: = Desarrolle Ia aplicacién usando la metodologia orientada a objetos con los métodos get y set. = Use el siguiente disefio de interfaz grafica: = Debe seleccionar un producto desde el control cuadro combinado segtin la tabla proporcio- nada en el caso. = Debe ingresar la cantidad de productos seleccionados por el cliente en un cuadro de texto. = Cree una clase llamada Venta que defina los atributos referentes a los datos de la venta, = Debe validar todos los valores ingresados mostrando un mensaje de error si fuera necesario. = Elsubtotal es el valor acumulado de la lista subtotal, para ello debe usar la estructura repeti- tiva for, ‘= Se deben imprimir todos los valores obtenidos en los controles JList. = Eldescuento representa al 10% del subtotal acumulado, Solucion: 1. Seleccione la ruta File > New > Java Project. 2. Asigne el siguiente nombre al proyecto: pjAplicacion73. 3, Agregue los paquetes pFormularios y pClases. 4, Agregue un JFrame dentro del paquete pFormularios y asignele el nombre frmVenta. 5, Agregue una clase llamada Venta en el paquete pClases, 2 | ee Manuel Tores Remon 6. Disefie la siguiente interfaz y asigne nombres a los controles como se muestra en la imagen: cboProdcto once wincomprar }be aa ar |) Somes oS i ss TstDeseripcon | > TsSubtotal ! Istreco f > isantidad > | i | nazi I Ee Tbisubtotal wintimpiar | eon | cescummos 400 IbIDescuento binSalr = a | TbiNeto ira 7.10 Controles del formulario de control de venta, Resumen de controles: 1 dlabel \VENTADE PRODUCTOS 2 sCombobox coProducto 3 STextField txtCantidad 4 dabel lbisubtotal 5 dtabel IbiDescuento 6 dabel lbINeto 7 dist IstNum 8 dist IstDescripcion 9 dist \stPrecio 10 dist IstCantidad 11 dist [stSubtotal 12 JButton binComprar 13 JButton btntimpiar 14 JButton binSalir Capitulo 7: Estructura de repeticién [ar 7. Enla clase Venta coloque el siguiente cédigo: package Clases; public class venta { private int codigo; private String descripcion; private int cantidad; public int getCodigo() { return cod‘go; } public void setCodigo(int codigo) ‘this.codigo ~ codigo; } public String getDescripcion() £ return descripcion; 3 public void setDescr ipcion(String descr ipcion) | ‘this.descripcion ~ descripcion; 3 public int getCantidad() { return cant idad; 3 public void setCantidad(int cantidad) { ‘this.cantidad ~ cantidad; 3 public double asignaPrecio() { switeh (codigo) { case 0: return 1.5; case 1: return 1.9; case 2 return 3.5; case 3: return 2.5) ease 4: return 3.6; default: return 4.5; + } public double calcvlasubtotal() { return asignaPrecio() * cantidad; } erin Manuel Torres Remon El cédigo del formulario frmVenta se muestra como sigue: package pForm/larios; ‘import java. text DecimalFormat; ‘import javax.swing.DefaultListCel Renderer .UIResource; ‘import javax. swing.DefaultListModel; Amport javax.swing.JOptionPane; ‘import javax. swing. Swingconstants; ‘import pClases. Venta; public class front extends javax. swing. JFrame ( DefaultListModel moNumero ~ new DefaultListNodel(); DefaultListMadel moDescripcion ~ new DefaultListHodel () ; DefaultListModel moPrecio ~ new DefaultListModel (); DefaultListMadel moCantidad - new DefaultListModel() ; DefaultListNodel moSubtotal - new DefaultListModel() ; DecimalFormat df; int oun; public fraventat) ¢ ‘initComponents (5 cargaProductos() ; Gf ~ new DecinalFormat( "##40.60"); void cargaProductos() { cboProducto.addItem( ‘Cuadernos LayConsa " cboProducto.addTten( ‘Cuadernos Justus); cboProducto.addT tem( ‘Cuadernos StanFord " cboProducto. addTtem( ‘Cuadernos David *) cboProducto.addItem( ‘Cuadernos College cboProducto.addTtem( ‘Cuadernos Alpha); 3 private void btnConprarActionPerformed (java.awt.event.ActionEvent evt) { 4f (valida() .equals("")) { Venta objv - new venta(); ‘objV. setCodigo (getProducto()); ‘obj¥. setDescripcion(getDescr ipcionProducto()) ; objV.setCantidad (getCantidad()) 5 double precio ~ obj¥.asignaPrecio(); double subtotal ~ objV.calculaSubtotal () ; ‘mprimirListas(precio, subtotal) ; UtResource posicion ~ new UIResource() ; posicion. setHorizontalAlgrment (SwingConstants. RIGHT) ; ‘UstSubtotal.setCel Renderer (posicion) ; LinpiarControles() ; Capitulo 7: Estructura de repeticién else ( JOptionPane.showlessageDialog(nutt, ‘Error en * + valida()); } } private void btn! inpiarActionPer formed (java.awt event ActionFvent evt) { Viapiarcontroles() ; moNumero. renoveALLElenents() ; moDescripcion.renoveaLlELenents() ; moCantidad.renoveALLELements () 5 moPrecio. ronoveAL Elements () ; moSubtotal. renoveAl Elements () 5 Ybisubtotal.setText(''); UblDescuento.setText(*"); IbINeto. setText(**); rum ~ @; 3 private void btnSalirActionPerformed(java.awt.event.ActionEvent evt) { ‘dnt r ~ JoptionPane.show0ptionDialog(this, ‘Estas seguro de salir...?%, 'Sistena de Ventas", J0ptionPane. YES_NO_OPTION, JOptionPane. QUESTION MESSAGE, pull, null, null); af (r- 0) f ‘System.exit(@); + ¥ String valida() ¢ ‘if (cboProducto.getSelectedIndex() -- -1) { cboProducto.requestFocus() ; return ‘Descripcion del Producto"; } else AF (txtCantidad. getText() -equats(**) || Integer.parseInt(txtCantidad.getText()) < @) { txtCantidad.setText(* txtCantidad. requestFocus() ; return ‘Cantidad comprada'; } else ( return * + void LinpiarControles() { cboProducto. setSelectedIndex (8) ; txtCantidad.setText(''); cboProducto. requestFocus() ; 3 void calcutatotales() { int ~ moNunero.size(); double subtotal ~ for (int i - 9; 1 + , CASO DESARROLLADO 4: Control de pago (usando modificar static) Una empresa desea tener el control de pago de sus empleados. La empresa cuenta con la siguiente informacién: nombres y apellidos del empleado, horas trabajadas, pago por hora segin el cargo y las bonificaciones por modalidad de empleo. Véanse las siguientes tablas: Gerente $20.00 Tiempo completo 20% ‘Administrative $10.00 Tiempo parcial 5% Jefe $800 Operario $350 270 colle de aplicaciones con Java Manuel Torres Remon double descuento - subtotal * 6.1; double neto ~ subtotal-descuento; Ul subtotal. setText (dF, format(subtotal) ); ULDescuenta. setText (d*. format (descuenta) ); IiNeto. set Text (dF. format (neto)); Void inprinirListas(double orecio, double subtotal) ( moNumero.addélenent (num) 5 moDescr ipcion. addé Lenent (getDescr ipctonProduct moPrecio. addEienent (df. fornat(precio)); moCant idad.addE Lenent (getCantidad()) ; moSubtotal..addE Lenent (dF. Format (subtotal)); calcularotates() ; JstNum, setHodel (noNumero) ; UstDescripcion.setHadel (moDescripcion) ; LstPrecio. setNodel (noPrecio) ; [stCantidad. setModel (moCantidad) ; LstSubtotal.setHodel (wosubtotal) Os Ant getProducto() { return cboProducto. getSelectedIndex () y String getDescripcionProducto() return String. value0f (cboProducto.getSelectedItem()) ; 3 Ant getCantidad() { return Integer .parseInt(txtCantidad. getText()); } 9, Ejecute la aplicacién. Una vez colocado el cédigo en los botones, presione la combinacién de teclas + , CASO DESARROLLADO 4: Control de pago (usando modificar static) Una empresa desea tener el control de pago de sus empleados. La empresa cuenta con la siguiente informacién: nombres y apellidos del empleado, horas trabajadas, pago por hora segin el cargo y las bonificaciones por modalidad de empleo. Véanse las siguientes tablas: Gerente $20.00 Tiempo completo 20% ‘Administrative $10.00 Tiempo parcial 5% Jefe $800 Operario $350 Capitulo 7: Estructura de repeticin Ti Se pide calcular: = Total de empleados registrados = Total de empleados registrados como gerentes Total de empleados registrados como administrativos Total de empleados registrados coma jefes = Total de empleados registrados como operarios = Cantidad de empleados que ganan menos a $ 1200.00 = Cantidad de empleados que ganan entre $ 1200.00 y $ 2500.00 '= Cantidad de empleados que ganas mas de $ 2500.00 Consideraciones: = Desarrolle la aplicacién usando la metodologia orientada a objetos con los métodos get y set, los modificadores static y el método constructor. = Use el siguiente disefio de interfaz grafica: m= Enun cuadro de texto, debe ingresar el nombre del empleado, asi como las horas de trabajo, = Debe seleccionar un cargo y una modalidad de trabajo a partir de controles JCombobox, = Cree una clase llamada Pago que defina los atributos referentes a los datos del pago. = Debe validar todos los valores ingresados mostrando un mensaje de error si fuera necesario. = Muestre los datos del empleado en un control JList. m= Muestre las estadisticas en un control JList. EM desarotode aplicaciones coniava8 | Manuel Tores Remon Soluci6n: 1 Resumen de controles: Seleccione la ruta File > New > Java Project. Asigne el siguiente nombre al proyecto: pjAplicacion74. Agregue los paquetes pFormularios y pClases. Agregue un JFrame dentro del paquete pFormularios y asignele el nombre frmPago. Agregue una clase llamada Pago en el paquete pClases. Disefie la siguiente interfaz y asigne nombres a los controles como se muestra en la imagen: ‘atEmpleada [> wer rmmizan ‘etHoras cboModalidad ebotarg am bbinProcesar btntstadisticas btntimpiar esas ps Istémpleado |} o> IstSueldo IstPagoxHora IstBonificacion IstEstadisticas Figura 7.11 Controles del formulario de control de pago de empleados. E Clase ea JLabel PAGO DE EMPLEADOS TextField txtEmpleado TextField twtHoras ICombobox: cboCargo JCombobox: cboModalidad list Istémpleado z= Capitulo 7: Estructura de repeti 7 dist \stPagoxHora 8 dist \stBonificacion 9 dist IstSueldo 10 dist IstEstadisticas 11 JButton btnProcesar: 12 JButton btnLimpiar 7. Enla clase Pago coloque el siguiente cédigo: package pClases; public class Paco { private String enpleados private String corso; private String sodal ‘dad; private int horas; private static int roral private static int tGerente ~ 9; private static int tAdminstrativo ~ private static int vlefe ~ 0; private static int tOperario ~ 0; private static int cllenosi299 - ©; private static int cintrei2092500 private static int cllas?599 ~ 9; public Pago(String enpleado, String cargo, String rodalidad, int horas) { ‘this.empleado ~ empleado; this.cargo ~ cargo; this modalidad - modalidad; this horas ~ horas; totals; contadorCargos() ; contadorSueldo() } 3 private void contadorCargos() { switch (cargo) { case ‘Gerente! ‘tGerenter+; break; case ‘administrative’ tAdninistrativor+} break; case "Jefe": tlefert; break; default ‘tOperarior+; 24 public double asignaPagextiora() { ‘switch (cargo) { ease ‘Gorente": return 29; case ‘dministrativo" return 10; case "Jefe" return ; default: return 3.5; public double calculaBruto’) { return this.horas * asignaPagoxHora(); 3 public double asignaBonificacion(double bruto) ¢ ‘switch (nodal idad) { case ‘Tiempo completo! return 9.2 * bruto; defautt: return 0.95 * brut; public double calculasueldo() { return calculabrute() + asignaBonificacion (calculaBruto()) ; 3 private void contadorsueldo() { if (calculaSueldo() < 1209) { cHenos1209++ } else AF (calculasueldo() < 2500) cEntrel200y2590++; } else ¢ ‘cHas2500++; 3 3 public String gettnpleado() { return enpleado; } public void setEnpleado(String empleado) { ‘this .enpleado ~ empleado; 3 public String getCargo() { return careo; 3 public void setCargo(String cargo) { ‘this.cargo ~ cargo 3 public String getiodalidad() { return modal idad; 3 Capitulo 7: Estructura de repeticién [as public void setodal idad(string modalidad) { ‘this modalidad ~ modalidad; 3 public int gertioras() ( return horas; } public void setHoras(int horas) { ‘this.horas ~ horas; , public static int gotTotal() { return total; 3 public static int gettGerente() { return werente; 3 public static int getthdministrativo() { return tAdministrativos } public static int gettlefe() { return tefe; } public static int gettOperario() { return tOperar 0; } public static int getclienas1290() { return cienos1200; 3 public static int getcintre1200y2500() return cEntreiz99y2509; } public static int getclas2500() { return las2500; } 8. El cédigo del formulario frmPago se muestra como sigue: package pFormularios; ‘import javex.swing.DefaultListModel; ‘import javax. swing. JOptionPane; ‘import pClases. Pago public class frnPago extends javax.siving. JFrame { DefaultListMadel moEmpleado - new DefaultListModel() ; DefaultListMadel moPagoHora - new DefaultListNodel(); DefaultListMadel moBonificacion ~ new DefaultListModel() ; DefaultListModel moSueldo ~ new DefaultListModel (); DefaultListMadel moEstadisticas ~ new DefaultListModel() 5 Manuel Torres Remon Pago obj public fenPago() { “initComponents (5 Uenacargo() 5 Uenatodalidad() § 3 void Lenacargo() { cboCargo.additen( *Gerente*) ; cboCargo. addi ten ‘Administrative '); cboCargo.addten( ‘Jefe '); cboCargo.additen( ‘Operario'); } void LlenaModatidad() { cbollodalidad.addTtem( ‘Tiempo Completo") ; cbolodalidad.addTtem( ‘Tiempo Parcial *); } String getEmpleado() { return txtEmpleado. getText() ; 3 Ant gettioras() { return Integer.parseInt(txtHoras. getText()); } String getCargo() { return String. value0f (cboCargo. getSelecteditem()) ; 3 String getodalidad() { return String. valucOf (cboNodalidad. getSelectedItem()) ; 3 String valida() ¢ Af (txtEmpleado. getText() .equals(*")) { return ‘ilonbre del Enpleado"; } else if (txthoras. getText() .equals("*) || Integer.parseInt(txtHoras.getText()) < ©) { return ‘Horas de trabajo'; } else iF (cboCargo.getSelectedIndex() -~ -1) { return ‘Cargo del enpleado'; } else 4F (cbotodalidad.getSelectedIndex() ~~ return ‘Hodalidad del empleado'; } else ( return * a) { 3 Manuel Torres Remon Pago obj public fenPago() { “initComponents (5 Uenacargo() 5 Uenatodalidad() § 3 void Lenacargo() { cboCargo.additen( *Gerente*) ; cboCargo. addi ten ‘Administrative '); cboCargo.addten( ‘Jefe '); cboCargo.additen( ‘Operario'); } void LlenaModatidad() { cbollodalidad.addTtem( ‘Tiempo Completo") ; cbolodalidad.addTtem( ‘Tiempo Parcial *); } String getEmpleado() { return txtEmpleado. getText() ; 3 Ant gettioras() { return Integer.parseInt(txtHoras. getText()); } String getCargo() { return String. value0f (cboCargo. getSelecteditem()) ; 3 String getodalidad() { return String. valucOf (cboNodalidad. getSelectedItem()) ; 3 String valida() ¢ Af (txtEmpleado. getText() .equals(*")) { return ‘ilonbre del Enpleado"; } else if (txthoras. getText() .equals("*) || Integer.parseInt(txtHoras.getText()) < ©) { return ‘Horas de trabajo'; } else iF (cboCargo.getSelectedIndex() -~ -1) { return ‘Cargo del enpleado'; } else 4F (cbotodalidad.getSelectedIndex() ~~ return ‘Hodalidad del empleado'; } else ( return * a) { 3 Capitulo 7: Estructura de repeticién a private void btnProcesarActionPer formed(java.aut event. Actionévent evt) { Gf (valida() -equats("")) £ ‘objP ~ new Pago(getémpleado(), getCargo(), getModalided(), gettores()); moEmpleado . addE Lement (getEmpLeado()) ; noPagotiora.addELenent(objP.asignaPagoxHora()) ; double bruto ~ ob5P.ca\culaBruto() ; moBonificacion addE Lement (objP.asignaBonificacion(bruto)) ; moSveldo.addeienent(ob}P.calcutasueldo())s LstEmpleado. setModel (moEmpLeado) ; ‘LstPagoxtora.setMadel (moPagoHora) ; AstBonificacion. setHodel (moBon ificacion) ; AstSueldo. setModel (moSue ldo) ; IstEstadisticas. setModel (nofstadisticas) ; } else ptionPene.showlessageDialog(mull, ‘EL error esté en ‘+ valida()); 3 3 private void binéstadisticastct ionPerformed(java.aut.event.Actionévent evt) £ noEstadisticas.clear(); nofstadisticas.addElenent( ‘El Total de Empleados es: "+ objP.getTotal())s mmoFstadisticas.add€lenent(*———_—- noFstadisticas. addélevent ("El Total de Gerente es: ‘robjP.gettGerente()); mmoFstadisticas.addElenent('El Total de Adninistrativos es: * + 0bjP. gettAdministrativo())3 noFstadisticas.addelenent('El Total de Jefes es: * + objP.gettlefe()); noEstadisticas addélenent( El Total de Operario est * + 0b}? gettOperario()); noEstadisticas.add€Lenent (‘——————__ mmoEstadisticas.addElenent( ‘Cantidad de empleados que ganan menos 2 $1200: "+ 0bj?.getcMenosi269()); noEstadisticas.addElenent( ‘Cantidad de enpleados que ganan $1208 y $2508: "+ objP. getcEntrel200y2500()) ; noEstadisticas.addelenent( ‘Cantidad de enpleados que ganan mas de $2508: "+ objP.geteMas2509()); 8, Ejecute la aplicacién. Una vez colocado el cédigo en los botones, presione la combinacién de teclas + . L manejo de e ambda y xcepciones Wo var c= bot | retom implementa métodos usando Lambda. Reconoce el manejo del bloque try-catch. implementa aplicaciones usando el control de excepciones lava, aa 82 33 Ba as Generalidades Expresién Lambda Bloque try-catch Clausula throw Bloque finally > Caso desarrollado 1: Registro de libros > Caso desarrollado 2: Control de pago de empleados usando Lambda Capitulo 8: Lambda y manejo de excepciones [Tae 8.1 Generalidades Cuando se desarrolla una aplicacién, ya sea en cualquier lenguaje de programacién, siempre se pensard en implementarla con cero errores; sin embargo, muchas veces no se prevé los posibles errores que un usuario puede ocasionar en la aplicacién. Esto resulta algo muy particular. Asi, por ejemplo, cuando se compra un producto en una tienda comercial, siempre nos aseguran que el aparato no tendra problemas, al menos, en varios afios; no obstante, a veces no sucede asi y quedamos algo decepcionados y sin ganas de volver a comprar en dicha tienda. Algo asi sucede con las aplicaciones, pero la vida es asi, estamos rodeados de errores. Y solo la experiencia sera la que nos permita evitar, prevenir o anticipar los posibles errores que se pueden ocasionar en una aplicacién. Dicho esto, no pensemos que controlar los errores sea complicado, sino mas bien que el control de estos no debe quedar desapercibido por el desarrollador. En Java, las situaciones que pueden provocar un fallo en la aplicacién se las denomina excepciones. Este capitulo se enfocard en mostrar la mejor manera de cémo controlarlas. Las excepciones en Java son objetos de clases derivadas de la clase base Exception. Existen también los errores internos, que son objetos de la clase Error que no estudiaremos. Ambas clases, Error y Exception, son clases derivadas de la clase base Throwable. Java implementa el cédigo de intento para controlar las excepciones que se pueden ocasionar en una aplicacién. Este bloque de cédigo protege la secuencialidad del script, de modo que, si se produce una excepcién, esta seré controlada mediante un mensaje o alguna instruccién y no permitiré devolverlo al script de la aplicacién, como ocurre con cualquier excepcién no controlada. Los errores que se pueden encontrar en las aplicaciones podrian ser: = Por divisiones entre cero, = Alintentar acceder a elementos de arreglos con un indice mayor al declarado. = Alacceder a una base de datos. = Enel manejo de archivos (existencia 0 permiso). = Errores definidos por el usuario. 8.2 Expresion Lambda Es una de las nuevas caracteristicas que presenta Java 8. Esta nos permitird simplificar bloques de cédigo que implementabamos en los métodos de devolucién de valor. Lambda, por caracte- ristica, define un proceso de forma directa, lo cual nos permitird ahorrar lineas de cédigo y nos sumergird en una nueva propuesta de implementacién de métodos. Dichos métodos ya han sido implementados por otros lenguajes de programacién. A continuacién, se muestran algunas particularidades de la definicién de Lambda: = Definiendo parémetros con especificacién de tipo de datos y devolviendo la suma de los mismos mediante la cldusula return: (int ni, dnt n2) => { return ni +92; } Manuel Torres Remon Como se trata de una sola expresién de devolucién, también podria escribirse de la siguiente manera Gint ni, dnt n2) -> ni + n25 = Definiendo parametros sin especificar el tipo de datos y devolviendo valores sin el uso de la cléusula return: (nl, m2) -> nl + nd}, = Definiendo un solo parémetro: nl => al * 2; = Definiendo sin valores de entrada y devolviendo un valor: Ont = Definiendo un tnico parémetro sin definicién de tipo, y un retorno sin valor: nl > { inprimir(ni); ) 2Cémo implementar un método Lambda en Java? Obsérvese los siguientes casos: | Método Lambda que permita sumar dos nimeros enteros. 1, Definir la interface public interface Operacion { int calcular(int nl, int 2); 3 2. Definir el método Lambda public Operacion calculasuma = (ni, n2) -> nl + n2; 3, Invocar al método Lambda ‘int sua - calculaSuma.calcular (168,59) ; Método Lambda que determine el costo basado en el nombre de un producto. 1. Definir a interface public interface Operacion { double determina (String producto) ; 3 Capitulo 8: Lambda y manejo de excepciones [Tes 2. Definir el método Lambda je Operacion asignaPrecio ~ (producto) -> { ‘4F (producto.equasl( ‘Lavadora")) return 1200 Uf (producto.equasl( 'Refrigeradora*)) return 3500; else if (producto.equasl¢ ‘Cocina')) return 790; else return 0; 3 3, Invocar al método Lambda double precio ~ asignaPrecio.determina( ‘Lavadora"); 8.3 Bloque try-catch Un bloque try permite proteger un script que podria generar algin tipo de error al ejecutar una aplicacién. Formato: try } eateh(clase identificador) { 3 Dentro del bloque try se coloca todo script que pueda generar algtin tipo de error; al terminar este bloque se define un grupo de instrucciones en un bloque catch. Cada bloque catch es seguido por un paréntesis que contiene una clase y un identificador, os cuales son considerados como datos de entrada para cada seccién catch; el tipo de clase definida dentro de cada seccién catch depende del numero de excepciones que pueden ser generadas por una misma aplicacién. He aqui un script que muestra una excepcién: ‘String sSueldo~ '1000x "; double dSueldo-Double. parseDovbLe(sSuetdo) j JOptionPane.showNessageDialog(mull, "El resultado es: '+dSueldo) ; El error parece ser bien claro, pues se tiene una variable de tipo cadena con un valor inicial de 1000x que, al convertirla al tipo double, genera el siguiente error: 7 | Manuel Torres Remon La excepcién se podria controlar por medio del siguiente script: try ‘String sSueldo- "1000x"; double cSueldo-Double. parseDoubLe(sSueldo) 5 3OptionPane.showMessageDialog(mull, ‘EL resultado es: } eateh(NunberFormatexception ex){ ‘JOptionPane.showMessageDialog(nutl, ex.getMessage()) 5 3 dSuetdo) ; El resultado serfa como se muestra en la siguiente imagen: Ose podria mostrar un mensaje genérico de la excepcién con el siguiente script: try ‘String sSueldo- '1900x "; double dsueldo-Double. ar sedoubLe(sSuelde) ; JOptionPane.showMessageDialog(mutl, ‘El resultado es: *+dSueldo); } eaten Exception ex){ ‘JOptionPane.showMessageDialog(mull, ‘Error en la aplicacién..!! 1); } 8.4 Clausula throw Es la cléusula que permite listar los tipos de excepcién que un método privado puede lanzar. También se la denomina lanzamiento manual de excepcidn. Sus principales caracteristicas, son las siguientes: = Se usa para proteger los métodos de una clase. = Esnecesario usarla con todas las excepciones, excepto la clase Error y RuntimeException. = Cuando se implementa un método, se tiene que especificar la clausula throw; en caso contrario, se genera un error, Formato de implementacién de un método: Visibilidad tipoDatos nonbreNetodo(Parametros) thraws nonbreExcepcion{ } Capitulo 8: Lambda y manejo de excepciones [5 Formato de implementacién de clase heredada de la clase Exception: Public class nonbreExcepcion extends Exception{ public nonbreéxcepcion() { ‘super (‘Mensajel"); } public nonbreéxcepcion(tipo valor) { super (valor); 3 A continuacién, se muestra un ejemplo de como validar un numero entero usando throw: Paso 1. Se implementa la clase validaNota con dos métodos constructores; el primero mostrard e| mensaje "Fuera del Rango". public class validaliota extends Exception: public validaliota(){ super (‘Error al convertir'); } public vel idaliota (String valor) super (valor); } Paso 2. Se implementa el método validaNumero que invoca a la clase validaNota por medio de la cldusula throws. String validalunero(int nota) throws val idaNlotat 4f (notacd || nota>20) ‘throw new yal idaNota() ; return ‘Numero valido'; Paso 3. Se implementa el bloque try-catch, el cual puede colocarse dentro del botén de accién de un formulario. try f ‘int _nota-22; String valide-validatiumero (nota) ; J0ptionPane.showMessageDialog(mull, valida); } eateh (validatiota ex) { JOptionPane. showMessageDialog(null, ex); i Manuel Torres Remon 8.5 Bloque finally Esun bloque que permite ejecutar un conjunto de instrucciones, ocurra o no una excepcién contro- lada con try-catch. Normalmente es usado para liberar recursos de la aplicacién. Formato: try! } eateh(clase identificador) { ) finatty & 3 CASO DESARROLLADO 1: Registro de libros Implemente una aplicacién que permita registrar la siguiente informacién de los libros en una biblioteca: nombre del libro, tipo de editorial (A, 8 0 C), clase de libro (Programacién, Andlisis, Disefio), afio de edicién, nimero de paginas y costo del libro. La aplicacién deberd mostrar los siguientes resultados: m= Numero de libros de Andlisis de la editorial B. = Nombre del libro con el afio de edicién mas reciente. = Nombre de la editorial que tiene el libro con el menor nimero de paginas. = Nombre del libro que tenga el mayor costo. Consideraciones: = Desarrolle la aplicacién usando la metodologia orientada a objetos. = Use el siguiente disefio de interfaz grafica: Capitulo 8: Lambda y manejo de excepciones [Tar = Debe ingresar el nombre del libro, afio de edicién, numero de paginas y el costo en controles de cuadros de textos. m= Debe seleccionar un tipo de editorial, clase de libro a partir de controles Combobox. = Cree una clase llamada Libro que defina los atributos referentes al registro de libro. = Muestre los datos del registro de libros en un control JList. = Muestre las estadisticas en un control JList. Solucion: 1. Seleccione la ruta File > New > Java Project. 2. Asigne el siguiente nombre al proyecto: pjAplicacion81. 3, Agregue los paquetes pFormularios y pClases. 4, Agregue un JFrame dentro del paquete pFormularios y asignele el nombre frmRegistro. 5. Agregue una clase llamada Libro en el paquete pClases. 6. Disefie la siguiente interfaz y asigne nombres a los controles como se muestra en la imagen: wilibro ebokditoral tf ebolibro ‘baPaginas bentimpiar ‘tCosto isiCosto istibro TstARo [ \stéditorial IstPaginas TsClase C inEstadstcas ae Iststadisticas 1 dabel REGISTRO DE LIBRO 2 STextField tatLibro 3 STextField ttAnio 4 STextField twtPaginas 5 STextField txtCosto Manuel Torres Remon Deca cenit 6 sCombobox cboEditorial 7 sCombobox cbolibro a dist \stLibro 9 dist IstEditorial 10 ist IstClase dist IstAno 12 dist IstPaginas 13 dist IstCosto 4 dist IstEstatisticas 15 JButton binRegistrar 16 sutton btnLimpiar 17 sButton binEstadisticas 7. En la clase Libro coloque el siguiente cécigo: package oClases; public class Libro { private string nonbre; private String editorial; private String clase; private int aio; private int paginas: private double costo; private static int tAnalisisa; public Libro(String nombre, String editor iel, String clase, int afo,int paginas double costo) { ‘this .nombre-nonbre; this editorial-edi torial; this .clase-clase; this. afo-afo: this. paginas-paginas; this .costo-costo; conteos(); , public String getNonbre() return ronbre; 3 public void setiiondre(String nonbre) ¢ tthis.nonbre ~ nonbre; 3 public String getFditorial() { return editorial; 3 Capitulo 6: Lambda y manejo de excepciones [Ts public void setiditorial (String editorial) { this editorial ~ editorial; 3 public String getClase() { return clase; 3 public void setClase (string clase) { this.clase - clase; 3 public int getAno() ( return ano; y public void setAno(int aro) { ‘this. afio ~ ano; } public int getPaginas() return paginas; } public void setPaginas(int paginas) { ‘this. paginas ~ paginas; } public double geiCosto() { return costo; } public void setCosto(double costo) { this.costo - costo; } public int getTAnatisis(){ return tAnalisisb; ) void conteos(){ 4f (getClase() .equals( ‘Analisis*) && getEditorial () .equals( 'B*)) tanalisisB++; 8. El cédigo del formulario frmRegistro se muestra como sigue: package peornular ios; ‘import javax.swing.DefaultListtodel; Amport javax. swing. JOptionPane; import pClases. Libro; public class frnRegistro extends javax.swing.JFrane { Libro obj Li; DefaultListModel mol ibro,moEditor ial,moClase,moAho, moPaginas,moCosto; DefaultListModel moEstadisticas; Manuel Torres Remon public frnkepistro() ( initComponents( 5 Uenakdi torial; UenaClase() ; cargatodelos() void cargatlodelos() { ‘mol ibra-new DefaultListModel () 5 noEditorial-new DefaultListNodel(); moClase-new DefaultListModel (); noMo-new DefaultListModel() 5 moPaginas~new DefaultListNodel() ; moCosto-new DefaultListModel () ; noEstadisticas-new DefaultlistModel() ; AstLibro. setModel (moLibro) ; IstEditor ial.setModel (moEdi torial) ; IstClase. setMadel (moClase) ; IstAfio. setModel (moan) 5 AstPaginas.setModel (moPaginas) ; IstCosto. setMadel (maCosto) ; IstEstadisticas. setModel (mofstadisticas) ; void Lenavodelos() { moLibro.addElenent (objL1.getNonbre()) ; moEdi torial. addéLement (objLi .getEdi torial()) 5 moClase.addElement (objLi.getClase()); moAno.addELement (objLi. getAno() ); moPaginas.addE lenent (objLi.getPaginas())5 moCosto.addELement (objL1..getCosto()) ; void LlenaEditorial(){ ‘cboEditorial addi tem(*A"); cbotditorialaddrtem( 'B*); cboEditorial.addrtem( 'C*); void LlenaClase() ‘cboClase.addi ten ( ‘Programacién ) cboClase. addr ten( *andtisis*); cboClase addIten( ‘Diseao') 5 Capitulo 8: Lambda y manejo de excepciones 23 private void btnRegistrarActionPerformed(.) { try objLi ~ new Libro(getLibro() ,getéditorial() ,getClase(), getAno() ,getPaginas() ,getcosto()); Uenatfodelos() } eateh (Exception ex) { JOptionPane.showlessageDialog(null, ‘Error en la Aplicacton * + ex.getMessage()); } String getLibro()( return txtLibro.getText } String getFditorial()¢ return String. valucOF (cbofditorial.getSelecteditem()) ; 3 String getClase() ( return String. value0f (cboClase. getSelectediten()) ; 3 mt getano(){ return Integer.parseInt(txthfo. getText()); 3 int getPaginas(){ return Intoger parser } double getCosto(){ return Double tPaginas. gotText()); arseDouble(txtCosto. getText()); 8, Ejecute la aplicacién. Una vez colocado el cédigo en los botones, presione la combinacién de teclas + . CASO DESARROLLADO 2: Control de pago de empleados usando Lambda Implemente una aplicacién que permita determinar los montos del salario de un empleado. La informacién que se debe ingresar es el nombre completo del empleado, el cargo o categoria y las, horas de trabajo mensual. Debemos tener en cuenta las dos siguientes tablas de valor: La asignacién del costo por hora se establece segtin la categoria del empleado, quedando de la siguiente manera: Jefe $50.00 Administrativo $30.00 Operario $20.00 Servicio $1000 =| Manuel Torres Remon Los descuentos a su salario se establecen bajo el siguiente criterio: a ee Inferioroiguala 750, 1% Entre 751y 1250 12% Entre 1251 y2500 15% Superior 22500 17% La aplicacién deberd mostrar los siguientes resultados: = Los datos ingresados por el empleado. = Elcosto por hora segiin su categoria. = El monto de salario, m= Fl monto de descuento segin la tabla anterior. = Elmonto neto a cobrar por el empleado. Consideraciones: = Desarrolle la aplicacién usando la metodologia orientada a objetos. = Use el siguiente disefio de interfaz grafica: @ 3 x) m= En cuadros de textos, debe ingresar el nombre del empleado y las horas trabajadas. ‘= Debe seleccionar un tipo de categoria a partir del control JCombobox. = Alseleccionar una categoria, automaticamente debe mostrarse el costo por hora. = Cree una clase llamada Pago que defina las interfaces y los métodos Lambda que necesita la aplicaci6n = Muestre los datos del control de pago de empleados en un control JList. Capitulo &: Lambda y manejo de excepciones |" Soluci6n: 1, Seleccione la ruta File > New > Java Project. Asigne el siguiente nombre al proyecto: pjAplicacion82. Agregue los paquetes pFormularios y pClases. 4, Agregue un JFrame dentro del paquete pFormularios y asignele el nombre frmPagoEmpleados. 5, Agregar una clase llamada Pago en el paquete pClases. 6. Disefie la siguiente interfaz y asigne nombres a los controles como se muestra en la imagen: ‘témpleado ‘cboCategoria| TeiCosto btnRegistrar ‘twtHoras Ist Disefio del formulario de control de pago de empleados. Resumen de controles: a 1 Sabet CONTROL DE PAGO DE EMPLEADOS-LAMBDA 2 dtabel Ibicosto 3 STextField txtEmpleado 4 STextField tutHoras 5 sCombobox cboCategoria 6 dist Ist 7 sButton btnRegistrar 2 | eee Manuel Torres Remon 7. Enla clase Pago coloque el siguiente cédigo: package oClases; public class Pago [ public interface operacionescadena { double calcular (String cadena); 3 public interface OperacionesParanetro { double calcular(double decimal) ; y public interface OperacionesdosParanetros ¢ double calculor(double decinal1, double decinal2); 3 public OperacionesCadena calculaCoste ~ (categoria) -> 4f (categoria.equals(‘Jefe')) { return 505 } else 4# (categoria. cquals( ‘Administrativo")) { return 305 } else if (categoria.equals( ‘Operario")) £ return 20; ) else { return 105, } public OperacionesDosParametros calculaSalarion(horas, costo) ->horas*casto; public OperacionesParametro calculaDescuento - (salario) -> { Gf (salario < 750) { return 9.7 * salario; } else Af (salario > 750 && salario < 1258) { return 0.12 * salario; } else if (salario > 1250 && salario <- 2500) { return 9.15 * salario; yp else ¢ return 9.17 * salario; 3 public OperacionesDosParanetros calaulaeto~(salarfo,descuento)->salario-descuento; 8, El cédigo del formulario frmPagoEmpleados se muestra como sigue: package Form larios; ‘import javax.swing.DefaultListiodel; import pClases Pago; public class frnPagoEmpleados extends javax.swing.JFrane { DefaultListNadel moR; Pago objP-mew Pago(); Capitulo 8: Lambda y manejo de excepciones [335 8 public frnPagotmpleados() { “initConponents(); Uenacategorias() ; moR-new DefaultListModel() ; IstR.setHodel (moR) ; void LlenaCategorias(){ cboCategoria.addrtem( ‘Jefe ) ; cboCategoria.addItem( ‘Administrativo"); cboCategoria.additem( ‘Operario"); choCategor ia.addTten( "Servicio"); 3 private void cboCategor iattonStateChanged java.ant event .Ttenévent evt) { ‘String categoria-String.valueOf(cboCategoria.gerSelectedTtem()) ; double costo-0bjP.calculaCosto.calcular (categor ia) ; ThiCosto. setText (String. format("%.2F*, costo)); ) private void btrkegistrarActionPer formed java.aut.event .ActionEvent evt) { String enpleado - txtEmpleado. gettext () 5 String catogoria-String. valueOFf (choCategoria.getSelecteditem()); nt horasInteger.parseint(txtHoras.getText()); double costo-objP.calculaCosto.calcular (categoria) j double salario-obj?.calculaSalario.calcular(horas, costo) double descuento- obj?.calculaDescuento.calcular(selario) double neto-obj?.calculaeto.calcular(salario, descuento) ; moR.addELenent ("EMPLEADO: "rempleado) ; ‘moR.addElenent ("CATEGORIA: categoria) ; MOR. addELement (‘HORAS TRABAIADAS: "+horas) ; ‘moR add lenent (*———____—-); moR-addELenent( ‘COSTO POR HORA: $ '+String. format( MOR. addElenent( ‘MONTO SALARIO: $ "+String. format moRaddElenent (‘MONTO DESCUENTO: $* + ‘String. fornat ("s.2F',descuento)) ; noR.addELenent (‘MONTO NETO: $ "¢String. format( '%.2f ,costo)) 5 .2F*,galario))} Ft neto)) 5 Ejecute la aplicacién. Una vez colocado el cédigo en los botones, presione la combinacién de teclas + . Arreglos var c= Ducptices '@ Comprende los conceptos basicos de los arreglos y poder diferenciarlos por las dimensiones. Implementa aplicaciones matriciales de una y dos dimensiones, logrando asi manipular informacién masiva en una misma aplicacién. 92 33 oa Generalidades Arreglos Arreglo unidimensional Arreglo bidimensional > Caso desarrollado 1: Listado de ntimeros basico > Caso desarrollado 2: Listado de niimeros usando clase > Case desarrollado 3: Certamen de belleza > Caso desarrollado 4: Matriz de ntimeros enteros Capitulo 9: Arreglos [Te 9.1 Generalidades as variables que hemos usado en todas las aplicaciones, hasta el momento, son de tipo simple, es decir, son de una sola caja de memoria y solo pueden contener un valor cada vez. Igualmente, los tipos de datos vistos hasta ahora, como lo son entero (int) y real (double, float), también son considerados simples, puesto que solo pueden almacenar un valor a la vez; es decir, existe una relacién de uno a uno entre la variable y el elemento que es capaz de almacenar. En cambio, un dato de tipo estructurado, como los arreglos, pueden almacenar mas de un elemento a la vez, con la condicién de que todos los elementos deben ser del mismo tipo. Se exponen, a continuacién, los siguientes casos: = Leer una lista de calificaciones de un aula de clases. m= Encontrar la media aritmética de todas las calificaciones. = Listar qué alumnos tienen la calificacién més alta, m= Ordenar la lista de calificaciones en orden ascendente 0 descendente, Ahora, si se quiere registrar 100 0 200 calificaciones sin usar arreglo, tendriamos que declarar 100 0 200 variables diferentes, como, por ejemplo, calificaciont, calificacion2...calificacion200; de esta manera estariamos separando 200 variables, es decir, 200 espacios de memoria diferentes para almacenar las calificaciones. Sin embargo, esta no seria la forma mas adecuada de registrar las, calificaciones, ya que se usan muchas variables. En Java se tendria el siguiente script para declarar las calificaciones: ‘int calificacionl, calificacionl, caLificacionl, ..,calificacion209; = Calculando la media aritmética: double nediaArit ~ (calificacionltcal ificacion2+...calificacion2@8) /280; = Imprimir las calificaciones en un modelo: DefaultListHodel moCalificaciones ~ new DefaultListHodel() ; moCalificaciones..addELement (cal ificacion1) ; moCalificaciones. addE Lement (cal ificacion2) ; moCalificaciones. add Lement (cal ificacion3) ; inoCalificaciones..addE Lement (cal ificacionN) ; El equivalente al script anterior, usando arreglo, seria de la siguiente forma: ‘int calificacion(| ~ mew int(200) ; Se Manuel Torres Remon = Calculando la media aritmética: double nediahrit; for (int i-0; 1<200i++){ iediaarit += calificacion( 4] 3 mediakrit ~ mediaarit/200; = Imprimir las calificaciones en un modelo: DefaultListModel moCalificaciones ~ new DefaultlistHodel() ; for(int i-9;1<200;i++){ noCal ificaciones .addELement (calificacién[i]) ; } Ventajas y desventajas de usar arreglos = Sise conoce la posicién dentro del arreglo del elemento que se quiere consultar, la consulta toma un tiempo constante, = Se pueden utilizar para implementar otras estructuras de datos como pilas, calas, tablas hash, etc. m= El tamafio de un arreglo es fijo, por lo que, sino se conoce de antemano el numero maximo de elementos a almacenar, pueden ocurrir problemas si el espacio reservado es menor del que se necesita. = Insertar elementos de manera ordenada es muy lento. = Buscar un elemento en un arreglo desordenado es muy lento, 9.2 Arreglos Un arreglo es una coleccién de datos del mismo tipo; dichos datos se almacenan en posiciones consecutivas de memoria y reciben un nombre de variable comuin. Es decir, varios datos estarn controlados por una sola variable, Para hacer referencia a un determinado elemento del arreglo se debe utilizar el nombre del arreglo acompafiado del indice, el cual especifica la posicién relativa en que se encuentra el elemento. Los arreglos se pueden dividir en: = Unidimensionales, también llamados vectores. o [1000.00 0 1 2 3 a 5 1 [150000 1900.00 | 1500.00 | 1200.00 | 1050.00 | 2500.00 | 3000.00 2 | 120000 3 | 105000 4 | 2500.00 5 [_ 200000 Capitulo 9: Arreglos [Toor = Bidimensionales, también llamados matrices o simplemente tablas. co | on 100 100 | 50 oe. [50 no | an | a2 o2 [a a | 30 | a0 ag | ad eo | av | aa 4 =] aia | 2 80 82 BI 2 {2 = Multidimensionales, cuando tienen de tres a mas dimensiones. a a aA f a / H 9.3 Arreglo unidimensional Un arreglo unidimensional es un conjunto de elementos almacenados consecutivamente, uno a continuacién del otro, donde cada elemento conserva su propio espacio con el mismo nombre para todos los elementos. Se le denomina unidimensional porque tiene un solo indice. Forma gréfica: 7 Indice «(cs [28 [35] 36 | 65 | 32} Hementos Nombre del arregio Donde: = Elnombre del arreglo es asignado dependiendo de los elementos que contiene el arreglo. Por ejemplo, un arreglo de nimeros (ndimero) 0 un arreglo de edades (edad). = El indice de un arreglo tiene como punto de inicio la posicién cero, y como iiltima posicién la cantidad total de elementos menos uno (N-1). Para recorrer por cada uno de los elementos de un arreglo se necesita una estructura repetitiva como for o while. m= Cada elemento es asignado a una posicién independiente del arreglo. oot | EAA Manuel Tores Remon Veamos: Ate] = 5 Ata) > 28 AQ] = 35 - 36 Ata] = a5 als] > 32 = Formato de declaracién de un arreglo unidimensional tipodeDatos nowbreirregiol 1; tipodatol | nonbresrreglos Donde: > TipodeDatos. Fs el tipo de datos especificado para los valores que se almacenardn en el arreglo unidimensional. Hay que tener en cuenta que todos los elementos serdn del mismo tipo. » nombreArreglo. Es el nombre asignado al arreglo. Obsérvese los siguientes casos de declaracién de un arreglo unidimensional Declarar el arreglo nombres del empleado, ntimero de hijos y pago mensual para el registro de N empleados en una empresa. Forma 1: tipoDato nombreArregiol]; String nonbres(]; int nHijos(1; double pagoensual(]; Forma 2: tipoDatol] nombreArreglo; Stringl| nonbres; int] nitijos; double(] pagotlensual; m= Formato de creacién del objeto de tipo arreglo nonbreArreglo ~ new tipoDatos[tamano] Donde: » NombreArreglo. Se especifica el nombre del arreglo ya declarado. > tipoDatos. Es el mismo tipo de datos especificado en la declaracién. > tamafio. Se especifica el total de elementos que puede contener el arreglo; hay que consi- derar que aqui no se especifica el maximo tamafio, sino el total de elementos. Capitulo 8: Arreglos [7308 Obsérvese el siguiente cas Crear los objetos de tipo arreglo para los nombres del empleado, ntimero de hijos y pago mensual de 100 empleados en una empresa. nombres ~ new String! 1°01; nifijos ~ new int 1001; pagoMensual ~ new doubte[ 100) ; = Formato para la declaracién y creacién del objeto de tipo arreglo en una linea tipodatos nonbresrreglo[] ~ new tipoDatos[tamano] Donde: > NombreArreglo. Se especifica el nombre del arreglo a declarar y crear. > tipoDatos. €s el tipo de datos especificado en la declaracién y creacién del objeto. > tamaiio, Se especifica el total de elementos que puede contener el arreglo, Obsérvese el siguiente caso: Declarar y crear los objetos de tipo arreglo para los nombres del empleado, numero de hijos y ‘pago mensual de 100 empleados en una empresa. String nonbres|) ~ new String( 109 |; int oHijos[) ~ new int 109); double pogollensual(} ~ new double( 100) ; 9.4 Arreglo bidimensional Un arreglo bidimensional es considerado un vector de vectores 0 un conjunto de elementos, todos de mismo tipo, en el cual el orden de los componentes es significativo; por lo tanto, necesitan dos Indices, all radica su principal caracteristica, Forma gréfica: 0) Joon) Joa soo [so [75 ao fan faa a |x {so eo fen | ea a |x| Los elementos se registran en una posicién de doble indice, donde el primer indice es la posicién de la fila, mientras el segundo indica la posicién de la columna; si esto es correcto, para poder registrar Manuel Torres Remon sobre ella se necesitaré una estructura de repeticién doble. Se debe considerar que internamente el arreglo bidimensional trabaja de la siguiente forma: cof 100 on 50 ol 7 19 2 1 30 80 20 8 aa By 2a 12 Es decir, se visualiza como un arreglo unidimensional de valores, pero atin se mantiene el doble indice, factor indicativo del arreglo bidimensional. Formato de declaracion de un arreglo bidimensional ‘tipodato nombredrrestol] i); tipodato! |!) nonbresrregio; Donde: = TipodeDatos. €s el tipo de datos especificado para los valores que se almacenarén en el arreglo bidimensional. Hay que tener en cuenta que todos los elementos serén del mismo tipo, = nombreArreglo. Es el nombre asignado al arreglo. Hay que tener en cuenta que, a diferencia del arreglo unidimensional que solo asignaba un corchete, en el bidimensional se asignan dos bloques de corchetes: el primero para las filas y el segundo para las columnas. Obsérvese los siguientes casos de declaracién de un arreglo bidimensional: Declarar el arreglo bidimensional, numeros de tipo entero y pagos de tipo double. Forma 1: tipoDato nombreArreglo|)[]; ‘int nuneros (13 double pagos[][); Forma 2: tipoDatol}l] nombreArreglo; “mt L]L] rumeros; double(}() paz05; Capitulo 9: Arreglos [a5 Formato de declaracién de un arreglo bidimensional nonbresrregio ~ new tipoDato| tanenoF | tamaiioc Donde: = TipodeDatos. Es el tipo de datos especificado en la declaracién del arreglo. = nombreArreglo. Es el nombre asignado al arreglo. = tamafioF. Determina el maximo tamafio en filas declarado por el usuario, m= tamafioC. Determina el maximo tamafio en columnas declarado por el usuario. Obsérvese el siguiente caso: Crear el arreglo bidimensional, nuimeros de tipo entero y pagos de tipo double ya declarados. ‘uineros ~ new int[16][10]5 pagos ~ new double[10] [10] Operaciones sobre un arreglo = Ingreso de datos. Para este caso se implementard un script que permita llenar un arreglo bidi- mensional de 3x3 de ntimeros enteros. for(int i-0;1<3;1++) for(int j-0;)<3;)1*) NUG]E{]-Lnteger.parseInt(JoptionPane. showInputDialog(this, "Ingrese un nuimero*)) m= Ingreso de datos aleatorios a una matriz. Para este caso se implementard un script que permita llenar un arreglo bidimensional de 3x3 con niimeros enteros de dos cifras en forma aleatoria de numeros enteros. for(int i-0;3<3;3++) for(int -0: NOG t+) “4nt) ((89-10+1) *Math.random() +18) ; m= Recorrer por los datos. Para este caso se enviaré la matriz Nl][} al modelo moNumeros. for(int i-9;5<3;)+") for(int j-0;)<3:)++) mmoNumeros.addELement (N[4] (31) . Para este caso se acumulardn los valores contenidos en la matriz N. = Operar sobre una matri ‘int 5-9; for(int i-0;1<3;1++) for(int }-0;)<3;)+*) sent); Manuel Torres Remon CASO DESARROLLADO 1: Listado de numeros basico Implemente una aplicacién que permita registrar un arreglo unidimensional basico de 6 elementos ‘numéricos enteros y que al final determine la suma, el promedio, la longitud y el mayor elemento registrado en el arreglo. Adicionalmente, implemente un método que permita ordenar los elementos del arreglo en forma ascendente. Consideraciones: = Use el siguiente disefio de interfaz grafica m= Através del botén Mostrar debe listar los ntimeros solicitados por la aplicacién. m= Muestre los valores en un control JList. Soluciér 1, Seleccione la ruta ile > New > Java Project. 2. Asigne el siguiente nombre al proyecto: pjBasico. 3, Agregue los paquetes pFormularios. 4, Agregue un JFrame dentro del paquete pFormula 9s y asignele el nombre frmBasico. Capitulo 9: Arreglos [a7 5, Disefie la siguiente interfaz y asigne nombres a los controles como se muestra en la imagen: binMostrar ‘btnOrdenar 1st Figura 9.1 Controles del formulario de listado de arreglo. Resumen de controles: 1 dtabel ‘ARREGLO BASICO 2 dist Ist 3 sButton btnMostrar 4 sButton btnOrdenar 6. El cédigo del formulario frmBasico se muestra como sigue: package pFormlarios; ‘import javax.swing.DefaultListModel; public class frmBasico extends javay.swing.2Frane { int 2{|-new int (5); public FrnBasico() { ‘initComponents () 5 void ordenaascendente() { ‘int comp; for(int. '-0;inayor) mayor-alt]; ¥ return mayor} 3 double calculaProned'io(4mt suns) ( return (suma*t.0/a. length) ; } Gnt calculasuma() { int <-9: for (int i-0; 1<-5;199)4 st-ali]; 3 return 5; y private void btnsostrarActionPer formed(java.awt event .Actionévent evt) { afa}-195 al3]-205 al2)~705 al3}-39; al4}-805 a[s}-155 Ant sumacalculasuma() ; double pronedio~calculaPromedio(suma) ; int mayor-determinaltayor () 5 DefaultListModel moNumeros-new DefaultListModel(); for(int i-0;i<-5; 14+) rnoNumeros.addelenent (a4); } moNuneros.addElement( ‘La suma es: ‘+suma); moNumeros.addELement (‘EL Promedio es: "+promedio) ; moNuneros.addElenent( ‘La Longitud: 'va.length); moNumeros.addE lement( ‘EL Mayor es: ‘+mayor); 1st. setModel (moNumeros) ; Fjecute la aplicacién. Una vez colocado el cédigo en los botanes, presione la combinacién de teclas + . Capitulo 9: Arreglos, iE) CASO DESARROLLADO 2: stado de numeros usando clase Implemente una aplicacién que permita registrar un arreglo unidimensional basico de 6 elementos ‘numéricos enteros y que al final determine la suma, el promedio, la longitud y el mayor elemento registrado en el arreglo. Adicionalmente, implemente un método que permita ordenar los elementos del arreglo en forma ascendente. Debe implementar la clase ArregloUnidimensional que permita controlar todos los métodos de la aplicacién, Consideracione: m= Cree un arreglo para los nuimeros dentro de la clase arregloNumeros. = Implemente los siguientes métodos dentro de la clase arregloNumeros: , El método constructor, que se encargard de crear el arreglo numérico de 6 nimeros, Inicialice los valores del arreglo con los siguientes numeros: 10, 20, 70, 30, 80 y 15. El método tamajio, que devolverd el numero de elementos registrados en el arreglo, El método ordenaAscendente, que se encargaré de ordenar los nimeros registrados en el arreglo en forma ascendente. Elmétodo determinaMayor, que se encargard de obtener el mayor elemento del arreglo. Elmétodo calculaPromedio, que se encargar de promediar los numeros del arreglo. El método calculaSuma, que se encargaré de sumar todos los elementos del arreglo, El método devuelveValor, que se encargard de devolver el elemento contenido en el arreglo de uno en uno. m= Use el siguiente disefio de interfaz: bbinMostrar ‘btnOrdenar Ist ira 9.2 Formulario de arreglo basico, EDM desaroloce aplicaciones on ava 8 | Manuel Tores Remon Solucion: 1. Cree un nuevo proyecto en NetBeans llamado pjUnidimensional. 2 3. Agregue la clase frmNumeros al paquete pFormularios; para ello, haga clic derecho sobre el paquete pFormularios. Luego siga la ruta New > JFrame Form. Capitulo 9: Arreglos a 4. Asigne un nombre a cada uno de los controles como se muestra en la figura 9.2; para ello, haga clic derecho sobre el objeto y seleccione Change Variable Name... 5. Después de asignar nombres a los objetos, asegtrese de que los controles sean los correctos; para ello, visualice el panel Navigator, el cual debe mostrarse como la figura 9.3. 15 fom fotos © © one corerens °o a (a Dect st) (al Seorrer (mtn) crore sat gate ab Figura 9.3 Listado de controles desde la ventana Navigator. 6. Asigne Null Layout al setLayout del Frame haciendo clic derecho sobre el Frame. 7. AlFrame active el Form Size Police con el valor Generate Resize Code, 8. Asigne las siguientes propiedades a los controles: btnMostrar Text MOSTRAR btnOrdenar Text ‘ORDENAR (stk Border TitledBorder=Listado de Nimeros Model Dejarvacio El siguiente script muestra el contenido de la clase arregloNumeros: package Clases; public class arregloNumeros { private int 2[]; publi arregloNumeros() ernew int [5]; afo}=105 a[1]-20; [21-795 a[3]=305 a[4]-805 a[s}-155 } public int tansfio(){ return a. length; } m7 | Manuel Torres Remon ‘int tonp}; for (int. $-0;4mayor) { mayor~pronedio[ i]; posicton=f; } 3 return mayors } public String gonadora(){ rata rewbre Lpastctonds Se declaran los atributos de la clase nombre y promedio de tipo Arreglo. Pos es el atributo encar- gado de posicionarse dentro de los indices del arreglo; y posicién tendré la isin de obtener la posicién de la candidata ganadora, es decir, al momento de encontrar ala ganadora, ubica en qué osicién del arreglo se encuentra este valor, el cual se guardard en la variable posicién, ya que otro método solicitara dicho valor para determinar el nombre de la ganadora, Capitulo 9: Arreglos [7 El método constructor crea los objetos de tipo Arreglo con una capacidad de 100 elementos, es decir, tendremos como méximo 100 candidatas que se podrian registrar en la aplicacién. Ademas, se inicializa la variable pos en cero, ya que es el punto de inicio de un arreglo. El método registraCandidata permite enviar los nombres y el promedio de una determinada candidata en la posicién actual de los arreglos. Al final, se aumenta en uno la variable pos, ya que asi se posicionaré en un valor mas el indice del arreglo para la siguiente candidata. Los métodos devuelveNombre y devuelvePromedio permiten devolver los valores registrados segiin la posicién del indice. El método totalCandidatas devuelve el total de participantes registradas hasta el momento. E| método puntajeAlto permite devolver cual es el puntaje més alto y, a la vez, registrar en qué posicién del arreglo se encontré dicho valor, el cual lo guardara dentro de la variable posicién. £1 método ganadora permite devolver el nombre de la candidata ganadora segtin la posicién obtenida en el método puntajeAlto, El siguiente script muestra las librerias y la declaraci6n de las variables globales de la aplicacién: package pFormular los; Jmport java. text.DecimalFormat; ‘import jovox.swing.DefaultListModel; Amport javax. suing. JOptionPane; import pclases.arrezlo; public class frnCertanen extends javax.swing.JFrane { arreglo aCan ~ new arreglo(); DefaultListModel moCandidatas - new DefaultListModel(); DefaultListMadel moPronedio - new DefaultListModel() ; DefaultListModel moEstadisticas ~ new DefaultListModel() ; DecimalFormat df}; public frncertamen() { “ini tConponents() 5 f= new DecinalFormat( *#9.89); Usaremos la libreria DecimalFormat para redondear los puntajes obtenidos. También se declara en forma global el objeto aCan de la clase arreglo. Luego se definen los modelos a usar en la apli- cacién y finalmente se declara df como objeto de la clase DecimalFormat. En el método constructor de la clase frmCertamen se declara el objeto df como instancia de la clase DecimalFormat con un formato de solo 2 decimales. El siguiente script muestra los métodos de la clase frmCertamen: ‘String getnonbre(){ return txtCandidata.getText(); y double gethuntaiel(){ return Double. parseDouble(txtPuntajel.getText()); } 318) |< desarrollo de aplicaciones con ova 8) Manuel Tores Remon double getPuntaje2() return Double. parseDoubLe(txtPuntaje2.getText()) 5 } double geruntaje3(){ return Double. parseDouble(txtPuntaje3.getText()) 5 3 double calculaPromedio() { return (getPuntajel () +getPuntaje2() +getPuntaje3())/3.0; y void imprimir (){ noCandidatas.clear() ; moPromedio.clear(); mokstadisticas.clear(); for(int 1-9; i100) { txtPuntajel.setText("'); ‘txtPuntajel. requestFocus() return "Puntaje 1"; Jelse if (extPuntaje2. getText() equals("*) | Double. parsebouble(txtPuntaje2.getText())<@ | | ar seDouble(txtPuntaje2.getText())>108) { txtPuntaje2.setText(""); ‘txtPuntaje2. requestFocus(); return "Puntaje 2"; Jelse if(txtPuntaje3.getText() equals(*") | Double. parseDouble(txtPuntaje3.getText())<@ | | Double. parseDouble(txtPuntaje3. getText())>109) { txtPuntaje3.setText('); ‘txtPuntaje3. requestFocus(); return ‘Puntaje 3; } else return 115 318 Capitulo 8: Arregios El siguiente script muestra las instrucciones de! botén btnRegistrar: private void binvegiscrarctionPerformed(n) & try! 4# (valida() -equats(*"))£ String candidata ~ getnorbre(); double puntajel-getPuntajel(); double puntaje2-getPuntaje2(); double puntaje3-getPuntaje3(); aCan.registraCandidata(candidata, calculaPronedio()); Sinprimir() Linpiar (5 jelse BOptionPane.showlessageDialog(ml, "Error en "ivalida() } eateh Exception ex){ 3OptionPane.showessageDialog(mull, "Error en la Aplicacién"); } Dentro del botén btnRegistrar se implementa un try-catch para prevenir algunas excepciones que se pudieran ocasionar en la aplicacién, Luego se valida la entrada de los valores a la aplicaci6n; sitodo es correcto, se capturan dichos valores y son enviados a la clase por medio del objeto aCan. En el caso de que el método valida devuelva una respuesta, esta sera impresa. El siguiente script muestra las instrucciones del botén btnEstadisticas: private void btnfstadisticasActionPerformed(..) { ‘int total-aCan. totalCandidatas() ; moEstadisticas.clear(); moEstadisticas.addElenent( ‘El Total de Candidatas es: ' + total); moEstadisticas.addélenent( ‘La ganadora es: '+aCan.ganadora()); moEstadisticas.addElenent( ‘EL Maximo puntaje es: "+ df. format (aCan.puntajeAlto())) ; Ast€.setiodel (noEstadisticas) ; CASO DESARROLLADO 4: Matriz de nimeros enteros Implemente una aplicacién que genere un arreglo bidimensional de numeros enteros de dos cifras, en forma aleatoria, de acuerdo a una cantidad de filas y columnas ingresadas por el usuario. Su tamafio como maximo serd de 3x3. Consideraciones: = Declare como atributos privados la cantidad de filas (f), la cantidad de columnas (c} y un arreglo bidimensional N, = Cree la clase ArregloBiNumeros con los siguientes métodos: » Elmétodo constructor, que defina la cantidad de filas y columnas de la matriz y, ala vez, genere los numeros aleatorios de la matriz. > Elmétodo que devuelva la cantidad de filas definidas para la matriz. » Elmétodo que devuelva la cantidad de columnas definidas para la matriz. Manuel Torres Remon » Elmétodo obtener, que devuelva el elemento del arreglo matricial dependiendo de la posi- cién de la fila y la columna, > Elmétodo generar, que permita generar automticamente valores numéricos de 2 cifras. > Elmétodo sumaFila, que permita sumar una determinada fila ingresada por el usuario. Se utiliza JOptionPane.showinputDialog(). > Elmétodo sumaColumna, que permita sumar una determinada columna ingresada por el usuario. Se utiliza JOptionPane.showInputDialog(). m= Use el siguiente disefio de interfaz: txtFilas ‘txtColumnas ‘tNumeros 3ScroliPanel] btnFilas {+ SUMADEFILAS } | SUMADECOLUMNAS btnColumnas Resumen La Suma de la Fila 2 es: 251 IstResunen Figura 9.6 Formulario de matriz de niimeros. Capitulo : Arreglos, Soluci6n: 1. Cree un nuevo proyecto en NetBeans llamado pjBiNumeros. 2. Agregue el paquete pFormularios al proyecto pjBiNumeros. 3. Agregue el paquete pClases al proyecto pjBiNumeros. 4. Agregue la clase ArregloBiNumeros al paquete pClases. = a? | eee Manuel Tores Remon 5. Agregue la clase frmBiNumeros al paquete pFormularios. 6. Asigne un nombre a cada uno de los controles como se muestra en la figura 9.6; para ello, haga clic derecho sobre el objeto y seleccione Change Variable Name... 7. Después de asignar nombres a los objetos, aseguirese de que los controles sean los correctos; para ello, visualice el panel Navigator, el cual debe mostrarse como la figura 9.7. Figura 9.7 Listado de controles desde la ventana Navigator. 8, Asigne Null Layout al setLayout del Frame haciendo clic derecho sobre el Frame. 8. Seleccione el formulario y en la propiedad Form Size Police modifique el valor encontrado por Generate Resize Code. Capitulo 8: Arreglos |" El siguiente script muestra el contenido de la clase ArregloBiNumeros: package oClases; public class ArrogloBiNumeros { private int fc; private int 9/)/]5 public ArregloBiNuneras (int f, mt c){ this. fF; this.cmc} new int (F](c); generar(); } public int getFilas(){ return *3 3 public int getColunnas(){ return c; 3 public int obtener(int pos, imt posc){ return n[posé }[pos¢) 5 } private void generar (){ for(int i-0;i EEE rvs El siguiente script muestra las instrucciones del botén btnGenerar: private void btnGenerarActionPer formed( java.awt event ActionEvent evt) { tryt moRespuesta.clear(); ‘int filas~getFiles(); Ant. colunnas-getColumnas() ; if (ilas>@ && colunnas>® && filas<-3 && columas<~3){ aN-new ArregloBiNuneros(filas, colunnas) ; Listar(); jelse ‘OptionPane. showtessageDialog (mult, "Error de Datos"); Jeateh(Fxception ex){ OptionPanc.showessageDialog(ml, ‘Error de Ingres de Datos); 3 El siguiente script muestra las instrucciones del botén btnFilas: private void binFilasAct ionPer formed (Java.awt-event.ActionEvent evt) { ‘int f-Integer.parselnt (J0ptionPane.chowInputDialog (this, "Ingrese un ‘numero de Fila: *)); 4f (fogetFilas()) mensaje('El numero de Filas es superior a la matriz" else moRespuesta.addElement (‘La Suma de la Fila ‘+ f + tes: + aN. sunaFila(f). Se declara la variable local fy se le asignar un nmero de filas que el usuario ingresaré mediante un cuadro de dialogo de entrada. Luego se compara si dicho valor no sobrepasa el limite de la ‘matriz; si es asi, se envia un mensaje al usuario; de lo contrario, se invoca al método sumaFila de la clase ArregloBiNumeros mediante el objeto An. El siguiente script muestra las instrucciones del botén btnColumnas: private void binColumnasActionPer formed (java.awt-event .ActionEvent evt) { ‘int cv Integer.parseInt (J0ptionPane. showInputDialogithis, "Ingrese un ‘numero de Colunna: *}); 4f (cogetColumas()) mensaje(*El numero de Columas es superior a la matriz else ‘moRespuesta.addélement (‘La Suma de la Columa t+ ¢ + ‘es: ‘aN. sunaColuma(c)) 5 Se declara la variable local cy se le asignaré un numero de columnas que el usuario ingresard mediante un cuadro de diélogo de entrada. Luego se compara si dicho valor no sobrepasa el limite de la matriz; si es asi, se envia un mensaje al usuario; de lo contrario, se invoca al método sumaColumna de la clase ArregloBiNumeros mediante el objeto An. Vector de objetos y ArrayList queer e = b.0pe | eto ™ Reconoce un vector de objetos m_ Emplea vectores de objetos en aplicaciones comerciales. 10.1 Vector de objetos 10.2 Clase ArrayList » Caso desarrollado 1: Mantenimiento de empleados (vector de objetos) » Caso desarrollado 2: Mantenimiento de facturas (ArrayList) » Caso desarrollado 3: Mantenimiento de productos (ArrayList y Lambda) Capitulo 10: Vector de objetos y ArrayList [73s 10.1 Vector de objetos Los vectores de objetos son colecciones de tipos de datos definidos por el programador o que forman parte de la API JAVA y que son referenciados desde el arreglo. Si tenemos una clase llamada Personal, podemos crear muchos registros del personal, pero se perderian los valores. Ahora bien, siimplementamos un arreglo de la clase Personal, estariamos ena capacidad de almacenar muchos registros del personal dentro de un vector y no perderiamos, la informacién anterior al ultimo registro. Las aplicaciones que se implementardn en los casos desarrollados serén de mantenimiento de registros: agregar, modificar, eliminar y listar, asi como sucede cuando se trabaja con un motor de base de datos. Forma grafica arregloPersonal 0 12 ? Cédigo : AdmooL Cédigo : Adm003 Nombre: Angela Torres Nombre: Luz Lazaro Cargo: Secretaria! Cargo: Secretaria | Sueldo ; 1500.00 Sueldo : 1500.00 ‘Cédigo. : Admoo2 Nombre: Fernanda Torres Cargo: Secretaria Il Sueldo : 1200.00 Debemos considerar que la clase Personal contiene los parametros cédigo, nombre, cargo y sueldo, y que arregloPersonal es un arreglo unidimensional de tipo Personal, y que al registrar al primer personal seré en la posicién 0 del arregloPersonal, Formato de deciaracién del vector de objetos: NombreClase[] []_nonbrevector ; Donde: = NombreClase. Es el nombre de la clase implementada previamente ala declaracién del arreglo. = nombreVector. Es el nombre asignado al vector de objetos. Hay que tener en cuenta que no debe ser igual al nombre de la clase. Manuel Torres Remon Formato de creacién del vector de objetos: nonrrevector = new Nonbreclase[Numero] ; Donde: = nombreVector. Es el nombre del vector declarado previamente. = NombreClase. Es el nombre de la clase dela cual se va a crear el vector. = Numero. Define el niimero total de elementos a registrar en el vector de objetos. 10.2 Clase ArrayList La clase ArrayList permite tener un control de los datos realizando el mismo trabajo de un vector de objetos; esta clase dispone de diversos métodos para manipular una coleccién de objetos dinémicamente. Formato para crear un ArrayList: ArrayList objeto ~ new ArrayList < nonbre clase > (); Donde: m= ArrayList. Es la representacién de la clase ArrayList. m= nombre_clase. Es el nombre de la clase que se creard en el vector. = Objeto. Es el nombre asignado al ArrayList. Por ejemplo, tenemos: ArrayList prod ~ new ArrayList ()} Métodos que componen la clase ArrayList Cons Desi ‘add (Object) ‘Agrega un elemento al final. public void adicionar (Producto x){ prod. add(x) ; add(Gnt, Object) Agrega un elemento en a posicion especificada en el primer parémetro, prod.add(9,x)5 clear) Blimina todos los elementos. prod.clear(); get (int) Devuelveel elemento de a posicién especificada public Producto obtener (4nt pos) { return prod. get (pos); y Capitulo 10: Vector de objetos y ArrayList 331 indexOf (Object) remove (int) remove (Object) set(int, Object) size() Devuelve el indice del elemento especificado, de no encontrarlo devuelve -1 public int posicion(Producto x){ return prod. indexOF (x); } Elimina el elemento de la posicion especificada, public void clininar(int x)< prod. remove(x) } Elimina el elemento especificado public void eliminar (Producto x)¢ prod. remove(x) + Reemplaza el elemento de la posicién especificada en el primer pardmetro por el elemento del segundo parametr. public void modificar(imt pos, Producto x){ prod. set (pos, x); + Devuelve la cantidad de elementos agregadios. public int tanano() { return prod.size() 3 CASO DESARROLLADO 1: Mantenimiento de empleados (vector de objetos) Implement una aplicacién que permita realizar el mantenimiento de los empleados de una empresa, para lo cual se deben crear tres clases dentro de sus respectivos paquetes: la clase Empleado (clase que controla los atributos privados del empleado y los métodos set y get), la clase ArregloEmpleados (clase que maneja el vector de objetos)y la clase frmMantenimiento (clase que interacta con el usuario a través de la GUI) Consideraciones: Dentro de la clase Empleado se deben implementar: = Los atributos privados del empleado como cédigo, nombre, horas y tarifa, = Elmétodo constructor que inicialice los atributos. m= Los métodos get de todos los atributos. = Los métodos set de todos los atributos. Manuel Torres Remon Dentro de la clase ArregloEmpleados se deben considerar los siguientes aspectos: = Declare como privado el arreglo unidimensional aEmp de tipo Empleado y el indice. = Implemente los siguientes métodos: » Elmétodo constructor, que inicialice el vector de empleados en 100 elementos y un indice en cero. » Elmétodo adiciona, que se encargaré de registrar un empleado en el arreglo e incremen- tard el indice por cada empleado registrado. » El método getTamaiio, que devolveré el tamafio del vector, es decir, el total de empleados registrados. » El método obtener, que devolverd la matriz de elementos de acuerdo a la posicién en el arreglo, » El método eliminar, que dependiendo de la posicién del cédigo buscado deberd eliminar a todo un registro del arreglo de objetos. » Elmétodo buscar, que serd el encargado de comparar si el cédigo ingresado existe en la matriz 0 no, deberd devolver, dependiendo de lo anterior, el indice de la posicién del elemento encontrado; en caso contrario, devolveré =1, Use el siguiente disefio de interfaz: cD MANTENMENTO DE EVELEADOS ‘waCodio [t+ ce ore <+4L{[tempieado tattioras; Ps a usw btnlistar oetTarifa_L ye i rnReistrar > | seostoe | scoron | come | eamen btnModifcar btnGrabar fi ege Tares =" ‘0000 benconsutar ||) 2 Sfiawe" 1 es btnéliminar - a temleados btnSalir sR Figura 10.1 Formulario de mantenimiento de empleado Solucion: 1 2 3. Cree un nuevo proyecto en NetBeans llamado pjEmpresa, ‘Agregue el paquete pFormularios al proyecto pjEmpresa. ‘Agregue el paquete pClases al proyecto pjEmpresa. Capitulo 10: Vector de objetos y ArrayList [Ts 4 Agregue la clase Empleado al paquete pClases. Agregue la clase ArregloEmpleados al paquete pClases. 6. Agregue la clase frmMantenimiento al paquete pFormularios. 7 Asigne un nombre a cada uno de los controles como se muestra en la figura 10.1; para ello, hhaga clic derecho sobre el objeto y seleccione Change Variable Name... 8, Después de asignar nombres a los objetos, asegurese de que los controles sean los correctos; para ello, visualice el panel Navigator, el cual debe mostrarse como la figura 10.2. (ao bec (mtn) ‘ae soba Label Figura 10.2 Listado de controles desde la ventana Navigator. 9. Asigne Null Layout al setLayout del Frame haciendo clic derecho sobre el Frame. 10, Seleccione el formulario y en la propiedad Form Size Police modifique el valor encontrado por Generate Resize Code. El siguiente script muestra el contenido de la clase Empleado: package Clases; public class Enpleado { private int cod%g0; private String nombre; private int horas; private double tarifa; public Enpleado(int codigo, String nombre, int horas,double tari fa){ ‘this .codigo-cod igo; ‘this :nonbre-nonbre; this horas-horas; this. tarife-tarifa; y publie int getCodigo() { return codigos 3 Manuel Torres Remon public void sotCodigo(int codigo) { ‘this.codigo ~ codigo; 3 public String getNonbre() ¢ return nombre; 3 public void setNionbre(String nombre) { ‘this.nombre ~ nombre; y public int getHoras() { return horas; } public void setHoras(int horas) { ‘this horas - horas; } public double getTarifa() < return tarifa; 3 public void setTorifa(double torifa) { ‘this. tarifa - tarifa; 3 El siguiente script muestra el contenido de la clase ArregloEmpleados: package oClases; Amport javax. swing. JOptionPane; public class ArregloEnpleados { private Enoleado af[); private int indice; public ArregloEmpleados() { 3€-new Enpleado[ 198] ; ‘indice-9; public void adiciona(Empleado objénp){ aE indice] -objenp; indices; public Enpleado devolver (int pos) { return af [pos]; 3 public int getTanaio){ Feturn indices 3 Capitulo 10: Vector de objetos y ArrayList 335) public int buscar (int codigo) { for(int 1-93 i Elmétodo agregar, que se encargard de registrar una factura en el ArrayList. » Elmétodo getTamafio, que devolverd el tamafio del ArrayList. » Elmétodo obtener, que devolveré todos los datos registrados de la factura de acuerdo a la posicién en el ArrayList. » El método buscar, , que serd el encargado de comparar si el ntimero de Factura ingre- sado existe en la matriz o no, deberd devolver, dependiendo de lo anterior, e! objeto de la Factura encontrado; en caso contrario, devolverd null. Aqui se debe utilizar ja estructura for de la siguiente forma: for(Clase varReferencia : NonbreDelAarrayL ist) { return varReferencia; P Ej: Si tenemos la Clase Personal y quisi¢ramos buscarlo por su codigo de tipo int, dentro del ArrayList Per, ingresamos lo siguiente: publi Personal buscar (4nt codigo) { for( Personal p : Per) { if ( p.getCodigo() ~~ codigo ) return p; } return null; » El método eliminarque, dependiendo del tipo, deberé eliminar el objeto analizado del ArrayList. ‘ArregloFactura “Tact: ArrayList sindice: int varregloFacturas() +getTamano(): dnt sogregar (f:Factura) ‘obtener (pos:int): Factura sbuscer(nun:4nt): Faetura +eLiminar (x:Faetura) Adicionalmente, se deben implementar en la Clase ArregloFacturas los siguientes métodos: = Elmétodo que retorne el nombre de! empleado que tiene la venta més alta = Enel formulario disefie las opciones de mantenimiento como registrar (para un nuevo registro de factura generando el niimero de factura de forma correlativa), consultar (que permite buscar una determinada factura), modificar (que permite modificar el nombre del vendedor y Capitulo 10; Vector de objetos y ArrayList [a el monto registrado, mas no el numero nila fecha, ya que estos son autogenerados) y eliminar (que de acuerdo a un determinado objeto deberd eliminar un registro de factura del ArrayList). Use el siguiente disefio de interfaz: Tan IC a0 are arte det ec ire opine cia = ic eae Tinker nrbaringrso benconsitar nkocear bincrabsrMositade} I] Fy ‘aa usta ‘eon bangin 2 toaa) feo Tores ovo anise 3 peo Famanan Tones io TeoiPaneh Figura 10.3 Formulario de registro de ventas. Solucion: 1. Cree un nuevo proyecto en NetBeans llamado pjArrayList. 2. Agregue el paquete pFormularios al proyecto pjArrayList. 3. Agregue el paquete pClases al proyecto pjArrayList. 4. Agregue la clase Factura al paquete pClases. 5. Agregue la clase ArregloFacturas al paquete pClases. 6. Agregue la clase frmMantenimiento al paquete pFormutarios. ie un nombre @ cada uno de los controles como se muestra en la figura 10.3; para ello, haga clic derecho sobre el objeto y seleccione Change Variable Name... 30 | eee Manuel Torres Remon 8. Después de asignar nombres a los objetos, asegtirese de que los controles sean los correctos; para ello, visualice el panel Navigator, el cual debe mostrarse como la figura 10.4, Figura 10.4 Listado de controles desde la ventana Navigator. 9, Asigne Null Layout al setLayout del Frame haciendo clic derecho sobre el Frame. 10, Seleccione el formulario y en la propiedad Form Size Police modifique el valor encontrado por Generate Resize Code, El siguiente script muestra el contenido de la clase Factura: package Clases; public class Factura f private int Factura; private String fecha: private String vendedors private double onto; public Factura(int nFactura,String fecha, String vendedor double monto) this.nFactura-nFactura; this. fecha fecha; this. vendedor-vendedor; this monto-nonto; y public void setNfactura(int oFactura){ ‘this.nFactura-nFactura; 3 public void setFecha(string fecha) { ‘this. fecha- fecha; 4 public void setVendedor (String vendedor) { ‘this. vendedor-vendedor; 3 public void setHionto(double nonto) { ‘this monto-nonto; y Capitulo 10: Vector de objetos y ArrayList 343 public int getNifactura(){ return nFactura; } public String yet fecha(){ return fecha; } public String getVendedor () return vendedor; } public double gottionto() ( return onto; 3 El siguiente script muestra el contenido de la clase ArregloFacturas: package pClases; Amport java.utit.ArrayList; public class ArregloFacturas { private ArrayList fact; private int indice; public ArregloFacturas() { fact-mew ArrayList(); } public int getTamano() { return fact.size(); 3 public void agregar (Factura F){ fact.add(F) ; y public Factura obtener (int pos) { return fact.get (pos) ; 3 public Factura buscar (4mt nun) { for (Factura f: fact) if (f.getNfactura()--nun) return f; return null; public void elininar(Factura x) { fact. removes); + saa Manvel Tere Ramon El siguiente script muestra las librerias y variables globales de la clase frmMantenimiento: package 2rorm.larios; Amport java.util.GregortanCalendar; ‘import javax. swing.JOptionPane; ‘import javax. swing. table. TableColum; import pClases.ArregloFacturas; ‘import pClases.Factura; public class frnventa extends javox.swing.JFrane { ArregloFacturas f-new ArregloFacturas() ‘int cun-9; public frnventa() { ‘initComponents (); DefinrAnchos(); asignaFecha(); habiLitaCajas( false) ; btnGrabarIngreso.setVisible( fal btnGrabarMod:ficado. setVisible(fal oH void DefinirAnchos() { TableColumn columna; colunna~tFacturas..getColumModel() .getCoLumn (8) ; colunna.setPreferredwidth(3®) ; colunnaétFacturas. getColumModeL() . getColumn (1) ; colunna. setPreferredwidth (59) ; colunna~tFacturas.getColumnModel() .getCoLumn(2) ; colunna. setPreferredwidth (150); columna~tFacturas..getCoLumnodel () .getCoLumn(3) ; colunna.setPreferredwidth(7@) ; ‘tFacturas. getTableHeader () .setReorder ingALlowed (false) ; tFacturas. getTableHeader () .setResizingAl lowed (false) ; 3 void habiLitacajas(boolean opcion){ ‘txtNfactura.setEditable(opcion) ; ‘txtVendedor . setEditable(opcion) ‘txtNonto. setédi table (opcton) ; ‘txtFechaVenta. setEdi table (opcion) ; Limpiacajas(){ ‘txtNfactura.setText( txtVendedor .setText ( txtFechaVenta.setText ( txtMonto.setText(*"); Capitulo 10: Vector de objetos y Arrayl 45 void LinpiaMatriz(){ for(int 1-9; 1<19; i++) ‘tFacturas.setValuent(**, 1, )3 tFacturas.setValueAt("") 4, 1D} tFacturas.setvaluest(*", i, 2); tFacturas.setValueat(*", i, 3); 3 } public int generaNunero() { Feturn oun} public int getNunFact(){ return Integer.parseInt (txtNfactura.getText()); } public String getrecha()( return txtFechaventa.getText(); } public String getVendedor (){ return txtVendedor.getText() ; } public double getvionto() { Feturn Double. parscdouble(txtNonto. getText()) 5 ) void listar(){ 4 (F.getTamano()>0) { for(int 1-0; i Elmétodo constructor, que inicialice el arreglo de prod de tipo ArrayList. » Elmétodo agregar, que se encargard de registrar un producto en el ArrayList. » Elmétodo totalProductos, que devolvers el tamafio del ArrayList. Use métodos Lambda, > Elmétodo obtener, que devolverd todos los datos registrado del producto de acuerdo a la posicién en el ArrayList. ESTES. desaroic de aplicaciones con lava} Manuel Torres Remon > Elmétodo buscarProducto, que seré el encargado de comparar si el cédigo de producto ingresado existe en la matriz o no, deberé devolver, dependiendo de lo anterior, el objeto del producto encontrado; en caso contrario, devolveré null. > Elmétodo eliminar, que dependiendo del tipo de objeto deberd eliminarlo del ArrayList. ArregloProductos =prod: ArrayList *ArregloProducto() +total Productos () :Lambda +agregaProducto(objP: Preduete) sobtener(): Producto +buscarProducto(c seLiminaProducto(objP: Predueto) Finalmente, en el formulario disefie as opciones de mantenimiento como grabar (para un nuevo registro de producto generando el cédigo de forma correlativa), buscar (que permite buscar un determinado producto), modificar (que permite modificar el nombre y los datos del producto} yeliminar (que de acuerdo a un determinado objeto deberd eliminar un registro de producto del ArrayList) Use el siguiente disefio de interfaz: bingenerar TbiCodigo ‘ptDescripcion| + =| == ‘btnGrabar cs a btnModificar ‘txtPrecio [+ Ee btntister a ae] btnEliminar wxtstock |-+ [cvocata aad btnBuscar btnGrabarM Productos ira 10.5 Interfaz del mantenimiento de productos. Soluciér 1. Cree un nuevo proyecto en NetBeans llamado pjMantenimientoProductos. 2 Agregue el paquete pFormularios al proyecto pjArrayList. 3. Agregue el paquete pClases al proyecto pjArrayList. 4. Agregue el paquete pimagenes al proyecto. 5. Agregue la clase Producto al paquete pClases. ESTES. desaroic de aplicaciones con lava} Manuel Torres Remon > Elmétodo buscarProducto, que seré el encargado de comparar si el cédigo de producto ingresado existe en la matriz o no, deberé devolver, dependiendo de lo anterior, el objeto del producto encontrado; en caso contrario, devolveré null. > Elmétodo eliminar, que dependiendo del tipo de objeto deberd eliminarlo del ArrayList. ArregloProductos =prod: ArrayList *ArregloProducto() +total Productos () :Lambda +agregaProducto(objP: Preduete) sobtener(): Producto +buscarProducto(c seLiminaProducto(objP: Predueto) Finalmente, en el formulario disefie as opciones de mantenimiento como grabar (para un nuevo registro de producto generando el cédigo de forma correlativa), buscar (que permite buscar un determinado producto), modificar (que permite modificar el nombre y los datos del producto} yeliminar (que de acuerdo a un determinado objeto deberd eliminar un registro de producto del ArrayList) Use el siguiente disefio de interfaz: bingenerar TbiCodigo ‘ptDescripcion| + =| == ‘btnGrabar cs a btnModificar ‘txtPrecio [+ Ee btntister a ae] btnEliminar wxtstock |-+ [cvocata aad btnBuscar btnGrabarM Productos ira 10.5 Interfaz del mantenimiento de productos. Soluciér 1. Cree un nuevo proyecto en NetBeans llamado pjMantenimientoProductos. 2 Agregue el paquete pFormularios al proyecto pjArrayList. 3. Agregue el paquete pClases al proyecto pjArrayList. 4. Agregue el paquete pimagenes al proyecto. 5. Agregue la clase Producto al paquete pClases. Capitulo 10: Vector de objetos y ArrayList [Tar 6. Agregue la clase ArregloProductos al paquete pClases. 7. Agregue la clase JFrameForm y liémelo frmProducto dentro del paquete pFormularios 8. Asigne un nombre a cada uno de los controles como se muestra en la figura 10.5; para ello, hhaga clic derecho sobre el objeto y seleccione Change Variable Name... 9. Alfinalizar el proyecto, aseguirese de que el explorador de proyectos se muestre como la figura 10.6 Figura 10.6 Explorador de proyectos. 10, Asigne Null Layout al setLayout del Frame haciendo clic derecho sobre el Frame. 11, Seleccione el formulario y en la propiedad Form Size Police modifique el valor encontrado por Generate Resize Code. El siguiente script muestra el contenido de la clase Producto: package Clases; public class Producto { private int coc go; rivate String descripcion; private double precio; private String categoria; private int stock; public Producto(int codigo, String descripcion, double precio, String categoria, int stock) { this.codigo - codigo; this.descripcion - descripcion; this precio - precio; this.categoria ~ categoria; this. stock ~ stock; Manuel Torres Remon public int getCodigo() { return codigo; y public void setCodigo(int codigo) { ‘this.codigo - codigo; } public String getDescripcion() { return descr ipcion; 3 public void setDescr ipcion(String descr ipcion) { ‘this.descripcion ~ descripcion; 3 public double getPrecio() return precio; 3 public void setPrecio(double precio) { this.precio ~ precio; : public String gerCaregoria() [ return categor3; 3 public void setCategoria(String categoria) { ‘this.categoria ~ categoria; } public int getStock() £ return stock; } public void setStock(imt stock) { ‘this stack ~ stock; 3 El siguiente script muestra el contenido de la clase ArregloProductos. package pClases; ‘import java.utit.Arraylist; public class ArrogloProductos { public interface Operaciont ‘int determinar(); 3 ArrayList prods public ArregloProductos(){ prod - new ArrayList(); } Capitulo 10: Vector de objetos y ArrayList public Operacion totalProductos-()-> prod.size() public void agregaProducto(Producto objP){ prod.add (obj) 3 public Producto obtener (int pos) { 5 FaRHFM prod ges (P08); public Producto buscarProducto(int cod) { for (Producto p:prod){ 4f (p.getCodigo()~-cod) return 9; 3 return null; 3 public void eliminaProducto(Producto objP)< prod.remove(objP) ; 3 El siguiente script muestra el contenido del formulario frmProducto: package pFormularios; mport javax.swing.J0ption?ane; Amport pClases.ArregloProductos; import pClases Producto; public class frnProducto extends javax.swing-2Frane { ArregloProductos aProductos ~ mew ArregloProductos() ; fint 1; public frnProducto() ‘initComponents() 5 btnGrabarl. setvisible(false) ; cbocategoria.addItem( "Bebidas " cboCategoria.additem( *Lacteos"); cboCategoria.addItem( ‘Abarrotes * cboCategoria.addTtem( 'Golosinas "); void generaCodigo() { Licodigo.setText(** + n); + BEM. desaroto ce aplicaciones con ava 8) Manuel Tores Remon private void btrGrabarAActionPerforned(java.awt.event .Actionévent evt) { try ( nt codigo ~ Integer. parseTnt(LbiCod igo. getText()); String descripcion ~ txtDescripcion.getText(); String categoria ~ String. valueOf (choCategor ia.getSelectedI tem()) ; double precio ~ Double. parsedouble(txtPrecio. getText()) ; Ant stock ~ Integer. parseInt(txtStock.getText()) ; Producto objP ~ new Producto(cédigo, descripcion, precio, categoria, stock); aProductos .agregaProducto(objP) ; Listards } eatch (Exception ex) ‘OptionPane.showHessageDialog(mUl, ‘Ocurrié un error al intentar agregar’, ‘Confirmacién', Opt ionPane. INFORMATTON_MESSAGE) ; 3 Linpiarcajas(); y private void btnoditicarActionPer formed( java.at.event.Actiontvent evt) { int cod ~ Integer.parseInt (JOptionPane. showInputDialog(nutt, “Ingrese codigo de producto: ")); Producto objP - aProductos.buscarProducto(cod) ; 4 (objP i> mut) [ Lplcodigo.setText('* + objP.getCodigo()); txtdescripcion.setText('" + 0bj>.getDescripcion()); txtPrecio.setText('* + objP.getPrecio()); cboCategoria.setSelectedItem('* + objP.getCategoria()); txtStock.setText(*" + objP.getStock()); btnlodificar setvisible(false) ; btnGrabarM,setVisible (true) ; 3 private void btnGrabaractionPer formed(java.awt.event.Actionvent evt) { try ( Producto pro ~ aProductos..buscarProducto (Integer. parseInt(LblCodigo..getText())) 5 pro.setDescripcion(txtDescripcion.getText()) 5 pro.setPrecio(Double. parseDouble(txtPrecio.getText())); pro. setStock Integer .parselnt(txtStock.getText ())) 5 pro. setCategor ia (String. valueOf (cboCategor ia.getSetectedI tem())) ; SoptionPane.showtessageDialog(wull, "Producto modificada correctanente', 'Confirmacion'*, ‘JOptionPane. INFORMATION MESSAGE) ; 5 Capitulo 10: Vector de objetos y ArrayList Vistar; } eatch (Exception ex) { JOptionPane.showlessageDialog(mitt, ‘Ocurri6 un error al ‘ntentar modificar’, 'Confirmacién*, Opt ionPane. INFORMATION. MESSAGE) ; btnGrabarl. setVisible(false) ; bniodilicar.setvisibLe(erue) ; Vinpiarcajas( 5 ) private vaid binFininarAct ionPer formed (java.at event ActionFvent evt) { Vimpiatabla(); ‘int cod ~ Integer parseTnt GOptonPane. showinputDiatog matt, “ngrese codigo de producto: ")); Producto objP ~ Productos. buscorPredieteod)s 4 (objP I= mat) ‘aProductos .eLiminaProducto (obj?) ; JoptionPane.showlessageDialog(mutt, ‘Producto eliminado correctanente", ‘Confirmacion', 3OptionPane. INFORKATION MESSAGE) ; Lister; } ) private void btnl istarActionPerformed(java.aut.event.ActionEvent evt) { ViapiaTablac) ; Vinpiarcajas(); Listar()3 ) private vold benBuscarActionPer formed(java.awe.event.ActionEvent eve) { ‘int cod ~ Integer parsetint GoptionPane. showInputDiatog matt, NIngrese codigo de producto: "))s Linpiatabla(); Producto objP ~ aProductos.buscarProducto(cod) ; Gf (obj? [= mut) { ‘tProductos. setValueAt (objP.getCodigo(), @, 6); tProductos.setValueat (objP.getDescripcion(), 8, 1); tProductos.setValueAt (objP-getPrecio(), @, 2)3 ‘tProductos. setValuedt (objP.getCategoria(), 0, 3); tProductos. setValueAt (ob}P.getStock(), 8, 4); Lcodigo.setText('* + objP.getCodigo()); txtDescripcion.setText(** + objP.getDescripeion() ); txtPrecio.setText('" + objP.getPrecio()); cboCategoria.setSelectedItem( '" + objP.getCategoria()); txtStock.setText(*! + objP.getStock()); Manuel Torres Remon private void btnGenerarActionPer formed(java.awt event Actionévent evt) { Limpiarcajas(); generacodigo() ; 3 void Listar() { for (int i ~ 0; 1 < aProductos.totalProductos.determinar(); i+) { Producto objP ~ aProductos.obtener (i); tProductos.setValueat (objP.getCodigo(), 7, 0)5 tProductos.setValueat (objP.getDescripcion(), i, 1); ‘Productos. setValueAt (objP.getPrecio(), 7, 2)5 tProductos.setValueat (objP.getCategoria(), 1, 3); tProductos.setValueAt (objP.getStock(), 1, 4); void linpiatabla) { for (int 1-6; 4 < 2; 444) ¢ tProductos.setvalueat(*', 3, tProductos.setValueat('', 3, tProductos.setValueAt('', 4, tProductos.setValueat(*', 4, Productos. setValueAt( 4) void Limpiarcajas() { UiCodigo. setText(""); txtDescripcion.setText(* txtPrecio.setText('"); txtStock.setText(*"); cboCategoria.setSelectedIndex(-1) ; Archivos de texto m Reconoce el trabajo de los archivos de texto. '& Implementa una aplicacién de mantenimiento con datos registrados en un archivo de texto. 4.1 Configuracién del JDK 11.2 Librerias a utilizar para el manejo de archivos 11.3 Clases y métodos para el manejo y control de archivos de texto > Caso desarrollado 1: Mantenimiento de estudiantes > Caso desarrollado 2: Mantenimiento de productos Capitulo 11: Archivos de texto i) 11.1 Configuraci6n del JDK ELJDK deberé estar preparado para manipular archivos de texto, es decir, para habilitar la escritura, la sobreescritura y la eliminacién, En el caso de NetBeans, este tiene habilitado todos estos servicios, pero, igualmente, es necesario conacer cémo deberén ser habilitados estos servicios en otros IDE. ‘A continuacién se muestran los pasos para configurar la manipulacién de archivos desde el JDK. Pasos para configurar el JDK: 1. Dirfjase a C:\Program Files\Java\jdk1.7.0_5\bin La imagen anterior muestra los archivos que contiene la carpeta bin del JDK de Java. 2. Seleccione y ejecute el archivo policytool; tenga en cuenta que, si usted se encuentra en Windows 7 u otro sistema operativo superior, tendré que ejecutar el archivo en modo Administrador; para ello deberd hacer clic derecho sobre el archivo policytool y seleccionar Ejecutar como Administrador. Manuel Torres Remon 3. Seleccione Archivo > Abrir de la ventana Herramienta de Politicas. Busque y ejecute el archivo java.policy en la siguiente ruta: Si cuenta con una versién distinta de JDK, no debe preocuparse, puesto que la ruta que se indica es la misma en todas las versiones. Capitulo 11: Archivos de texto [Tar Una vez abierto el archivo java. policy, se muestra la siguiente ventana: 4, Seleccione CodeBase , luego haga clic en Editar entrada de Politica. 5. Seleccione Agregar Permiso de la ventana Entrada de Politica. Manuel Torres Remon 6. Seleccione: 2) Permiso FilePermission ») Nombre de destina : <> ©) Acciones :read, write, delete, execute (en este caso tendré que seleccionar las 4 acciones) ro ll soon] 7 Seleccione Aceptar> 8, Seleccione Archivo > Guardar. 8. Para constatar que todos los cambios han sido registrados de forma correcta, debera aparecer el siguiente mensaje: 11.2 Librerias a utilizar para el manejo de archivos Frecuentemente los programas necesitan traer informacion desde una fuente externa o enviar informacion a una fuente externa. La informacién puede estar en cualquier parte: en un fichero, en un disco, en algtin lugar de la red, en la memoria o en otro programa. También puede ser de cualquier tipo: abjetos, caracteres, imagenes 0 sonidos. Para traer la informacién, un programa abre un stream sobre una fuente de informacién (un fichero, memoria, un socket) y lee la informacién serialmente de esta forma: Astream Similarmente, un programa puede enviar informacién a un destino externo abriendo un stream sobre un destino y escribiendo la informacién serialmente de esta forma: Astream writes Manuel Torres Remon 6. Seleccione: 2) Permiso FilePermission ») Nombre de destina : <> ©) Acciones :read, write, delete, execute (en este caso tendré que seleccionar las 4 acciones) ro ll soon] 7 Seleccione Aceptar> 8, Seleccione Archivo > Guardar. 8. Para constatar que todos los cambios han sido registrados de forma correcta, debera aparecer el siguiente mensaje: 11.2 Librerias a utilizar para el manejo de archivos Frecuentemente los programas necesitan traer informacion desde una fuente externa o enviar informacion a una fuente externa. La informacién puede estar en cualquier parte: en un fichero, en un disco, en algtin lugar de la red, en la memoria o en otro programa. También puede ser de cualquier tipo: abjetos, caracteres, imagenes 0 sonidos. Para traer la informacién, un programa abre un stream sobre una fuente de informacién (un fichero, memoria, un socket) y lee la informacién serialmente de esta forma: Astream Similarmente, un programa puede enviar informacién a un destino externo abriendo un stream sobre un destino y escribiendo la informacién serialmente de esta forma: Astream writes Capitulo 11: Archivos de texto [ae El paquete java.io contiene una coleccién de clases stream que soportan estos algoritmos para leer y escribir. Estas clases estén divididas en dos rboles, baséndose en los tipos de datos (carac- teres o bytes) sobre los que opera. Sin embargo, algunas veces es mas conveniente agrupar las clases basdndose en su propésito en vez que en los tipos de datos que lee o escribe. Asi, podemos agrupar los streams dependiendo de sileen o escriben lados en las "profundidades" o procesan la informacién que esta siendo lefda oescrita 11.3 Clases y métodos para el manejo y control de archivos de texto BufferedReader LineNumberReader CharArrayReader InputStreamReader FileReader FilterReader PushBackReader PipedReader StringReader Bufferedwriter CharArrayWriter ‘OutputStreamReader FileWriter Fee PipedWriter | StringWriter Filterwriter a | Manuel Torres Remon pre Laclase BufferedReader deriva dela clase Reader. Esta case ahadeun buffer para ealizarunalectura eficiente de caracteres Dispone delmétodoreadLine que permite leer una linea de texto y devolverla como String. Peper ney ut br fete ore anes eee nto br-new BufferedReader (new FileReader (archivotexto)); Geass « G )) eg Esta clase tiene métodos que nos permiten leer caracteres. Sin embargo, suele ser habitual querer las lineas completas, bien porque nos interesa la linea completa, bien para poder analizarialuegoy extraer campos deella, FileReader no contiene métodos que nos permitan leer lineas completas, perosi BufferedReader. ORCI EEEM File archivo ~ new File ('C:\archivo.txt'); POIROT Fi leReader fr - new FileReader (archivo); BufferedReader br ~ new BufferedReader (fr) ; Creer ‘= Una ver abierto el archivo, br apunta ala primera cadena de bits. = Elmétodo readLine() asociado a brcaptura una cadena debits ysalta 2 la siguiente linea debits, Dicha cadena es convertida seguidamente al tipo dedatos requerido por la aplicacion, ‘= Cuando no existe mas cadena que mostrar, br apunta anull ‘= Elmétodo close() cierrael acceso al archivo. BuffereReader br=new BufferedReader new FileReader(archivo) Panne Esla clase que permite escribir los datos de la memoria hacia un archivo de texto (output). Lo primero que tenemos que hacer es crear una variable de tipo Printwriter, Perera tipo PrintWriter Prinewriter pw; ieereeren crt sy nae Pw ~ new Printhiriter (new Fileviriter (archivo); Esta clase se encarga de abrir el archivo en modo de escritura, Es decir, sel archivo contiene informacién, esta se pierde. Sil archivo no existe, lo crea. Creer ‘= Una ver abierto el archivo, pw apunta al inicio ‘= Elmétodo printin(data) asociaco a pw graba como cadena de bits la data indicada y genera un salto de linea en el archivo, = Elmétodo close() cierrael acceso al archivo. Printiriter pw ~ new Printwriter(new Filewriter (archivo); Capitulo 11: Archivos de texto |e CASO DESARROLLADO 1: Mantenimiento de alumnos Implemente una aplicacién que permita realizar el mantenimiento de los registros de un estudiante, en la cual se ingresard un cédigo, nombres, ciclo y pensién. Consideracione: m Debe crear tres clases: » Clase Estudiante, que permitira definir los atributos del estudiante, como su cédigo, nombres, ciclo de estudio y el monto de la pensi6n. > Clase ArregloEstudiantes, que permitiré almacenar a los registros del estudiante en un vector de objetos. » Clase frmMantenimiento, que permitird interactuar con el usuario para el control de los registros del estudiante. = Debe crear siete botones: » Botén Ingresar. Tiene por objetivo habilitar las cajas de texto para un nuevo registro de estudiante; ademas, genera un codigo al estudiante de forma automatica > Botén Consultar. Tiene por objetivo solicitar un cédigo de estudiante y mostrar los datos del estudiante para buscarlo en el vector. En caso no lo encuentre, muestra un mensaje de error. » Botén Modificar. Tiene por objetivo solicitar un cédigo de estudiante para buscarlo en el vector y mostrar sus datos en los controles JTextField. Al modificar se habilitard el botén grabar. » Botén Eliminar. Tiene por objetivo solicitar un cédigo de estudiante para eliminarlo del vector de estudiantes. » Botén Listar. Permite listar los registros contenido en el vector de estudiantes. » Botén Grabarl. Permite grabar los valores del estudiante que se ingresan por primera vez. > Botén GrabarM. Permite grabar las modificaciones realizadas sobre un registro de estudiante. m= Use la siguiente interfaz grafica: ‘icodigo —— enemies [Fe Mamet ames lf Biningresar om ee coonsa_«+-{ btnConsultar coocico | | Rm) —_ a CI tatPension [Tam moeemni ae |e PD retninae I Sa bintistar Keene] btnGrabart wWiurinos [oe LU binérabartt ra 11.1 Formulario de mantenimiento de alumnos. Manuel Torres Remon Soluci6n: 1. Cree un nuevo proyecto en NetBeans llamado pjinstituto, 2, Agregue el paquete pFormularios al proyecto pjinstituto. 3, Agregue el paquete pClases al proyecto pjinstituto. 4, Agregue la clase Estudiante al paquete pClases. 5. Agregue la clase ArregloEstudiantes al paquete pClases 6. Agregue la clase frmMantenimiento al paquete pFormularios. 7. Asigne un nombre a cada uno de los controles como se muestra en la figura 11.1; para ello, hhaga clic derecho sobre el objeto y seleccione Change Variable Name... 8, Después de asignar nombres a los objetos, asegurese de que los controles sean los correctos; para ello, visualice el panel Navigator, el cual debe mostrarse como la figura 11.2. Figura 11.2 listado de controles desde la ventana Navigator. Capitulo 11: Archivos de texto [a7 8. Asigne Null Layout al setLayout del Frame haciendo clic derecho sobre el Frame, 10, Seleccione el formulario y en la propiedad Form Size Police modifique el valor encontrado por Generate Resize Code. El siguiente script muestra el contenido de la clase Estudiante: package Clases; public class Cstudiante { private int codigo,ciclo; private String nombre; private double pension; public Estudiante(int codigo, Str 3 1g ponbre, int ciclo,double pens én) { ‘this .codigo-céd igo; this nonbre-nonbre; this.ciclo-ciclo; this. pension-pension; public int getCodigo(){ return codigo; } public String getNonbre() ( } return nombre; public int getCiclo(){ return ciclo; } public double getPension() { return pension; } public void setCodigo(int codigo) { 3 ‘this .codigo-codigo; public void sethonbre(String nombre) ( } ‘this .nombre-nonbre; public void setCiclo(int ciclo) { 3 this.ciclo-ciclo; public void setPension(double pension) { 3 ‘this. pens ion-pension; El siguiente script muestra el contenido de la clase ArregloEstudiantes: package Clases; ‘import ‘import ‘import ‘import ‘import ‘import ‘import import java.io. BufferedReader; java.io. File; Java. io. FileReader} java.io. Filewriter; Java. io.Printariters Javacutil.Arraylist; Java.util.StringTokenizer; Javax. swing. JOptionPanes 368 Se Manuel Torres Remon public class Arroglofstudiantes { private ArrayList a€st; public Arrogloestudiantes(){ aéstnew Arraylist() ; cargar(); 3 public void adicionar (Estudiante e){ atst.add(e); } public Estudiante obtener (int pos) { return aEst.get (pos) ; } public Estudiante buscar (int cod) { for(int i-0;i0){ for(int i-0; i aProductos; public ArregloProductos() { aProductos ~ new ArrayList(); cargar()3 > void cargar() [ try File archivo - new File( ‘productos. txt"); Gf (archivo.exists()) { BufferedReader br ~ new BufferedReader ( new FileReader ( ‘productos. txt")); String Lincs: while ((Linea ~ br.readLine()) !- mutt) £ StringTokenizer st ~ new StringTokenizer(Linea, ',"); String codigo ~ st.nextToken().trim(); String descripcion ~ st.nextToken().trim(); ‘String categoria - st.nextToken().trim(); nt stock ~ Integer.parseInt(st.nextToken() .trim()); double precio-Double. parseDouble(st.nextToken() .trim()) 3 Producto p - new Producto(cédigo, descripcion, categoria, stock, precio); adicionar(p); + br closet); + } eatch (Exception ex) ‘OptionPane. shonMessageDialog(nUl, ‘No hay nada que mostrar"); 3 3 public void grabar() { try PrintWriter pw-new PrintWriter (new Fileliriter (tproductos. txt); for (int i - 0; 4 < getTamafio(); is+) { pw.printIn(obtener (i) .getCodigo() + '," + obtener (i). getDescripcion() + '," + obtener (i) .getCategoria() + 1," + obtener(i).getStock() +',* + obtener (1) .getPrecio()); pw.close(); SoptionPane.showMessageDialog(muUl, 'Grabacién correcta"); 378 7 Manuel Torres Remon El siguiente script muestra el contenido de la clase ArregloProductos: package pCLase=; import java. io.BufferedReader; import jov.10-F le; import java.io. lekeaders Amport java. io.Filewriter; 4mport java.io. Printwriter; import java.util.ArrayList; Gmport java.util. StringTokenizers Amport javax. swing. J0ptionPane; public class ArregloProductos ( private Arraylist aProductos; public ArregloProductos() { aProductos ~ new ArrayList(); cargar()3 > void cargar() [ try File archivo - new File( ‘productos. txt"); Gf (archivo.exists()) { BufferedReader br ~ new BufferedReader ( new FileReader ( ‘productos. txt")); String Lincs: while ((Linea ~ br.readLine()) !- mutt) £ StringTokenizer st ~ new StringTokenizer(Linea, ',"); String codigo ~ st.nextToken().trim(); String descripcion ~ st.nextToken().trim(); ‘String categoria - st.nextToken().trim(); nt stock ~ Integer.parseInt(st.nextToken() .trim()); double precio-Double. parseDouble(st.nextToken() .trim()) 3 Producto p - new Producto(cédigo, descripcion, categoria, stock, precio); adicionar(p); + br closet); + } eatch (Exception ex) ‘OptionPane. shonMessageDialog(nUl, ‘No hay nada que mostrar"); 3 3 public void grabar() { try PrintWriter pw-new PrintWriter (new Fileliriter (tproductos. txt); for (int i - 0; 4 < getTamafio(); is+) { pw.printIn(obtener (i) .getCodigo() + '," + obtener (i). getDescripcion() + '," + obtener (i) .getCategoria() + 1," + obtener(i).getStock() +',* + obtener (1) .getPrecio()); pw.close(); SoptionPane.showMessageDialog(muUl, 'Grabacién correcta"); Capitulo 1: Archivos de texto } eateh (Exception ex) £ } 3 public void adicionar (Producto p) { aProductos.add(p) ; } public Producto obtener (mt pos) { Feturn aProductos.get(pos) 5 + public Producto buscar(String codigo) { for (int i - 9; 1 < aProductos.size(); it+) { 4# (codigo.equals(aProductos.get(1).getCodigo())) { return 2Productos.get (+ + i return null; 3 public int gecramano() { return aProductos.size(); ¥ public void elininar(Producto p) { aProductos. remove(p) 5 } El siguiente script muestra el contenido de la clase frmListadoProductos: package pFormi Larios; ‘import pClases.ArregloProductos; Amport pClases Producto; public class frnlistadoProductos extends javax.swing.JInternalFrane { ‘ArregloProductos a ~new ArregloProductos() ; public frnlistadoProductos() { ‘initComponents() 5 LstarProductos(); } void ListarProductos(){ for(int 4-0;i

You might also like