Vous êtes sur la page 1sur 60

Tecnicatura Superior en Programacin

UNIDAD I: LENGUAJE JAVA

UNIVERSIDAD TECNOLGICA NACIONAL - FACULTAD CRDOBA Tecnicatura Superior en Programacin Asignatura: Laboratorio III
Docentes: Ing. Cynthia Corso/Ing. Nicols Colacciopo.

Temario
1. Lenguaje Java 1.1 Caractersticas 1.2 Realizacin de un programa en Java 1.3 Mtodo main 1.4 Compilacin y ejecucin de un programa 2. Gramtica de Lenguaje Java 2.1 Convenciones lxicas 2.2 Tipo de Datos 2.3 Variables 2.3.1 Gnero de las variables 2.3.2 Definicin y declaracin 2.3.3 mbito de las variables 2.4 Operadores 2.5 Conversin entre tipo de datos 2.6 Estructuras de control 2.7 Entrada y Salida Estndar 2.8 Clases en Java 2.8.1 Parmetros 2.8.2 Objetos 2.9 Miembros estticos 2.10 Constructores 3. Ejercitacin propuesta

UNIVERSIDAD TECNOLGICA NACIONAL - FACULTAD CRDOBA Tecnicatura Superior en Programacin Asignatura: Laboratorio III
1. Lenguaje Java
Docentes: Ing. Cynthia Corso/Ing. Nicols Colacciopo.

Java es un lenguaje de programacin de alto nivel con el que se pueden escribir tanto programas convencionales como para Internet. Una de las ventajas significativas de Java sobre otros lenguajes de programacin es que es independiente de la plataforma, tanto en cdigo fuente como en binario. Esto quiere decir que el cdigo producido por el compilador Java puede transportarse a cualquier plataforma (Intel, Sparc, Motorola, etc.) que tenga instalada una maquina virtual Java y ejecutarse. Pensando en Internet esta caracterstica es crucial ya que esta red conecta computadoras muy distintos. En cambio, C++, por ejemplo, es independiente de la plataforma solo en cdigo fuente, lo cual significa que cada plataforma diferente debe proporcionar el compilador adecuado para obtener el cdigo mquina que tiene que ejecutarse. Segn lo expuesto, Java incluye dos elementos: un compilador y un i n t e r p r e te. El compilador produce un cdigo de bytes que se almacena en un fichero para ser ejecutado por el interprete Java denominado maquina virtual de Java.

Programa escrito en java

Compilador

Cdigo de bytes

Mquina virtual de Java

Los cdigos de bytes de Java son un conjunto de instrucciones correspon dientes a un lenguaje mquina que no es especfico de ningn procesador, sino de la mquina virtual de Java. Donde se consigue esta mquina virtual? Hoy en da casi todas las compaas de sistemas operativos y de navegadores han implemen tado mquinas virtuales segn las especificaciones publicadas por Sun Microsystems, propietario de Java, para que sean compatibles con el lenguaje Java. Para las aplicaciones de Internet (denominadas applets) la mquina virtual est incluida en el navegador y para las aplicaciones Java convencionales, puede venir con el sistema operativo, con el paquete Java, o bien puede obtenerla a travs de Internet. Por que no se diseo Java para que fuera un interprete ms entre los que hay en el mercado? La respuesta es porque la interpretacin, si bien es cierto que proporciona independencia de la maquina, conlleva tambin un problema grave, y es la perdida de velocidad en la ejecucin del programa. Por esta razn la solucin fue disenar un compilador que produjera un lenguaje que pudiera ser interpretado a velocidades, si no iguales, si cercanas a la de los programas nativos (programas en cdigo mquina propio de cada computadora), logro conseguido mediante la maquina virtual de Java. Con todo, las aplicaciones todava adolecen de una falta de rendimiento apreciable. Este es uno de los problemas que siempre se ha achacado a Java. Afortunadamente, la diferencia de rendimiento con respecto a aplicaciones equivalentes escritas en cdigo mquina nativo ha ido disminuyendo hasta mrgenes muy reducidos gracias a la utilizacin de compiladores JIT (Just In Time - compilacin al instante). Un compilador JIT interacciona con la mquina virtual para convertir el cdigo de bytes en cdigo mquina nativo. Como consecuencia, se mejora la velocidad durante la ejecucin. Sun sigue trabajando sobre este objetivo y prueba de ello son los resultados que se estn obteniendo con el nuevo y potente motor de ejecucin HotSpot (HotSpot Perfomance Engine) que ha diseado, o por los microprocesadores especficos para la interpretacin hardware de cdigo de bytes.

1.1 Caractersticas
Hay muchas razones por las que Java es tan popular y til. Aqu se resumen algunas caractersticas importantes: Orientacin a objetos: Java est totalmente orientado a objetos. No hay funciones sueltas en un programa de Java. Todos los mtodos se encuentran dentro de clases. Los tipos de datos primitivos, como los enteros o dobles, tienen empaquetadores de clases, siendo estos objetos por s mismos, lo que permite que el programa las manipule. Simplicidad: la sintaxis de Java es similar a ANSI C y C++ y, por tanto, fcil de aprender; aunque es mucho ms simple y pequeo que C++. Elimina encabezados de archivos, preprocesador, aritmtica de apuntadores, herencia mltiple, sobrecarga de operadores, struct, union y plantillas. Adems, realiza automticamente la recoleccin de basura, lo que hace innecesario el manejo explcito de memoria. 3

UNIVERSIDAD TECNOLGICA NACIONAL - FACULTAD CRDOBA Tecnicatura Superior en Programacin Asignatura: Laboratorio III
Docentes: Ing. Cynthia Corso/Ing. Nicols Colacciopo.

Robustez: Por la forma en que est diseado, Java no permite el manejo directo del hardware ni de la memoria (no permite modificar valores de punteros, por ejemplo), de modo que se puede decir que es virtualmente imposible "colgar" un programa Java. El intrprete siempre tiene el control. De hecho, el compilador es suficientemente inteligente como para no permitir una serie de acciones que podran traer problemas, como usar variables sin inicializarlas, modificar valores de punteros directamente, acceder a mtodos o variables en forma incorrecta, utilizar herencia mltiple, etc. Compactibilidad: Java est diseado para ser pequeo. La versin ms compacta puede utilizarse para controlar pequeas aplicaciones. El intrprete de Java y el soporte bsico de clases se mantienen pequeos al empaquetar por separado otras bibliotecas. Portabildad: sus programas se compilan en el cdigo de bytes de arquitectura neutra y se ejecutarn en cualquier plataforma con un intrprete de Java. Su compilador y otras herramientas estn escritas en Java. Su intrprete est escrito en ANSI C. De cualquier modo, la especificacin del lenguaje Java no tiene caractersticas dependientes de la implantacin. Multiplataforma: Al ser un lenguaje que ejecuta el codigo sobre una maquina virtual, cambiando la maquina virtual es posible ejecutar un programa sobre una base diferente sin modificarlo. Amigable para el trabajo en red: Java tiene elementos integrados para comunicacin en red, applets Web, aplicaciones cliente-servidor, adems de acceso remoto a bases de datos, mtodos y programas. Soporte a GUI: la caja de herramientas para la creacin de ventanas abstractas -(Abstract Windowing Toolkit) de Java simplifica y facilita la escritura de programas GUI (Graphic User Interface) orientados a eventos con muchos componentes de ventana. Carga y vinculacin incremental dinmica: las clases de Java se vinculan dinmicamente al momento de la carga. Por tanto, la adicin de nuevos mtodos y campos de datos a clases, no requieren de recompilacin de clases del cliente. Internacionalizacin: los programas de Java estn escritos en Unicode, un cdigo de caracter de 16 bits que incluye alfabetos de los lenguajes ms utilizados en el mundo. La manipulacin de los caracteres de Unicode y el soporte para fecha/hora local, etctera, hacen que Java sea bienvenido en todo el mundo. Hilos: Java proporciona mltiples flujos de control que se ejecutan de manera concurrente dentro de uno de sus programas. Los hilos permiten que su programa emprenda varias tareas de cmputo al mismo tiempo, una caracterstica que da soporte a programas orientados a eventos, para trabajo en red y de animacin. Seguridad: entre las medidas de seguridad de Java se incluyen restricciones en sus applets, implantacin redefinible de sockets y objetos de administrador de seguridad definidos por el usuario. Hacen que las applets sean confiables y permiten que las aplicaciones implanten y se apeguen a reglas de seguridad personalizadas.

INSTALACION DE JAVA
Para configurar su ambiente Java, simplemente baje la versin mas reciente de JDK del sitio Web de JavaSoft: http://www.javasoft.com/products/jdk/ e instlelo siguiendo las instrucciones.

1.2 Realizacin de un programa en Java


Para desarrollar un programa hay que seguir los siguientes pasos: 1. 2. 3. 4. Editar el programa Compilarlo Ejecutarlo Depurarlo

Para poder escribir programas se necesita un entorno de desarrollo Java. Sun Microsystems, propietario de Java, proporciona uno de forma gratuita, Java Development Kit (JDK), que se puede obtener en la direccin de Internet:
http://www.sun.com

UNIVERSIDAD TECNOLGICA NACIONAL - FACULTAD CRDOBA Tecnicatura Superior en Programacin Asignatura: Laboratorio III
Docentes: Ing. Cynthia Corso/Ing. Nicols Colacciopo.

Cmo crear un programa


Un programa puede ser una aplicacin o un applet. En esta materia aprender principalmente a escribir aplicaciones Java. Empecemos con la creacin de una aplicacin sencilla: el clsico ejemplo de mostrar un mensaje de saludo. Esta sencilla aplicacin la realizaremos desde los dos puntos de vista comen tados anteriormente: utilizando la interfaz de lnea de rdenes del JDK y utilizando un entorno de desarrollo integrado.

Interfaz de Lnea de rdenes


Empecemos por editar el fichero fuente Java correspondiente a la aplicacin. Primeramente visualizaremos el editor de textos que vayamos a utilizar; por ejemplo, el Bloc de notas o el Edit. El nombre del fichero elegido para guardar el programa en el disco, debe tener como extensin Java; por ejemplo HolaMundoJava. Una vez visualizado el editor, escribiremos el texto correspondiente al programa fuente. Escrbalo tal como se muestra a continuacin. Observe que cada sentencia del lenguaje Java finaliza con un punto y coma y que cada lnea del programa se finaliza pulsando la tecla Entrar (Enter o .--). class HolaMundo { /* Punto de entrada a la aplicacion. * args: matriz de parmetros pasados a la aplicacin * mediante la lnea de ordenes. Puede estar vacia. */ public static void main(String[] args) { System.out.println("Hola mundo!!!"); } }

Que hace este programa?


Comentamos brevemente cada lnea de este programa. No apurarse si algunos de los trminos no quedan muy claros ya que todos ellos se vern con detalle ms adelante. La primera lnea declara la clase de objetos HolaMundo, porque el esqueleto de cualquier aplicacin Java se basa en la definicin de una clase. A continuacin se escribe el cuerpo de la clase encerrado entre los caracteres { y }. Ambos caracteres definen un bloque de cdigo. Todas las acciones que va a llevar a cabo un programa Java se colocan dentro del bloque de cdigo correspondiente a su clase. Las clases son la base de los programas Java. Las siguientes lneas encerradas entre /* y */ son simplemente un comentario. Los comentarios no son tenidos en cuenta por el compilador, pero ayudan a entender un programa cuando se lee. A continuacin se escribe el mtodo principal main. Observe que un mtodo se distingue por el modificador () que aparece despus de su nombre y que el bloque de cdigo correspondiente al mismo define las acciones que tiene que ejecutar dicho mtodo. Cuando se ejecuta una aplicacin, Java espera que haya un mtodo main. Este mtodo define el punto de entrada y de salida de la aplicacin. El mtodo println del objeto out miembro de la clase System de la biblioteca Java, escribe como resultado la expresin que aparece especificada entre comillas. Observe que la sentencia completa finaliza con punto y coma.

1.3 Mtodo main

