INTRODUCCIN Hace quince aos, mencionar la palabra Java traa a la mente una de dos cosas: Una sla de ndonesia o una taza de caf caliente. Hoy, quienquiera que haya tenido contacto con una pgina Web, alguna revista de computacin, o una seccin de negocios de algn diario, tiene otro concepto de Java: el lenguaje de Programacin introducido por Sun Microsystems. Se pueden encontrar pelculas en los principales videoclubes, atletas en una intriga de crmenes y polticos corruptos que han recibido menor atencin que Java. El lenguaje ha llegado a ser parte del desarrollo de software, como el lquido mismo del hombre. Por una parte Java mantiene despiertos a los programadores hasta tarde, mientras que ha otros permite dormir mejor despus de una jornada de desarrollo de programas. Al redactar este manual usted ser guiado por todos los aspectos del desarrollo de programas Java mediante la versin ms actual del lenguaje y las mejores tcnicas disponibles. Cuando termine de leer este manual, tendr razones bien fundamentadas por las que Java ha llegado a ser el lenguaje de programacin ms comentado durante las ltimas dcadas y las razones de por qu podra ser el lenguaje de programacin de mayor uso en los prximos aos. Formando Emprendedores De Calidad Para Un Mundo Empresarial 1 Instituto de Educacin Superior San Ignacio de Monterrico CAPITULO 1 INTRODUCCIN A LAS TCNICAS DE PROGRAMACIN Formando Emprendedores De Calidad Para Un Mundo Empresarial 2 Instituto de Educacin Superior San Ignacio de Monterrico Para empezar a entender lo que es la programacin, primero tenemos que tener ciertos conocimientos sobre todo lo que la rodea. Empezaremos con unas definiciones un poco tcnicas, pero que son imprescindibles para el aprendizaje. 1.1 CONCEPTOS GENERALES TecnoIoga Dentro del campo que nos interesa a nosotros, la tecnologa tiene el objetivo de eliminar las tareas repetitivas, facilitando el trabajo y hacindolo ms eficiente as como aumentando la productividad y los beneficios de la empresa. Programacin La programacin es una de las etapas ms importantes del ciclo de vida de un proyecto (explicaremos ms adelante lo que es este termino), y requiere un mtodo de trabajo. La programacin es el resultado de dicho trabajo. La programacin es el instrumento que permite la ejecucin de las tareas automatizadas de un sistema informtico. Las herramientas que utilizaremos para programar son los lenguajes de programacin, a travs de las cuales codificaremos los programas. Programa Conjunto de instrucciones entendibles por el ordenador que permiten realizar un trabajo o resolver un problema. Un programa debe ser finito, es decir, tiene que tener un inicio y Formando Emprendedores De Calidad Para Un Mundo Empresarial 3 Instituto de Educacin Superior San Ignacio de Monterrico un fin. Tiene que estar bien confeccionado para que, al introducir un dato, salga una solucin y si se volviese a introducir el mismo dato, saliese de nuevo la misma solucin. MetodoIoga de Ia programacin Se entiende como metodologa de la programacin al conjunto de normas, mtodos y anotaciones que nos indican la forma de programar. Cada lenguaje de programacin sigue una metodologa distinta. Lenguaje de programacin Es un conjunto de reglas semnticas as como sintcticas que los programadores usan para la codificacin de instrucciones de un programa o algoritmo de programacin. Existen varios lenguajes de programacin. Entorno de programacin o entorno de desarroIIo Es el conjunto de herramientas utilizadas para la elaboracin de un programa. Recursos Conjunto de componentes hardware que utilizaremos para la elaboracin de un programa (cpu, disco duro...). Una vez conocidos los conceptos bsicos necesarios para el aprendizaje de la programacin podemos empezar a ver los diferentes tipos de lenguajes de programacin. 1.2 OBJETIVOS E IMPORTANCIA DE LAS TCNICAS DE PROGRAMACIN El curso de Tcnicas de programacin esta dedicado a mejorar las capacidades analtica y creadora de los programadores explicando las bases de la programacin y la creacin de algoritmos. Formando Emprendedores De Calidad Para Un Mundo Empresarial
Instituto de Educacin Superior
San Ignacio de Monterrico CAPITULO 2 TEORIA DE LOS ALGORITMOS Formando Emprendedores De Calidad Para Un Mundo Empresarial ! Instituto de Educacin Superior San Ignacio de Monterrico El desarrollo de algoritmos es un tema fundamental en el diseo de programas o soluciones. Por lo cual, el alumno debe tener buenas bases que le sirvan para poder crear de manera fcil y rpida sus programas. La siguiente documentacin pueden servir a los alumnos, en su labor cotidiana de aprendizaje y tambin facilitar el desarrollo de su capacidad analtica y creadora, para de esta manera mejorar su destreza en la elaboracin de algoritmos que sirven como base para la codificacin de los diferentes programas que tendr que desarrollar a lo largo de su carrera. 2.1 CONCEPTO DE GORITMO La palabra algoritmo se deriva de la traduccin al latn de la palabra rabe alkhowarizmi, nombre de un matemtico y astrnomo rabe que escribi un tratado sobre manipulacin de nmeros y ecuaciones en el siglo X. Un algoritmo es una serie de pasos organizados que describe el proceso que se debe seguir, para dar solucin a un problema especfico. 2.2 TIPOS DE ALGORITMOS Existen dos tipos y son llamados as por su naturaleza: Formando Emprendedores De Calidad Para Un Mundo Empresarial " Instituto de Educacin Superior San Ignacio de Monterrico CuaIitativos: Son aquellos en los que se describen los pasos utilizando palabras. Cuantitativos: Son aquellos en los que se utilizan clculos numricos para definir los pasos del proceso. 2.3 LENGUAJES ALGORTMICOS Un Lenguaje algortmico es una serie de smbolos y reglas que se utilizan para describir de manera explcita un proceso. 2.4 TIPOS DE LENGUAJES ALGORTMICOS 2.4.1 Grficos Es la representacin grfica de las operaciones que realiza un algoritmo (diagrama de flujo). Diagrama de FIujo Un diagrama de flujo es la representacin grfica de un algoritmo. Tambin se puede decir que es la representacin detallada en forma grfica de como deben realizarse los pasos en la computadora para producir resultados. Esta representacin grfica se da cuando varios smbolos (que indican diferentes procesos en la computadora), se relacionan entre si mediante lneas que indican el orden en que se deben ejecutar los procesos. Los smbolos utilizados han sido normalizados por el instituto norteamericano de normalizacin (ANS): Formando Emprendedores De Calidad Para Un Mundo Empresarial # Instituto de Educacin Superior San Ignacio de Monterrico SmboIo Descripcin ndica el inicio y el final de nuestro diagrama de flujo. ndica la entrada y salida de datos. Smbolo de proceso y nos indica la asignacin de un valor en la memoria y/o la ejecucin de una operacin aritmtica. ndica la salida de informacin por impresora. Conector dentro de pgina. Representa la continuidad del diagrama dentro de la misma pgina. Conector fuera de pagina. Representa la continuidad del diagrama en otra pagina. ndica la salida de informacin en la pantalla o monitor. Smbolo de decisin. ndica la realizacin de una comparacin de valores. Smbolo de Seleccin Mltiple. Dada una expresin permite escoger una opcin de muchas. Formando Emprendedores De Calidad Para Un Mundo Empresarial $ Instituto de Educacin Superior San Ignacio de Monterrico Smbolo del Mientras. Dada una expresin al principio de la iteracin esta es evaluada; si la condicin es verdadera realizar el ciclo, si es falsa la repeticin cesar. Smbolo del Para. Esta estructura de control repetitiva se usa generalmente cuando se conoce de antemano el numero de iteraciones. Smbolo Repita Hasta. funciona igual que la estructura Mientras, con la diferencia que al menos una vez har el grupo de instrucciones y luego evaluar una condicin. Si la condicin evaluada es falsa continua dentro del ciclo y si es verdadera termina la iteracin. Lneas de flujo o direccin. ndican la secuencia en que se realizan las operaciones. Recomendaciones para eI diseo de Diagramas de FIujo Se deben usar solamente lneas de flujo horizontal y/o vertical. Se debe evitar el cruce de lneas utilizando los conectores. Se deben usar conectores slo cuando sea necesario. No deben quedar lneas de flujo sin conectar. Formando Emprendedores De Calidad Para Un Mundo Empresarial % Instituto de Educacin Superior San Ignacio de Monterrico Se deben trazar los smbolos de manera que se puedan leer de arriba hacia abajo y de izquierda a derecha. Todo texto escrito dentro de un smbolo deber ser escrito claramente, evitando el uso de muchas palabras. 2.4.2 No Grficos Representa en forma descriptiva las operaciones que debe realizar un algoritmo (pseudocodigo). Pseudocdigo Un pseudocdigo (falso lenguaje), es una serie de normas lxicas y gramaticales parecidas a la mayora de los lenguajes de programacin, pero sin llegar a la rigidez de sintaxis de estos ni a la fluidez del lenguaje coloquial. Esto permite codificar un programa con mayor agilidad que en cualquier lenguaje de programacin, con la misma validez semntica, normalmente se utiliza en las fases de anlisis o diseo de Software, o en el estudio de un algoritmo. Forma parte de las distintas herramientas de la ingeniera de software. No hay ningn compilador o intrprete de pseudocdigo informtico (en el caso de que lo hubiera seran los lectores de dicho pseudocdigo informtico, por ej. una idea de un jefe de programacin a su personal), y por tanto no puede ser ejecutado en un ordenador, pero las similitudes con la mayora de los lenguajes informticos lo hacen fcilmente convertible. El pseudocdigo describe un algoritmo utilizando una mezcla de frases en lenguaje comn, instrucciones de programacin y palabras clave que definen las estructuras bsicas. Su objetivo es permitir que el programador se centre en los aspectos lgicos de la solucin a un problema. No siendo el pseudocdigo un lenguaje formal, varan de un programador a otro, es decir, no hay una estructura semntica ni arquitectura estndar. Es una herramienta gil para el estudio y diseo de aplicaciones, veamos un ejemplo, que podramos definir como: lenguaje imperativo, de tercera generacin, segn el mtodo de programacin estructurada. Pseudocdigo = Pseudo (Supuesto) + Cdigo (nstruccin). Formando Emprendedores De Calidad Para Un Mundo Empresarial 1& Instituto de Educacin Superior San Ignacio de Monterrico ejemplo INICIO Edad: Entero ESCRBA cual es tu edad? Lea Edad S Edad >=18 entonces ESCRBA Eres mayor de Edad FNS ESCRBA fin del algoritmo FIN Formando Emprendedores De Calidad Para Un Mundo Empresarial 11 Instituto de Educacin Superior San Ignacio de Monterrico CAPITULO 3 LA COMPLEJIDAD DEL SOFTWARE FACTORES DE CALIDAD Formando Emprendedores De Calidad Para Un Mundo Empresarial 12 Instituto de Educacin Superior San Ignacio de Monterrico El software Existen diferentes aplicaciones de software Sistemas, gestin, de ingeniera y cientfico, empotrado, computadoras personales, basado en Web, de nteligencia Artificial (Pressman). El software es un producto Genrico. Organizacin que desarrolla software lo vende al mercado abierto. Personalizado. Sistemas requerimos por un cliente en particular (Sommerville). 3.1 QU ES EL SOFTWARE Programas, documentos asociados y la configuracin de datos que se necesitan para hacer que estos programas operen de manera correcta en la computadora (Sommerville). Los Programas que se ejecutan dentro de una computadora de cualquier tamao y arquitectura, documentos que comprenden formularios virtuales e impresos y datos que combinan nmeros y texto. Tambin incluye representaciones de informacin de audio, video e imgenes (Pressman). 3.2 FACTORES QUE IMPACTAN LA CREACIN DE SOFTWARE El desarrollo de un producto depende de los siguientes elementos: Nmero de personas involucradas en el desarrollo Tamao (lneas de cdigo) Tiempo dedicado a la elaboracin del producto Formando Emprendedores De Calidad Para Un Mundo Empresarial 13 Instituto de Educacin Superior San Ignacio de Monterrico Recursos para la construccin del software Conforme un producto/sistema de software requiera ms de algunos de los elementos, el producto ser ms complejo. 3.3 COMPLEJIDAD DEL SOFTWARE El trmino CompIejidad significa: Complicado, difcil, conjunto de varias cosas. En trminos del software: ndica la cantidad de elementos de un sistema (complejidad cuantitativa). ndica las interacciones potenciales (conectividad) y el nmero de estados posibles que se producen a travs de stos (variedad, variabilidad). El trmino Variedad significa: nmero de elementos discretos en un sistema. El trmino VariabiIidad, ndice mximo de relaciones posibles (hipotticamente n!). El trmino Sistema significa Conjunto de elementos interrelacionados entre s y que tienen un objetivo comn. 3.4 SISTEMAS DE SOFTWARE - SIMPLES CARACTERSTICAS Propsito muy limitado. Ciclo de vida corto (definicin, desarrollo, mantenimiento). Se reemplazan cuando necesitan mantenimiento: No correcciones No reutilizacin No extensin de funcionalidad. En general, construido por una persona 3.5 SISTEMAS DE SOFTWARE COMPLEJOS - CARACTERSTICAS Exhiben un conjunto muy rico de comportamientos. Ciclo de vida largo. Muchos usuarios dependen de l. Formando Emprendedores De Calidad Para Un Mundo Empresarial 1 Instituto de Educacin Superior San Ignacio de Monterrico Construidos por un grupo de personas. Resulta difcil (o imposible) para un individuo comprender TODAS las sutilezas del sistema. Por tanto, la complejidad es una propiedad esencial de todos los sistemas de software de gran tamao. Se puede dominar, pero NO eliminar Formando Emprendedores De Calidad Para Un Mundo Empresarial 1! Instituto de Educacin Superior San Ignacio de Monterrico 3.6 POR QU EL SOFTWARE ES COMPLEJO? La complejidad se deriva de cuatro elementos (Booch): Complejidad del dominio del problema. Dificultad para gestionar el proceso de desarrollo. Flexibilidad que se puede alcanzar a travs del software. Problemas en la caracterizacin del comportamiento en sistemas discretos Formando Emprendedores De Calidad Para Un Mundo Empresarial 1" Instituto de Educacin Superior San Ignacio de Monterrico CAPITULO 4 EVOLUCIN DE LOS LENGUAJES DE PROGRAMACIN Formando Emprendedores De Calidad Para Un Mundo Empresarial 1# Instituto de Educacin Superior San Ignacio de Monterrico Un lenguaje de programacin es un lenguaje inventado para controlar una mquina, (normalmente, un ordenador). Hay muchsimos, de toda clase de tipos y caractersticas, inventados para facilitar el abordaje de distintos problemas, el mantenimiento del software, su reutilizacin, mejorar la productividad, etc. Los lenguajes de programacin se pueden clasificar segn varios criterios. He procurado reunir todos los que me parecen relevantes, diez en total. Hay que tener en cuenta tambin, que en la prctica, la mayora de lenguajes no pueden ser puramente clasificados en una categora, pues surgen incorporando ideas de otros lenguajes y de otras filosofas de programacin, pero no importa al establecer las clasificaciones, pues el autntico objetivo de las mismas es mostrar los rangos, las posibilidades y tipos de lenguajes que hay. 4.1 NIVEL DE ABSTRACCIN Segn el nivel de abstraccin, o sea, segn el grado de cercana a la mquina: Lenguajes de bajo niveI: La programacin se realiza teniendo muy en cuenta las caractersticas del procesador. Ejemplo: Lenguajes ensamblador. Lenguajes de niveI medio: Permiten un mayor grado de abstraccin pero al mismo tiempo mantienen algunas cualidades de los lenguajes de bajo nivel. Ejemplo: C puede realizar operaciones lgicas y de desplazamiento con bits, tratar todos los tipos de datos como lo que son en realidad a bajo nivel (nmeros), etc. Formando Emprendedores De Calidad Para Un Mundo Empresarial 1$ Instituto de Educacin Superior San Ignacio de Monterrico Lenguajes de aIto niveI: Ms parecidos al lenguaje humano. Manejan conceptos, tipos de datos, etc., de una manera cercana al pensamiento humano ignorando (abstrayndose) del funcionamiento de la mquina. Ejemplos: Java, Ruby. Hay quien slo considera lenguajes de bajo nivel y de alto nivel, (en ese caso, C es considerado de alto nivel). 4.2 PROPSITO Segn el propsito, es decir, el tipo de problemas a tratar con ellos: Lenguajes de propsito generaI: Aptos para todo tipo de tareas: Ejemplo: C. Lenguajes de propsito especfico: Hechos para un objetivo muy concreto. Ejemplo: Csound (para crear ficheros de audio). Lenguajes de programacin de sistemas: Diseados para realizar sistemas operativos o drivers. Ejemplo: C. Lenguajes de script: Para realizar tareas varias de control y auxiliares. Antiguamente eran los llamados lenguajes de procesamiento por lotes (batch) o JCL (Job Control Languages). Se subdividen en varias clases (de shell, de GU, de programacin web, etc.). Ejemplos: bash (shell), mRC script, JavaScript (programacin web). 4.3 EVOLUCIN HISTRICA Con el paso del tiempo, se va incrementando el nivel de abstraccin, pero en la prctica, los de una generacin no terminan de sustituir a los de la anterior: Lenguajes de primera generacin (1GL): Cdigo mquina. Lenguajes de segunda generacin (2GL): Lenguajes ensamblador. Lenguajes de tercera generacin (3GL): La mayora de los lenguajes modernos, diseados para facilitar la programacin a los humanos. Ejemplos: C, Java. Lenguajes de cuarta generacin (4GL): Diseados con un propsito concreto, o sea, para abordar un tipo concreto de problemas. Ejemplos: NATURAL, Mathematica. Formando Emprendedores De Calidad Para Un Mundo Empresarial 1% Instituto de Educacin Superior San Ignacio de Monterrico Lenguajes de quinta generacin (5GL): La intencin es que el programador establezca el qu problema ha de ser resuelto y las condiciones a reunir, y la mquina lo resuelve. Se usan en inteligencia artificial. Ejemplo: Prolog. 4.4 MANERA DE EJECUTARSE Segn la manera de ejecutarse: Lenguajes compiIados: Un programa traductor traduce el cdigo del programa (cdigo fuente) en cdigo mquina (cdigo objeto). Otro programa, el enlazador, unir los ficheros de cdigo objeto del programa principal con los de las libreras para producir el programa ejecutable. Ejemplo: C. Lenguajes interpretados: Un programa (intrprete), ejecuta las instrucciones del programa de manera directa. Ejemplo: Lisp. Tambin los hay mixtos, como Java, que primero pasan por una fase de compilacin en la que el cdigo fuente se transforma en bytecode, y este bytecode puede ser ejecutado luego (interpretado) en ordenadores con distintas arquitecturas (procesadores) que tengan todos instalados la misma mquina virtual Java. 4.5 MANERA DE ABORDAR LA TAREA A REALIZAR Segn la manera de abordar la tarea a realizar, pueden ser: Lenguajes imperativos: ndican cmo hay que hacer la tarea, es decir, expresan los pasos a realizar. Ejemplo: C. Lenguajes decIarativos: ndican qu hay que hacer. Ejemplos: Lisp, Prolog. Otros ejemplos de lenguajes declarativos, pero que no son lenguajes de programacin, son HTML (para describir pginas web) o SQL (para consultar bases de datos). 4.6 PARADIGMA DE PROGRAMACIN El paradigma de programacin es el estilo de programacin empleado. Algunos lenguajes soportan varios paradigmas, y otros slo uno. Se puede decir que histricamente han ido Formando Emprendedores De Calidad Para Un Mundo Empresarial 2& Instituto de Educacin Superior San Ignacio de Monterrico apareciendo para facilitar la tarea de programar segn el tipo de problema a abordar, o para facilitar el mantenimiento del software, o por otra cuestin similar, por lo que todos corresponden a lenguajes de alto nivel (o nivel medio), estando los lenguajes ensambladores atados a la arquitectura de su procesador correspondiente. Los principales son: Lenguajes de programacin proceduraI: Divide el problema en partes ms pequeas, que sern realizadas por subprogramas (subrutinas, funciones, procedimientos), que se llaman unas a otras para ser ejecutadas. Ejemplos: C, Pascal. Lenguajes de programacin orientada a objetos: Crean un sistema de clases y objetos siguiendo el ejemplo del mundo real, en el que unos objetos realizan acciones y se comunican con otros objetos. Ejemplos: C++, Java. Lenguajes de programacin funcionaI: La tarea se realiza evaluando funciones, (como en Matemticas), de manera recursiva. Ejemplo: Lisp. Lenguajes de programacin Igica: La tarea a realizar se expresa empleando lgica formal matemtica. Expresa qu computar. Ejemplo: Prolog. Hay muchos paradigmas de programacin: Programacin genrica, programacin reflexiva, programacin orientada a procesos, etc. 4.7 LUGAR DE EJECUCIN En sistemas distribuidos, segn dnde se ejecute: Lenguajes de servidor: Se ejecutan en el servidor. Ejemplo: PHP es el ms utilizado en servidores web. Lenguajes de cIiente: Se ejecutan en el cliente. Ejemplo: JavaScript en navegadores web. 4.8 ADMISIN O NO DE CONCURRENCIA Segn admitan o no concurrencia de procesos, esto es, la ejecucin simultnea de varios procesos lanzados por el programa: Formando Emprendedores De Calidad Para Un Mundo Empresarial 21 Instituto de Educacin Superior San Ignacio de Monterrico Lenguajes concurrentes: Ejemplo: Ada. Lenguajes no concurrentes: Ejemplo: C. 4.9 INTERACTIVIDAD Segn la interactividad del programa con el usuario u otros programas: Lenguajes orientados a sucesos: El flujo del programa es controlado por la interaccin con el usuario o por mensajes de otros programas/sistema operativo, como editores de texto, interfaces grficos de usuario (GU) o kernels. Ejemplo: VisualBasic, lenguajes de programacin declarativos. Lenguajes no orientados a sucesos: El flujo del programa no depende de sucesos exteriores, sino que se conoce de antemano, siendo los procesos batch el ejemplo ms claro (actualizaciones de bases de datos, colas de impresin de documentos, etc.). Ejemplos: Lenguajes de programacin imperativos. 4.10 REALIZACIN VISUAL Segn la realizacin visual o no del programa: Lenguajes de programacin visuaI: El programa se realiza moviendo bloques de construccin de programas (objetos visuales) en un interfaz adecuado para ello. No confundir con entornos de programacin visual, como Microsoft Visual Studio y sus lenguajes de programacin textuales (como Visual C#). Ejemplo: Mindscript. Lenguajes de programacin textuaI: El cdigo del programa se realiza escribindolo. Ejemplos: C, Java, Lisp. Formando Emprendedores De Calidad Para Un Mundo Empresarial 22 Instituto de Educacin Superior San Ignacio de Monterrico CAPITULO 5 TECNOLOGA ORIENTADA A OBJETOS (EL NUEVO PARADIGMA) Formando Emprendedores De Calidad Para Un Mundo Empresarial 23 Instituto de Educacin Superior San Ignacio de Monterrico La Programacin Orientada a Objetos (POO u OOP segn sus siglas en ingls) es un paradigma de programacin que usa objetos y sus interacciones para disear aplicaciones y programas de computadora. Est basado en varias tcnicas, incluyendo herencia, modularidad, polimorfismo, y encapsulamiento. Su uso se populariz a principios de la dcada de 1990. Actualmente son muchos los lenguajes de programacin que soportan la orientacin a objetos. 5.1 INTRODUCCIN Los objetos son entidades que combinan estado, comportamiento e identidad: El estado est compuesto de datos, sern uno o varios atributos a los que se habrn asignado unos valores concretos (datos). El comportamiento est definido por los procedimientos o mtodos con que puede operar dicho objeto, es decir, qu operaciones se pueden realizar con l. La identidad es una propiedad de un objeto que lo diferencia del resto, dicho con otras palabras, es su identificador (concepto anlogo al de identificador de una variable o una constante). La programacin orientada a objetos expresa un programa como un conjunto de estos objetos, que colaboran entre ellos para realizar tareas. Esto permite hacer los programas y mdulos ms fciles de escribir, mantener y reutilizar. Formando Emprendedores De Calidad Para Un Mundo Empresarial 2 Instituto de Educacin Superior San Ignacio de Monterrico De esta forma, un objeto contiene toda la informacin que permite definirlo e identificarlo frente a otros objetos pertenecientes a otras clases e incluso frente a objetos de una misma clase, al poder tener valores bien diferenciados en sus atributos. A su vez, los objetos disponen de mecanismos de interaccin llamados mtodos que favorecen la comunicacin entre ellos. Esta comunicacin favorece a su vez el cambio de estado en los propios objetos. Esta caracterstica lleva a tratarlos como unidades indivisibles, en las que no se separan ni deben separarse el estado y el comportamiento. Los mtodos (comportamiento) y atributos (estado) estn estrechamente relacionados por la propiedad de conjunto. Esta propiedad destaca que una clase requiere de mtodos para poder tratar los atributos con los que cuenta. El programador debe pensar indistintamente en ambos conceptos, sin separar ni darle mayor importancia a ninguno de ellos, hacerlo podra producir el hbito errneo de crear clases contenedoras de informacin por un lado y clases con mtodos que manejen a las primeras por el otro. De esta manera se estara realizando una programacin estructurada camuflada en un lenguaje de programacin orientado a objetos. Esto difiere de la programacin estructurada tradicional, en la que los datos y los procedimientos estn separados y sin relacin, ya que lo nico que se busca es el procesamiento de unos datos de entrada para obtener otros de salida. La programacin estructurada anima al programador a pensar sobre todo en trminos de procedimientos o funciones, y en segundo lugar en las estructuras de datos que esos procedimientos manejan. En la programacin estructurada slo se escriben funciones que procesan datos. Los programadores que emplean ste nuevo paradigma, en cambio, primero definen objetos para luego enviarles mensajes solicitndoles que realicen sus mtodos por s mismos. 5.2 ORIGEN Los conceptos de la programacin orientada a objetos tienen origen en Simula 67, un lenguaje diseado para hacer simulaciones, creado por Ole-Johan Dahl y Kristen Nygaard del Centro de Cmputo Noruego en Oslo. Al parecer, en este centro, trabajaban en simulaciones de naves, y fueron confundidos por la explosin combinatoria de cmo las diversas cualidades de diversas naves podan afectar unas a las otras. La idea ocurri para agrupar los diversos tipos de naves en diversas clases de objetos, siendo responsable cada clase de objetos de definir sus propios datos y comportamiento. Fueron Formando Emprendedores De Calidad Para Un Mundo Empresarial 2! Instituto de Educacin Superior San Ignacio de Monterrico refinados ms tarde en Smalltalk, que fue desarrollado en Simula en Xerox PARC (y cuya primera versin fue escrita sobre Basic) pero diseado para ser un sistema completamente dinmico en el cual los objetos se podran crear y modificar "en marcha" en lugar de tener un sistema basado en programas estticos. La programacin orientada a objetos tom posicin como el estilo de programacin dominante a mediados de los aos ochenta, en gran parte debido a la influencia de C++, una extensin del lenguaje de programacin C. Su dominacin fue consolidada gracias al auge de las nterfaces grficas de usuario, para las cuales la programacin orientada a objetos est particularmente bien adaptada. En este caso, se habla tambin de programacin dirigida por eventos. Las caractersticas de orientacin a objetos fueron agregadas a muchos lenguajes existentes durante ese tiempo, incluyendo Ada, BASC, Lisp, Pascal, entre otros. La adicin de estas caractersticas a los lenguajes que no fueron diseados inicialmente para ellas condujo a menudo a problemas de compatibilidad y a la capacidad de mantenimiento del cdigo. Los lenguajes orientados a objetos "puros", por otra parte, carecan de las caractersticas de las cuales muchos programadores haban venido a depender. Para saltar este obstculo, se hicieron muchas tentativas para crear nuevos lenguajes basados en mtodos orientados a objetos, pero permitiendo algunas caractersticas imperativas de maneras "seguras". El Eiffel de Bertrand Meyer fue un temprano y moderadamente acertado lenguaje con esos objetivos pero ahora ha sido esencialmente reemplazado por Java, en gran parte debido a la aparicin de nternet, y a la implementacin de la mquina virtual de Java en la mayora de navegadores. PHP en su versin 5 se ha ido modificando y soporta una orientacin completa a objetos, cumpliendo todas las caractersticas propias de la orientacin a objetos. 5.3 FUNDAMENTOS DE LA PROGRAMACIN ORIENTADA A OBJETOS (POO) En la vida real podemos observar que estamos rodeados de objetos, por ejemplo una mesa, una silla, un bolgrafo, etc. y todos ellos podran clasificarse (con mayor o menor detalle) atendiendo a una definicin. Adems, sabemos que a pesar de existir muchos tipos de mesas, todas ellas tienen unas caractersticas comunes. En definitiva, es posible concluir que pueden hacerse dos distinciones: Por una parte tenemos el concepto de lo que es una mesa. Formando Emprendedores De Calidad Para Un Mundo Empresarial 2" Instituto de Educacin Superior San Ignacio de Monterrico Por otra parte tenemos mesas concretas. Esta idea fue trasladada a la informtica y surgieron los conceptos de clase y objeto. Podemos decir que una clase es un concepto sobre una entidad abstracta que define cmo sern todos los objetos que existan de ese tipo. Por tanto, un objeto es una concrecin mientras que una clase es una abstraccin. Si trasladamos la definicin anterior a la jerga tcnica informtica, podemos decir que una clase es un prototipo que define las propiedades y los mtodos comunes a mltiples objetos de un mismo tipo. Sera como una plantilla para la creacin de objetos. Por su parte, un objeto es un conjunto de propiedades y mtodos capaces de manipular dichas propiedades. Objetos en el Mundo Real 5.3.1 PROGRAMACIN ORIENTADA A OBJETOS Es un paradigma de programacin que define los programas en trminos de "clases de objetos", La programacin orientada a objetos (POO), expresa un programa como un conjunto de estos objetos, que colaboran entre ellos para realizar tareas. Esto permite hacer los programas y mdulos ms fciles de escribir, mantener y reutilizar. La POO hace que los problemas sean ms sencillos, al permitir dividir el problema. Est divisin se hace en objetos, de forma que cada objeto funcione de forma totalmente independiente. Un objeto es un elemento del programa que posee sus propios datos y su Formando Emprendedores De Calidad Para Un Mundo Empresarial 2# Instituto de Educacin Superior San Ignacio de Monterrico propio funcionamiento. Es decir un objeto est formado por datos (propiedades) y funciones que es capaz de realizar el objeto (mtodos). Podemos decir que un lenguaje est orientado a objetos si soporta objetos como una caracterstica fundamental del mismo. Pero, qu significa soportar objetos? Fundamentalmente consiste en que el lenguaje permita las siguientes caractersticas: Encapsulacin, Herencia, Polimorfismo. 5.3.2 QU SON LAS CLASES? Las clases son las plantillas para hacer objetos. Una clase sirve para definir una serie de objetos con propiedades (atributos), comportamientos (operaciones o mtodos), y semntica comunes. Hay que pensar en una clase como un molde. A travs de las clases se obtienen los objetos en s. Es decir antes de poder utilizar un objeto se debe definir la clase a la que pertenece, esa definicin incluye: a) Sus atributos. Es decir, los datos miembros de esa clase. Los datos pueden ser pblicos (accesibles desde otra clase) o privados (slo accesibles por cdigo de su propia clase. Tambin se las llama campos. b) Sus mtodos. Las funciones miembro de la clase. Son las acciones (u operaciones) que puede realizar la clase. c) Cdigo de iniciaIizacin. Para crear una clase normalmente hace falta realizar operaciones previas (es lo que se conoce como el constructor de la clase). d) Otras cIases. Dentro de una clase se pueden definir otras clases (clases internas, son consideradas como asociaciones dentro de UML). Formando Emprendedores De Calidad Para Un Mundo Empresarial 2$ Instituto de Educacin Superior San Ignacio de Monterrico Diversas Definiciones de Clases 5.3.3 QU SON LOS OBJETOS? Se Ies IIama instancias de cIase. Son un eIemento en s de Ia cIase, un objeto se crea utiIizando eI IIamado constructor de Ia cIase. EI constructor es eI mtodo que permite iniciar eI objeto. 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. Notacin de Clase y Objeto en UML 5.4 PROPIEDADES DE LA POO Formando Emprendedores De Calidad Para Un Mundo Empresarial 2% Instituto de Educacin Superior San Ignacio de Monterrico 5.4.1 ENCAPSULAMIENTO Un objeto es un conjunto de propiedades y mtodos, es decir, datos y programas relacionados entre s como si estuvieran encerrados en una cpsula. Son inaccesibles e impiden conocer cmo est distribuida la informacin dentro de ellos. Esto implica que las peticiones de informacin a un objeto deben hacerse mediante mensajes dirigidos a l. Un mensaje es una simple llamada a un mtodo del objeto con el que se quiere comunicar. El hecho de ser una cpsula, algo cerrado e inaccesible, favorecer la depuracin de aplicaciones y la reutilizacin del cdigo en caso de migrarlo a otros entornos tambin permite reducir el potencial de errores que pudieran ocurrir. Hagamos una comparacin con lo que sera la vida real. Cuando montamos en un coche nos limitados a dar a la llave contacto y el motor arranca. Es muy simple, pero esa simpleza nos la brinda la encapsulacin. La realidad es que ocurren muchas cosas: contacto elctrico, funcionamiento del motor de arranque, apertura del paso de combustible, etc. Pero, necesitamos saber realmente lo que ocurre para hacer uso de l? No, nos basta con saber que para arrancarlo necesitamos introducir la llave en el contacto y girarla. La esencia deI encapsuIamiento es que cuando un objeto trae consigo su funcionaIidad esta uItima se ocuIta, por ejempIo: por lo general la mayora de gente que ve televisin no sabe, o no se preocupa de la complejidad electrnica que hay de detrs de la pantalla ni de todas las operaciones que tienen que ocurrir para mostrar una imagen en la pantalla es decir la televisin hace lo que tiene que hacer sin mostrarnos el proceso necesario para ello, y por suerte, la mayora de los artefactos electrodomsticos funcionan as. Encapsulamiento Formando Emprendedores De Calidad Para Un Mundo Empresarial 3& Instituto de Educacin Superior San Ignacio de Monterrico 5.4.2 HERENCIA La herencia es una caracterstica que permite la creacin de clases a partir de otras. Esto conlleva tanto la reutilizacin del cdigo, como la especializacin de las clases. La reutilizacin del cdigo viene dada porque podemos definir clases nuevas partiendo de otras ya existentes. En este caso se heredan sus propiedades y mtodos. La especializacin de las clases viene por aadidura ya que, al definir una clase partiendo de otra, lo que estamos es creando una nueva clase ms especializada. Visto lo anterior podemos ya intuir que las clases pueden organizarse jerrquicamente. Esta jerarqua viene determinada por el uso realizado de la herencia. Con esta organizacin empezamos a tener trminos como: clase padre, clase hija, superclase (o clase raz) y clase final. A continuacin vamos a explicarlos: CIase padre o supercIase: se dice que una clase es padre de otra cuando sirve como punto de partida para crear a esta ltima. CIase hija o subcIase: es aquella clase que hereda de otra, y es hija con respecto a su clase padre o su superclase. CIase finaI: toda aquella clase que no puede tener hijas. Herencia En el grafico anterior se representa una jerarqua de clases de figuras geomtricas. En la cima de la jerarqua tenemos la clase Figura, y es la clase padre de las clases Circulo y Poligono. La clase Circulo es una clase hija de la clase Figura y tambin es una Formando Emprendedores De Calidad Para Un Mundo Empresarial 31 Instituto de Educacin Superior San Ignacio de Monterrico clase final. La clase Poligono es clase hija de la clase Figura y clase padre de las clases Rectangulo y Triangulo. El resto de relaciones que faltan seran similares a las ya explicadas. La herencia puede ser de dos tipos: simple y compuesta. La diferencia entre ambas es que en el caso de herencia compuesta se permite heredar de ms de una clase. En otras palabras, se trata de que una clase hija pueda tener ms de una clase padre. 5.4.3 POLIMORFISMO Consiste en la posibilidad de tener mtodos con el mismo nombre en distintas clases. Al hablar de mtodos en distintas clases nos estamos refiriendo a mtodos distintos y por tanto con comportamientos distintos a pesar de que tengan el mismo nombre. El polimorfismo permite poder enviar un mismo mensaje (recordemos que un mensaje es una invocacin a un mtodo) a objetos de clases diferentes. Estos objetos recibirn el mismo mensaje pero respondern a l de formas diferentes. Por ejemplo, un mensaje + para un objeto entero significara una suma, mientras que para un objeto string (cadena de caracteres) significara la concatenacin. olimorfismo En l grafico podemos ver una jerarqua de clases en la que todas las clases que la componen tienen un mtodo llamado dibujar(). Todos tienen el mismo nombre pero cada uno de ellos podr tener una funcionalidad distinta. En este ejemplo concreto, una posible interpretacin podra ser que tenemos dos clases hijas que redefinen el mtodo dibujar() de su clase padre. Probablemente el mtodo dibujar() de la clase padre sea un mtodo abstracto (no se ha implementado, slo se ha definido) ya que para dibujar un polgono es necesario saber el tipo de polgono del que se trata. Por tanto, las clases Formando Emprendedores De Calidad Para Un Mundo Empresarial 32 Instituto de Educacin Superior San Ignacio de Monterrico hijas de la clase Poligono se ven obligadas a implementar el mtodo dibujar() que ser distinto en cada caso. Esto es un claro ejemplo de polimorfismo. 5.4.4 PRINCIPIO DE OCULTACIN Consiste en que cada objeto est aislado del exterior, es un mdulo natural, y cada tipo de objeto expone una interfaz a otros objetos que especfica cmo pueden interactuar con los objetos de la clase. El aislamiento protege a las propiedades de un objeto contra su modificacin por quien no tenga derecho a acceder a ellas, solamente los propios mtodos internos del objeto pueden acceder a su estado. Esto asegura que otros objetos no pueden cambiar el estado interno de un objeto de maneras inesperadas, eliminando efectos secundarios e interacciones inesperadas. Algunos lenguajes relajan esto, permitiendo un acceso directo a los datos internos del objeto de una manera controlada y limitando el grado de abstraccin. La aplicacin entera se reduce a un agregado o rompecabezas de objetos. En programacin orientada a objetos el principio de ocultacin hace referencia a que los atributos privados de un objeto no pueden ser modificados ni obtenidos a no ser que se haga a travs de algn mdulo (funciones, mtodos y en algunos lenguajes tambin llamados propiedades del objeto). Un objeto oculta lo que hace a otros objetos y al mundo exterior, pero un objeto necesita presentar un rostro al mundo exterior para poder inicializar sus operaciones en el ejemplo de la televisin, Esta tiene que mostrar diversos botones en el control remoto y en si misma que permiten realizar operaciones para ajustar los niveles de volumen, la seleccin de canales, etc. Estos botones se conocen como interfaces. Formando Emprendedores De Calidad Para Un Mundo Empresarial 33 Instituto de Educacin Superior San Ignacio de Monterrico rincipio de Ocultacin 5.4.5 ABSTRACCIN Cada objeto en el sistema sirve como modelo de un "agente" abstracto que puede realizar trabajo, informar y cambiar su estado, y "comunicarse" con otros objetos en el sistema sin revelar cmo se implementan estas caractersticas. Los procesos, las funciones o los mtodos pueden tambin ser abstrados y cuando lo estn, una variedad de tcnicas son requeridas para ampliar una abstraccin. La abstraccin se refiere a quitar las propiedades y acciones de un objeto para dejar solo aquellas que sean necesarias, que quiere decir esto ultimo que diferentes tipos de problemas requieren diferentes cantidades de informacin aun si estos problemas pertenecen a un rea en comn. Algunos trminos importantes se derivan de los anteriores como: Mtodo: algoritmo asociado a un objeto (o a una clase de objetos), cuya ejecucin se desencadena tras la recepcin de un "mensaje". Desde el punto de vista del comportamiento, es lo que el objeto puede hacer. Un mtodo puede producir un cambio Formando Emprendedores De Calidad Para Un Mundo Empresarial 3 Instituto de Educacin Superior San Ignacio de Monterrico en las propiedades del objeto, o la generacin de un "evento" con un nuevo mensaje para otro objeto del sistema. Evento: un suceso en el sistema (tal como una interaccin del usuario con la mquina, o un mensaje enviado por un objeto). El sistema maneja el evento enviando el mensaje adecuado al objeto pertinente. Tambin se puede definir como evento, a la reaccin que puede desencadenar un objeto, es decir la accin que genera. Mensaje: una comunicacin dirigida a un objeto, que le ordena que ejecute uno de sus mtodos con ciertos parmetros asociados al evento que lo gener. Propiedad o atributo: contenedor de un tipo de datos asociados a un objeto (o a una clase de objetos), que hace los datos visibles desde fuera del objeto y esto se define como sus caractersticas predeterminadas, y cuyo valor puede ser alterado por la ejecucin de algn mtodo. Estado interno: es una variable que se declara privada, que puede ser nicamente accedida y alterada por un mtodo del objeto, y que se utiliza para indicar distintas situaciones posibles para el objeto (o clase de objetos). No es visible al programador que maneja una instancia de la clase. Componentes de un objeto: atributos, identidad, relaciones y mtodos. Representacin de un objeto: un objeto se representa por medio de una tabla o entidad que est compuesta por sus atributos y funciones correspondientes. En comparacin con un lenguaje imperativo, una "variable", no es ms que un contenedor interno del atributo del objeto o de un estado interno, as como la "funcin" es un procedimiento interno del mtodo del objeto. 5.5 CARACTERSTICAS DE LA PROGRAMACIN ORIENTA A OBJETOS a) SimpIe. Ofrece la funcionalidad de un lenguaje potente pero sin las caractersticas menos usadas y ms confusas de stos. El ejemplo ms claro puede ser el recolector de basura, que Formando Emprendedores De Calidad Para Un Mundo Empresarial 3! Instituto de Educacin Superior San Ignacio de Monterrico evita que andemos preocupndonos de liberar memoria. Otro ejemplo podra ser la supresin de los punteros. b) Lenguaje de objetos. Por qu "de" objetos y no "orientado a" objetos? Por que, al contrario de otros lenguajes como C++, no es un lenguaje modificado para poder trabajar con objetos sino que es un lenguaje creado para trabajar con objetos desde cero. De hecho, TODO lo que hay en Java son objetos. Java soporta las tres caractersticas bsicas de la orientacin a objetos: encapsulacin, herencia y polimorfismo. c) Distribuido. Proporciona las libreras y herramientas necesarias para que las aplicaciones puedan ser distribuidas. Se ha desarrollado con extensas capacidades de interconexin a red y soporta varios protocolos de red. d) Robusto. Realiza variadas comprobaciones tanto en tiempo de compilacin como de ejecucin. Entre ellas podemos mencionar la comprobacin de tipos y la comprobacin de lmites de arrays. e) PortabIe. Esto no se refiere a la independencia de la plataforma, si no a la portabilidad en cuanto a desarrollo. Por ejemplo, los enteros son siempre enteros de 32 bits en complemento a 2, con independencia de la plataforma. f) MuItipIataforma. Como mencionamos antes, no es necesario recompilar las aplicaciones Java para los distintos sistemas en que van a ser explotadas. g) MuItihiIo. Permite mltiples hilos de ejecucin, es decir, muchas actividades simultneas dentro del mismo programa. Las ventajas de esto son un mejor rendimiento interactivo (el usuario no percibe tanto la ocupacin de la mquina) y un mejor comportamiento en tiempo real (aunque sea algo muy limitado por el sistema operativo). h) Dinmico. Formando Emprendedores De Calidad Para Un Mundo Empresarial 3" Instituto de Educacin Superior San Ignacio de Monterrico Cuando una aplicacin se lanza, no se cargan todas las libreras que requiere, sino que la carga es bajo demanda. Las libreras nuevas o actualizadas no paralizarn las aplicaciones en funcionamiento. 5.6 LENGUAJES ORIENTADOS A OBJETOS Entre los lenguajes orientados a objetos se destacan los siguientes: ABAP ActionScript ActionScript 3 Ada C++ C# Clarion Lenguaje de programacin D Object Pascal (Delphi) Gambas Harbour Eiffel Java JavaScript (la herencia se realiza por medio de la programacin basada en prototipos) Lexico (en castellano) Objective-C Ocaml Formando Emprendedores De Calidad Para Un Mundo Empresarial 3# Instituto de Educacin Superior San Ignacio de Monterrico Oz PHP (en su versin 5) Python Ruby Smalltalk Magik (SmallWorld) VB.NET Visual FoxPro (en su versin 6) Visual Basic XBase++ Gambas Flex builder (adobe) Muchos de estos lenguajes de programacin no son puramente orientados a objetos, sino que son hbridos que combinan la POO con otros paradigmas. Al igual que C++ otros lenguajes, como OOCOBOL, OOLSP, OOPROLOG y Object REXX, han sido creados aadiendo extensiones orientadas a objetos a un lenguaje de programacin clsico. Un nuevo paso en la abstraccin de paradigmas de programacin es la Programacin Orientada a Aspectos (POA). Aunque es todava una metodologa en estado de maduracin, cada vez atrae a ms investigadores e incluso proyectos comerciales en todo el mundo. Formando Emprendedores De Calidad Para Un Mundo Empresarial 3$ Instituto de Educacin Superior San Ignacio de Monterrico CAPITULO 6 LENGUAJE JAVA - SINTAXIS Y CONCEPTOS BSICOS Formando Emprendedores De Calidad Para Un Mundo Empresarial 3% Instituto de Educacin Superior San Ignacio de Monterrico 6.1 IDENTIFICADORES Los identificadores sirven para nombrar variables, propiedades, mtodos, clases, objetos, interfaces y cualquier otra entidad que sea necesario identificar para poder usar. En Java, un nombre de identificador debe empezar con una letra, un smbolo de subrayado (_) o un smbolo dlar ($). El resto de los caracteres empleados pueden ser letras o nmeros. No existe una longitud mxima y se distinguen las maysculas de las minsculas. 6.2 VARIABLES Una variable es un nombre que contiene un valor que puede cambiar a lo largo del programa es decir representan direcciones de memoria en las que podemos alojar temporalmente la informacin que necesitemos, y por otro, nos ofrecen la facilidad de referirnos a ellas mediante un nombre. Una declaracin de variable se compone de dos partes: su tipo y su nombre. Adicionalmente puede indicarse un valor para su inicializacin. El tipo de la variable determina los valores que puede contener y las operaciones que se podrn realizar con ella. Segn el tipo de informacin que contienen pueden ser variables de tipos primitivos o variables de referencia. Desde el punto de vista del papel que desempean, las variables pueden ser: VariabIe miembro de una cIase: Se definen dentro de la clase y fuera de cualquier mtodo. Formando Emprendedores De Calidad Para Un Mundo Empresarial & Instituto de Educacin Superior San Ignacio de Monterrico VariabIes IocaIes: Se definen dentro de un mtodo o, ms en general, dentro de cualquier bloque entre llaves ({ }). Se crean dentro del bloque y se destruyen al finalizar dicho bloque. Existe una serie de pala'ras reser(adas las cuales tienen un significado especial para )a(a y por lo tanto no se pueden utilizar como nombres de variables. Dichas palabras son: abstract boolean break byte case catch char class const* continue default do double else extends final finally float for goto* if implements import instanceof int interface long native new null package private protected public return short static super switch synchronized this throw throws transient try void volatile while (*) Son palabras reservadas, pero no se utilizan en la actual implementacin del lenguaje Java. 6.3 MBITO DE VARIABLES Se denomina visibiIidad, mbito o aIcance de una variable, a la parte de una aplicacin en la que dicha variable es accesible. En otras palabras, la parte en la cual puede usarse dicha variable. Como norma generaI, podemos decir que Ias variabIes decIaradas dentro de un bIoque (entre IIaves) son visibIes y existen dentro de ese bIoque. Por ejemplo, las variables declaradas al principio de una funcin existen mientras se ejecute la funcin, las declaradas dentro de un bloque if slo sern accesibles y vlidas dentro de dicho bloque y las variables miembro de una clase son vlidas mientras existe el objeto. Las variables miembro de una clase declarada como pblica (public), sern accesibles mediante una referencia a un objeto de dicha clase usando el operador punto. Por su parte, las declaradas como privadas (private) no son accesibles desde otras clases. Las funciones miembro de una clase tienen acceso directo a todas las variables miembro de la clase sin necesidad de anteponer el nombre de un objeto de la clase. Sin embargo, las funciones miembro de una clase B derivada de otra A, tienen acceso a todas las variables miembro de A declaradas como pblicas o protegidas (protected), pero no a las declaradas como privadas. Una clase hija slo puede acceder directamente a las variables y funcin miembro de su clase padre declaradas como pblicas o protegidas. Formando Emprendedores De Calidad Para Un Mundo Empresarial 1 Instituto de Educacin Superior San Ignacio de Monterrico Otra caracterstica del lenguaje Java consiste en que es posibIe decIarar una variabIe dentro de un bIoque con eI mismo nombre que una variabIe miembro, pero no con eI nombre de otra variabIe IocaI que ya existiera. La variabIe decIarada dentro deI bIoque ocuIta a Ia variabIe miembro en ese bIoque. Para acceder a Ia variabIe miembro ocuIta sera necesario que usramos eI operador this. Sintaxis: [modificador] <nombreDeTipo> <nombreDeVariable> [= <inicializador>]; Adicionalmente a las declaraciones de Acceso, las variables pueden ser declaradas como: Static. Variable de clase. (Solo existe una copia por clase con acceso compartido entre todas las instancias de la misma.). Este calificador indica que el objeto no necesita de un objeto para poder utilizarlo sino que se le utiliza directamente a travs de la clase. FinaI. Declara la variable como constante. Este calificador indica que el elemento no podr ser modificado por nada, solo podr ser utilizada. En caso de que sea una variable de tipo primitivo indica que el valor no podr ser cambiado. Para objetos, la referencia del mismo no podr apuntar a un nuevo objeto, pero el objeto aun es capaz de ser modificado. MODIFICADORES (NiveIes de Acceso) PubIic. El campo es accesible de forma general sin restricciones. Es decir indica que el elemento puede ser utilizado dentro de la clase, dentro de las clases descendientes y desde cualquier objeto de la clase. Protected. El campo es accesible desde cualquier subclase (tanto dentro como fuera del paquete) y a todo mtodo dentro del paquete. Es decir indica que el elemento puede ser utilizado dentro de la clase, dentro de las clases descendientes, mas no desde un objeto de la clase. DefauIt (Package o tambien denominado FriendIy). El campo es accesible a todos los mtodos dentro del paquete. Es el acceso por defecto. Private. El campo es restringido a la clase que lo declara. Formando Emprendedores De Calidad Para Un Mundo Empresarial 2 Instituto de Educacin Superior San Ignacio de Monterrico 6.4 TIPOS DE DATOS PRIMITIVOS Declarar un variable de tipo primitiva reserva de por si el espacio de memoria necesario. Byte Entero muy pequeo. Short Entero Corto. nt Entero normal. Long Entero largo. Char Carcter. Float Nmero real de precisin simple. Double Nmero real de doble precisin. Boolean Valor lgico. Void Tipo Vaci. De no asignarse un valor de inicio, el compilador por defecto asignar uno. Tipos Precisin VaIor Por Defecto Byte 8 bits 0 Short 16 bits 0 nt 32 bits 0 Long 64 bits 0 Char 16 bits \u0000 Float 32 bits +0.0f Double 64 bits +0.0d Boolean - false 6.5 ORGANIZACIN Paquetes (Packages): son un grupo o librera de clases desarrolladas en java que se utilizan para algo especfico. Las principaIes cIases de java son las siguientes (incluidas en el JDK): o java.appIet: Creado para soportar la creacin de applet Java, el paquete java.applet permite a las aplicaciones ser descargadas sobre una red y ejecutarse dentro de una sandbox.. Formando Emprendedores De Calidad Para Un Mundo Empresarial 3 Instituto de Educacin Superior San Ignacio de Monterrico o java.awt: La Abstract Window Toolkit contiene rutinas para soportar operaciones bsicas GU y utiliza ventanas bsicas desde el sistema nativo subyacente. o java.awt.event: Soporte y procesamiento de eventos para controles awt. o java.io: El paquete java.io contiene clases que soportan entrada/salida. Las clases del paquete son principalmente streams; sin embargo, se incluye una clase para ficheros de acceso aleatorio. o java.Iang: El paquete Java java.lang contiene clases fundamentales e interfaces fuertemente relacionadas con el lenguaje y el sistema runtime. Esto incluye las clases raz que forman la jerarqua de clases, tipos relacionados con la definicin del lenguaje, excepciones bsicas, funciones matemticas, Hilos, funciones de seguridad, as como tambin alguna informacin sobre el sistema nativo subyacente. o java.net: El paquete java.net suminista rutinas especiales O para redes, permitiendo las peticiones HTTP, as como tambin otras transacciones comunes. o java.utiI: Las estructuras de datos que agregan objetos son el foco del paquete java.util. En el paquete est incluida la AP Collections, una jerarqua organizada de estructura de datos influenciada fuertemente por consideraciones de patrones de diseo. o javax.swing: Swing es una coleccin de rutinas que se construyen sobre java.awt para suministrar un toolkit de widgets independiente de plataforma. o javax.swing.event: Soporte y procesamiento de eventos para controles swing. o java.math: El paquete java.math soporta aritmtica multiprecision (incluyendo operaciones aritmticas modulares) y suministra generadores de nmeros primos multiprecision usados para la generacin de claves criptogrficas. 6.5.1 Instruccin Import Hay cdigo que se puede utilizar en los programas que realicemos en Java. Se importan clases de objetos que estn contenidas, a su vez, en paquetes estndares. Formando Emprendedores De Calidad Para Un Mundo Empresarial
Instituto de Educacin Superior
San Ignacio de Monterrico Por ejemplo la clase Date es una de las ms utilizadas, sirve para manipular fechas. Si alguien quisiera utilizar en su cdigo objetos de esta clase, necesita incluir una instruccin que permita utilizar esta clase. La sintaxis de esta instruccin es: import paquete.subpaquete.subsubapquete....cIase Esta instruccin se coloca arriba del todo en el cdigo. Para la clase Date sera: import java.utiI.Date Lo que significa, importar en el cdigo la clase Date que se encuentra dentro del paquete til que, a su vez, est dentro del gran paquete llamado java. Tambin se puede utilizar el asterisco en esta forma: import java.utiI.* Esto significa que se va a incluir en el cdigo todas las clases que estn dentro del paquete util de java. 6.5.2 Comentarios En java al igual que en otros lenguajes existen los comentarios que son: // Comentario de una lnea. /* .*/ Comentario de Varias lneas. /** Comentario de Documentacin * Esta aplicacin realiza lo siguiente: . * @autor Nilton Alexis Gmez Flores * @version 1.0 EjempIo // J003.java = dibuja 2 circunferencias import java.awt.*; import java.awt.event.*; class J003 extends Frame { public J003() { setTitle("Dos circunferencias"); } Formando Emprendedores De Calidad Para Un Mundo Empresarial ! Instituto de Educacin Superior San Ignacio de Monterrico public static void main(String [] args) { Frame f=new J003(); f.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); f.setSize(300,200); f.setVisible(true); } public void paint(Graphics g){ g.setColor(Color.red); g.drawOval(10,30,30,30); g.setColor(Color.blue); g.drawOval(35,30,30,30); g.drawString("Dos circunferencias",40,100); } } f.setSize(600,400) Determina el tamao de la ventana: 1 coordenada = 600 = anchura en pxels, 2 coordenada = 400 = altura en pxels. g.setCoIor(CoIor,red) Establece el rojo como color de dibujo. g.drawOvaI(10,30,30,30) Dibuja una circunferencia cuyo vrtice superior izquierdo se encuentra en el punto 10,30. La tercera coordenada es el diametro horizontal y la cuarta el dimetro vertical. Como los dos dimetros son iguales, resulta una circunferencia. Si fueran distintos, seria una elipse. g.drawString("Dos circunferencias",40,100) Dibuja el texto que hay entre comillas en el punto de coordenadas 40,100 (1 coordenada= distncia horizontal Formando Emprendedores De Calidad Para Un Mundo Empresarial " Instituto de Educacin Superior San Ignacio de Monterrico desde el borde izquierdo, 2 coordenada = distncia vertical desde el borde superior). 6.6 CONVERSIN ENTRE TIPOS *C+S,I-./ Hay veces en las que se desear realizar algo como: int a;byte b=12; a=b; La duda est en si esto se puede realizar. La respuesta es que s. S porque un dato byte es ms pequeo que uno int y Java le convertir de forma implcita. Sin embargo en: int a=1;byte b; b=a; El compilador devolver error aunque el nmero 1 sea vlido para un dato byte. Para ello hay que hacer un castin!. Eso significa poner el tipo deseado entre parntesis delante de la expresin. int a=1;byte b; b= (byte) a; //No da error En el siguiente ejemplo: byte n1=100, n2=100, n3; n3= n1 * n2 /100; Aunque el resultado es 100, y ese resultado es vlido para un tipo byte; lo que ocurrir en realidad es que ocurrir un error. Eso es debido a que primero multiplica 100 * 100 y como eso da 10000, no tiene ms remedio el compilador que pasarlo a entero y as quedar aunque se vuelva a dividir. La solucin correcta sera: n3 = (byte) (n1 * n2 / 100); Ms ejemplos de CASTNG int a = 24; byte b = (byte) a; short c = (short) a; long d = (long) a; 6.7 OPERADORES "0#01 1peradores +ritm2ticos Formando Emprendedores De Calidad Para Un Mundo Empresarial # Instituto de Educacin Superior San Ignacio de Monterrico Hay que tener en cuenta que el resultado de estos operadores vara notablemente si usamos enteros o si usamos nmeros de coma flotante. Por ejemplo: doubIe resultado1, d1=14, d2=5; int resultado2, i1=14, i2=5; resultado1= d1 / d2; resultado2= i1 / i2; resultado" valdr 2.8 mientras que resultado# valdr 2. Es ms incluso: doubIe resultado; int i1=7,i2=2; resultado=i1/i2; $$Resultado valdr% & resultado=(doubIe)i1/(doubIe)i2; $$Resultado valdr% &'( El operador del mdulo (%) para calcular el resto de una divisin entera. Ejemplo: int resultado, i1=14, i2=5; resultado = i1 % i2; //El resultado ser 4 "0#02 1peradores 3elacionales Sirven para comparar valores. Siempre devuelven valores booleanos. Son: "0#03 1peradores 4gicos Formando Emprendedores De Calidad Para Un Mundo Empresarial $ Instituto de Educacin Superior San Ignacio de Monterrico Tambin devuelven valores booleanos. Los operadores lgicos (AND, OR y NOT), sirven para evaluar condiciones complejas. NOT sirve para negar una condicin. Ejemplo: booIean mayorDeEdad, menorDeEdad; int edad = 21; mayorDeEdad = edad >= 18; //mayorDeEdad ser true menorDeEdad = !mayorDeEdad; //menorDeEdad ser false El operador && (AND) sirve para evaluar dos expresiones de modo que si ambas son ciertas, el resultado ser true sino el resultado ser faIse. Ejemplo: booIean carnetConducir=true; int edad=20; booIean puedeConducir= (edad>=18) && carnetConducir; //Si la edad es de al menos 18 aos y carnetConducir es //true, puedeConducir es true El operador || (OR) sirve tambin para evaluar dos expresiones. El resultado ser trae si al menos uno de las expresiones es true. Ejemplo: booIean nieva =true, llueve=faIse, graniza=faIse; booIean malTiempo= nieva || llueve || graniza; "0#0 1peradores De 5it Manipulan los bits de los nmeros. Son: Formando Emprendedores De Calidad Para Un Mundo Empresarial % Instituto de Educacin Superior San Ignacio de Monterrico "0#0! 1peradores De +signacin Permiten asignar valores a una variable. El fundamental es =. Pero sin embargo se pueden usar expresiones ms complejas como: x += 3; En el ejemplo anterior lo que se hace es sumar 3 a la x (es lo mismo x+=3, que x=x+3). Eso se puede hacer tambin con todos estos operadores: Tambin se pueden concatenar asignaciones: x1 = x2 = x3 = 5; Otros operadores de asignacin son ++ (incremento) y - - (decremento). Ejemplo: x++; //esto es x=x+1; x--; //esto es x=x-1; Pero hay dos formas de utilizar el incremento y el decremento. Se puede usar por ejemplo x++ o ++x. La diferencia estriba en el modo en el que se comporta la asignacin. Ejemplo: int x=5, y=5, z; z=x++; //) vale (* + vale , z=++y; //) vale ,* y vale , Formando Emprendedores De Calidad Para Un Mundo Empresarial !& Instituto de Educacin Superior San Ignacio de Monterrico "0#0" 1perador 6 Este operador (conocido como if de una lnea) permite ejecutar una instruccin u otra segn el valor de la expresin. Sintaxis: e7presionlogica?(alorSi8erdadero9(alorSiFalso: Ejemplo: paga=(edad>18)?6000:3000; En este caso si la variable edad es mayor de 18, la paga ser de 6000, sino ser de 3000. Se evala una condicin y segn es cierta o no se devuelve un valor u otro. Ntese que esta funcin ha de devolver un valor y no una expresin correcta. Es decir, no funcionara: (edad>18)? paga=6000: paga=3000; ;E3313<<<< "0#0# 1perador Entero De Concatenacin De Cadenas Cuando una cadena de texto y una expresin que no sea de tipo cadena se combinan usando el operador de concatenacin de cadenas (+), el resultado es una nueva cadena. Dependiendo de la expresin y de su contenido, podremos obtener los siguientes resultados: Si la expresin es un tipo de referencia con valor null, se obtendr una nueva cadena igual a la cadena original ms la cadena null. Si la expresin es un tipo de referencia con valor distinto de null, se obtendr una cadena igual a la original ms el valor devuelto por el mtodo toString() del tipo de referencia. Si la expresin es un tipo primitivo, se obtendr una cadena igual a la original ms el valor del tipo primitivo representado como cadena. Veamos unos ejemplos sobre las posibles concatenaciones expuestas: String inicial = ABC; String nulo = null; String nonulo = def; Formando Emprendedores De Calidad Para Un Mundo Empresarial !1 Instituto de Educacin Superior San Ignacio de Monterrico byte numero = 23; String caso1 = inicial + nulo; // Se asigna a la variable el valor ABCnull String caso2 = inicial + nonulo; // Se asigna a la variable el valor ABCdef String caso3 = inicial + numero; // Se asigna a la variable el valor ABC23 6.7.8 Operadores De Referencias Se trata de operadores que operan sobre valores de tipo de referencia, esto es, sobre referencias a objetos, interfaces y arrays. Existen distintas categoras y vamos a verlas detalladamente a continuacin. 6.7.9 Operadores De Referencias Para Acceso A Campos El acceso a los campos se realiza mediante el operador punto (.), por ello esta notacin tambin recibe el nombre de notacin de punto. En este tipo de expresiones, el elemento que est a la izquierda del punto identifica a la clase, objeto o interfaz a la que pertenece el elemento que est a la derecha del punto. Por ejemplo, para referirnos a la constante MAX_VALUE de la clase Float lo haramos con la siguiente expresin: Float.MAX_VALUE. Existen dos calificadores especiales que se pueden utilizar para acceder a los campos desde el interior de un objeto. Estos calificadores son las palabras this y super. La primera hace referencia al objeto al que est asociado el mtodo. La segunda se utiliza para hacer referencia a los campos de la clase padre. 6.7.10 Operadores De Referencias Para Invocacin De Mtodos La invocacin de mtodos, al igual que para el acceso a campos, se realiza mediante el operador punto. Tambin pueden usarse los calificadores this y super. Ambos ofrecen la misma funcionalidad que tienen los correspondientes para el acceso a campos. 6.7.11 Operadores De Conversin De Tipos De Referencia Formando Emprendedores De Calidad Para Un Mundo Empresarial !2 Instituto de Educacin Superior San Ignacio de Monterrico Las operaciones de conversin de tipos se utilizan para convertir una referencia de objeto a un cierto tipo. Pero existen ciertos requisitos para permitir la conversin. El tipo de un objeto slo puede convertirse al de su propia clase, al de una de sus superclases, al de una interfaz que sea implementada por su propia clase o al de una interfaz que sea implementada por alguna de sus superclases. Los tipos de referencia se convierten usando como operador el nombre entre parntesis de la clase a la cual se quiere convertir y anteponindolo a la expresin a convertir. En el siguiente ejemplo se supone la existencia de dos clases: FiguraGeometrica y Rectangulo, donde la segunda es descendiente de la primera. FiguraGeometrica figura = new Rectangulo (); Rectangulo rectangulo = (Rectangulo) figura; 6.7.12 Operador De Tipo De Referencia En Java es sumamente importante la clase a la que pertenece un tipo de referencia. Puesto que se permite la conversin entre tipos, se hace necesario que podamos comprobar desde el cdigo si una determinada conversin puede realizarse. Para determinar si un objeto es una instancia de una clase concreta, disponemos del operador instanceof que devuelve un valor booleano o genera una excepcin. El primer operando debe ser un tipo de referencia y el segundo debe ser un nombre de clase. Vamos a ver en la siguiente relacin los posibles casos: Si el primer operando es null (significara que no apunta a ningn objeto instanciado), el resultado es false. Si el primer operando es distinto de null y es posible convertirlo a la clase que especifica el segundo operando, el resultado ser true. Si el primer operando es distinto de null y no es un descendiente del tipo especificado por el segundo operando, la instruccin es ilegal y causara un error de ejecucin. En el siguiente ejemplo se resumen los comportamientos que se acaban de describir: String s1 = texto; String s2 = null; boolean b1 = s1 instanceof String; // b1 toma el valor true Formando Emprendedores De Calidad Para Un Mundo Empresarial !3 Instituto de Educacin Superior San Ignacio de Monterrico boolean b2 = s2 instanceof String; // b2 toma el valor false 6.8 PRECEDENCIA A veces hay expresiones con operadores que resultan confusas. Por ejemplo en: resultado = 8 + 4 / 2; Es difcil saber el resultado. Cul es? Seis o diez? La respuesta es 10 y la razn es que el operador de divisin siempre precede en el orden de ejecucin al de la suma. Es decir, siempre se ejecuta antes la divisin que la suma. Siempre se pueden usar parntesis para forzar el orden deseado: resultado = (8 + 4) / 2; Ahora no hay duda, el resultado es seis. No obstante el orden de precedencia de los operadores Java es: En la tabla anterior los operadores con mayor precedencia est en la parte superior, los de menor precedencia en la parte inferior. De izquierda a derecha la precedencia es la misma. Es decir, tiene la misma precedencia el operador de suma que el de resta. Esto ltimo provoca conflictos, por ejemplo en: resultado = 9 / 3 * 3; El resultado podra ser uno nueve. En este caso el resultado es nueve, porque la divisin y el producto tienen la misma precedencia; por ello el compilador de Java realiza primero la operacin que este ms a la izquierda, que en este caso es la divisin. Una vez ms los parntesis podran evitar estos conflictos. Formando Emprendedores De Calidad Para Un Mundo Empresarial ! Instituto de Educacin Superior San Ignacio de Monterrico 6.9 CONSTANTES 6.9.1 Constantes LiteraIes Por su parte, las constantes IiteraIes son representaciones literales de datos en el cdigo fuente. Estos valores se emplean para inicializar variables o para usarlas en expresiones en las que se requieren valores constantes. Las constantes literales pueden usarse para referirse explcitamente a uno de los tipos siguientes: int, long, float, double, boolean, char, String y null. En caso de que necesitramos representar un tipo primitivo distinto de los indicados, podramos hacer una conversin explcita al tipo deseado. Por otra parte, los objetos no pueden ser representados mediante estas constantes, y por tanto, no existen constantes literales de tipo de referencia. 6.9.2 Constantes Enteras Las constantes enteras se representan por un valor que est formado slo por dgitos numricos y no tienen la coma decimal. Si el nmero no comienza por cero, representa un nmero decimal (en base 10). Para representar constantes de tipo long se emplea el mismo mtodo pero aadiendo al final la letra L. Est permitido el empleo de la letra L en minsculas, pero no debe usarse ya que puede confundirse con el nmero uno. Adems de representaciones en formato decimal, se pueden representar constantes en los formatos octal y hexadecimal. Las constantes octales se representan anteponiendo un cero al propio nmero, que adems, slo podr estar formado por los dgitos del 0 al 7. Por su parte, las constantes hexadecimales se representan anteponiendo 0x o 0X y permitiendo que los dgitos del nmero puedan ser del 0 al 9 y las letras de la A a la F (en maysculas o minsculas). Las constantes octales y hexadecimales son de tipo entero a menos que estn seguidas por la letra L, en cuyo caso seran de tipo long. int a = 1002; // Tipo int long b = 1002L; // Tipo long int c = 053; // Tipo int en octal Formando Emprendedores De Calidad Para Un Mundo Empresarial !! Instituto de Educacin Superior San Ignacio de Monterrico int d = 053L; // Tipo long en octal int e = 0X002B ; // Tipo int en hexadecimal int f = 0X002BL; // Tipo long en hexadecimal El tipo char es un tipo entero, no obstante se trata de un tipo especial pensado para almacenar caracteres Unicode. Estos ltimos son similares a los caracteres ASC en que estn pensados para almacenar smbolos, nmeros y caracteres. Sin embargo, el rango del tipo char es mucho mayor porque permite representar caracteres de casi todos los idiomas del mundo. Las constantes literales de tipo char pueden representarse de dos formas distintas: Encerrando un nico carcter entre comillas simples. Utilizando una secuencia de escape, que es muy til para representar caracteres que no pueden escribirse mediante el teclado. La secuencia de escape se representa por una barra inclinada inversa (\) seguida de un nmero octal de tres dgitos, o bien por la barra seguida de la letra u y de un nmero hexadecimal de cuatro dgitos. La secuencia de escape tambin debe ir encerrada entre comillas simples. Tambin existe una serie de secuencias de escape especiales que se utilizan para representar algunos de los caracteres ASC ms comunes. En la siguiente tabla se relacionan todos. 6.9.3 Constantes De Coma FIotante Formando Emprendedores De Calidad Para Un Mundo Empresarial !" Instituto de Educacin Superior San Ignacio de Monterrico Se expresan mediante un valor numrico que incluya al menos una posicin decimal. A menos que se indique otra cosa, las constantes de coma flotante sern de tipo double. Para denotar que la constante sea de tipo float es necesario posponer la letra f o F. Por claridad, tambin pueden expresarse las constantes de tipo double posponiendo la letra d o D al nmero. Este tipo de constantes tambin pueden expresarse mediante la notacin exponencial, que define un nmero en dos partes: la mantisa y el exponente. La mantisa es un nmero en coma flotante con un dgito significativo y cierto nmero de decimales. El exponente es un nmero que representa la potencia de 10 que multiplica a la mantisa. Entre la mantisa y el exponente se debe poner la letra e o E. double a = 123.4; // Tipo double float b = 123.4F; // Tipo float double c = 4.502e-12; // Tipo double en notacin exponencial. 6.9.4 Constantes De Cadena Las constantes de cadena se representan por una secuencia de caracteres encerrados entre comillas dobles. Dentro de ellas se pueden incluir las secuencias de escape que antes mencionamos. Veamos algunos ejemplos: String a = Texto simple; // Texto simple String b = Esta es la letra \u0041; // Usando una secuencia de escape para representar la letra A String c = El proceso ha terminado.\nPulse una tecla; // Texto en dos lneas 6.9.5 Constantes BooIeanas Existen dos: true y faIse. Al contrario que en otros lenguajes de programacin, ninguna de estas constantes puede ser representada mediante un valor entero usando como criterio la igualdad a cero. Formando Emprendedores De Calidad Para Un Mundo Empresarial !# Instituto de Educacin Superior San Ignacio de Monterrico 6.9.6 Constante "NuII" Existe una constante nula (nuII) que podemos usarla para representar el valor nuII. Formando Emprendedores De Calidad Para Un Mundo Empresarial !$ Instituto de Educacin Superior San Ignacio de Monterrico CAPITULO 7 SOFTWARE JAVA Formando Emprendedores De Calidad Para Un Mundo Empresarial !% Instituto de Educacin Superior San Ignacio de Monterrico El software de Java contempla 3 plataformas para el desarrollo de aplicaciones: 7.1 J2SE (JAVA 2 STANDARD EDITION) Es el conjunto de herramientas software que permite el desarrollo y la ejecucin de programas Java destinados al lado cliente. Se le suele llamar SDK (Software Development Kit) o Kit de Desarrollo de Programas. Es gratuito y de libre distribucin. Se puede descargar desde la pgina oficial de Sun Microsystems relacionada con Java http://java.sun.com/. Dentro del J2SE se incluyen el compilador y la JVM (Java Virtual Machine) o Mquina virtual de Java. Tambin se la conoce como ntrprete de Java. Cada plataforma tiene su propia versin. En la pgina de Java dentro de Sun puede descargarse el J2SE para Windows, Linux, Solaris, etc. Si se trabaja con sistemas operativos menos corrientes como MacOS de Apple, AX de BM, HP-UX de Hewlett-Packard, etc. conviene ir a http://lopica.sourceforge.net/vm.html 7.2 J2EE (JAVA 2 ENTERPRISE EDITION) Plataforma del lenguaje Java destinada al desarrollo de aplicaciones empresariales estructuradas tpicamente en tres capas: capa de presentacin de datos, capa de lgica de negocio y capa de datos persistentes (bases de datos). Se compone de un conjunto de estndares y bibliotecas Java que permiten la creacin de las aplicaciones empresariales anteriormente citadas. Esta plataforma se utiliza sobre todo para programacin en servidores. Sin conocer lo fundamental de J2SE, resulta inviable introducirse en J2EE. 7.3 J2ME (JAVA 2 MICRO EDITION) Plataforma del lenguaje Java destinada al desarrollo de aplicaciones para pequeos dispositivos mviles de memoria limitada, poca capacidad de procesamiento y con Formando Emprendedores De Calidad Para Un Mundo Empresarial "& Instituto de Educacin Superior San Ignacio de Monterrico interfaces grficas limitadas. Tpicamente telfonos mviles, PDAs (Personal Assistent Digital), Pockets PCs, televisiones, relojes, sistemas de ayuda para automviles, tarjetas, etc. Como en J2EE, la base para programar mediante J2ME, es J2SE. 7.4 EL ENTORNO DE DESARROLLO DE JAVA Existen distintos programas comerciales que permiten desarrollar cdigo Java. La compaa Sun, creadora de Java, distribuye gratuitamente el Java(tm) Development Kit (JDK). Se trata de un conjunto de programas y libreras que permiten desarrollar, compilar y ejecutar programas en Java. ncorpora adems la posibilidad de ejecutar parcialmente el programa, deteniendo la ejecucin en el punto deseado y estudiando en cada momento el valor de cada una de las variables (con el denominado Debugger). Cualquier programador con un mnimo de experiencia sabe que una parte muy importante (muchas veces la mayor parte) del tiempo destinado a la elaboracin de un programa se destina a la deteccin y correccin de errores. Existe tambin una versin reducida del JDK, denominada JRE (Java Runtime Environment) destinada nicamente a ejecutar cdigo Java (no permite compilar). Los DEs (ntegrated Development Environment), tal y como su nombre indica, son entornos de desarrollo integrados. En un mismo programa es posible escribir el cdigo Java, compilarlo y ejecutarlo sin tener que cambiar de aplicacin. Algunos incluyen una herramienta para realizar Debug grficamente, frente a la versin que incorpora el JDK basada en la utilizacin de una consola (denominada habitualmente ventana de comandos de MS-DOS, en Windows NT/95/98) bastante difcil y pesada de utilizar. Estos entornos integrados permiten desarrollar las aplicaciones de forma mucho ms rpida, incorporando en muchos casos libreras con componentes ya desarrollados, los cuales se incorporan al proyecto o programa. Como inconvenientes se pueden sealar algunos fallos de compatibilidad entre plataformas, y ficheros resultantes de mayor tamao que los basados en clases estndar. Algunos DEs que podemos citar son: Jcreator, Netbeans, Eclipse y Jdeveloper entre otros. 7.5 BYTECODES Formando Emprendedores De Calidad Para Un Mundo Empresarial "1 Instituto de Educacin Superior San Ignacio de Monterrico Un programa C o C++ es totalmente ejecutable y eso hace que no sea independiente de la plataforma y que su tamao normalmente se dispare ya que dentro del cdigo final hay que incluir las libreras de la plataforma. roceso de compilacin de un pro!rama C-- Los programas Java no son ejecutables, no se compilan como los programas en C o C+ +. En su lugar son interpretados por una aplicacin conocida como la mquina virtuaI de Java (JVM). Gracias a ello no tienen porque incluir todo el cdigo y libreras propias de cada sistema. Previamente el cdigo fuente en Java se tiene que precompilar generando un cdigo (que no es directamente ejecutable) previo conocido como '=tecode o )>code. Ese cdigo (generado normalmente en archivos con extensin cIass) es el que es ejecutado por la mquina virtual de Java que interpreta las instrucciones de los bytecodes, ejecutando el cdigo de la aplicacin. El bytecode se puede ejecutar en cualquier plataforma, lo nico que se requiere es que esa plataforma posea un intrprete adecuado (la mquina virtual de esa plataforma). 7.6 LA JAVA VIRTUAL MACHINE La existencia de distintos tipos de procesadores y ordenadores llev a los ingenieros de Sun a la conclusin de que era muy importante conseguir un software que no dependiera del tipo de procesador utilizado. Se plante la necesidad de conseguir un cdigo capaz de ejecutarse en cualquier tipo de mquina. Una vez compilado no debera ser necesaria ninguna modificacin por el hecho de cambiar de procesador o de ejecutarlo en otra mquina. La clave consisti en desarrollar un cdigo neutro el cual estuviera preparado Formando Emprendedores De Calidad Para Un Mundo Empresarial "2 Instituto de Educacin Superior San Ignacio de Monterrico para ser ejecutado sobre una mquina hipottica o virtual, denominada Java Virtual Machina (JVM). Es esta JVM quien interpreta este cdigo neutro convirtindolo a cdigo particular de la CPU utilizada. Se evita tener que realizar un programa diferente para cada CPU o plataforma. La JVM es el intrprete de Java. Ejecuta los bytecodes (ficheros compilados con extensin *.class) creados por el compilador de Java (javac.exe). Tiene numerosas opciones entre las que destaca la posibilidad de utilizar el denominado JT (Just-n-Time Compiler), que puede mejorar entre 10 y 20 veces la velocidad de ejecucin de un programa. La JVM, adems es un programa muy pequeo y que se distribuye gratuitamente para prcticamente todos los sistemas operativos. A este mtodo de ejecucin de programas en tiempo real se le llama .ust in /ime (JT). roceso de compilacin de un pro!rama .ava 7.7 LAS VARIABLES PATH Y CLASSPATH Para poder compilar y ejecutar las aplicaciones Java es necesario tener acceso al directorio en el que se encuentran el compilador y el intrprete. Para poder compilar y ejecutar cmodamente deberamos aadir el directorio \bin del JDK a la variable de entorno PATH. Para los usuarios de DOS y Windows, desde el smbolo del sistema tendremos que escribir: set PATH=%PATH%;c:\java\bin En la explicacin anterior slo se cambia la variable de entorno PATH para la sesin en curso (la ventana actual). La variable de entorno PATH no es especfica de Java, si no que ms bien es un mecanismo de los sistemas operativos para localizar programas que no se encuentran en el directorio actual. Pero ahora vamos con otra variable de entorno que s lo es, estamos hablando de CLASSPATH. Formando Emprendedores De Calidad Para Un Mundo Empresarial "3 Instituto de Educacin Superior San Ignacio de Monterrico Java carga dinmicamente las clases segn la necesidad, pero dnde busca esas clases?. Este es el papel de la variable de entorno CLASSPATH, indicar a Java donde buscar las clases y libreras propias (el AP de Java) y las clases de usuario. A partir del JDK versin 1.1.4 slo es necesario usar esta variable para indicar las clases de usuario. Veamos un ejemplo. Supongamos que disponemos de una librera de clases que vamos a usar habitualmente y que est comprimida en un fichero llamado milibreria.zip. Tambin nos interesa usar un conjunto de clases sin comprimir que estn todas situadas en un mismo directorio llamado misclases. Para los usuarios de DOS y Windows, la librera est en c:\desarrollo\libreria y el conjunto de clases est en c:\desarrollo\clases. Desde el smbolo del sistema tendremos que escribir: set CLASSPATH=.;c:\desarrollo\libreria\milibreria.zip;c:\desarrollo\misclases Para que los cambios en las variables path y cIasspath sean permanentes hay que comprobar que la carpeta con los ejecutables del kit de desarrollo esten incluidos en la variable de entorno path. Esto lo podemos comprobar escribiendo path en la lnea de comandos. Si la carpeta del kit de desarrollo no est incluida, habr que hacerlo. Para ello en Windows 2000 o XP: 1. Pulsar el botn derecho sobre Mi PC y elegir Propiedades 2. r al apartado Opciones avanzadas 3. Hacer clic sobre el botn VariabIes de entorno 4. Aadir a la lista de la variable Path la ruta a la carpeta con los programas del JDK. Ejemplo de contenido de la variable path: PATH=C:\WNNT\SYSTEM32;C:\WNNT;C:\WNNT\SYSTEM32\WBEM;C:\Archivos de programa\Microsoft Visual Studio\Common\Tools\WinNT;C:\Archivos de programa\Microsoft Visual Studio\Common\MSDev98\Bin;C:\Archivos de programa\Microsoft Visual Studio\Common\Tools;C:\Archivos de programa\Microsoft Visual Studio\VC98\bin;C:\Archivos de programa\j2sdk_nb\j2sdk1.4.2\bin En negrita est sealada la ruta a la carpeta de ejecutables (carpeta bin) del kit de desarrollo. Est carpeta vara segn la instalacin, para acceder a la variable CLASSPATH: si estamos en un windows NT-2000-XP: 5. Pulsar el botn derecho sobre Mi PC y elegir Propiedades 6. r al apartado Opciones avanzadas 7. Hacer clic sobre el botn Variables de entorno 8. Aadir la variable CLASSPATH en la que escribiremos simplemente un punto: Formando Emprendedores De Calidad Para Un Mundo Empresarial " Instituto de Educacin Superior San Ignacio de Monterrico cIasspath=. Noten que en CLASSPATH agregu el directorio actual (.), para poder compilar y ejecutar desde cualquier directorio. 7.8 COMPILACIN Y EJECUCION DE CODIGO JAVA El compilador Java es una de las herramientas de desarrollo incluidas en el JDK. Realiza un anlisis de sintaxis del cdigo escrito en los ficheros fuente de Java (con extensin *.java). Si no encuentra errores en el cdigo genera los ficheros compilados (con extensin *.class). En otro caso muestra la lnea o lneas errneas. En el JDK de Sun dicho compilador se llama javac.exe. Tiene numerosas opciones, algunas de las cuales varan de una versin a otra. Se aconseja consultar la documentacin de la versin del JDK utilizada para obtener una informacin detallada de las distintas posibilidades. La compilacin del cdigo java se realiza mediante el programa javac incluido en el software de desarrollo de java. La forma de compilar es (desde la lnea de comandos): javac arc0ivo'java El resultado de esto es un archivo con el mismo nombre que el archivo java pero con la extensin cIass. Esto ya es el archivo con el cdigo en forma de bytecodes. Es decir con el cdigo precompilado. Si la clase es ejecutable (slo lo son si contienen el mtodo main), el cdigo se puede interpretar usando el programa java del kit de desarrollo. Sintaxis: java arc0ivo'class Estos comandos hay que escribirlos desde la lnea de comandos de en la carpeta en la que se encuentre el programa. Pero antes hay que asegurarse de que los programas del kit de desarrollo son accesibles desde cualquier carpeta del sistema. Para ello hay que comprobar que la carpeta con los ejecutables del kit de desarrollo est incluida en la variable de entorno path. Compilacin de un pro!rama .ava Formando Emprendedores De Calidad Para Un Mundo Empresarial "! JAVA Java Byte- code javac java .java .class Environment Java VM Instituto de Educacin Superior San Ignacio de Monterrico 7.9 TIPOS DE ARCHIVOS java: Es la extensin de los archivos fuente del lenguaje java, ejem. bienvenido.java, Miapplet.java. cIass: El resultado de compilar un archivo fuente java es un archivo en byte-code con extensin class, ejem. bienvenido.class, Miapplet.class. El comando usado para compilar los arhivos con extensin java es javac y para su ejecucin el comando java que vienen incluidos en el JDK (Java Development Kit) de Sun Microsystems. jar/zip: Las clases desarrolladas en java suelen por lo general guardarse en estos tipos de archivos comprimidos. 7.10 EJEMPLO DE PRUEBA EjempIo 1 //archivo con el nombre Bienvenido.java class Bienvenido { public static void main(String [] args) { System.out.println("Bienvenido a Java!"); } } Grbalo en TuCarpeta con el nombre Bienvenido.java luego compila y ejecuta el programa anterior, es decir: javac Bienvenido.java java Bienvenido Lnea 1: es un simple comentario de tipo lnea en el que hemos colocado el nombre del fichero. El compilador ignorar todo lo que va desde los caracteres // hasta el final de la lnea. Los comentarios son de mucha utilidad, tanto para otras personas que tengan que revisar el cdigo, como para nosotros mismos en futuras revisiones. Formando Emprendedores De Calidad Para Un Mundo Empresarial "" Instituto de Educacin Superior San Ignacio de Monterrico Lnea 2: declara el nombre de la clase. Usamos la palabra reservada class seguida del nombre que queremos darle a nuestra clase, en este caso es Bienvenido. Ya sabemos que Java es un lenguaje orientado a objetos, por tanto, nuestro programa ha de ser definido como una clase. Por convencin, las clases Java se definen con la primera letra en maysculas. EjempIo 2 class J001 { public static void main(String [] args) { System.out.println("Hola\nQue tal"); System.out.println("Uno\nDos\nTres\nCuatro"); } } EjempIo 3 class J002 { public static void main(String [] args) { System.out.println("Hola"); System.out.println("Adios"); System.out.println(""); System.out.print("Pues vale"); System.out.print("Eso"); System.out.print("Vale"); } } printIn("mensaje") Escribe el mensaje y luego se produce un cambio de lnea que equivale a pulsar [Return] print("mensaje") Escribe el mensaje y el cursor se sita al final del mensaje y en la misma lnea. Para recordarlo piensa en la siguiente frmula: printIn = print + In (lnea nueva) Formando Emprendedores De Calidad Para Un Mundo Empresarial "# Instituto de Educacin Superior San Ignacio de Monterrico CAPITULO 8 TEORIAS DE OBJETOS Formando Emprendedores De Calidad Para Un Mundo Empresarial "$ Instituto de Educacin Superior San Ignacio de Monterrico 8.1 ESTRUCTURA DE UNA CLASE De?inir +tri'utos De 4a Clase *8aria'les@ Propiedades 1 Datos De 4a Clases/ Cuando se definen los datos de una determinada clase, se debe indicar el tipo de propiedad que es (String, int, double, int[][],...) y el especificador de acceso (public, private,...). El especificador indica en qu partes del cdigo ese dato ser visible. Especi?icadores De +cceso Formando Emprendedores De Calidad Para Un Mundo Empresarial "% Instituto de Educacin Superior San Ignacio de Monterrico Se trata de una palabra que antecede a la declaracin de una clase, mtodo o propiedad de clase. Hay tres posibilidades: pubIic, protected y private. Una cuarta posibilidad es no utilizar ninguna de estas tres palabras; entonces se dice que se ha utilizado el modificador por defecto (?riendl=). Los especificadores determinan el alcance de la visibilidad del elemento al que se refieren. Referidos por ejemplo a un mtodo, pueden hacer que el mtodo sea visible slo para la clase que lo utiliza (private), para stas y las heredadas (protected), para todas las clases del mismo paquete (?riendl=) o para cualquier clase del tipo que sea (pubIic). En la siguiente tabla se puede observar la visibilidad de cada especificador: Ejemplo: cIass Persona { pubIic String nombre;//Se puede acceder desde cualquier clase private int contrasea;//Slo se puede acceder desde la //clase Persona protected String direccin; //Acceden a esta propiedad //esta clase y sus descendientes Por lo general las propiedades de una clase suelen ser privadas o protegidas, a no ser que se trate de un valor constante, en cuyo caso se declararn como pblicos. Formando Emprendedores De Calidad Para Un Mundo Empresarial #& Instituto de Educacin Superior San Ignacio de Monterrico Las variables locales de una clase pueden ser inicializadas. cIass auto{ pubIic nRuedas=4; 4a clase persona en UM40 El signo A signi?ica pu'lic@ el signo B protected = el signo > pri(ate 8.2 DEFINIR MTODOS DE CLASE (OPERACIONES O FUNCIONES DE CLASE) Un mtodo es una llamada a una operacin de un determinado objeto. Al realizar esta llamada (tambin se le llama enviar un mensaje), el control del programa pasa a ese mtodo y lo mantendr hasta que el mtodo finalice o se haga uso de return. Para que un mtodo pueda trabajar, normalmente hay que pasarle unos datos en forma de argumentos o parmetros, cada uno de los cuales se separa por comas. Ejemplos de llamadas: baln.botar(); //sin argumentos miCoche.acelerar(10); ficha.comer(posicin15);//posicin 15 - variable que se pasa como argumento partida.empezarPartida(18:15,colores); Formando Emprendedores De Calidad Para Un Mundo Empresarial #1 Instituto de Educacin Superior San Ignacio de Monterrico Los mtodos de la clase se definen dentro de sta. Hay que indicar un modificador de acceso (pubIic, private, protected o ninguno, al igual que ocurre con las variables y con la propia clase) y un tipo de datos, que indica qu tipo de valores devuelve el mtodo. Esto ltimo se debe a que los mtodos son funciones que pueden devolver un determinado valor (un entero, un texto, un valor lgico,...) mediante el comando return. Si el mtodo no devuelve ningn valor, entonces se utiliza el tipo void que significa que no devuelve valores (en ese caso el mtodo no tendr instruccin return). El ltimo detalle a tener en cuenta es que los mtodos casi siempre necesitan datos para realizar la operacin, estos datos van entre parntesis y se les llama argumentos. Al definir el mtodo hay que indicar que argumentos se necesitan y de qu tipo son. Ejemplo: pubIic cIass vehiculo { $11 2uncin principal 1$ int ruedas; private doubIe velocidad=0; String nombre; $11 3umenta la velocidad1$ pubIic void acelerar(doubIe cantidad) { velocidad += cantidad; } $11 Disminuye la velocidad1$ pubIic void frenar(doubIe cantidad) { velocidad -= cantidad; } $11 Devuelve la velocidad1$ pubIic doubIe obtenerVelocidad(){ Formando Emprendedores De Calidad Para Un Mundo Empresarial #2 Instituto de Educacin Superior San Ignacio de Monterrico return velocidad; } pubIic static void main(String args[]){ (eCiculo miCoche = new vehiculo(); miCoche.acelerar(12); miCoche.frenar(5); System.out.println(miCoche.obtenerVelocidad()); } $$ Da 4'5 En la clase anterior, los mtodos aceIerar y frenar son de tipo void por eso no tienen sentencia return. Sin embargo el mtodo obtenerVeIocidad es de tipo double por lo que su resultado es devuelto por la sentencia return y puede ser escrito en pantalla. 8ersin UM4 de la clase CocCe 8.3 ARGUMENTOS POR VALOR Y POR REFERENCIA En todos los lenguajes ste es un tema muy importante. Los argumentos son los datos que recibe un mtodo y que necesita para funcionar. Ejemplo: pubIic cIass Matemticas { Formando Emprendedores De Calidad Para Un Mundo Empresarial #3 Instituto de Educacin Superior San Ignacio de Monterrico pubIic doubIe factorial(int n){ doubIe resultado; for (resultado=n;n>1;n--) resultado*=n; return resultado; } ... pubIic static void main(String args[]){ MatemDticas m1=new Matemticas(); doubIe x=m1.factorial(25);//Llamada al mtodo } En el ejemplo anterior, el valor 25 es un argumento requerido por el mtodo factoriaI para que ste devuelva el resultado (que ser el factorial de 25). En el cdigo del mtodo factorial, este valor 25 es copiado a la variable n, que es la encargada de almacenar y utilizar este valor. Se dice que los argumentos son por valor, si la funcin recibe una copia de esos datos, es decir la variable que se pasa como argumento no estar afectada por el cdigo. Ejemplo: cIass prueba { pubIic void metodo1(int entero){ entero=18; ... } ... pubIic static void main(String args[]){ int x=24; Formando Emprendedores De Calidad Para Un Mundo Empresarial # Instituto de Educacin Superior San Ignacio de Monterrico prue'a miPrueba = new prueba(); miPrueba.metodo1(x); System.out.println(x); $$Escribe #6* no "7 } Este es un ejemplo de paso de parmetros por valor. La variable x se pasa como argumento o parmetro para el mtodo metodo", all la variable entero recibe una copia del vaIor de x en la variable entero, y a esa copia se le asigna el valor 18. Sin embargo la variable x no est afectada por esta asignacin. Sin embargo en este otro caso: cIass prueba { pubIic void metodo1(int[] entero){ entero[0]=18; ... } ... pubIic static void main(String args[]){ int x[]={24,24}; prue'a miPrueba = new prueba(); miPrueba.metodo1(x); System.out.println(x[0]); $$Escribe "7* no #6 Aqu s que la variable x est afectada por la asignacin entero[0]=18. La razn es porque en este caso el mtodo no recibe el valor de esta variable, sino la referencia, es decir la direccin fsica de esta variable. entero no es una replica de +, es la propia x llamada de otra forma. Formando Emprendedores De Calidad Para Un Mundo Empresarial #! Instituto de Educacin Superior San Ignacio de Monterrico Los tipos bsicos (int, doubIe, char, booIean, fIoat, short y byte) se pasan por valor. Tambin se pasan por valor las variables String. Los objetos y arrays se pasan por referencia. Formando Emprendedores De Calidad Para Un Mundo Empresarial #" Instituto de Educacin Superior San Ignacio de Monterrico 8.4 MTODOS Y CONSTRUCTORES Los mtodos son funciones que pueden ser llamadas dentro de la clase o por otras clases. El constructor es un tipo especfico de mtodo que siempre tiene el mismo nombre que la clase. Cuando se declara una clase en Java, se pueden declarar uno o ms constructores opcionales que realizan la inicializacin cuando se instancia (se crea una ocurrencia) un objeto de dicha clase. Utilizando el cdigo de ejemplo anterior, cuando se crea una nueva instancia de MiClase, se crean (instancian) todos los mtodos y variables, y se llama al constructor de la clase: MiClase mc; mc = new MiClase(); La palabra clave ne8 se usa para crear una instancia de la clase. Antes de ser instanciada con ne8 no consume memoria, simplemente es una declaracin de tipo. Despus de ser instanciado un nuevo objeto mc, el valor de i en el objeto mc ser igual a 10. Se puede referenciar la variable (de instancia) i con el nombre del objeto: mc.i++; // incrementa la instancia de i de mc Al tener mc todas las variables y mtodos de MiClase, se puede usar la primera sintaxis para llamar al mtodo 9uma:a:i;< utilizando el nuevo nombre de clase mc: mc.Suma_a_i( 10 ); y ahora la variable mc.i vale 21. Formando Emprendedores De Calidad Para Un Mundo Empresarial ## Instituto de Educacin Superior San Ignacio de Monterrico CAPITULO 9 ESTRUCTURAS DE CONTROL DE FLUJO Formando Emprendedores De Calidad Para Un Mundo Empresarial #$ Instituto de Educacin Superior San Ignacio de Monterrico %01 IF Permite crear estructuras condicionales simples; en las que al cumplirse una condicin se ejecuta una serie de instrucciones. Se puede hacer que otro conjunto de instrucciones se ejecute si la condicin es falsa. La condicin es cualquier expresin que devuelva un resultado de true o faIse. La sintaxis de la instruccin if es: if (condicin) { instrucciones =ue se ejecutan si la condicin es true } eIse { instrucciones =ue se ejecutan si la condicin es false } La parte eIse es opcional. Ejemplo: if ((diasemana>=1) && (diasemana<=5)){ trabajar = true; } eIse { trabajar = faIse; } Se pueden anidar varios if a la vez. De modo que se comprueban varios valores. Ejemplo: if (diasemana==1) dia=Lunes; eIse if (diasemana==2) dia=Martes; Formando Emprendedores De Calidad Para Un Mundo Empresarial #% Instituto de Educacin Superior San Ignacio de Monterrico eIse if (diasemana==3) dia=Mircoles; eIse if (diasemana==4) dia=Jueves; eIse if (diasemana==5) dia=Viernes; eIse if (diasemana==6) dia=Sbado; eIse if (diasemana==7) dia=Domingo; eIse dia=?; 9.2 SWITCH Es la estructura condicional compleja porque permite evaluar varios valores a la vez. Sintaxis: switch (e+presin) { case valor": sentencias si la e+presiona es i!ual al valor"> [break] case valor#: sentencias si la e+presiona es i!ual al valor#> [break] ' ' defauIt: sentencias =ue se ejecutan si no se cumple nin!una de las anteriores } Esta instruccin evala una expresin (que debe ser short, int, byte o char), y segn el valor de la misma ejecuta instrucciones. Cada case contiene un valor de la expresin; si efectivamente la expresin equivale a ese valor, se ejecutan las instrucciones de ese case y de los siguientes. Formando Emprendedores De Calidad Para Un Mundo Empresarial $& Instituto de Educacin Superior San Ignacio de Monterrico La instruccin break se utiliza para salir del switch. De tal modo que si queremos que para un determinado valor se ejecuten las instrucciones de un apartado case y slo las de ese apartado, entonces habr que finalizar ese case con un break. El bloque defauIt sirve para ejecutar instrucciones para los casos en los que la expresin no se ajuste a ningn case. EjempIo 1: switch (diasemana) { case 1: dia=Lunes; break; case 2: dia=Martes; break; case 3: dia=Mircoles; break; case 4: dia=Jueves; break; case 5: dia=Viernes; break; case 6: dia=Sbado; break; Formando Emprendedores De Calidad Para Un Mundo Empresarial $1 Instituto de Educacin Superior San Ignacio de Monterrico case 7: dia=Domingo; break; defauIt: dia=?; } EjempIo 2: switch (diasemana) { case 1: case 2: case 3: case 4: case 5: laborable=true; break; case 6: case 7: laborable=faIse; } 9.3 WHILE Formando Emprendedores De Calidad Para Un Mundo Empresarial $2 Instituto de Educacin Superior San Ignacio de Monterrico La instruccin whiIe permite crear bucles. Un bucle es un conjunto de sentencias que se repiten si se cumple una determinada condicin. Los bucles whiIe agrupan instrucciones las cuales se ejecutan continuamente hasta que una condicin que se evala sea falsa. La condicin se mira antes de entrar dentro del while y cada vez que se termina de ejecutar las instrucciones del while Sintaxis: whiIe (condicin) { sentencias =ue se ejecutan si la condicin es true } Ejemplo (clculo del factorial de un nmero, el factorial de 4 sera: 4*3*2*1): //factorial de 4 int n=4, factorial=1, temporal=n; whiIe (temporal>0) { factorial*=temporal--; } 9.4 DO WHILE Crea un bucle muy similar al anterior, en la que tambin las instrucciones del bucle se ejecutan hasta que una condicin pasa a ser falsa. La diferencia estriba en que en este tipo de bucle la condicin se evala despus de ejecutar las instrucciones; lo cual significa que al menos el bucle se ejecuta una vez. Sintaxis: do { instrucciones } whiIe (condicin) 9.5 FOR Formando Emprendedores De Calidad Para Un Mundo Empresarial $3 Instituto de Educacin Superior San Ignacio de Monterrico Es un bucle ms complejo especialmente pensado para rellenar arrays o para ejecutar instrucciones controladas por un contador. Una vez ms se ejecutan una serie de instrucciones en el caso de que se cumpla una determinada condicin. Sintaxis: for (e+presin?nicial; condicin; e+presinEncadavuelta) { instrucciones> } La expresin iniciaI es una instruccin que se ejecuta una sola vez: al entrar por primera vez en el bucle for (normalmente esa expresin lo que hace es dar valor inicial al contador del bucle). La condicin es cualquier expresin que devuelve un valor lgico. En el caso de que esa expresin sea verdadera se ejecutan las instrucciones. Cuando la condicin pasa a ser falsa, el bucle deja de ejecutarse. La condicin se valora cada vez que se terminan de ejecutar las instrucciones del bucle. Despus de ejecutarse las instrucciones interiores del bucle, se realiza la expresin que tiene lugar tras ejecutarse las instrucciones del bucle (que, generalmente, incrementa o decrementa al contador). Luego se vuelve a evaluar la condicin y as sucesivamente hasta que la condicin sea falsa. Ejemplo (factorial): //factorial de 4 int n=4, factorial=1, temporal=n; for (temporal=n;temporal>0;temporal--){ factorial *=temporal; } Sentencias De Salida De Un 5ucle Formando Emprendedores De Calidad Para Un Mundo Empresarial $ Instituto de Educacin Superior San Ignacio de Monterrico 9.6 BREAK Es una sentencia que permite salir del bucle en el que se encuentra inmediatamente. Hay que intentar evitar su uso ya que produce malos hbitos al programar. 9.7 CONTINUE nstruccin que siempre va colocada dentro de un bucle y que hace que el flujo del programa ignore el resto de instrucciones del bucle; dicho de otra forma, va hasta la siguiente iteracin del bucle. Al igual que ocurra con break, hay que intentar evitar su uso. Formando Emprendedores De Calidad Para Un Mundo Empresarial $! Instituto de Educacin Superior San Ignacio de Monterrico CAPITULO 10 CLASE MATH Y STRING Formando Emprendedores De Calidad Para Un Mundo Empresarial $" Instituto de Educacin Superior San Ignacio de Monterrico 10.1 CLASE STRING Para Java las cadenas de texto son objetos especiales. Los textos deben manejarse creando objetos de tipo String. Ejemplo: String texto1 = Prueba de texto!; Las cadenas pueden ocupar varias lneas utilizando el operador de concatenacin +. String texto2 =Este es un texto que ocupa + "varias lneas, no obstante se puede +perfectamente encadenar; Tambin se pueden crear objetos String sin utilizar constantes entrecomilladas, usando otros constructores: char[] palabra = {'P','a','l','b','r','a'};//Array de char String cadena = new String(palabra); byte[] datos = {97,98,99}; String codificada = new String (datos, 8859_1); En el ltimo ejemplo la cadena codificada se crea desde un array de tipo byte que contiene nmeros que sern interpretados como cdigos Unicode. Al asignar, el valor 8859_1 indica la tabla de cdigos a utilizar. Comparacin Entre 1'Eetos String Formando Emprendedores De Calidad Para Un Mundo Empresarial $# Instituto de Educacin Superior San Ignacio de Monterrico Los objetos String no pueden compararse directamente con los operadores de comparacin. En su lugar se deben utilizar estas expresiones: cadena"'equaIs(cadena#). El resultado es true si la cadena1 es igual a la cadena2. Ambas cadenas son variables de tipo String. cadena"'equaIsIgnoreCase(cadena#). Como la anterior, pero en este caso no se tienen en cuentas maysculas y minsculas. s"'compareTo(s#). Compara ambas cadenas, considerando el orden alfabtico. Si la primera cadena es mayor en orden alfabtico que la segunda devuelve 1, si son iguales devuelve 0 y si es la segunda la mayor devuelve -1. Hay que tener en cuenta que el orden no es el del alfabeto espaol, sino que usa la tabla ASC, en esa tabla la letra @ es mucho mayor que la o. s"'compareToIgnoreCase(s#). gual que la anterior, slo que adems ignora las maysculas (disponible desde Java 1.2) 10.2 STRING.VALUEOF Este mtodo pertenece no slo a la clase String, sino a otras y siempre es un mtodo que convierte valores de una clase a otra. En el caso de los objetos String, permite convertir valores que no son de cadena a forma de cadena. Ejemplos: String numero = String.valueOf(1234); String fecha = String.valueOf(new Date()); En el ejemplo se observa que este mtodo pertenece a la clase String directamente, no hay que utilizar el nombre del objeto creado (como se ver ms adelante, es un mtodo esttico). 10.3 LA CLASE MATH Se echan de menos operadores matemticos ms potentes en Java. Por ello se ha incluido una clase especial llamada Math dentro del paquete java.Iang Para poder utilizar esta clase, se debe incluir esta instruccin: Formando Emprendedores De Calidad Para Un Mundo Empresarial $$ Instituto de Educacin Superior San Ignacio de Monterrico import java.Iang.Math; Esta clase posee mtodos muy interesantes para realizar clculos matemticos complejos. Por ejemplo: doubIe x= Math.pow(3,3); //x es 33 Math posee dos constantes, que son: Por otro lado posee numerosos mtodos que son: Formando Emprendedores De Calidad Para Un Mundo Empresarial $% Instituto de Educacin Superior San Ignacio de Monterrico Formando Emprendedores De Calidad Para Un Mundo Empresarial %& Instituto de Educacin Superior San Ignacio de Monterrico CAPITULO 11 ARREGLOS Formando Emprendedores De Calidad Para Un Mundo Empresarial %1 Instituto de Educacin Superior San Ignacio de Monterrico 11.1 ARRAYS UNIDIMENSIONALES Un array es una coleccin de valores de un mismo tipo engrosados en la misma variable. De forma que se puede acceder a cada valor independientemente. Para Java adems un array es un objeto que tiene propiedades que se pueden manipular. Los arrays solucionan problemas concernientes al manejo de muchas variables que se refieren a datos similares. Por ejemplo si tuviramos la necesidad de almacenar las notas de una clase con 18 alumnos, necesitaramos 18 variables, con la tremenda lentitud de manejo que supone eso. Solamente calcular la nota media requerira una tremenda lnea de cdigo. Almacenar las notas supondra al menos 18 lneas de cdigo. Gracias a los arrays se puede crear un conjunto de variables con el mismo nombre. La diferencia ser que un nmero (ndice del array) distinguir a cada variable. En el caso de las notas, se puede crear un array llamado notas, que representa a todas las notas de la clase. Para poner la nota del primer alumno se usara notas[0], el segundo sera notas[1], etc. (los corchetes permiten especificar el ndice en concreto del array). La declaracin de un array unidimensional se hace con esta sintaxis: tipo nombre[]; Ejemplo: doubIe cuentas[]; $$Declara un array =ue almacenar% valores doubles Formando Emprendedores De Calidad Para Un Mundo Empresarial %2 Instituto de Educacin Superior San Ignacio de Monterrico Declara un array de tipo double. Esta declaracin indica para qu servir el array, pero no reserva espacio en la RAM al no saberse todava el tamao del mismo. Tras la declaracin del array, se tiene que iniciar. Eso lo realiza el operador new, que es el que realmente crea el array indicando un tamao. Cuando se usa new es cuando se reserva el espacio necesario en memoria. Un array no inicializado es un array nuII. Ejemplo: int notas[]; //serAa v%lido tambiBn intFG notas: notas = new int[3]; //indica =ue el array constar% de tres //valores de tipo int ///ambiBn se puede 0acer todo a la ve) //int notasFGHneI intF&G: En el ejemplo anterior se crea un array de tres enteros (con los tipos bsicos se crea en memoria el array y se inicializan los valores, los nmeros se inician a 0). Los valores del array se asignan utilizando el ndice del mismo entre corchetes: notas[2]=8; Tambin se pueden asignar valores al array en la propia declaracin: int notas[] = {8, 7, 9}; int notas2[]= new int[] {8,7,9};//E=uivalente a la anterior Esto declara e inicializa un array de tres elementos. En el ejemplo lo que significa es que notas[0] vale 8, notas[1] vale 7 y notas[2] vale 9. En Java (como en otros lenguajes) el primer elemento de un array es el cero. El primer elemento del array notas, es notas[0]. Se pueden declarar arrays a cualquier tipo de datos (enteros, booleanos, doubles, ... e incluso objetos). Formando Emprendedores De Calidad Para Un Mundo Empresarial %3 Instituto de Educacin Superior San Ignacio de Monterrico La ventaja de usar arrays (volviendo al caso de las notas) es que gracias a un simple bucle for se puede rellenar o leer fcilmente todos los elementos de un array: //Calcular la media de las 18 notas suma=0; for (int i=0;i<=17;i++){ suma+=nota[i]; } media=suma/18; A un array se le puede inicializar las veces que haga falta: int notas[]=new notas[16]; ... notas=new notas[25]; Pero hay que tener en cuenta que el segundo new hace que se pierda el contenido anterior. Realmente un array es una referencia a valores que se almacenan en memoria mediante el operador new, si el operador new se utiliza en la misma referencia, el anterior contenido se queda sin referencia y, por lo tanto se pierde. Un array se puede asignar a otro array (si son del mismo tipo): int notas[]; int ejemplo[]=new int[18]; notas=ejemplo; En el ltimo punto, notas equivale a ejemplo. Esta asignacin provoca que cualquier cambio en notas tambin cambie el array ejemplos. Es decir esta asignacin anterior, no copia los valores del array, sino que notas y ejemplo son referencias al mismo array. Formando Emprendedores De Calidad Para Un Mundo Empresarial % Instituto de Educacin Superior San Ignacio de Monterrico Ejemplo: int notas[]={3,3,3}; int ejemplo[]=notas; ejemplo= notas; ejemplo[0]=8; System.out.println(notas[0]);//Escribir% el nCmero 7 11.2 ARRAYS MULTIDIMENSIONALES Los arrays adems pueden tener varias dimensiones. Entonces se habla de arrays de arrays (arrays que contienen arrays) Ejemplo: int notas[][]; notas es un array que contiene arrays de enteros notas = new int[3][12];//notas est compuesto por 3 arrays //de 12 enteros cada uno notas[0][0]=9;//el primer valor es 0 Puede haber ms dimensiones incluso (notas[3][2][7]). Los arrays multidimensionales se pueden inicializar de forma ms creativa incluso. Ejemplo: int notas[][]=new int[5][];//Hay 5 arrays de enteros notas[0]=new int[100]; //El primer array es de 100 enteros notas[1]=new int[230]; //El segundo de 230 notas[2]=new int[400]; notas[3]=new int[100]; Formando Emprendedores De Calidad Para Un Mundo Empresarial %! Instituto de Educacin Superior San Ignacio de Monterrico notas[4]=new int[200]; Hay que tener en cuenta que en el ejemplo anterior, notas[0] es un array de 100 enteros. Mientras que notas, es un array de 5 arrays de enteros. Se pueden utilizar ms de dos dimensiones si es necesario. 11.3 LONGITUD DE UN ARRAY Los arrays poseen un mtodo que permite determinar cunto mide un array. Se trata de Iength. Ejemplo (continuando del anterior): System.out.printIn(notas.Iength); //Sale 5 System.out.printIn(notas[2].Iength); //Sale 400 11.4 LA CLASE ARRAYS En el paquete java.utiIs se encuentra una clase esttica llamada Arrays. Una clase esttica permite ser utilizada como si fuera un objeto (como ocurre con Math). Esta clase posee mtodos muy interesantes para utilizar sobre arrays. Su uso es Arrays.mBtodo;ar!umentos<> 11.4.1 FiII Permite rellenar todo un array unidimensional con un determinado valor. Sus argumentos son el array a rellenar y el valor deseado: int valores[]=new int[23]; Arrays.fill(valores,-1);//Todo el array vale -1 Tambin permite decidir desde que ndice hasta qu ndice rellenamos: Formando Emprendedores De Calidad Para Un Mundo Empresarial %" Instituto de Educacin Superior San Ignacio de Monterrico Arrays.fill(valores,5,8,-1);//Del elemento 5 al 7 valdrn -1 11002 EquaIs Compara dos arrays y devuelve true si son iguales. Se consideran iguales si son del mismo tipo, tamao y contienen los mismos valores. 11.4.3 Sort Permite ordenar un array en orden ascendente. Se pueden ordenar slo una serie de elementos desde un determinado punto hasta un determinado punto. int x[]={4,5,2,3,7,8,2,3,9,5}; Arrays.sort(x);//Estar ordenado Arrays.sort(x,2,5);//Ordena del 2 al 4 elemento 11.4.4 BinarySearch Permite buscar un elemento de forma ultrarrpida en un array ordenado (en un array desordenado sus resultados son impredecibles). Devuelve el ndice en el que est colocado el elemento. Ejemplo: int x[]={1,2,3,4,5,6,7,8,9,10,11,12}; Arrays.sort(x); System.out.println(Arrays.binarySearch(x,8));//Da 7 11.4.5 System.arraysCopy Formando Emprendedores De Calidad Para Un Mundo Empresarial %# Instituto de Educacin Superior San Ignacio de Monterrico La clase System tambin posee un mtodo relacionado con los arrays, dicho mtodo permite copiar un array en otro. Recibe cinco argumentos: el array que se copia, el ndice desde que se empieza a copia en el origen, el array destino de la copia, el ndice desde el que se copia en el destino, y el tamao de la copia (nmero de elementos de la copia). int uno[]={1,1,2}; int dos[]={3,3,3,3,3,3,3,3,3}; System.arraycopy(uno, 0, dos, 0, uno.length); for (int i=0;i<=8;i++){ System.out.print(dos[i]+" "); } //Sale 112333333 Formando Emprendedores De Calidad Para Un Mundo Empresarial %$ Instituto de Educacin Superior San Ignacio de Monterrico BIBLIOGRAFIA 1001 Tips Para Programar Con Java de Vsquez Paragulla. Java 2 de Ceballos F. J. Programacin en Java con Jbuilder: Erika Alarcn Herrera- Christian Crovetto Huerta El descubrimiento de Java Mark Samns Formando Emprendedores De Calidad Para Un Mundo Empresarial %%