Está en la página 1de 40

UAA Sistemas Electrnicos

Programacin en Java

Eduardo Serna-Prez

Introduccin al Lenguaje Java

La orientacin a objetos puede percibirse desde dos puntos de vista, como una metodologa de diseo de software o como un paradigma de programacin, donde se definen a los programas en trminos de "clases de objetos", estos objetos son entidades que combinan su estado (es decir, datos) y su comportamiento (esto es, procedimientos o mtodos). La programacin orientada a objetos (POO) expresa un programa como un conjunto de stos elementos, que se comunican entre ellos para realizar tareas. Esto difiere de los lenguajes procedurales tradicionales, en los que los datos y los procedimientos estn separados y sin relacin. La POO est pensada para hacer programas ms fciles de organizar, mantener y reutilizar, ya que anima al programador a pensar los programas en trminos de tipos de datos, y en segundo lugar en las operaciones especficas para esos tipos de datos. 1.1 Orgenes de Java

El primer lenguaje de programacin orientado a objetos fue Simula, creado en la dcada de 1960s por Kristen Nygaard (Figura 1) y Ole-Johan Dahl (Figura 2), del Centro de Computacin Noruego, fue desarrollo para apoyar la modelacin de simulaciones de eventos discretos en procesos cientficos e industriales, mediante la representacin directa de objetos del mundo real.

Figura 1: Kristen Nygaard

Figura 2: Ole-Johan Dahl

Con Simula I (1961 al 65) y Simula 67, Nygaard y Dahl introducan los conceptos bajo los cuales ms tarde todos los lenguajes de programacin orientada a objetos serian construidos: objetos, clases, herencia, cuantificador virtual y ejecucin de programas multi-hilo. El trmino Orientado a Objetos fue acuado por Alan Kay (Figura 3) en la dcada de los 1970s, as mismo, l es considerado tambin como uno de los creadores del modelo orientado a objetos. Alan Kay desarrollo mejoras sustnciales al modelo de programacin, generando un lenguaje llamado Smalltalk que era un sistema completamente dinmico en el cual las clases pueden ser creadas y modificadas dinmicamente.

UAA Sistemas Electrnicos

Programacin en Java

Eduardo Serna-Prez

En la primera mitad de la dcada de los ochenta la POO se convirti en una metodologa de programacin dominante debido principalmente a la influencia de Smalltalk. Su dominancia fue completamente cimentada por el surgimiento de las Interfaces grficas de usuario (GUIs) desarrolladas principalmente en Smalltalk, para lo cual la orientacin a objetos es decididamente la mejor opcin. A partir de este punto, se desarrollaron ms lenguajes de programacin de este tipo entre los que destacan Objective-C (Brad Cox), C++ (Bajarn Stroustrup), Eiffel (Bertrand Meyer), Oberon de Niklaus Wirth (Figura 4), Java y ya ms recientemente Python, Ruby, Perl, PHP, C# y la plataforma de .NET.

Figura 3: Alan Kay

Figura 4: Niklaus Wirth

A continuacin se explican los puntos ms importantes relacionados con ste paradigma de programacin y las bases en las que se sustenta su funcionamiento y metodologa.
1.1.1 Conceptos bsicos de orientacin a objetos

El paradigma orientado a objetos se enfoca a las caractersticas de comportamiento y estructura de las entidades como unidades completas, lo que nos permite disear software de manera modular y con un alto manejo de estructuras de datos complejas. El paradigma orientado a objetos se apoya en los siguientes conceptos: La Abstraccin (de datos) involucra la formulacin de un concepto (clase) poniendo atencin en las similitudes y diferencias entre las entidades de un conjunto, para extraer las caractersticas esenciales que lo distingan y evitar las caractersticas no relevantes. Y as, se establece una sola representacin del concepto que tenga esas caractersticas pertinentes. Es la capacidad de crear tipos de datos definidos por el usuario extrayendo las propiedades esenciales de un concepto, sin preocuparse de los detalles exactos de la implementacin. Algunos simplemente lo definen como la capacidad de enfocarse en lo esencial. La Encapsulacin asegura que los usuarios de un objeto no alteren de manera inesperada el estado interno de un objeto; solo sus mtodos internos estn autorizados para acceder a ellos. Cada objeto expone una interfaz publica que especifica como otros objetos podran interactuar con l. La abstraccin y la encapsulacin estn representadas por la clase. La clase es una abstraccin, porque define los atributos y mtodos de un determinado conjunto de objetos con caractersticas comunes, y es una encapsulacin por que constituye una caja negra que encierra tanto los datos que almacena como los mtodos que permiten manipularlos.

UAA Sistemas Electrnicos

Programacin en Java

Eduardo Serna-Prez

La Herencia Es la capacidad de definir una nueva clase a partir de otra clase. De esta forma, la reutilizacin del cdigo esta garantizada. Las clases estn clasificadas en una jerarqua estricta, donde la clase padre es conocida como superclase y la clase hijo como clase derivada. Esto significa que la clase derivada dispone de todos los atributos y mtodos de su superclase. El Polimorfismo es la propiedad que permite a una operacin tener diferente comportamiento en diferentes objetos. Es decir, diferentes objetos reaccionan de manera diferente al mismo mensaje (de modo que un mismo mtodo pueda tener mltiples implementaciones).

Estos conceptos son los pilares de la POO que permiten facilitar la comunicacin, incrementar la productividad y la consistencia, facilitar la modificacin de los programas y reducir la complejidad en esfuerzos de resolucin de problemas. Los Inicios del Lenguaje Java Java es uno de los lenguajes de programacin orientado a objetos mas verstil e interesante de finales del siglo XX (1994), detrs de l existe una inherente similitud con la sintaxis de C++, debido quizs a una estrategia de mercado ya que resultaba como una especie de colonizacin de C++ a Java.
1.1.2

El lenguaje de programacin Java se origino como parte de un proyecto de investigacin para el desarrollo de un lenguaje de programacin llamado Oak (1992), que buscaba superar la barrera de comunicacin entre varios dispositivos, como video caseteras y televisores. En la compaa Sun, exista un grupo de desarrolladores de software muy hbiles a los que se les conoca con el nombre de Green team encabezados por James Arthur Gosling (Figura 5), este grupo de desarrolladores trabajaban en la construccin de un lenguaje de programacin que fuera capaz de compartir el mismo software en diferentes unidades centrales de procesamiento. Este concepto inicial fallo despus de varios intentos, pues las compaas diseadoras de dispositivos fueron incapaces de vislumbrar los beneficios y el nicho de mercado que se presentaba, por lo que el Green team fue forzado a encontrar otro mercado para su nuevo lenguaje de programacin. Afortunadamente, en ese lapso de tiempo Internet comenz a ser mas popular y accesible (1994) y el Green team pudo estar consciente que el lenguaje Oak era perfecto para el desarrollo Web de componentes multimedia para la construccin de paginas Web. Estas pequeas aplicaciones, llamadas applets, llegaron a ser el primer contacto del lenguaje para los programadores de Internet. De esta manera Java se convirti rpidamente en un lenguaje poderoso y verstil, ya que inclua una variedad de cualidades que lo hacia idneo para el desarrollo Web, debido principalmente a que contaba con una plataforma de desarrollo y un esquema de ejecucin (maquina virtual) que permita la portabilidad del sistema en casi cualquier arquitectura computacional que lo implementara. Adems de una interfaz grfica muy simple y eficiente, adems de altamente portable. En la actualidad el lenguaje cuenta con las siguientes caractersticas:

UAA Sistemas Electrnicos

Programacin en Java

Eduardo Serna-Prez

Orientacin a objetos Esquema distribuido Esquema de programacin paralelo (multithreads) Esquema de seguridad en ejecucin y transacciones Plataforma independiente (JVM)

Figura 5: James Gosling

1.2
1.2.1

El Entorno de Desarrollo de Java


Modelo de programacin

