CARRERA DE INFORMTICA EDUCATIVA NIVEL DE PREGRADO TALLER LA PROGRAMACIN Y SU APLICACIN EN LA EDUCACIN DOCENTES: ng. Laura Amparo Guachizaca Dra. Mara sabel Vivanco PERIODO: Septiembre 2010 Febrero 2011 LOJA-ECUADOR 2010 La programacin y su Aplicacin en la Educacin 2 UNIVERSIDAD NACIONAL DE LOJA
Dr. Gustavo Enrique Villac s Rivas Mg. Sc. RECTOR Dr. Ernesto Rafael Gonz lez Pesantes Mg. Sc. VICERRECTOR
REA DE LA EDUCACIN, EL ARTE Y LA COMUNICACIN
Dr. Yovany Salazar Estrada Mg. Sc. DIRECTOR DEL AREA
Dra. Enriqueta Andrade Maldonado Mg. Sc. COORDINADOR DEL NIVEL DE FORMACIN O PREGRADO
CARRERA DE INFORMTICA EDUCATIVA
Ing. eovanny Es!inoza Ro"as COORDINADOR DE CARRERA Ing. #aura A. Guac$izaca Sarango Dra. Mar a Isa%el Vivanco DOCENTES DEL TALLER Telfono: 2545558 Ext. 112 UNL-Informtica Educativa La programacin y su Aplicacin en la Educacin 3 1. PRESENTACIN: Una vez que se ha concluido el taller del mdulo 2, producto del cual los estudiantes poseen una concepcin clara de la programacin estructurada, la manera como plantear un problema y los pasos involucrados para dar una solucin computacional al problema.
El presente taller, se propone continuar el proceso de desarrollo de capacidades estudiantiles para la planificacin y programacin orientada a objetos, y como efecto de ello, disear y elaborar programas computacionales que apliquen programacin orientada a objetos, en el marco del paradigma orientado a objetos. La estructura y funcionalidad del taller de , estn direccionadas para asegurar que los estudiantes se prevean las estrategias necesarias para que el proceso de instalacin, uso de herramientas que faciliten el aprendizaje de los conceptos involucrados en la orientacin a objetos y su ejemplificacin en un lenguaje de programacin orientado a objetos, garantice la habilitacin para las prcticas profesionales respectivas. 2. JUSTIFICACIN La programacin orientada a objetos, como partes estructurantes del plan de estudio del paradigma orientado a objetos, de las ciencias de la computacin, recurrentemente se ha basado en las metodologas de programacin estructurada y en raros casos utilizando herramientas que faciliten un mejor aprendizaje. No obstante, en algunas tcnicas de programacin se han "basado individualmente, excluyendo la participacin consciente y comprometida de los dicentes responsables del desarrollo del mdulo. Esta forma de aplicar la teora en los talleres no ha logrado enriquecer el compromiso y apropiacin de todos los dicentes responsables de su ejecucin, prevaleciendo el cumplimiento formal. 3. OBJETIVOS Fortalecer las capacidades de los dicentes relacionadas con la elaboracin de programas orientado a objetos, a partir de problemas Disponer de herramientas que apliquen los referentes teoricos metodolgicos de la Orientacin a Objetos y del lenguaje de Modelado Unificado. dentificar las necesidades de formacin de los dicentes, as como los recursos de apoyo: didcticos, bibliogrficos, aulas de computo, que demanda el desarrollo de la programacin orientada a objetos, en la perpectiva de potencias el proceso de aprendizaje. 4. CONTENIDOS UNL-Informtica Educativa La programacin y su Aplicacin en la Educacin 4 Estimado(a) estudiante, iniciamos el estudio de la asignatura abordando temas fundamentales que se requiere conocer dentro de la programacin; teniendo claro que la actividad de crear programas es un ejercicio mental que se debe cultivar a travs de la prctica. Apoyado, en etapas iniciales, de estrategias adicionales como: diagramas de flujo. La estrategia utilizada para aprender a programar es resolver problemas a travs de la implementacin de programas usando Java y NetBeans PRIMERA UNIDAD: 1. La Orientacin a Objetos 2. Objeto 3. Clase 4. Herencia 5. nterfaz 6. Lenguaje Unificado de Modelado (UML) 7. Relaciones 8. Diagramas 9. Casos de Uso 10. Diagramas de Secuencia, Estado y Colaboracin SEGUNDA UNIDAD: 1. Herramienta para UML 2. Area de trabajo 3. Creacin de diagramas 4. Lenguaje de POO 5. Java 6. nstalacin JDK 7. Netbeans 8. Sintaxis TERCERA UNIDAD: 1. Sentencias de Control 2. Bucles 3. Arrays 4. Clases en Java 5. Constructor 6. Clases String 7. Clase Math 8. /O de datos 5. ACTIVIDADES Y METODOLOGIA ACTIVIDADES: Encuadre: Acuerdos y compromisos Conformacin de grupos de trabajo para analizar el contenido del mdulo Plenaria y socializacin de los trabajos grupales Refuerzo de los contenidos analizados UNL-Informtica Educativa La programacin y su Aplicacin en la Educacin 5 Contestacin a preguntas e inquietudes de los estudiantes. Prueba escrita u oral sobre los contenido del taller Exposicin de los trabajos de investigacin, (de acuerdo a los compromisos establecidos) y el refuerzo de la investigacin, con una duracin mxima de 30 minutos por alumno. Evaluacin, esta actividad se la realizar con el propsito de evaluar lo referente a: contenidos, puntualidad, claridad, pertinencia, conocimientos, asesora y tutora del docente, el cumplimiento de acuerdos y compromisos, y aspectos administrativos. METODOLOGA Para el desarrollo del taller se prioriza el empleo del mtodo cientfico, trabajo grupal utilizando mtodos, tcnicas y estrategias derivadas de las teoras de aprendizaje que fundamentan el Sistema Acadmico Modular por Objetos de Transformacin (SAMOT), considerando como eje dinamizador que interrelaciona la formacin de profesionales. 6. RESULTADOS ESPERADOS Conocimiento teoricos de la programacin Orientada a Objetos y del Lenguaje de Modelado Unificado Manejo de Herramientas para UML, instalacin del JDK, NEetbeans, e ntroduccin al Lenguaje Java. Sintaxis y codificacin de programas en Netbeans, libreras de Java. 7. EVALUACION Y CALIFICACIN La evaluacin estar presente durante su desarrollo en todas y cada una de las actividades que se lleven a cabo y durante cada unidad del taller. La calificacin final del taller ser el promedio de los parmetros expuestos. Para acreditar el mdulo y los talleres se obtendr una nota mnima de 7/10 puntos, segn lo indica el Art. 51 del Reglamento de Rgimen Acadmico. Dominio de los conocimientos terico-prcticos: Manejo de los contenidos terico-prcticos estudiados en las unidades o temticas del taller. Participacin activa: referida a la contribucin individual oportuna, pertinente y fundamentada del estudiante a lo largo del desarrollo de la temtica de estudio en las conferencias-foros, talleres, lecturas comentadas, entre otras actividades. Para evaluar los trabajos desarrollados por el estudiante, se tomarn en cuenta los siguientes criterios: Pertinencia con las Guas de Estudio Claridad en redaccin, ortografa y presentacin. Coherencia del proceso. Aporte individual crtico y fundamentado. UNL-Informtica Educativa La programacin y su Aplicacin en la Educacin 6 Puntualidad en la entrega. 1. Participacin en clase 2. Desarrollo de actividades: 3. Trabajos y ejercicios en clase 4. Trabajos y ejercicios extraclase 5. Pruebas escrita o prcticas 10 10 10 10 10 PROMEDIO 10 UNL-Informtica Educativa La programacin y su Aplicacin en la Educacin 7 PRIMERA UNIDAD: 1.1.- Introduccin En los tiempos que corren, el software tiene la tendencia de ser grande y complejo. Los usuarios demandan interfaces cada vez ms completas y funcionalidades ms elaboradas, todo ello influyendo en el tamao y la complejidad del producto final. Por ello, los programas deben ser estructurados de manera que puedan ser revisados, corregidos y mantenidos, rpida y eficazmente, por gente que no necesariamente ha colaborado en su diseo y construccin, permitiendo acomodar nueva funcionalidad, mayor seguridad y robustez, funcionando en todas las situaciones que puedan surgir, de manera previsible y reproducible. Ante problemas de gran complejidad, la mejor forma de abordar la solucin es modelar. Modelar es disear y estructurar el software antes de lanzarse a programar y es la nica forma de visualizar un diseo y comprobar que cumple todos los requisitos para l estipulados, antes de que la flotilla de programadores comience a generar cdigo. Modelando, los responsables del xito del producto pueden estar seguros de que su funcionalidad es completa y correcta, que todas las expectativas de los usuarios finales se cumplen, que las posibles futuras ampliaciones pueden ser acomodadas, todo ello mucho antes de que la implementacin haga que los cambios sean difciles o imposibles de acomodar. Modelando, se abstraen los detalles esenciales de un problema complejo y se obtiene diseos estructurados que, adems, permiten la reutilizacin de cdigo, reduciendo los tiempos de produccin y minimizando las posibilidades de introducir errores.
UML es un lenguaje grfico que sirve para modelar, disear, estructurar, visualizar, especificar, construir y documentar software. UML proporciona un vocabulario comn para toda la cadena de produccin, desde quien recaba los requisitos de los usuarios, hasta el ltimo programador responsable del mantenimiento. Es un lenguaje estndar para crear los planos de un sistema de forma completa y no ambigua. 1.2.- La Orientacin a Objetos, OO Aunque UML puede emplearse en cualquier paradigma, como la programacin estructurada o la lgica, est especialmente cerca del paradigma de la orientacin a objetos. Por tanto, es precisa una familiarizacin con algunos detalles de este paradigma antes de continuar con UML. 1.2.1.- Qu es un Objeto En el mbito de la informtica, un objeto define una representacin abstracta de las entidades del mundo, tangibles o no, con la intencin de emularlas. Existe pues, una relacin directa entre los objetos del mundo y los objetos informticos, de modo que puede emplearse el trmino objeto de manera indistinta. Los objetos tienen dos caractersticas, que son su estado y su comportamiento. El estado es una situacin en la que se encuentra el objeto, tal que cumple con alguna condicin o condiciones particulares, realiza alguna actividad o espera que suceda un acontecimiento. Una tostadora puede estar encendida y cargada de pan y, en cuanto a su comportamiento, lo normal en este estado es tostar pan. UNL-Informtica Educativa La programacin y su Aplicacin en la Educacin 8 Los objetos mantienen su estado en uno o ms atributos, que son simplemente datos identificados por un nombre, y exhiben su comportamiento a travs de mtodos, que son trozos de funcionalidad asociados al objeto. En este sentido, un objeto es realmente un conjunto de atributos y mtodos. Pero un objeto slo revela su verdadera utilidad cuando es integrado en un contexto de comunicacin con otros objetos, a travs del envo de mensajes, para componer un sistema mucho mayor y demostrar un comportamiento ms complejo. Una tostadora en un armario resulta de poca utilidad, pero cuando interacta con otro objeto, como un ser humano, se convierte en una herramienta til para tostar pan. El humano intercambiara con la tostadora el mensaje "tuesta el pan que tienes en la bandeja a travs de la pulsacin del botn de tostar. A partir del ejemplo anterior, es fcil deducir que el envo de mensajes es la forma en que se invocan los mtodos de un objeto y que la invocacin de mtodos es el mecanismo a travs del cual un objeto puede cambiar su estado o el de otro objeto. Los atributos y los mtodos de un objeto pueden tener un menor o mayor grado de visibilidad, desde "privado hasta "pblico, lo que hace que aparezca un concepto nuevo, la encapsulacin. La encapsulacin oculta los detalles del funcionamiento interno del objeto, exponiendo slo aquello que pueda ser de inters. Figura 1: Objetos comunicndose 1.2.2.- Qu es una CIase Los objetos no son entidades que existan de modo nico. Hay muchos tipos de tostadoras e, igualmente, muchas tostadoras del mismo tipo. Se puede entender fcilmente el concepto de clase si nos permitimos emplear el trmino tipo como equivalente. As, todos los objetos que son del mismo tipo, comparten el mismo juego de atributos y mtodos (aunque cada objeto pueda tener un valor distinto asociado a cada atributo) y por tanto pertenecen a una misma clase. Las clases son como patrones que definen qu atributos y qu mtodos son comunes a todos los objetos de un mismo tipo. Cada objeto tiene sus atributos y su comportamiento, creados empleando una clase a modo de patrn. Una vez creado el objeto, pasa a ser una instancia particular de la clase a la que pertenece y sus atributos tienen unos valores concretos, que podrn variar de un objeto a otro (dos objetos distintos pertenecientes a la misma clase, pueden tener exactamente los mismos valores en todos sus atributos). A estos atributos, que pueden variar de un objeto a otro, se les conoce tambin como variables de instancia. UNL-Informtica Educativa La programacin y su Aplicacin en la Educacin 9 Hay atributos que, sin embargo, no varan de un objeto a otro, es decir todas las instancias de la clase a la que pertenecen, tienen el mismo valor para ese atributo. Todas las tostadoras del mismo tipo consumen los mismos Watios y sus resistencias son de los mismos Ohmios. A estos atributos se les conoce como variables de clase y son compartidos por todas y cada una de las instancias de la clase. De manera anloga al caso de los atributos, encontramos mtodos de instancia y mtodos de clase. 1.2.3.- Qu es Ia Herencia Los objetos se definen en funcin de clases, es decir, tomando una clase como patrn. Se puede saber mucho acerca de un objeto sabiendo la clase a la que pertenece. Las clases llegan un paso ms lejos, permitiendo su definicin en funcin de otras clases, de modo que es posible establecer una jerarqua de especializacin. Una clase que se define en funcin de otra, hereda todos los atributos y mtodos de aquella y permite el aadido de nuevos o la sobre escritura de los heredados. La clase patrn se conoce con el nombre de superclase o clase padre, mientras que la que hereda se conoce como clase hija. La herencia no est limitada simplemente a padre-hija(s), la jerarqua puede ser todo lo profunda que sea necesario, hablando en trminos de nietas, biznietas, etc. De la misma manera, una clase puede heredar de varias clases a la vez. El siguiente ejemplo existe una jerarqua de dos niveles. La clase "Animal es la raz , la clase padre en la jerarqua. Especifica que los animales comen, como caracterstica ms significativa de stos. En el primer nivel de especializacin encontramos las clases "Carnvoro y "Herbvoro, ambas son sendos tipos de animal y por tanto comen, slo que en el caso de los carnvoros se ha especializado el tipo de comida que comen para indicar que se trata de carne. Aparece una nueva caracterstica de este tipo de animal, que es el hecho de que los carnvoros cazan. En el caso de los herbvoros, encontramos que comen plantas y pacen. En el segundo nivel de especializacin, encontramos un animal que es a la vez "Herbvoro y "Carnvoro y, como cabe esperar, este nuevo tipo de animal puede hacer todo lo que pueden hacer sus ancestros, comer carne, comer plantas, cazar y pacer, no encontrando ninguna caracterstica adicional en los "Omnvoros. 1.2.4.- Qu es una Interfaz Una interfaz es un mecanismo que emplean dos objetos para interactuar. En nuestro ejemplo de la tostadora, el humano emplea el botn de tostar a modo de interfaz para pasar el mensaje "tuesta el pan que tienes en la bandeja. Las interfaces definen un conjunto de mtodos para establecer el protocolo en base al cual interactan dos objetos. En este sentido, existe una analoga entre interfaces y protocolos. Para que el humano pueda tostar, debe seguir el protocolo establecido por la interfaz botn de tostar, consistente en pulsar dicho botn. Las interfaces capturan las similitudes entre clases no relacionaras, sin necesidad de forzar una interrelacin y son a su vez clases. UNL-Informtica Educativa La programacin y su Aplicacin en la Educacin 10 1.3.- EI Lenguaje Unificado de ModeIado, UML El UML es un lenguaje de modelado cuyo vocabulario y sintaxis estn ideados para la representacin conceptual y fsica de un sistema. Sus modelos son precisos, no ambiguos, completos y pueden ser trasladados directamente a una gran variedad de lenguajes de programacin, como Java, C++ o Visual Basic, pero tambin a tablas de bases de datos relacionales y orientadas a objetos. Es posible generar cdigo a partir de un modelo UML (ingeniera directa) y tambin puede construirse un modelo a partir de la implementacin (ingeniera inversa), aunque en las dos situaciones debe intervenir un mayor o menor grado de supervisin por parte del programador, en funcin de lo buenas que sean las herramientas empleadas. 1.3.1.- BIoques bsicos de construccin de UML Los bloques bsicos de construccin de UML son tres, los elementos, las relaciones y los diagramas. Los elementos son abstracciones que actan como unidades bsicas de construccin. Hay cuatro tipos, los estructurales, los de comportamiento, los de agrupacin y los de notacin. En cuanto a los elementos estructurales son las partes estticas de los modelos y representan aspectos conceptuales o materiales. Los elementos de comportamiento son las partes dinmicas de los modelos y representan comportamientos en el tiempo y en el espacio. Los elementos de agrupacin son las partes organizativas de UML, establecen las divisiones en que se puede fraccionar un modelo. Slo hay un elemento de agrupacin, el paquete, que se emplea para organizar otros elementos en grupos. Los elementos de notacin son las partes explicativas de UML, comentarios que pueden describir textualmente cualquier aspecto de un modelo. Slo hay un elemento de notacin principal, la nota. Las relaciones son abstracciones que actan como unin entre los distintos elementos. Hay cuatro tipos, la dependencia, la asociacin, la generalizacin y la realizacin. Los diagramas son la disposicin de un conjunto de elementos, que representan el sistema modelado desde diferentes perspectivas. UML tiene nueve diagramas fundamentales, agrupados en dos grandes grupos, uno para modelar la estructura esttica del sistema y otro para modelar el comportamiento dinmico. Los diagramas estticos son: el de clases, de objetos, de componentes y de despliegue. Los diagramas de comportamiento son: el de Casos de Uso, de secuencia, de colaboracin, de estados y de actividades. UNL-Informtica Educativa La programacin y su Aplicacin en la Educacin 11 1.3.1.1.- EIementos E L E M E N T O S E S T R U C T U R A L E S Clase Describe un conjunto de objetos que comparten los mismos atributos, mtodos, relaciones y semntica. Las clases implementan una o ms interfaces. Clase activa Se trata de una clase, en la que existe procesos o hilos de ejecucin concurrentes con otros elementos. Las lneas del contorno son ms gruesas que en la clase "normal nterfaz Agrupacin de mtodos u operaciones que especifican un servicio de una clase o componente, describiendo su comportamiento, completo o parcial, externamente visible. UML permite emplear un crculo para representar las interfaces, aunque lo ms normal es emplear la clase con el nombre en cursiva. Colaboracin Define una interaccin entre elementos que cooperan para proporcionar un comportamiento mayor que la suma de los comportamientos de sus elementos. Caso de uso Describe un conjunto de secuencias de acciones que un sistema ejecuta, para producir un resultado observable de inters. Se emplea para estructurar los aspectos de comportamiento de un modelo. UNL-Informtica Educativa La programacin y su Aplicacin en la Educacin 12 Componente Parte fsica y por tanto reemplazable de un modelo, que agrupa un conjunto de interfaces, archivos de cdigo fuente, clases, colaboraciones y proporciona la implementacin de dichos elementos. Nodo Elemento fsico que existe en tiempo de ejecucin y representa un recurso computacional con capacidad de procesar. EIementos de comportamiento nteraccin Comprende un conjunto de mensajes que se intercambian entre un conjunto de objetos, para cumplir un objetivo especifico. Mquinas de estados Especifica la secuencia de estados por los que pasa un objeto o una interaccin, en respuesta a eventos. EIementos de agrupacin Paquete Se emplea para organizar otros elementos en grupos. EIementos de notacin Nota Partes explicativa de UML, que puede describir textualmente cualquier aspecto del modelo TabIa 1: EIementos de construccin en UML 1.3.1.2.- ReIaciones Dependencia Es una relacin entre dos elementos, tal que un cambio en uno puede afectar al otro. Asociacin Es una relacin estructural que resume un conjunto de enlaces que son conexiones entre objetos. Generalizacin Es una relacin en la que el elemento generalizado puede ser substituido por cualquiera de los elementos hijos, ya que comparten su estructura y comportamiento. UNL-Informtica Educativa La programacin y su Aplicacin en la Educacin 13 Realizacin Es una relacin que implica que la parte realizante cumple con una serie de especificaciones propuestas por la clase realizada (interfaces). TabIa 2: EIementos de reIacin en UML UNL-Informtica Educativa La programacin y su Aplicacin en la Educacin 14 1.3.1.3.- Diagramas M O D E L A N E S T R U C T U R A Clases Muestra un conjunto de clases, interfaces y colaboraciones, as como sus relaciones, cubriendo la vista de diseo esttica del sistema. Objetos Anlogo al diagrama de clases, muestra un conjunto de objetos y sus relaciones, pero a modo de vista instantnea de instancias de una clase en el tiempo. Componente s Muestra la organizacin y dependencias de un conjunto de componentes. Cubren la vista de implementacin esttica de un sistema. Un componente es un mdulo de cdigo, de modo que los diagramas de componentes son los anlogos fsicos a los diagramas de clases. Despliegue Muestra la configuracin del hardware del sistema, los nodos de proceso y los componentes empleados por stos. Cubren la vista de despliegue esttica de una arquitectura. M O D E L A N Casos de Uso Muestra un conjunto de casos de uso, los actores implicados y sus relaciones. Son diagramas fundamentales en el modelado y organizacin del sistema. Secuencia Son diagramas de interaccin, muestran un conjunto de objetos y sus relaciones, as como los mensajes que se intercambian entre ellos. Cubren la vista dinmica del sistema. El diagrama de secuencia resalta la ordenacin UNL-Informtica Educativa La programacin y su Aplicacin en la Educacin 15 C O M P O R T A M I E N T O temporal de los mensajes, mientras que el de colaboracin resalta la organizacin estructural de los objetos, ambos siendo equivalentes o isomorfos. En el diagrama de colaboracin de la figura de la izquierda, se puede ver que los elementos grficos no son cajas rectangulares, como cabra esperar, y en su lugar encontramos sus versiones adornadas. Estas versiones tienen como finalidad evidenciar un rol especfico del objeto siendo modelado. En la figura encontramos de izquierda a derecha y de arriba abajo un Actor, una nterfaz, un Control (modela un comportamiento) y una nstancia (modela un objeto de dato). Colaboracin Estados Muestra una mquina de estados, con sus estados, transiciones, eventos y actividades. Cubren la vista dinmica de un sistema. Modelan comportamientos reactivos en base a eventos. Actividades Tipo especial de diagrama de estados que muestra el flujo de actividades dentro de un sistema. TabIa 3: Diagramas de UML 1.3.1.3.1.- Diagrama de CIases y Diagrama de Objetos Los diagramas de clases muestran un resumen del sistema en trminos de sus clases y las relaciones entre ellas. Son diagramas estticos que muestran qu es lo que interacta, pero no cmo interacta o qu pasa cuando ocurre la interaccin. El siguiente diagrama modela los pedidos de un cliente a una tienda de venta por catlogo. La clase principal es "Pedido, asociada a un cliente, una forma de pago y un conjunto de artculos. La clase "Pago es abstracta, en UML los nombres de clases abstractas se representan en Itlica. Las clases abstractas actan a modo de interfaz, UNL-Informtica Educativa La programacin y su Aplicacin en la Educacin 16 proporcionando nicamente un listado de mtodos a ser "realizados por las clases que las implementan o realizan. "Pago es una superclase especializada, y a la vez realizada, por sus formas ms comunes "Credito y "Efectivo. Un "Pedido tiene una nica forma de pago, expresada por su multiplicidad, 1, mientras que una forma de pago puede estar presente en uno o ms pedidos, como sugiere su multiplicidad, 1..*. En cuanto a las asociaciones, observamos que algunas vienen representadas como una flecha navegable, cuya orientacin expresa el sentido en que se consultan los datos. Las asociaciones sin flecha son bi-direccionales. Las agregaciones expresan "conjunto de; la relacin entre "Pedido y "Articulo es de conjunto. Un pedido es una agregacin de una o ms lneas de pedido, donde cada una hace alusin a un artculo concreto, as mismo una lnea de pedido puede estar presente en varios pedidos y un artculo puede no haber sido solicitado nunca. Figura 2: Diagrama de CIases En cuanto a la multiplicidad, la siguiente tabla resume las ms comunes. Hay que tener en cuenta que la multiplicidad se expresa "en el lado opuesto de la relacin y es el nmero de posibles instancias de una clase asociadas con una nica instancia de la clase en el otro extremo. MuItipIicidad Significado 1 Una nica instancia N / * N instancias 0..N / 0..* Entre ninguna y N instancias 1..N / 1..* Entre una y N instancias 0..1 Ninguna o una instancia N..M Entre N y M instancias TabIa 4: MuItipIicidad en Diagramas de CIases UNL-Informtica Educativa La programacin y su Aplicacin en la Educacin 17 El siguiente diagrama muestra una dependencia existente entre las clases "Pedido y "Fecha. Cualquier cambio en la clase dependida, "Fecha, afectar la clase dependiente, "Pedida. As mismo se puede observar que las clases vienen representadas por cajas en las que hay tres separaciones, o compartimentos. El primero se emplea siempre para indicar el nombre de la clase, el segundo para mostrar los atributos y el tercero para los mtodos. Tanto los atributos como los mtodos vienen precedidos por un smbolo de acceso, que normalmente suele ser un "+" para el acceso pblico, un "-" para el acceso privado, (slo por otros mtodos de la clase) y un "#" para el acceso protegido (slo por clases hija), aunque la herramienta empleada en la elaboracin del tutorial traduce estos elementos en iconos. Los atributos tienen un tipo que puede mostrarse a continuacin de su nombre separado por ":". De igual manera, los mtodos pueden devolver un elemento de un tipo determinado y recibir parmetros, expresados entre parntesis mediante el nombre del parmetro y el tipo, separados por ":". Para el caso de mltiples parmetros, se separan por comas (p1:t1 p!:t! """ pn:tn). Los parmetros que tienen un valor por defecto se expresan mediante un "=" y el valor, a continuacin del tipo (p1:t1#v1) y si un parmetro en la posicin "i de la lista de parmetros tiene valor por defecto, todos los parmetros que le sigan, es decir que ocupen posiciones sucesivas a "i en la lista, debern tener tambin un valor por defecto. Los atributos y mtodos estticos (de clase) se representan mediante un subrayado (en el caso de los mtodos se puede emplear el estereotipo $$static%% los estereotipos se ven ms adelante). Figura 3: ReIacin de dependencia en Diagramas de CIase El siguiente diagrama muestra una auto-relacin de agregacin. Un "Departamento puede estar compuesto a su vez por ms sub-departamentos, o ninguno, con la restriccin de que el mnimo nmero de personas en los sub-departamentos debe ser dos. Las restricciones son condiciones que deben ser cumplidas siempre, se expresan entre llaves "{condicin }. Figura 4: Auto-agregacin UNL-Informtica Educativa La programacin y su Aplicacin en la Educacin 18 Los diagramas de objetos son anlogos a los de clases, con la particularidad de que en lugar de encontrar clases, encontramos instancias de stas. Son tiles para explicar partes pequeas del modelo en las que hay relaciones complejas. 1.3.1.3.2.- Diagrama de Componentes y Diagrama de DespIiegue Los componentes son mdulos de cdigo, as que los diagramas de componentes vienen a ser los anlogos fsicos a los diagramas de clases. Muestran como est organizado un conjunto de componentes y las dependencias que existen entre ellos. Figura 5: Diagrama de Componentes Los diagramas de despliegue sirven para modelar la configuracin hardware del sistema, mostrando qu nodos lo componen. Figura 6: Diagrama de DespIiegue UNL-Informtica Educativa La programacin y su Aplicacin en la Educacin 19 1.3.1.3.3.- Diagrama de Casos de Uso Los diagramas de Casos de Uso describen lo que hace un sistema desde el punto de vista de un observador externo, enfatizando el qu ms que el cmo. Plantean escenarios, es decir, lo que pasa cuando alguien interacta con el sistema, proporcionando un resumen para una tarea u objetivo. El siguiente Caso de Uso describe como Carlos va a desayunar (este es su objetivo), para lo que se plantea el escenario de preparar su caf y el pan tostado . Figura 7: Diagrama de Casos de Uso niveI 1 En los Casos de Uso, los &ctores son papeles que determinadas personas u objetos desempean. Se representan mediante un "hombre de palitos, de modo que en el ejemplo, Carlos es un Actor. Los Casos de Uso se representan por medio de valos y las lneas que unen Actores con Casos de Uso representan una asociacin de comunicacin. Por su puesto, un Caso de Uso puede ser descrito en mayor profundidad. Por ejemplo si tomamos por separado "Preparar pan y "Preparar cafe, podemos bajar un nivel de descripcin y llegar a los siguientes Casos de Uso. Figura 8: Diagrama Casos de Uso niveI 2 A 'Carlos tuesta el pan en la tostadora despus lo unta con mante(uilla ) mermelada de fresa ) se lo come posiblemente mojndolo en un caf"* UNL-Informtica Educativa La programacin y su Aplicacin en la Educacin 20 Figura 9: Diagrama Casos de Uso niveI 2 B 'Carlos calienta leche a+ade caf ) azcar al gusto ) se lo bebe"* Los Casos de Uso suelen venir delimitados por fronteras o lmites, que definen una separacin entre lo que es realmente la funcionalidad del sistema y los actores que la usan o colaboran en su desempeo. En las figuras, esta separacin viene representada por medio de la caja que encapsula los valos. Los Casos de Uso son acompaados por una explicacin textual que clarifica las posibles cadencias del lenguaje meramente grfico. De esta manera, combinando Casos de Uso y explicacin textual, se puede obtener escenarios no ambiguos, que resultan ideales en la captura de requisitos de usuario, dada su sencillez de comprensin incluso por quien no est familiarizado con UML. Los Casos de Uso se emplean tambin en la preparacin de escenarios de pruebas con que verificar el software una vez ha sido construido. El siguiente Caso de Uso es equivalente al primero, "Desayuno, slo que en l se ha condensado la mxima cantidad posible de informacin. En l se muestra un nuevo elemento que hasta ahora no se haba mostrado, el "estereotipo, que viene entre sendos smbolos angulados "<< y ">> y concreta un paso ms all el tipo de relacin existente entre dos Casos de Uso. Encontramos dos estereotipos $$include%% y $$e,tend%%. El primero indica que el Caso de Uso "Tostar pan requiere de "Usar tostadora para poder ser llevado a cabo. Esta es una forma muy adecuada de sacar factor comn entre Casos de Uso, o incluso de fraccionar Casos de Uso muy grandes. El segundo indica que el Caso de Uso "Untar pan es una variacin de "Untar. Observamos tambin que "Comer pan y "Beber cafe son una generalizacin de "Alimentarse. Figura 10: Diagrama Casos de Uso niveI 1 detaIIado UNL-Informtica Educativa La programacin y su Aplicacin en la Educacin 21 "Carlos va a desayunar. Para ello debe hacer dos actividades distintas, pero relacionadas. La primera consisten en tostar pan, para lo cual necesita emplear una tostadora. Una vez tostado el pan, lo unta de mantequilla y mermelada de fresa (untar pan no es muy distinto de untar otro tipo de alimentos). La segunda consiste en preparar el caf, par lo cual necesita calentar leche y aadir caf y azuzar. Terminadas ambas actividades, Carlos puede proceder a alimentarse, comiendo el pan tostado y bebiendo el caf. El orden en que realice las actividades da igual y tambin da igual si se realizan a la vez. 1.3.1.3.4.- Diagrama de Secuencia y Diagrama de CoIaboracin Los diagramas de secuencia describen como los objetos del sistema colaboran. Se trata de un diagrama de interaccin que detalla como las operaciones se llevan a cabo, qu mensajes son enviados y cuando, organizado todo en torno al tiempo. El tiempo avanza "hacia abajo en el diagrama. Los objetos involucrados en la operacin se listan de izquierda a derecha de acuerdo a su orden de participacin dentro de la secuencia de mensajes. Figura 11: Diagrama de Secuencia Las lneas verticales o "lneas de la vida representan el tiempo de vida del objeto. La vida del objeto "carlos no termina en este diagrama, sin embargo la del objeto "tosty s y esto viene representado mediante el aspa al final de su lnea de la vida. Los rectngulos verticales son barras de activacin y representan la duracin de la ejecucin del mensaje. El mensaje "Encender, posiblemente implementado mediante la introduccin del enchufe en una toma de pared, tiene una duracin escasa y similar a la de "Apagar. No ocurre lo mismo con la llamada al mtodo "tostar(), que dura desde la pulsacin del botn de tostar hasta que el pan es retirado de la bandeja y adems interviene la emisin de un aviso cuando el pan est lo suficientemente caliente, a fin de evitar que se queme. Como se puede observar, la accin tostar viene condicionada por la presencia de pan en la bandeja de la tostadora. En UML los corchetes "[]" expresan condicin y si estn precedidos de un asterisco indican interaccin mientras se cumpla la condicin. UNL-Informtica Educativa La programacin y su Aplicacin en la Educacin 22 Los mensajes que son intercambiados entre los objetos de un diagrama de secuencia pueden ser s-ncronos o as-ncronos. Los mensajes asncronos son aquellos tal que el emisor puede enviar nuevos mensajes mientras el original est siendo procesado. El mensaje asncrono ocurre en el tiempo de manera independiente a otros mensajes. Los mensajes sncronos son todo lo contrario, el emisor debe esperar a que termine el tiempo de proceso del mensaje antes de que pueda emitir nuevos mensajes. UML emplea los siguientes convenios para representar el tipo de mensaje. SmboIo Significado Mensaje simple que puede ser sncrono o asncrono. Mensaje simple de vuelta (opcional). Mensaje sncrono. Mensaje asncrono. TabIa 5: Tipos de mensaje en diagramas de interaccin Los diagramas de colaboracin son otro tipo de diagramas de interaccin, que contiene la misma informacin que los de secuencia, slo que se centran en las responsabilidades de cada objeto, en lugar de en el tiempo en que los mensajes son enviados. Cada mensaje de un diagrama de colaboracin tiene un nmero de secuencia. El primer nivel de la secuencia es 1, y los mensajes que son enviados durante la misma llamada a un mtodo se numeran 1.1, 1.2 y as sucesivamente para tantos niveles como sea necesario. Figura 12: Diagrama de CoIaboracin UNL-Informtica Educativa La programacin y su Aplicacin en la Educacin 23 1.3.1.3.5.- Diagrama de Estados y Diagrama de Actividades Los diagramas de estados muestran los posibles estados en que puede encontrarse un objeto y las transiciones que pueden causar un cambio de estado. El estado de un objeto depende de la actividad que est llevando a cabo o de alguna condicin. Las transiciones son las lneas que unen los diferentes estados. En ellas se representa la condicin que provoca el cambio, seguida de la accin oportuna separada por "/". En un estado en que el objeto esta pendiente de algn tipo de validacin que dependa de un proceso en curso, no es necesario evento externo alguno para que se produzca la transicin, ya que sta ocurrir cuando termine el proceso, en funcin del resultado de ste. En estos casos es conveniente, por claridad, incluir la condicin que de la que depende la transicin (entre corchetes). Los estados inicial, a partir del que se "entra en la mquina de estados, y final, que indica que la mquina de estados termina, no tienen otro significado adicional, son elementos ornamentales y se representan mediante un circulo negro y un circulo negro resaltado respectivamente. Los estados de un diagrama de estados pueden anidarse, de forma que los estados relacionados pueden ser agrupados en un estado compuesto. Esto puede ser necesario cuando una actividad involucra sub-actividades asncronas o concurrentes. Figura 13: Mquina de Estados, estados simpIes Los diagramas de actividades son bsicamente diagramas de flujo adornados, que guardan mucha similitud con los diagramas de estados. Mientras que los diagramas de estados centran su atencin en el proceso que est llevando a cabo un objeto, los diagramas de actividades muestran como las actividades fluyen y las dependencias entre ellas. Los diagramas de actividades pueden dividirse en "calles que determinan qu objeto es responsable de qu actividad. Las actividades vienen unidas por transiciones, que pueden separarse en ramas en funcin del resultado de una condicin expresada entre corchetes. Cada rama muestra la condicin que debe ser satisfecha para que el UNL-Informtica Educativa La programacin y su Aplicacin en la Educacin 24 flujo opte por ese camino. gualmente, las transiciones se pueden bifurcarse en dos o ms actividades paralelas. Figura 14: Diagrama de Actividades UNL-Informtica Educativa La programacin y su Aplicacin en la Educacin 25 SEGUNDA UNIDA: 2.1. UtiIizacin de Herramienta para UmI nstalacin y uso del rea de trabajo de la herramienta UML 2.1.1 Crear Nuevos diagramas con Ia Herramienta UML Elaborar un diagrama de casos de uso para un cajero automatico 2.2. Lenguaje de POO Se le llama as a cualquier lenguaje de programacin que implemente los conceptos definidos por la programacin orientada a objetos. Cabe notar que los conceptos definidos en la programacin orientada a objetos no son una condicin sino que son para definir que un lenguaje es orientado a objetos. Existen conceptos que pueden estar ausentes en un lenguaje dado y sin embargo, no invalidar su definicin como lenguaje orientado a objetos. Quizs las condiciones mnimas necesarias las provee el formalismo que modeliza mejor las propiedades de un sistema orientado a objetos: los tipos de datos abstractos. Siguiendo esa idea, cualquier lenguaje que permita la definicin de tipos de datos, de operaciones nuevas sobre esos tipos de datos, y de instanciar el tipo de datos podra ser considerado orientado a objetos. Esta definicin concuerda incluso con ciertos ejemplos prcticos, que no son considerados dentro de la programacin orientada a objetos, pero que podran serlo. Por ejemplo, la programacin de interfaces grficas de usuario para los sistemas X-Window utilizando infraestructuras de funciones y APs como Motif, Xview y Xlib, son realizadas usualmente en lenguaje C, pero organizando el cdigo en una manera que "parecen objetos" (los Widgets). 2.2.1. Introduccin aI Ienguaje El lenguaje Java se cre con cinco objetivos principales: 1. Debera usar la metodologa de la programacin orientada a objetos. 2. Debera permitir la ejecucin de un mismo programa en mltiples sistemas operativos. 3. Debera incluir por defecto soporte para trabajo en red. 4. Debera disearse para ejecutar cdigo en sistemas remotos de forma segura. 5. Debera ser fcil de usar y tomar lo mejor de otros lenguajes orientados a objetos, como C++. UNL-Informtica Educativa La programacin y su Aplicacin en la Educacin 26 Caracteristicas deI Lenguaje Java Orientado a Objetos ("OO), se refiere a un mtodo de programacin y al diseo del lenguaje. Aunque hay muchas interpretaciones para OO, una primera idea es disear el software de forma que los distintos tipos de datos que use estn unidos a sus operaciones. As, los datos y el cdigo (funciones o mtodos) se combinan en entidades llamadas objetos. Un objeto puede verse como un paquete que contiene el "comportamiento (el cdigo) y el "estado (datos). El principio es separar aquello que cambia de las cosas que permanecen inalterables. Frecuentemente, cambiar una estructura de datos implica un cambio en el cdigo que opera sobre los mismos, o viceversa. Esta separacin en objetos coherentes e independientes ofrece una base ms estable para el diseo de un sistema software. El objetivo es hacer que grandes proyectos sean fciles de gestionar y manejar, mejorando como consecuencia su calidad y reduciendo el nmero de proyectos fallidos. Otra de las grandes promesas de la programacin orientada a objetos es la creacin de entidades ms genricas (objetos) que permitan la reutilizacin del software entre proyectos, una de las premisas fundamentales de la ngeniera del Software. Un objeto genrico "cliente, por ejemplo, debera en teora tener el mismo conjunto de comportamiento en diferentes proyectos, sobre todo cuando estos coinciden en cierta medida, algo que suele suceder en las grandes organizaciones. En este sentido, los objetos podran verse como piezas reutilizables que pueden emplearse en mltiples proyectos distintos, posibilitando as a la industria del software a construir proyectos de envergadura empleando componentes ya existentes y de comprobada calidad; conduciendo esto finalmente a una reduccin drstica del tiempo de desarrollo. Podemos usar como ejemplo de objeto el aluminio. Una vez definidos datos (peso, maleabilidad, etc.), y su "comportamiento (soldar dos piezas, etc.), el objeto "aluminio puede ser reutilizado en el campo de la construccin, del automvil, de la aviacin, etc. La reutilizacin del software ha experimentado resultados dispares, encontrando dos dificultades principales: el diseo de objetos realmente genricos es pobremente comprendido, y falta una metodologa para la amplia comunicacin de oportunidades de reutilizacin. Algunas comunidades de "cdigo abierto (open source) quieren ayudar en este problema dando medios a los desarrolladores para diseminar la informacin sobre el uso y versatilidad de objetos reutilizables y libreras de objetos. Independencia de Ia pIataforma Significa que programas escritos en el lenguaje Java pueden ejecutarse en cualquier tipo de hardware. Es lo que significa ser capaz de escribir un programa una vez y que pueda ejecutarse en cualquier dispositivo, tal como reza el axioma de Java, '''write once, run everywhere'''. Para ello, se compila el cdigo fuente escrito en lenguaje Java, para generar un cdigo conocido como "bytecode (especficamente Java bytecode)instrucciones mquina simplificadas especficas de la plataforma Java. Esta pieza est "a medio camino entre el cdigo fuente y el cdigo mquina que entiende el dispositivo destino. El bytecode es ejecutado entonces en la mquina virtual (VM), un programa escrito en cdigo nativo de la plataforma destino (que es el que entiende su hardware), que interpreta y ejecuta el cdigo. Adems, se suministran libreras adicionales para acceder a las caractersticas de cada dispositivo (como los UNL-Informtica Educativa La programacin y su Aplicacin en la Educacin 27 grficos, ejecucin mediante hebras o threads, la interfaz de red) de forma unificada. Se debe tener presente que, aunque hay una etapa explcita de compilacin, el bytecode generado es interpretado o convertido a instrucciones mquina del cdigo nativo por el compilador JT (Just n Time). La portabilidad es tcnicamente difcil de lograr, y el xito de Java en ese campo ha sido dispar. Aunque es de hecho posible escribir programas para la plataforma Java que acten de forma correcta en mltiples plataformas de distinta arquitectura, el gran nmero de estas con pequeos errores o inconsistencias llevan a que a veces se parodie el eslogan de Sun, "Write once, run anywhere" como "Write once, debug everywhere" (o "Escrbelo una vez, ejectalo en todas partes por "Escrbelo una vez, depralo en todas partes) EI recoIector de basura Un argumento en contra de lenguajes como C++ es que los programadores se encuentran con la carga aadida de tener que administrar la memoria solicitada dinmicamente de forma manual: En Java, este problema potencial es evitado en gran medida por el recolector automtico de basura (o automatic garbage collector). El programador determina cundo se crean los objetos y el entorno en tiempo de ejecucin de Java (Java runtime) es el responsable de gestionar el ciclo de vida de los objetos. El programa, u otros objetos pueden tener localizado un objeto mediante una referencia a ste (que, desde un punto de vista de bajo nivel es una direccin de memoria). Cuando no quedan referencias a un objeto, el recolector de basura de Java borra el objeto, liberando as la memoria que ocupaba previniendo posibles fugas (ejemplo: un objeto creado y nicamente usado dentro de un mtodo slo tiene entidad dentro de ste; al salir del mtodo el objeto es eliminado). La recoleccin de basura de Java es un proceso prcticamente invisible al desarrollador. Es decir, el programador no tiene conciencia de cundo la recoleccin de basura tendr lugar, ya que sta no tiene necesariamente que guardar relacin con las acciones que realiza el cdigo fuente. Debe tenerse en cuenta que la memoria es slo uno de los muchos recursos que deben ser gestionados. Apariencia La apariencia externa (el '''look and feel''') de las aplicaciones GU (Graphical User nterface) escritas en Java usando la plataforma Swing difiere a menudo de la que muestran aplicaciones nativas. Aunque el programador puede usar el juego de herramientas AWT (Abstract Windowing Toolkit) que genera objetos grficos de la plataforma nativa, el AWT no es capaz de funciones grficas avanzadas sin sacrificar la portabilidad entre plataformas; ya que cada una tiene un conjunto de APs distinto, especialmente para objetos grficos de alto nivel. Las herramientas de Swing, escritas completamente en Java, evitan este problema construyendo los objetos grficos a partir de los mecanismos de dibujo bsicos que deben estar disponibles en todas las plataformas. El inconveniente es el trabajo extra requerido para conseguir la misma apariencia de la plataforma destino. Aunque esto es posible (usando GTK+ y el Look-and-Feel de Windows), la mayora de los usuarios no saben cmo cambiar la apariencia que se proporciona por defecto por aquella UNL-Informtica Educativa La programacin y su Aplicacin en la Educacin 28 que se adapta a la de la plataforma. Mencin merece la versin optimizada del lenguaje. Rendimiento El rendimiento de una aplicacin est determinado por multitud de factores, por lo que no es fcil hacer una comparacin que resulte totalmente objetiva. En tiempo de ejecucin, el rendimiento de una aplicacin Java depende ms de la eficiencia del compilador, o la JVM, que de las propiedades intrnsecas del lenguaje. El bytecode de Java puede ser interpretado en tiempo de ejecucin por la mquina virtual, o bien compilado al cargarse el programa, o durante la propia ejecucin, para generar cdigo nativo que se ejecuta directamente sobre el hardware. Si es interpretado, ser ms lento que usando el cdigo mquina intrnseco de la plataforma destino. Si es compilado, durante la carga inicial o la ejecucin, la penalizacin est en el tiempo necesario para llevar a cabo la compilacin. Algunas caractersticas del propio lenguaje conllevan una penalizacin en tiempo, aunque no son nicas de Java. Algunas de ellas son el chequeo de los lmites de arrays, chequeo en tiempo de ejecucin de tipos, y la indireccin de funciones virtuales. El uso de un recolector de basura para eliminar de forma automtica aquellos objetos no requeridos, aade una sobrecarga que puede afectar al rendimiento, o ser apenas apreciable, dependiendo de la tecnologa del recolector y de la aplicacin en concreto. Las JVM modernas usan recolectores de basura que gracias a rpidos algoritmos de manejo de memoria, consiguen que algunas aplicaciones puedan ejecutarse ms eficientemente. El rendimiento entre un compilador JT y los compiladores nativos puede ser parecido, aunque la distincin no est clara en este punto. La compilacin mediante el JT puede consumir un tiempo apreciable, un inconveniente principalmente para aplicaciones de corta duracin o con gran cantidad de cdigo. Sin embargo, una vez compilado, el rendimiento del programa puede ser comparable al que consiguen compiladores nativos de la plataforma destino, inclusive en tareas numricas. Aunque Java no permite la expansin manual de llamadas a mtodos, muchos compiladores JT realizan esta optimizacin durante la carga de la aplicacin y pueden aprovechar informacin del entorno en tiempo de ejecucin para llevar a cabo transformaciones eficientes durante la propia ejecucin de la aplicacin. Esta recompilacin dinmica, como la que proporciona la mquina virtual HotSpot de Sun, puede llegar a mejorar el resultado de compiladores estticos tradicionales, gracias a los datos que slo estn disponibles durante el tiempo de ejecucin. Java fue diseado para ofrecer seguridad y portabilidad, y no ofrece acceso directo al hardware de la arquitectura ni al espacio de direcciones. Java no soporta expansin de cdigo ensamblador, aunque las aplicaciones pueden acceder a caractersticas de bajo nivel usando libreras nativas (JN, Java Native nterfaces). 2.2.2. Introduccin aI Ienguaje JAVA. EncapsuIado.- es como un envoltorio protector que evita que otro cdigo que esta afuera pueda acceder arbitrariamente al cdigo o a los datos. En java la base del encapsulado es la clase. UNL-Informtica Educativa La programacin y su Aplicacin en la Educacin 29 Una clase define la estructura y el comportamiento (datos y cdigo) que sern compartidos por un conjunto de objetos Herencia.- Es el proceso mediante el cual un objeto adquiere las propiedades de otro. Esto es importante ya que as se consigue la clasificacin jerrquica. PoIimorfismo.- viene del griego (muchas formas) Es una caracterstica que le permite a una interfaz ser utilizada por una clase general de acciones. De forma general se puede expresar con la frase: una interfaz varios mtodos Identificador.- Puede ser cualquier secuencia de letras con maysculas y minsculas, nmeros o caracteres, subrayados y el signo $: No pueden comenzar por un numero Se diferencia de maysculas y minsculas Ejemplo: correcto_es 2.2.3. Sintaxis y semntica La sintaxis de Java se deriva en gran medida de C++. Pero a diferencia de ste, que combina la sintaxis para programacin genrica, estructurada y orientada a objetos, Java fue construido desde el principio para ser completamente orientado a objetos. Todo en Java es un objeto (salvo algunas excepciones), y todo en Java reside en alguna clase. HoIa Mundo Para conocer el origen del programa "Hola Mundo ApIicaciones autnomas // Hola.java public class Hola { public static void main(String[] args) { System.out.println("Hola, mundo!"); } } En Java existen 3 tipos de comentarios: De una sola lnea De varias lneas Comentarios JavaDoc o de documentacin. Los comentarios de una lnea se escriben con //. Ejemplo: //esto es un comentario de una lnea Los comentarios de varias lneas se escriben encerrados entre /* y */. Ejemplo: /* Esto es un comentario UNL-Informtica Educativa La programacin y su Aplicacin en la Educacin 30 de varias lneas. */ Los comentarios JavaDoc son un poco ms complejos. Se colocan justamente antes de una declaracin de un mtodo o una variable. El texto de estos comentarios ha de ir encerrado entre los smbolos /** y */. Ejemplo: /** Esto es un comentario de documentacin y puede tener ms de una lnea */Parntesis ( ).- Para contener expresiones de sentencia de control y flujo en conversiones de tipo Las IIaves { }.- Para contener los valor de las veces inicializadas automticamente. Los corchetes [ ] .-Para declarar tipos matriz Punto y coma ; .-Para separar sentencias Punto (.) .- Para separar nombres de paquetes, subpaquetes y clases Qu son Ios objetos? En informtica, un OBJETO es un conjunto de variables y de los mtodos relacionados con esas variables. Un poco ms sencillo: un objeto contiene en s mismo la informacin y los mtodos o funciones necesarios para manipular esa informacin. Lo ms importante de los objetos es que permiten tener un control total sobre 'quin' o 'qu' puede acceder a sus miembros, es decir, los objetos pueden tener miembros pblicos a los que podrn acceder otros objetos o miembros privados a los que slo puede acceder l. Estos miembros pueden ser tanto variables como funciones. El gran beneficio de todo esto es la encapsulacin, el cdigo fuente de un objeto puede escribirse y mantenerse de forma independiente a los otros objetos contenidos en la aplicacin. Qu son Ias cIases? Una CLASE es un proyecto, o prototipo, que define las variables y los mtodos comunes a un cierto tipo de objetos. Un poco ms sencillo: las clases son las matrices de las que luego se pueden crear mltiples objetos del mismo tipo. La clase define las variables y los mtodos comunes a los objetos de ese tipo, pero luego, cada objeto tendr sus propios valores y compartirn las mismas funciones. Primero deberemos crear una clase antes de poder crear objetos o ejemplares de esa clase. Qu son Ios mensajes? Para poder crear una aplicacin necesitars ms de un objeto, y estos objetos no pueden estar aislados unos de otros, pues bien, para comunicarse esos objetos se envan mensajes. UNL-Informtica Educativa La programacin y su Aplicacin en la Educacin 31 Los mensajes son simples llamadas a las funciones o mtodos del objeto con el se quiere comunicar para decirle que haga cualquier cosa. Qu es Ia herencia? Qu significa esto la herencia, quin hereda qu; bueno tranquilo, esto slo significa que puedes crear una clase partiendo de otra que ya exista. Es decir, puedes crear una clase a travs de una clase existente, y esta clase tendr todas las variables y los mtodos de su 'superclase', y adems se le podrn aadir otras variables y mtodos propios. Se llama 'Superclase' a la clase de la que desciende una clase, puedes ver ms sobre la declaracin de clases en la pgina Declarar Clases. PaIabras CIave: Son palabras reservadas del lenguaje y no se pueden usar como identificadores. Algunas de ellas no estn en uso actualmente. UNL-Informtica Educativa La programacin y su Aplicacin en la Educacin 32 abstract default goto operator synchronized boolean do if outer this break double implements package throw byte else import private throws byvalue extends inner protected transient case false instanceof public true cast final int rest try catch finally interface return var char float long short void class for native static volatile const future new super while continue generic null switch VariabIes y Tipos de Datos Las variables son las partes importantes de un lenguaje de programacin: ellas son las entidades (valores, datos) que actan y sobre las que se acta. Una declaracin de variable siempre contiene dos componentes, el tipo de la variable y su nombre. tipoVariable nombre; Tipos de VariabIes Todas las variables en el lenguaje Java deben tener un tipo de dato. El tipo de la variable determina los valores que la variable puede contener y las operaciones que se pueden realizar con ella. Existen dos categorias de datos principales en el lenguaje Java: los tipos primitivos y los tipos referenciados. Los tipos primitivos contienen un slo valor e incluyen los tipos como los enteros, coma flotante, los caracteres, etc... La tabla siguiente muestra todos los tipos primitivos soportados por el lenguaje Java, su formato, su tamao y una breve descripcin de cada uno. Tipo Tamao/Formato Descripcin (Nmeros enteros) byte 8-bit complemento a 2 Entero de un Byte short 16-bit complemento a 2 Entero corto int 32-bit complemento a 2 Entero Iong 64-bit complemento a 2 Entero largo UNL-Informtica Educativa La programacin y su Aplicacin en la Educacin 33 (Nmeros reaIes) fIoat 32-bit EEE 754 Coma flotante de precisin simple doubIe 64-bit EEE 754 Coma flotante de precisin doble (otros tipos) char 16-bit Caracter Un slo carcter booIean true o false Un valor booleano (verdadero o falso) Nombres de VariabIes Un programa se refiere al valor de una variable por su nombre. Por convencin, en Java, los nombres de las variables empiezan con una letra minscula (los nombres de las clases empiezan con una letra mayscula). Un nombre de variabIe Java. 1. debe ser un identificador legal de Java comprendido en una serie de caracteres Unicode. Unicode es un sistema de codificacin que soporta texto escrito en distintos lenguajes humanos. Unicode permite la codificacin de 34.168 caracteres. Esto le permite utilizar en sus programas Java varios alfabetos como el Japons, el Griego, el Ruso o el Hebreo. Esto es importante para que los programadores pueden escribir cdigo en su lenguaje nativo. 2. no puede ser el mismo que una palabra clave o el nombre de un valor booleano (true or false) 3. no deben tener el mismo nombre que otras variables cuyas declaraciones aparezcan en el mismo mbito. La regla nmero 3 implica que podra existir el mismo nombre en otra variable que aparezca en un mbito diferente. Por convencin, los nombres de variables empiezan por un letra minscula. Si una variable est compuesta de ms de una palabra, como 'nombreDato' las palabras se ponen juntas y cada palabra despus de la primera empieza con una letra mayscula. Operadores de Java Los operadores realizan algunas funciones en uno o dos operandos. Los operadores que requieren un operador se llaman operadores unarios. Por ejemplo, ++ es un operador unario que incrementa el valor su operando en uno. Los operadores que requieren dos operandos se llaman operadores binarios. El operador = es un operador binario que asigna un valor del operando derecho al operando izquierdo. Los operadores unarios en Java pueden utilizar la notacin de prefijo o de sufijo. La notacin de prefijo significa que el operador aparece antes de su operando. operador operando La notacin de sufijo significa que el operador aparece despus de su operando: operando operador UNL-Informtica Educativa La programacin y su Aplicacin en la Educacin 34 Todos los operadores binarios de Java tienen la misma notacin, es decir aparecen entre los dos operandos: op1 operator op2 Adems de realizar una operacin tambin devuelve un valor. El valor y su tipo dependen del tipo del operador y del tipo de sus operandos. Por ejemplo, los operadores aritmticos (realizan las operaciones de aritmtica bsica como la suma o la resta) devuelven nmeros, el resultado tpico de las operaciones aritmticas. El tipo de datos devuelto por los operadores aritmticos depende del tipo de sus operandos: si sumas dos enteros, obtendrs un entero. Se dice que una operacin evala su resultado. Es muy til dividir los operadores Java en las siguientes categoras: aritmticos, relacionales y condicionales. Lgicos y de desplazamiento y de asignacin. Operadores Aritmticos El lenguaje Java soporta varios operadores aritticos - incluyendo + (suma), - (resta), * (multiplicacin), / (divisin), y % (mdulo)-- en todos los nmeros enteros y de coma flotante. Por ejemplo, puedes utilizar este cdigo Java para sumar dos nmeros: sumaEsto + aEsto O este cdigo para calcular el resto de una divisin: divideEsto % porEsto Esta tabla sumariza todas las operaciones aritmticas binarias en Java. Operador Uso Descripcin + op1 + op2 Suma op1 y op2 - op1 - op2 Resta op2 de op1 * op1 * op2 Multiplica op1 y op2 / op1 / op2 Divide op1 por op2 % op1 % op2 Obtiene el resto de dividir op1 por op2 Nota: El lenguaje Java extiende la definicin del operador + para incluir la concatenacin de cadenas. Los operadores + y - tienen versiones unarias que seleccionan el signo del operando. Operador Uso Descripcin + + op ndica un valor positivo - - op Niega el operando Adems, existen dos operadores de atajos aritmticos, ++ que incrementa en uno su operando, y -- que decrementa en uno el valor de su operando. UNL-Informtica Educativa La programacin y su Aplicacin en la Educacin 35 Operador Uso Descripcin ++ op ++ ncrementa op en 1; evala el valor antes de incrementar ++ ++ op ncrementa op en 1; evala el valor despus de incrementar -- op -- Decrementa op en 1; evala el valor antes de decrementar -- -- op Decrementa op en 1; evala el valor despus de decrementar Operadores ReIacionaIes y CondicionaIes Los valores relacionales comparan dos valores y determinan la relacin entre ellos. Por ejemplo, != devuelve true si los dos operandos son distintos. Esta tabla sumariza los operadores relacionales de Java. Operador Uso DevueIve true si > op1 > op2 op1 es mayor que op2 >= op1 >= op2 op1 es mayor o igual que op2 &It; op1 < op2 op1 es menor que op2 &It;= op1 <= op2 op1 es menor o igual que op2 == op1 == op2 op1 y op2 son iguales != op1 != op2 op1 y op2 son distintos Frecuentemente los operadores relacionales se utilizan con otro juego de operadores, los operadores condicionales, para construir expresiones de decisin ms complejas. Uno de estos operadores es && que realiza la operacin Y booleana . Por ejemplo puedes utilizar dos operadores relacionales diferentes junto con && para determinar si ambas relaciones son ciertas. La siguiente lnea de cdigo utiliza esta tcnica para determinar si un indice de un array est entre dos lmites- esto es, para determinar si el indice es mayor que 0 o menor que NUM_ENTRES (que se ha definido prviamente como un valor constante): 0 < index && index < NUM_ENTRES Observa que en algunas situaciones, el segundo operando de un operador relacional no ser evaluado. Consideremos esta sentencia: ((count > NUM_ENTRES) && (System.in.read() != -1)) Si count es menor que NUM_ENTRES, la parte izquierda del operando de && evala a false. El operador && slo devuelve true si los dos operandos son verdaderos. Por eso, en esta situacin se puede deteminar el valor de && sin evaluar el operador de la derecha. En un caso como este, Java no evala el operando de la derecha. As no se llamar a System.in.read() y no se leer un carcter de la entrada estandard. Aqu tienes tres operadores condicionales. Operador Uso DevueIve true si && op1 && op2 op1 y op2 son verdaderos || op1 || op2 uno de los dos es verdadero ! ! op op es falso UNL-Informtica Educativa La programacin y su Aplicacin en la Educacin 36 El operador & se puede utilizar como un sinnimo de && si ambos operadores son booleanos. Similarmente, | es un sinonimo de || si ambos operandos son booleanos. Operadores de DespIazamiento Los operadores de desplazamiento permiten realizar una manipualcin de los bits de los datos. Esta tabla sumariza los operadores lgicos y de desplazamiento disponibles en el lenguaje Java. Operador Uso Descripcin >> op1 >> op2 desplaza a la derecha op2 bits de op1 &It;&It; op1 << op2 desplaza a la izquierda op2 bits de op1 >>> op1 >>> op2 desplaza a la derecha op2 bits de op1(sin signo) & op1 & op2 bitwise and | op1 | op2 bitwise or ^ op1 ^ op2 bitwise xor ~ ~ op bitwise complemento Los tres operadores de desplazamiento simplemente desplazan los bits del operando de la izquierda el nmero de posiciones indicadas por el operador de la derecha. Los desplazamientos ocurren en la direccin indicada por el propio operador. Por ejemplo: desplaza los bits del entero 13 una posicin a la derecha. La representacin binaria del nmero 13 es 1101. El resultado de la operacin de desplazamiento es 110 o el 6 decimal. Observe que el bit situado ms a la derecha desaparece. Un desplazamiento a la derecha de un bit es equivalente, pero ms eficiente que, dividir el operando de la izquierda por dos. Un desplazamiento a la izquierda es equivalente a multiplicar por dos. Los otros operadores realizan las funciones lgicas para cada uno de los pares de bits de cada operando. La funcin "y" activa el bit resultante si los dos operandos son 1. op1 op2 resuItado 0 0 0 0 1 0 1 0 0 1 1 1 Supon que quieres evaluar los valores 12 "and" 13: 12 & 13 El resultado de esta operacin es 12. Por qu? Bien, la representacin binaria de 12 es 1100 y la de 13 es 1101. La funcin "and" activa los bits resultantes cuando los bits de los dos operandos son 1, de otra forma el resultado es 0. Entonces si colocas en lnea los dos operandos y realizas la funcin "and", puedes ver que los dos bits de mayor peso (los dos bits situados ms a la izquierda de cada nmero) son 1 as el bit resultante de cada uno es 1. Los dos bits de menor peso se evalan a 0 poque al menos uno de los dos operandos es 0: 1101 & 1100 UNL-Informtica Educativa La programacin y su Aplicacin en la Educacin 37 ------ 1100 El operador | realiza la operacin O inclusiva y el operador ^ realiza la operacin O exclusiva. O inclusiva significa que si uno de los dos operandos es 1 el resultado es 1. op1 op2 resuItado 0 0 0 0 1 1 1 0 1 1 1 1 O exclusiva significa que si los dos operandos son diferentes el resultado es 1, de otra forma el resultado es 0. op1 op2 resuItado 0 0 0 0 1 1 1 0 1 1 1 0 Y finalmente el operador complemento invierte el valor de cada uno de los bites del operando: si el bit del operando es 1 el resultado es 0 y si el bit del operando es 0 el resultado es 1. Operadores de Asignacin Puedes utilizar el operador de asignacin =, para asignar un valor a otro. Adems del operador de asignacin bsico, Java proporciona varios operadores de asignacin que permiten realizar operaciones aritmtcias, lgicas o de bits y una operacin de asignacin al mismo tiempo. Especificamente, supon que quieres añadir un nmero a una variable y asignar el resultado dentro de la misma variable, como esto: i = i + 2; Puedes ordenar esta sentencia utilizando el operador +=. i += 2; Las dos lneas de cdigo anteriores son equivalentes. Esta tabla lista los operadores de asignacin y sus equivalentes. Operador Uso EquivaIe a += op1 += op2 op1 = op1 + op2 -= op1 -= op2 op1 = op1 - op2 *= op1 *= op2 op1 = op1 * op2 /= op1 /= op2 op1 = op1 / op2 %= op1 %= op2 op1 = op1 % op2 UNL-Informtica Educativa La programacin y su Aplicacin en la Educacin 38 &= op1 &= op2 op1 = op1 & op2 |= op1 |= op2 op1 = op1 | op2 ^= op1 ^= op2 op1 = op1 ^ op2 &It;&It;= op1 <<= op2 op1 = op1 << op2 >>= op1 >>= op2 op1 = op1 >> op2 >>>= op1 >>>= op2 op1 = op1 >>> op2 CONVERSIONES Es asignar un valor de un tipo a una variable de otro tipo. Si los dos tipos son compatibles entonces la conversin es automtica, Por ejemplo si quiere convertir de un tipo int a un tipo long no hay problema; sin embargo no todos los tipos son compatibles y por lo tanto no todas las conversiones se realizan implcitamente. Ejemplo de un tipo double a tipo byte Para hacer esto se debe usar un cast. CONVERSIONES AUTOMTICAS Se producen si existen la conversiones siguientes: Los dos tipos son compatibles El tipo destino es mas grande que el tipo origen. CONVERSIN INCOMPATIBLES Se utiliza un cast que es simplemente una conversin de tipo explicita y tiene la siguiente forma. El tipo de dato y el valor al cual se lo va a convertir Tipo: indica al tipo que se ha de convertir el valor indicado. Ejemplo: int a; byte b; b=(byte) a EjempIo class Conversion{ public static void main(String arg[]){ byte b; int i=257; double d=325.47; b=(byte)i; System.out.println("i y b:"+i+" "+b); i=(int)d; System.out.println("d e i:"+d+" "+i); b=(byte)d; System.out.println("d y b:"+d+" "+b); } } UNL-Informtica Educativa La programacin y su Aplicacin en la Educacin 39 TERCERA UNIDAD: 3.1. Sentencias de ControI Sentencias de ControI de FIujo en Java Las sentencias de control de flujo determinan el orden en que se ejecutarn las otras sentencias dentro del programa. El lenguaje Java soporta varias sentencias de control de flujo, incluyendo. Sentencias paIabras cIave toma de decisiones if-else, switch-case bucles for, while, do-while excepciones try-catch-finally, throw miscelaneas break, continue, label:, return Nota: Aunque goto es una palabra reservada, actualmente el lenguaje Java no la soporta. Podemos utilizar las rupturas etiquetadas en su lugar. La sentencia if-eIse La sentencia if-eIse de java proporciona a los programas la posibilidad de ejecutar selectivamente otras sentencias basndose en algn criterio. Por ejemplo, supon que tu programa imprime informacin de depurado basndose en el valor de una variable booleana llamada DEBUG. Si DEBUG fuera verdadera true, el programa imprimira la informacin de depurado, como por ejemplo, el valor de una variable como x. Si DEBUG es faIse el programa proceder normalmente. Un segmento de cdigo que implemente esto se podra parecer a este. . . . if (DEBUG) System.out.println("DEBUG: x = " + x); . . . Esta es la versin ms sencilla de la sentencia if: la sentencia gobernada por if se ejecuta si alguna codicin es verdadera. Generalmente, la forma sencilla de if se puede escribir as. if (expresin) sentencia Pero, y si quieres ejecutar un juego diferente de sentencias si la expresin es falsa? Bien, puedes utilizar la sentencia eIse. Echemos un vistazo a otro ejemplo. Supon que tu programa necesita realizar diferentes acciones dependiendo de que el usuario pulse el botn OK o el botn Cancel en un ventana de alarma. Se podra hacer esto utilizando una sentencia if. . . . // Respuesta dependiente del boton que haya pulsado el usuario // OK o Cancel UNL-Informtica Educativa La programacin y su Aplicacin en la Educacin 40 . . . if (respuesta == OK) { . . . // Cdigo para la accin OK . . . } else { . . . // cdigo para la accin Cancel . . . } Este uso particular de la sentencia eIse es la forma de capturarlo todo. Existe otra forma de la sentecia eIse, eIse if que ejecuta una sentencia basada en otra expresin. Por ejemplo, supon que has escrito un programa que asigna notas basadas en la puntuacin de un examen, un Sobresaliente para una puntuacin del 90% o superior, un Notable para el 80% o superior y dems. odras utilizar una sentencia if con una serie de comparaciones eIse if y una setencia eIse para escribir este cdigo. int puntuacion; String nota; if (puntuacion >= 90) { nota = "Sobresaliente"; } else if (puntuacion >= 80) { nota = "Notable"; } else if (puntuacion >= 70) { nota = "Bien"; } else if (puntuacion >= 60) { nota = "Suficiente"; } else { nota = "nsuficiente"; } Una sentencia if puede tener cualquier nmero de sentencias de acompaamiento eIse if. Podras haber observado que algunos valores de puntuacion pueden satisfacer ms una de las expresiones que componen la sentencia if. Por ejemplo, una puntuacin de 76 podra evaluarse como true para dos expresiones de esta sentencia:puntuacion >= 70 y puntuacion >= 60. Sin embargo, en el momento de ejecucin, el sistema procesa una sentencia if compuesta como una sla; una vez que se ha satisfecho una condicin (76 >= 70), se ejecuta la sentencia apropiada (nota = "Bien";), y el control sale fuera de la sentencia if sin evaluar las condiciones restantes. La sentencia switch La sentencia switch se utiliza para realizar sentencias condicionalmente basadas en alguna expresin. Por ejemplo, supon que tu programa contiene un entero llamado mes cuyo valor indica el mes en alguna fecha. Supon que tambin quieres mostrar el nombre del mes basndose en su nmero entero equivalente. Podras utilizar la sentencia switch de Java para realizar esta tarea. UNL-Informtica Educativa La programacin y su Aplicacin en la Educacin 41 int mes; . . . switch (mes) { case 1: System.out.println("Enero"); break; case 2: System.out.println("Febrero"); break; case 3: System.out.println("Marzo"); break; case 4: System.out.println("Abril"); break; case 5: System.out.println("May0"); break; case 6: System.out.println("Junio"); break; case 7: System.out.println("Julio"); break; case 8: System.out.println("Agosto"); break; case 9: System.out.println("Septiembre"); break; case 10: System.out.println("Octubre"); break; case 11: System.out.println("Noviembre"); break; case 12: System.out.println("Diciembre"); break; } La sentencia switch evala su expresin, en este caso el valor de mes, y ejecuta la sentencia case apropiada. Decidir cuando utilizar las sentencias if o switch dependen del juicio personal. Puedes decidir cual utilizar basndose en la buena lectura del cdigo o en otros factores. Cada sentencia case debe ser nica y el valor proporcionado a cada sentencia case debe ser del mismo tipo que el tipo de dato devuelto por la expresin proporcionada a la sentencia switch. Otro punto de interes en la sentencia switch son las sentencias break despus de cada case. La sentencia break hace que el control salga de la sentencia switch y contine con la siguiente lnea. La sentencia break es necesaria porque las sentencias case se siguen ejecutando hacia abajo. Esto es, sin un break explcito, el flujo de control seguira secuencialmente a travs de las sentencias case siguientes. En el ejemplo anterior, no se quiere que el flujo vaya de una sentencia case a otra, por eso se han tenido que poner las sentencias break. Sin embargo, hay ciertos escenario en los que querrs que el control proceda secuencialmente a travs de las sentencias case. Como este cdigo que calcula el nmero de das de un mes de acuerdo con el ritmico refrn que dice "Treinta das tiene Septiembre...". int mes; int numeroDias; . . . switch (mes) { case 1. case 3. case 5. case 7. case 8. UNL-Informtica Educativa La programacin y su Aplicacin en la Educacin 42 case 10. case 12. numeroDias = 31; break; case 4. case 6. case 9. case 11. numeroDias = 30; break; case 2. if ( ((ano % 4 == 0) && !(ano % 100 == 0)) || ano % 400 == 0) ) numeroDias = 29; else numeroDias = 28; break; } Finalmente, puede utilizar la sentencia defauIt al final de la sentencia switch para manejar los valores que no se han manejado explcitamente por una de las sentencias case. int mes; . . . switch (mes) { case 1: System.out.println("Enero"); break; case 2: System.out.println("Febrero"); break; case 3: System.out.println("Marzo"); break; case 4: System.out.println("Abril"); break; case 5: System.out.println("Mayo"); break; case 6: System.out.println("Junio"); break; case 7: System.out.println("Julio"); break; case 8: System.out.println("Agosto"); break; case 9: System.out.println("Septiembre"); break; case 10: System.out.println("Octubre"); break; case 11: System.out.println("Noviembre"); break; case 12: System.out.println("Diciembre"); break; defauIt: System.out.printIn("Ee, no es un mes vIido!"); break; } Sentencias de BucIe Generalmente hablando, una sentencia whiIe realiza una accin mientras se cumpla una cierta condicin. La sintaxis general de la sentencia whiIe es. while (expresin) sentencia Esto es, mientras la expresin sea verdadera, ejecutar la sentencia. sentencia puede ser una sla sentencia o puede ser un bloque de sentencias. Un bloque de sentencias es un juego de sentencias legales de java contenidas dentro de corchetes('{'y '}'). UNL-Informtica Educativa La programacin y su Aplicacin en la Educacin 43 Por ejemplo, supon que adems de incrementar contador dentro de un bucle whiIe tambin quieres imprimir el contador cada vez que se lea un carcter. Podras escribir esto en su lugar. . . . while (System.in.read() != -1) { contador++; System.out.println("Se ha leido un el carcter = " + contador); } . . . Por convencin el corchete abierto '{' se coloca al final de la misma lnea donde se encuentra la sentencia whiIe y el corchete cerrado '}' empieza una nueva lnea indentada a la lnea en la que se encuentra el whiIe. Adems de while Java tiene otros dos constructores de bucles que puedes utilizar en tus programas. El bucle for y el bucle do-whiIe. Primero el bucle for. Puedes utilizar este bucle cuando conozcas los lmites del bucle (su instruccin de inicializacin, su criterio de terminacin y su instruccin de incremento). Por ejemplo, el bucle for se utiliza frecuentemente para iterar sobre los elementos de un array, o los caracteres de una cadena. // a es un array de cualquier tipo . . . int i; int length = a.length; for (i = 0; i < length; i++) { . . . // hace algo en el elemento i del array a . . . } Si sabes cuando estas escribiendo el programa que quieres empezar en el inicio del array, parar al final y utilizar cada uno de los elementos. Entonces la sentencia for es una buena eleccin. La forma general del bucle for puede expresarse asi. for (inicializacin; terminacin; incremento) sentencias inicializacin es la sentencia que inicializa el bucle -- se ejecuta una vez al iniciar el bucle. terminacin es una sentecia que determina cuando se termina el bucle. Esta expresin se evala al principio de cada iteraccin en el bucle. Cuando la exprein se evala a faIse el bucle se termina. Finalmente, incremento es una expresin que se invoca en cada interaccin del bucle. Cualquiera (o todos) de estos componentes puden ser una sentencia vaca (un punto y coma). UNL-Informtica Educativa La programacin y su Aplicacin en la Educacin 44 Java proporciona otro bucle, el bucle do-whiIe,que es similar al bucle whiIe que se vi al principio, excepto en que la expresin se aval al final del bucle. do { sentencias } while (Expresin Booleana); La sentencia do-whiIe se usa muy poco en la construccin de bucles pero tiene sus usos. Por ejemplo, es conveniente utilizar la sentencia do-whiIe cuando el bucle debe ejecutarse al menos una vez. Por ejemplo, para leer informacin de un fichero, sabemos que al menos debe leer un carcter. int c; nputStream in; . . . do { c = in.read(); . . . } while (c != -1); 3.2.- Arrays Un Arrays es un grupo de variables del mismo tipo a las que se hace referencia con el mismo nombre. Se pueden crear arrays de cualquier tipo de datos, y pueden tener una o mas dimensiones, o un elemento especifico de una matriz, se accede por su ndice. Arrays Unidimensionales Es una lista de variables de un mismo tipo Sintaxis: tipo nombre de matriz [ ] ; int mes [ ]; Se pueden declarar en Java arrays de cualquier tipo: char s[]; int iArray[]; Para indicar el tamao de una matriz nombre de matriz = new int [12]; mes = new [12] ncluso se pueden construir arrays de arrays: int tabla[][] = new int[4][5]; Los lmites de los arrays se comprueban en tiempo de ejecucin para evitar desbordamientos y la corrupcin de memoria. En Java un array es realmente un objeto, porque tiene redefinido el operador ./. Tiene una funcin miembro: length. Se puede utilizar este mtodo para conocer la longitud de cualquier array. UNL-Informtica Educativa La programacin y su Aplicacin en la Educacin 45 int a[][] = new int[10][3]; a.length; /* 10 */ a[0].length; /* 3 */ Para crear un array en Java hay dos mtodos bsicos. Crear un array vaco: int lista[] = new int[50]; o se puede crear ya el array con sus valores iniciales: String nombres[] = { "Juan","Pepe","Pedro","Maria" }; Esto que es equivalente a: String nombres[]; nombres = new String[4]; nombres[0] = new String( "Juan" ); nombres[1] = new String( "Pepe" ); nombres[2] = new String( "Pedro" ); nombres[3] = new String( "Maria" ); No se pueden crear arrays estticos en tiempo de compilacin: int lista[50]; // generar un error en tiempo de compilacin Tampoco se puede rellenar un array sin declarar el tamao con el operador ne0: int lista[]; for( int i=0; i < 9; i++ ) lista[i] = i; Es decir, todos los arrays en Java son estticos. Para convertir un array en el equivalente a un array dinmico en C/C++, se usa la clase vector, que permite operaciones de insercin, borrado, etc. en el array. Arrays Se pueden declarar en Java arrays de cualquier tipo: char s[]; int iArray[]; ncluso se pueden construir arrays de arrays: int tabla[][] = new int[4][5]; Los lmites de los arrays se comprueban en tiempo de ejecucin para evitar desbordamientos y la corrupcin de memoria. En Java un array es realmente un objeto, porque tiene redefinido el operador ./. Tiene una funcin miembro: length. Se puede utilizar este mtodo para conocer la longitud de cualquier array. UNL-Informtica Educativa La programacin y su Aplicacin en la Educacin 46 int a[][] = new int[10][3]; a.length; /* 10 */ a[0].length; /* 3 */ Para crear un array en Java hay dos mtodos bsicos. Crear un array vaco: int lista[] = new int[50]; o se puede crear ya el array con sus valores iniciales: String nombres[] = { "Juan","Pepe","Pedro","Maria" }; Esto que es equivalente a: String nombres[]; nombres = new String[4]; nombres[0] = new String( "Juan" ); nombres[1] = new String( "Pepe" ); nombres[2] = new String( "Pedro" ); nombres[3] = new String( "Maria" ); No se pueden crear arrays estticos en tiempo de compilacin: int lista[50]; // generar un error en tiempo de compilacin Tampoco se puede rellenar un array sin declarar el tamao con el operador ne0: int lista[]; for( int i=0; i < 9; i++ ) lista[i] = i; Es decir, todos los arrays en Java son estticos. Para convertir un array en el equivalente a un array dinmico en C/C++, se usa la clase vector, que permite operaciones de insercin, borrado, etc. en el array. EjempIo 1. public class matriz1{ public static void main(String arg[]){ int dia_mes[ ]; dia_mes= new int[12]; dia_mes[0]=31; dia_mes[1]=28; dia_mes[2]=31; dia_mes[3]=30; dia_mes[4]=31; dia_mes[5]=30; dia_mes[6]=31; dia_mes[7]=30; UNL-Informtica Educativa La programacin y su Aplicacin en la Educacin 47 dia_mes[8]=31; dia_mes[9]=30; dia_mes[10]=31; dia_mes[11]=30; System.out.println("El mes de abril tiene:"+dia_mes[3]+"dias"); } } EjempIo 2 class promedio{ public static void main(String args[]){ double promedio[]={7.5,4.6,8.9,7.6,9.0}; double res,sum; sum=0.0; for(int x=0;x<5;x++){ sum=sum+promedio[x]; } res=sum/5; System.out.println("el promedio es:"+res); } } Sentencias de Manejo de Excepciones Cuando ocurre un error dentro de un mtodo Java, el mtodo puede lanzar una excepcin para indicar a su llamador que ha ocurrido un error y que el error est utilizando la sentencia throw. El mtodo llamador puede utilizar las sentencias try, catch, y finaIIy para capturar y manejar la excepcin. Puedes ver Manejar Errores Utilizando Excepciones para obtener ms informacin sobre el lanzamiento y manejo de excepciones. Sentencias de Ruptura Ya has visto la sentencia break en accin dentro de la sentencia switch anteriormente. Como se observ anteriormente, la sentencia break hace que el control del flujo salte a la sentencia siguiente a la actual. Hay otra forma de break que hace que el flujo de control salte a una sentencia etiquetada. Se puede etiquetar una sentencia utilizando un identificador legal de Java (la etiqueta) seguido por dos puntos (:) antes de la sentencia. SaltaAqui: algunaSentenciaJava Para saltar a la sentencia etiquetada utilice esta forma de la sentencia break. break SaltaAqui; UNL-Informtica Educativa La programacin y su Aplicacin en la Educacin 48 Las rupturas etiquetadas son una alternativa a la sentencia goto que no est soportada por el lenguaje Java. Se puede utiliza la sentencia continue dentro de un bucle para saltar de la sentencia actual hacia el principio del bucle o a una sentencia etiquetada. Considera esta implementacin del mtodo indexOf() de la clase String que utiliza la forma de continue que contina en una sentencia etiquetada. public int indexOf(String str, int fromndex) { char[] v1 = value; char[] v2 = str.value; int max = offset + (count - str.count); test. for (int i = offset + ((fromndex < 0) ? 0 : fromndex); i <= max ; i++) { int n = str.count; int j = i; int k = str.offset; while (n-- != 0) { if (v1[j++] != v2[k++]) { continue test; } } return i - offset; } return -1; } Nota: Slo se puede llamar a la sentencia continue desde dentro de un bucle. Y finalmente la sentencia return. Esta sentencia se utiliza para salir del mtodo actual y volver a la sentencia siguiente a la que origin la llamada en el mtodo original. Existen dos formas de return: una que devuelve un valor y otra que no lo hace. Para devolver un valor, simplemente se pone el valor (o una expresin que calcule el valor) detrs de la palabra return. return ++count; El valor devuelto por return debe corresponder con el tipo del valor de retorno de la declaracin del mtodo. Cuando un mtodo se declara como void utiliza la forma de return que no devuelve ningn valor. return; Ejercicio Diagrama de flujo para hallar el mayor de 2 nmeros. UNL-Informtica Educativa La programacin y su Aplicacin en la Educacin 49 En java: int a=15, b=4; if (a>b) System.out.println("el mayor es: +a); Else System.out.println("el mayor es: +b); Metodo Main package practica; public class Main {
public static void main(String[] args) { System.out.println("este es el metodo main principal");
Saludo salu=new Saludo(); // para crear un objeto de la clase saludo salu.Saludo(); // para llamar a la clase saludo con el objeto creado
area ar=new area(); // para crear un objeto de la clase area ar.CalcuArea(); // para llamar a la clase area con el objeto creado }
} CIase SaIudo: package practica; public class Saludo {
public void Saludo() { System.out.println("este es un saludo"); UNL-Informtica Educativa Inicio a=5, b=4 a> b b a f La programacin y su Aplicacin en la Educacin 50 } } CIase area: package practica; public class area { public void CalcuArea() { int a=13, b=15,res=0; res=a*b; System.out.println("el area es:"+res); } } If anidados if(condicin){ if (condicin) if (condicin) Proceso else Proceso 1. Mayor de 3 nmeros package practica; public class Mayor3num {
public void Mayor3num() { int a=15,b=4,c=7; if(a>b){ if(a>c) System.out.println("El mayor es:"+a); } else if(b>c) System.out.println("El mayor es:"+b); else System.out.println("El mayor es:"+c);
} }
2. Hacer un programa que asigne vaIores a 4 nmeros a, b, c, d, eI programa ha de sumarnos si a/b >c/d; sino soIo ha de sumar b y d. En caso que b =0 o d=0, eI programa a de mostrar un mensaje mostrando que no se puede dividir por 0 en taI caso no ha de hacerse ninguna operacin. Metodo principaI main package practica; public class Main {
UNL-Informtica Educativa La programacin y su Aplicacin en la Educacin 51 public static void main(String[] args) { System.out.println("este es el metodo main principal");
Saludo salu=new Saludo(); // para crear un objeto de la clase saludo salu.Saludo(); // para llamar a la clase saludo con el objeto creado
area ar=new area(); // para crear un objeto de la clase area ar.CalcuArea(); // para llamar a la clase area con el objeto creado
Mayor m=new Mayor(); m.Mayor(); Mayor3num m3=new Mayor3num(); m3.Mayor3num();
Asignar asig=new Asignar(); asig.Asignar(); }
} package practica; public class Asignar {
public void Asignar() { int a=4,b=2,c=9,d=3, sum=0; double e=0.0,f=0.0; if ((b==0)||(d==0)) System.out.println("No se p d p 0"); else e=a/b; f=c/d; if(e>f){ sum=a+c; System.out.println("La suma es:"+sum); }else sum=b+d; System.out.println("La suma es:"+sum); } } REALIZAR LOS SIGUIENTES EJERCICIOS Resolver la siguiente ecuacin: ax 2 +bx+c. Este Ejercicio se lo resuelve aplicando la formula general. X= -b+- b2-4ac 2a UNL-Informtica Educativa La programacin y su Aplicacin en la Educacin 52 CODIFICACIN: package practica; public class ecuacion { public void ecuacion() { double a=2; double b=4; double c=3; double r,x,num; double x1=b*b; double x2=4*a*c; double x3=x1+x2; r=Math.sqrt(x3); double den=2*a; double res1=((-b+r)/(den)); double res2=((-b-r)/(den)); System.out.println ("La ecuacin es la siguiente"); System.out.println ("x1="+res1); System.out.println ("x2="+res2); } } ReaIice Un Programa UtiIizando Las CIases Math Que ReaIice Las Siguientes Operaciones. Devuelva el mximo de a y b. Devuelva el mnimo de a y b. Redondee el valor ms cercano de un valor x el tipo de int. Calcular la raz cuadrada de de x. Devuelva la tangente del Angulo a en radiante. Calcular el rea de un crculo. Formula: pi x r 2 CODIFICACIN: package practica; public class Maximo {
public void Maximo() { double a=20.5; double b=14; double r=12.5; System.out.println("PROGRAMA VAROS EJERCCOS"); double x=a+b; double max=Math.max(a,b); System.out.println(max); double min = Math.min(a,b); System.out.println(min); double re =Math.round(x); System.out.println(re); double ra =Math.sqrt(x); System.out.println(ra); double tang = Math.tan(x); System.out.println(tang); double acir=Math.P*Math.pow(r,2); System.out.println(acir);
UNL-Informtica Educativa La programacin y su Aplicacin en la Educacin 53 } } Ejemplo utilizando la sentencia Swithc, breack Public static void main(....){ for(int i=0;i<6;i++){ swithc(i){ case 0: System.o.p(i+es cero); breack; case 1: System.o.p(i +es uno); breack; case 2: System.o.p(i +es dos); breack; default: System.o.p(i+es mayor a 2); } Ejemplo utilizando las sentencias nteraccin while. Para imprimir en forma descendente los 10 primeros numero enteros. Public static void main (String arg[ ] ){ int i=10; while (i>0){ System.out.printl ( i ); i--; } } ReaIizar un programa que me permita presentar Ia suma de Ios 20 primero nmeros impares. package practica; public class mpar20 {
public void mpar20() { System.out.println("PROGRAMA PARA SUMAR LOS 20 PRMOS"); int imp=1; int sum=0; while (imp<=40){ System.out.println(imp); sum=sum+imp; imp=imp+2; } System.out.println("la suma es:"+sum); }
} UNL-Informtica Educativa La programacin y su Aplicacin en la Educacin 54 ReaIizar un programa que me permita sacar Ia potencia de un numero: package practica; public class Potencia {
public void Potencia() { int b=5, exp=4; int i=1; int b1=b; while(i<exp){ b=b1*b; i++; } System.out.println("La potencia es:"+b); }
} Sentencia do-whiIe Como hemos visto si expresin condicional de control de un bucle while es inicialmente falsa, entonces el cuerpo del bucle no se ejecutara. Sin embargo algunas veces en necesario ejecutar el cuerpo del bucle while al menos unas vez, incluso si la expresin condicional tiene el valor falso la primera vez.. La forma general de esta sentencia es: do sentencia; while (expresion); sentencia se ejecutar mientras el valor de expresion sea verdadero. sentencia siempre se ejecuta al menos una vez. Si sentencia es compuesta se encierra entre { }. Para la mayora de las aplicaciones es mejor y ms natural comprobar la condicin antes de ejecutar el bucle, por ello se usa ms la sentencia whiIe. Un ejemplo de uso de esta sentencia es el siguiente fragmento de programa, que pide un nmero igual a 0: int numero = 0; do { printf("ntroduce el nmero 0:\n"); scanf("%d", &numero); /* Se lee el numero */ } while (numero != 0); UNL-Informtica Educativa La programacin y su Aplicacin en la Educacin 55 CLASES EN JAVA Nota: Clase: Es una agrupacin de objetos de una misma clase Class nombre_de_la_clase{ tipo variable; tipo variable; tipo metod1 (parmetro){ Sentencias; } tipo metodo2(parmetros){ Sentencias; } } EjempIo: Class Caja{ double largo; double ancho; double altura; } Objeto: instancia de una clase. Caja micaja= new Caja( ); miCaja.Caja; //Declara la referencia a un objeto miCaja=new miCaja( ); //reserva espacio de memoria miCaja.largo=8; ejemplo para una instancia de una clase CIase Caja: package segundomomento; public class Caja {
double largo; double ancho; double altura; } Metodo PrincipaI Main: package segundomomento; public class Main {
public static void main(String[] args) { Caja miCaja=new Caja(); double vol; miCaja.largo=8; miCaja.ancho=13.4; UNL-Informtica Educativa Nombre Atributos Mto!os La programacin y su Aplicacin en la Educacin 56 miCaja.altura=6.8; vol=miCaja.largo*miCaja.ancho*miCaja.altura; System.out.println("El volumen es:"+vol); }
}
CONSTRUCTORES. Java permite que los objetos se inicialicen cuando son creados. Esta inicializacin automtica se realiza a travs del constructor. Un constructor inicializa un objeto inmediatamente despus de su creacin tiene exactamente el mismo nombre que la clase en la que recibe y sintacticamente es similar a un mtodo. Clase Caja{ Double largo; Double ancho; Double alto; Caja(double l, doble a, double al ){ //constructor, tiene el mismo nombre de la clase residente Largo=l, Ancho=a, Alto=al; } Caja (int j, int p){ J=m; P=n; } Double volumen( ){ Return largo*ancho*altura; } } 0 Main Caja c=new Caja( ); c.largo=0.35; PROGRAMA PARA SUMAR 3 NUM REALES, RESTAR 2 INTEGER, Y MULTIPLICAR 4 NUM (2 INT, Y 2 REALES). CLASE public class Operaciones { double a; double b; double c; double d; double e; int f; int h;
public Operaciones(){ UNL-Informtica Educativa La programacin y su Aplicacin en la Educacin 57 a=5.2; b=2.0; c=4.2; } double sum(){ return (a+b+c); } public Operaciones(nteger a, nteger b){ c=a; d=b; } double res(){ return (c-d); } public Operaciones(double l, double o, int c, int d){ a=l; b=o; f=c; h=d; } double mult(){ return (a*b*f*h); } } public class Main { public static void main(String[] args) {
Operaciones op= new Operaciones(); System.out.println("La suma es: "+op.sum());
Operaciones op2=new Operaciones(2.5,2.5,2,2); System.out.println("La multiplicacion es: "+op2.mult()); } } SOBRECARGA DE METODOS. En java es posible definir 2 o mas mtodos dentro de la misma clase que tengan el mismo nombre pero con sus listas de parmetros distintas. La sobrecarga de mtodo la utiliza java para implementar el polimorfismo. Los constructores son mtodos, con el mismo nombre de la clase, que sirven para definir el valor de las variables de la clase cuando creas el objeto. Un ejemplo sera este class UnaClase { byte unaVariable, otraVariable; UNL-Informtica Educativa La programacin y su Aplicacin en la Educacin 58 /*Ahora crearemos el constructor. Como veis, tiene el mismo nombre que la clase.*/ UnaClase(byte x, byte y) { unaVariable = x; otraVariable = y; } } Con este constructor ya definido, podremos asignar valores a las variables de la clase justo en el momento en que creamos el objeto. UnaClase objeto1 = new UnaClase(10,12) Como podeis ver, en este caso la variable unaVariable del objeto objeto1 tendra el valor 10, y objeto1.otraVariable valdra 12. Por otro lado, es muy posible que diferentes objetos que se basan en la misma clase no necesiten usar el mismo constructor. maginemos una clase Clientes, con su nombre, su edad y el nombre de la empresa como variables. De algunos de los objetos que creemos basandonos en esta base conoceremos todos los datos, pero siempre habr alguno del que desconozcamos la edad, o incluso su nombre. Aqui entra en juego la sobrecarga de constructores, que consiste en crear un constructor para cada posibilidad (real[*]) que tengamos. [*]Como estoy cansado de decir, se tiene que conseguir un equilibrio entre usabilidad (muchos constructores) y codigo entendible (pocos constructores). El programador eficiente debe ser capaz de declarar solo aquellos constructores que realmente se van a usar, sin caer en la tentaci de crear constructores para todos los posibles casos, por muy incoherentes que parezcan. class Cliente { String nombre, nombreEmpresa; int edad; /*El constructor que viene a continuacin se usar en el caso de que se conozcan todas las variables*/ Cliente(String nombre, String nombreEmpresa, int edad) { this.nombre = nombre; this.nombreEmpresa = nombreEmpresa; this.edad = edad; } /*Tambin es provable ue cono!camos el nombre del cliente" y el nombre de su empresa" pero descono!camos su edad. #or esto vamos a declarar un constructor asi. */ Cliente(String nombre, String nombreEmpresa) { this.nombre = nombre; this.nombreEmpresa = nombreEmpresa; } } class $obrecar%a & UNL-Informtica Educativa La programacin y su Aplicacin en la Educacin 59 public static void main'$trin% () ar%s* & $trin% nombre" empresa; int edad; /*+hora creamos un ob,eto basandonos en la clase cliente" ima%inando ue conocemos todos los valores*/ -liente paco = ne. -liente'/#aco/"/Empresa0alsa/"11*; /*+ui un ob,eto de la clase -liente del ue desconocemos la edad*/ -liente ,ulian = ne. -liente'/2ulian/"/Empresa0alsa/*; nombre = paco.nombre; empresa = paco.nombreEmpresa; edad = paco.edad; $ystem.out.println'nombre 3 /" de / 3 empresa 3 /" tiene / 3 edad*; nombre = ,ulian.nombre; empresa = ,ulian.nombreEmpresa; edad = ,ulian.edad; $ystem.out.println'nombre 3 / traba,a en / 3 empresa 3 /./*; } } La sobrecarga de mtodos es justo lo mismo; creamos varios mtodos con el mismo nombre que actuen diferente segun el tipo de los parmetros de entrada. Por ejemplo, queremos hacer un mtodo que devuelva el resultado de la suma de los dos parametros de entrada, pero no sabemos si ser un entero o si tendr decimales, as que tendremos que hacer un mtodo para el caso de los decimales, y otro con el mismo nombre para el caso de los enteros. class -alculadora & int suma'int 4" int y* & return '4 3 y*; } 5loat suma'5loat 4" 5loat y* & return '4 3 y*; } } class $ervo & public static void main'$trin%() ar%s* & int operacion6; 5loat operacion7; -alculadora sumador = ne. -alculadora'*; operacion6 = sumador.suma'7"8*; operacion7 = sumador.suma'9.780" 67.180*; $ystem.out.println'/:a suma de los enteros 7 y 8 es / 3 operacion6*; $ystem.out.println'/$umando 9.78 y 67.18" se consi%ue / 3 UNL-Informtica Educativa La programacin y su Aplicacin en la Educacin 60 operacion7*; } } CIase ejempIo. Class Presenta{ Void metodo( ){ System.out.println( ); } Void metodo (int a){ System.out.println("a=+a); } Void metodo (double b, double c){ System.out.println("a+b=+a+b); } } Presenta p=new Presenta( ); p.metodo( ); p.metodo ( 6 ); p.metodo( 4.8,5.7); 1. ReaIizar un programa que me permita que en una cIase, que tenga 4 mtodos: Que me permita muItipIicar cuando pasa por parmetro 3 enteros y 5 enteros; Mtodo public class SobrecargaMet { int metodo(int a, int b, int c){ int resp1=a*b*c; System.out.println("La multiplicacion es="+resp1); return resp1; } int metodo(int a, int b, int c, int d, int e){ int resp2=a*b*c*d*e; System.out.println("La multiplicacin es="+resp2); return resp2; } double metodo (double a, double b){ double resp3=a-b; System.out.println("La resta es="+resp3); return resp3; } double metodo (double a, double b, double c, double d){ double resp4=a-b-c-d; System.out.println("La resta es="+resp4); return resp4; } } Main. UNL-Informtica Educativa La programacin y su Aplicacin en la Educacin 61 public class Main { public static void main(String[] args) { Presenta p=new Presenta( ); p.metodo( ); p.metodo ( 6 ); p.metodo( 4.8,5.7);
SobrecargaMet sm= new SobrecargaMet(); sm.metodo(2, 2, 2); sm.metodo(2, 2, 2, 2, 2); sm.metodo(5, 4); sm.metodo(10.5, 4.2, 2.5, 1.5); } } LA CLASE String Java posee gran capacidad para el manejo de cadenas dentro de sus clases String y StringBuffer. Un objeto 1tring representa una cadena alfanumrica de un valor constante que no puede ser cambiada despus de haber sido creada. Un objeto 1tring2uffer representa una cadena cuyo tamao puede variar. Los Strings son objetos constantes y por lo tanto muy baratos para el sistema. La mayora de las funciones relacionadas con cadenas esperan valores String como argumentos y devuelven valores String. Hay que tener en cuenta que las funciones estticas no consumen memoria del objeto, con lo cual es ms conveniente usar Character que char. No obstante, char se usa, por ejemplo, para leer ficheros que estn escritos desde otro lenguaje. Existen muchos constructores para crear nuevas cadenas: String(); String( String str ); String( char val[] ); String( char val[],int offset,int count ); String( byte val[],int hibyte ); String( byte val[],int hibyte,int offset,int count ); Tal como uno puede imaginarse, las cadenas pueden ser muy complejas, existiendo muchas funciones muy tiles para trabajar con ellas y, afortunadamente, la mayora estn codificadas en la clase String. Funciones Bsicas La primera devuelve la longitud de la cadena y la segunda devuelve el carcter que se encuentra en la posicin que se indica en indice: int length();//Nos devuelve el tamao de la cadena char charAt( int indice ); Funciones de Comparacin de trings boolean equals( Object obj ); UNL-Informtica Educativa La programacin y su Aplicacin en la Educacin 62 boolean equalsgnoreCase( Object obj ); Lo mismo que e(uals34 pero no tiene en cuenta maysculas o minsculas. int compareTo( String str2 ); Devuelve un entero menor que cero si la cadena es lxicamente menor que str2. Devuelve cero si las dos cadenas son lxicamente iguales y un entero mayor que cero si la cadena es lxicamente mayor que str7. 5unciones de Comparacin de 1ubcadenas boolean regionMatch( int thisoffset,String s2,int s2offset,int len ); boolean regionMatch( boolean ignoreCase,int thisoffset,String s2, int s2offset,int 1 ); Comprueba si una regin de esta cadena es igual a una regin de otra cadena. boolean startsWith( String prefix ); boolean startsWith( String prefix,int offset ); boolean endsWith( String suffix ); Devuelve si esta cadena comienza o termina con un cierto prefijo o sufijo comenzando en un determinado desplazamiento. int indexOf( int ch ); int indexOf( int ch,int fromindex ); int lastndexOf( int ch ); int lastndexOf( int ch,int fromindex ); int indexOf( String str ); int indexOf( String str,int fromindex ); int lastndexOf( String str ); int lastndexOf( String str,int fromindex ); Devuelve el primer/ltimo ndice de un carcter/cadena empezando la bsqueda a partir de un determinado desplazamiento. String substring( int beginindex ); String substring( int beginindex,int endindex ); String concat( String str ); String replace( char oldchar,char newchar ); String toLowerCase(); String toUpperCase(); String trim(); Ajusta los espacios en blanco al comienzo y al final de la cadena. void getChars( int srcBegin,int srcEnd,char dst[],int dstBegin ); void getBytes( int srcBegin,int srcEnd,byte dst[],int dstBegin ); String toString(); char toCharArray(); int hashCode(); UNL-Informtica Educativa La programacin y su Aplicacin en la Educacin 63 Funciones !alueO" La clase String posee numerosas funciones para transformar valores de otros tipos de datos a su representacin como cadena. Todas estas funciones tienen el nombre de valueOf, estando el mtodo sobrecargado para todos los tipos de datos bsicos. Veamos un ejemplo de su utilizacin: String Uno = new String( "Hola Mundo" ); float f = 3.141592; String P = Uno.valueOf( f ); String P = String.valueOf( f ); // Mucho ms correcto Funciones de Con#ersin String valueOf( boolean b ); String valueOf( int i ); String valueOf( long l ); String valueOf( float f ); String valueOf( double d ); String valueOf( Object obj ); String valueOf( char data[] ); String valueOf( char data[],int offset,int count ); Usa arrays de caracteres para Ia cadena. String copyValueOf( char data[] ); String copyValueOf( char data[],int offset,int count ); Los mtodos de tring se pueden utilizar directamente sobre literals (cadenas entre comillas), Como por ejemplo: 67ola6"length34. EjempIos: Verificando si dos cadenas son iguales En este ejemplo no da como resultado en la consola false ya que el mtodo toma encuentra las maysculas y minsculas UNL-Informtica Educativa La programacin y su Aplicacin en la Educacin 64 En este ejemplo estamos utilizando el mtodo toUpperCase() de la clase String lo cual nos permite cambiar la cadena hoIa a HOLA En este ejemplo estamos utilizando el mtodo toLowerCase() de la clase String lo cual nos permite cambiar la cadena HOLA a hoIa En este ejemplo estamos utilizando el mtodo valueof (n) lo cual nos permite cambiar la cadena 125 a un entero 125; ACTIVIDAD: 1. Tarea realizar un programa en el cual nos permita verificar si dos Cadenas (String) son iguales en la cual no tome en cuenta las maysculas ni minsculas 2. Realizar un programa que nos permita sumar dos nmeros que estn como String ejemplo; String n= "25 , String m=10 y nos dar como resultado 35; (utilice los mtodos de la clase String ). 3. Realizar un programa en el cual nos devuelva el tamao de una cadena 4. Realizar un programa en el cual nos permita remplazar un carcter de una cadena "Utilice el mtodo replace(char biejoChar, char newChar) 5. Realizar un programa que nos permita dividir Esta cadena "Este es mi primera vez utilizando los mtodos de la clase String en 3 partes puede utilizar el mtodo substring() 6. Realizar el mismo ejercicio 5 el cual ser dividido en 12 parte para luego concatenarlo el cual nos debe quedar de la siguiente forma mi primera vez utiIizando mtodos de Ia cIase String LA CLASE Math La clase Math representa la librera matemtica de Java. Las funciones que contiene son las de todos los lenguajes, parece que se han metido en una clase solamente a propsito de agrupacin, por eso se encapsulan en Math, y lo mismo sucede con las dems clases que corresponden a objetos que tienen un tipo equivalente (Character, Float, etc.). El constructor de la clase es privado, por los que no se pueden crear instancias de la clase. Sin embargo, Math es public para que se pueda llamar desde cualquier sitio y static para que no haya que inicializarla. UNL-Informtica Educativa 1 2 La programacin y su Aplicacin en la Educacin 65 Funciones matemticas Si se importa la clase, se tiene acceso al conjunto de funciones matemticas estndar: Math.abs( x ) para int, long, float y double ;ath.sin' double * ;ath.cos' double * ;ath.tan' double * ;ath.asin' double * ;ath.acos' double * ;ath.atan' double * ;ath.atan7' double"double * ;ath.e4p' double * ;ath.lo%' double * ;ath.srt' double * ;ath.ceil' double * ;ath.5loor' double * ;ath.rint' double * ;ath.po.' a"b * ;ath.round' 4 * para double y float ;ath.random'* devuelve un double ;ath.ma4' a"b * para int, long, float y double ;ath.min' a"b * para int, long, float y double ;ath.E para la base exponencial ;ath.#< para P He aqu un ejemplo, ClaseMath.java, de uso de algunas funciones de la clase Math: public class ClaseMath { public static void main( String args[] ) { int x; double rand,y,z; float max;
rand = Math.random(); x = Math.abs( -123 ); y = Math.round( 123.567 ); z = Math.pow( 2,4 ); max = Math.max( (float)1e10,(float)3e9 );
System.out.println( rand ); System.out.println( x ); System.out.println( y ); System.out.println( z ); System.out.println( max ); } } Ejercicios extractases 1. Realizar un arreglo de doubls llamado calificacion definir el tamao del arreglo con un tamao de 10 e ingresar los valores aleatorios entre 0 a 10 y presente solo los que tienen de 7 a 9.5; ENTRADA/SALIDA DE DATOS EN JAVA UNL-Informtica Educativa La programacin y su Aplicacin en la Educacin 66 Los programas necesitan comunicarse con su entorno, tanto para recoger datos e informacin que deben procesar, como para devolver los resultados obtenidos. La manera de representar estas entradas y salidas en $a#a es a base de streams (flujos de datos). Un stream es una conexin entre el programa y la fuente o destino de los datos. La informacin se traslada en serie (un carcter a continuacin de otro) a travs de esta conexin. Esto da lugar a una forma general de representar muchos tipos de comunicaciones. Por ejemplo, cuando se quiere imprimir algo en pantalla, se hace a travs de un stream que conecta el monitor al programa. Se da a ese stream la orden de escribir algo y ste lo traslada a la pantalla. Este concepto es suficientemente general para representar la lectura/escritura de archivos, la comunicacin a travs de nternet o la lectura de la informacin de un sensor a travs del puerto en serie. CLASES DE JAVA PARA LECTURA Y ESCRITURA DE DATOS El package ja#a.io contiene las clases necesarias para la comunicacin del programa con el exterior. Dentro de este package existen dos familias de jerarquas distintas para la entrada/salida de datos. La diferencia principal consiste en que una opera con bytes y la otra con caracteres (el carcter de $a#a est formado por dos bytes porque sigue el cdigo Unicode). En general, para el mismo fin hay dos clases que manejan bytes (una clase de entrada y otra de salida) y otras dos que manejan caracteres. Desde $a#a %.&, la entrada y salida de datos del programa se poda hacer con clases derivadas de 'nputtream (para lectura) y Outputtream (para escritura). Estas clases tienen los mtodos bsicos read() y *rite() que manejan bytes y que no se suelen utilizar directamente. muestra las clases que derivan de 'nputtream y la Figura 9.2 las que derivan de Outputtream. En las cuatro ltimas figuras las clases con "ondo gris definen de dnde o a dnde se estn enviando los datos, es decir, el dispositivo con que conecta el stream. Las dems ("ondo blanco) aaden caractersticas particulares a la forma de enviarlos. La intencin es que se combinen para obtener el comportamiento deseado. Por ejemplo: BufferedReader in = new BufferedReader(new FileReader("autoexec.bat")); Con esta lnea se ha creado un stream que permite leer del archivo autoe+ec.bat. Adems, se ha creado a partir de l un objeto Bu""ered,eader (que aporta la caracterstica de utilizar bu""er-). Los caracteres que lleguen a travs del File,eader pasarn a travs del Bu""ered,eader, es decir utilizarn el bu""er. A la hora de definir una comunicacin con un dispositivo siempre se comenzar determinando el origen o destino de la comunicacin (clases en gris) y luego se le aadiran otras caractersticas (clases en blanco). Se recomienda utilizar siempre que sea posible las clases ,eader y .riter. Los nombres de Ias cIases de java.io Las clases de ja#a.io siguen una nomenclatura sistemtica que permite deducir su funcin a partir de Las palabras que componen el nombre, tal como se describe en la Tabla UNL-Informtica Educativa La programacin y su Aplicacin en la Educacin 67
ENTRADA Y SALIDA ESTNDAR (TECLADO Y PANTALLA) En $a#a, la entrada desde teclado y la salida a pantalla estn reguladas a traves de la clase ystem. Esta clase pertenece al package ja#a.lang y agrupa diversos mtodos y objetos que tienen relacin con el sistema local. Contiene, entre otros, tres objetos static que son: System.in: Objeto de la clase 'nputtream preparado para recibir datos desde la entrada estndar del sistema (habitualmente el teclado). System.out: Objeto de la clase /rinttream que imprimir los datos en la salida estndar del sistema (normalmente asociado con la pantalla). System.err: Objeto de la clase /rinttream. Utilizado para mensajes de error que salen tambin por pantalla por defecto. Estas clases permiten la comunicacin alfanumrica con el programa a travs de los mtodos incluidos en la Tabla 9.4. Son mtodos que permiten la entrada/salida a un nivel muy elemental. Lectura desde tecIado Para leer desde teclado se puede utilizar el mtodo ystem.in.read() de la clase 'nputtream. Este mtodo lee un carcter por cada llamada. Su valor de retorno es un int. Si se espera cualquier otro tipo hay que hacer una conversin explcita mediante un cast char c; c=(char)System.in.read(); Este mtodo puede lanzar la excepcin ja#a.io.'OE+ception y siempre habr que ocuparse de ella, por ejemplo en la forma: try { c=(char)System.in.read(); } catch(java.io.OException ioex) { // qu hacer cuando ocurra la excepcin } Para leer datos ms largos que un simple carcter es necesario emplear un bucle *0ile o "or y unir los caracteres. Por ejemplo, para leer una lnea completa se podra utilizar un bucle *0ile guardando los caracteres ledos en un tring o en un tringBu""er (ms rpido que tring): UNL-Informtica Educativa La programacin y su Aplicacin en la Educacin 68 char c; String frase = new String(""); // StringBuffer frase=new StringBuffer(""); try { while((c=System.in.read()) != '\n') frase = frase + c; // frase.append(c); } catch(java.io.OException ioex) {} Una vez que se lee una lnea, sta puede contener nmeros de coma flotante, etc. Sin embargo, hay una manera ms fcil de conseguir lo mismo: utilizar adecuadamente la librera ja#a.io Mtodo prctico para Ieer desde tecIado Para facilitar la lectura de teclado se puede conseguir que se lea una lnea entera con una sola orden si se utiliza un objeto Bu""ered,eader. El mtodo tring read1ine() perteneciente a Bu""er,eader lee todos los caracteres hasta encontrar un '\n' o '\r' y los devuelve como un tring (sin incluir '\n' ni '\r'). Este mtodo tambin puede lanzar ja#a.io.'OE+ception. ystem.in es un objeto de la clase 'nputtream. Bu""ered,eader pide un ,eader en el constructor. El puente de unin necesario lo dar 'nputtream,eader, que acepta un 'nputtream como argumento del constructor y es una clase derivada de ,eader. Por lo tanto si se desea leer una lnea completa desde la entrada estndar habr que utilizar el siguiente cdigo: nputStreamReader isr = new nputStreamReader(System.in); BufferedReader br = new BufferedReader(isr); // o en una lnea: // BufferedReader br2 = new BufferedReader(new nputStreamReader(System.in)); String frase = br2.readLine(); // Se lee la lnea con una llamada
As ya se ha leido una lnea del teclado. El thread que ejecute este cdigo estar parado en esta lnea hasta que el usuario termine la lnea (pulse return). Es ms sencillo y prctico que la posibilidad anterior. Y qu hacer con una lnea entera? La clase ja#a.util.tring2o3eni4er da la posibilidad de separar una cadena de carcteres en las "palabras (to3ens) que la forman (por defecto, conjuntos de caracteres separados por un espacio, '\t', '\r', o por '\n'). Cuando sea preciso se pueden convertir las "palabras en nmeros. LECTURA Y ESCRITURA DE ARCHIVOS Aunque el manejo de archivos tiene caractersticas especiales, se puede utilizar lo dicho hasta ahora para las entradas y salidas estndar con pequeas variaciones. $a#a ofrece las siguientes posibilidades: Existen las clases File'nputtream y FileOutputtream (extendiendo 'nputtream y Outputtream) que permiten leer y escribir bytes en archivos. Para archivos de texto son preferibles File,eader (desciende de ,eader) y File.riter (desciende de .riter), que realizan las mismas funciones. Se puede construir un objeto de cualquiera de estas cuatro clases a partir de un tring que contenga el nombre o la direccin en disco del archivo o con un objeto de la clase File que Representa dicho archivo. Por ejemplo el cdigo FileReader fr1 = new FileReader("archivo.txt"); UNL-Informtica Educativa La programacin y su Aplicacin en la Educacin 69 es equivalente a: File f = new File("archivo.txt"); FileReader fr2 = new FileReader(f); Si no encuentran el archivo indicado, los constructores de File,eader y File'nputtream pueden lanzar la excepcin ja#a.io.FileNotFoundE+ception. Los constructores de File.riter y FileOutputtream pueden lanzar ja#a.io.'OE+ception. Si no encuentran el archivo indicado, lo crean nuevo. Por defecto, estas dos clases comienzan a escribir al comienzo del archivo. Para escribir detrs de lo que ya existe en el archivo ("append), se utiliza un segundo argumento de tipo boolean con valor true: FileWriter fw = new FileWriter("archivo.txt", true); Las clases que se explican a continuacin permiten un manejo ms fcil y eficiente que las vistas hasta ahora. CIases FiIe y FiIeDiaIog Un objeto de la clase File puede representar un arc0i#o o un directorio. Tiene los siguientes constructores: File(String name) File(String dir, String name) File(File dir, String name). Absoluto y como pat0 relativo al directorio actual. Para saber si el archivo existe se puede llamar al mtodo boolean e+ists(). File f1 = new File("c:\\windows\\notepad.exe");//La barra'\'se escribe '\\' File f2 = new File("c:\\windows"); // Un directorio File f3 = new File(f2, "notepad.exe"); // Es igual a f1 Cdigo que nos permite ingresar por teclado Este programa, Telefonos.java, pregunta al usuario una lista de nombres y nmeros de telfono. Cada nombre y nmero se aade a un fichero situado en una localizacin fija. Para indicar que se ha introducido toda la lista, el usuario especifica "Fin" ante la solicitud de entrada del nombre. class Telefonos { static FileOutputStream fos; UNL-Informtica Educativa La programacin y su Aplicacin en la Educacin 70 public static final int longLinea = 81; public static void main( String args[] ) throws OException { byte tfno[] = new byte[longLinea]; byte nombre[] = new byte[longLinea]; fos = new FileOutputStream( "telefono.dat" ); while( true ) { System.err.println( "Teclee un nombre ('Fin' termina)" ); leeLinea( nombre ); if( "fin".equalsgnoreCase( new String( nombre,0,0,3 ) ) ) break; System.err.println( "Teclee el numero de telefono" ); leeLinea( tfno ); for( int i=0; tfno[i] != 0; i++ ) fos.write( tfno[i] ); fos.write( ',' ); for( int i=0; nombre[i] != 0; i++ ) fos.write( nombre[i] ); fos.write( '\n' ); } fos.close(); } Vamos a desarrollar una pequea aplicacin que muestra informacin sobre los ficheros pasados como argumentos en la lnea de comandos, nfoFichero.java: import java.io.*; class nfoFichero { public static void main( String args[] ) throws OException { if( args.length > 0 ) { for( int i=0; i < args.length; i++ ) { File f = new File( args[i] ); System.out.println( "Nombre: "+f.getName() ); System.out.println( "Camino: "+f.getPath() ); if( f.exists() ) { System.out.print( "Fichero existente " ); System.out.print( (f.canRead() ? " y se puede Leer" : "" ) ); System.out.print( (f.canWrite() ? " y se puese Escribir" : "" ) ); System.out.println( "." ); System.out.println( "La longitud del fichero son "+ f.length()+" bytes" ); } else System.out.println( "El fichero no existe." ); } UNL-Informtica Educativa La programacin y su Aplicacin en la Educacin 71 } else System.out.println( "Debe indicar un fichero." ); } } private static void leeLinea( byte linea[] ) throws OException { int b = 0; int i = 0; while( (i < ( longLinea-1) ) && ( ( b = System.in.read() ) != '\n' ) ) linea[i++] = (byte)b; linea[i] = (byte)0; } } Referencias BibIiogrficas. CAY S. HORTSMAN GARY CORNELL, Diciembre, 2000, "Core Java: Volumen -Fundamentals", 5ta. Edicin, Prentice Hall PTR CAY S. HORTSMAN GARY CORNELL, Diciembre, 2000, "Core Java: Volumen -Advanced Features", 5ta. Edicin, Prentice Hall PTR DETEL, Julio, 2001, '8rogramacin en 9ava*, 5ta. Edicin, Prentice Hall PTR. MATTHEW ROBNSON PAVEL VOROBEV, "SWNG, 2da. Edicin, MANNNG. Grady Booch, James Rumbaugh, var Jacobson, (1996) El Lenguaje Unificado de ModeladoAddison Wesley. Schneider G., Winters J.P., (2001) Applying Use Cases: A Practical Guide, Addison Wesley. Apuntes Mdulo , (Sr. Jorge Pea, Sr. Clver Torres). http://www.sun.com/java http://www.netbeans.org http://www.eclipse.org http://www.omg.org Durante el desarrollo del presente taller, en cada unidad encontrarn las diferentes actividades a realizar, ya sea individual, de investigacin, trabajo prctico, las cuales estn representadas mediante los grficos respectivos que se indican a continuacin. Los trabajos deben realizarse aplicando la reflexin, el razonamiento y utilizando el criterio propio. UNL-Informtica Educativa