Toda aplicacin Java tiene un mtodo denominado main, y solo uno. Este mtodo es el punto de entrada a la aplicacin y tambin el punto de salida. Su definicin es como se muestra a continuacin: public static void main (String[] args) { // Cuerpo del mtodo }

UNIVERSIDAD TECNOLGICA NACIONAL - FACULTAD CRDOBA Tecnicatura Superior en Programacin Asignatura: Laboratorio III
Docentes: Ing. Cynthia Corso/Ing. Nicols Colacciopo.

Como se puede observar, el mtodo main es publico (public), esttico (static), no devuelve nada (void) y tiene como argumento un vector de tipo String que almacenar los argumentos pasados en la lnea de rdenes cuando se invoca a la aplicacin para su ejecucin, concepto que estudiaremos posteriormente.

Guardar el programa escrito en el disco


El programa editado esta ahora en la memoria. Para que este trabajo pueda tener continuidad, el programa escrito se debe grabar en el disco utilizando la orden correspondiente del editor. Muy importante: el nombre del programa fuente debe ser el mismo que el de la clase que contiene, respetando maysculas y minsculas. En nuestro caso, el nombre de la clase es HolaMundo, por lo tanto el fichero debe guardarse con el nombre HolaMundo java.

1.4 Compilar y ejecutar el programa


El siguiente paso es compilar el programa; esto es, traducir el programa fuente a cdigo de bytes para posteriormente poder ejecutarlo. La orden para compilar el programa HolaMundo java es la siguiente: javac HolaMundo.java Previamente, para que el sistema operativo encuentre la utilidad javac, utilizando la lnea de ordenes hay que aadir a la variable de entorno path la ruta de la carpeta donde se encuentra esta utilidad y otras que utilizaremos a continuacin. Por ejemplo: path=%path%;c:\java\j2sdk1.4.0\bin La expresin %path% representa el valor actual de la variable de entorno path. Una ruta va separada de la anterior por un punto y coma. Para compilar un programa hay que especificar la extensin Java. El resultado de la compilacin ser un fichero HolaMundo.class que contiene el cdigo de bytes que ejecutar la mquina virtual de Java. Al compilar un programa, se pueden presentar errores de compilacin, debidos a que el programa escrito no se adapta a la sintaxis y reglas del compilador. Estos errores se irn corrigiendo hasta obtener una compilacin sin errores. Para ejecutar el fichero resultante de la compilacin, invocaremos desde la lnea de rdenes al intrprete de cdigo de bytes java con el nombre de dicho fichero como argumento, en nuestro caso HolaMundo, y pulsaremos Entrar para que se muestren los resultados. En la figura siguiente se puede observar el proceso seguido para ejecutar H o l a M und o desde la lnea de rdenes. Hay que respetar las maysculas y las minsculas en los nombres que se escriben. As mismo, cabe resaltar que la extensin. class no tiene que ser especificada. Una vez ejecutado, se puede observar que el resultado es el mensaje: H o l a mundo!!!.

Biblioteca de funciones
Java carece de instrucciones de E/S, de instrucciones para manejo de cadenas de caracteres, etc. con lo que este trabajo queda para la biblioteca de clases provista con el compilador. Una biblioteca es un fichero separado en el disco (con extensin lib, jar o dll) que contiene las clases que definen las tareas ms comunes, para que nosotros no tengamos que escribirlas. Como ejemplo, hemos visto ante riormente el mtodo println del objeto out miembro de la clase System. Si este mtodo no existiera, seria labor nuestra el escribir el cdigo necesario para visualizar los resultados en la ventana. En el cdigo escrito anteriormente se puede observar que para utilizar un mtodo de una clase de la biblioteca simplemente hay que invocarlo para un objeto de su clase y pasarle los argumentos necesarios entre parntesis. Por ejemplo: System.out.println("Hola mundo!!!"); 6

UNIVERSIDAD TECNOLGICA NACIONAL - FACULTAD CRDOBA Tecnicatura Superior en Programacin Asignatura: Laboratorio III
Depurar un programa
Una vez ejecutado el programa, la solucin puede ser incorrecta. Este c aso exige un anlisis minucioso de como se comporta el programa a lo largo de su ejecucin; esto es, hay que entrar en la fase de depuracin del programa. La forma ms sencilla y eficaz para desarrollo de Java proporciona para complicado de utilizar, por lo que, en integrados que anteriormente hemos programa. realizar este proceso, es utilizar un programa depurador. El entorno de esto la utilidad jdb. Este es un depurador de lnea de rdenes un tanto principio, tiene escasa aceptacin. Normalmente los entornos de desarrollo mencionado incorporan las rdenes necesarias para invocar y depurar un Docentes: Ing. Cynthia Corso/Ing. Nicols Colacciopo.

Para depurar un programa Java debe compilarlo con la opcin -g. Por ejemplo, desde la lnea de rdenes esto se hara as: javac -g Aritmetica.java Desde un entorno integrado, habr que establecer la opcin correspondiente del compilador. Una vez compilado el programa, se inicia la ejecucin en modo depuracin y se contina la ejecucin con las rdenes tpicas de ejecucin paso a paso.

Entorno de desarrollo integrado


Cuando se utiliza un entorno de desarrollo integrado lo primero que hay que hacer una vez instalado dicho entorno es asegurarse de que las opciones que indican las rutas de las herramientas Java, de las bibliotecas, de la documentacin y de los fuentes, o bien simplemente de la ruta donde se instalo el JDK, estn establecidas. La ubicacin de estas opciones variar de acuerdo al entorno integrado que usted elija, generalmente puede estar en algn men Opciones o equivalente. Para editar y ejecutar la aplicacin HolaMundo anterior utilizando este entorno de desarrollo integrado, los pasos a seguir se indican a continuacin: 1. Suponiendo que ya esta visualizado el entorno de desarrollo, aadimos un nuevo fichero Java (File, New), editamos el cdigo que compone la aplicacin y lo guardamos con el nombre HolaMundo.java (File, Save). 2. A continuaci6n, para compilar la aplicacin, ejecutamos la orden Compile del men Compiler. 3. Finalmente, para ejecutar la aplicacin, suponiendo que la compilacin se efectu satisfactoriamente, seleccionaremos la orden Run del men Run. Si se implementa aplicaciones compuestas por varios ficheros fuente. En este caso, los pasos a seguir son los siguientes: 1. Suponiendo que ya esta visualizado el entorno de desarrollo, aadimos (File, New) y editamos cada uno de los ficheros que componen la aplicacin y los guardamos con los nombres adecuados (File, Save). 2. Para compilar la aplicacin visualizaremos el fichero que contiene la clase aplicacin (la clase que contiene el mtodo main) y ejecutamos la orden Compile del men Compiler. Se puede observar que todas las clases que son requeridas por esta clase principal son compiladas automticamente, independientemente de que estn, o no, en diferentes ficheros. 3. Finalmente, suponiendo que la compilacin se efectu satisfactoriamente, ejecutaremos la aplicacin seleccionando la orden Run, del men Run. Este paso exige que se est visualizando el fichero que contiene la clase aplicacin. Cuando una aplicacin consta de varios ficheros puede resultar ms cmodo para su mantenimiento crear un proyecto. Esto permitir presentar una ventana que mostrar una entrada por cada uno de los ficheros fuente que componen la aplicacin. Para visualizar el cdigo de cualquiera de estos ficheros, bastar con hacer doble clic sobre la entrada correspondiente. Para crear un proyecto, los pasos a seguir son los siguientes: 7

UNIVERSIDAD TECNOLGICA NACIONAL - FACULTAD CRDOBA Tecnicatura Superior en Programacin Asignatura: Laboratorio III
Docentes: Ing. Cynthia Corso/Ing. Nicols Colacciopo.

1. Suponiendo que ya est visualizado el entorno de desarrollo, se aaden (File, New) y editan cada uno de los ficheros que componen la aplicacin y se guardan con los nombres adecuados (File, Save). 2. Despus se crea un nuevo proyecto (Project, New Project Workspace). En la ventana que se visualiza, haciendo clic en el botn Browse correspondiente, se introduce un nombre para el proyecto y se selecciona el nombre de la clase aplicacin (la clase que contiene el mtodo main). Posteriormente, para visualizar la ventana del proyecto, se ejecuta la orden Show Project Workspace Window del men Project. 3. El paso siguiente es aadir al proyecto el resto de los ficheros que lo componen. Para ello se ejecuta la orden Edit Project del men Project, y a travs del botn Add Files se aaden dichos ficheros. 4. Finalmente, para compilar y ejecutar la aplicacin, se procede como se explic anteriormente.

UNIVERSIDAD TECNOLGICA NACIONAL - FACULTAD CRDOBA Tecnicatura Superior en Programacin Asignatura: Laboratorio III
2. Gramtica de Java
2.1 Convenciones Lxicas SENTENCIAS SIMPLES
Una sentencia simple es la unidad ejecutable ms pequea de un programa Java. Las sentencias controlan el flujo u orden de ejecucin. Una sentencia Java puede formarse a partir de una palabra clave (for, while, if...else, etc), expresiones, declaraciones o llamadas a mtodos. Toda sentencia simple termina con un punto y coma (;). Por ejemplo: x = y; y = y + 1; h=5; g=10; suma (); Docentes: Ing. Cynthia Corso/Ing. Nicols Colacciopo.

SENTENCIAS COMPUESTAS O BLOQUE


Una sentencia compuesta o bloque, es una coleccin de sentencias simples incluidas entre llaves { } . Un bloque puede contener a otros bloques. Por ejemplo:

... { ... }

COMENTARIOS
En Java hay tres tipos de comentarios: // comentarios para una sola lnea /* comentarios de una o ms lneas */ /** comentario de documentacin, de una o ms lneas */ Los dos primeros tipos de comentarios son los que todo programador conoce y se utilizan del mismo modo. Los comentarios de documentacin, colocados inmediatamente antes de una declaracin (de variable o funcin), indican que ese comentario ha de ser colocado en la documentacin que se genera automticamente cuando se utiliza la herramienta de Java javadoc. Dichos comentarios sirven como descripcin del elemento declarado permitiendo generar una documentacin de nuestras clases escrita al mismo tiempo que se genera el cdigo. En este tipo de comentario para documentacin, se permite la introduccin de algunos tokens o palabras clave, que harn que la informacin que les sigue aparezca de forma diferente al resto en la documentacin.

PALABRAS CLAVE
Las siguientes son las palabras clave que estn definidas en Java y que no se pueden utilizar como identificadores: abstract continue for new switch 9

UNIVERSIDAD TECNOLGICA NACIONAL - FACULTAD CRDOBA Tecnicatura Superior en Programacin Asignatura: Laboratorio III
boolean break byte byvalue case catch char class const default do double else extends false final finally float goto if implements import instanceof int interface long native null package private protected public return short static super Docentes: Ing. Cynthia Corso/Ing. Nicols Colacciopo.

synchronized this threadsafe throw transient true try void while

PALABRAS RESERVADAS
Adems, el lenguaje se reserva unas cuantas palabras ms, pero que hasta ahora no tienen un cometido especfico. Son: cast future generic inner operator outer rest var

SEPARADORES
Slo hay un par de secuencias con otros caracteres que pueden aparecer en el cdigo Java; son los separadores simples, que van a definir la forma y funcin del cdigo. Los separadores admitidos en Java son: () - parntesis. Para contener listas de parmetros en la definicin y llamada a mtodos. Tambin se utiliza para definir precedencia en expresiones, contener expresiones para control de flujo y rodear las conversiones de tipo. {} - llaves. Para contener los valores de matrices inicializadas automticamente. Tambin se utiliza para definir un bloque de cdigo, para clases, mtodos y mbitos locales. [ ] - corchetes. Para declarar tipos matriz. Tambin se utiliza cuando se referencian valores de matriz. ; - punto y coma. Separa sentencias. , - coma. Separa identificadores consecutivos en una declaracin de variables. Tambin se utiliza para encadenar sentencias dentro de una sentencia for. . - punto. Para separar nombres de paquete de subpaquetes y clases. Tambin se utiliza para separar una variable o mtodo de una variable de referencia.

2. 2 TIPOS DE DATOS
Los tipos de datos en Java se clasifican en: tipos primitivos y tipos referenciados.

Tipos primitivos
Hay ocho tipos primitivos de datos que podemos clasificar en: tipos numricos y el tipo boolean. A su vez, los tipos numricos se clasifican en tipos enteros y tipos reales. Tipos enteros: byte, short, int, long y char. Tipos reales: float y double. Cada tipo primitivo tiene un rango diferente de valores positivos y negativos, excepto el boolean que solo tiene dos valores: true y false. El tipo de datos que se seleccione para declarar las variables de un determinado programa depender del rango y tipo de valores que vayan a almacenar cada una de ellas y de si estos son enteros o fraccionarios. Se les llama primitivos porque estn integrados en el sistema y en realidad no son objetos, lo cual hace que su uso sea ms eficiente. Mas adelante veremos tambin que la biblioteca Java proporciona las clases: Byte, Character, Short, Integer, Long, Float, Double y Boolean, para encapsular cada uno de los tipos expuestos, proporcionando as una funcionalidad aadida para manipularlos. La siguiente tabla muestra los tipos primitivos:

10

UNIVERSIDAD TECNOLGICA NACIONAL - FACULTAD CRDOBA Tecnicatura Superior en Programacin Asignatura: Laboratorio III
Docentes: Ing. Cynthia Corso/Ing. Nicols Colacciopo.

Tipo
byte short int Long Float double char boolean

Tamao/Formato
8-bit complemento a 2 16-bit complemento a 2 32-bit complemento a 2 64-bit complemento a 2 32-bit IEEE 754 64-bit IEEE 754 16-bit caracter Unicode true, false

Descripcin Entero de un byte Entero corto Entero Entero largo Punto flotante, precisin simple Punto flotante, precisin doble Un carcter Valor booleano (verdadero o falso)

El tamao de estos tipos est fijado, siendo independiente del microprocesador y del sistema operativo sobre el que est implementado. Esta caracterstica es esencial para el requisito de la portabilidad entre distintas plataformas. La razn de que se codifique los char con 2 bytes es para permitir implementar el juego de caracteres Unicode, mucho ms universal que ASCII, y sus numerosas extensiones. Java provee para cada tipo primitivo una clase correspondiente: Boolean, Character, Integer, Long, Float y Double. Por qu existen estos tipos primitivos y no slo sus objetos equivalentes? La razn es sencilla, por eficiencia. Estos tipos bsicos son almacenados en una parte de la memoria conocida como el Stack, que es manejada directamente por el procesador a travs de un registro apuntador (stack pointer). Esta zona de memoria es de rpido acceso, pero tiene la desventaja de que el compilador de java debe conocer, cuando est creando el programa, el tamao y el tiempo de vida de todos los datos all almacenados para poder generar cdigo que mueva el stack pointer, lo cual limita la flexibilidad de los programas. En cambio, los objetos son creados en otra zona de memoria conocida como Heap. Esta zona es de propsito general y, a diferencia del Stack, el compilador no necesita conocer ni el tamao, ni el tiempo de vida de los datos all alojados. Este enfoque es mucho ms flexible pero, en contraposicin, el tiempo de acceso a esta zona es ms elevado que el necesario para acceder al stack. Aunque en la literatura se comenta que Java elimin los punteros, esta afirmacin es inexacta. Lo que no se permite es la aritmtica de punteros. Cuando estamos manejando un objeto en Java, realmente estamos utilizando un handie a dicho objeto. Podemos definir un handie como una variable que contiene la direccin de memoria donde se encuentra el objeto almacenado.

Tipos referenciados
Hay tres clases de tipos referenciados: clases, interfaces y arrays. Todos ellos sern objeto de estudio en captulos posteriores.

LITERALES
Un literal es la expresin de un valor de un tipo primitivo, de un tipo String (cadena de caracteres) o la expresin null (valor nulo o desconocido). Por ejemplo, son literales: 5, 3.14, `a', "hola" y null. En realidad son valores constantes. Un literal en Java puede ser: un entero, un real, un valor booleano, un carac ter, una cadena de caracteres y un valor nulo.

11

UNIVERSIDAD TECNOLGICA NACIONAL - FACULTAD CRDOBA Tecnicatura Superior en Programacin Asignatura: Laboratorio III
IDENTIFICADORES
Los identificadores son nombres dados a tipos, literales, variables, clases, interfaces, mtodos, paquetes y sentencias de un programa, ccualquier cosa que el programador necesite identificar o usar. En Java, un identificador comienza con una letra, un subrayado (_) o un smbolo de dlar ($). Los siguientes caracteres pueden ser letras o dgitos. Se distinguen las maysculas de las minsculas y no hay longitud mxima. Seran identificadores vlidos: identificador nombre_usuario Nombre_Usuario _variable_del_sistema $transaccion y su uso sera, por ejemplo: int contador_principal; char _lista_de_ficheros; float $cantidad_en_Ptas; Docentes: Ing. Cynthia Corso/Ing. Nicols Colacciopo.

2.3 Variables
Una variable representa un espacio de memoria para almacenar un valor de un determinado tipo. El valor de una variable, a diferencia de una constante, puede cambiar durante la ejecucin de un programa. Para utilizar una variable en un programa, primero hay que declararla. Tambin podemos definirla como una unidad de almacenamiento identificada por un nombre y un tipo de dato, tiene una direccin (ubicacin) dentro de la memoria y puede almacenar informacin segn el tipo de dato que tenga asociado. Si imaginamos la memoria del computador como un conjunto de celdas, entonces podemos decir que una variable es una de esas celdas que el usuario identifica con un nombre.

2.3.1 Gnero de las variables


En informtica hay dos maneras de almacenar las variables en un mtodo: se almacena el valor de la variable; se almacena la direccin donde se encuentra la variable. En Java: los tipos elementales se manipulan directamente: se dice que se manipulan por valor; los objetos se manipulan a travs de su direccin: se dice que se manipulan por referencia. Por ejemplo: void Metodo() { int var1 = 2; Objeto var2 = new Objeto(); var1 = var1 + 3; var2.agrega (3); } En el ejemplo anterior, var1 representa fsicamente el contenido de la variable mientras que var2 slo representa la direccin que permite acceder a ella: se crea un objeto en algn lugar de la memoria y var2 representa fsicamente el medio de acceder a l. Cuando se aade 3 a var1, se modifica la variable var1, mientras que el mtodo agrega (3) no modifica var2, sino el objeto designado por var2. A priori preferir var1, que le parecer ms simple. Es cierto, pero este mecanismo es mucho ms restrictivo e impide por ejemplo compartir datos entre diferentes partes de la aplicacin. Adems, el almacenamiento al estilo de var2 es indispensable cuando los objetos son algo ms que tipos simples.

12

UNIVERSIDAD TECNOLGICA NACIONAL - FACULTAD CRDOBA Tecnicatura Superior en Programacin Asignatura: Laboratorio III
Docentes: Ing. Cynthia Corso/Ing. Nicols Colacciopo.

En Java, para todas las variables de tipo bsico se accede al valor asignado a ellas directamente (no se conoce la direccin de memoria que ocupa). Para las dems (arrays, clases o interfaces), se accede a la variable a travs de un puntero. El valor del puntero no es accesible ni se puede modificar como en C/C++; Java no lo necesita, adems, esto atentara contra la robustez del lenguaje. De hecho, en Java no existen los tipos pointer, struct o union. Un objeto es ms que una estructura, y las uniones no se hacen necesarias con un mtodo de programacin adecuado (adems se evita la posibilidad de acceder a los datos incorrectamente).

2.3.2 Definicin y declaracin


La declaracin introduce uno o ms identificadores en un programa sin asignacin de memoria. La definicin de una variable, declara la variable y adems le asigna memoria. Generalmente las variables de tipos simples se declaran y definen al mismo tiempo, en cambio las variables objetos pueden declararse primero y luego definirse mas adelante en el programa (asignarle memoria). Toda variable debe ser definida antes de ser utilizada. La declaracin de una variable esta compuesta por un identificador o nombre para esa variable, precedida por el tipo de dato que se puede almacenar en la misma. En general: Tipo Nombre o identificador; Los nombres o identificadores de las variables consisten en secuencias de letras y dgitos, donde el primer caracter debe ser siempre una letra. Java establece una diferencia entre las letras maysculas y minsculas. PRIMERA Primera primera Ejemplos: int xPos; double Precio, Cantidad; char asterisco; int Resultado;

Asignaciones a variables
La operacin de asignacin est compuesta de tres elementos: la variable que va a recibir el valor, el operador de asignacin y el valor que se va a asignar. La variable slo podr ser una que haya sido declarada. El operador de asignacin es el smbolo = y por ltimo el valor asignar, que puede ser un literal otra variable, una expresin, etc., siendo la nica condicin que el resultado sea del mismo tipo que la variable que va a recibir el valor, o de algn tipo compatible. En general: Variable = Constante | Expresin; Por ejemplo: suma = suma + 1; precio = 1.05 * precio;

Inicializacin de las variables


En Java no se puede utilizar una variable sin haberla inicializado previamente. El compilador seala un error cuando se utiliza una variable sin haberla inicializado. Veamos un ejemplo. La compilacin de: import java.io.*; class DemoVariable { public static void main (String argv[]) { int noInicializado; System.out.println(Valor del entero: +nolnicializado); } 13

UNIVERSIDAD TECNOLGICA NACIONAL - FACULTAD CRDOBA Tecnicatura Superior en Programacin Asignatura: Laboratorio III
} provoca el error siguiente: c: \ProgramasJava\cramatica>javac init.java init.java:6: Variable noInicializada may not have been initialized System.out.println ("Valor del entero:+ nolnicializado); 1 error Docentes: Ing. Cynthia Corso/Ing. Nicols Colacciopo.

2.3.3 mbito de las variables


Se denomina mbito de una variable a la parte del programa donde dicha variable puede ser referenciada por su nombre. Una variable puede ser limitada a una clase, a un mtodo, o a un bloque de cdigo correspondiente a una sentencia compuesta.
Variable limitada a una clase Variable limitada a un mtodo Variable limitada a un bloque }

Class UnaClase { variables miembro de la clase (atributos) public void unMetodo (lista de parametros) { variables locales una sentencia compuesta { variables locales } }

2.4 Operadores
Un operador es un elemento del lenguaje, generalmente representado por un smbolo, cuya finalidad es generar un resultado manipulando uno o dos operandos. Si el operador trabaja sobre un solo operando se dice que es unario, mientras que si lo hace sobre dos se llama binario. OPERADORES ARITMETICOS Estos operadores son binarios, a excepcin de (cambio de signo) que es unitario. + : Suma - : Resta * : Multiplicacin / : Divisin % : Resto de divisin entera - : Cambio de signo ++ : incremento -- : decremento El orden de prioridades de estos operadores es como en las matemticas : *, / y % tienen la prioridad mas alta. Los operadores de incremento y decremento son unitarios y son los nicos que pueden se utilizados como pre y post fijos del operador. Por ejemplo: Operacin Funcionamiento x++ suma 1 a x equivalente a x=x+1; ++x dem y = x++ Asigna a "y" el valor de "x" y luego suma 1 a "x" y = ++x Suma 1 a "x" y luego asigna a "y" el nuevo valor de "x" y = x-Asigna a "y" el valor de "x" y luego resta 1 a "x" y = --x Resta 1 a "x" y luego asigna a "y" el nuevo valor de "x" 14

UNIVERSIDAD TECNOLGICA NACIONAL - FACULTAD CRDOBA Tecnicatura Superior en Programacin Asignatura: Laboratorio III
Docentes: Ing. Cynthia Corso/Ing. Nicols Colacciopo.

Supongamos : Operacin y = x++ y = ++x y = x-y = --x

x=5

Al finalizar la operacin x 6 6 5 4 y 5 6 4 4

OPERADORES DE ASIGNACION La operacin de asignacin consiste en copiar el valor de una expresin en una variable. Cuando decimos el valor de una expresin, queremos decir que este valor puede ser el resultado de alguna operacin matemtica, o bien el valor de otra variable y tambin el resultado devuelto por una funcin o mandato, aunque sea definido por el usuario. En general: variable = expresin; Existen, como se deja traslucir de esta regla sintctica, tres partes en una operacin de asignacin, a saber: primero el receptor, que siempre es el nombre de una variable. Segundo, el operador de asignacin en s y por ltimo la expresin de la que ya se habl con anterioridad y que es la parte transmisora del valor asignado al receptor. El destino, o la parte izquierda, de la asignacin debe ser una variable (no una funcin, ni una constante). El resultado de una operacin de asignacin es que el valor de la expresin que se encuentra a la derecha del operador (=) es asignado a la variable que se encuentra a la izquierda del mismo. Una expresin con un operador de asignacin puede ser utilizada en una expresin como la siguiente: valor = 5 ; //asigna 5 a la variable valor valor1 = 8 * (valor2 = 5); // primero se asigna 5 a valor2. Este se multiplica //por 8, por lo que el valor final de valor1 es 40. ASIGNACIONES MULTIPLES Se permite asignar a muchas variables el mismo valor utilizando asignaciones mltiples en una sola sentencia. En los programas a menudo se usa ste mtodo para asignar valores comunes a las variables. Por ejemplo: valor1 = valor2 = valor3 = 0 ; ASIGNACIONES EN LA DECLARACION DE VARIABLES O INICIALIZACIN Java permite asignar valores a las variables en el momento en que estas estn siendo declaradas. A esta operacin se la denomina Inicializacin y tiene el mismo sentido que cuando inicializamos una variable previamente declarada; en cualquier punto del programa. Solo que en este caso las variables toman su valor en el momento de compilacin. Para llevar a cabo esta tarea, basta con declarar la variable y en esa misma lnea agregar el operador de asignacin y el valor que se le quiere asignar. Por ejemplo: int valor1=0; Es muy importante hacer notar el hecho de que no pueden combinarse las caractersticas de asignacin mltiple y de inicializacin ya que este lenguaje no lo permite, y esto se basa en el simple hecho de que si estamos declarando una variable, recin despus de que esta haya tomado su valor en memoria, puede tomar su valor, y la expresin de asignacin mltiple nos exige, indicar el valor de la variable al final de la sentencia, y si analizamos esto, le estaramos pidiendo al compilador que realice una tarea imposible, ya que primero debe buscar lugar en memoria para todas las variables declaradas en el orden en que se declararon, y luego debe retroceder para tomar el valor de la ltima y asignrselo a las dems en orden inverso al orden de declaracin. Le dejamos un ejemplo para que Ud. piense y analice acerca de l, siempre haciendo hincapi en el hecho de que este ejemplo no es vlido: int valor1=valor2=valor3=10; Adems, y para finalizar, es de destacar el tema de que para definir muchas variables en una sola lnea de programa, estas deben ir separadas por una , y no por un =.

15

UNIVERSIDAD TECNOLGICA NACIONAL - FACULTAD CRDOBA Tecnicatura Superior en Programacin Asignatura: Laboratorio III
OPERADORES DE ASIGNACION COMPUESTOS Es un conjunto += *= %= adicional de operadores de asignacin que permiten expresar ciertos clculos de modo ms conciso. Suma y Asignacin -= Resta y Asignacin Multiplicacin y Asignacin /= Divisin y Asignacin Resto Modulo y Asignacin Docentes: Ing. Cynthia Corso/Ing. Nicols Colacciopo.

Como podemos observar la mayora de ellos resultan de la combinacin del operador "=" (asignacin directa) con operadores Aritmticos. donde la expresin: x+=15 es equivalente a: x=x+15 OPERADORES RELACIONALES Sirven para obtener una expresin que no es un resultado numrico sino una afirmacin o negacin de una determinada relacin entre dos operandos. > : Mayor que < : Menor que >= : Mayor o igual que =< : Menor o igual que == : Igual que (operador de igualdad) != : Distinto de (operador de igualdad) OPERADORES LOGICOS Permiten crear relaciones complejas. Se utilizan para vincular el resultado de distintas expresiones en donde intervienen operadores relacionales. Estos operadores siempre se evalan de izquierda a derecha, detenindose la evaluacin tan pronto como se produzca un fallo en la condicin (para el and) o se cumpla (para el or). La prioridad de ejecucin ms alta corresponde a los operadores relacionales. && : y lgico (and ) || : o lgico (or) ! : negacin (not) En la siguiente tabla aparecen los operadores que se utilizan en Java, por orden de precedencia:

operadores
posfijos Operadores unarios Creacin y "cast" Multiplicativos Aditivos Desplazamiento Relacionales Igualdad AND bit a bit OR exclusivo bit a bit OR inclusivo bit a bit AND lgico OR lgico Condicional Asignacin [] . (parmetros) expr++ ++expr new * + / --expr (tipo) % +expr expr-~ ! expr

<< >> >>> < == != & ^ | && || ?: = += -= *= /= % = 16 > <= >= instanceof

UNIVERSIDAD TECNOLGICA NACIONAL - FACULTAD CRDOBA Tecnicatura Superior en Programacin Asignatura: Laboratorio III
^= &= |= Docentes: Ing. Cynthia Corso/Ing. Nicols Colacciopo.

<<=

>>=

>>>=

Los operadores numricos se comportan como esperamos. hay operadores unarios y binarios, segn acten sobre un solo argumento o sobre dos.

Operadores unarios
Incluyen, entre otros: +,-, ++, - -, ~, !, (tipo) Se colocan antes de la constante o expresin (o, en algunos casos, despus). Por ejemplo: -cnt; //cambia de signo; por ejemplo si cnt es 12 el //resultado es -12 (cnt no cambia) ++cnt; //equivalen a cnt+=1; cnt++; --cnt; //equivalen a cnt-=1; cnt--;

Operadores binarios
Incluyen, entre otros: +, -, *, /, % Van entre dos constantes o expresiones o combinacin de ambas. Por ejemplo: cnt + 2 //devuelve la suma de ambos. promedio + (valor/2) horas / hombres; //divisin. acumulado % 3; //resto de la divisin entera entre ambos. Nota: + sirve tambin para concatenar cadenas de caracteres. Cuando se mezclan Strings y valores numricos, stos se convierten automticamente en cadenas: "La frase tiene " + cant + " letras" se convierte en: "La frase tiene 17 letras" //suponiendo que cant = 17

Los operadores relacionales devuelven un valor booleano. El operador = siempre hace copias de objetos, marcando los antiguos para borrarlos, y ya se encargar el garbage collector de devolver al sistema la memoria ocupada por el objeto eliminado. Veamos algunos ejemplos: [ ] define arreglos: int lista [ ]; (params) es la lista de parmetros cuando se llama a un mtodo: convertir (valor, base); new permite crear una instancia de un objeto: new contador(); (type) cambia el tipo de una expresin a otro: (float) (total % 10); >> desplaza bit a bit un valor binario: base >> 3; <= devuelve true si un valor es menor o igual que otro: total <= maximo; instanceof devuelve true si el objeto es una instancia de la clase: papa instanceof Comida; || devuelve true si cualquiera de las expresiones es verdad: (a<5) || (a>20).

Expresiones numricas
Una expresin es un conjunto de operandos unidos mediante operadores para especificar una operacin determinada. Todas las expresiones cuando se evaluan retornan un valor. Por ejemplo: a + 1
suma + c cantidad * precio 7 * Math.sqrt(a) - b / 2 (sqrt indica raiz cuadrada)

17

UNIVERSIDAD TECNOLGICA NACIONAL - FACULTAD CRDOBA Tecnicatura Superior en Programacin Asignatura: Laboratorio III
Docentes: Ing. Cynthia Corso/Ing. Nicols Colacciopo.

2.5 Conversin entre tipos de datos


Cuando Java tiene que evaluar una expresin en la que intervienen operandos de di ferentes tipos, primero convierte, solo para realizar las operaciones solicitadas, los valores de los operandos al tipo del operando cuya precisin sea mas alta. Cuando se trate de una asignacin, convierte el valor de la derecha al tipo de la variable de la izquierda siempre que no haya perdida de informacin. En otro caso, Java exige que la conversin se realice explcitamente. La figura siguiente re sume los tipos colocados de izquierda a derecha de menos a mas precisos; las flechas indican las conversiones implicitas permitidas: //Conversion implicita byte bDato = 1; short sDato = 0; int iDato = 0: long lDato = 0; float fDato = 0; double dDato = 0; sDato = bDato; iDato = sDato; lDato = iDato; fDato = lDato; dDato = fDato + lDato - iDato * sDato / bDato; System.out.println(dDato); // resultado: 1.0 Java permite una conversin explicita (conversin forzada) del tipo de una expresin mediante una construccin denominada cast, que tiene la forma: (tipo) expresion Cualquier valor de un tipo entero o real puede ser convertido a o desde cual quier tipo numrico. No se pueden realizar conversiones entre los tipos enteros o reales y el tipo Boolean. Por ejemplo: // Conversion explicita (cast) byte bDato = 0; short sDato = 0; int iDato = 0; long lDato 0; float fDato = 0; double dDato = 2; fDato = (float)dDato; lDato = (long)fDato; iDato = (int)lDato; sDato = (short)iDato; bDato = (byte)(sDato + iDato - lDato * fDato / dDato); System.out.println(bDato); // resultado: 2 La expresin es convertida al tipo especificado si esa conversin esta permitida; en otro caso, se obtendr un error. La utilizacin apropiada de construcciones cast garantiza una evaluacin consistente, pero siempre que se pueda, es mejor evitarla ya que suprime la verificacin de tipo proporcionada por el compilador y por consiguiente puede conducir a resultados inesperados, o cuando menos, a una perdida de precisin en el resultado. Por ejemplo: float r; r = (float)Math.sgrt(10); // el resultado se redondea perdiendo precisin ya que sqrt //devuelve un valor de tipo double

2.6 Estructuras de Control


Es la manera como se van encadenando, uniendo entre s las acciones, dando origen a los distintos tipos de estructuras.

Estructura secuencial

La estructura secuencial es aqulla en la que una accin sigue a otra en secuencia. Las tareas se suceden de tal modo que la salida de una es la entrada de la siguiente y as sucesivamente hasta el fin del proceso. 18

UNIVERSIDAD TECNOLGICA NACIONAL - FACULTAD CRDOBA Tecnicatura Superior en Programacin Asignatura: Laboratorio III
Docentes: Ing. Cynthia Corso/Ing. Nicols Colacciopo.

Accin 1 Accin 1 Accin 2 Accin 2 ...

...
Accin n

Accin n

Estructuras selectivas (alternativas, de decisin)


Cuando el programa desea especificar dos o ms caminos alternativos, se deben utilizar estructuras selectivas o de decisin. Una instruccin de decisin o seleccin evala una condicin y en funcin del resultado de esa condicin se bifurcar a un determinado punto. Las estructura selectivas se utilizan para tomar decisiones lgicas; de ah que se suelan denominar tambin estructuras de decisin o alternativas. En la estructura selectiva se evala una condicin y en funcin del resultado de la misma se realiza una opcin u otra. Las condiciones se especifican usando expresiones lgicas. La representacin de una estructura selectiva se hace con palabra en pseudocdigo, con una figura geomtrica en forma de rombo. Las estructuras selectivas o alternativas pueden ser: Simples Dobles. Mltiples.

Alternativa simple
La estructura alternativa simple si_entonces, ejecuta una determinada accin cuando se cumple una determinada condicin. La seleccin si-entonces evala la condicin: Si la condicin es verdadera, entonces ejecuta la accin (simple o contar de varias acciones) Si la condicin es falsa, entonces no hace nada. La representacin grfica de la estructura condicional simple se ve a continuacin. La estructura alternativa simple si_entonces, ejecuta una determinada accin cuando se cumple una determinada condicin. La seleccin si-entonces evala la condicin: Si la condicin es verdadera, entonces ejecuta la accin (simple o contar de varias acciones) Si la condicin es falsa, entonces no hace nada. La representacin grfica de la estructura condicional simple se ve a continuacin.

19

UNIVERSIDAD TECNOLGICA NACIONAL - FACULTAD CRDOBA Tecnicatura Superior en Programacin Asignatura: Laboratorio III
Docentes: Ing. Cynthia Corso/Ing. Nicols Colacciopo.

Condicin

V
Si condicin Entonces Acciones Acciones Fin_Si

Observe que las palabras del pseudocdigo Si y Fin_Si se alinean verticalmente indentando (sangrando) la accin o bloque de acciones. Afirmemos esto con un ejemplo en Java: Sea generar dos nmeros al azar, y si el segundo es mayor emitir un mensaje informndolo. public class PruebaMay{ static int numero1 = (int)(10000*Math.random()); static int numero2 = (int)(10000*Math.random()); public static void main(String args[]){ System.out.println("Primer numero " + numero1); System.out.println("Segundo numero " + numero2); if(numero2 > numero1) System.out.println("El segundo numero es el mayor"); } }; Primer proceso

Primer numero 1337 Segundo numero 7231 El segundo numero es el mayor Process Exit...
Segundo Primer numero 5410 Segundo numero 929 Process Exit...

Alternativa doble
La estructura anterior es muy limitada y normalmente se necesitar una estructura que permita elegir entre dos opciones o alternativas posibles, en funcin del cumplimiento o no de una determinada condicin. Si la condicin es verdadera, se ejecuta la accines_1 y si es falsa, se ejecuta la accines_2.

20

UNIVERSIDAD TECNOLGICA NACIONAL - FACULTAD CRDOBA Tecnicatura Superior en Programacin Asignatura: Laboratorio III
Docentes: Ing. Cynthia Corso/Ing. Nicols Colacciopo.

Condicin

Si Condicin Entonces Acciones

Acciones

Acciones

Sino Acciones Fin_Si

Observe que en el pseudocdigo las acciones que dependen de entonces y sino estn indentadas en relacin con las palabras Si y Fin_Si; este procedimiento aumenta la legibilidad de la estructura y es el medio idneo para representar algoritmos. Ejemplo Java: Generar dos nmeros al azar indicando cual de ellos es el mayor. public class PruebaMay{ static int numero1 = (int)(10000*Math.random()); static int numero2 = (int)(10000*Math.random()); public static void main(String args[]){ System.out.println("Primer numero " + numero1); System.out.println("Segundo numero " + numero2); if(numero2 > numero1) System.out.println("El segundo numero es el mayor"); else System.out.println("El primer numero es el mayor"); } }; Un par de procesos: Primer numero 5868 Segundo numero 654 El primer numero es el mayor Process Exit... Primer numero 3965 Segundo numero 7360 El segundo numero es el mayor Process Exit...

Alternativa mltiple
Con frecuencia, es necesario que existan ms de dos elecciones posibles. Por ejemplo: en la resolucin de la ecuacin de segundo grado existen tres posibles alternativas o caminos a seguir, segn que el discriminante sea negativo, nulo o positivo. Este problema, se podra resolver por estructuras alternativas simples o dobles, anidadas o en cascada; sin embargo, con este mtodo, si el nmero de alternativas es grande puede plantear serios problemas de escritura del algoritmo y naturalmente de legibilidad. La estructura de decisin mltiple evaluar una expresin que podr tomar n valores distintos: 1, 2, 3,..., n. Segn que elija uno de estos valores en la condicin, se realizar una de las n acciones, o lo que es igual, el flujo del algoritmo seguir sin determinado camino entre los n posibles.

21

UNIVERSIDAD TECNOLGICA NACIONAL - FACULTAD CRDOBA Tecnicatura Superior en Programacin Asignatura: Laboratorio III
Docentes: Ing. Cynthia Corso/Ing. Nicols Colacciopo.

Valor

Segn Valor Hacer

...

Valor 1: Accin 1 Valor 2: Accin 2

Accin 1

Accin 2

Accin 3

Accin n

Valor 3: Accin 3

...
Valor n: Accin n Fin Segn

En Java, su implementacin requiere de las siguientes palabras reservadas: switch case.. .break. . .default switch (expresin_entera) { case (valor1) : instrucciones_1; [break;] case (valor2) : instrucciones_2; [break;] ... case (valorN) : instrucciones_N; [break;] default: instrucciones_por_defecto; } Ejemplo: Expresar literalmente el resto de la divisin entera por 6 de un numero generado al azar. public class Switch1{ static int numero = (int)(1000*Math.random()); static int resto = numero%6; public static void main(String args[]){ System.out.println("El numero random: " + numero); System.out.println("Su resto en la division: " + resto); switch (resto) { case (0): System.out.println("Confirmo, el resto es cero"); break; case (1): System.out.println("Confirmo, el resto es uno"); break; case (2): System.out.println("Confirmo, el resto es dos"); break; case (3): System.out.println("Confirmo, el resto es tres"); break; default: System.out.println("El resto es mayor que tres"); break; } } }; Ejecutamos: El numero random: 326 Su resto en la division: 2 Confirmo, el resto es dos Process Exit... 22

UNIVERSIDAD TECNOLGICA NACIONAL - FACULTAD CRDOBA Tecnicatura Superior en Programacin Asignatura: Laboratorio III
Docentes: Ing. Cynthia Corso/Ing. Nicols Colacciopo.

Si sacamos los breaks la alternativa mltiple es tambin acumulativa, ejemplo: public class Switch2{ static int numero = (int)(5*Math.random()); public static void main(String args[]){ System.out.println("El numero random: " + numero); switch (numero){ case (5): System.out.println("Pasando por case (5)"); case (4): System.out.println("Pasando por case (4)"); case (3): System.out.println("Pasando por case (3)"); case (2): System.out.println("Pasando por case (2)"); default: System.out.println("Pasando por default"); } } }; y nos da: El numero random: 4 Pasando por case (4) Pasando por case (3) Pasando por case (2) Pasando por default Process Exit...

Estructuras repetitivas (Iteracin)


Las computadoras estn especialmente diseadas para todas aquellas aplicaciones en las cuales una operacin o conjunto de ellas deben repetirse muchas veces. Un tipo muy importante de estructura es el algoritmo necesario para repetir una o varias acciones un nmero determinado de veces. Un programa que lee una lista de nmeros puede repetir la misma secuencia de mensajes el usuario e instrucciones de lectura hasta que todos los nmeros de un archivo se lean. Las estructuras que repiten una secuencia de instrucciones un nmero determinado de veces se denominan bucles y se denomina iteracin al hecho de repetir la ejecucin de una secuencia de acciones. Un bucle o lazo (loop) es un segmento de un algoritmo o programa, cuyas instrucciones se repiten un nmero determinado de veces mientras se cumple una determinada condicin. Se debe establecer un mecanismo para determinar las tareas repetitivas. Este mecanismo es una condicin que puede ser verdadera o falsa y que se comprueba una vez a cada paso o iteracin del bucle. Un bucle consta de tres partes: Decisin. Cuerpo del bucle. Salida del bucle. Por ejemplo: Si se desea sumar una lista de nmeros escritos desde teclado. El medio conocido hasta ahora es leer los nmeros y aadir sus valores a una variable SUMA que contenga las sucesivas sumas parciales. La variable SUMA se hace igual a cero y a continuacin se incrementa en el valor del nmero cada vez que uno de ellos se lea. El algoritmo que resuelve este problema es: Inicio suma = 0 leer nmero suma = suma + numero leer nmero 23

UNIVERSIDAD TECNOLGICA NACIONAL - FACULTAD CRDOBA Tecnicatura Superior en Programacin Asignatura: Laboratorio III
suma =suma + numero ... Docentes: Ing. Cynthia Corso/Ing. Nicols Colacciopo.

fin y as sucesivamente para cada nmero de la lista. acciones.

En otras palabras, el algoritmo repite muchas veces las

Las dos principales preguntas a realizarse en el diseo de un bucle son: Qu contiene el bucle? y Cuntas veces se debe repetir? Cuando se utiliza un bucle para sumar una lista de nmeros, se necesita saber cuntos nmeros se han de sumar. Para ello necesitaremos conocer algn medio para detener el bucle. Para detener la ejecucin de los bucles se utiliza una condicin de parada. Los tres casos generales de estructuras repetitivas dependen de la situacin y modo de la condicin. La condicin se evala tan pronto se encuentra en el algoritmo y su resultado producir los tres tipos de estructuras citadas. 1. La condicin de salida del bucle se realiza al principio del bucle (estructura mientras) 2. La condicin de salida se origina al Final del bucle; el bucle se ejecuta mientras se verifique una cierta condicin. 3. La condicin de salida se realiza con un contador que cuenta el nmero de iteraciones.

Estructura mientras

La estructura repetitiva mientras es aquella en la que el bucle se repite mientras se cumple una determinada condicin. La representacin grfica es:

condiciones

F
Mientras condicin Hacer Acciones

V
Acciones

Fin_Mientras

Cuando se ejecuta la instruccin mientras, la primera cosa que sucede es que se evala la condicin (una expresin booleana). Si se evala falsa, ninguna accin se toma y el programa prosigue en la instruccin siguiente al cuerpo del bucle. Si la expresin booleana es verdadera, entonces se ejecuta el cuerpo del bucle, despus de lo cual se evala de nuevo la expresin booleana. Este proceso se repite una y otra vez mientras la expresin (condicin) sea verdadera. La sintaxis en Java es: while (condicin) { instrucciones... }

Estructura repetir o hacer mientras


Existen muchas situaciones en las que se desea que un bucle se ejecute al menos una vez antes de comprobar la condicin de repeticin. En la estructura mientras si el valor de la expresin booleana es inicialmente falsa, el 24

UNIVERSIDAD TECNOLGICA NACIONAL - FACULTAD CRDOBA Tecnicatura Superior en Programacin Asignatura: Laboratorio III
Docentes: Ing. Cynthia Corso/Ing. Nicols Colacciopo.

cuerpo del bucle no se ejecutar; Por ello se necesitan otros tipos de estructuras repetitivas. La estructura repetir o hacer mientras se ejecuta mientras se cumpla una condicin de permanencia que se comprueba al final del bucle.

Acciones

Hacer Acciones Mientras Condicin Repetir

V
Condicin

Con una estructura repetir, el cuerpo del bucle se ejecuta siempre al menos una vez. Cuando una estructura repetir se ejecuta, la primera cosa que sucede es la ejecucin del bucle y a continuacin se evala la condicin (una expresin booleana). Si se evala como verdadera, el cuerpo del bucle se repite y la condicin se evala una vez. Despus de cada iteracin del cuerpo del bucle, la condicin se evala; s es falsa, el bucle termina y el programa sigue en la siguiente instruccin. DIFERENCIAS DE LAS Estructura Mientras Es un ciclo de 0 a N, porque si la condicin inicial no se cumple no se entra al ciclo, por lo tanto existe la posibilidad de que las aciones del ciclo no sean ejecutadas. La sintaxis en Java es: do { instrucciones... } while (condicin); ESTRUCTURAS MIENTRAS Y REPETIR Estructura Hacer o Repetir Es un ciclo de 1 a N, porque siempre se ejecuta al menos una vez las instrucciones del ciclo, si la primera vez la condicin inicial es falsa, al evaluar la condicin al final, se termina el ciclo pero ya se ejecutaron por lo menos una vez las acciones.

Estructura desde /para

(Ciclo for)

En muchas ocasiones se conoce de antemano el nmero de veces que desean ejecutar las acciones de un bucle. En estos casos, en que el nmero de iteraciones es fija, se puede usar la estructura desde o para. La estructura desde ejecuta las acciones del cuerpo del bucle un nmero especificado de veces y de modo automtico controla el nmero de iteraciones o pasos a travs del cuerpo del bucle, usando una o mas variables de control de ciclo. La estructura est formada por cuatro partes: 1. Inicializacin: Inicializa la o las variables de control. 2. Condicin: Condicin (expresin booleana) del ciclo, generalmente esta directamente relacionada con la o las variables de control. 3. Incremento: Incrementa la o las variable de control, los valores van evolucionando mientras el ciclo se repita. 25

UNIVERSIDAD TECNOLGICA NACIONAL - FACULTAD CRDOBA Tecnicatura Superior en Programacin Asignatura: Laboratorio III
Docentes: Ing. Cynthia Corso/Ing. Nicols Colacciopo.

4. Cuerpo: Sentencia simple o compuesta que se repite de acuerdo a si se cumple la condicin del ciclo o no. La ejecucin de la sentencia desde sucede de la siguiente forma: 1. Se inicializan la o las variables de control. 2. Se evalua la condicin: a. Si el resultado es true (verdadero), se ejecuta el bloque de sentencias, se evala la expresin que da lugar al incremento de la o las variables de control y se vuelve al punto 2. b. Si el resultado es false (falso), la ejecucin de la sentencia se da por finalizada y se pasa el control a la siguiente sentencia del programa. Consideraciones: * El incremento de la variable de control siempre es 1 si no se indica expresamente lo contrario. Es posible que el incremento sea distinto de uno, positivo o negativo. * La variable de control normalmente ser de tipo entero y es normal emplear como nombre las letras: i, j, k. * Al incremento se le suele denominar tambin paso. * Todas las clusulas (inicializacin, condicin, incrementacin) son opcionales. Puede faltar una cualquiera, pueden faltar todas. Si no hay condicin de permanencia significa que no saldremos nunca del ciclo, a menos que dentro del cuerpo existe una sentencia break o return. * El ciclo for en realidad es un ciclo while ampliado con lugares especficos para inicializacin e incrementacin. Si queremos reemplazarlo por l, simplemente trasladamos la inicializacin inmediatamente antes del ciclo y la incrementacin debe ser lo ultimo dentro del cuerpo. * La condicin del ciclo puede ser cualquiera, no es obligatorio que sea una evaluacin de la variable incrementada automticamente.

Inicializacin, Incremento

Condicin,

Inicializacion Incrementacin

Condicin Acciones

Acciones

La sintaxis en Java es: for (inicializacin; condicin; incrementacin) { instrucciones... }

Control General del Flujo


Cuando se necesita interrumpir el control del flujo se puede utilizar: break [etiqueta] : Permite salir de la estructura alternativa mltiple o repetitiva. continue [etiqueta] : Permite saltar al principio de una ejecucin repetitiva. 26

UNIVERSIDAD TECNOLGICA NACIONAL - FACULTAD CRDOBA Tecnicatura Superior en Programacin Asignatura: Laboratorio III
return expr; : retorna desde una funcin. Docentes: Ing. Cynthia Corso/Ing. Nicols Colacciopo.

Por ejemplo: import java.io.*; class bucles { public static void main(String argv[]) { int i=0; for (i=1; i<5; i++) { System.out.println(antes + i); if (i==2) continue; if (i==3) break; System.out.println(despus +i); } } La salida es: antes 1 despus 1 antes 2 antes 3

Otras Instrucciones Hay otras instrucciones que controlan el flujo del programa: catch, throw, throws, try y finally (se ver cuando tratemos excepciones)

2.7 Entrada y Salida Estandar


Mtodos de salida.
Java tiene un objeto esttico incorporado, llamado System.out que ejecuta la salida al dispositivo de "salida normal". Algunos sistemas operativos, (Unix/Linux), permiten a los usuarios redirigir la salida a archivos, o como entrada a otros programas, pero la salida predeterminada es a la ventana de consola Java. El objeto System.out es una instancia de la clase Java.io.PrintStream. Esta clase define mtodos para una corriente de salida a memoria, un buffer o memoria temporal, que a continuacin se vaca cuando la ventana de consola queda lista para imprimir caracteres. Esta clase tambin permite los siguientes mtodos para salida simple: print(Object o): imprimir el objeto o usando su mtodo toString. Para acceder a este objeto hay que colocar en la primera lnea del programa: import java.io.*; que importa el paquete java.io de la biblioteca estndar de Java. print(String s): imprimir la string s. print(<base_type> b): imprimir el valor b del tipo base println(String s): imprimir la string s, y cambio de rengln. flush(): imprimir y vaciar el contenido del buffer de impresin. Por ejemplo, vase el siguiente fragmento de programa: System.out.print("Valores Java: ); System.out.print(3.1 41 6); System.out.print(','); System.out.print(15); System.out.println(" (doubIe, char, int).");

27

UNIVERSIDAD TECNOLGICA NACIONAL - FACULTAD CRDOBA Tecnicatura Superior en Programacin Asignatura: Laboratorio III
Cuando se ejecuta, este fragmento origina la siguiente salida: Valores Java: 3.1416,15 (double, char, int) Naturalmente, esta salida aparecer en la ventana de la consola de Java. Docentes: Ing. Cynthia Corso/Ing. Nicols Colacciopo.

Mtodos de entrada.
As como hay un objeto especial para ejecutar salidas a la consola de Java, Java, tambin hay otro, llamado System.in, para ejecutar la entrada desde esa ventana. Tcnicamente, la entrada proviene en realidad del dispositivo de entrada Standard, que por omisin es el teclado de la computadora, y la ventana de la consola reproduce sus caracteres. El objeto System.in es un ejemplo de la clase java.io.InputStream, que por definicin avanza carcter a carcter. Esta forma de entrada es, normalmente, demasiado primitiva para ser cmoda, pero tambin se puede usar para definir otro objeto de entrada que la procese en forma fluida y con buffer, con las clases java.io.BuffereReader y java.io.InputStreamReader. De todas maneras, la entrada en Java es un tanto laboriosa. Por ese motivo un profesor de la ctedra Paradigmas de Programacin (Ing. Gustavo Garca) desarroll una clase ms amigable. He aqu su documentacin: La clase In permite que una aplicacin pueda leer datos de pantalla fcilmente. Todos los mtodos son estticos por lo que no es necesario crear una instancia de esta clase para realizar la lectura de datos. Es ms, para evitar la innecesaria instanciacin de In su constructor se ha definido privado. Esto impide tanto la creacin de objetos de esta clase como su derivacin o extensin. Para leer cada tipo de dato hay que usar el mtodo correspondiente: Tipo de dato Entero Entero largo Real Cadena de caracteres (sin espacios) Linea de caracteres Mtodo readInt() readLong() readFloat() readString() readLine() Ejemplo int i = In.readInt(); long l = In.readLOng(); float f = In.readFloat(); String str = In.readString(); String line = In.readLine();

El siguiente es un ejemplo de uso de los mtodos de entrada de esta clase. Si ejecutamos el main() que sigue:

28

UNIVERSIDAD TECNOLGICA NACIONAL - FACULTAD CRDOBA Tecnicatura Superior en Programacin Asignatura: Laboratorio III
Docentes: Ing. Cynthia Corso/Ing. Nicols Colacciopo.

La codificacin de la clase In es la que se muestra a continuacin. No la pedimos en clase, pero si UD desea conocerla, es la siguiente: // Inicio cdigo clase In

import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.IOException; import java.util.StringTokenizer; import java.util.NoSuchElementException; public class In { /** * Objeto utilizado para parsear la linea introducida por el usuario * mediante el teclado. * @see #getNextToken(String) */ private static StringTokenizer st; /** * Objeto de I/O (entrada/salida) utilizado para leer los datos desde el * teclado. * @see #getNextToken(String) */ private static BufferedReader source; /** * Constructor privado implementado para evitar instanciacion y * derivacion. */ private In() {} 29

UNIVERSIDAD TECNOLGICA NACIONAL - FACULTAD CRDOBA Tecnicatura Superior en Programacin Asignatura: Laboratorio III
Docentes: Ing. Cynthia Corso/Ing. Nicols Colacciopo.

/** * Metodo utilizado para leer cadenas de caracteres que no contengan * espacios. Los siguientes caracteres son considerados espacios: * <ul> * <li><code>' '</code>: espacio en blanco. * <li><code>'\t'</code>: tabulacion (tab). * <li><code>'\n'</code>: nueva linea, equivalente al [Enter] (new-line). * <li><code>'\r'</code>: retorno de carro (carriage-return). * <li><code>'\f'</code>: avance de pagina (form-feed). * </ul> * @return la primer palabra completa que se haya introducido. * @see #readLine() */ public static String readString() { return getNextToken(); } /** * Metodo utilizado para leer cadenas de caracteres que contengan * espacios en blanco y/o tabulaciones. * @return la linea introducida hasta que se encuentre un [Enter]. * @see #readString() */ public static String readLine() { return getNextToken("\r\n\f"); } /** * Metodo utilizado para leer numeros enteros de 32 bits. * @return el numero introducido o 0 (cero) si el valor introducido * no puede ser interpretado como numero entero. Esto ocurre cuando * se introducen letras o signos de puntuacion mezclados con el * numero. * @see #readLong() */ public static int readInt() { return (int)readLong(); } /** * Metodo utilizado para leer numeros enteros de 64 bits. * @return el numero introducido o 0L (cero) si el valor introducido * no puede ser interpretado como numero entero. Esto ocurre cuando * se introducen letras o signos de puntuacion mezclados con el * numero. * @see #readInt() */ public static long readLong() { long retVal = 0; try { retVal = Long.parseLong(getNextToken()); } catch (NumberFormatException e) {} return retVal; } /** * Metodo utilizado para leer numeros reales de 32 bits de * precision. * @return el numero introducido o 0.0F (cero) si el valor introducido * no puede ser interpretado como numero entero. Esto ocurre cuando * se introducen letras o signos de puntuacion mezclados con el * numero. Los unicos signos permitidos son el - (menos) al * comienzo del numero y una unica aparicion del . * (punto decimal). * @see #readDouble() 30

UNIVERSIDAD TECNOLGICA NACIONAL - FACULTAD CRDOBA Tecnicatura Superior en Programacin Asignatura: Laboratorio III
*/ public static float readFloat() { return (float)readDouble(); } /** * Metodo utilizado para leer numeros reales de 64 bits de * precision. * @return el numero introducido o 0.0 (cero) si el valor introducido * no puede ser interpretado como numero entero. Esto ocurre cuando * se introducen letras o signos de puntuacion mezclados con el * numero. Los unicos signos permitidos son el - (menos) al * comienzo del numero y una unica aparicion del . * (punto decimal). * @see #readFloat() */ public static double readDouble() { double retVal = 0.0; try { retVal = Double.valueOf(getNextToken()).doubleValue(); } catch (NumberFormatException e) {} return retVal; } /** * Metodo utilizado para leer * @return el primer caracter * si se introdujo una cadena * @see #readString() */ public static char readChar() char car = '\0'; String str; un caracter. de la cadena introducida o '\0' (caracter nulo) vacia. { Docentes: Ing. Cynthia Corso/Ing. Nicols Colacciopo.

str = getNextToken("\0"); if (str.length() > 0) { car = str.charAt(0); st = new StringTokenizer(str.substring(1)); } return car; } /** * Metodo utilizado para obtener la siguiente palabra (o numero) * del objeto parseador de la entrada. * @return siguiente elemento del parseador de cadenas, considerando como * separadores a los caracteres de espacio (ver documentacion de * {@link #readString() readString()}). * @see #getNextToken(String) * @see #st * @see "Documentacion de la clase <code>StringTokenizer</code> en el * sitio oficial de Java: <a href="http://java.sun.com">http://java.sun.com</a>." */ private static String getNextToken() { return getNextToken(null); } /** * Metodo utilizado para obtener el siguiente elemento del objeto * parseador de la entrada. Los elementos estaran definidos por el * delimitador que se recibe como parametro. * @param delim delimitador a utilizar durante el parseo de la entrada. Si * el parametro es <code>null</code> se tomarn los delimitadores * indicados en {@link #readString() readString()}. * @return siguiente elemento del parseador de cadenas, considerando como * separadores al par&aacute;metro recibido. 31

UNIVERSIDAD TECNOLGICA NACIONAL - FACULTAD CRDOBA Tecnicatura Superior en Programacin Asignatura: Laboratorio III
Docentes: Ing. Cynthia Corso/Ing. Nicols Colacciopo.

* @see #getNextToken() * @see #st * @see "Documentaci&oacute;n de la clase <code>StringTokenizer</code> en el * sitio oficial de Java: <a href="http://java.sun.com">http://java.sun.com</a>." */ private static String getNextToken(String delim) { String input; String retVal = ""; try { if ((st == null) || !st.hasMoreElements()) { if (source == null) { source = new BufferedReader(new InputStreamReader(System.in)); } input = source.readLine(); st = new StringTokenizer(input); } if (delim == null) { delim = " \t\n\r\f"; } retVal = st.nextToken(delim); } catch (NoSuchElementException e1) { // si ocurre una excepcin, no hacer nada } catch (IOException e2) { // si ocurre una excepcin, no hacer nada } return retVal; } } // Fin cdigo clase In

2.8 Clases en Java


Como ya vimos, las clases son moldes o modelos para construir objetos. En ellas se especifican los atributos y mtodos generales a todos los objetos construidos a partir de esa clase.

ESTRUCTURA GENERAL
Una clase se define con la palabra reservada class. La sintaxis de una clase es: [public] [final | abstract] class nombre_de_la_Clase [extends ClaseMadre] [implements Interfase1 [, Interfase2 ]...] { [Lista_de_atributos] [lista_de_mtodos] } Todo lo que est entre [y] es opcional. Como se ve, lo nico obligatorio es class y el nombre de la clase.

32

UNIVERSIDAD TECNOLGICA NACIONAL - FACULTAD CRDOBA Tecnicatura Superior en Programacin Asignatura: Laboratorio III
Docentes: Ing. Cynthia Corso/Ing. Nicols Colacciopo.

Ejemplo:
public class Alumno { //lista de atributos } //lista de mtodos

MIEMBROS DE UNA CLASE


Una clase contiene elementos, llamados miembros, que pueden ser datos, llamados atributos, y funciones que manipulan esos datos llamados mtodos.

ATRIBUTOS
Los atributos pueden ser variables de : tipos bsicos. (int, float, char, etc.) tipos referenciados (objetos, String, vectores, listas, etc.) La declaracin sigue siempre el mismo esquema: [Modificador de acceso] [ static ] [ final ] [ transient ] [ volatile ] Tipo NombreVariable [ = Valor ]; ejemplo: int legajo; String nombre;

METODOS
Un mtodo es una funcin bsica de java. La definicin de un mtodo consta de una cabecera y del cuerpo del mtodo encerrado entre llaves. La sintaxis es la siguiente: [modificador de acceso] [ static ] [ abstract ] [ final ] [ native ] [ synchronized ] TipoDevuelto NombreMtodo (tipo1 nombre1 [, tipo2 nmbre2]...] ) [ throws excepcin [, excepcin2 ] { declaraciones de variables locales; sentencias; [return [ (] expresin [)] ]; } Ejemplo: public void setLegajo(int l) { legajo = l; }

33

UNIVERSIDAD TECNOLGICA NACIONAL - FACULTAD CRDOBA Tecnicatura Superior en Programacin Asignatura: Laboratorio III
2.8.1 Parmetros
Los mtodos pueden utilizar valores que les pasa el objeto que los llama (parmetros), indicados con tipo1 nombre1, tipo2 nombre2 en el esquema de la declaracin. La lista de parmetros es la lista de nombres de variables separados por comas, con sus tipos asociados, que reciben los valores de los argumentos cuando se llama al mtodo. Un mtodo puede recibir como parmetros valores prcticamente de cualquier tipo. Estos parmetros sern usados por el mtodo para realizar operaciones que lleven a la accin que se espera generar. Los parmetros que va a recibir un determinado mtodo habr que indicarlos en la declaracin, tras el identificador y entre parntesis. La declaracin propiamente dicha es similar a la que realizamos cuando definimos una variable, es decir, facilitaremos los tipos y los nombres, usando la coma para separar unos parmetros de otros. Los parmetros tienen el mbito y duracin de la funcin. Esto significa que los parmetros se podrn ver y utilizar slo dentro de la funcin. Docentes: Ing. Cynthia Corso/Ing. Nicols Colacciopo.

Tipos de parmetros
Los parmetros pueden ser de cualquiera de los tipos ya vistos. Si son tipos bsicos, el mtodo recibe el valor del parmetro; si son referencias, recibe un puntero a los datos (referencia). En general existen dos tipos de parmetros: Parmetros por valor: Este mtodo copia el valor de un argumento en el parmetro formal del mtodo. De esta forma los cambios realizados en los parmetros no afectan a la variable original utilizada en la llamada. Parmetros por referencia: La llamada por referencia es la segunda forma de pasar argumentos a un mtodo. De esta forma se copia la direccin de memoria del argumento en el parmetro. Dentro del mtodo se usa esta direccin de memoria para acceder al contenido. Esto significa que los cambios hechos a los parmetros afectan a las variables usadas en la llamada al mtodo.

ACCESIBILIDAD DE LOS MIEMBROS


Los accesos a los miembros se determinan en el diseo de la clase luego de la abstraccin, cuando se aplica el encapsulamiento, y es cuando se determina que miembros pueden ser accedidos por otros objetos y cuales no. Java proporciona cuatro niveles de encapsulamiento que vamos a examinar a continuacin.

Private
La proteccin ms fuerte que puede dar a los atributos o a un mtodo es la proteccin private. Esta proteccin impide a los objetos de otras clases acceder a los atributos o a los mtodos de la clase considerada. En el dibujo siguiente, un muro rodea la clase Madre e impide a las otras clases acceder a aquellos de sus atributos o mtodos declarados como private.

Proteccin: private
PaqueteA
Colega 1 Madre

PaqueteB
Extranjera

Colega 2 HijaQuerida HijaIndigna

34

UNIVERSIDAD TECNOLGICA NACIONAL - FACULTAD CRDOBA Tecnicatura Superior en Programacin Asignatura: Laboratorio III
Docentes: Ing. Cynthia Corso/Ing. Nicols Colacciopo.

Public
Un atributo o un mtodo calificado public es accesible por cualquier clase. Los miembros pblicos son parte de la interface del objeto con otros, es decir, es la comunicacin que tiene ese objeto con el exterior, a travs de esos miembros el objeto puede recibir los mensajes y contestarlos.

Proteccin: public
PaqueteA
Colega 1 Madre

PaqueteB
Extranjera

Colega 2 HijaQuerida HijaIndigna

Protected
El tipo de proteccin siguiente viene definido por la palabra clave protected simplemente. Permite restringir el acceso a las subclases y a las clases del mismo paquete.

Proteccin: protected
PaqueteA
Colega 1 Madre

PaqueteB
Extranjera

Colega 2 HijaQuerida HijaIndigna

Friendly
Los miembros con este tipo de acceso pueden ser accedidos por todas las clases que se encuentren en el paquete donde se encuentre tambin definida la clase.

35

UNIVERSIDAD TECNOLGICA NACIONAL - FACULTAD CRDOBA Tecnicatura Superior en Programacin Asignatura: Laboratorio III
Proteccin: friendly
PaqueteA
Colega 1 Madre

Docentes: Ing. Cynthia Corso/Ing. Nicols Colacciopo.

PaqueteB
Extranjera

Colega 2 HijaQuerida HijaIndigna

2.8.2 Objetos - Instancia de una clase


Los objetos de una clase son instancias de la misma. Se crean en tiempo de ejecucin con la estructura definida en la clase.

Declaracin:
NombreClase nombreObjeto; Ejemplo: Alumno a;

Creacin:
NombreObjeto = new NombreClase(); Ejemplo: a = new Alumno(); Otra forma ms resumida de crear un objeto es: Alumno a=new Alumno(); El operador new guarda en la variable denominado comprador ubicados en algn lugar reserva espacio en memoria para los miembros dato y devuelve una referencia que se a de tipo Alumno que denominamos ahora objeto. Dicha sentencia, crea un objeto de la clase Alumno. Grficamente puede imaginarse una referencia y el objeto referenciado, del espacio de memoria correspondiente a su aplicacin:

Espacio de memoria comprador referencia

Objeto referenciado legajo = 1 nombre =juan promedio =7

36

UNIVERSIDAD TECNOLGICA NACIONAL - FACULTAD CRDOBA Tecnicatura Superior en Programacin Asignatura: Laboratorio III
Docentes: Ing. Cynthia Corso/Ing. Nicols Colacciopo.

Acceso a los miembros


Desde un objeto se puede acceder a los miembros mediante la siguiente sintaxis objeto.miembro; Por ejemplo, Si tenemos dentro de la clase alumno un mtodo para cambiar el nombre, se podra invocar de la siguiente manera: a.setNombre(Juan);

Destruccin
Cuando el objeto sale fuera de mbito, la referencia al mismo se libera y un programa llamado garbagge collector lo borra, liberando la memoria utilizada. Ejemplo Por ejemplo tenemos la siguiente clase: public class Alumno { private int legajo; private String nombre; private float promedio; public void Inicializar(int l, String n, float p) { legajo = l; nombre = n; promedio = p; } public void setLegajo(int l) { legajo = l; } public void setNombre(String n) { nombre = n; } public void setPromedio(float p) { promedio = p; } public int getLegajo() { return legajo; } public String getNombre() { return nombre; } public float getPromedio() { return promedio; } }

El objeto actual (puntero this)

Nunca se puede llamar una funcin miembro de una clase a menos que se asocie con un objeto (una instancia de la clase). Cmo sabe una funcin miembro cul es la instancia de una clase (el objeto especfico) asociada con ella?. El mtodo utilizado por Java es aadir un argumento extra oculto a las funciones miembro. Este argumento es un puntero al objeto de la clase que los enlaza con la funcin asociada y recibe un nombre especial denominado this. Dentro de una funcin miembro, this apunta al objeto asociado con la invocacin de la funcin miembro. Normalmente, el programador no necesita preocuparse por este puntero, ya que el lenguaje realiza la operacin automticamente transparente a las funciones miembro que la utiliza. Las referencias a los miembros del objeto asociado a la funcin se realiza con el prefijo this y el operador de acceso punto . . Si tomamos como ejemplo la siguiente clase: public class Cliente { private int codigo; private float importe; public int getCodigo() { return codigo; } public float getImporte() { return importe; } public void setImporte(float x) { importe = x; } 37

UNIVERSIDAD TECNOLGICA NACIONAL - FACULTAD CRDOBA Tecnicatura Superior en Programacin Asignatura: Laboratorio III
}; Cuando escribimos en el mtodo setImporte importe = x; para asignar un valor a importe, no tuvimos necesidad de indicar a qu objeto perteneca. Cuando no se pone el objeto antes del atributo, se asume que la variable es un miembro del objeto, o es una variable local o parmetro. Si los nombres colisionan, como podra ser en el siguiente mtodo public void setImporte(float importe) { this.importe = importe; } Usamos this para indicar al objeto actual. Esta palabra reservada siempre est apuntando al objeto actual, y puede usarse como en este caso, para resolver una ambigedad, o puede usarse, por ejemplo, como parmetro en una llamada a una funcin para pasar un puntero al objeto asociado: objeto.procesar(this); Docentes: Ing. Cynthia Corso/Ing. Nicols Colacciopo.

2.9 Miembros estticos


Atributos estticos
Le hemos explicado anteriormente que cada objeto posea sus propios atributos. Es posible que todos los objetos de una misma clase tengan atributos en comn: son los atributos de clase, introducidos por la palabra clave static. Estos atributos son legibles y modificables por todos los objetos de una misma clase. La modificacin de un atributo static es tenida en cuenta inmediatamente por los otros objetos, porque lo comparten. Un miembro de una clase se puede declarar esttico (static). Para un miembro dato, la designacin static significa que existe slo una instancia de ese miembro en la clase. Un miembro dato esttico es compartido por todos los objetos de una clase y existe incluso si ningn objeto de esta clase existe siendo su valor comn a la clase completa. A un miembro dato static se le asigna una zona fija de almacenamiento en tiempo de compilacin, al igual que una variable global, pero el identificador de la variable est dentro del mbito utilizando solamente el operador de resolucin con el nombre de la clase. Ejemplo: public class Participante { static int participado = 2; int noparticipado = 2; void Modifica () { participado = 3; noparticipado = 3; } } public class demostatic { static public void main (String [] arg) { Participante p1 = new Participante (); Participante p2 = new Participante (); System.out.println(pl: + pl.participado + + pl.noparticipado); pl.Modifica (); System.out.println(pl: + pl.participado + + pl.noparticipado); System.out.println(p2: + p2.participado + + p2.noparticipado); } 38

UNIVERSIDAD TECNOLGICA NACIONAL - FACULTAD CRDOBA Tecnicatura Superior en Programacin Asignatura: Laboratorio III
} dar como resultado: C:\Programasjava\objetos>java demostatic pl: 2 2 pl: 3 3 p2: 3 2 En efecto, la llamada a Modifica () ha modificado el atributo participado. Este resultado se extiende a todos los objetos de la misma clase, mientras que slo ha modificado el atributo noparticipado del objeto actual. Docentes: Ing. Cynthia Corso/Ing. Nicols Colacciopo.

Mtodos estticos

Los mtodos estticos (static) son, como los atributos, mtodos de clase: si el mtodo no es static, es un mtodo de instancia. El significado es el mismo que para los atributos: un mtodo static es compartido por todas las instancias de la clase.

Mtodos especiales Mtodos sobrecargados


Tradicionalmente, un mtodo o una funcin realizan una tarea especfica para la que estn programados. Java soporta la sobrecarga de mtodos, lo que le permite definir versiones de stos con el mismo nombre en una clase, siempre y cuando las versiones tengan diferentes firmas. Una firma incluye el nombre del mtodo, el nmero, el orden y los tipos de sus parmetros formales. public public public public int Suma(int a, int b); int Suma(int a, int b, int c); float Suma(float a, float b); String Suma(String a, String b);

Tenga en cuenta que, slo ocurre la sobrecarga, cuando se utiliza varias veces el mismo nombre de mtodo dentro de una clase. No hay un lmite prctico para las versiones que es posible apilar en el mismo nombre de mtodo.

2.10 Mtodos constructores


Para cada clase, pueden definirse uno o ms mtodos particulares: son los constructores. Un constructor es una funcin especial que sirve para construir o inicializar objetos. En general: * * * * * * Tienen el mismo nombre de la clase que inicializa. No devuelven valores. Pueden admitir parmetros como cualquier otra funcin. Pueden existir ms de un constructor, e incluso no existir. Si no se define ningn constructor de una clase, el compilador generar un constructor por defecto. Se invocan en el momento de la creacin del objeto.

public class Alumno { private int legajo; private String nombre; private float promedio; public Alumno() legajo = nombre = promedio { 0; ; = 0; //inicializa en 0

39

UNIVERSIDAD TECNOLGICA NACIONAL - FACULTAD CRDOBA Tecnicatura Superior en Programacin Asignatura: Laboratorio III
Docentes: Ing. Cynthia Corso/Ing. Nicols Colacciopo.

} ...//Dems mtodos de entrada y salida. } } Cuando, desde una aplicacin u otro objeto, se crea una instancia de la clase Alumno, mediante la instruccin: Alumnno a = new Alumno(); el compilador busca un mtodo con el mismo nombre de la clase y que se corresponda con la llamada en cuanto al tipo y nmero de parmetros. Dicho mtodo se llama Constructor, y una clase puede tener ms de un constructor (no as un objeto instanciado, ya que, una vez que fue creado, no puede "recrearse" a s mismo). En tiempo de ejecucin al encontrarse dicha instruccin, se reserva espacio para el objeto instanciado y se crea su estructura y se llama al mtodo constructor. La utilizacin de las instrucciones vistas, por ejemplo new(), entraa en efecto la creacin fsica del objeto y la llamada a uno de sus constructores. Si hay varios constructores, estos difieren unos de otros por los parmetros que se les pasa mediante new(). Los constructores no tienen tipo de retorno. Atencin, si por error definimos un constructor que tenga un tipo de retomo, el compilador lo considerar como un mtodo normal. En ese caso tendremos la impresin de que el constructor no se llama en el momento de la creacin del objeto. En realidad, se llamar a un constructor predeterminado, porque no habremos definido realmente un constructor.

Tipos de constructores Constructores por defecto

El constructor por defecto es un constructor que no acepta argumentos. Por ejemplo: public class Alumno { private int legajo; private String nombre; private float promedio; public Alumno() { legajo = 0; //inicializa en 0 nombre = ; promedio = 0; } ... //Dems mtodos de entrada y salida. } } Para crear objetos usando este constructor se escribira (en el metodo main(), de la clase Aplicacin): Alumnno a = new Alumno();

Constructores con argumentos

El constructor con argumentos, como su nombre lo indica posee argumentos. Por ejemplo: public class Alumno { private int legajo; private String nombre; private float promedio; 40

UNIVERSIDAD TECNOLGICA NACIONAL - FACULTAD CRDOBA Tecnicatura Superior en Programacin Asignatura: Laboratorio III
Docentes: Ing. Cynthia Corso/Ing. Nicols Colacciopo.

public Alumno(int l, String n, float p) //Constructor con argumentos. { legajo = l; nombre = n; promedio = p; } ... //Dems mtodos de entrada y salida. } } Para crear objetos usando este constructor se escribira (en el metodo main(), de la clase Aplicacin): Alumnno a = new Alumno(100, juan,7);

Constructores copiadores
Un constructor que crea un objeto a partir de uno existente se llama constructor copiador o de copias. Es un constructor que toma como nico parmetro otro objeto del mismo tipo. El constructor de copia tiene slo un argumento: una referencia a un objeto de la misma clase. Por ejemplo: public class Alumno { private int legajo; private String nombre; private float promedio; public Alumno(alumno a) //Mtodo constructor. { legajo = a.legajo; nombre = a.nombre; promedio = a.promedio; } ... //Dems mtodos de entrada y salida. } Para crear objetos usando este constructor se escribira (en el metodo main(), de la clase Aplicacin): Alumnno a, b; a = new Alumno(100, juan,7); b = new Alumno(a); //crea el objeto b a partir del objeto a

Caso especial
En Java es posible inicializar los atributos indicando los valores que se les darn en la creacin del objeto. Estos valores se adjudican tras la creacin fsica del objeto, pero antes de la llamada al constructor. Los atributos no inicializados explcitamente por el desarrollador tienen valores predeterminados, iguales a cero.

41

UNIVERSIDAD TECNOLGICA NACIONAL - FACULTAD CRDOBA Tecnicatura Superior en Programacin Asignatura: Laboratorio III
Docentes: Ing. Cynthia Corso/Ing. Nicols Colacciopo.

Lectura Complementaria.
Estructura de un programa en java Los programas de java estn basados en clases. Cada clase se graba en un archivo con extensin java. Un programa puede estar formado por muchas clases, y una sola de ellas debe llevar el mtodo main que es el punto de entrada al programa.

Maquina Virtual Clase1.java


Complacin

Clase1.class Enlaza y ejecuta

Clase2.java

Clase2.class

Ejecucin

Clase3.java

Clase3.class

Paquetes (package)

Las clases estn agrupadas en paquetes (package), generalmente estan en un directorio en comn, el paquete puede tener un nombre o no, si no lo tiene java, asume como del mismo paquete a las clases que estn en el mismo directorio.

Package A (c:\misTrabajos1) Clase1.java

Package B (c:\misTrabajos2) Clase4.java

Clase2.java

Clase5.java

Clase3.java

Clase6.java

42

UNIVERSIDAD TECNOLGICA NACIONAL - FACULTAD CRDOBA Tecnicatura Superior en Programacin Asignatura: Laboratorio III
Proyectos
Un proyecto est formado por un conjunto de clases y paquetes y tienen en comn un solo punto de entrada, la funcin main, en alguna clase del proyecto. Docentes: Ing. Cynthia Corso/Ing. Nicols Colacciopo.

43

UNIVERSIDAD TECNOLGICA NACIONAL - FACULTAD CRDOBA Tecnicatura Superior en Programacin Asignatura: Laboratorio III
Parte Prctica
Convenciones de trabajo
Para representar las clases se utilizan los diagramas de clases. Los mtodos que modifican los atributos, set..., debern recibir un valor externo enviado por otro objeto, por ejemplo el objeto que lleva el main(), y asignarlo al atributo de la clase, por ejemplo setLado1(x), donde x es el valor externo que se asigna al atributo Lado1. Los mtodos que notifican los atributos, get..., debern retornar el valor del atributo, por ejemplo getLado1(), que retorna el valor del Lado1, generalmente los mtodos de salidas de los objetos no reciben parmetros, solo devuelven resultados. Todos los mtodos finalizan con la sentencia return, los mtodos que no devuelven nada pueden tener o no la palabra return, pero los mtodos que retornan algo, tienen la obligacin de tener la palabra return y el valor que se est devolviendo. Docentes: Ing. Cynthia Corso/Ing. Nicols Colacciopo.

44

UNIVERSIDAD TECNOLGICA NACIONAL - FACULTAD CRDOBA Tecnicatura Superior en Programacin Asignatura: Laboratorio III
Docentes: Ing. Cynthia Corso/Ing. Nicols Colacciopo.

Ejercitacin Propuesta: Unidad I


CODIFICACIN EN JAVA 1) Enunciado: Dado el valor de tres lados, calcular su permetro. Se pide: Crear en el mtodo main() un objeto y determinar si el permetro es superior a 10.

Diagrama de Clases.

Triangulo.java //Triangulo.java class Triangulo { //Definicion de atributos. private int lado1; private int lado2; private int lado3; public Triangulo() { lado1=0; lado2=0; lado3=0; } public int getLado1() {return lado1;} public int getLado2() {return lado2;} public int getLado3() {return lado3;} public void setLado1(int x) {lado1=x;} public void setLado2(int x) {lado2=x;} 45

UNIVERSIDAD TECNOLGICA NACIONAL - FACULTAD CRDOBA Tecnicatura Superior en Programacin Asignatura: Laboratorio III
Docentes: Ing. Cynthia Corso/Ing. Nicols Colacciopo.

public void setLado3(int x) {lado3=x;} public String toString() { return lado1 + "" + lado2 + ""+ lado3;} public int CalcularPerimetro() {int per=0; per=lado1+lado2+lado3; return per; } } //Aplicacion.java public class Aplicacion { public static void main(String args[]) { //Creo las var. auxiliares. int l1,l2,l3; int res=0; Triangulo t; System.out.println("Ingrese valor primer lado:"); l1=In.readInt(); System.out.println("Ingrese valor segundo lado:"); l2=In.readInt(); System.out.println("Ingrese valor tercer lado:"); l3=In.readInt(); t=new Triangulo();//Creo el objeto t.Inicializar(); t.setLado1(l1); t.setLado2(l2); t.setLado3(l3); System.out.println("El valor del perimetro es:" + t.CalcularPerimetro()); res=t.CalcularPerimetro(); if (res>10) System.out.println("Perimetro mayor a 10!"); else System.out.println("Perimetro NO mayor a 10!"); } }

46

UNIVERSIDAD TECNOLGICA NACIONAL - FACULTAD CRDOBA Tecnicatura Superior en Programacin Asignatura: Laboratorio III
Docentes: Ing. Cynthia Corso/Ing. Nicols Colacciopo.

2) Enunciado: Se dispone de un listado de notas finales, de los alumnos de un curso determinado. La informacin con la que se cuenta de la entidad Alumno es: legajo del alumno, Nombre Alumno, Nota1, Nota2. Se pide: Modelizar la entidad en un Diagrama de Clases y disear un mtodo de control que retorne el promedio. En el mtodo main(), crear dos objetos y determinar cul de ellos tuvo un mayor promedio.

Diagrama de Clases.

//Alumno.java public class Alumno { private int leg; private String NomApe; private float nota1; private float nota2; public Alumno() { leg=0; NomApe=""; nota1=0; nota2=0;} public int getLeg() { return leg;} public String getNomApe() { return NomApe;} public float getNota1() { return nota1;} public float getNota2() { return nota2;} public String toString() { return leg+ ""+ NomApe+ ""+ nota1+ ""+ nota2;} 47

UNIVERSIDAD TECNOLGICA NACIONAL - FACULTAD CRDOBA Tecnicatura Superior en Programacin Asignatura: Laboratorio III
Docentes: Ing. Cynthia Corso/Ing. Nicols Colacciopo.

public void setLeg(int x) { leg=x;} public void setApeNom(String x) { NomApe=x;} public void setNota1(float x) { nota1=x;} public void setNota2(float x) { nota2=x;} public float CalcularPromedio() { float prom; prom=(nota1+nota2)/2; return prom; } } //Aplicacin.java public class Aplicacion { public static void main(String args[]) { //Def. de variables auxiliares. int leg1,leg2; float n1,n2,n3,n4,res,res1; String nom1,nom2; Alumno a1,a2; a1=new Alumno(); a2=new Alumno(); System.out.println("Ingrese leg"); leg1=In.readInt(); System.out.println("Ingrese Nombre"); nom1=In.readString(); System.out.println("Ingrese nota1"); n1=In.readFloat(); System.out.println("Ingrese nota2"); n2=In.readFloat(); a1.setLeg(leg1); a1.setApeNom(nom1); a1.setNota1(n1); a1.setNota2(n2); System.out.println("Ingrese leg"); leg2=In.readInt(); System.out.println("Ingrese Nombre"); nom2=In.readString(); System.out.println("Ingrese nota1"); n3=In.readFloat(); System.out.println("Ingrese nota2"); n4=In.readFloat(); a2.setLeg(leg2); a2.setApeNom(nom2); a2.setNota1(n3); a2.setNota2(n4); System.out.println("El a1.CalcularPromedio()); promedio del alumno" + a1.getNomApe() + "es:" +

48

UNIVERSIDAD TECNOLGICA NACIONAL - FACULTAD CRDOBA Tecnicatura Superior en Programacin Asignatura: Laboratorio III
System.out.println("El a2.CalcularPromedio()); promedio del alumno" Docentes: Ing. Cynthia Corso/Ing. Nicols Colacciopo.

a2.getNomApe()

"es:"

res=a1.CalcularPromedio(); res1=a2.CalcularPromedio(); if (res>res1) System.out.println("El alumno de mayor promedio fue el primero"); else System.out.println("El alumno de mayor promedio fue el segundo"); } } 3) Enunciado: El propietario de un comercio, dispone al final del da un informe de la recaudacin diaria, de los mozos que all trabajan. Los datos de la entidad Informe son: Nro. de mozo, Nombre, Apellido, Total Recaudado. Se conoce que la cantidad de mozos que trabajan en el comercio son dos. Se pide: Modelizar las entidades involucradas, en un Diagrama de Clases. Se necesita saber cual fue el importe recaudado. Adems mostrar el nombre y apellido del mozo que ms recaudo en el da.

Diagrama de Clases.

//Mozo.java public class Mozo { private int nro; private String nombre; private String ape; private float total; public Mozo()//Constructor por defecto. { nro=0; 49

UNIVERSIDAD TECNOLGICA NACIONAL - FACULTAD CRDOBA Tecnicatura Superior en Programacin Asignatura: Laboratorio III
nombre=""; ape=""; total=0;} public Mozo(int n,String nom,String a, float tot)//Constructor por defecto. { nro=n; nombre=nom; ape=a; total=tot;} public int getNro() { return nro;} public String getNombre() { return nombre;} public String getApellido() { return ape;} public float getTotal() { return total;} public String toString() { String aux=""; aux=nro+ " " + nombre + " "+ ape + " " + total; return aux;} public void setNro(int n) { nro=n;} public void setNombre(String n) { nombre=n;} public void setApellido(String a) { ape=a;} public void setTotal(float t) { total=t;} }//Fin clase Mozo //Aplicacion.java import java.io.*; import utn.frc.io.In; public class Aplicacion { public static void main(String args[]) { //Declarac. de variables. String nom,a; float monto,tot; int n; Mozo m1,m2; m1=new Mozo();//Creo un obj. tipo mozo, invoco const. por defecto System.out.println("Ingrese nro mozo1:"); n=In.readInt(); m1.setNro(n); System.out.println("Ingrese nombre mozo1:"); nom=In.readString(); m1.setNombre(nom); System.out.println("Ingrese apellido mozo1:"); a=In.readString(); m1.setApellido(a); System.out.println("Ingrese monto recaudado mozo1:"); 50 Docentes: Ing. Cynthia Corso/Ing. Nicols Colacciopo.

UNIVERSIDAD TECNOLGICA NACIONAL - FACULTAD CRDOBA Tecnicatura Superior en Programacin Asignatura: Laboratorio III
monto=In.readFloat(); m1.setTotal(monto); //Creo el mozo 2. Utlizo para la creacion objeto,constructor //con argumentos. System.out.println("Ingrese nro mozo2:"); n=In.readInt(); System.out.println("Ingrese nombre mozo2:"); nom=In.readString(); System.out.println("Ingrese apellido mozo2:"); a=In.readString(); System.out.println("Ingrese monto recaudado mozo2:"); monto=In.readFloat(); m2=new Mozo(n,nom,a,monto); //Calculo el importe total recaudado. tot=m1.getTotal()+m2.getTotal(); System.out.println("El total recaudado en el dia es:" + tot); //Informo el nombre del mozo que mas recaudo en el dia. if (m1.getTotal()>m2.getTotal()) System.out.println("El mozo que mas recaudo es:" + m1.getApellido()); else System.out.println("El mozo que mas recaudo es:" + m2.getApellido()); } } Docentes: Ing. Cynthia Corso/Ing. Nicols Colacciopo.

m1.getNombre() m2.getNombre()

+ +

" "

" "

+ +

4) Con motivo de los juegos panamericanos, se le solicit a un equipo de programadores la confeccin de un programa para calcular estadsticas sobre el resultado de los juegos. Para ello se van a comparar los resultados obtenidos por tres pases. De cada uno de ellos se conoce su nombre, y la cantidad de medallas que obtuvo en la competencia. Se solicita un programa que cargue los datos indicados y realice lo siguiente: Determinar y mostrar en que orden de mrito terminaron los tres pases, con respecto a las medallas obtenidas (es decir, que pas obtuvo la mayor cantidad de medallas, que pas qued segundo, y qu pas obtuvo la menor cantidad de medallas) Mostrar el total de medallas que se obtuvieron durante la competencia Determinar, para el pas que obtuvo la mayor cantidad de medallas, el porcentaje que representa esta cantidad sobre el total de medallas obtenidas en la competencia por los tres pases.

Diagrama de Clases.

51

UNIVERSIDAD TECNOLGICA NACIONAL - FACULTAD CRDOBA Tecnicatura Superior en Programacin Asignatura: Laboratorio III
//Pais.java public class Pais { private String nombre; private int medallas; public Pais() //Constructor por defecto. { nombre=; medallas=0; } public String getNombre() { return nombre; } public void setNombre(String x) { this.nombre = x;} public int getMedallas() { return medallas;} public void setMedallas(int x) { medallas = x; } } //Principal.java public class Principal { public static void main(String[] args) { //Declaracin de variables Pais pais1; //Primer pas participante Pais pais2; //Segundo pas participante Pais pais3; //Tercer pas participante Pais primero; //Pas con mayor cantidad de medallas Pais segundo; //Pas segundo en el orden de mrito Pais tercero; //Pas con menor cantidad de medallas int total; //Total de medallas obtenidas en la competencia double porcentaje; //Porcentaje del primer pas sobre el total //Cargo los datos de los tres paises participantes //Cargo el primer pas pais1 = new Pais(); System.out.println("Ingrese el nombre del primer pas:"); pais1.setNombre(In.readLine()); System.out.println("Ingrese la cantidad de medallas de " + pais1.getNombre() + ":"); pais1.setMedallas(In.readInt()); //Cargo el segundo pas pais2 = new Pais(); System.out.println("Ingrese el nombre del segundo pas:"); pais2.setNombre(In.readLine()); System.out.println("Ingrese la cantidad de medallas de " + pais2.getNombre() + ":"); pais2.setMedallas(In.readInt()); //Cargo el tercer pas pais3 = new Pais(); System.out.println("Ingrese el nombre del tercer pas:"); pais3.setNombre(In.readLine()); System.out.println("Ingrese la cantidad de medallas de " + pais3.getNombre() + ":"); pais3.setMedallas(In.readInt()); //Calculo el rden de mrito de los tres pases 52 Docentes: Ing. Cynthia Corso/Ing. Nicols Colacciopo.

UNIVERSIDAD TECNOLGICA NACIONAL - FACULTAD CRDOBA Tecnicatura Superior en Programacin Asignatura: Laboratorio III
Docentes: Ing. Cynthia Corso/Ing. Nicols Colacciopo.

if (pais1.getMedallas() > pais2.getMedallas() && pais1.getMedallas() pais3.getMedallas()) { //Si pais1 es el que tiene mas medallas, comparo pais2 y pais3 para //sacar segundo y tercer puesto primero = pais1; if (pais2.getMedallas() > pais3.getMedallas()) { segundo = pais2; tercero = pais3; } else { segundo = pais3; tercero = pais2; } } else { if (pais2.getMedallas() > pais3.getMedallas()) { //Si pais2 es el que tiene mas medallas, comparo pais1 y pais3 para //sacar segundo y tercer puesto primero = pais2; if (pais1.getMedallas() > pais3.getMedallas()) { segundo = pais1; tercero = pais3; } else { segundo = pais3; tercero = pais1; } } else { //Si pais3 es el que tiene mas medallas, comparo pais1 y pais2 para //sacar segundo y tercer puesto primero = pais3; if (pais1.getMedallas() > pais2.getMedallas()) { segundo = pais1; tercero = pais2; } else { segundo = pais2; tercero = pais1; } } } //Calculo el total de medallas y el porcentaje del primero sobre el total total = pais1.getMedallas() + pais2.getMedallas() + pais3.getMedallas(); porcentaje = ((double) primero.getMedallas() / total)*100;

>

//Muestra los resultados al usuario System.out.println("El rden de mrito de los tres pases es el siguiente:"); System.out.println("Primero: " + primero.getNombre()); System.out.println("Segundo: " + segundo.getNombre()); System.out.println("Tercero: " + tercero.getNombre()); System.out.println("\nEl total de medallas obtenidas en la competencia es: " + total); System.out.println("\nEl porcentaje del primero sobre el total es: " + porcentaje + "%"); 53

UNIVERSIDAD TECNOLGICA NACIONAL - FACULTAD CRDOBA Tecnicatura Superior en Programacin Asignatura: Laboratorio III
} } 5) Un profesor de un curso universitario desea generar un programa que lo ayude a determinar la condicin de los alumnos de su curso. Para ello solicita un programa que haga lo siguiente: Cargue por teclado las notas de los n alumnos que pertenece n al curso (donde n es un valor que se ingresa por teclado). De cada alumno se conoce su nombre y tres notas (primer parcial, segundo parcial y tercer parcial) Determine el promedio general del curso. Este promedio se calcula como el promedio de los promedios individuales de cada alumno. Determine cual fue el alumno con el mayor promedio y muestre sus datos. Determine la cantidad de alumnos regulares y alumnos libres del curso.(un alumno est regular si tiene promedio igual o superior a cuatro, y libre en caso contrario) Docentes: Ing. Cynthia Corso/Ing. Nicols Colacciopo.

Diagrama de Clases.

//Alumno.java public class Alumno { private String nombre; private int nota1; private int nota2; private int nota3; public String getNombre() { return nombre; } public void setNombre(String x) { nombre = x; } public int getNota1() { return nota1; }

54

UNIVERSIDAD TECNOLGICA NACIONAL - FACULTAD CRDOBA Tecnicatura Superior en Programacin Asignatura: Laboratorio III
public void setNota1(int x) { nota1 = x; } public int getNota2() { return nota2; } public void setNota2(int x) { nota2 = x; } public int getNota3() { return nota3; } public void setNota3(int x) { nota3 = x; } public double Promedio() { double prom = (double)(nota1 + nota2 + nota3) / 3; return prom; } public boolean esRegular() { double prom = Promedio(); if (prom >= 4) return true; else return false; } } //Aplicacion.java public class Aplicacion { public static void main(String args[]) { int n; //Cantidad de alumnos a cargar int i; //Variable de control del ciclo for Alumno alumno = null; //Se usa para cargar los datos de un alumno, y hacer los clculos Alumno mayor = null; //Alumno con el mayor promedio double promedioGeneral; //Promedio de todo el curso double acumuladorPromedios = 0; //Variable donde se van acumulando los promedios parciales int cantidadLibres = 0; //Contador que indica la cantidad de alumnos libres int cantidadRegulares = 0 ; //Contador que indica la cantidad de alumnos regulares. //Solicitio la cantidad de alumnos que posee el curso //Luego se va a cargar esta cantidad de alumnos System.out.println("Ingrese la cantidad de alumnos del curso:"); n = In.readInt(); for(i=0 ; i<n ; i++) { //Creo un nuevo alumno e ingreso los datos del mismo alumno = new Alumno(); System.out.println("Ingrese los datos del alumno:"); System.out.println("Ingrese nombre del alumno:"); alumno.setNombre(In.readLine()); System.out.println("Ingrese la nota del primer parcial:"); alumno.setNota1(In.readInt()); System.out.println("Ingrese la nota del segundo parcial:"); alumno.setNota2(In.readInt()); System.out.println("Ingrese la nota del tercer parcial:"); alumno.setNota3(In.readInt()); //Acumulo los promedios de los alumnos para calcular el del curso 55 Docentes: Ing. Cynthia Corso/Ing. Nicols Colacciopo.

UNIVERSIDAD TECNOLGICA NACIONAL - FACULTAD CRDOBA Tecnicatura Superior en Programacin Asignatura: Laboratorio III
acumuladorPromedios += alumno.getPromedio(); //Obtengo la condicin del alumno, y lo cuento como regular o libre if (alumno.esRegular()) cantidadRegulares ++; else cantidadLibres ++; //Hago el clculo del mayor promedio. Si es el primero lo tomo como //mayor. if (i==0 || alumno.getPromedio() > mayor.getPromedio() ) { //Guardo directamente el objeto alumno como el mayor, as tengo //todos los datos de dicho alumno. mayor = alumno; } } //Calculo el promedio general promedioGeneral = acumuladorPromedios / n; //Muestro los resultados System.out.println("\nEl promedio general del curso es:" + promedioGeneral ); System.out.println("\nEl alumno con mayor promedio es: " + mayor.getNombre()); System.out.println("Sus notas son:"); System.out.println("Primer parcial: " + mayor.getNota1()); System.out.println("Segundo parcial: " + mayor.getNota2()); System.out.println("Tercer parcial: "+ mayor.getNota3()); System.out.println("\nCantidad de alumnos regulares: " + cantidadRegulares); System.out.println("Cantidad de alumnos libres: " + cantidadLibres ); }} 6) Para contabilizar los datos de un censo realizado en un pequeo pueblo del interior de Crdoba, se requiere un programa que muestre la siguiente informacin: Cantidad total de habitantes. El apellido de la familia con mayor cantidad de habitantes. (Y este punto y el de abajo es opcional, puede ser uno solo) El domicilio de la familia con menor cantidad de habitantes. La cantidad de viviendas habitada por un solo individuo. Todos los datos de la primer vivienda registrada. Docentes: Ing. Cynthia Corso/Ing. Nicols Colacciopo.

Por cada hogar censado se registra el apellido de la familia, el domicilio y la cantidad de habitantes que habitan en dicha vivienda. Mediante informacin obtenida en otros estudios anteriores se conoce de antemano la cantidad de viviendas a censar. Antes de ingresar los datos de cada vivienda para su procesamiento, se deber ingresar la cantidad de viviendas. Por cada vivienda que se registre, el programa deber generar y asignrsele automticamente un cdigo correlativo empezando desde el nmero 1 para la primera vivienda registrada. Este cdigo de deber incrementar de uno en uno a medida que se registren las siguientes viviendas.

56

UNIVERSIDAD TECNOLGICA NACIONAL - FACULTAD CRDOBA Tecnicatura Superior en Programacin Asignatura: Laboratorio III
Docentes: Ing. Cynthia Corso/Ing. Nicols Colacciopo.

-apellido Vivienda -domicilio -cantHabitantes -codigo +Vivienda() -nro

Aplicacion
+main()

Diagrama de Clases.

+Vivienda(ap,do,cH) +setApellido(a) +setDomicilio(d) +setCantHabitantes(c) +getApellido() +getDomicilio() +getCantHabitantes() +getCodigo +toString() //Vivienda.java public class Vivienda { private String apellido; private String domicilio; private int cantHabitantes; private int codigo; private static int nro=0; public Vivienda() { apellido=""; domicilio=""; cantHabitantes=0; nro++; codigo=nro; } public Vivienda(String ape,String dom,int cH) { apellido=ape; domicilio=dom; cantHabitantes=cH; nro++; codigo=nro; } public void setApellido(String ape) { apellido=ape; } public void setDomicilio(String domicilio) { this.domicilio=domicilio; } public void setCantHabitantes(int cH) { cantHabitantes=cH; } public String getApellido() { return apellido; } public String getDomicilio() { 57

UNIVERSIDAD TECNOLGICA NACIONAL - FACULTAD CRDOBA Tecnicatura Superior en Programacin Asignatura: Laboratorio III
Docentes: Ing. Cynthia Corso/Ing. Nicols Colacciopo.

return domicilio; } public int getCantHabitantes() { return cantHabitantes; } public int getCodigo() //Solo el mtodo getCodigo() { //para el atributo codigo return codigo; } public String toString() { String aux= ""; aux="\nCdigo de Vivienda: "+domicilio+"\nHabitantes"+cantHabitantes; return aux; } } //Clase Aplicacion public class Aplicacion { public static void main(String args[]) { String apellido,domicilio; int cantHabitantes, n; String apellidoMayor,domicilioMenor,datos; int mayor,menor,contador,total; contador=total=mayor=menor=0; apellidoMayor=""; domicilioMenor=""; datos=""; do { System.out.println("\nIngrese la cantidad de viviendas censadas: "); n=In.readInt(); } while(n<0); Vivienda v=new Vivienda(); for(int i=0;i<n;i++) { System.out.println("\nIngrese apellido de la familia de la vivienda nro: "+(i+1)+": "); apellido=In.readString(); v.setApellido(apellido); System.out.println("Ingrese domicilio: "); domicilio=In.readLine(); v.setDomicilio(domicilio); System.out.println("Ingrese la cantidad de habitantes"); cantHabitantes=In.readInt(); v.setCantHabitantes(cantHabitantes); //Tambin directamente sin utilizar //variable:v.setCantHabitantes(In.readInt); //Tambin sin utilizar constructor sin parmetros: //Vivienda v=new Vivienda(apellido,domicilio,cantHabitantes); if (i==0) { mayor=menor=cantHabitantes; apellidoMayor=apellido; 58 "+codigo+"\nFamilia: "+apellido+"\nDomicilio:

UNIVERSIDAD TECNOLGICA NACIONAL - FACULTAD CRDOBA Tecnicatura Superior en Programacin Asignatura: Laboratorio III
domicilioMenor=domicilio; datos=v.toString(); } if(cantHabitantes>mayor) { mayor=cantHabitantes; apellidoMayor=apellido; } if(cantHabitantes<menor) { menor=cantHabitantes; domicilioMenor=domicilio; } if(cantHabitantes==1) contador+=1; total+=cantHabitantes; } System.out.println("\n\n**************Informacin obtenida**************"); System.out.println("\nCantidad total de habitantes: "+total); System.out.println("\nApellido de familia con mayor habitantes: "+apellidoMayor); System.out.println("\nDomicilio de familia con menor habitantes: "+domicilioMenor); System.out.println("\nCantidad de individuos que viven solos: "+contador); System.out.println("\nLos datos de la primer vivienda registrada son:\n"+datos); System.out.println("\n***************************************************"); } } Docentes: Ing. Cynthia Corso/Ing. Nicols Colacciopo.

59

UNIVERSIDAD TECNOLGICA NACIONAL - FACULTAD CRDOBA Tecnicatura Superior en Programacin Asignatura: Laboratorio III
Docentes: Ing. Cynthia Corso/Ing. Nicols Colacciopo.

Referencias.
Java 2. Curso de Programacin 2da Edicin. Autor: Fco Javier Ceballos.

60

Vous aimerez peut-être aussi