El modelo de programacin es el conjunto de gramticas y reglas semnticas formales que describan rigurosamente el significado de un programa en trminos de las abstracciones que lo caracterizan. En el lenguaje Java el modelo de programacin es concretamente orientado a objetos, es decir, la estructura bsica de programacin es la clase por lo que cualquier programa en Java es nica y exclusivamente una clase.
class Nombre-Clase {

public static void main (String [] args){ // Cuerpo de programa } }

En Java se elimina el uso de apuntadores que pueden afectar la estabilidad del cdigo, en tal caso existe nicamente un conjunto de datos nativos y un sin nmero de objetos, a los que llamaremos datos referenciados o simplemente referencias (objetos). Adems del modelo orientado a objetos Java soporta el modelo de programacin distribuida que nos permite utilizar dos o mas computadoras (coleccin de computadoras heterogneas) que se comunican a lo largo de una red para ejecutar una tarea en comn.

UAA Sistemas Electrnicos

Programacin en Java

Eduardo Serna-Prez

1.2.2

Arquitectura de la Tecnologa Java

Java es un lenguaje de programacin muy peculiar pues se cataloga como compiladorinterprete, pues es capaz de generar un tipo especifico de cdigo intermedio que es fcilmente transportable a casi cualquier plataforma computacional esto se debe a que la tecnologa de java se sustenta en 3 mecanismos principales que como veremos a continuacin le permiten adquirir todos los beneficios de un sistema multiplataforma: Compilador Java: el compilador de java interpreta el cdigo y genera un cdigo intermedio denominado bytecode que puede ser fcilmente reinterpretado por una maquina virtual java. JRE: el ambiente en tiempo de ejecucin es el software responsable de permitir al usuario final ejecutar las aplicaciones java, posee una coleccin o librera estndar de clases que son indispensables para el funcionamiento de los programas java, adems de incluir una maquina virtual para el lenguaje java. Java VM: La maquina virtual de java (JVM) provee una especificacin de plataforma la cual le permite ejecutar cualquier programa compilado en java (bytecode). De esta forma el compilador de java toma cualquier cdigo hecho en java y genera un archivo precompilado llamado bytecode que es un conjunto de instrucciones que puede ser interpretado por cualquier maquina virtual de java.

A continuacin se muestra el esquema en tiempo de ejecucin de la tecnologa java y como interactan sus diversos elementos:

UAA Sistemas Electrnicos

Programacin en Java

Eduardo Serna-Prez

Compilacin java Ejemplo.java


Se lee el programa de disco, red u otro medio

Ejecucin
clase Loader

verificador Bytecode

javac

Interprete

Ejemplo.class

generador de cdigo JIT

Ejecucin

Hardware

El cdigo fuente (Ejemplo.java) es compilado y se genera un archivo convertido a bytecode (Ejemplo.class), ste es el archivo que ser cargado y ejecutado en alguna maquina objeto. Al tiempo de ejecucin, el cdigo en bytecode es ledo, verificado y puesto para su ejecucin en el intrprete. El interprete tiene dos funciones ejecutar bytecodes y hacer las llamadas apropiadas al hardware. En algunos ambientes de ejecucin una porcin de la verificacin de bytecode es compilada en cdigo nativo de maquina y ejecutado directamente en la plataforma de hardware, por lo que la velocidad de interpretacinejecucin se acelera. Ahora si se trata de un lenguaje dinmico que crea y destruye objetos en tiempo de ejecucin, qu mecanismo se encarga de liberar las instancias construidas en memoria de los diversos objetos? Muchos lenguajes de programacin permiten alojar memoria de manera dinmica en tiempo de ejecucin. El proceso para alojar memoria vara de acuerdo a las caractersticas del lenguaje y en ciertas ocasiones los bloques de memoria reservados nunca son liberados, principalmente porque esta tarea se deja a cargo del programador (como en C/C++). Java provee un mecanismo de recoleccin de bloques de memoria intiles y los remueve de manera automtica. Durante la ejecucin de los programas en la maquina virtual, el recolector de basura (Garbage Collection) comienza a verificar si existen bloques de memoria (objetos) que han dejado de ser usados o referenciados de tal manera que los marca para que en el prximo ciclo de verificacin sean eliminados y se recupere espacio de memoria.

UAA Sistemas Electrnicos

Programacin en Java

Eduardo Serna-Prez

1.2.3

El Compilador e Interprete de Java

El lenguaje de programacin java requiere de una infraestructura necesaria para desarrollo y ejecucin, inicialmente veremos cmo estn constituidas sus plataformas ejecucin y desarrollo, posteriormente mencionaremos algunas aplicaciones que pueden emplear como ambiente ambientes de desarrollo para facilitar la programacin aplicaciones.

su de se de

JRE (Java Runtime Environment) Es un paquete que contiene todo el software necesario para correr una aplicacin desarrollada en Java, dentro del paquete esta contenida la librera de clases, que son programas generados en java (bytecode) y que estn expresamente construidos para servir de apoyo para la construccin de aplicaciones por parte del usuario, adems se cuenta con: Libreras de integracin que permiten construir aplicaciones de comunicacin externa. Libreras de interfase grafica de usuario AWT/Swing. Libreras para el manejo de multimedia. Una maquina virtual de java adecuada a la plataforma que permite ejecutar las aplicaciones.

JDK 2 (Java Distribution Kit 2) Es el conjunto de herramientas para el desarrollo de aplicaciones en Java, esta compuesto por las siguientes herramientas de programacin: javac Compilador de java que se encarga de convertir cdigo fuente a bytecode de java. jar Programa que se encarga de manipular libreras de clases ya compiladas y empaquetadas. javadoc Programa que se encarga de extraer documentacin automticamente partiendo de los comentarios en el cdigo fuente. jdb Depurador de programas.

Adems de las herramientas adicionales para desarrolladores, se agrega el paquete JRE que contiene todas las libreras de clase y la maquina virtual en la que se producirn y ejecutaran las aplicaciones. Las herramientas de desarrollo esta disponible en 3 posibles versiones: Edicin Micro: Se emplea en ambientes con recursos limitados. Edicin Estndar: Es la edicin comnmente empleada por la mayora de los programadores. Edicin Empresarial: Es una edicin que posee una coleccin muy amplia de recursos adicionales para transacciones en Internet, seguridad y acceso a recursos remotos.
Ambientes de Desarrollo Integral para Java

1.2.4

Los ambientes de desarrollo son aplicaciones que nos permiten escribir en un lenguaje de programacin de manera sencilla, ya que se puede verificar gradualmente el producto que estemos desarrollando. De esta forma el ambiente de desarrollo se encuentra totalmente

UAA Sistemas Electrnicos

Programacin en Java

Eduardo Serna-Prez

independiente de la plataforma de Java que se emplee, es decir que se puede emplear cualquier versin del kit de desarrollo de software (JSDK) de Sun. Existen varios ambientes de desarrollo en el mercado, los hay desde los libres que no tienen algn costo, hasta las herramientas mas sofisticadas y caras del mercado. El lenguaje Java (plataforma Java) y el ambiente de desarrollo integral no son una sola aplicacin, en tal caso debern ser instaladas de manera independiente. Se recomienda inicialmente instalar la plataforma de Java (JSDK) y posteriormente el ambiente de desarrollo que mas se ajuste a sus necesidades. En la red existen disponibles varios ambientes para el desarrollo de software como: o o o NetBeans: una herramienta creada por una filial de Sun Microsystems, es una buena herramienta de diseo aunque algo lenta si se cuenta con poca memoria principal. Permite el diseo RAID (diseo rpido de interfase). Eclipse: una herramienta de distribucin libre bastante flexible en uso de recursos y fcil de emplear debido a su poca complejidad, permite la opcin de autocompletar texto. Notepad++: es una herramienta amigable y fcil de emplear, cuenta con una versin libre bastante austera y simple de integrar para los lenguajes ms comunes adems de Java.

Es importante recordar que en el mercado se encuentran disponibles varias distribuciones libres para ambientes de desarrollo integral en Java, as que se deja al criterio del alumno el uso de cualquiera de ellas. Tambin se encuentra disponible una plataforma de diseo integral para Java, conocida como Eclipse, desarrollada por IBM. Eclipse es algo mas que un simple ambiente de desarrollo integral (JDT), ya que cuenta con su propio kit de desarrollo para compilacin (ECJ). Desde un principio se considero a Eclipse como una distribucin libre para Java, por lo que su popularidad no se ha disminuido ante su ms claro competidor Sun Microsystems. Desafortunadamente por cuestiones de licencias Eclipse requiere la instalacin de JRE para mantener la portabilidad. 1.3 Fundamentos del Lenguaje Java Cuando hablamos de lenguajes de programacin debemos tomar en cuenta ciertas convenciones y consideraciones relativas a la manera en que trabaja el lenguaje de programacin, as como observar los elementos de lenguaje ms bsicos que nos permiten entender el mecanismo de programacin y los elementos del lenguaje.
1.3.1 Convenciones de escritura

La sintaxis del lenguaje nos describe la manera en como deben ser estructurados los programas escritos en el lenguaje de programacin para que sean considerados como entidades validas, a continuacin describiremos algunas convenciones bsicas para la escritura de programas Java. Es importante recordar que los nombres de los identificadores en Java son sensibles a las letras maysculas y minsculas. Para facilitar la lectura y mantenimiento de nuestros programas aplicaremos las siguientes normas:

UAA Sistemas Electrnicos

Programacin en Java

Eduardo Serna-Prez

Cuando un nombre consta de varias palabras, se escribir una a continuacin de otra, poniendo con mayscula la primera letra de cada palabra que sigue a otra (ejemplos: elMayor(), RectanguloGrafico). Los nombres de clases comenzarn siempre por mayscula (ejemplos: RectanguloGrafico, Vector). Los nombres de las interfaces comenzarn con la letra I. Los nombres de los paquetes comenzarn con las letras pack. Los nombres de objetos, mtodos, variables miembro y variables locales comenzarn siempre por minscula (ejemplos: dibujar(), numRectangulos, x). Los nombres de las variables finales, es decir de las constantes, se definirn en maysculas (ejemplo: PI, MAXIMO). Los nombres de los parmetros de los mtodos empezarn por la letra p (ejemplos: pValor1, pResultado)

1.3.2

Palabras reservadas

Las palabras claves tienen un significado especial para el compilador de Java, ya que identifican el nombre de un tipo de dato o una construccin de programa. Es decir son el conjunto de primitivas que forman al lenguaje de programacin, adems de la estructura gramatical que forma el lenguaje de programacin. A continuacin se muestra el conjunto de primitivas del lenguaje Java:
abstract assert bolean break byte base match char class const continue default do double else enum extends final finally float for goto if implements import instanceof int interface long native new package private protected public return short static strictfp super switch synchronized this throw throws transient try void volatile while

Las siguientes son notas importantes acerca de las palabras claves: Las literales true, false y null se escriben en minsculas, estrictamente hablando no son palabras claves. No existe el operador sizeof que nos permita acceder a la memoria, pero se cuanta con otro operador mas potente que nos permite manipular objetos propiamente. Las palabras claves goto y const no son usadas en el lenguaje Java.

UAA Sistemas Electrnicos

Programacin en Java

Eduardo Serna-Prez

Comentarios

Los comentarios de documentacin se colocan inmediatamente antes de una declaracin (de variables, mtodos o clases) indicando que los comentarios deben ser incluidos en alguna documentacin que es generada de manera automtica (por ejemplo, los archivos HTML generados por el comando javadoc) para servir como descripcin de los elementos declarados. Existe el comentario en una sola lnea tipo C: // comentario. Y existe la documentacin en bloque, que abarca un mayor numero de lneas, que comprende desde el inicio de bloque (/*) hasta el final del mismo (*/). /* Inicio de comentario y el final del comentario */
Bloques de cdigo

En el lenguaje de programacin java un estatuto es una o ms lneas de cdigo que terminan con punto y coma (;), por ejemplo: total = a + b +c + d; total = a + b + c + d; Un bloque, algunas veces llamado estatuto compuesto, es un grupo de estatutos encerrados entre llaves de apertura y cierre ({}). Un bloque es til cuando se requiere agrupar estatutos. { // un bloque de estatutos x = y +1; y = x +1; } while ( i < long ) { // un bloque de estatutos puede estar a = a + i; // contenido en otro bloque If ( a == max ) { // y en otro bloque b = b + a; a = 0; } i = i + 1; }
Elemento basico de programacin

tambin

En el lenguaje de programacin java solo es posible construir clases, por lo que la unidad mnima de programacin es la clase. Dentro de la definicin de una clase nicamente puede existir una sola funcin main, que sera la responsable del inicio y fin de la ejecucin del programa, y a su alrededor se encontraran todas las dems clases que formen parte del programa:

10

UAA Sistemas Electrnicos

Programacin en Java

Eduardo Serna-Prez

class NombreClase { public static void main( String [] args ) { System.out.println(" Hola mundo !!! "); // mensaje de salida } }
1.3.3 Tipos de datos, Variables y Operadores

El lenguaje de programacin Java cuenta con varios tipos de datos. Estos caen en dos grandes categoras: 1. Datos Primitivos: Son aquellos tipos de datos que se encuentran inmersos en el lenguaje y cuentan con un espacio fijo para su valor. 2. Datos Referenciados: En este grupo se encuentran los arreglos y los objetos de cualquier tipo de clase que se tenga disponible en el API o que se construya por el programador. Los tipos primitivos son valores simples, no son objetos, de manera que se trata del tipo de dato mas simple el cual puede ser claramente identificado y existe en un lugar especfico de la memoria. Los tipos referenciados u objetos de una clase son tipos de datos compuestos.
! Tipos de Datos Primitivos

El lenguaje Java define ocho tipos primitivos, los cuales pueden ser considerados en cuatro categoras: o o o o
"

Lgicos boolean Texto char Enteros byte, short, int y long Punto flotante float y double

Lgicos

Los valores lgicos son representados usando los tipos bolanos, los cuales toman uno de dos posibles valores literales: true (verdadero) false (falso). A continuacin se muestra un cdigo de ejemplo que declara e inicializa una variable de tipo boolean. boolean verdad = true; No existe ajuste (cast) entre valores de tipo entero y bolanos, como ocurre en otros lenguajes de programacin como C/C++. Solo pueden usarse cualquiera de las dos literales definidas.
" Texto

Los caracteres simples son representados usando el tipo char. Un char representa un carcter de 16-bits en UNICODE. Los caracteres deben ser indicados como literales encerrados en comilla simple ( ), por ejemplo:

11

UAA Sistemas Electrnicos

Programacin en Java

Eduardo Serna-Prez

a \t \u????

La letra a una tabulacin Un carcter especifico UNICODE, las interrogaciones (????) son reemplazadas con exactamente cuatro dgitos hexadecimales. Por ejemplo \u03A6 es ! (phi)

Ahora mostramos un ejemplo de declaracin e inicializacin de una variable tipo carcter. char ch = A;
" Enteros

Existen cuatro tipos enteros en Java. Cada tipo es declarado usando una de sus palabras claves, byte, short, int long. Se pueden crear literales de tipos enteros usando la forma decimal, octal hexadecimal. 2 077 0xBAAC Forma decimal del numero 2 0 indica un nmero octal 0x indica un nmero hexadecimal

Todas las literales enteras son de tipo int a no ser que se especifique lo contrario, es decir se puede agregar al final de la literal numrica la letra L, que indica que el valor ser entero largo. A continuacin se presenta una tabla con el tamao y rango que representan los nmeros:
Longitud 8 bits 16 bits 32 bits 64 bits " Punto flotante Tipo byte short int long Rango de -2 a 2 -1 15 15 de -2 a 2 -1 31 31 de -2 a 2 -1 63 63 de -2 a 2 -1
7 7

Los tipos flotantes pueden declararse como float o double. A continuacin veremos algunos ejemplos de numero flotantes. Las literales flotantes pueden incluir el punto decimal o el termino exponente (E), adems de las letras F para float y D para double. Los nmeros flotantes en Java ocupan 32 bits, mientras que los valores dobles ocupan 64 bits. 3.14 6.02E23 2.718F 123.4E+306D valor simple flotante (double) valor de punto flotante largo valor de punto flotante simple valor doble flotante

12

UAA Sistemas Electrnicos

Programacin en Java

Eduardo Serna-Prez

Variables, declaracin y asignacin

Las variables son los identificadores construidos para asignar valores que sern manipulados a lo largo del programa. Las declaraciones de variables deben seguir la siguiente sintaxis: <tipo de dato> identificador [ = valor ] ; Las asignaciones siempre deben de corresponder al tipo de datos que se est manejando, existen errores comunes de asignacin, como son: int y = 3.1415926; double w = 175,000; boolean sw = 1; float z = 3.14156; Los identificadores comienzan con letra, guin bajo signo de dlar, y el resto de los caracteres pueden ser dgitos. Recuerde que los identificadores son casos sensitivos. Debido a que pueden emplearse caracteres no ASCII, tenga presente lo siguiente: UNICODE puede soportar diferentes caracteres que lucen igual. Los nombres de clase deben ser nicamente caracteres ASCII, debido a que la mayora de sistemas no soportan UNICODE. Un identificador no puede ser una palabra clave, pero puede estar compuesta como parte del nombre.

El siguiente es un programa que muestra como declarar variables de distinto tipo de dato primitivo y como es posible emplear el operador de suma para concatenarlo con una salida de datos, tome en cuenta que al realizar una operacin dentro de una llamada a print deber emplear los parntesis para hacer hincapi en la operacin aritmtica. public class Main { public static void main( String [] args ) { // delcaracion de variables locales String mensaje = "Hola"; double a = 13.2345; int b = 12; System.out.println(mensaje + " mundo !!! "); System.out.print("el total de " + a + " + " + b); System.out.print(" es " + (a+b)); } }
Ajuste de datos primitivos

El ajuste primitivo o cast, significa asignar el valor de un tipo de variable a una de otro tipo. Si dos tipos son compatibles, Java realiza el ajuste automticamente. Por ejemplo un valor tipo int puede ser asignado sin ningn problema a una variable tipo long (promocin).

13

UAA Sistemas Electrnicos

Programacin en Java

Eduardo Serna-Prez

En los casos donde la informacin se pueda perder en la asignacin, el compilador requiere que se le confirme la asignacin a travs del operador cast. Por ejemplo: long big = 99l; int medium = big // asignacin invalida int medium = (int) big // cast aplicado Es necesario que el tipo de dato destino sea encerrado entre parntesis y usado de manera prefija indicando que la expresin debe ser modificada. Las variables pueden ser promocionadas automticamente a tipos ms grandes (como de int a long) double x = 12.414F; // 12.414F es flotante, correcto float y = 12.414; // 12.414 es doble, incorrecto Cuando se realizan operaciones como la suma y los dos operndoos son de tipo de dato primitivo, el tipo de dato resultante es determinado por el operando de tipo ms grande, por lo que en algunos casos podra ser un problema de sobre flujo, por ejemplo: short a, b, c; a = 1; b = 2; c = a + b; Causa un error debido a que los tipos short involucrados en la operacin elevan las funciones al tipo int por lo que se vuelve indispensable un ajuste, a no ser que la variable c sea declarada como int, para subsanar este problema se sugiere realizar un cast en la operacin que permita el ajuste. c = (short) (a + b);
Constantes

Java emplea la palabra clave final para indicarle al compilador de que las variables declaradas bajo esta etiqueta debern comportarse como si fueran constantes. Esto indica que su valor no puede ser modificado una vez que se haya declarado e inicializado. Las constantes se declaran de la siguiente manera: final double PI = 3.14159; final char VALOR = S; final String MENSAJE = Error; Si se intenta cambiar el valor de las variables tipo final desde una aplicacin, se genera un error de compilacin. Es importante recordar, como medida de diseo, que los nombres de las constantes deben escribirse con letras maysculas para facilitar su ubicacin dentro del cdigo. Tambin los las funciones miembro (mtodos) pueden ser de tipo final, en cuyo caso no podrn ser sobrecargados.

14

UAA Sistemas Electrnicos

Programacin en Java

Eduardo Serna-Prez

Tipos de Datos Referenciados

Es aquel tipo de dato que almacena una direccin de memoria donde aloja la referencia a un bloque de memoria asignado de manera dinmica. Aqu podemos encontrar varias clases que ya se encuentran implementados dentro del API de Java, pero inicialmente podramos proporcionar una clasificacin burda de la siguiente manera: o o o o
o

Arreglo Cadena de caracteres Wrappers Definidas por usuario

<tipo> [ ] <identificador> String Character, Byte, Short, Integer, ... class <Identificador> { }

Tipo de dato Arreglo

Los arreglos son estructuras de datos que agrupan elementos del mismo tipo (homogneo). Los arreglos nos permiten referirnos a grupos de objetos por un nombre comn. Los arreglos unidimensionales, son arreglos que cuentan nicamente con una fila y con una serie de columnas que determinan la dimensin del arreglo. En Java es posible crear arreglos de cualquier tipo, ya sea datos primitivos o definido por el usuario (objetos).
Declaracin de arreglos unidimensionales

La sintaxis es la siguiente: <tipo> [ ] <nombre-arreglo>; Cuando queremos que una variable sea un arreglo nicamente anteponemos los corchetes, esto le indica al compilador que la variable de la derecha ser una referencia de arreglo. En el lenguaje Java un arreglo es un objeto an cuando el arreglo sea de tipos de datos primitivos, adems como el resto de los objetos, la declaracin no crea el objeto por si mismo. En su lugar la declaracin de un arreglo crea una referencia que puede ser empleada para un arreglo. El espacio en memoria usado para los elementos del arreglo, es dinmico, por lo que es necesario emplear el operador new para crear el espacio para los elementos del arreglo.
Creacin de referencias para arreglos

Se deben crear arreglos como objetos, empleando el operador new, por ejemplo, suponga la creacin de un arreglo de caracteres (primitivo). char[] s; s = new char[26]; for ( int i=0; i<26; i++ ) { s[i] = (char) ('A' + i); } El operador new crea un arreglo con 26 caracteres que sern inicializados cada uno de sus elementos a carcter vaci (\u0000). De esta forma el arreglo esta listo para ser manipulado. Recuerde que el lmite de los arreglos va de 0 a N-1.

15

UAA Sistemas Electrnicos

Programacin en Java

Eduardo Serna-Prez

Debe tomar en cuenta que todo objeto referenciado en java es por defecto un objeto de la clase Object, la clase Object es la clase ms alta en la jerarqua de objetos referenciados y ms adelante veremos que tiene varios mtodos y propiedades asociadas a l y que son transferidas al resto de los objetos referenciados por medio de un esquema de herencia. Observe como el objeto char [] s, es inicializado mediante el operador new, que es el responsable de asignar un bloque de memoria temporal a todos los objetos referenciados. Ahora debemos percatarnos que siendo un tipo de dato referenciado, como tal, tendr propiedades como por ejemplo el nmero de elementos inicializados en l (length) que ser su longitud. public class ArrayChar { public static void main( String args [] ){ char[] s; int dim = 26; s = new char[ dim ]; for ( int i=0; i < 26; i++ ) { s[i] = (char) ('A' + i); } System.out.print("El abecedario es "); for ( int i=0; i < s.length; i++ ) System.out.print(s[i]); System.exit(0); } }
Inicializacin de arreglos

Cuando se crea un arreglo, cada elemento es inicializado. Para el caso del arreglo de caracteres vimos que cada carcter es inicializado por defecto a (\u0000) lo que indica que an no ha sido ingresado ningn dato dentro de la casilla. Adems es posible crear inicializaciones de manera corta como la siguiente: char [] vocales = { 'a', 'e', 'i', 'o', 'u'};

O tambin de manera equivalente: char [] vocales; vocales = new char [ 5 ]; vocales [0] = 'a'; vocales [1] = 'e';
Arreglos multidimensionales

Java provee un mecanismo muy eficiente y sencillo para la construccin de arreglos multidimensionales, solo es necesario indicar el numero de dimensiones con las que se desea trabajar, es decir, as como con los vectores, solo es necesario agregar una dimensin usando los corchetes.

16

UAA Sistemas Electrnicos

Programacin en Java

Eduardo Serna-Prez

Podemos crear arreglos multidimensionales de la siguiente manera: int [ ][ ] matriz = matriz[0] = new int matriz[1] = new int matriz[2] = new int new int [2][ ]; [5]; [3]; [3]; /*** error fuera de ndice ***/

El objeto que es creado en la primera llamada con new es un arreglo que contiene dos elementos. Cada elemento es una referencia nula (null) a un elemento de tipo array of int, y debe ser inicializada cada elemento de manera separada, de manera que cada elemento apunta a su arreglo. Debido a esto es posible crear matrices no-rectangulares. En algunos casos esta inicializacin podra parecer tediosa, pues es ms comn emplear matrices rectangulares, a continuacin vemos como sera la declaracin e inicializacin de una matriz de enteros: int [ ][ ] matriz = new int [4][5]; Veamos ahora un ejemplo de una matriz de valores dobles a la que se le asignan valores de manera aleatoria empleando una funcin esttica llamado random() perteneciente a la clase Math, veremos ms adelante que al igual que System.out, Math no requiere construir una instancia de la misma para ser usada: public class MatrizRand { public static void main( String args [] ) { int f = 5, c = 2; double m[][] = new double [f][c]; System.out.print("numero de filas " + f); System.out.print("numero de columnas " + c); for ( int i = 0; i < m.length; i++ ) { for ( int j = 0; j < m[i].length; j++ ) m[i][j]= Math.random(); } for ( int i=0; i < m.length; i++ ) { for ( int j=0; j < m[i].length; j++ ) System.out.print(" ("+ i +"," + j + ") -> " + m[i][j]); System.out.println(); } System.exit(0); } } Como ya se menciono los arreglos en java son objetos, por lo que el nmero de elementos que pueden ser almacenados forma parte de sus atributos. Un acceso a un lmite fuera de su longitud produce un error en tiempo de ejecucin (out of index). Se recomienda ampliamente emplear el atributo length para iterar dentro de un arreglo.

17

UAA Sistemas Electrnicos

Programacin en Java

Eduardo Serna-Prez

Re-dimensin de arreglos

Despus de que ha sido creado un arreglo, no puede ser redimensionado su tamao. Sin embargo puede ser empleada la misma referencia a la variable para declarar una nueva referencia del arreglos por completo. int [] arreglo = new int [6]; arreglo = new int [10]; En este caso, el primer arreglo pierde la referencia a todos sus componentes, a no ser que sean almacenados en algn lugar previo a la nueva redefinicin del nuevo bloque de memoria dinmico.
o Tipo de dato String

Existen, adems de los arreglos, otro tipo de dato referenciado, la Clase String (o simplemente String) los objetos de la clase String tienen la peculiaridad de almacenar la referencia a una literal alfanumerica. Como objeto los Strings tienen una coleccin de mtodos que les provn de una mayor funcionalidad con otros objetos. La clase String es una de tantas clases incluidas en la librera de clases de Java (API). La clase String provee la habilidad de almacenar secuencias de caracteres y nmeros, y manipularlos de forma sencilla. Los objetos String pueden ser declarados de cinco maneras: " String nombre = Juan Prez; " String nombre = new String(); String nombre = ; // equivalente " String s = Juan Prez; String nombre = new String(s); String nombre = new String(Juan Prez); // equivalente " char [] s = {a,e,i,o,u}; String nombre = new String(s); " char [] s = {a,e,i,o,u}; String nombre = new String(s, 1, 3); // eio La clase String es la nica que permite construir objetos de ese tipo sin emplear el operador new, que es el empleado para crear cualquier referencia (objeto) en Java. Como hemos visto las referencias u objetos adquieren propiedades directas de una clase superior llamada Object, para el caso de los datos referenciados como el String se tiene el metodo length() que nos indica el numero de caracteres contenidos en un String. Pero es importante recordar que dicha clase define muchas mas funciones que pueden resultar muy til para el manejo de cadenas. A continuacin se comentan algunas de ellas, pero es importante recordar que se cuentan con muchas ms. A continuacin asuma que s1 y s2 son objetos de tipo String:

18

UAA Sistemas Electrnicos

Programacin en Java

Eduardo Serna-Prez

public class Prueba { public static void main(String [] args) { String s1 = "hola"; String s2 = new String("mundo"); if ( s1.equals(s2) ) System.out.println("iguales"); else System.out.println("diferentes"); s1 = s1.toUpperCase(); s2 = s1.concat(s2); String s3 = s2 + "bizarro".toUpperCase(); System.out.println(s3); } } o o o s1.equals(s2), regresa verdadero (true) en caso de que los caracteres de s2 correspondan exactamente con los de s1. s1.toUppercase(), regresa un objeto de tipo String con exactamente cada carcter de s1 en mayscula. s1.charAt(n), regresa como valor el n-simo carcter en un String

public class Prueba { public static void main(String [] args) { String s1 = "un buen saludo hola, como estas!"; String s2 = "hola"; int inicio = s1.indexOf(s2); int fin = inicio + s2.length(); String s3 = s1.substring(inicio,fin); System.out.println(s3); } } Recuerde tambin que los objetos de tipo String pueden ser fcilmente concatenados empleando el operador de +, por ejemplo: String s1 = "Hola"; String s2 = "mundo"; String s3 = s1 + " " + s2; Inclusive el objeto esttico System.out.print() puede concatenar una serie de valores sin importar el tipo, por ejemplo: int edad = 23; System.out.println("Hola mi edad es " + edad); En realidad el objeto String es el nico objeto en java que cuenta con las caractersticas de concatenacin empleando el operador de + (suma) y asignacin directa empleando el operador =. Desafortunadamente son los nicos operadores en java que tienen ese comportamiento, adems de los wrappers, es importante recordar que la sobrecarga de

19

UAA Sistemas Electrnicos

Programacin en Java

Eduardo Serna-Prez

operadores no se encuentra disponible en el lenguaje como tal, por lo que no es posible implementarla, como es el caso de C++ o C#. Para el programador dedicado a la construccin de aplicaciones finales que tiene una gran necesidad de manejar nombres e incluso cambios de valores entre tipos reconocer en este lenguaje muchos beneficios que no son tan palpables en otros lenguajes de programacin. public class ArrayOfString { public static void main( String args [] ) { String [] nombres = {"Moira", "Paula", "Seth"}; System.out.println("tamao del arreglo " + nombres.length + '\n'); for (int i = 0; i < nombres.length; i++) System.out.println("nombre " + nombres[i] + " tiene " + nombres[i].length() + " caracteres"); System.exit(0); } } Tambin es posible construir arreglos de tipo String, solo debe de recordar que para este caso existen 2 mecanismos para obtener la longitud, una la del arreglo length (propiedad) y otro la longitud total de caracteres por cada elemento length().
o Clases Envoltorio (Wrappers)

Las clases envoltorio (Wrappers) son clases que proveen un mecanismo para interactuar con algn otro tipo de dato abstracto. Para el caso de los tipos de datos primitivos, las clases envoltorio son un mecanismo ms refinado de programacin para representar valores primitivos cuando un Objeto es requerido. Java provee ocho tipos de clases envueltas para datos primitivos:
Tipo primitivo byte short int long float double char boolean Clase envoltorio Byte Short Integer Long Float Double Character Boolean Argumentos del constructor byte o String short o String int o String long o String float, double o String double o String char boolean o String

Las clases Wrapper de primitivas numricas se derivan de la clase Number que deriva de Object. Cada una de estas clases contiene un valor primitivo del tipo relacionado, por ejemplo un objeto Integer contiene un valor int como atributo. De manera que estas clases envoltorio (Wrappers) no son ms que clases que modelan los tipos de datos primitivos tales como enteros flotantes, precisamente estos tipos primitivos son los nicos elementos en Java que no son clases. Estos Wrappers nos permiten introducir algunos conceptos interesantes de programacin, como por ejemplo el autoboxing que consiste en convertir un tipo de dato primitivo a un tipo compuesto,

20

UAA Sistemas Electrnicos

Programacin en Java

Eduardo Serna-Prez

aunque tambin es posible realizar el proceso inverso, el automatic unboxing que trata de convertir un objeto compuesto a un valor primitivo. Este tipo de conversin es generalmente transparente al usuario: autoboxing, los valores enteros son empacados automticamente en un tipo Integer empleando el operador de asignacin. Integer i, j; // objetos i = 5; // al objeto i se le asigna un valor nativo j = 4; unboxing, los valores son desempacados automticamente del tipo Integer al tipo nativo int para ser procesados y finalmente se asigna a un tipo nativo int. int r = i + j; Existe una diferencia significativa entre los tipos primitivos y sus Wrapper; ya que los tipos primitivos pasan como argumento por valor a los mtodos, mientras que los objetos pasan por referencia. Esto implica una ventaja en cuanto a eficiencia, pues es posible modificar el valor de una referencia tipo Wrapper. Por otro lado las referencias Wrapper ofrecen funcionalidad con varios mtodos estticos de manera que es posible usarlos sin necesidad de crear un objeto. Por ejemplo la clase Integer cuenta con un mtodo denominado parseInt que permite convertir una cadena de caracteres alfanumrica a un valor de una base en particular: String s = "0001101"; int x = Integer.parseInt(s,2); // x conserva el valor 13 Casi todos estos mtodos pueden utilizarse en forma esttica, de manera que, no siempre sea necesario crear una instancia para manipularlos. Por ejemplo: int i; i = Float.valueOf(12.45).intValue(); Como se habr observado no existe una librera del tipo ctype de ANSI/C que nos permita manipular caracteres de manera independiente, para ello se emplea la clase Character que cuenta con varios mtodos que permite manipular caracteres simples. Por ejemplo: String s = "Madero 122"; char [] name = s.toCharArray(); for (int index = 0; index < name.length ; index++) if ( Character.isDigit(name[index]) ) System.out.println("digito " + name[index]); else if (Character.isLetter(name[index])) System.out.println("letra " + name[index]); Tambin es posible crear arreglos de objetos Wrapper, de manera que cada elemento del arreglo corresponder a un objeto particular:

21

UAA Sistemas Electrnicos

Programacin en Java

Eduardo Serna-Prez

Double [] arreglo = {2.3,4.5}; Integer [][] matriz; El siguiente ejemplo construye un arreglo de caracteres a partir de un objeto String, una vez transformado puede ser manipuladode forma mas simple por su operador de indice [ ]. De esta forma el Wraper de Caracters es usado para invertir las mayusculas a minuscular y viceversa. public class Main { public static void main(String args[]) { int cont = 0; String frase = "Esto es una cadena"; char [] array = frase.toCharArray(); //regresa un arreglo char for (int i = 0; i < array.length; i++) { if (Character.isLetter(array[i])) array[i] = Character.isLowerCase(array[i]) ? Character.toUpperCase(array[i]):Character.toLowerCase(array[i]); if (Character.isDigit(array[i])) cont++; } frase = String.valueOf(array); //regres el arreglo a String System.out.print(frase + cont); } } Operadores Lgicos, Relacionales y Aritmticos Los operadores son elementos del lenguaje que nos permiten construir expresiones, dichas expresiones las podemos dividir bsicamente en: lgicas, relacionales y aritmticas. A continuacin se explicaran por grupo los operadores disponibles en Java. Operadores Lgicos los operadores lgicos evalan expresiones para obtener un resultado boolean, que puede ser cierto (true) o falso (false). Los operadores bolanos soportados son !, &, ^ y | para las operaciones algebraicas de NOT, AND, XOR y OR, respectivamente. Cada una de estas regresa un resultado booleano. Los operadores && y || son equivalentes a los operadores & y |. Operadores Relacionales tambin existen los operadores ==, !=, >, >=, <, <= para las operaciones de igualdad, diferente, mayor, mayor igual, menor, menor igual, respectivamente. Operadores Aritmticos Java emplea exactamente los mismos operadores aritmticos que el lenguaje C/C++, como +, -, * / y % para las operaciones de suma, resta, multiplicacin, divisin y modulo, respectivamente. Adems existen los operadores combinados como el incremento y decremento unitario ++ y --. Y combinaciones de asignacin con operacin aritmtica, como *=, +=, /=, %=, y que nos permiten realizar operaciones sintetizadas como X = X + Y en X += Y.

22

UAA Sistemas Electrnicos

Programacin en Java

Eduardo Serna-Prez

Como algo adicional Java implementa el operador condicional idntico al de C/C++: <expresin_boolean>?<expresion1>:<expresion2> Por ejemplo, si el valor lgico de una comparacin es cierta la primera expresin ser almacenada, en caso contrario la expresin 2 ser asignada: int x = (5 == 3) ? 1 : 0; Precedencia de operadores A continuacin se presenta una lista de los operadores descritos con anterioridad, en el listado se presentan dichos operadores ordenados de mayor precedencia a menor precedencia:
Operacin operadores unarios multiplicacin y divisin: suma y resta: operadores relacionales: igualdad y desigualdad: conjuncin: disyuncin: operador condicional: operadores de asignacin: Smbolo ++, --, !, - +, type-cast *, /, % +, <, >, <=, >= ==, != && || ?: =, +=, -=, *=, /=, %=

Los operadores aritmticos siguen las mismas reglas de precedencia que el resto de los lenguajes que son: la multiplicacin y divisin, modulo, suma y resta. Para los operadores relacionales y lgicos la interpretacin de evaluacin es de izquierda a derecha. 1.4 Unidad Minima de Programacin

En Java la clase es la estructura primordial para el diseo de programas, todo programa en java debe ser inicializado, conceptualizado y visto como una clase, adems todo programa Java arranca su operacin desde la funcin main (principal). class NombreClase { public static void main (String [] args) { /* Cuerpo del programa principal */ } } La funcin main siempre debe ser vista como el punto de arranque para el diseo y operacin del programa completo, mas adelante veremos que los objetos no son mas que estructuras de datos complejas (es decir, tipos de datos abstractos) que interactan entre s. Dentro de ellos es posible crear progrmas muy simples que demuestren el

23

UAA Sistemas Electrnicos

Programacin en Java

Eduardo Serna-Prez

comportamiento completo de las sentencias de control e inclusive desarrollar funciones simples que puedan realizar una accin especifica definida por el programador.
1.4.1 Sentencias de Control

Las estructuras de decisin son estatutos condicionales que nos permiten la ejecucin selectiva de porciones de programa (bloques de cdigo) de acuerdo al valor de una expresin. Java soporta los estatutos if y switch, que nos permiten ramificaciones de ejecucin en dos o mas ramas.
Sentencia if else

La sintaxis de la sentencia es: if ( <expresin booleana>) [ { ] <bloque de estatutos si la expresin es cierta> [ } ] else [ { ] <bloque de estatutos si la expresin es falsa> [ } ] Ejemplo: public class EjemploIF { public static void main(String [] arg) { int x = (int)(Math.random() * 100); if (x > 50) System.out.println("Mayor a 50 "+x); else { System.out.println("Menor a 50 "+x); x = 0; } } }
Sentencia switch

La sintaxis de la sentencia es: switch ( <expresin>) { case <constante1> : <bloque de estatutos> [break;] case <constante2> : <bloque de estatutos> [break;] default : <bloque de estatutos> [break;] } En el estatuto switch el valor de la expresin debe ser compatible con un entero y puede existir la promocin.

24

UAA Sistemas Electrnicos

Programacin en Java

Eduardo Serna-Prez

La etiqueta default especifica que el segmento de cdigo ser ejecutado si el valor de la expresin nunca coincide con alguno de los casos. Una estatuto return puede ser usado en lugar de break. Adems, si switch esta en un ciclo, el estatuto continue permitira la salida del estatuto switch. Por ejemplo: class Switch1{ public static void main(String args[]) { int k = (int)(Math.random() * 16); switch(k){ case 2: System.out.println(" case k = 2"); break; case 4: System.out.println(" case k = 4"); break; case 8: System.out.println(" case k = 8"); break; default: System.out.println(" case default " + k); } } } Las estructuras de repeticin nos permiten ejecutar bloques de cdigo de manera repetitiva. Java soporta 3 tipos de estructuras de repeticin: for, while y do. Los ciclos for y while, verifican la condicin antes de ejecutar el bloque del ciclo. Mientras que do ejecuta el bloque de cdigo y verifica la condicin al final.
Sentencia for

La sintaxis para el estatuto for es: for(<inicia expresin>; <verifica expresin>; <altera expresin>) [{] <estatuto o bloque> [}] Ejemplo: public class ForLoop { public static void main(String[] args) { for ( int i = 0; i < 10; i++ ) System.out.println(i + " el cuadrado es " + (i*i)); } }

25

UAA Sistemas Electrnicos

Programacin en Java

Eduardo Serna-Prez

Ejemplo: import static java.lang.System.out; class Prueba { public static void main(String [] args) { int [] x = {2,3,5,6,4,1,0}, y = {5,4,2,1,3,6,7}; int r = 0; for (int i = 0; i < x.length; i++) r+= (x[i] * y[i]); out.println("producto escalar es " + r); return; } }
Sentencia while

La sintaxis para el estatuto while es: while (<verifica expresin>) [{] <estatuto o bloque> [}] class While { public static void main(String [] arg) { int i = 1; while (i < 5) { System.out.println("i = "+ i); i++; } } }
Sentencia do - while

La sintaxis para el estatuto do/while es: do [{] <estatuto o bloque> [}] while (<verifica expresin>) class DoWhile { public static void main(String [] arg) { int i = 1; do { System.out.println("i = "+ i); i++; } while (i < 5); } }

26

UAA Sistemas Electrnicos

Programacin en Java

Eduardo Serna-Prez

Sentencia break, continue y return

En algunos casos se tendr la necesidad de eliminar o modificar la iteracin en bucle de control, para ello se pueden emplear las etiquetas break y continue. break: Rompe el flujo de un bloque switch y de repeticin mas cercano a l. Lo que provoca que el flujo de control sea roto y se salga intempestivamente de ciclo. do { lista-de-estatutos; if (condicin) { break; } lista-de-estatutos; }while(expresion); //break provoca que el flujo continu aqu continue: Realiza un salto al final del ciclo de control (verificacin) y se reintegra al ciclo de control. do { lista-de-estatutos; if (condicin) { continue; //regresa a do } lista-de-estatutos; } while (expresion); return: Realiza el regreso de llamada a funcin en cualquier punto que se encuentre.

Sentencia for-each

Es una sentencia que acta con elementos que son catalogados como elementos iteradores. class Prueba { public static void main(String [] args) { int [] x = {2,3,5,6,4,1}; out.println("el vector es "); for ( int i : x ) System.out.print( i + " "); return; } }
1.4.2 Mtodos estticos

La forma ms sencilla de realizar programas de manera estructurada en java es empleando funciones o mtodos estticos, que son procedimientos o subrutinas medianamente independientes pero muy poco alejados del manejo de datos como en las clases. En realidad un mtodo esttico est involucrado de manera local a la clase que lo construye. Hasta el momento solo realizaremos mtodos estticos, pues necesitamos adquirir cierta habilidad antes de retomar nuevamente la construccin de clases.

27

UAA Sistemas Electrnicos

Programacin en Java

Eduardo Serna-Prez

Como ya hemos mencionado la unidad mnima de programacin en java es la clase, de manera que los mtodos estticos o procedimientos estarn declarados dentro de la clase, la sintaxis para la declaracin de procedimientos estticos es la siguiente: <modificador> class NombreClase { public static void main( String [] args ) { } <modificador> static <tipo> nombreProcedimiento(<argumentos>) { // declaracin de variables locales // lista de sentencias } } Los modificadores de acceso permiten determinar el alcance del procedimiento en este caso ser public, debido a que pretendemos que el procedimiento sea visto desde fuera de la clase principal, en otro caso podra ser omitido de manera que el procedimiento solo ser visto de manera local a la clase (o paquete). El modificador static determina que se trata de un procedimiento de clase por lo que no ser necesario construir un objeto de la clase para poder emplear dicho procedimiento. El tipo de dato que regresar el procedimiento vara segn del tipo y caractersticas de la funcin, los tipos de datos disponibles podran ir desde tipos de datos nativos (int, flota, void, char, etc) hasta tipos de datos referenciados (arreglo, String, wrapper o un tipo de dato definido por el usuario un objeto de clase). La lista de argumentos son todos aquellos valores que requieren ser enviados a una funcin para que pueda realizar sus sentencias, estos argumentos pueden ser desde tipos de datos nativos hasta referenciados. Es importante recordar que las variables definidas dentro de los mtodos son llamadas variables locales (algunas veces llamadas variables automticas, temporales o de pila), stas deben ser inicializadas explcitamente antes de ser usadas y son vistas nicamente por la funcin. Suponga que requerimos construir un procedimiento suma que nos permita sumar un par de valores: public class Main { public static void main(String[] args) { int x = 1, y = 2, z; z = suma(x,y); System.out.print("el resultado es " + z); } static int suma(int a, int b){ return a+b; } }

28

UAA Sistemas Electrnicos

Programacin en Java

Eduardo Serna-Prez

Observe que el modificador de acceso puede ser omitido si se trata de una funcin local a la clase principal, de manera que el procedimiento recibe un par de valores y devuelve el resultado. import static java.lang.System.out; class Prueba { public static void main(String [] args) { int [] x = {2,3,5,6, 9,1,0}; out.println("la sumatoria es " + suma(x)); } static int suma( int [] tem ) { int r = 0; for (int i = 0; i < tem.length; i++) r+= tem[i]; return r; } } Inclusive podemos integrar el concepto de sobrecarga que ya se tiene claramente entendido: class Prueba { public static void main(String [] args) { int [] x = {2,3,5,6, 9,1,0}; int val = 10; out.println("suma x[0] y val "+suma(x[0], val)); out.println("la suma del arreglo " + suma(x)); return; } static int suma(int a, int b){ return a+b; } static int suma( int [] tem ) { int r = 0; for (int i = 0; i < tem.length; i++) r+= tem[i]; return r; } } Las variables locales son creadas cuando se realiza la ejecucin de un mtodo y son destruidas al finalizar el mtodo, a esto se debe el nombre de variables temporales. Las variables locales deben ser inicializadas manualmente antes de ser usadas. El compilador genera un error si puede determinar una condicin donde las variables son usadas antes de ser inicializadas. En la siguiente unidad veremos mas a detalle esta caracterstica de construccin de programas empleando el mecanismo de orientacin a

29

UAA Sistemas Electrnicos

Programacin en Java

Eduardo Serna-Prez

objetos. Por el momento emplearemos solo funciones estticas a la clase para elaborar programas sencillos. Una forma alternativa y quizas mas correcta del programa anterior sera: public class Main { public static void main(String [] args) { int [] x = {2,3,5,6, 9,1,0}; int val = 10; out.println("suma x[0] y val " + A.suma(x[0], val)); out.println("suma del arreglo " + A.suma(x)); return; } } class A { static int suma(int a, int b){ return a+b; } static int suma( int [] tem ) { int r = 0; for (int i = 0; i < tem.length; i++) r+= tem[i]; return r; } } Como podra darse cuenta se esta construyendo una clase que contiene los metodos estaticos y en su momento se le solicita a la clase que los ejecute. Otras implmentaciones simples de los mtodos ya vistos son los siguientes: class Vector { public static void main(String [] args) { int [] x = {2,3,5,6,4,1,0}, y = {5,4,2,1,3,6,7}; System.out.println("producto escalar" + prodEscalar(x,y)); return; } static int prodEscalar( int [] a, int [] b ) { int r = 0; for (int i = 0; i < a.length; i++) r+= (a[i] * b[i]); return r; } }

30

UAA Sistemas Electrnicos

Programacin en Java

Eduardo Serna-Prez

Ejemplo: class Matriz { public static void main(String [] args) { int [][] x = {{2,3},{5,6},{4,1}}; double [][] r = null; double e = 4.0; r = matPorEscalar(x,e); System.out.println("la matriz es "); mostrar(r); return; } static double [][] matPorEscalar( int [][] tem, double n ) { double [][] res = new double [tem.length][tem[0].length]; for (int i = 0; i < tem.length; i++) for (int j = 0; j < tem[i].length; j++) res[i][j] = tem[i][j] * n; return res; } static void mostrar( double [][] tem) { for (int i = 0; i < tem.length; i++) { for (int j = 0; j < tem[i].length; j++) System.out.print(tem[i][j] + " "); System.out.println(); } return; } } Ejemplo: class Prueba { public static void main(String [] args) { int [] x = {2,3,5,6,4,1}; out.println("la matriz es "); mostrar(x); return; } static void mostrar( int [] tem) { for ( int i : tem ) out.print( i + " "); return; } }

31

UAA Sistemas Electrnicos

Programacin en Java

Eduardo Serna-Prez

1.4.3

Aplicando sentencias de control y mtodos estticos

A continuacin emplearemos el diseo de una funcin esttica muy simple con el objetivo de ver la independencia de la funcin y mostrar de manera clara lo referente al paso de parmetros que sigue siendo parte fundamental en la construccin de herramientas modulares. public class Sumatoria { public static void main( String args[] ) { int f = 5, c = 2; double m[][] = new double [f][c]; System.out.print("numero de filas " + f); System.out.print("numero de columnas " + c); for ( int i = 0; i < m.length; i++ ) { for ( int j = 0; j < m[i].length; j++ ) m[i][j]= Math.random(); } for ( int i=0; i < m.length; i++ ) { for ( int j=0; j < m[i].length; j++ ) System.out.print(" ("+ i +"," + j + ") -> " + m[i][j]); System.out.println(); } System.out.println(" sumatoria " + sumatoria(m)); System.exit(0); } public static double sumatoria(double [][] lista) { double total = 0; for( int i = 0; i < lista.length; i++ ) for ( int j = 0; j < lista[i].length; j++ ) total += lista[i][j]; return total; } } Es importante observar como el paso de parmetros se puede realizar con cualquier tipo de dato reconocido por la sintaxis de java, en ste caso tomamos una matriz y la enviamos como parmetro a una funcin que se encargara de procesarla para una sumatoria de sus elementos que la componen, al final regresa como valor el resultado de dicha operacin. Una versin un poco distinta, pero versando sobre la misma idea de manipulacin de datos compuestos como las matrices es la siguiente, observe que en ste caso se emplean un par de procedimientos. El primero se encarga de recolectar los datos para llenar una matriz con nmeros aleatorios, posteriormente los datos son transferidos a una matriz local a la funcin main la cual se encargara de transferir dicho dato a otro procedimiento vaco(void).

32

UAA Sistemas Electrnicos

Programacin en Java

Eduardo Serna-Prez

public class Captura { public static void main( String args[] ) { int filas = 5, columnas = 2; double matriz[][] = llenadoAleatorio(filas, columnas); mostrar(matriz); return; } static double [][] llenadoAleatorio(int f, int c) { double mat[][] = new double [f][c]; //matriz local System.out.println("filas, columnas " + f+","+c); for ( int i = 0; i < mat.length; i++ ) { for ( int j = 0; j < mat[i].length; j++ ) mat[i][j]= Math.random();//llenado aleatorio } return mat; //matriz de regreso } static void mostrar(double [][] mat){ for ( int i=0; i < mat.length; i++ ) { for ( int j=0; j < mat[i].length; j++ ) System.out.print(" ("+ i +"," + j + ") -> "+ mat[i][j]); System.out.println(); } return; } } Finalmente una versin alternativa para la suma de matrices podra verse de la siguiente manera: public class Matrices { public static void main(String[] args) { // TODO code application logic here double [][] x = {{1,2},{3,4}}; double [][] y = {{4,3},{2,1}}; double [][] res = suma( x, y ); mostrar(res); } public static double [][] suma(double [][] a,double [][] b){ if (a.length != b.length || a[0].length != b[0].length) return null; double [][] calc = new double [a.length][a[0].length]; for (int f = 0; f < calc.length; f++) for(int c = 0; c < calc[f].length; c++) calc[f][c] = a[f][c] + b[f][c]; return calc; }

33

UAA Sistemas Electrnicos

Programacin en Java

Eduardo Serna-Prez

public static void mostrar( double [][] m ) { for (int f = 0; f < m.length; f++){ System.out.println(); for(int c = 0; c < m[f].length; c++) System.out.print(m[f][c]+"\t"); } } } Ejemplo: import java.util.Scanner; public class Main { public static void main(String[] args) { System.out.print("valor de m y n"); Scanner cin = new Scanner(System.in); int m = cin.nextInt(); int n = cin.nextInt(); System.out.println(" res " + a(m,n)); } static int a(int m, int n) { if (m == 0) return n + 1; if (m > 0 && n == 0) return a(m - 1, 1); //if(m > 0 && n > 0) return a(m -1, a(m, n -1)); } } 1.5 Funciones de entrada y salida estndar

La mayora de las aplicaciones deben interactuar con el usurario. Dichas interacciones estn algunas veces acompaadas con datos de entrada y de salida a la consola (usando el teclado como entrada estndar y la ventana de Terminal como salida). Java soporta la entrada y salida de datos desde consola empleando 3 tipos de variables, que estn contenidas en la librera de clases de java (System). Referenciada como java.lang.System: La variable System.out es un objeto PrintStream que se refiere (inicialmente) a la ventana de Terminal donde las aplicaciones son ejecutadas. La variable System.in es un objeto InputStream que se refiere (inicialmente) al teclado del usuario. La variable System.err es un objeto de tipo PrintStream que se refiere (inicialmente) a la ventana de Terminal.

El manejo de entrada y salida de datos en java no es uno de los ms eficientes entre los lenguajes de programacin actuales, de hecho resulta bastante frustrante al inicio, pero gradualmente se llega a entender el mecanismo empleado principalmente empleado en la entrada de datos estndar.

34

UAA Sistemas Electrnicos

Programacin en Java

Eduardo Serna-Prez

1.5.1

Salida de datos por pantalla

La salida de datos se realiza a travs de la funcin print y println del objeto System.out, esto indica que la salida de datos ser directa. Los mtodos imprimen objetos Strings por defecto por lo que no es necesario indicar la tipificacin en una plantilla. El mtodo print imprimir strings (elementos concatenados) directamente en la salida y el cursos permanecer en el punto siguiente a la impresin, por el otro lado println imprimir un salto de lnea despus de su ejecucin. System.out.println(Valor + 12 + + valor + 12.22);
1.5.2 Lectura de datos por teclado

La entrada de datos se puede realizar bsicamente de 3 maneras distintas, partiremos desde un esquema que se empleaba en un inicio y llegaremos hasta un esquema muy sencillo que se emplea en las versiones ms recientes. Entrada de flujo de bytes es uno de los esquemas mas empleado en las primeras versiones de java, empleamos la llamada al mtodo read() del objeto System.in. Desafortunadamente es indispensable emplear el bloque try"catch, pues la capturan filas de bytes provoca errores. Debido a esta deficiencia en el funcionamiento, es necesario depositar los bytes en un arreglo de caracteres, y as posteriormente ser transformados a tipos nativos como texto (string), entero o real. Para esto emplearemos un objeto de la clase StringBuffer que permita manipular un String como pila de caracteres, depositando cada uno de los caracteres capturados desde teclado.
import java.io.*; public class Captura1 { public static void main(String[] args) { String str; // creamos un objeto para depositar los caracteres System.out.print("Dame un texto "); StringBuffer buffer = new StringBuffer(); char c; try { // capturamos caracteres hasta encontrar un enter while ( (c = (char) System.in.read() )!='\n' ) buffer.append(c); //los concatenamos en el buffer } catch(IOException ex){ }// convertimos el buffer en string str = buffer.toString().trim(); System.out.println("la cadena 1 es " + str ) //eliminamos el contenido para usarlo nuevamente buffer.delete(0,buffer.length()); float valor; // capturamos ahora un numero System.out.print("Dame un numero "); try { // capturamos caracteres hasta encontrar un enter while ( (c = (char) System.in.read() )!='\n' ) buffer.append(c); } catch(IOException ex) { } // convertimos el buffer en flotante valor = Float.parseFloat(buffer.toString().trim()); System.out.println("el valor es " + valor); } }

35

UAA Sistemas Electrnicos

Programacin en Java

Eduardo Serna-Prez

Entrada de flujo de caracteres la captura de bytes es muy complicada, en su lugar resulta ms sencillo capturar caracteres Unicode, para esto se desarrollaron dos objetos que podran facilitar esta tarea. InputStreamReader es una clase que nos permite direccionar el flujo de entrada a algn dispositivo especifico, en este caso System.in. Una vez que esta indico el flujo de entrada, es necesario almacenar los caracteres entrantes en un objeto String, para ello emplearemos un objeto BufferedReader el cual nos permitir almacenar la entrada de datos.
import java.io.*; public class Captura2 { public static void main(String [] arg) { String s; // crea un lector de buffer para leer cada linea de teclado InputStreamReader lector = new InputStreamReader(System.in); // crea un buffer para almacenar la entrada de lector BufferedReader in = new BufferedReader(lector); System.out.print("captura de texto "); try { // captura los datos de teclado s = in.readLine(); System.out.println("texto :" + s); } catch(IOException e) {} System.out.print("captura de valor "); try { // captura los datos de teclado s = in.readLine(); int valor = Integer.parseInt(s); //regresa el numerico System.out.println("valor :" + valor); in.close(); // cerramos el flujo de entrada } catch(IOException e) {} } }

Entrada de flujo de tipos primitivos y strings en la versin 5 de java se incorporo un mecanismo que nos permite manipular la entrada de datos de manera, transparente y menos complicada. Para la captura se emplean expresiones regulares, es decir, el objeto fragmenta la entrada de datos en componentes o unidades independientes separadas por espacios en blanco. La clase Scanner cuenta con bastantes mtodos que facilitan la captura de datos, a continuacin se presenta un ejemplo sencillo de su uso, se deja al alumno investigar mas al respecto. import java.util.Scanner; public class Captura3 { public static void main(String [] arg) { Scanner s = new Scanner(System.in); //direccionamos System.out.println("ingresa el texto "); String str = s.next(); //leemos alfanumericos System.out.println("la cadena es "+ str); System.out.println("ingresa el numero "); float valor = s.nextFloat(); //leemos flotantes System.out.println("el numero es "+ valor); s.close(); } }

36

UAA Sistemas Electrnicos

Programacin en Java

Eduardo Serna-Prez

1.5.3

Ventanas de Dialogo simple para manejo de datos

Trabajar con la entrada de datos de consola, suele ser en ocasiones un fastidio ya que si los datos no fueron introducidos correctamente se romper el flujo normal del programa; en estos casos un cuadro de dialogo simple puede ayudarnos a capturar y enviar informacin a una pantalla emergente. La Creacin de cuadros de dilogo simples se realiza empleando objetos de tipo JOptionPane (javax.swing.JOptionPane).
Salida de datos showMessageDialog

Para la salida de datos simplemente aparecer un cuadro emergente indicando el mensaje y aparecer integrado un botn que permite el flujo del programa.
//ttulo e icono por defecto

JOptionPane.showMessageDialog(null,"Texto del mensaje."); //ttulo personalizado, icono de aviso JOptionPane.showMessageDialog(null,"Texto del mensaje.", "Ttulo del marco", JOptionPane.WARNING_MESSAGE); //ttulo personalizado, icono de error JOptionPane.showMessageDialog(null,"Texto del mensaje.", "Ttulo del marco", JOptionPane.ERROR_MESSAGE); //ttulo personalizado, sin icono JOptionPane.showMessageDialog(null,"Texto del mensaje.", "Ttulo del marco", JOptionPane.PLAIN_MESSAGE);

Entrada de datos showInputDialog

La entrada de datos puede realizarse de manera muy simple con este tipo de dialogo, el tipo de dato que regresa es un String, el cual puede ser opcionalmente promovido (cast). Una vez obtenido el valor puede emplearse algn mtodo de los Wrappers para transformarlo a numero. //pedir la introduccin de texto String s = (String)JOptionPane.showInputDialog(null, "Texto del mensaje:\n","Ttulo del marco", JOptionPane.PLAIN_MESSAGE);
Salida de datos showConfirmDialog

Tambien es posible determinar entre realizar o no una opcin: int r = JOptionPane.showConfirmDialog(null, "pregunta?"); if( r == JOptionPane.YES_OPTION ) JOptionPane.showMessageDialog(null, "Si"); else if( r == JOptionPane.NO_OPTION ) JOptionPane.showMessageDialog(null, "No");

37

UAA Sistemas Electrnicos

Programacin en Java

Eduardo Serna-Prez

Observe el siguiente ejemplo que muestra el uso de los objetos showInputDialog y showMessageDialog: import static java.lang.System.out; import javax.swing.*; public class Dialogos { public static void main( String args [] ) { String s = (String)JOptionPane.showInputDialog(null, "filas?\n","Input",JOptionPane.PLAIN_MESSAGE); int f = Integer.parseInt(s); s = (String)JOptionPane.showInputDialog(null, "columnas?\n","Input",JOptionPane.PLAIN_MESSAGE); int c = Integer.parseInt(s); double [][] m = new double [f][c]; JOptionPane.showMessageDialog(null, "filas " + f+'\n' +"columnas " + c); for ( int i = 0; i < m.length; i++ ) for ( int j = 0; j < m[i].length; j++ ) m[i][j]= Math.random(); for ( int i=0; i < m.length; i++ ) { for ( int j=0; j < m[i].length; j++ ) out.print(" ("+ i +"," + j + ") -> " + m[i][j]); out.println(); } } } 1.6 Clase Math

Las funciones matemticas siempre son necesarias para construir ciertas operaciones que de otra forma resultaran muy complicadas, Java cuenta con una clase llamada Math que tiene asociada un nmero determinado de funciones, como hemos visto en el ejemplo anterior la funcin random es capaz de generar un valor aleatorio de tipo double que es asignado a una variable de ese tipo. A continuacin se mencionan algunas de las funciones estaticas de Math ms comunes, aunque es importante recordar que se cuentan con muchas ms:
o o o o o Math.abs(x), que calcula el valor absoluto de un valor x. Algunas funciones trigonometritas como Math.sin(x), Math.cos(x), Math.tan(x). Math.pow(x,y), que calcula el valor de x elevado a la y La funcion Math.floor(x) que redondea a un valor proximo inferior y Math.round(x) que regresa un valor entero cercano a x. Math.random(), que genera valores aleatorios en el rango de 0.0 <= x < 1.0.

38

UAA Sistemas Electrnicos

Programacin en Java

Eduardo Serna-Prez

Glosario de trminos Atributo: es el conjunto de caractersticas que define las propiedades de un objeto, generalmente se conocen como variables del objeto. Clase: es un programa de computadora que construye, destruye y especifica la informacin, las operaciones y los mtodos, de objetos de un mismo tipo (equivale a la generalizacin de un objeto). De esta forma, los objetos son entonces instancias o ejemplares de las clases HTML: Lenguaje de hipertexto empleado para construir paginas en Internet IDE: Ambiente de desarrollo integral (Integrated development environment). Java: Lenguaje de programacin orientado a objetos multiplataforma Java Applets: Pequeos programas automatizados que pueden ser incrustados en paginas Web. JRE: Ambiente de ejecucin para aplicaciones Java JSDK: Conjunto de herramientas para el desarrollo de aplicaciones Java JVM: Maquina virtual de Java (Java Virtual Machina). Mtodos: son pequeos programas o procedimientos altamente independientes asociados a caractersticas especificas del objeto. Objetos: son cajas negras que mantienen ocultas propiedades estructurales llamadas atributos, y propiedades de comportamiento llamadas operaciones o mtodos.

Package los paquetes son colecciones de clases distribuidas (organizadas) en directorios y por lo general se encuentran relacionadas entre si. El nombre de los paquetes se escriben en minsculas. package proyecto.objetos Clases los nombres de las clases deben ser sustantivos (desde un punto de vista meramente didctico se le define como el tipo de palabra que significa persona, animal o cosa concreta o abstracta), en algunos casos mezclados, con la primera letra de cada palabra en mayscula. class EjemploUno Mtodo los nombres de los mtodos deben ser verbos, con palabras mezcladas, con la primera letra en minscula. En caso de emplear mas palabras se le recomienda hacer la primera letra mayscula. calculaPromedio() Variables todas las variables pueden ser mezclas de palabras procurando emplear la letra minscula para la primera y empleando las letras maysculas para separar al resto de las palabras. apellidoPaterno Procure limitar el empleo de variables simples (a, b, ", x) para el manejo de bucles de control.

39

UAA Sistemas Electrnicos

Programacin en Java

Eduardo Serna-Prez

Constantes se recomienda el uso de las constantes con letras maysculas, separando las palabras con guin inferior. TOPE_MAXIMO Bibliografa Nell Dale, Chip Weems, Mark Headington, Programming and Problem Solving whith Java, Jones & Bartlett, 2005, ISBN: 0-7637-3069-6. Luis Joyanes Aguilar y Matilde, Java 2 Manual de programacin, Osborne-Mc Graw Hill. http://download.oracle.com/javase/6/docs/api/java/lang/Number.html http://download.oracle.com/javase/6/docs/api/java/lang/Character.html http://download.oracle.com/javase/6/docs/api/java/lang/Boolean.html

40

También podría gustarte