Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Programa de la asignatura: Programacin Orientada a Objetos I Unidad 1. Introduccin a JAVA Clave: 160920414 / 150920414
Tabla de contenidos
II. DESARROLLO DE CONTENIDOS POR UNIDAD ........................................................ 4 a. Unidad 1. Introduccin a JAVA ................................................................................... 4 Presentacin de la unidad .......................................................................................... 4 Propsitos de la unidad .............................................................................................. 4 Competencia especfica.............................................................................................. 4 Actividad 1. Presentacin ........................................................................................... 4 1.1. Caractersticas de la Programacin Orientada a Objetos ..................................... 5 1.1.1. Abstraccin ....................................................................................................... 5 1.1.2. Polimorfismo ..................................................................................................... 6 1.1.3. Encapsulacin .................................................................................................. 6 1.1.4. Herencia ........................................................................................................... 6 1.1.5. Programacin orientada a objetos vs estructurada ........................................... 7 Actividad 2. Diferencias entre Programacin estructurada y POO .............................. 8 Actividad 3. Caractersticas de JAVA .......................................................................... 9 1.2. Caractersticas del lenguaje JAVA ....................................................................... 9 1.2.1. Generalidades de JAVA .................................................................................. 10 1.2.2. Mquina virtual de JAVA ................................................................................. 14 1.2.3. Entorno de desarrollo y configuracin ............................................................. 16 1.2.4. Tipos de datos soportados en JAVA ............................................................... 19 Actividad 4. Tipos de datos ....................................................................................... 20 1.2.5. Operadores aritmticos, lgicos y relacionales ............................................... 21 Actividad 5. Operadores ........................................................................................... 25 1.2.6. Conversin de tipos de datos .......................................................................... 25 1.3. Organizacin de un programa ............................................................................ 27 1.3.1. Estructura General .......................................................................................... 27 1.3.2. Convenciones de la programacin .................................................................. 30 1.3.3. Palabras reservadas ....................................................................................... 31 1.3.4. Estructura de una clase .................................................................................. 32 1.3.5. Declaracin de objetos y constructores ........................................................... 33
Autoevaluacin ......................................................................................................... 34 Evidencia de aprendizaje. Programa en JAVA .......................................................... 35 Autorreflexiones ........................................................................................................ 35 Cierre de la unidad ................................................................................................... 35 Para saber ms ........................................................................................................ 36 Fuentes de consulta ................................................................................................. 36
II. Desarrollo de contenidos por unidad a. Unidad 1. Introduccin a JAVA Presentacin de la unidad
En esta 1 unidad de la materia Programacin Orientada a Objetos I (POO I), se aprender el concepto de la programacin orientada a objetos y la descripcin de los elementos que la integran as como del lenguaje a implementar, el cual ser JAVA, sus caractersticas y la estructura de un programa.
Propsitos de la unidad
En esta unidad el estudiante lograr: Distinguir entre programacin orientada a objetos y programacin estructurada. Reconocer las caractersticas de la programacin orientada a objetos. Determinar las caractersticas y especificaciones de la programacin en JAVA. Identificar la organizacin de un programa en JAVA. Desarrollar programas modulares.
Competencia especfica
Desarrollar un programa bsico para la solucin de problemas matemticos simples tomando en cuenta el entorno, caractersticas y especificaciones de los programas JAVA a travs de dicho lenguaje.
Actividad 1. Presentacin
Antes de comenzar el estudio de la asignatura, te invitamos a participar en un foro de discusin general, creado para que comentes cualquier asunto relacionado con la asignatura; en l, conocers a tus compaeros de grupo y entre todos podrn apoyarse para resolver dudas, inquietudes, externar comentarios, etctera. Para comenzar tu participacin, ingresa a la Actividad 1.Presentacin en el aula.
1.1.1. Abstraccin
De acuerdo a Joyanes, la abstraccin es:
La propiedad de los objetos que consiste en tener en cuenta slo los aspectos ms importantes desde un punto de vista determinado y no tener en cuenta los restantes aspectos que no son significativos. Durante el proceso de abstraccin es cuando se decide qu caractersticas y comportamiento debe tener el modelo. Un medio de reducir la complejidad es la abstraccin. Las caractersticas y los procesos se reducen a las propiedades esenciales, dejando de lado los dems detalles no sustanciales. De este modo, las caractersticas complejas se hacen ms manejables (Joyanes, 2001: 5).
La abstraccin como tal nos sirva para poder pasar del plano material al plano mental. Ahora bien, cmo se relaciona la abstraccin con la POO? Imaginemos que tenemos un grupo de tornillos y de dicho grupo un tornillo se podra manejar con un desarmador especfico, pero tambin con cualquier otro desarmador aunque no sea nuestro, lo mismo pasa en un sistema software, los mdulos son independientes, pero a la vez funcionan como un gran modulo del software, es decir podemos partir un gran software para poder hacerlo en mdulos, esto har ms fcil la identificacin de sus caractersticas bsicas.
1.1.2. Polimorfismo
La propiedad de polimorfismo es aquella en que una operacin tiene el mismo nombre en diferentes clases, pero se ejecuta de diferentes formas en cada clase. (Joyanes, 2001: 6). Dicho de otro modo es la capacidad que tiene una clase para adaptarse a diferentes usos sin necesidad de modificarla. As, por ejemplo, la operacin copiar puede darse en diferentes clases: copiar un libro, copiar un archivo, copiar una actitud, copiar un comportamiento, copiar en un examen, etc. Siempre se ejecuta una operacin distinta pero con el mismo nombre copiar. Por tanto: El polimorfismo es la propiedad de una operacin de ser interpretada exclusivamente por el objeto al que corresponde.
1.1.3. Encapsulacin
Si bien externamente los objetos pueden parecer iguales, internamente pueden ser muy distintos. Por ejemplo, si sabes manejar un reproductor de DVD, puedes manejar cualquier otro reproductor como CD y BLUE RAY, esto es encapsular, los dos reproductores pueden ser parecidos por fuera, pero por dentro funcionan de diferente forma. Esta propiedad permite intercambiar objetos en una operacin; retomando el ejemplo de los reproductores puedes cambiar la carcasa por una ms moderna o llamativa sin que el funcionamiento interno se vea afectado.
1.1.4. Herencia
La herencia en el paradigma de la POO es un mecanismo que se utiliza para efectuar la reutilizacin del software, de modo tal que los programadores pueden crear clases nuevas a partir de clases ya existentes, tomndolas como base y creando una jerarqua de clases, de esta manera no se tiene que rehacer todo el cdigo de una clase. Si se ve de manera ms sencilla, la herencia en programacin funciona de manera similar a la herencia familiar, por ejemplo, si un pap tiene un hijo que se parece mucho fsicamente a l, entonces ambos comparten ciertas caractersticas, podemos decir entonces que el pap le hered sus caractersticas fsicas al hijo. Las caractersticas de un objeto pueden ser heredadas del objeto que est en el nivel superior, por ejemplo novillo tiene orejas y cola y su pelo es negro como el de un toro normal pero su cornamenta es ms delgada y ms fina, el toro y el novillo son parecidos pero no son iguales. 6
En programacin la herencia se aplica sobre las clases, y tenemos clases padre, de las cuales de despliegan las clases hijo, que heredar las caractersticas del padre y pueden tener otras caractersticas ms. Hasta este punto hemos visto solo los conceptos generales que dan cabida a la POO, ms adelante en el curso veremos cmo estos conceptos se implementan ya en la programacin.
La POO se basa en lenguajes que soportan descripcin y escritura de tipos de dato complejos (no slo primitivos) y las operaciones que se pueden efectuar sobre ellos: la clase. La POO incorpora niveles profundos de abstraccin que permiten utilizar (entender y aplicar) conceptos como el polimorfismo, la herencia, la sobrecarga, entre otros. Los creadores de la programacin estructurada encontraron solucin al problema presentado por sta (no dar el ancho ante la complejidad de los problemas a resolver) y fue el seguimiento de rigurosos mtodos de trabajo al utilizar la programacin estructurada, pero pocos fueron quienes aceptaron trabajar bajo tal presin. Sin embargo los problemas no son inherentes a la programacin estructurada, slo es mala aplicacin de sus conceptos a la resolucin de problemas, se listan a continuacin una serie de malas prcticas sobre la programacin estructurada: No se sigue completamente la forma en que trabaja el cerebro del ser humano, ya que ste capta la realidad en base a objetos y sus propiedades (atributos) y las cosas que puede hacer o que se hacen sobre l (mtodo). Dificultad para extender los programas existentes a las nuevas necesidades No se centra el modelo en el mantenimiento, se centra en la generacin de soluciones repetitivas para los mismos problemas. Las entidades funcionales no se sincronizan o lo hacen de manera difcil y tortuosa. Muchos lenguajes de programacin que se dicen orientados a objetos aun aceptan gran parte del paradigma de la programacin estructurada, dando pie a hacer una programacin mezclada y llevando lo peor de ambos mundos, se recomienda evitar esto.
entre, la programacin estructurada y de la programacin Orientada a Objetos y publcalas como conclusin del foro.
la totalidad) en los datos de la aplicacin y los mtodos que manipulan estos datos, en lugar de pensar estrictamente en trminos de los procedimientos. Si se est acostumbrado a utilizar la programacin basada en procedimientos (por ejemplo con el lenguaje C o BASIC), es posible que sea necesario cambiar la forma de disear los programas o aplicaciones cuando se utiliza Java. Una vez que se experimente lo poderoso que resulta este paradigma (orientado a objetos), pronto se ajustar a l. Cuando se trabaja con el paradigma orientado a objetos, una clase es una coleccin de datos y tiene adems mtodos que operan sobre esos datos. En conjunto, los datos y mtodos describen el estado y el comportamiento de un objeto. Java cuenta con un amplio conjunto de clases organizadas en paquetes, que se pueden utilizar al programar. Proporciona paquetes de clases para la interfaz grfica de usuario (java.awt), clases que se encargan de la entrada y salida (java.io), funcionalidad de soporte de red (java.net), entre muchos otros paquetes. Desde la concepcin inicial del diseo de Java se pens en hacer de este un lenguaje totalmente orientado a objetos desde la base, a diferencia de otros lenguajes que fueron adoptando los lineamientos de este paradigma en sus caractersticas, como por ejemplo C++. La mayora de los elementos disponibles en Java con objetos, con excepcin de los tipos primitivos y los tipos booleanos. Las cadenas o arrays son en realidad objetos en java. Una clase es la unidad bsica de compilacin y ejecucin en Java, todos los programas de Java con clases. Interpretado. Java es un lenguaje interpretado y necesita un intrprete para ejecutar programas. El compilador de Java genera bytecode para la Mquina Virtual de Java (JVM), en lugar de compilar al cdigo nativo de la mquina donde se ejecutar. El bytecode es independiente de la plataforma y se puede hacer uso de l en cualquier mquina (no necesariamente una computadora) que tenga un intrprete de Java. En un entorno donde el lenguaje de programacin es interpretado, la fase estndar de enlace casi se vera desvanecida. Si java cuenta con esta fase como un todo, es slo porque el proceso de cargar clases nuevas en el ambiente de ejecucin se hace precisamente en esta fase, que es un proceso incremental y mucho ms ligero que se produce en tiempo de ejecucin. Contrastando con el ciclo ms lento y complicado de compilar-enlazar-ejecutar de lenguajes como C o C++. Los programas Java no necesitan ser recompilados en una mquina destino. Se compilan en un lenguaje ensamblador para una mquina imaginaria, denominada mquina virtual (Joyanes y Fernndez, 2001). Arquitectura Neutral y Portable. Debido a que el lenguaje Java se compila en un formato de arquitectura propia o mejor dicho neutra llamada bytecode, un programa en Java puede ejecutarse en cualquier sistema, siempre y cuando ste tenga una implementacin de la JVM y esta es la caracterstica tal vez ms notable que tenga Java. 11
Se pueden, por ejemplo, ejecutar applets desde cualquier navegador de cualquier sistema operativo que cuente con una JVM y ms all todava, hacer sistemas autnomos que se ejecuten directamente sobre el sistema operativo. Esto es particularmente importante cuando se trabajar con aplicaciones distribuidas por internet o cualquier otro medio de distribucin donde los usuarios no pueden (deben) tener un cierto sistema operativo funcionando en la computadora donde se ejecutar dicha aplicacin. En las aplicaciones que se desarrollan hoy en da, muy probablemente se necesite tener la misma versin ejecutndose en un ambiente de trabajo con UNIX, Windows o Mac. Y ms an, con las diferentes versiones de procesadores y dispositivos (celulares, celulares inteligentes, consolas de video juegos, entre muchos otros) soportados por estos sistemas, las posibilidades se pueden volver interminables y la dificultad para mantener una versin de la aplicacin para cada uno de ellos crece de igual manera, interminable. La misma definicin de bytecode hace que Java sea multiplataforma y no tenga la necesidad de complicados temas al portar la aplicacin entre dispositivos como tipos de datos y su longitud, caractersticas y capacidades aritmticas; caso contrario, por ejemplo, del lenguaje C donde un tipo int puede ser de 16, 32 64 bits dependiendo de la plataforma de compilacin y ejecucin. Los programadores necesitan hacer un solo esfuerzo por terminar sus asignaciones, esto se puede lograr apegndose al slogan que hizo tan famoso Sun: Write Once, Run Anywhere (Escribe una vez, ejecuta donde sea). Dinmico y Distribuido. Java es un lenguaje dinmico. Cualquier clase construida en Java puede cargarse en cualquier momento dentro del ejecutor en cualquier momento. As, si es cargada dinmicamente puede instanciarse de igual manera. Las clases en Java con representadas por la palabra reservada class se puede obtener informacin en cualquier momento sobre ellas mediante el run-time. En cualquier instante de la ejecucin Java puede ampliar sus capacidades mediante el enlace de clases que est ubicadas en la mquina residente, en servidores remotos o cualquier sitio de la red (intranet/internet). Caso contrario de lenguajes como C++ que hacen esto al momento de la compilacin, despus ya no se puede. Se puede extender libremente mtodos y atributos de una clase sin afectar la ejecucin corriente, las capacidades descritas se encuentran dentro del API Reflections. Robusto. Java fue diseado para ser un lenguaje de programacin que genere aplicaciones robustas. Java no elimina la necesidad del aseguramiento de calidad en el software; de hecho es muy posible y probable tener errores al programar en Java. No elimina tampoco la mayora de los errores que se comenten al utilizar cualquier lenguaje de programacin. Sin embargo al ser fuertemente tipado se asegura que cada variable o mtodo que se utilice corresponda en realidad a lo que el programador quiso utilizar y no que se escapen 12
errores en conversin de tipos de dato, por ejemplo. Java requiere declaracin explicita de mtodos, cosa que no se permite en otros lenguajes, como en C. Java ha sido pensado en la fiabilidad, eliminando la mayora (o todas) las posibles partes de otros lenguajes de programacin propensas a errores, por ejemplo elimina los punteros y soporta el manejo de excepciones en tiempo de ejecucin para proporcionar robustez a la programacin. Java utiliza recoleccin de basura en tiempo de ejecucin en vez de liberacin explcita de memoria. En lenguajes como C++ es necesario borrar o liberar memoria una vez que el programa ha terminado (Joyanes y Fernndez, 2001). Seguro. Uno de los aspectos ms sobresalientes de Java es el de ser un lenguaje seguro, lo que es especialmente interesante debido a la naturaleza de la distribucin de aplicaciones en Java. Sin un aseguramiento el usuario no estar tranquilo de bajar y ejecutar cdigo en su computadora desde internet o cualquier otra fuente. Java fue diseado con la seguridad como punto principal y tiene disponibles muchas capas que gestionan la seguridad de la aplicacin que se escribe, bloqueando al programador si intenta distribuir cdigo malicioso escrito en lenguaje Java. Los programadores de Java no tienen permitido cierto tipo de acciones que se consideran altamente vulnerables o que el tpico caso de ataque contra un usuario comn, por ejemplo el acceso a memoria, desbordamiento de arreglos entre muchos otros. Otra capa de seguridad dentro de Java es el modelo sandbox que hace una ejecucin controlada de cualquier bytecode que llega a la JVM, por ejemplo si se lograr evadir la regla del cdigo no malicioso al momento de compilar, este modelo en su ejecucin controlada evitara que las repercusiones lleguen al mundo real. Por otro lado, otra posible solucin al aspecto de seguridad en Java es que se aade una firma digital al cdigo de Java, el origen del software puede establecerse con esta firma y utilizando criptografa se oculta esta firma para que sea inaccesible e inmodificable por cualquier persona. Si hay confianza en una persona especfica de alguna organizacin, entonces el cdigo puede ser firmado digitalmente por dicha persona, dndonos la seguridad que el resultado que recibimos sea de quien debe ser y no haya introduccin de cdigo por terceras personas ajenas a l. Por supuesto la seguridad no puede entenderse ni manejar como una cosa que es totalmente blanca o totalmente negra, deben descubrirse los matices que pueda presentar y verificar todas las posibles vertientes que puedan tomar los matices, as nos aseguraremos que todo est controlado. Ningn programa puede dar al 100% la garanta de la ausencia de errores, tampoco un ambiente de compilacin o interpretacin puede dar esta garanta. Java no se centra en la correccin de seguridad, se basa en la anticipacin de los posibles errores que se puedan presentar.
13
Alto Rendimiento. Java es un lenguaje interpretado, por eso no ser igual de veloz en la ejecucin como un lenguaje compilado como C. En versiones tempranas de Java est an decenas de veces ms abajo que la velocidad de ejecucin que proporciona C. Sin embargo con el pasar del tiempo este aspecto ha ido mejorando sobre la base del compilador JIT (just in time) que permite programas en Java de plataforma independiente se ejecuten casi tan rpido como los lenguajes convencionales compilados. Multihilo. Es fcil imaginar cmo funciona una aplicacin que hace mltiples cosas a la vez, por ejemplo en un navegador web, donde, se hace la descarga al mismo tiempo del texto, imgenes, videos y dems componentes de la pgina que visitamos, pero esta descarga se hace por separado, donde una funcin especfica se hace cargo de descargar las imgenes, otra el texto y as con cada uno de los compontes. Obviamente lo hacen al mismo tiempo, por esto se dice que es multihilo. Java es un lenguaje multihilo ya que soporta la ejecucin de mltiples tareas al mismo tiempo y cada uno de esos hilos puede soportar la ejecucin de una tarea especfica diferente. Un beneficio importante de esta caracterstica multihilo es el aporte que da a las aplicaciones basadas precisamente en esto, ya que como se mencion, incrementa el rendimiento de la aplicacin, sobre todo en aplicaciones basadas en interfaces grficas de usuario. Aunado a lo anterior y haciendo referencia a la facilidad de Java, programar multihilo en Java es muy fcil, ya que si se ha tratado trabajar con hilos en C o C++ se notar la enorme dificultad que esto representa. La clase Thread da el soporte, la facilidad y los mtodos para iniciar y terminar la ejecucin y hacer uso de los hilos, que a su vez se encuentra contenida en el nombre de espacio java.lang. La sintaxis del lenguaje Java de igual manera tiene soporte directo sobre la palabra reservada synchronized la cual hace extremadamente fcil para marcar secciones de cdigo o mtodos completos que necesitan ser ejecutados de uno en uno o dicho de mejor manera sincronizados.
14
La JVM es una mquina de computacin de tipo abstracto. Emulando a una mquina de componentes reales, tiene un conjunto de instrucciones y utiliza diversas reas de memoria asignada para ella. La implementacin del primer prototipo de la JVM, hecho por Sun Microsystems, emulando todo su conjunto de instrucciones fue hecho sobre un hardware muy especfico, lo que hoy se podra conocer como los modernos Personal Digital Assistant (PDA). Las versiones actuales de la JVM estn disponibles para muchas (casi todas) las plataformas de computacin ms populares. Debe entenderse sin embargo que, la JVM no asume una tecnologa especfica o particular, esto es lo que la vuelve multiplataforma. Adems no es de por s interpretada, y que slo pueda funcionar de esta manera, de hecho es capaz de generar cdigo nativo de la plataforma especfica e incluso aceptar como parmetro de entrada, en lugar del bytecode, cdigo objeto compilado, por ejemplo funciones nativas de C. De igual manera puede implementarse en sistemas embebidos o directamente en el procesador. Cmo funciona la JVM? La JVM no sabe nada del lenguaje de programacin Java, no es de su inters, porque un compilador ya se encarg antes de ese proceso, slo le interesa un formato especfico de archivo, el formato de archivo de clase o entendido de otra manera, el bytecode ms una tabla de smbolos e informacin complementaria. Haciendo una apologa sobre la base de la seguridad la JVM impone formatos fuertes y limitaciones estructurales en el bytecode (por ejemplo los apuntadores a memoria, que ya se han mencionado en apartados anteriores). Sin embargo, cualquier lenguaje formal, con la funcionalidad que se pueda expresar en trminos de un archivo de bytecode vlido, puede ser organizado, interpretado y ejecutado por la JVM. Atrados por la gran caracterstica multiplataforma que imprime la JVM al lenguaje Java, los programadores de otros lenguajes de programacin han recurrido a ella como vehculo de entrega (ejecucin) de estos lenguajes, lo que nos da a entender que su capacidad multiplataforma puede extender la implementacin de casi cualquier lenguaje que cumpla con sus reglas para ser multiplataforma. La funcionalidad completa, a manera de esquema se presenta en la siguiente figura:
15
16
servidores de aplicaciones web, entre muchas otras cosas inherentes al sistema, no a la aplicacin. Las herramientas antes mencionadas, cuando se trabajan en conjunto como una sola unidad operativa, se le conoce como Entorno Integrado de Desarrollo (EID) o IDE por sus siglas en ingls (Integrated Development Environment), que podemos entenderlo como un programa de tipo informtico que conjunta al mismo tiempo varias herramientas tiles para la programacin de aplicaciones. El IDE puede estar enfocado a un lenguaje especfico o soportar una coleccin de ellos, como es usual en los IDEs modernos; por ejemplo el IDE ms popular de Microsoft es el Visual Studio en su versin 2010 (al momento de escribir este documento) y tiene soporte nativo para una variedad muy amplia de lenguajes soportados, e inclusive que se pueden mezclar. Cuando transportamos este concepto del IDE a Java, existen de igual manera varios de donde se puede hacer una eleccin, por ejemplo: Eclipse Borland JBuilder Sun Java Studio Creator NetBeans IBM WebSphere Studio Site Developer for Java Dreamweaver WebLogic Workshop Oracle JDeveloper IntelliJ Idea JCreator Nota: Todas las marcas o nombres de productos son propiedad de sus respectivos dueos y slo se usan a manera de ilustrar el ejemplo expuesto. Componentes del IDE Los elementos bsicos de un IDE, pero no limitado a ellos, son: Un editor de texto, que es el programa o parte del IDE que nos permitir crear, abrir o modificar el archivo contenedor del cdigo fuente del lenguaje con el que estemos trabajando. Puede proporcionarnos muchas ventajas sobre un editor de texto separado del IDE, ya que por lo general cuentan con un resaltado de sintaxis sobre las partes que conforman el cdigo fuente de la aplicacin que se est construyendo. Un compilador, que es el programa o parte del IDE que nos permitir traducir el cdigo fuente escrito dentro del editor a lenguaje mquina (bytecode en el caso de Java). De tal manera que el programador pueda disear y programar una aplicacin utilizando palabras, frases o conceptos muy cercanos al lenguaje que utiliza normalmente, y el compilador se encargar de traducir estas sentencias en instrucciones comprensibles por el procesador de la computadora. 17
Un intrprete, que es el programa o parte del IDE que nos permitir hacer la interpretacin del cdigo compilado (como en el caso de Java), en donde se toma como entrada el bytecode y el resultado es la ejecucin de las instrucciones de lenguaje mquina o cdigo objeto contenidas en esta estructura de clases. El compilador e intrprete pueden trabajar en conjunto como se explica en este apartado o ser procesos independientes para la ejecucin de un programa. Un depurador, que es el programa o parte del IDE que nos permitir probar y localizar errores dentro del cdigo de la aplicacin (mayormente de tipo lgico o de omisin) haciendo una traza de la ejecucin completa del cdigo y sealando dnde ser un posible error del cdigo o vulnerabilidad no considerada. Un constructor de interfaces grficas, que es la parte del IDE que nos facilita una serie de componentes nativos del lenguaje con el que trabajamos (swing en Java) para poder ofrecer al usuario un ambiente amigable de tipo visual, en pocas palabras nos permite crear interfaces grficas de usuario y complementarlas con el cdigo fuente de nuestra aplicacin. Opcionalmente la posibilidad de trabajar conectado a un servidor de control de versiones, que nos permitir llevar un control preciso de cada versin de cada archivo que comprenda nuestra aplicacin, particularmente til cuando se trabaja con aplicaciones de tipo empresarial que conllevan, inclusive, miles de archivos de cdigo fuente y al estar trabajando en grupo se vuelve indispensable esta funcionalidad que ofrece el IDE.
Configuracin del IDE Cuando se hace la instalacin de un IDE la configuracin que trae por defecto es la habitual y ser suficiente para poder comenzar a trabajar sobre l, la personalizacin que se haga de las distintas herramientas con las que cuenta depender del gusto de cada programador. Las posibles configuraciones que se hacen sobre el IDE van desde cosas tan simples como el tipo de letra y su tamao para mostrar el cdigo fuente, hasta opciones muy avanzadas donde consumimos servicios web de determinado sitio de internet. Otra posible opcin de configuracin interesante sobre cada proyecto que se maneja en el IDE es de qu parte toma las clases base (independientes a las que proporciona Java) y cmo ser la salida de la aplicacin (jar, jar compimido, entre otros).
18
Long Nmeros reales Float Doubl Otros tipos Char Booleano String
-2,147,483,648 a Entero 2,147,483,647 9,223,372,036,854,775,808L Entero largo a 9,223,372,036,854,775,807L +/- 3.4E+38F +/- 1.8E+308 Coma flotante con precisin simple Coma flotante con precisin doble Un solo carcter Un valor booleano Cadena de caracteres.
La manera de identificar qu tipo de dato utilizar es analizar qu datos almacenar esa variable para definir su tipo de datos en base al rango de valores y descripcin dados en la tabla anterior. Para utilizar un dato debemos colocar al inicio el tipo de dato que queremos, seguido el nombre que tendr ese dato y un punto y coma si no se quiere dar un valor inicial, pero si se va a dar un valor colocamos una asignacin con un igual y el valor. Ejemplo de utilizacin public class DataTypes { public static void main(String[] args) { int x; // un dato declarado pero sin valor inicial.
// maysculas y minsculas, // deben empezar por una letra y // pueden contener nmeros,_,$ byte a = 121; // Deben ser inferiores a 126 short b = -10000; // Deben ser inferiores a 25000 int c = 100000; // Deben ser inferiores a 2100 mill. long d = 999999999999L; // Deben poner L al final float e = 234.99F; // Deben ser < 3E38; F al final double f = 55E100; char charValue= '4'; // char '4' no es el entero 4 //Las cadenas (strings) son objetos, no primitivos. //Ejemplo: String institucion = esad; } }
#_puertas
#_cilindros
#_hp
colorCarroceria
#_placas 20
un auto Tipo Datos de una factura Tipo Datos de un zapato Tipo Datos de una computa dora Tipo
#_folio
total
nombreCliente
nombreEmpresa
Iva
punto
material
Tacn
color
#_estilo
Marca
procesador Memoria
pantalla
discoDuro
Unario (smbolo negativo) * Multiplicacin / Divisin % Resto (mdulo) + Suma Resta Utilizacin de operadores aritmticos public class opAritmeticos { public static void main(String[] args) { int j, k, m; int d= 123; j= d--; // j vale 122 y d vale 123 System.out.println("j= " + j); k= ++d; // k vale 124 y d vale 124 System.out.println("k= " + k); m= --d; // m vale 123 y d vale 123 System.out.println("m= " + m); m= k % j; // operador Resto para los tipos int // k=124 y j=122, por tanto, m= 2 System.out.println("m= " + m); j= 5; k= 3; m= j/k; // Divisin entera: m= 1 System.out.println("m= " + m); System.exit(0); } } Operadores lgicos Operador == > < && != >= <= || Utilizacin de operadores lgicos
Derecha a izquierda Izquierda a derecha Izquierda a derecha Izquierda a derecha Izquierda a derecha Izquierda a derecha
Descripcin Igual (comparacin de igualdad) Mayor que Menor que Conjuncin lgica (and) Distinto Mayor o igual que Menor o igual que Disyuncin lgica (or) 22
double c= 0.0, b= 3.0; if (c != 0.0 && b/c > 5.0){ System.out.println(se cumple la condicin solicitada); } Operadores de asignacin Se deber en primer trmino, hacer la distincin entre la accin de asignacin y el operador de comparacin (igualdad), aunque aparentemente al inicio pueda resultar confuso por el parecido entre ambos, lo que distingue uno de otro es precisamente el concepto que cada uno de ellos representa y la forma de presentarse, as pues: El operador = no es lo mismo que el operador == El operador bsico al utilizar la asignacin es =, que se utiliza para asignar un valor a otro. Como sigue: int contador = 0; Iniciando la variable contador con un valor de 0. Adems de las facilidades ya descritas que nos proporciona el lenguaje Java, proporciona una forma abreviada de representar este tipo de operadores, con la finalidad de agilizar la escritura para los programadores. Se describen en la siguiente tabla: Operador += -= *= /= %= &= Operadores de bit Dan la posibilidad de manipular los bits de los datos, especialmente el desplazamiento. Operador >> << >>> Uso a >> b a << b a >>> b Operacin Desplaza los bits de a a la derecha b veces Desplaza los bits de a a la izquierda b veces Desplaza los bits de a a la derecha b veces (omitiendo el signo) Uso a += b a -= b a *= b a /= b a %= b a &= b Equivalente a a=a+b a=ab a=a*b a=a/b a=a%b a=a&b
23
La funcin especfica de este tipo de operadores es desplazar los bits del operando ubicado a la izquierda de la expresin el nmero de veces que indique el operador de la derecha. La direccin del operador indica hacia donde corrern los bits. La siguiente sentencia nos da a entender bien el concepto que se trata de implementar, al desplazar los bits del entero 25 a la derecha de su posicin: 25 >> 2 El nmero entero 25 est representado por el nmero 11001 en notacin binaria, al aplicarle el operador de desplazamiento el nmero 11001 ahora se convertir en 110 o el nmero entero 6. El lector debe notar que los bits que se desplazan a la derecha se pierden al efectuar esta operacin. Precedencia de operadores Java asigna (como se hace en las operaciones matemticas normales) una importancia muy alta a la precedencia de los operadores. En la siguiente tabla se lista esta precedencia y entre ms alta sea su posicin, ms importancia tendr: Operadores Operadores posfijos Operadores unario Creacin o conversin Multiplicacin Suma Desplazamiento Comparacin Igualdad AND a nivel de bit OR a nivel de bit XOR a nivel de bit AND lgico OR lgico Condicional Asignacin Representacin [], (), a++, a-++a, --a, +a, -a, ~, ! new(tipo) a *, /, % +, << == ==, != & ^ | && || ?: =, +=, -=, *=, /=, &=, ^=, |=, <<===
24
Actividad 5. Operadores
Durante esta actividad realizars un ejercicio donde recuperes lo que has aprendido acerca de los operadores soportados por JAVA. Realiza lo siguiente: 1. En un archivo de texto, copia las operaciones dadas en la Tabla 2. 2. Completa los datos que se solicitan en las columnas vacas. Para ello, identifica los operadores encontrados en cada operacin, su tipo de operador y el resultado de dicha operacin. 3. Guarda la actividad con el nombre POO_U1_A4_XXYZ, sustituye las XX por las dos primeras letras del primer nombre, la Y por la inicial del apellido paterno y la Z por la inicial del apellido materno. 4. Enva el archivo a tu Facilitador(a) para recibir retroalimentacin. Tabla 2 Operadores Tipo de encontrados operadores
# 1 2 3 4 5
Operacin (3 + (2 *3) -12) / 3 P: Verdadero Q: Falso PyQ 10> 5 >6 (((200 +305)/56)*30)<12 P: 3+9<10 Q:30 -64 > - 40 PoQ
Resultado
25
public class EjamploCast { public static void main(String[] args) { int di=33; int dv=5; int c=di/dv; System.out.print(c+ "\n"); } }
Como vemos, el resultado se trunc hasta el valor entero. Pero si en el resultado es importante tomar en cuenta tambin los decimales para tener un resultado ms preciso debemos convertir el entero a flotante, eso se realiza de la siguiente manera. float c= (float) di/dv; Colocando el tipo de dato al que se convertir entre parntesis, ahora nuestro resultado mostrar los decimales que necesitamos.
En este caso el resultado si tiene los decimales que necesitamos. En un ejemplo ms amplio si se tienen3 clases A, B y C que se pueden almacenar en un arreglo de la siguiente manera: Object [] array = new Object[3]; array[0] = new A(); array[1] = new B(); array[2] = new C(); Si ahora se quiere usar estos objetos, se tendr que hacer un cambio entre resultados que los tienes como array[i], que son Object, y no puedes llamar a mtodos especficos de las clases A, B y C. La forma de recuperar las clases originales es con un cast, que al igual que el ejemplo anterior debes colocar el tipo al que quieres convertir entre parnesis antes del dato que se convertir, entonces se pone el tipo A delante, entre parntesis. 26
((A)array[0]).metodoDeA(); Obviamente no puedes convertir cualquier tipo a cualquier tipo. Si intentas convertir array[0] a B, te dar error, salvo que A herede de B. Pero estos casos ms complejos los trataremos ms adelante.
Al hacer la implementacin del ejemplo anterior a algo un poco ms real y palpable se sugiere como primer acercamiento un programa sencillo escrito en lenguaje Java que muestre en pantalla un mensaje de bienvenida a la programacin en Java. /** * La clase bienvenida construye un programa que * muestra un mensaje en pantalla */ public class bienvenida { public static void main(String[] args) { System.out.println("Hola, "); System.out.println("bienvenido (a)"); System.out.println("a la programacin en Java"); } } Para comprender mejor lo que hace el programa y las partes que lo conforman se explicar. Bienvenida es el nombre de la clase principal y por tanto, del archivo que contiene el cdigo fuente (por convencin de Java, el archivo donde se guarda el cdigo fuente deber tener el mismo nombre de la clase principal). Como ya se ha explicado antes, todos los programas en Java tienen un mtodo principal de entrada conocido como main que a su vez contiene (encierra) un conjunto de sentencias que significan las instrucciones que deber ejecutar el programa, este conjunto de instrucciones o bloque de instrucciones en Java se indican con la utilizacin de llaves { }. En el programa contenido en la clase bienvenida el bloque se compone slo de tres instrucciones de impresin a pantalla. Utilizacin de comentarios. Desde el surgimiento de los lenguajes de programacin, junto con ellos, de igual manera naci la necesidad de hacer anotaciones sobre lo que hace tal instruccin, un mtodo completo o inclusive el programa entero. Esta necesidad se resolvi con la introduccin del soporte de comentarios (notas) dentro del mismo cdigo fuente que se pueden emplear de distintas formas, por ejemplo recordar para qu se us una variable especfica, para documentar los valores de retorno de un mtodo, entre muchos otros. Los comentarios que se utilizan en Java son del mismo estilo a los empleados en C/C++, as el compilador al comenzar a hacer su trabajo ignora por completo lo que est entre estos comentarios ya que no forman parte del cdigo del programa, slo son lneas de carcter informativo para el programador humano. Hay comentarios de una lnea y de varias lneas, por ejemplo: // Este es un comentario escrito en una sola lnea y para hacer comentarios breves y concisos. Como se puede observar el comentario comienza con un par de caracteres del tipo / y ntese que no se deja espacio alguna entre ellos, despus de esto se puede comenzar a 28
escribir el cuerpo del comentario de una sola lnea. Cuando hay la necesidad de hacer observaciones muy amplias y que una lnea no nos d el espacio suficiente se sugiere utilizar comentarios de varias lneas, por ejemplo; /* Este es un comentario muy amplio y se puede hacer con la utilizacin de varias lneas sin perder la continuidad de la idea e indicndole al compilador que ignore por completo todas las lneas que lo comprenden. */ De igual forma que en los comentarios de una sola lnea, los comentarios multilnea comienzan con el par de caracteres /* y terminan con el par de caracteres */. Adems en Java existe un tercer tipo de comentario que se le conoce como comentario de documentacin y este tipo la funcin que tienes es que le indica al programa generador de documentacin que lo incluya a l e ignore de los dems, por ejemplo: /** Comentario de documentacin del programa */ El lector debe notar que la forma de comenzar el comentario es ligeramente diferente al comentario multilnea, ya que ahora se incluye un asterisco ms, para quedar como /**. La forma de terminarlo es la misma. Como sugerencia sobre los comentarios se debe hacer notar que, la necesidad de escribir comentarios es para la aclaracin de ciertas partes del cdigo que no estn muy claras, por tanto si se exagera en el nmero de comentarios se entender que el cdigo no es claro y se deber considerar la necesidad de reescribirlo para hacerlo comprensible. Identificadores Se entender al identificador como aquella palabra o nombre que el programador le asigna a sus propias variables, mtodos e inclusive nombres de clases y tiene un mbito de aplicacin e injerencia slo dentro del cdigo fuente, escrito por el programador humano porque una vez que pasa por el proceso de compilacin, el compilador genera sus propios identificadores ms acorde y ms ptimos para su propia interpretacin dentro del bytecode. Como regla general del lenguaje Java se debe definir un identificador antes de ser utilizado. Siguiendo las reglas que Java establece para la creacin de identificadores se deber apegar a lo siguiente: Un identificador comienza por una letra o utilizando el carcter de guin bajo (_) e inclusive utilizando el smbolo de pesos ($) aunque esto ltimo no se recomienda ya que, como se explic, el compilador lo utiliza de forma muy frecuente para formar sus propios identificadores. Se pueden utilizar a continuacin nmeros (0 al 9). Pero no dejar espacios en blanco, signo de interrogacin (?) o smbolo de porcentaje (%). Un identificador puede contener la longitud que el programador asigne arbitrariamente o considere necesario para dejar perfectamente claro el propsito del identificador y qu tipo de dato alojar.
29
En Java, al ser sensible al contexto, se distinguen los caracteres en mayscula y minscula. As promedio, Promedio y PROMEDIO sern locaciones de memoria completamente diferentes. No se puede repetir el mismo identificador para dos variables o cualquier otra parte del cdigo (nombres de mtodos o clases por ejemplo) ya que como se ha mencionado, los identificadores hacen precisamente eso, identifican de manera nica a cada parte del cdigo. Aunque la escritura de identificadores no est normalizada en Java, se puede apegar a las siguientes recomendaciones: Identificadores autoexplicativos, para guiar al usuario (de cualquier tipo) a entender la utilizacin de dicho identificador sin la necesidad de utilizar comentarios. Por ejemplo para alojar el resultado del promedio de n nmeros enteros se sugiere utilizar el identificador resultadoPromedio o resAvg. Si el identificador est compuesto por dos o ms palabras, stas se agrupan, la primera de ellas se escribe totalmente en minscula y la primera letra de las subsecuentes se escribe con mayscula, por ejemplo: resultadoPromedioCalificaciones o longitudMedida. Como se mencion se puede utilizar el smbolo de guin bajo (_) pero por convencin slo se emplea al nombrar constantes, ya que estas (igual por convencin) debern escribirse en letra mayscula y dificulta la lectura y separacin de la misma, por ejemplo: VALOR_GENERAL_ANUAL.
Constantes (Constants): Las constantes deben nombrarse totalmente en maysculas, separando las palabras con guiones bajos. Las constantes tipo objeto pueden usar una mezcla de letras en maysculas y minsculas. HEAD_COUNT MAXIMUN_SIZE. Estructuras de Control (Control Structures): Usar Llaves ({ }) alrededor de las sentencias, aun cuando sean sentencias sencillas, son parte de una estructura de control, tales como un if-else o un ciclo for (estas estructuras se explicarn a fondo en la siguiente unidad). if ( condicin ){ Sentencia1; } else { Sentencia2; } Espaciado (Spacing): Colocar una sentencia por lnea, y usar de dos a cuatros lneas vacas entre sentencias para hacer el cdigo legible. El nmero de espacios puede depender mucho del estndar que se use. Comentarios (Comments): Utilizar comentarios para explicar los segmentos de cdigo que no son obvios. Utilizar // para comentar una sola lnea; para comentar extensiones ms grandes de informacin encerrar entre los smbolos delimitadores /* */. Utilizar los smbolos /** */ para documentar los comentarios para proveer una entrada al javadoc y generar un HTML con el cdigo. //Un comentario de una sola lnea /*Comentarios que pueden abarcas ms de una lnea*/ /**Un cometario para propsitos de documentacin *@see otra clase para ms informacin */ Nota: la etiqueta @see es especial para javadoc para darle un efecto de tambin ver a un link que referencia una clase o un mtodo.
Aunque la definicin del lenguaje Java toma en cuenta todas estas palabras, en su implementacin no se toman en cuenta todas, las que estn marcadas con un asterisco an no tienen utilizacin. Tambin existen palabras reservadas de empleo especfico para nombres de mtodos y stas son: Clone Notify Equals notifyAll finalize toString getClass Wait hashCode
Ejemplo package javaapplication1; import javax.swing.*; public class JavaApplication1 { public JavaApplication1(){} public static void main(String[] args) { //instrucciones } }
Uso Paquete import si se requiere declaracin de la clase constructor declaracin del mtodo cuerpo del mtodo cierre del mtodo cierre de la clase
Nombre de la clase de la cual se instanciar el objeto Nombre del objeto Asignacin Palabra new para hacer la separacin de la memoria. Invocacin al constructor Cierre de la instanciacin
Quedando la instruccin como sigue: empleado objetoE=new empleado(); Constructores Un constructor es un mtodo especial en Java empleado para inicializar valores en instancias de objetos, a travs de este tipo de mtodos es posible generar diversos tipos de instancias para la clase en cuestin; la principal caracterstica de este tipo de mtodos es que llevan el mismo nombre de la clase. Si la clase se llama empleado su declaracin sera: public class empleado { } El constructor debera quedar como sigue public empleado(){} Y se usan para poder crear instancias de la clase (objetos).
Autoevaluacin
Para reforzar los conocimientos relacionados con los temas que se abordaron en esta primera unidad del curso, es necesario que resuelvas la autoevaluacin de la unidad. Recuerda que es muy importante leer cuidadosamente los planteamientos indicados y elegir la opcin adecuada para cada uno. Ingresa al aula para realizar la actividad.
34
Autorreflexiones
Adems de enviar tu trabajo de la Evidencia de aprendizaje, es importante que ingreses al foro Preguntas de Autorreflexin y consultes las preguntas que tu Facilitador(a) presente, a partir de ellas, debes elaborar tu Autorreflexin en un archivo de texto llamado POO_U1_ATR_XXYZ. Posteriormente enva tu archivo mediante la herramienta Autorreflexiones.
Cierre de la unidad
Has concluido la primera unidad del curso. A lo largo de sta te has introducido a la programacin orientada a objetos y sus principales caractersticas como abstraccin, polimorfismo, encapsulacin y herencia; tambin has estudiado la diferencia entre la orientacin a objetos y la programacin estructurada. Posteriormente te involucraste en las caractersticas del lenguaje JAVA, sus tipos de datos soportados, tipos de operadores y conversin de tipos de datos. Estos temas han servido para que vayas conociendo el ambiente de desarrollo de programas computacionales.
35
Al final de la unidad tambin vimos la estructura de un programa, palabras reservadas, estructura de una clase, declaracin de objetos y constructores, cuyo propsito fue proporcionarte un panorama general de programar. Es aconsejable que revises nuevamente la unidad en caso de que los temas que se acaban de mencionar no te sean familiares o no los recuerdes, de no ser este tu caso, ya ests preparado(a) para seguir con la unidad dos, en donde continuars con la revisin de los mtodos y las estructuras de control. Todo ello con el fin de obtener el conocimiento necesario para comenzar a realizar pequeos programas computacionales al final de la cuarta y ltima unidad del curso de Programacin Orientada a Objetos I.
Para saber ms
Es importante que instales un IDE en tu computadora personal para que pases todos los ejemplos de cdigo y veas cmo funcionan, de esta manera podrs analizar el funcionamiento de los cdigos presentados. *Nota: se recomienda que instales NetBeans 7.0, como IDE, por su facilidad de uso, este puede ser descargado gratuitamente de la siguiente liga: http://netbeans.org/downloads/
Fuentes de consulta
Bibliografa bsica Devis, R. (1993). C++/OOP: un enfoque prctico. Madrid, Espaa: Editorial Paraninfo. Recuperado el 1 de marzo de 2011, de: http://www.a4devis.com/articulos/libros/Programaci%C3%B3n%20Orientada-aObjetos%20en%20C++.pdf Joyanes, L. (2001). OLC - Programacin en C++. Serie Schaum, Captulo 1: Programacin orientada a objetos versus programacin estructurada: C++ y algoritmos. Espaa: McGrawHill Interamericana de Espaa SL. Recuperado el 1 de marzo del 2011, de: http://www.mcgraw-hill.es/bcv/guide/capitulo/8448146433.pdf Joyanes, L. y Fernndez, M. (2001). Java 2: manual de programacin. Espaa: McGrawHill Interamericana de Espaa SL. Zukowski. J. (1997). The Java AWT Reference (Java Series), version 1.2. O'Reilly & Associates. Recuperado el 1 de marzo de 2011, de: http://oreilly.com/openbook/javawt/book/index.html
36
Bibliografa complementaria Flanagan, D. (2005). Java in a NutShell. USA: O'Reilly & Associates.
37