You are on page 1of 89

UNIDADES TECNOLOGICAS DE SANTANDER INGENIERIA DE TELECOMUNICACIONES

Prctica 0. Cmo mandar un proyecto.


Instrucciones Paso 1:
Al crear un nuevo proyecto es importante que veas en qu carpeta va a ir. En el dilogo de creacin de un nuevo proyecto puedes ver la carpeta en donde indica la fotografa:

Esta carpeta (D:\projects\Prueba) es la carpeta del proyecto. Dentro de ella encontramos toda la informacin de nuestro proyecto as como todos los archivos que lo componen. Debe tener una estructura similar a la siguiente:

build: contiene las clases compiladas en archivos .class dist: contiene el archivo .jar que permite ejecutar la aplicacin de Java directamente nbproject: contiene informacin sobre el proyecto de NetBeans que nos es irrelevante src: contiene los archivos .java que son la fuente de nuestro proyecto test: contiene los archivos de las pruebas de unidad build.xml: le indica a NetBeans cmo construir la aplicacin manifest.mf: es un archivo necesario para el .jar ejecutable de Java, le indica a la mquina virtual cmo correr el programa Una vez que te encuentres en esta carpeta debers borrar las carpetas build y dist (ya que regularmente son las ms grandes y son muy fciles de reproducir). Una vez que hayas hecho esto comprime la carpeta del proyecto (D:\projects\Prueba) y ese archivo es el que debes mandar.

1 PROGRAMACION ORIENTADA A OBJETOS

UNIDADES TECNOLOGICAS DE SANTANDER INGENIERIA DE TELECOMUNICACIONES

Prctica 1. Java IDE NetBeans.


Teora
Introduccin a Lenguajes de Programacin Qu son? Lenguajes de programacin: Herramienta utilizada para escribir programas Programa: Conjunto de instrucciones que se ejecutan en una computadora Categoras de los lenguajes de programacin: Mquina Bajo Nivel (Ensamblador) Alto Nivel (Java, C++) Lenguaje Mquina Instrucciones entendibles directamente por la computadora. Son muy complicadas y se representan en unos y ceros: Ejemplo: 0110 0010 1101 0011 0010 0000 0010 1001 Lenguajes de programacin Lenguaje de Bajo Nivel: Simplifican el proceso de programacin. Dependen de la arquitectura del procesador. Se escriben instrucciones utilizando cdigo alfabticos conocidos como nemotcnicos. Ejemplo: MOV AX 3 ADD AX 7 SUB AX 2 Lenguajes de alto nivel: Buscan abstraer la complejidad y permiten introducir cdigo con instrucciones ms entendibles, similares al lenguaje normal. Algunos lenguajes de alto nivel son: Java, C++, Visual Basic. if (x == y) System.out.println(Esto es una prueba); Algunos trminos tiles Compilador: Traduce las instrucciones de un lenguaje de alto nivel a lenguaje mquina. Cdigo fuente: Texto que define el comportamiento del programa. Compilacin: Es el acto de pasar el cdigo fuente a cdigo mquina. Cdigo ejecutable: Forma final que toma el programa, es el cdigo que la computadora puede leer y entender. Interpretados vs. Compilados Existen tres tendencias en cuanto a compilacin: Lenguajes interpretados: El cdigo es ledo lnea por lnea y ejecutado conforme se va leyendo. Estos programas son lentos porque deben leerse y convertirse a cdigo mquina al correr, pero tienen la ventaja de que pueden utilizarse en muchas plataformas diferentes porque no dependen de la mquina. Ejemplos: Perl, PHP y la mayora de los lenguajes Web. 2 PROGRAMACION ORIENTADA A OBJETOS

UNIDADES TECNOLOGICAS DE SANTANDER INGENIERIA DE TELECOMUNICACIONES


Lenguajes compilados: Se convierte el cdigo a cdigo mquina y despus se ejecuta. Estos programas son ms rpidos porque no deben ser interpretados, pero pierden flexibilidad porque dependen de la arquitectura del procesador. Ejemplos: C, C++. Compilacin intermedia: Qu podemos hacer si queremos tener la flexibilidad de poder correr en cualquier plataforma, pero no queremos perder la velocidad de la compilacin? Podemos compilar el cdigo a un lenguaje intermedio llamado bytecode y crear una mquina virtual que pueda traducir el bytecode a cdigo mquina para cada arquitectura diferente. Ejemplos: Java y toda la plataforma .Net. Programacin orientada a objetos Es un paradigma de programacin que utiliza objetos para describir las funciones y procedimientos de un programa. Es un paradigma muy popular porque la conciencia humana y nuestra manera de entender las cosas est muy relacionada con los objetos. En la programacin orientada a objetos todo es un objeto que fue creado de un molde, llamado clase.

Instrucciones Paso 1:
Antes de empezar veamos un poco de contexto sobre el lenguaje de programacin y el IDE que vamos a utilizar. Java es un lenguaje de programacin orientado a objetos que comaprte gran parte de su sintaxis con C y C++. Java es uno de los lenguajes ms poderosos que existen actualmente y desde la versin 6 es un proyecto open source, por lo que tiene el soporte de toda una comunidad de programadores, adems de Sun Microsystems que fueron los creadores originales. En 2005 Java se utilizaba en uno de cada cuatro proyectos, casi diez por ciento por encima de su siguiente competidor (C++) y ha seguido creciendo. Se estima que un noventa por ciento de las computadoras cuentan con una mquina virtual de Java, adems de que todos los celulares y una gran cantidad de dispositivos mviles tambin cuentan con Java. NetBeans es un entorno de desarrollo integrado (IDE por sus siglas en ingls). Esto quiere decir que integra todas las herramientas que necesitamos para poder desarrollar. Originalmente la programacin en Java era algo complicada porque Java cuenta con una enorme cantidad de librearas y funciones que era preciso aprenderse de memoria, viendo esto muchas compaas construyeron diferentes entornos de programacin para facilitar la tarea del programador. Entre los ms populares surgi Eclipse que rein como el nico y ms importante IDE de Java durante varios aos. Sun Microsystems desarrollo su propio IDE, que tena la ventaja de que fue creado por las mismas personas que crearon Java aos antes, este IDE fue NetBeans y despus de varios aos de desarrollo ha llegado a ser tan til y poderoso como Eclipse o quizs un poco ms.

Paso 2:
Lo primero que debemos hacer es descargar el kit de desarrollo de Java y el entorno de programacin NetBeans. Podemos conseguir estas dos herramientas en el site oficial de Sun Microsystems. Dentro de la pgina de descargas debemos descargar el JDK con NetBeans.

3 PROGRAMACION ORIENTADA A OBJETOS

UNIDADES TECNOLOGICAS DE SANTANDER INGENIERIA DE TELECOMUNICACIONES

Paso 3:
Una vez que hayamos descargado el paquete debemos correr el instalador. Despus de aceptar la licencia nos pregunta dnde queremos instalar y al final instala todos los componentes necesarios. Una vez terminado de instalar debemos buscar el cono de NetBeans en el escritorio o en el men inicio.

Corremos el programa haciendo doble click y nos lleva a la pantalla principal que es similar a esta:

El editor grfico de ventanas en NetBeans es parte de un proyecto llamado Matisse. Desde que sali NetBeans 5.5 han habido varias mejoras importantes que hacen que sea mucho ms fcil de utilizar y estas mejoras van a ser implementadas en la versin 6.0 de NetBeans. Si ests utilizando una versin anterior a la 6.0 puedes seguir los siguientes pasos para instalarlo: 1. Descarga el archivo con los mdulos de matisse y extraelos en alguna carpeta. 2. Abre NetBeans 3. Selecciona el men Tools -> Update Center

4 PROGRAMACION ORIENTADA A OBJETOS

UNIDADES TECNOLOGICAS DE SANTANDER INGENIERIA DE TELECOMUNICACIONES


4. Selecciona Install Manually Downloaded Modules

5. En la ventana de seleccionar mdulos presiona el botn Add y selecciona los mdulos que se encontraban dentro del archivo que descargaste en el primer paso.

6. Acepta el contrato de licencia y reinicia el IDE. Un IDE es una herramienta que nos permite escribir cdigo y compilar, en este caso se refiere a NetBeans.

Paso 4:
Ahora vamos a continuar con la creacin del proyecto en s. En esta pantalla podemos encontrar todas las herramientas necesarias para crear y manejar nuestros proyectos hechos en Java. Por el momento presiona el botn de nuevo proyecto. En la ventana que aparece selecciona un nuevo proyecto de Java

5 PROGRAMACION ORIENTADA A OBJETOS

UNIDADES TECNOLOGICAS DE SANTANDER INGENIERIA DE TELECOMUNICACIONES

En la segunda ventana ponle como nombre de proyecto HelloWorld. Es importante que en esta ventana revises el directorio en el que se guarda el proyecto para que ms adelante puedas acceder a tus archivos o puedas agregar imgenes y sonidos.

Al terminar aparecer la ventana de cdigo en la que podemos comencar a codificar nuestra aplicacin.

6 PROGRAMACION ORIENTADA A OBJETOS

UNIDADES TECNOLOGICAS DE SANTANDER INGENIERIA DE TELECOMUNICACIONES

Esto es lo que se llama una Clase en Java (esta clase en particular se llama Main, eso es un dato importante porque lo vamos a utilizar ms adelante). Las clases son el fundamento de la programacin orientada a objetos y podramos decir que son el molde con el que hacemos nuevos objetos. Las clases tienen atributos y mtodos. Los atributos son lo que nos dice cmo es esa clase, por ejemplo, los atributos de una persona son el color de ojos y el alto (entre muchos otros), los mtodos son las acciones que puede realizar una clase, por ejemplo correr. En el cdigo que se genera automaticamente por NetBeans tenemos dos mtodos, el mtodo Main() que tambin se conoce como el constructor de la clase y el mtodo main() que es el punto de inicio del programa (por las maysculas y minsculas Main es diferente de main).

Paso 5:
Dentro del mtodo main() escribe el siguiente cdigo:

Una vez que lo hayas escrito presiona el botn de compilar (o F11). En la ventana de compilacin deben aparecerte varios mensajes de compilacin y debe terminar en BUILD SUCCESSFUL (total time: 7 seconds). Esto quiere decir que nuestra aplicacin compil de manera adecuada y estamos listos para correrla. Presiona el botn correr aparecer el letrero "Hola!". (o presiona F6). En la parte inferior de la pantalla debe

Felicidades! Has creado tu primera aplicacin Java con NetBeans, pero esto no es lo que queremos que vea un cliente final. Para que un programa sea til para cualquier persona es necesario que tenga una interfaz grfica as que vamos a utilizar Swing para crear una interfaz grfica que nos muestre el mismo mensaje. Swing es un conjunto de libreras con las que cuenta Java para crear y mostrar una interfaz grfica. Dentro de estas libreras hay varias clases (recuerda, una clase es como un molde con el que podemos
7 PROGRAMACION ORIENTADA A OBJETOS

UNIDADES TECNOLOGICAS DE SANTANDER INGENIERIA DE TELECOMUNICACIONES


hacer objetos) que nos permiten mostrar ventanas, mensajes, botones, cajas de texto e incluso imgenes, audio o video. Una de las clases ms importantes de Swing es JFrame. Esta clase es una ventana que tiene un contenedor en el que podemos poner controles.

Como podemos ver en la imagen un JFrame es una ventana normal de Windows. Dentro de un JFrame existe algo llamado ContentPane. Un ContentPane es un contenedor de controles en el que podemos agregar los elementos de la interfaz grfica. Ahora veamos otro control importante en la generacin de interfaces grficas. El JLabel es una etiqueta con la que podemos motrar texto en nuestras aplicaciones. Un JLabel es una herramienta muy poderosa ya que nos permite agregar texto, cambiar el formato, la posicin, agregar imgenes y muchas cosas ms. Vamos a crear una clase que sea un JFrame y despus vamos a agregarle un JLabel para mostrar nuestro mensaje.

Paso 6:
Vuelve al cdigo de la clase Main. Como dijimos tenemos que convertir esta clase en un JFrame. Esto es sencillo, lo nico que debemos hacer es agregar la lnea extends JFrame en la parte de arriba despus de dnde dice public class Main como se ve en la imgen.

Es importante notar que dejar un rengln entre el nombre de la clase y el extends no es necesario, nicamente es para darle una mejor presentacin al cdigo, pero ustedes pueden seguir cualquier estilo que ustedes consideren ms claro. Despus de escribir esta lnea NetBeans la va a subrayar con una lnea roja, esto significa que el cdigo tiene un error. Poniendo el mouse sobre el error podemos obtener ms informacin sobre l.

Paso 7:
El error que nos marca NetBeans es que no conoce el smbolo. Esto quiere decir que no sabe qu es un JFrame, para resolver este tipo de errores debemos agregar la librera de la que hablaba hace unos momentos, en estos momentos todava no sabemos dnde est, pero por suerte NetBeans tambin nos muestra un foquito a la izquierda en el que, al hacer click, nos brinda una solucin. No siempre podemos confiar en las soluciones que brinda NetBeans porque despus de todo es una herramienta y no una persona que nos est haciendo la recomendacin, pero muchas veces su sugerencia es acertada, como en este caso que dice que debe agregar un import (veremos ms sobre este tema ms adelante). Selecciona la opcin y debe aparecer una lnea al principio de nuestra clase en la que resuelve el error.

8 PROGRAMACION ORIENTADA A OBJETOS

UNIDADES TECNOLOGICAS DE SANTANDER INGENIERIA DE TELECOMUNICACIONES


Paso 8:
Como vimos en la parte de arriba el mtodo Main (con mayscula) es el constructor de la clase. Este es el mtodo con el que vamos a crear nuevos objetos de nuestra clase (que es una ventana). Dentro de este mtodo debemos escribir algunas lneas de cdigo para darle un tamao a la ventana y para que se muestre. Copia el cdigo que se muestra en la siguiente imgen:

En el cdigo estamos utilizando la palabra clave this, que hace referencia a la misma clase que lo llama, es decir, a nuestra ventana. La primera lnea va a cambiar el tamao de nuestra ventana a 200 x 200. Escribe this.setS y espera unos momentos. Aparecer una pantalla que te muestra opciones de auto completar. Esta pantalla es muy til al programar ya que cuando no conocemos un mtodo nos brinda informacin sobre qu significan los parmetros y cmo utilizar el mtodo.

Por ejemplo, en esta imgen nos indica que el mtodo setSize() debe recibir dos nmeros enteros (int quiere decir nmero entero), y nos dice que el mtodo va a cambiar el tamao del componente (en este caso nuestra ventana) para que tenga el ancho y alto especificados. Tamben nos indica que podemos conseguir ms informacin viendo los mtodos getSize(), setBounds() y setMinimumSize(). Utilizando esta herramienta completa el cdigo para mostrar la ventana. La segunda lnea nos permite cambiar el ttulo de nuestra aplicacin. Podemos utilizar cualquier ttulo que nos guste, lo nico importante es pasarlo entre comillas porque es texto. La tercera lnea le dice a nuestra aplicacin qu debe hacer cuando el programa termine. En este caso nuestro constructor es nicamente una ventana, por lo que le indicamos que al cerrar la ventana la aplicacin termine con EXIT_ON_CLOSE. La cuarta lnea le indica a la ventana que es visible, por lo tanto se dibuja en pantalla.
9 PROGRAMACION ORIENTADA A OBJETOS

UNIDADES TECNOLOGICAS DE SANTANDER INGENIERIA DE TELECOMUNICACIONES


Paso 9:
Por ltimo debemos crear un nuevo objeto de nuestra ventana, esto es muy sencillo y lo logramos agregando la lnea que se ve en la imgen dentro del mtodo main() (con minscula).

Esta lnea est creando un nuevo objeto de la clase Main mandando llamar el constructor que acabamos de crear. Compila tu programa haciendo click en el botn compilar y luego crrelo haciendo click

en el botn correr . Con esto se muestra una ventana vaca, ya casi hacemos el programa que queramos, pero nos falta un mensaje. Para eso vamos a utilizar otra clase de Swing que se llama JLabel. En la parte superior del constructor escribe el cdigo como se ve en la imagen:

Una vez ms la primera lnea va a ser subrayada en rojo porque nos falta importar una librera. Ahora vamos a utilizar otra tcnica para resolver este mismo error. Haz click derecho sobre el cdigo y selecciona la opcin "Fix Imports". Con esto NetBeans revisar todo el cdigo y automaticametne va a agregar todas las librearas que necesitamos. En el cdigo lo que estamos haciendo es crear un nuevo JLabel. Su nombre ser lblHola (por convencin todos los JLabel deben empezar su nombre con lbl) y este JLabel va a ser un nuevo JLabel que diga "Hola". Despus agregamos el JLabel al contenedor de la ventana. Felicidaes, hemos terminado nuestra primera aplicacin en NetBeans utilizando interfaz grfica! Una vez que hayas terminado tu programa debes comprimir el directorio de la aplicacin que seleccionaste en el paso 2 y mandarlo por correo.

10 PROGRAMACION ORIENTADA A OBJETOS

UNIDADES TECNOLOGICAS DE SANTANDER INGENIERIA DE TELECOMUNICACIONES

A ritmo de Swing
Instrucciones Paso 1:
Para empezar la aplicacin vamos a crear un nuevo proyecto al que llamaremos Sesion3. Despus de crearlo nos aparece un proyecto vaco en NetBeans. Ahora vamos a agregar una nueva ventana, para hacer esto debemos hacer click derecho sobre el paquete como se ve en la siguiente foto y seleccionar New -> JFrame Form

Debemos ponerle el nombre de MainFrame. A pesar de que los nombres no son importantes para Java, por convencin se recomienda poner un nombre que exprese para qu funciona este objeto y de qu clase es. Recuerda que las clases son como moldes para crear objetos, al crear un nuevo JFrame estamos diciendole a Java cmo debe de crear los objetos de tipo MainFrame (es decir, estamos creando el molde). Es importante seguir las convenciones porque nos van a permitir saber fcilmente cmo funciona un programa incluso si no lo hicimos nosotros. Al crear el nuevo JFrame aparece la siguiente ventana:

Paso 3:
Ahora vamos a agregar algunos componentes al JFrame. Selecciona un label en la paleta haciendo click y luego agrgalo al JFrame haciendo click sobre esta donde quieres que aparezca. De la misma manera agrega un text field y un button. Al terminar tu ventana debe verse de la siguiente manera:

11 PROGRAMACION ORIENTADA A OBJETOS

UNIDADES TECNOLOGICAS DE SANTANDER INGENIERIA DE TELECOMUNICACIONES

Ahora vamos a cambiar el nombre de nuestros componentes para que sean ms fciles de identificar. De la misma manera que antes, a pesar de que los nombres no son importantes para Java, por convencin debemos elegir nombres representativos que nos indicen para qu sirve cada uno de los componentes. Adems de eso se utiliza que por convencin las primeras tres letras indiquen el tipo de componente de la siguiente manera: Componente Prefijo JLabel JButton JTextField JTextArea JPanel JMenu lbl btn txt txt pnl mnu

JMenuItem mnuItem De esta manera vamos a seleccionar nombres para nuestros controles. Para cambiar los nombres debes utilizar la ventana Inspector como se ve en el video. Puedes seleccionar un control y presionar F2 para cambiarle el nombre. Utiliza los siguientes nombres para tus controles: Componente Nombre JLabel JTextField lblName txtName

btnEnter JButton De esta manera sabemos que el JLabel y el JButton van a servir para que el usuario ponga su nombre.

Paso 4:
Ahora lo que vamos a hacer es cambiar el texto de los componentes para que sea ms claro para el usuario, para modificar las propiedades de los objetos debemos utilizar la ventana de propiedades que se encuentra abajo a la derecha como se ve en la siguiente fotografa, para cambiar la propiedad text de nuestros controles:

12 PROGRAMACION ORIENTADA A OBJETOS

UNIDADES TECNOLOGICAS DE SANTANDER INGENIERIA DE TELECOMUNICACIONES


Para encontrar ms fcilmente las propiedades podemos seleccionar la caja de propiedades y comenzar a escribir, si hacemos esto aparece la ventana Quick Search que nos permite escribir algo y lo busca por nosotros. Vamos a cambiar el texto de los componentes de la siguiente manera: Componente Texto lblName txtName Entrar btnEnter Nota que borramos el texto de txtName para que aparezca vaco. Por ltimo vamos a agregar eventos. Un evento es la manera en que nuestro cdigo responde a lo que hace el usuario. Agregar eventos utilizando Matisse es muy sencillo, lo nico que debemos hacer es dar click derecho sobre un control de nuestro JFrame y seleccionar el submen events. Ah aparecen todos los eventos a los que puede responder el control que estamos seleccionando. Vamos a hacer que cuando el usuario haga click en el botn btnEnter se muestre un dilogo con su nombre. Para hacer esto debemos dar click derecho sobre el botn, seleccionar el submen events y seleccionar el evento Action -> actionPerformed. Al hacer esto aparece una ventana con cdigo en la que podemos agregar lo que debe realizar nuestro proyecto al hacer click en el botn. Nombre:

Dentro de esta pantalla vamos a escribir la siguiente lnea: JOptionPane.showMessageDialog(this, "Hola " + txtName.getText()); Recuerda agregar los imports como vimos en la primera sesin para evitar que esta lnea te marque errores. Puedes hacerlo de dos maneras, haciendo click sobre la lamparita que aparece a la izquierda o presionando [Alt + Shift + F]. JOptionPane es una clase especial que nos permite mostrar dilogos, por el momento slo utilizala aunque no entiendas cmo funciona. Como puedes ver al final estamos utilizando algo llamado concatenacin de texto, veamos cmo funciona: "Hola " + "Juan" = "Hola juan" "C" + "mo" + " " + "han" + " " + "estado?" = "Cmo han estado?" Como puedes observar, al utilizar el smbolo ms estamos uniendo las cadenas de texto y creando una nueva cadena que contiene todas las cadenas unidas. Esto es extremadamente til para interactuar con el usuario. La otra parte interesante en ese mtodo es que estamos utilizando el mtodo getText() de nuestro JTextField (llamado txtName). Recuerdas que modificamos la propiedad text para que el JTextField no mostrara nada? Con este mtodo estamos obteniendo el texto que se encuentra en este momento en la caja de texto, que es lo que ha escrito el usuario. Para cada propiedad hay un mtodo llamado getNombre() donde Nombre es el nombre de la propiedad de la que quermeos conocer el valor.

Paso 5:
Ya casi terminamos de crear nuestra ventana, pero si corres el proyecto en este momento vas a ver que la ventana no aparece. Esto se debe a que todava no hacemos que nuestro JFrame se vuelva visible. Esto lo logramos poniendo la siguiente lnea en el constructor, el mtodo que se llama MainFrame():

13 PROGRAMACION ORIENTADA A OBJETOS

UNIDADES TECNOLOGICAS DE SANTANDER INGENIERIA DE TELECOMUNICACIONES

Por ltimo debes regresar a la clase Main utilizando el explorador de proyectos y agregar la siguiente lnea en el mtodo main(), recuerda que el mtodo main() es el punto de inicio de la aplicacin, es decir, la primera parte del cdigo que se ejecuta.

Recuerdas esta sintaxis? Lo nico que estamos diciendo es que queremos construir un nuevo (new) objeto de la clase MainFrame (nuestra ventana). Si te fijas estamos llamando el mtodo de la misma manera que se vea en la parte de arriba en el constructor. Corre la aplicacin y comprueba que funciona de manera adecuada.

14 PROGRAMACION ORIENTADA A OBJETOS

UNIDADES TECNOLOGICAS DE SANTANDER INGENIERIA DE TELECOMUNICACIONES

Prctica 2. Programacin con Variables


Teora
Variables, Operadores y Constantes Componentes de un programa Identificadores: Para poder identificar las variables, constantes y mtodos de un programa utilizamos identificadores. Los identificadores son combinaciones de letras, nmeros y algunos signos especiales. Ejemplos: pi, matricula, vocales, x, i Variables: Son identificadores cuyos valores pueden cambiar durante la ejecucin del programa. Nos sirven para guardar valores que queremos utilizar ms tarde (muchas veces la informacin que nos da el usuario). Ejemplos: int x = 0; Constantes: Son identificadores que tienen un valor constante durante toda la ejecucin del programa, es decir, que no cambian. Utilizan la palabra reservada final que le indica al compilador que el valor no puede cambiar. Si se intenta cambiar el valor, ocurre un error. Ejemplos: final double PI = 3.14159; Instruccin: Una instruccin es una unidad ejecutable de cdigo, regularmente controlan el flujo de ejecucin (qu sucede primero). Ejemplos: if ... else; while ... Declaracin de Variables: Declarar una variable es como avisarle a la computadora que vamos a guardar un valor. La estructura para declarar una variable es la siguiente: tipo nombre_de_variable [= valor]; Tipos de variables: Numricos: int, double Texto: char, String Ejemplos: int i = 0; double distancia; String nick = "Magus" Operadores: Son smbolos que indican cmo son manipulados los datos. Pueden ser de varios tipos, los ms comunes son: Aritmticos (+, -, *, /, etc.) Lgicos (&, |, !) Relacionales (<, >, ==) 15 PROGRAMACION ORIENTADA A OBJETOS

UNIDADES TECNOLOGICAS DE SANTANDER INGENIERIA DE TELECOMUNICACIONES


De asignacin (=) Ejemplos: a = a + b; if (lloviendo || quiereLlover) llevarParaguas = true; if (b > 0) b = sqrt(b); Operadores aritmticos Operador + * / Funcin Suma: Permite sumar nmeros enteros o reales. Resta: Permite restar nmeros enteros o reales. Multiplicacin: Permite multiplicar nmeros enteros o reales. Divisin: Si los dos operadores son nmeros enteros entonces el resultado siempre es un nmero entero (5 / 3 = 1) Si cualquiera de los operadores es un nmero real entonces el resultado es un nmero real (5.0 / 3 = 1.666) Mdulo: Nos devuelve el residuo de la divisin. (4 % 3 = 1, 5 % 3 = 2, 6 % 3 = 0)

Operadores lgicos Operador && Funcin AND Lgico Devuelve el valor lgico verdadero si ambos operandos son verdadero Ejemplo: if (esBI && tieneProyecto) trabajaTodaLaNoche(); OR Lgico Devuelve el valor lgico verdadero si cualquier operando es verdadero Ejemplo: if (tengoDinero || puedoPedirPrestado) comprar(); NOT Lgico Niega el valor del operando, es decir, si el operando es falso se vuelve verdadero y si es verdadero se vuelve falso. Ejemplo: esCulpable = !esInocente;

||

16 PROGRAMACION ORIENTADA A OBJETOS

UNIDADES TECNOLOGICAS DE SANTANDER INGENIERIA DE TELECOMUNICACIONES


Operadores Relacionales Operador == < > <= >= != Funcin Igual Verdadero si los dos operandos son iguales Menor que Verdadero si el operando de la izquierda es menor que el de la derecha. Mayor que Verdadero si el operando de la izquierda es mayor que el de la derecha Menor o igual que Mayor o igual que Diferente Verdadero si los dos operandos son diferentes

Operadores de asignacin Operador = += Funcin Asignacin Simple Asigna el valor a la derecha a la variable a la izquierda Asignacin con suma Suma el valor de la variable de la izquierda con el valor de la derecha y asigna el resultado a la variable de la izquierda. Asignacin con resta Resta el valor de la variable de la izquierda menos el valor de la derecha y asigna el resultado a la variable de la izquierda. Asignacin con multiplicacin Multiplica el valor de la variable de la izquierda por el valor de la derecha y asigna el resultado a la variable de la izquierda. Asignacin con divisin Divide el valor de la variable de la izquierda entre el valor de la derecha y asigna el resultado a la variable de la izquierda.

-=

*=

/=

17 PROGRAMACION ORIENTADA A OBJETOS

UNIDADES TECNOLOGICAS DE SANTANDER INGENIERIA DE TELECOMUNICACIONES


Otros Operador ++ Funcin Incremento Incrementa el valor de la variable en uno. Si el operador se pone a la izquierda de la variable primero incrementa el valor y despus realiza las dems instrucciones, si se pone a la derecha primero realiza las instrucciones y luego aumenta el valor. Ejemplo: int a = 0; int b = ++a; // a == 1, b == 1 int a = 0; int b = a++; // a == 1, b == 0 Decremento Decrementa el valor de la variable en uno. La asignacin de valores funciona de la misma manera que el incremento.

--

Prioridades de operadores

Tipos de datos Nombre byte short int long float double boolean char Representa Nmero entero Nmero entero Nmero entero Nmero entero Nmero real Nmero real Booleano Letra Rango -128 a 127 -32768 a 32767 -2,147,483,648 a 2,147,483,647 -9,223,372,036,854,775,808 a 9,223,372,036,854,775,807 3.410-38 a 3.41038 1.710-308 a 1.710308 Verdadero o falso \u0000 a \uFFFF (cualquier carcter de Unicode) Tamao 8 bits 16 bits 32 bits 64 bits 32 bits 64 bits 1 bit 16 bits

18 PROGRAMACION ORIENTADA A OBJETOS

UNIDADES TECNOLOGICAS DE SANTANDER INGENIERIA DE TELECOMUNICACIONES


Clase String Adems de los tipos primitivos de datos Java contiene una clase que es extremadamente poderosa: la clase String. String nos permite manejar cadenas de caracteres, es decir texto, de manera natural. Un String se maneja de forma muy parecida a un tipo de dato primitivo pero siempre empieza con mayscula porque es clase. Ejemplo: String nombre = "Magus"; Utilizando la consola Para leer de la consola podemos utilizar varias clases, una de las clases ms poderosas que nos provee el lenguaje Java es la clase Scanner. Para declarar un objeto de esta clase (al que llamaremos scn) utilizamos el siguiente cdigo: Scanner scn = new Scanner(System.in); Despus podemos utilizar varios mtodos de la clase Scanner como son: nextInt() nextBoolean() nextDouble() nextChar() Vamos a hacer un ejemplo completo de lectura Scanner scn = new Scanner(System.in); int num = scn.nextInt(); Mostrar texto en la consola es muy sencillo y Java ya tiene mtodos para esto. La manera ms rpida es utilizando System.out.println("Texto a imprimir"); Vamos a mejorar el ejemplo anterior: Scanner scn = new Scanner(System.in); System.out.println("Pon un numero: "); int num = scn.nextInt(); Si corremos un programa de Java que utilizara la clase Scanner para obtener texto de la consola podramos ver una pantalla negra similar a la que aparece al encender la computadora. NetBeans emula la consola en el mismo IDE y podemos encontrarlo en la parte inferior. Para escribir podemos utilizar el campo de texto que dice Input.

19 PROGRAMACION ORIENTADA A OBJETOS

UNIDADES TECNOLOGICAS DE SANTANDER INGENIERIA DE TELECOMUNICACIONES


Actividad Individual Define un algoritmo para sumar dos nmeros Crea el programa que implemente tu algoritmo Una posible solucin

Actividad Individual Define un algoritmo para calcular el rea de un crculo Crea el programa que implemente tu algoritmo Una posible solucin

20 PROGRAMACION ORIENTADA A OBJETOS

UNIDADES TECNOLOGICAS DE SANTANDER INGENIERIA DE TELECOMUNICACIONES


Actividad Individual Crea el programa que implemente tu algoritmo Define un algoritmo para convertir de grados Fahrenheit a Celsius.

Un primer intento de solucin

Una posible solucin

21 PROGRAMACION ORIENTADA A OBJETOS

UNIDADES TECNOLOGICAS DE SANTANDER INGENIERIA DE TELECOMUNICACIONES Qu es una variable?


Es un espacio en memoria que nos permite guardar informacin. El tamao de este espacio en memoria vara dependiendo de la informacin que que quieras guardar ah. No es lo mismo guardar un nmero pequeo que pueda variar entre el 1 y el 10 que guardar el total de ventas de una compaa internacional. Variable edad sueldoSemanal numeroArticulo totalVentas nombreAlumno esAzul Qu Almacena Un nmero entero Un nmero con decimales Un nmero entero Un nmero con decimales Una cadena de caracteres Un valor booleano (verdadero o falso)

Utilizando variables Para poder asignar un valor a una variable es necesario que la variable est declarada. La declaracin se hace con la instruccin: tipo nombre [= valor]; Para asignar un valor a una variable utilizamos la instruccin: nombre = valor; Despus podemos utilizar la variable con su nombre. Qu hace el cdigo siguiente? Declara una variable llamada numeroSuerte que tiene el valor de 7.

Declara tres variables, nombre, edad y precio. Asigna valores a estas variables.

22 PROGRAMACION ORIENTADA A OBJETOS

UNIDADES TECNOLOGICAS DE SANTANDER INGENIERIA DE TELECOMUNICACIONES


Operadores aritmticos Las variables nos sirven para guardar valores que vamos a modificar ms adelante utilizando operadores aritmticos o mtodos. y = x + 5; x++; y += 5; Recuerdas cmo funcionan los operadores de asignacin? y += 5 podra escribirse como y = y + 5; Recuerdas qu haca el operador incremento? x++; podra escribirse como x += 1; x = x + 1; Actividad Individual Cules son los valores de las variables al terminarse de ejecutar el siguiente cdigo:

Operador incremento / decremento Los operadores ++ y son llamados incremento y decremento respectivamente. Estos operadores nos permiten sumar 1 o restar 1 a una variable. Es uno de los pocos casos en que la posicin afecta el resultado, veamos un ejemplo:

23 PROGRAMACION ORIENTADA A OBJETOS

UNIDADES TECNOLOGICAS DE SANTANDER INGENIERIA DE TELECOMUNICACIONES


Prioridades de operadores

Las operaciones con mayor prioridad se ejecutan primero, por ejemplo: 5 * (12 - 5 * 2) + 7 / 4 5 * (12 - 10) + 7 / 4 5*2+7/4 10 + 7 / 4 10 + 1 (recuerda divisin entera!) 11 Actividad Individual Cules seran los resultados de las siguientes operaciones: 10 / 3 + 17 / 3 - 10 2 + 3 * (4 + 5) 19 / 2 * 5 10.0 / 3.0 + 10 / 3 + 10.0 / 3 3+5%4/2 (4 * 5 / 3 + 2.0) + (5 - 8.0) / 2

Casting
Cuando dos variables son del mismo tipo de dato (int, double) el resultado va a ser del mismo tipo de dato, por ejemplo, si a y b son de tipo int y valen 3 y 7 respectivamente: a + b + 10 = 20 Pero cuando los tipos de datos son diferentes se dice que ocurre un casting. Casting es el proceso de convertir de un tipo de dato a otro. Existen dos tipos de casting: casting implcito y casting explcito. Casting implcito

24 PROGRAMACION ORIENTADA A OBJETOS

UNIDADES TECNOLOGICAS DE SANTANDER INGENIERIA DE TELECOMUNICACIONES


Tambin llamado promocin numrica, sucede cuando un tipo de dato con menor jerarqua es promovido a un tipo de dato con mayor jerarqua. La jerarqua de operadores es la siguiente: byte->short->int->long->float->double En el siguiente cdigo y tiene mayor jerarqua y por lo tanto x va a tener un cast implcito de int a double. Fjate que el tipo de dato de x no cambia.

Casting implcito Otro momento en el que ocurre un casting implcito es al momento de la asignacin double y = 2 * (12 / 7); Podramos pensar que el resultado es 3.42, pero no estaramos en lo correcto porque el casting ocurre hasta el momento de la asignacin El resultado que nos va a dar es 2.0 Casting Explcito Algunas veces queremos forzar a una variable a tomar un tipo de dato con mayor jerarqua, por ejemplo:

En ese cdigo podemos ver que la variable y va a tomar el valor de 1, pero probablemente queremos que nos de el valor con decimales. Para estas situaciones existe el operador de Casting Explcito. Este operador es el nombre de un tipo de dato entre parntesis, por ejemplo: y = (double) x; El siguiente cdigo es casi igual que el anterior, pero tiene un cambio significativo. El cast va a convertir a x en un double antes de realizar la operacin, y por lo tanto y va a tomar el valor que deseamos:

Instrucciones
Paso 1:

Descarga el esqueleto de la aplicacin que vamos a utilizar en esta sesin. El archivo est en formato zip, por lo que necesitas descomprimirlo en algn directorio (por ejemplo D:\projects). Abre NetBeans y selecciona la opcin abrir proyecto , aparecer un dilogo en el que puedes seleccionar varios archivos, busca la carpeta en la que descomprimiste los archivos (puedes saber si realmente es una carpeta de proyecto porque tendr el siguiente smbolo: ). Selecciona la carpeta y presiona el botn abrir. Al terminarse de cargar el proyecto abre el archivo Main.java, debe aparecer una ventana con el
25 PROGRAMACION ORIENTADA A OBJETOS

UNIDADES TECNOLOGICAS DE SANTANDER INGENIERIA DE TELECOMUNICACIONES


cdigo del programa. Presiona el botn de compilar (o F11). En la ventana de compilacin deben aparecerte varios mensajes de compilacin y debe terminar en BUILD SUCCESSFUL. Esto quiere decir que nuestra aplicacin compil de manera adecuada y estamos listos para correrla. Presiona el botn correr (o presiona F6). Debe aparecer una ventana como la siguiente.

Pon algunos nmeros y prueba la funcionalidad del programa. Como podrs haber notado todos los resultados muestran un cero, porque todava no estn implementadas las funciones que van a mostrar el resultado correcto. Por el momento cierra la aplicacin.
Paso 2:

Ahora vamos a agregar la funcionalidad del programa. Para saber dnde es preciso editar el cdigo vamos a utilizar la ventana de To Do. Esta ventana es muy importante porque nos permite saber qu cosas faltan por hacer y nos permite encontrarlas de manera sencilla. Primero selecciona el men Window y ah busca To Do , o presiona <Ctrl + 6>. En la parte inferior debe aparecer la ventana de To Do, seleccionala y aparecer algo como lo siguiente:

Aqu podemos ver lo que falta por hacer en el proyecto. Selecciona la primera lnea del To Do (la que dice Cambiar el cdigo para que sume...) y haz doble click para ir a la seccin de cdigo que es preciso editar. Cambia el cdigo de la siguiente manera (es necesario modificar la lnea 103):

Adems de los operadores aritmticos que ya conoces en este laboratorio utilizamos el operador lgico AND. Como pudiste ver en la presentacin el operador lgico AND tiene la propiedad de que devuelve
26 PROGRAMACION ORIENTADA A OBJETOS

UNIDADES TECNOLOGICAS DE SANTANDER INGENIERIA DE TELECOMUNICACIONES


verdadero si y slo si ambos operandos son verdaderos, por esto se dice que tiene la siguiente tabla de verdad:
AND Verdadero Falso Verdadero Verdadero Falso Falso Falso Falso

Los operadores lgicos que hemos visto hasta ahora (&&, ||, !) slo se pueden utilizar con valores booleanos, pero al utilizarlos con valores numricos tienen propiedades que son muy tiles en algunos casos (cuando necesitamos optimizar el cdigo). Veamos cmo funciona el operador lgico AND cuando lo aplicamos a un nmero entero:
Valor Decimal Valor Binario 12 1100 10 1010 12 & 10 1000

Como puedes ver, los operadores lgicos operan a nivel de bits en los valores enteros. Para evitar que los operadores lgicos que se utilizan con valores enteros se confundan con los que se utilizan con valores booleanos en Java existen simbolos diferentes para representarlos como se ve en la siguiente tabla:
Nombre AND OR NOT Enteros & | ~ Booleanos && || !

Como en la calculadora vamos a utilizar valores enteros debes de utilizar el AND para valores enteros, sin embargo la mayora de las veces vamos a utilizar el AND para valores booleanos porque la fuerza de las operaciones lgicas estn en que nos permiten hacer comparaciones y saber si un conjunto de predicados son verdaderos o falsos (si est lloviendo && llevo una sombrilla -> no me mojo, si tengo hambre || es hora de comer -> voy a comer). Por analoga al ejercicio de la suma y utilizando los conocimientos que tienes sobre operadores termina de construir los mtodos que se te solicitan. Comprime tu carpeta de trabajo y mndala por correo.

27 PROGRAMACION ORIENTADA A OBJETOS

UNIDADES TECNOLOGICAS DE SANTANDER INGENIERIA DE TELECOMUNICACIONES

Prctica 3. If y Switch
Teora

Sentencia if-else
Toma una decisin referente a la accin a ejecutar en un programa dependiendo del resultado (verdadero o falso) de una condicin. La sentencia if nos permite hacer que slo se ejecute una seccin de cdigo. Su estructura es

La condicin es una expresin de comparacin que puede evaluarse como verdadera o como falsa. La condicin siempre debe ir entre parntesis. Cuando se ejecuta la sentencia if, primero se evala la condicin y si es verdadera se ejecuta el cdigo que se encuentra dentro del if. Veamos un ejemplo de la sentencia if: En este caso, si el valor de la variable x es mayor que cero, x se va a incrementar en cinco unidades.

Sentencia if-else
Otra estructura de control muy utilizada es el if-else. Al ejecutar una estructura if-else primero se evala la condicin, si es verdadera se ejecuta el cdigo if, si no se ejecuta el cdigo else.

Veamos un ejemplo de la sentencia if-else En este caso si el valor de la variable x es mayor que cero se va a incrementar su valor en cinco unidades, igual que la vez anterior. Pero si su valor no es mayor que cero entonces se va a reducir en cinco unidades.

28 PROGRAMACION ORIENTADA A OBJETOS

UNIDADES TECNOLOGICAS DE SANTANDER INGENIERIA DE TELECOMUNICACIONES Sentencia if anidada


Existen ocasiones en que tenemos ms de una condicin. Cuando esto sucede podemos utilizar una estructura de if anidados. Al ejecutarse un if anidado primero se revisa la primera condicin, luego la segunda, luego la tercera y as hasta llegar al final. En caso de que no se cumpla ninguna condicin se ejecuta el cdigo else.

Actividad en equipo Crea un programa para comprar dos nmeros e imprimir cul es mayor o si son iguales. Una posible solucin

Sentencia switch
La sentencia switch nos permite alterar el curso de un programa mediante el valor de una variable y es muy similar a un if anidado, pero tiene algunas peculiaridades que nos facilitan tareas como crear un men o crear un diccionario. El switch tiene la ventaja de que puede representar algunas condiciones muy complicadas. La sentencia inicia con switch y entre parntesis el nombre de la variable que se debe comparar. Por cada caso debemos escribir case y el valor que debemos comparar. Por ltimo debemos escribir el cdigo que debe ejecutarse y terminar con un break.

29 PROGRAMACION ORIENTADA A OBJETOS

UNIDADES TECNOLOGICAS DE SANTANDER INGENIERIA DE TELECOMUNICACIONES

El cdigo que se va a ejecutar en el switch se ejecutar hasta que se encuentre la palabra break, por lo que podemos hacer que ms de un caso ejecute el mismo cdigo, que es la principal diferencia con el if. El default es equivalente al else.

Para los programas que van a realizar varias acciones diferentes dependiendo del valor de una sola variable entonces es muy recomendable utilizar el switch Se considera que un switch es ms fcil de leer y mantener que un if, por lo que se recomienda su uso pero muchas veces es una fuente de errores en el flujo, en especial cuando no se utilizan los break.

30 PROGRAMACION ORIENTADA A OBJETOS

UNIDADES TECNOLOGICAS DE SANTANDER INGENIERIA DE TELECOMUNICACIONES

Programacin con If
Instrucciones Paso 1:
Descarga el esqueleto de la aplicacin que vamos a utilizar en esta sesin. El archivo est en formato zip, por lo que necesitas descomprimirlo en algn directorio (por ejemplo D:\projects). Abre NetBeans y selecciona la opcin abrir proyecto , aparecer un dilogo en el que puedes seleccionar varios archivos, busca la carpeta en la que descomprimiste los archivos (puedes saber si realmente es una carpeta de proyecto porque tendr el siguiente smbolo: ). Selecciona la carpeta y presiona el botn abrir. Abre la clase y aparecer una ventana con la siguiente interfaz grfica:

Paso 2:
Corre el programa y verifica la funcionalidad que tiene actualmente. Qu sucede cuando presiono un botn? Qu sucede cuando pongo nmeros enteros en edad? Qu sucede cuando no pongo nmeros en edad? Qu sucede cuando pongo nmeros reales en edad? Para poder entender este comportamiento es necesario analizar el siguietne cdigo:

Recuerda que para poder convertir de un tipo de dato a otro necesitamos hacer un cast. Como el mtodo getText() del JTextField siempre devuelve un String y lo que nosotros necesitamos es un nmero vamos a hacer un cast a int utilizando el mtodo Integer.parseInt(). Es muy importante que la declaracin de la variable age se encuentra fuera del try, ya que de esta manera nos aseguramos que el resto del cdigo pueda utilizarla. Tambin estamos viendo una sintaxis nueva para el manejo de
31 PROGRAMACION ORIENTADA A OBJETOS

UNIDADES TECNOLOGICAS DE SANTANDER INGENIERIA DE TELECOMUNICACIONES


errores, por el momento slo debemos saber que en caso de que ocurra un error de formato (es decir, que el nmero no se pueda convertir a int) se va a ejecutar el cdigo que se encuentra dentro del bloque catch. Ms adelante veremos el manejo de errores con ms detenimiento.

Paso 3:
Selecciona source en la parte superior del IDE, abajo de las pestaas con los nombres de las clases para ver el cdigo de tu ventana. Dentro de los mtodos que vamos a utilizar en este laboratorio hay un mensaje que dice que el mtodo no ha sido implementado, una vez que implementes los mtodos puedes quitar este mensaje.

Vamos a hacer una pausa para entender una clase que nos va a servir mucho durante este laboratorio. La clase JOptionPane tiene un mtodo showMessageDialog() que nos permite mostrar un mensaje. El mtodo recibe dos parmetros en su forma ms sencilla, el primer parmetro es el componente padre, por el momento siempre vamos a utilizar this (que hace una referencia a la ventana actual) y el segundo parmetro es un String con el texto que queremos mostrar. Ahora abre la ventana de ToDo (Window -> ToDo o presionando Ctrl + 6) donde podrs ver lo que hace falta codificar. Primero vamos a resolver el cdigo que va a comentar sobre nuestra edad. Para hacer esto haz doble click sobre el ToDo correspondiente. Ahora agrega el siguiente cdigo y vuelve a probar el programa.

Qu sucede cuando introducimos 13 como edad? Qu sucede cuando introducimos 15 como edad? Qu sucede cuando introducimos 20 como edad? Ahora vamos a ver una propiedad del if que nos va a servir mucho cuando queramos controlar un programa. Escribe el siguiente cdigo:

Qu sucede cuando introducimos 25 como edad? Qu sucede cuando introducimos 14 como edad? Como este comportamiento no es lo que esperabamos vamos a probar un par de casos ms, primero vamos a realizar la validacin completa. Escribe el cdigo que se ve a continuacin:

Al correr el programa podemos ver que ya tiene el comportamiento que esperamos, pero hay una manera un poco ms elegante de codificarlo. Recuerda en la presentacin que vimos que puedes utilizar
32 PROGRAMACION ORIENTADA A OBJETOS

UNIDADES TECNOLOGICAS DE SANTANDER INGENIERIA DE TELECOMUNICACIONES


el else if para poner condiciones extras a un if y convertirlo en un if anidado. Ahora copia el siguiente cdigo:

Qu sucede cuando introducimos 25 como edad? Qu sucede cuando introducimos 14 como edad? Lo que est sucediendo es que un if anidado nicamente revisa las condiciones hasta encontrar una que sea verdadera y despus de eso no revisa todas las dems. En algunos programas (como este) ese es el comportamiento esperado, aunque en algunos otros es mejor utilizar varios if's. Regularmente se utiliza esta ltima manera de escribirlo porque es un poco ms fcil de entender que poner las dobles condiciones, pero pueden utilizar la que prefieran. Ahora terminemos de codificar utilizando esta ltima sintaxis (si prefieres puedes utilizar varios if's).

Paso 4:
Ahora vamos a hacer el cdigo que calcule el rea de un crculo. En este caso la validacin ser muy sencilla ya que slo debemos validar que el radio sea mayor que cero (ya que no existen distancias negativas). En caso de que el radio no sea mayor que cero vamos a mostrar un mensaje de error. Para hacer esto copia el siguiente cdigo:

Fjate en el mtodo showMessageDialog() de la clase JOptionPane. Como puedes ver el primer parmetro es un this, pero despus viene el siguiente String: "El area del circulo es " + area Lo que estamos haciendo aqui es concatenar un nmero a un String. Como el mtodo showMessageDialog() debe recibir un String como segundo parmetro es necesario que a los nmeros les concatenemos texto utilizando el operador +. Agrega un else para mostrar un mensaje de error en caso de que el radio sea menor o igual a cero y prueba que tu cdigo funcione de manera correcta.

33 PROGRAMACION ORIENTADA A OBJETOS

UNIDADES TECNOLOGICAS DE SANTANDER INGENIERIA DE TELECOMUNICACIONES


Paso 5: Ahora vamos a resolver la ecuacin utilizando la frmula general. Recuerda que la frmula general es:

Aqui debemos realizar dos validaciones. El valor de a debe ser diferente de cero para evitar que la divisin indetermine el resultado y la raz debe ser de un nmero mayor o igual a cero. Para hacer esto vamos a utilizar un and && y adems vamos a utilizar una variable para ayudarnos a escribir menos y a hacer ms claro el cdigo. Escribe el siguiente cdigo:

Como puedes ver estamos utilizando la variable root donde guardamos el valor de lo que se encuentra dentro de la raz. Esto lo hacemos para que al comparar y al sacar la raz no tengamos que volver a escribir la frmula y sea ms fcil de entender, adems de que ya tener el valor guardado y no tener que calcularlo hace que sea un poco ms rpido. En caso de que la raz sea igual o mayor que cero y que a no sea cero vamos a obtener las raices positivas y negativas y mostrar el resultado. Agrega un else para mostrar un mensaje de error en caso de que los datos no sean vlidos. Dentro del else agrega un if para decirle al usuario cul de los datos no fue vlido o si los dos no lo fueron y prueba que tu cdigo funcione de manera correcta.

Paso 6:
Por ltimo vamos a utilizar un control nuevo llamado JCheckBox que podemos utilizar para hacer que nuestros programas sean ms amigables. El JCheckBox tiene un mtodo importantsimo que nos devuelve si est seleccionado o no. Este mtodo nos va a permitir responder de maneras diferentes utilizando un if. El mtodo se llama isSelected() y nos devuelve verdadero en caso de que s est seleccionado y falso en caso contrario. Recuerda que la condicin de un if debe ser cualquier cosa que evale a verdadero o falso y no es necesario que sea una comparacin. Esto hace que podamos utilizar una variable boolean o el resultado de este mtodo dentro de la condicin directamente de la siguiente manera:

Prueba que tu cdigo funcione de manera correcta.

Paso 7:
Comprime tu carpeta de trabajo y el archivo de texto con las respuestas a las preguntas en negritas y mndalos por correo.
34 PROGRAMACION ORIENTADA A OBJETOS

UNIDADES TECNOLOGICAS DE SANTANDER INGENIERIA DE TELECOMUNICACIONES

Programacin con switch


Instrucciones Paso 1:
Descarga el esqueleto de la aplicacin, abre el proyecto en NetBeans, complalo y crrelo. Aparecer una interfaz parecida a la siguiente:

Paso 2:
Antes de continuar con el ejercicio veamos un poco ms acerca del manejo estructurado de errores. La sintaxis del try-catch es la siguiente:

En la parte del try debemos poner el cdigo que podra tener errores (por ejempo, hacer el cast de un String a un int). El cdigo se va a ejecutar hasta el final o hasta que ocurra un error. Si ocurre un error entonces se ejecuta el catch. Sin importar si ocurrieron errores o no siempre se ejecuta el finally (que nos sirve para poder realizar limpieza al final). Podemos ver el comportamiento de manera grfica en el siguiente diagrama:

Podemos hacer un ejemplo en el que hagamos un cast de String a int, en caso de que no se pueda convertir se muestra un mensaje de error.

35 PROGRAMACION ORIENTADA A OBJETOS

UNIDADES TECNOLOGICAS DE SANTANDER INGENIERIA DE TELECOMUNICACIONES


Como podemos ver en la parte del catch debemos poner el tipo de excepcin que ocurri. La excepcin ms general es Exception, adems de esta hay muchas excepciones que podemos manejar para darle retroalimentacin al usuario de manera ms clara. Por ejemplo: IOException: Ocurre cuando hay un error al leer o escribir un archivo o al leer del teclado. NumberFormatException: Ocurre cuando hay un error al hacer un cast. ArithmeticException: Ocurre cuando hay un error al realizar una operacin (por ejemplo divisin entre cero). Podemos utilizar ms de una clsula catch para manejar excepciones de manera ms precisa o para manejar varios errores diferentes que podran pasar dentro de un mismo cdigo, por ejemplo, si despus de hacer un cast a dos nmeros se intenta hacer una divisin podran ocurrir errores de cast o errores aritmticos de divisin entre cero. Podemos proteger nuestro programa con el siguiente cdigo:

Pero si existen tantas excepciones cmo saber qu excepciones manejar? Por suerte NetBeans tambin nos ayuda en eso al mostrarnos la ayuda en linea de los mtodos. Por ejemplo, al escribir el mtodo parseInt() aparece la siguiente ayuda:

Podemos ver que en la parte de hasta abajo aparece que va a aventar NumberFormatException en caso de que el String no contenga un integer, con lo que no slo sabemos qu excepciones podran ocurrir sino que tambin sabemos cundo es posible que ocurran y bajo qu condiciones.

Paso 3:
Ahora s vuelve a la aplicacin. Abre el cdigo presionando source y en la ventana ToDo busca la parte de pedir la temperatura. Nos dice que la temperatura debe ser un double, por lo que sabemos que vamos a utilizar el cast Double.parseDouble() pero como no estamos seguros que lo que est dentro de la caja de texto sea un nmero real (podran ser letras) debemos de manejar la excepcin mediante un trycatch. Puedes basarte en el siguiente cdigo:

36 PROGRAMACION ORIENTADA A OBJETOS

UNIDADES TECNOLOGICAS DE SANTANDER INGENIERIA DE TELECOMUNICACIONES

El return al final del catch hace que en caso de que ocurra el error el mtodo termine, es decir, que el cdigo no se siga ejecutando. Ms adelante veremos un poco ms acerca de los mtodos y la programacin modular, pero por el momento nos sirve para que todo el cdigo que pongamos abajo no se ejecute si no tenemos datos vlidos.

Paso 4:
Para el ejercicio de vocales y consonantes vamos a necesitar saber qu letra seleccion el usuario. El tipo de dato que nos permite representar una letra es el char. Recuerda que el mtodo getText() siempre nos devuelve un String, por desgracia el String no es de tipo char, as que no podemos realizar la comparacion directamente sino que tenemos que obtener el primer caracter del String (aqui no podemos hacer un cast porque String es un conjunto de caracteres y no puede representarse como un solo caracter). Para poder hacer esto debemos aprender un poco ms acerca de la clase String. Esta clase tiene varios mtodos muy tiles que nos permiten obtener informacin y manipular lo que hemos escrito o lo que ha escrito el usuario. Un mtodo que podemos utilizar para obtener el primer caracter dentro de un String es el mtodo charAt(), que se utiliza de la siguiente manera:

Es muy importante fijarnos que el mtodo charAt() recibe el indice de la letra que quiere, empezando de cero. En el ejemplo anterior devolvera la 'H' (que es la primera letra). Tamben es importante fijarnos que al comparar debemos utilizar la letra entre comillas sencillas y el color cambiar a verde para saber que realmente es un char y no un String. Qu excepciones podran mostrarse cuando mandamos llamar el mtodo charAt()? Otro mtodo importante de la clase String es el mtodo length() que nos permite saber cuntos caracteres tiene un String. Puedes utilizar este mtodo de la siguiente manera:

Paso 5:
Utilizando tus conocimientos sobre excepciones, control de flujos con if y switch y operadores realiza los ejercicios de esta sesin que se encuentran marcados con TODO en el cdigo. Los ejercicios son: Mostrar si una letra introducida por el usuario es vocal o consonante Mostrar un mensaje que basndose en la terminacin de una placa diga qu da no circula Mostrar si dados dos nmeros a y b por el usuario, a es divisible entre b Mostrar un mensaje de recomendacin de acuerdo a una temperatura dada por el usuario Comprime tu carpeta de trabajo y mndala por correo.
37 PROGRAMACION ORIENTADA A OBJETOS

UNIDADES TECNOLOGICAS DE SANTANDER INGENIERIA DE TELECOMUNICACIONES

Prctica 4. Ciclos
Teora

While
El while es una sentencia que ejecuta un bloque de instrucciones cero o ms veces dependiendo de una condicin. Su sintaxis es: while(condicion) { // codigo } Donde condicion es una expresin que puede evaluarse a verdadero o falso (de la misma manera que funciona un if). Fjate que despus del parntesis del while no va un punto y coma. El while va a repetir el cdigo que se encuentre entre llaves mientras la condicin siga siendo verdadera. Las instrucciones se ejecutan de manera secuencial siempre de arriba hacia abajo siempre y cuando la condicin sea verdadera (o distinta de cero). Si la condicin se evala como falsa al llegar al while por primera ves las instrucciones no se ejecutan. Ejemplo Revisa el siguiente cdigo

Qu imprimira, entiendes cmo funciona? El cdigo va a imprimir

Otro ejemplo El siguiente cdigo es muy similar al anterior puedes ver en qu son diferentes?

Qu suceder cuando se ejecute el cdigo anterior? El programa se cicla, es decir, nunca puede salir del ciclo y continua ejecutndose indefinidamente. Esto sucede porque la variable de control i nunca se incrementa.

38 PROGRAMACION ORIENTADA A OBJETOS

UNIDADES TECNOLOGICAS DE SANTANDER INGENIERIA DE TELECOMUNICACIONES Control de ciclos


Una gran parte de los ciclos que vamos a utilizar utilizan algo llamado contador. Un contador es una variable que se va acumulando hasta llegar a un valor tope, en el que se realiza la ltima iteracin del ciclo. Es decir, si queremos crear un ciclo que vaya desde el uno hasta el diez debemos iniciar nuestro contador en uno y continuar ejecutando mientras sea menor o igual a diez (o iniciarla en cero y contar mientras sea menor que diez. Como veremos ms adelante, esto ltimo es lo que se hace normalmente).

Do while
Ya estuvimos utilizando el ciclo while para realizar una misma accin varias veces, pero adems de este ciclo hay otros dos ciclos que nos son muy tiles a la hora de programar. El ciclo do while permite repetir la ejecucin de su cdigo mientras una condicin sea verdadera. La diferencia entre este ciclo y el while radica en el momento en que se evala la condicin. En el ciclo while la condicin se evala al principio, mientras que en el ciclo do while la condicin se evala al final. Como la condicin se revisa al final, despus de haber ejecutado el cdigo entonces garantizamos que el cdigo se ejecuta una o ms veces. En la estructura while, como la condicin se revisa antes de ejecutar el cdigo es posible que no se ejecute nunca. La sintaxis del do while es: do { // codigo } while(condicion); // fijate en el ; El do while tiene la siguiente secuencia de ejecucin: Se ejecuta el cdigo del do while Se revisa la condicin Si la condicin es verdadera se regresa al primer punto Si la condicin es falsa ejecuta la siguiente lnea de cdigo del programa El do while se utilizaba principalmente para crear mens en las aplicaciones de lnea de comandos. Ahora se utiliza con frecuencia para inicializar variables o en la lectura de cierto tipo de archivos de texto.

For
Como pudiste ver, muchas veces utilizamos ciclos para realizar una accin un nmero de veces conocido (contar hasta 10). El while es un ciclo que nos permite hacer esto, sin embargo no es muy natural (tenemos que declarar un contador y no podemos olvidar aumentarlo). Adems de los ciclos que hemos visto hasta ahora existe un tercer ciclo muy poderoso llamado for. El ciclo for es una estructura de ciclo donde la repeticin est definido precisamente con un contador, por esto nos permite encapsular en una sola instruccin todo el cdigo del contador. La sintaxis del for es la siguiente: for (inicializacion; condicion; incremento){ // codigo } La ejecucin del for sucede de la siguiente manera: Se inicializan las variables en la seccin de inicializacion Se evala la condicion Si el resultado es verdadero se ejecuta el cdigo y al final se ejecuta el incremento 39 PROGRAMACION ORIENTADA A OBJETOS

UNIDADES TECNOLOGICAS DE SANTANDER INGENIERIA DE TELECOMUNICACIONES


Si el resultado es falso se termina la ejecucin del ciclo y se contina con la siguiente lnea del programa. El ciclo while y el ciclo for pueden ser intercambiados con facilidad, podemos verlo con el siguiente ejemplo:

Comparacin de ciclos While Cuando no sabemos el nmero de iteraciones 0 o ms veces Cuando la condicin de terminacin no es numrica, por ejemplo, una funcin boolean, tambin es til para lectura de archivos Frecuente Do while Cuando no sabemos el nmero de iteraciones 1 o ms veces Mostrar un men, mostrar mensajes de error mientras el usuario no seleccione una opcin vlida Poco frecuente For

Uso

Cuando s sabemos el nmero de iteraciones

Nmero de ejecuciones

0 o ms veces

Aplicacin

Contar nmeros, recorrer estructuras de datos (veremos esto ms adelante)

Frecuencia de uso

Muy frecuente

40 PROGRAMACION ORIENTADA A OBJETOS

UNIDADES TECNOLOGICAS DE SANTANDER INGENIERIA DE TELECOMUNICACIONES

Solucin de Ciclos
Paso 1:

Responder las preguntas y ejercicios en negritas utilizando ciclos.


Ejercicio 1

Qu imprime el programa anterior? Ejercicio 2

Qu valor tiene x al terminar el cdigo anterior? Qu valor tiene i? Ejercicio 3

Este ejercicio es un poco ms complicado. El objetivo es decir qu debera decir en lugar de los ... que se encuentran en el System.out.println(). Fjate en el ciclo.
Qu est revisando el ciclo? Qu es n, qu es i? Cmo cambia el valor de n, cmo cambia el valor de i? (haz una tabla que te muestre el valor en cada iteracin) Qu significa n % i? Qu debera imprimir el programa en lugar de los ...? Ejercicio 4

MaguSoft est atravesando un periodo muy difcil debido a leyes restrictivas que no le permiten trabajar con la impunidad que al dueo le gustara. Para resolver este problema Magus ha decidido lanzarse como gobernador. Basndose en recientes sucesos en Florida, Magus decidi contratar a un programador para que hiciera un programa de votaciones, el programador logr resolver la mitad del problema con el siguiente cdigo:

41 PROGRAMACION ORIENTADA A OBJETOS

UNIDADES TECNOLOGICAS DE SANTANDER INGENIERIA DE TELECOMUNICACIONES


Hasta ahora hemos utilizado el mtodo showMessageDialog() de la clase JOptionPane para mostrar dilogos de informacin en que mostramos un mensaje al usuario, pero tambin podemos utilizar el mtodo showConfirmDialog() nos permite mostrar un dilogo de confirmacin en el que se guarda la opcin que seleccion el usuario en una variable de tipo int. Ms adelante podemos utilizar algunas constantes de la clase JOptionPane para saber qu opcin seleccion el usuario.

Escribe el cdigo Qu hace el cdigo?

El problema es que en las elecciones todas las personas seleccionaron la opcin no, por lo que Magus qued con cero votos. El programador anterior fue catsigado con la pena de excomunin y ahora te han contratado a ti para resolver este inconveniente. Tu tarea consiste en utilizar un ciclo para obligar a las personas a seleccionar la opcin s. El programa debe mostrar la ventana de seleccin hasta que el usuario decida presionar el botn s.

Escribe el programa

Ciclos anidados
En algunos casos queremos que una accin se repita un cierto nmero de veces y que esto a su vez se repita otro cierto nmero de veces. Recuerdas cuando construimos el tablero de ajedrez? Queramos que una accin (pintar ocho columnas) se repitiera un cierto nmero de veces (pintar ocho filas). Esto lo hicimos mediante una divisin y un mdulo, pero hay una manera un poco ms elegante llamada ciclo anidado. Un ciclo anidado nos permite tener dos o ms ciclos uno adentro de otro. Un ciclo anidado no tiene una estructura nueva, sino que consiste en poner un ciclo dentro de otro:

Incluso podemos combinarlos

Los ciclos anidados son extremadamente tiles en la programacin y algunos de sus usos principales son: Dibujar Simular series complejas Realizar operaciones con matrices Realizar operaciones con conjuntos Manipular arreglos y matrices (arreglos multidimensionales) Ms adelante en el curso aprenderemos ms sobre arreglos y matrices en lenguajes de programacin 42 PROGRAMACION ORIENTADA A OBJETOS

UNIDADES TECNOLOGICAS DE SANTANDER INGENIERIA DE TELECOMUNICACIONES Cmo contar un ciclo


Para poder saber cmo funciona un ciclo debemos ver la siguiente propiedad. Los contenidos que van adentro del while se van a ejecutar el nmero de veces que marca el contador. En el ejemplo de la siguiente diapositiva hay tres ciclos. Todo el cdigo que se encuentra dentro del primer while se va a ejecutar 10 veces, incluyendo los ciclos. Esto hace que el nmero de veces que se ejecuta el ciclo se multiplique por diez. La lnea que tiene el comentario a se ejecutara 10 veces, la lnea que tiene el comentario b se ejecutara 50 veces. Puedes verlo de manera ms clara en las siguientes imgenes.

Ejercicios con Ciclos


Instrucciones
Paso 1:

Responder las preguntas y ejercicios en negritas utilizando ciclos.


Ejercicio 1

Qu hace el cdigo anterior? Ejercicio 2

Cuntas veces se ejecutar el cdigo anterior? Cul ser el valor final de x? Ejercicio 3

Qu hace el cdigo anterior? Por qu? Ejercicio 4 Escribe un cdigo que imprima 100 veces "Hola mundo" Ejercicio 5 Escribe la funcin isPrime(int n) que recibe un nmero y debe devolver verdadero o falso dependiendo si el nmero es primo o no. NOTA: Puedes saber si un nmero es primo revisando si todos los nmreos entre 2 y el nmero no son divisibles. 43 PROGRAMACION ORIENTADA A OBJETOS

UNIDADES TECNOLOGICAS DE SANTANDER INGENIERIA DE TELECOMUNICACIONES

1: Programacin con Ciclos 2: Go To 1


Instrucciones
Paso 1:

Descarga el esqueleto de la aplicacin. Abre el proyecto en NetBeans, complalo y crrelo para verificar que todo funcione correctametne. Deber aparecer una pantalla similar a la siguiente:

Selecciona el botn del factorial y da click derecho. Dentro del men selecciona events -> action -> actionPerformed. Para poder resolver este problema debemos calcular el factorial de un nmero. Para calcular el factorial debemos multiplicar todos los nmeros desde el uno hasta el nmero del que queremos calcular el factorial. Para hacer esto con un ciclo debemos utilizar una variable especial para guardar el resultado, a la que podemos llamar factorial. Este tipo de variables se conocen como acumuladores y nos permiten guardar resultados intermedios. Los acumuladores son muy utilizados en los ciclos ya que nos permiten realizar operaciones sobre los valores que vamos calculando. Como vamos a acumular un valor sobre esta variable es muy imporatnte iniciarla con un valor. El nmero con el que la empezamos vara dependienod de la situacin, pero regularmente se selecciona 1 o 0. Como en este caso vamos a realizar multiplicaciones necesitamos empezar con 1 porque si no siempre multiplicaramos por 0. Adems de utilizar un acumulador vamos a utilizar un contador para llevar la cuenta desde el nmero uno hasta el nmero n. En cada iteracin del ciclo vamos a multiplicar el nmero actual por el nmero que llevamos acumulado. En cdigo estamos hablando de lo siguiente:

Nota: Es muy importante que agregues el incremento al contador, porque de no hacerlo el ciclo jams terminara y el programa se va a trabar. En caso de que corras un programa y se cicle puedes utilizar NetBeans para cancelar la ejecucin. A la izquierda del IDE hay una opcin que dice runtime. Dentro de runtime puedes ver todos los procesos que se estn ejecutando en NetBeans y puedes cancelar cualquier haciendo click derecho y seleccionando Terminate Task como se ve en la fotografa:
44 PROGRAMACION ORIENTADA A OBJETOS

UNIDADES TECNOLOGICAS DE SANTANDER INGENIERIA DE TELECOMUNICACIONES

Compila tu programa y verifica que funcione de manera correcta. Una vez que hayas probado que funciona bien haz click derecho en el segundo botn y selecciona events -> action -> actionPerformed para comenzar a hacer la serie de nmeros hasta n. Dentro del cdigo podemos ver que debemos escribir todos los nmeros desde el 1 hasta n. Esto es muy sencillo, slo debemos irlos guardando en un String e imprimir el String al final.

Compila y corre el programa anterior. Al utilizar este nuevo cdigo notars algo extrao en el resultado. Tiene una coma de ms, esto es porque todos los elementos desde 1 hasta n les estamos dando el mismo tratamiento. Muchas veces en los ciclos tenemos un caso especial al principio o al final, por lo que debemos modificar nuestros ciclos para que terminen antes o empiecen despus. En el cdigo significara quitar la ltima ocurrencia del while (es decir, cuando curr == n) y agregar el codigo al final que solamente agregue el ltimo nmero a la serie, es decir:

Compila y corre tu programa para ver que funcione de manera correcta. Al terminar de revisarlo haz click derecho sobre el botn de secuencia de pares y por analoga realiza la serie de pares que debe iniciar en 2 y terminar con el par ms cercano a n (o n en caso de que sea par). Recuerda que en este caso el contador no va a iniciar en uno como en el caso anterior ya que el primer nmero a imprimir es dos. Tambin recuerda que puedes aumentar el contador de dos en dos. Una vez que hayas probado ese mtodo vamos a continuar con el mtodo que imprime una secuencia desde n hasta m. Este mtodo es muy similar a los que hemos manejado hasta ahora. La nica diferencia es que ahora los valores de inicio y final son variables. Tomando esto en cuenta podemos hacer el siguiente cdigo:

45 PROGRAMACION ORIENTADA A OBJETOS

UNIDADES TECNOLOGICAS DE SANTANDER INGENIERIA DE TELECOMUNICACIONES


Como ya nos dimos cuenta de que los tres mtodos son muy similares entonces nos hemos dado cuenta de que tenemos una oportunidad de modular. Podemos generalizar el problema como un mtodo que recibe tres parmetros (que son los nicos valores que cambian), el inicio de la serie, el final de la serie y el incremento. El mtodo debe validar que el final de la serie sea mayor que el inicio de la serie, y debe lanzar una excepcin en caso de que no sea as. El programa debe mostrar una ventana de error en caso de que esto suceda. El mtodo debe devolver un String con la serie generada. Utilizando tus conocimentos sobre mtodos crea el mtodo String buildSequence(int start, int end, int increment) como acabamos de discutirlo. Despus cambia los mtodos actionPerformed() de tus botones para que utilicen este mtodo. Como puedes ver con este ejemplo, modular puede ahorrarnos muchas lneas de cdigo si pensamos en dnde podemos reutilizar un mtodo. Una vez que hayas terminado el mtodo y probado tu aplicacin vamos a terminar de hacer el ltimo mtodo que falta. En este mtodo debemos obtener la potencia de un nmero utilizando ciclos. Selecciona el botn x^y y presiona click derecho, en el men selecciona events -> action -> actionPerformed. Para poder calcualr la potencia debemos hacer un ciclo que cuente y veces y en cada vuelta multiplique un acumulador por la variable x. Es decir:

Compila y corre tu programa. Verifica que todos los botones funcionen de manera adecuada. Comprime tu carpeta de trabajo y mndala por correo.

Tarea: Multiplicacin y Divisin


Instrucciones Paso 1:
Crea un programa de interfaz grfica que tenga dos JLabel con sus respectivos JTextField y dos JButton. Los JLabel deben llamarse lblA y lblB, los JTextField txtA y txtB, los JButton btnMult y btnDiv.

Paso 2:
Al presionar btnMult debe calcularse al multiplicacin a * b y debe mostrarse el resultado. El programa nicamente puede utilizar el operador matemtico de suma (+). NO puede utilizar multiplicacin (*). Tip: Utiliza ciclos para sumar varias veces un nmero.

Paso 3:
Al presionar btnDiv debe calcularse la divisin entera a / b y debe mostrarse el resultado. El programa nicamene puede utilizar el operador matemtico de resta (-). NO puede utilizar la divisin (/). Tip: Utiliza ciclos para restar varias veces b del nmero a. Cuando el restante sea menor que b ya no se puede dividir.

46 PROGRAMACION ORIENTADA A OBJETOS

UNIDADES TECNOLOGICAS DE SANTANDER INGENIERIA DE TELECOMUNICACIONES

Programacin con Ciclos FOR


Instrucciones
Paso 1:

Descarga el esqueleto de la aplicacin. Abre el proyecto en NetBeans, complalo y crrelo para verificar que todo funcione correctametne. Deber aparecer una pantalla similar a la siguiente:

Como puedes ver el esqueleto que vamos a utilizar en esta sesin es exactamente igual que el que utilizamos en la sesin 13. Utilizando este esqueleto vamos a implementar las mismas funciones que implementamos en ese laboratorio pero ahora en lugar de utilizar el while vamos a utilizar el for. Primero que nada selecciona el botn de elevar a una potencia (x^y) y ve al cdigo. Si recuerdas, en el laboratorio pasado tenamos un cdigo similar al siguiente:

Para poder pasar eso a un ciclo for tendramos que utilizar el siguiente cdigo:

Como puedes ver, de todas maneras tenemos el acumulador y el cdigo dentro del ciclo es casi igual, lo nico que cambia es que en el cdigo del for ponemos todo el manejo del contador en una misma lnea, por lo que la mayora de las veces es ms sencillo de entender.
Utilizando el mtodo de ejemplo convierte todos los ciclos de la sesin de while a ciclos for. Recuerda crear un mtodo para las series de nmeros.

47 PROGRAMACION ORIENTADA A OBJETOS

UNIDADES TECNOLOGICAS DE SANTANDER INGENIERIA DE TELECOMUNICACIONES

Prctica 5. Programacin Modular.


Teora

Mtodos
Un mtodo en la programacin orientada a objetos es una rutina asociada con una clase o un objeto. Un mtodo regularmente consiste de un grupo de lneas de cdigo que realizan una accin en particular. Se pueden modificar las acciones que se realizan o los resultados que se obtienen mediante el paso de parmetros. Los mtodos pueden devolver un valor que llamamos valor de retorno (paradjicamente). Podemos ver un mtodo como una caja negra a la que podemos meter valores (parmetros) y nos puede devolver salidas (valores de retorno) aunque no sepamos cmo funciona. Los mtodos que devuelven un valor se llaman funciones, mientras que los mtodos que no devuelven nada se llaman procedimientos.

La declaracin de un mtodo est compuesta de dos partes, el encabezado de la funcin y el cuerpo. El encabezado de una funcin tiene la siguietne sintaxis: acceso [tipo_metodo] tipo_retorno nombreMetodo ([parametros]) Despus del encabezado pueden ir una o ms lneas de cdigo que se ejecutan al llamar el mtodo, estas lneas de cdigo son el cuerpo. Por ejemplo: public static void main(String args[]) { System.out.println("Hola mundo"); } El tipo de acceso (o visibilidad del mtodo) puede ser public o private. Los mtodos pblicos permiten que cualquier clase los utilice mientras que los privados slo permiten que la clase actual los utilice. public void preguntarHora() private void irAlTocador() Los parmetros de un mtodo son los valores que recibe para poderse ejecutar. Deben estar en una lista de variables separada por comas. Por ejemplo: public void llamar(String telefono) Cmo se utiliza un mtodo Algunas veces podemos llamar un mtodo nicamente escribiendo su nombre como es el caso de setVisible(): this.setVisible(true); Pero la mayora de las veces vamos a tener que manejar funciones y tendremos que guardar el valor de retorno en alguna variable, por ejemplo:

double raiz = Math.sqrt(50);


La manera correcta de mandar a llamar una funcin consiste en poner el nombre de la funcin e inmediatamente despus un parntesis con los valores de entrada.

48 PROGRAMACION ORIENTADA A OBJETOS

UNIDADES TECNOLOGICAS DE SANTANDER INGENIERIA DE TELECOMUNICACIONES Tipos de mtodos


Mtodos estticos: Son mtodos de la clase o compartidos. No necesitan una instancia de la clase para poder correr. Un ejemplo muy utilizado es un mtodo que cuente el nmero de objetos que se han creado. Los mtodos estticos siempre deben tener como tipo de mtodo la palabra clave static. public static void incrementCreated() {} public static int getNumCreated() {} Recuerdas el mtodo showMessageDialog(), recuerdas que siempre ponamos el nombre de la clase y no el de una instancia? Es porque es un mtodo esttico. Mtodos abstractos: Son mtodos que no tienen implementacin. Puede parecer que estos mtodos son totalmente intiles pero cuando veamos programacin orientada a objetos veremos por qu nos sirven. Getters y setters: Nos permiten obtener y cambiar las propiedades de un objeto. Por convencin los getters (que nos permiten obtener el valor) empiezan con get y los setters con set. Un ejemplo es getText() para obtener la propiedad text de un JTextField y setText() para cambiar la propiedad text. Constructores: Tienen una sintaxis especial y nos sirven para construir un objeto. Estos mtodos son los nicos que jams devuelven nada (es decir, no tienen valor de retorno) y siempre deben ser pblicos. Su sintaxis es: public NombreClase ([parametros]) {} Destructores: En Java se implementan con el mtodo dispose() y se encargan de liberar la memoria que ocupa un objeto, pero no son necesarios porque en la mayora de los casos Java se encarga de esto automticamente.

Por qu utilizar mtodos


Utilizamos mtodos porque nos permiten no volver a escribir cdigo repetido y adems nos permiten hacer que el cdigo sea mucho ms fcil de entender.

En el cdigo anterior podemos ver el mtodo calculateArea() que nos devuelve el rea calculada. Aunque en este caso no logramos reducir mucho cdigo repetido s logramos hacer ms fcil de entender el cdigo. En el ejemplo anterior la implementacin de calculateArea() es:

Qu visibilidad tiene el mtodo? Qu valor de retorno tiene el mtodo? Qu parmetros recibe? Como podemos ver en la implementacin que hay una lnea que inicia con return. Esta es una palabra clave que regresa ese valor como valor de retorno.

Ejemplos de mtodos
Los getters y setters probablemente son el tipo de mtodo ms utilizado, aunque todava no es objetivo que los conozcamos podemos ver su sintaxis:

49 PROGRAMACION ORIENTADA A OBJETOS

UNIDADES TECNOLOGICAS DE SANTANDER INGENIERIA DE TELECOMUNICACIONES

En ese caso el this es una referencia al mismo objeto, es decir Mi nombre es el nombre que pasaron como parmetro. Muchas veces podemos utilizar mtodos para hacer tareas repetitivas de la interfaz grfica, por ejemplo, limpiar todos los campos:

Ms adelante veremos que los mtodos tambin nos sirven cuando queremos leer y escribir archivos. Los mtodos pueden tener varios valores de retorno diferentes dependiendo de lo que reciban como parmetro, por ejemplo el siguiente mtodo recibe un nombre de usuario y una contrasea y slo devuelve verdadero si el nombre de usuario es Magus y el password es superpass, en caso contrario regresa falso.

Otro ejemplo muy similar:

Alcance de variables
Variables Globales Una variable declarada fuera de algn mtodo es considerada global y la puede utilizar cualquier mtodo. Variables Privadas Una variable declarada dentro de un bloque (un conjunto de lneas de cdigo que se encuentran entre llaves { }) slo puede ser leda dentro de ese mismo bloque. Como puedes ver en el cdigo el metodo2() no puede leer la variablePrivada porque no tiene acceso a ella ya que es parte del metodo1().

Qu sucede cuando declaras una variable dentro de un if?

50 PROGRAMACION ORIENTADA A OBJETOS

UNIDADES TECNOLOGICAS DE SANTANDER INGENIERIA DE TELECOMUNICACIONES

Cundo utilizar mtodos


Como ya vimos podemos utilizar mtodos para una gran cantidad de tareas, pero cmo saber cundo debemos utilizar un mtodo y cuando es mejor dejar el cdigo como esta? Regularmente podemos seguir tres reglas: Si vas a repetir algunas lneas de cdigo deberan estar en un mtodo Si va a hacer ms claro el cdigo debera estar en un mtodo Un mtodo largo debera romperse en sub-mtodos para que sea ms claro

Graphics
Graphics es una clase que se encarga de dibujar las pantallas, los componentes y algunas imgenes fuera de pantalla. Esta clase contiene encapsulada mucha complejidad como: Manejo de fuentes (tipos de letra) Manejo de colores Dibujo de formas geomtricas Dibujo de polgonos

Mtodos de la clase Graphics


Algunos de los mtodos de la clase Graphics que podemos utilizar para dibujar son: drawLine(x1, x2, y1, y2) drawOval(x, y, width, height) drawRect(x, y, width, height) drawString(string, x, y) Adems podemos utilizar mtodos para cambiar cmo dibujamos: setFont(font) setColor(color)

51 PROGRAMACION ORIENTADA A OBJETOS

UNIDADES TECNOLOGICAS DE SANTANDER INGENIERIA DE TELECOMUNICACIONES Cmo funcionan los mtodos


Algunas veces es difcil acostumbrarse a los mtodos de Graphics porque el plano cartesiano que utilizan para dibujar no es estndar sino que tiene el origen en la orilla superior izquierda y de ah se mueve el eje positivo hacia la derecha y hacia abajo. Tomando esto en cuenta los mtodos son un poco complicados de entender al principio. Veamos algunos ejemplos de manera grfica. Lnea g.drawLine(x1, y1, x2, y2); g.drawLine(30, 30, 450, 150);

Fjate como en las coordenadas se utiliza el plano cartesiano que inicia el la orilla superior izquierda.

Rectngulo y valo
g.drawRect(x, y, width, heigth); g.drawRect(30, 30, 420, 120); g.drawOval(x, y, width, height); g.drawOval(30, 30, 420, 120);

String
En la clase del mtodo drawString() las cosas cambian un poco ms porque el String no se dibuja hacia abajo como esperaramos sino se dibuja hacia arriba de la siguiente manera: g.drawString(str, x, y) g.drawString(Hola mundo!, 30, 50)

52 PROGRAMACION ORIENTADA A OBJETOS

UNIDADES TECNOLOGICAS DE SANTANDER INGENIERIA DE TELECOMUNICACIONES Otros mtodos


El mtodo setFont() me permite cambiar el tipo de fuente y recibe un objeto de tipo Font. El constructor de este objeto es: new Font(name, type, size) new Font("Arial", Font.BOLD, 30); Algunas de las constantes que podemos usar en type son: Font.PLAIN Font.BOLD Font.ITALIC El mtodo setColor() nos permite cambiar el color del pincel con el que se va a dibujar. Este mtodo recibe un objeto de tipo Color al que se va a cambiar el color. El constructor de Color es el siguiente: new Color(red, green, blue) Donde red, green y blue pueden ser int (0 - 255) o float (0.0f - 1.0f). new Color(30, 255, 100) new Color(0.2f, 0.8f, 0.4f)

Por qu Graphics?
Podemos utilizar la clase Graphics para tres tareas fundamentalmente: Dibujar imgenes dentro de nuestros programas Crear grficas e informacin visual Crear controles especiales ms amigables El profe utiliza Graphics para crear las grficas de las estadsticas. Algunos programas cambian la apariencia visual al cambiar cmo se dibujan los controles. Un ejemplo de aplicacin que cambia los controles normales de Java es Judoku, un juego de Java basado en Sudoku. Los controles que se ven en la fotografa son JButton

53 PROGRAMACION ORIENTADA A OBJETOS

UNIDADES TECNOLOGICAS DE SANTANDER INGENIERIA DE TELECOMUNICACIONES Clase String


En programacin un String es un conjunto de smbolos ordenados que son tomados de un conjunto de smbolos. En Java un String es un conjunto de char, que al ser unidos pueden entenderse como palabras y oraciones. Algo muy importante que recordar en Java es que todos los String son inmutables, es decir, una vez creados no pueden cambiar. Existen varias operaciones que se pueden realizar con un String, pero las tres ms importantes son: Concatenacin: La concatenacin consiste en unir dos objetos de tipo String. A lo largo del curso hemos visto varios ejemplos y sabemos que el operador de concatenacin en Java es +. Substring: Un substring es un String que se encuentra dentro de otro de un ndice inicial a un ndice final, es decir: El substring desde 0 hasta 3 de Hola Mundo es Hola y el substring desde 5 hasta 10 es Mundo Largo: Nos permite saber el largo de un String. Las dems operaciones con String se pueden obtener utilizando las tres primeras, algunas otras operaciones utilizadas son: Comparacin: Saber si dos objetos String son iguales. Bsqueda: Encontrar si un String contiene otro. Obtener caracteres: Encontrar el carcter que se encuentra en la quinta posicin. Expresiones regulares: Son una manera algo complicada pero extremadamente poderosa de validar que un String tenga un cierto formato. Por qu String? Los objetos String son extremadamente tiles en el mundo de la computacin para poderse comunicar con el usuario. A lo largo del curso hemos mostrado mensajes utilizando concatenacin con String. Adems podemos utilizar objetos String al utilizar archivos de texto ya que podemos representar toda la informacin de nuestras clases utilizando texto. String en Java Para declarar un String debemos utilizar la clase String.

Concatenacin
Para concatenar dos objetos String en Java debemos utilizar el operador +.

La concatenacin genera un String nuevo que tiene la unin de los que fueron concatenados. 54 PROGRAMACION ORIENTADA A OBJETOS

UNIDADES TECNOLOGICAS DE SANTANDER INGENIERIA DE TELECOMUNICACIONES Substring


Podemos obtener un String dentro de otro utilizando la operacin substring. En Java ya est implementada y podemos utilizarla mediante:

El cdigo anterior tiene un bug puedes verlo? Recuerda que los String son inmutables, no pueden cambiar, por lo que el mtodo substring no corta el String sino devuelve uno nuevo.

Largo
El largo de un String nos permite recorrer sus letras, con lo que podemos encontrar patrones, buscar informacin o realizar varios tipos de conteos.

Podemos utilizar un ciclo para recorrer el String desde el ndice 0 hasta el ndice length - 1.

55 PROGRAMACION ORIENTADA A OBJETOS

UNIDADES TECNOLOGICAS DE SANTANDER INGENIERIA DE TELECOMUNICACIONES

Programacin Modular
Instrucciones Paso 1:
Descarga el esqueleto de la aplicacin que vamos a utilizar en esta sesin. Abre NetBeans, complalo y corre el programa. Tendrs una interfaz grfica similar a la siguiente:

Paso 2:
Selecciona el botn "a Kilogramos" y haz click derecho. Selecciona events->action->actionPerformed. En el cdigo podemos ver que tenemos que crear un mtodo toKilograms() que recibe como parmetro un valor de tipo double que representa la cantidad de gramos que vamos a convertir y regresa un valor de tipo double que representa la cantidad de kilogramos a la que se convirti. Al crear un mtodo debemos hacernos una serie de preguntas que nos van a permitir saber qu tipo de mtodo queremos llamar: Qu tipo de acceso va a tener el mtodo? Sabemos que el mtodo slo va a ser utilizado dentro de esta misma ventana, por lo que podemos ponerle un tipo de acceso private. Qu tipo de mtodo es? Es un mtodo normal por lo que no debemos poner ninguna palabra clave (como static o abstract). Qu valor de retorno tiene? En este caso nos dicen que el mtodo nos va a devolver un double, pero muchas veces tenemos que pensar qu tipo de dato es el que mejor representa cierto problema. Qu nombre tiene? Nos dicen que el mtodo se va a llamar toKilograms(), es muy importante siempre seleccionar un nombre de mtodo que sea fcil de entender y que nos diga para qu sirve el mtodo. Por ejemplo, el mtodo convert() podra hacer conversiones de cualquier tipo y no es muy preciso, mientras que el mtodo toKilograms() nos dice que va a convertir a kilogramos. En este caso no es muy importante decir que convierte de gramos porque eso lo podemos ver en los parmetros. Qu parmetros recibe? Una vez ms nos dicen que slo recibe un parmetro llamado grams de tipo double que representa cuntos gramos hay que convertir. Una vez que hayamos termiando de decidir esto podemos hacer el encabezado del mtodo, recuerda que siempre el encabezado debe estar en el mismo orden que las preguntas que hicimos. El encabezado para el mtodo quedara de la siguiente manera: Ahora debemos escribir el mtodo en algn lugar que se encuentre adentro de la clase pero que no se encuentre adentro de un mtodo, las flechas en la siguiente imagen marcan lugares donde podra ponerse el mtodo. Podemos utilizar cualquiera de esos lugares, pero se recomienda que utilicemos alguno de los lugares que tienen flecha roja, ya que se encuentran al final de la clase y son fciles de encontrar cuando estamos revisando el cdigo.

56 PROGRAMACION ORIENTADA A OBJETOS

UNIDADES TECNOLOGICAS DE SANTANDER INGENIERIA DE TELECOMUNICACIONES

Despus del encabezado debe ir el cuerpo del mtodo, en este caso el mtodo nos sirve para convertir de gramos a kilogramos, que es algo muy sencillo, por lo que slo debemos poner una lnea en cualquier lugar que est dentro de la clase pero que est fuera de cualquier mtodo que multiplique los gramos por 0.001 de la siguiente manera:

Recuerda que la palabra clave return nos permite indicarle al programa qu va a regresar ese mtodo, es decir, cul va a ser el valor de retorno. En este caso el mtodo va a regresar los gramos multiplicados por 0.001, con lo que los convertimos a kilogramos. Por ltimo mandamos llamar el mtodo toKilograms() para convertir a kilos dentro del cdigo del botn.

Modifica el cdigo para que valide que los gramos sean un nmero positivo.

Paso 3:
Ahora pasemos al segundo botn. El botn debe convertir la cantidad de gramos a libras, pero no nos dan la equivalencia de gramos a libras directamente sino que nos dan la equivalencia de kilogramos. Por suerte podemos utilizar el mtodo que creamos en el paso anterior y crear un nuevo mtodo que convierta de kilogramos a libras. Contesta las siguientes preguntas en un archivo de texto: Qu tipo de acceso va a tener el mtodo? Qu tipo de mtodo es? Qu valor de retorno tiene? Qu nombre tiene? Qu parmetros recibe?
57 PROGRAMACION ORIENTADA A OBJETOS

UNIDADES TECNOLOGICAS DE SANTANDER INGENIERIA DE TELECOMUNICACIONES


Utilizando tus respuestas podemos ver que el mtodo va a ser similar al siguiente:

Fjate que en este caso el parmetro se llama kilograms. Esto es muy importante ya que nos permite saber qu recibe el mtodo. Es muy importante que nuestros parmetros tengan nombres claros que nos digan qu es lo que recibe el mtodo para que no nos confundamos al llamarlos. Ahora al mandar llamar este mtodo debemos realizar un cambio intermedio utilizando el mtodo anterior. Podramos estar pensando que sera mucho ms lgico crear un mtodo que directamente convirtiera de gramos a libras, pero s tiene sentido que lo hagamos por partes. Muchas veces cuando nos dan los requerimientos del usuario no estn muy claros y los mtodos podran cambiar aunque no cambie la lgica del programa. Por ejemplo, podra ser que al inicio el usuario considere que los resultados son correctos si tienen tres decimales correctos y no es necesario utilizar medidas muy precisas pero al crecer el programa solicita mayor precisin y si no tuvieramos todo dividido por mtodos tendramos que modificar varias frmulas que probablemente tendramos que calcular a mano. Para ejemplos ms complicados esto tiene mucho ms sentido. Por ejemplo, podramos crear un mtodo que leyera todos los usuarios de una base de datos y los ponga en una lista, si la base de datos cambia no necesitamos cambiar todo el programa sino nicamente el mtodo. Ahora utilicemos el mtodo que acabamos de crear para convertir de gramos a libras utilizando el siguiente cdigo:

Como puedes ver no tenemos que hacer muchos cambios del cdigo anterior y en caso de que algn da el rey decida cambiar el valor de las libras entonces podemos realizar slo un cambio al mtodo toPounds() y nuestro programa seguira funcionando de manera correcta.

Paso 3:
Utilizando los conocimientos sobre mtodos que hemos visto en este ejercicio completa los ltimos dos botones que faltan. Recuerda responder las siguientes preguntas para cada uno de los mtodos que hayas creado y ponerlas en el archivo de texto: Qu tipo de acceso va a tener el mtodo? Qu tipo de mtodo es? Qu valor de retorno tiene? Qu nombre tiene? Qu parmetros recibe? Comprime tu carpeta de trabajo y el archivo de texto con las preguntas y mndalos por correo.

58 PROGRAMACION ORIENTADA A OBJETOS

UNIDADES TECNOLOGICAS DE SANTANDER INGENIERIA DE TELECOMUNICACIONES

Programacin Modular Graphics


Instrucciones Paso 1:
Corre NetBeans y crea un nuevo proyecto al que llamaras Sesion7. Agrega un JFrame llamado MainFrame. Debers tener una estructura de proyecto similar a la que se ve en la siguiente fotografa:

Paso 2:
Crea la siguiente interfaz grfica:

El control de la parte de abajo se llama JTextArea y es un JTextField que puede tener ms de un rengln. Al agregar un JTextArea automaticamente se agrega un JScrollPane que son las barritas de los lados con las que podemos bajar el texto. En el Navigator podemos ver que el JTextArea est dentro de un JScrollPane. Una vez que tengamos todos los controles debemos ponerles los siguientes nombres (recuerda que puedes utilizar F2 para que sea ms fcil cambiarles el nombre):

59 PROGRAMACION ORIENTADA A OBJETOS

UNIDADES TECNOLOGICAS DE SANTANDER INGENIERIA DE TELECOMUNICACIONES

Recuerda que para que el JFrame se muestre debes poner la lnea setVisible(true); dentro del constructor de la clase, despus de la llamada al mtodo initComponents(). Una vez que hayas creado la ventana recuerda agregar la lnea new MainFrame() dentro del mtodo main() de la clase Main.

Paso 4:
Nuestro programa va a calcular el rea de un anillo, que se calcula mediante restando el rea del circulo interno del rea del circulo externo. Para poder hacer esto nuestro programa debe calcular el rea del crculo interno y del crculo externo utilizando el radio. Como esa operacin es repetitiva vamos a ponerla en un mtodo por separado. El mtodo va a llamarse calculateArea(), va a recibir el radio (tipo double) y debe regresar un valor tipo double que representa el rea. En cdigo podramos verlo como el siguiente mtodo:

Paso 5:
Ahora s, vamos a crear el mtodo actionPerformed() de btnCalculate. En el modo de diseo haz click derecho sobre el botn y selecciona Events -> Action -> actionPerformed. Dentro del cdigo debemos obtener los valores de los radios, podemos utilizar el siguiente cdigo para lograrlo:

Paso 6:
Una vez que tengamos los datos debemos validar que el radio interior sea menor o igual que el radio exterior. Esto podemos lograrlo mediante un if, y slo si son vlidos debemos de calcular las reas y restarlas. El resultado final vamos a mostrarlo en el JTextArea de la parte inferior. En cdigo podramos verlo como lo siguiente:

60 PROGRAMACION ORIENTADA A OBJETOS

UNIDADES TECNOLOGICAS DE SANTANDER INGENIERIA DE TELECOMUNICACIONES

Prueba que todo funcione correctamente en tu aplicacin compilando el programa y corrindolo. Hasta este momento debe poder calcular el rea de un anillo y mostrarla en el JTextArea que pusimos para mostrar resultados, tambin debe poder validar errores.

Paso 7:
Aunque nuestro programa ya cumple con su objetivo muchas veces eso no es suficiente para nuestros clientes que la mayora de las veces quieren algo un poco ms vistoso. En este momento es en el que podemos utilizar Graphics para dar un valor agregado a nuestros programas. Como vimos en el autoestudio podemos utilizar la clase Graphics para pintar sobre un componente, por lo que no podemos pintar sobre un JFrame (tcnicamente s se puede pero no se debe hacer por la implementacin de Java del JFrame). Este componente puede ser cualquier componente de Swing, aunque regularmente se utiliza un JLabel o un JComponent por ser muy sencillos y ligeros. Por lo tanto para poder pintar debemos crear un componente nuevo que se comporte como JComponent, pero que se dibuje de manera diferente. Para poder hacer esto debemos hacer click derecho sobre el paquete sesion7 y seleccionar New -> BeanForm.

Si no se encuentra BeanForm en el men debemos seleccionar New -> File/Folder y dentro de ese men seleccionar BeanForm como se ve en la imagen:

61 PROGRAMACION ORIENTADA A OBJETOS

UNIDADES TECNOLOGICAS DE SANTANDER INGENIERIA DE TELECOMUNICACIONES

Nuestro Bean va a llamarse RingBean y su superclase debe ser javax.swing.JComponent como se ve en las siguientes fotografas:

Paso 8:
Al terminar aparecer un error de que no puede pintar la forma porque no es un JavaBean. Esto es porque todava no hemos programado cmo debe de pintarse el JComponent y NetBeans todava no lo puede dibujar. Haz click en source y vete al cdigo. Pon el cursor en algn lugar en blanco fuera de un mtodo, pero dentro de la clase y presionar Ctrl+Space para que aparezca el dilogo de autocompletar. Ah debes escribir paintComponent y se seleccionar la entrada que se ve en la fotografa:

Es muy importante que sea paintComponent (sin la s) y que a la derecha diga override. Una vez que lo hayas encontrado presiona enter y se construir automticamente el mtodo paintComponent() que
62 PROGRAMACION ORIENTADA A OBJETOS

UNIDADES TECNOLOGICAS DE SANTANDER INGENIERIA DE TELECOMUNICACIONES


tiene un parmetro de tipo Graphics con el que podemos dibujar sobre el componente. Presiona Alt+Shift+F para resolver las dependencias (Graphics todava no estaba incluido en los imports) y dentro de ese mtodo pon el siguiente cdigo:

La palabra clave this se refiere a este componente. Una vez que creamos la instancia y lo ponemos en la ventana this.getWidth() debe devolvernos el ancho de ese componente dentro de la ventana. Obtenemos el ancho y el alto del componente para garantizar que todava estamos dibujando dentro de l. De acuerdo a tu autoestudio para qu crees que funciona el cdigo anterior? Compila tu programa para revisar que no haya ningn error y para garantizar que el Bean ha sido construido. Ahora debemos agregar nuestro RingBean a la paleta de NetBeans para poder ponerlo en la ventana que hicimos anteriormente. Podemos lograr eso haciendo click derecho sobre el Bean en el explorador de proyectos, seleccionando Tools -> Add to Palette.

En la pantalla que aparece seleccionamos la carpeta de Beans y regresamos a MainFrame en modo de diseo. Podemos ver que en la paleta dentro de la seccin de Beans ha aparecido nuestro Bean, as que ahora podemos agregarlo a la ventana.

63 PROGRAMACION ORIENTADA A OBJETOS

UNIDADES TECNOLOGICAS DE SANTANDER INGENIERIA DE TELECOMUNICACIONES

Agrega el componente a la ventana. Si en el tiempo de diseo parece que tu Bean todava no tiene forma no te preocupes, lo que pasa es que NetBeans no vuelve a leer los Beans sino hasta volver a empezar. Esto es un error en el que estn trabajando los programadores de NetBeans, pero no afecta tu proyecto. Despus de agregar el RingBean cambile el nombre a ring de la misma manera que lo haras con otros componentes. Compila y corre el programa y podrs ver una ventana similar a la siguiente (dependiendo del lugar en que pusiste tu control):

Nuestro control ya est dibujando un rectngulo, pero ahora lo que queremos hacer es que dibuje los anillos interior y exterior. Para poder hacer esto es necesario modificar RingBean. Primero vamos a crear un par de variables que guarden los valores de los radios, despus debemos crear un mtodo que reciba los radios que se deben dibujar y despus manden dibujar utilizando estos datos. Copia el siguiente cdigo dentro de RingBean:

En este cdigo vamos a ver varias cosas interesantes. Primero que nada fjate que las variables tienen el modificador private para que otros objetos no puedan acceder a sus variables ms ntimas. Esto es por algo llamado encapsulacin que vamos a ver mucho ms a profundiad al tocar el tema de programacin orientada a objetos. Adems es importante notar que las variables son de tipo int, porque Graphics no
64 PROGRAMACION ORIENTADA A OBJETOS

UNIDADES TECNOLOGICAS DE SANTANDER INGENIERIA DE TELECOMUNICACIONES


puede manejar los tipos de dato double. En el mtodo setRadius() podemos ver que utilizamos la palabra clave this para referirnos a la variable del objeto, a diferencia de la variable pasada como parmetro, esto tambin es un comportamiento que analizaremos ms detalladamente al ver programacin orientada a objetos. En pocas palabras: this.innerRadius == innerRadius de la clase innerRadius == innerRadius el parmetro Por ltimo podemos ver el mtodo repaint() que le dice al componente que ha sucedido algo que amerita que vuelva a pintarse. Este mtodo se encarga de revisar qu fue lo que sucedi y llamar los mtodos adecuados para volver a dibujar el componente. Una vez que hemos echo esto debemos modificar el mtodo paintComponent() para que utilice estos valores y dibuje dos crculos en lugar del rectngulo que dibuja actualmente. Podemos lograr esto mediante el siguiente cdigo:

Este mtodo puede parecer un poco complicado. Podemos ver que primero calculamos el centro del componente (dividiendo el ancho entre dos y el largo entre dos). Una vez que hemos echo eso vamos a poner el punto inicial en el centro menos el radio (con esto estamos garantizando que el centro del crculo est a la mitad de la ventana porque el crculo mide dos veces el radio) y por ltimo estoy poniendo el ancho y alto como el doble del radio. Podemos verlo graficamente:

Por ltimo slo debemos mandar llamar el mtodo setRadius() dentro del actionPerformed del botn btnCalculate. Podemos hacerlo de la siguiente manera:

Adems de los mtodos drawX (como drawRect(), drawOval()), la clase Graphics tambin tiene mtodos fillX (como fillRect() y fillOval()). Estos mtodos dibujan una figura que est rellena de color.

65 PROGRAMACION ORIENTADA A OBJETOS

UNIDADES TECNOLOGICAS DE SANTANDER INGENIERIA DE TELECOMUNICACIONES


Para poder cambiar el color del pincel que utilizamos para pintar sobre el bean puedes utilizar el mtodo setColor() de la clase Graphics (es decir, lo utilizas g.setColor(Color.GREEN), revisa el men de autocompletar de NetBeans para saber algunos otros colores que puedes utilizar).

Comprime tu carpeta de trabajo y mndala por correo.

66 PROGRAMACION ORIENTADA A OBJETOS

UNIDADES TECNOLOGICAS DE SANTANDER INGENIERIA DE TELECOMUNICACIONES

No Strings Attached
Instrucciones
Paso 1:

Descarga el esqueleto de la aplicacin. Abre el proyecto en NetBeans, complalo y crrelo para verificar que todo funcione correctametne. Deber aparecer una pantalla similar a la siguiente:

Paso 2:

La empresa MaguSoft ha desarrollado un moderno scanner para obtener una cadena de cromosomas que consiste de los caracteres 'X' y 'Y'. Los ms brillantes cientficos han analizado miles de cadenas de caracteres, pero han llegado a la conclusin de que es un trabajo repetitivo y complicado que no es merecedor de sus intelectos. En vista de esto han decidido contratarte para desarrollar un sistema que analice una cadena de caracteres que representa la cadena de cromosomas y que cuentes el nmero de 'X' y el nmero de 'Y' que se encuentran en la cadena. Los cientficos te informan que el sexo de un individuo puede ser determinado mediante esta cadena obteniendo el nmero de X y de Y y comparndolos mediante las siguientes dos reglas:

#Y >= #X: El indidivuo es del sexo masculino #Y < #X: El individuo es del sexo femenino

Otro problema serio que enfrentan los cientficos es que el scanner regresa mucha basura en las cadenas de caracteres por lo que necesitan una manera de limpiar las cadenas. Las cadenas de caracteres nicamente deben contener los caracteres 'X' y 'Y', todos los dems caracteres deben ser descartados. Para poder resolver el primer problema vamos a crear tres mtodos, uno que regrese el nmero de X que tiene la cadena, uno que regrese el nmero de Y que tiene la cadena y un ltimo mtodo que utilice estos dos para devolver un String con el sexo correspondiente. Para poder recorrer una cadena caracter por caracter utilizamos el mtodo charAt(int index) de la clase String, que nos devuelve el caracter que se encuentra en la posicin index del String (el ndice empieza en 0). Como el ndice empieza en cero sucede una cosa curiosa, el String "hola" tiene un largo de 4, pero el ndice de la letra h es 0 y de la letra a es 3, por lo que el ciclo que creamos siempre debe ir desde cero hasta el largo del String menos uno (o lo que es lo mismo, debe correr mientras sea menor que el largo). Tomando esto en cuenta vamos a crear el siguiente mtodo:

67 PROGRAMACION ORIENTADA A OBJETOS

UNIDADES TECNOLOGICAS DE SANTANDER INGENIERIA DE TELECOMUNICACIONES

Basndote en este mtodo puedes crear el mtodo getY(String chromosomes) que debe contar el nmero de 'Y' que tiene la cadena de caracteres recibida como parmetro. Con estos dos mtodos tambin podrs crear el mtodo getSex(String chromosomes) que debe utilizar los dos mtodos creados anteriormente y devolver "Hombre" o "Mujer" de acuerdo al nmero de cromosomas X y cromosomas Y de la cadena. En el actionPerformed() del botn debes mandar llamar este ltimo mtodo y mostrar el resutlado en un message dialog. El segundo problema es similar, pero tiene un detalle muy importante. Hay que recordar que un String es inmutable, por lo que no podemos utilizar un mtodo que remueva los caracteres que sobran sino debemos ir revisando cada caracter y agregarlos a otro String en el que guardemos slo el resultado con caracteres vlidos.

Paso 3:

En el siguiente ejercicio vamos a obtener una cadena de caracteres y contar el nmero de veces que se repite un caracter. Como puedes imaginarte este mtodo es muy similar a getX() o getY(), pero en este caso el mtodo debe ser ms general. Adems es importante realizar algunas validaciones, como que el segundo JTextField no tenga ms que un solo caracter. Para poder obtener el nmero de caracteres que tiene una cadena puedes utilizar el mtodo length(), con lo que podras saber si contiene un solo caracter. Despus puedes utilizar el mtodo charAt() para obtener el caracter que est en la primera posicin (recuerda que el ndice empieza de 0) y crear un mtodo genrico count(String s, char c) que cuente el nmero de veces que aparece el caracter pasado como parmetro en el String pasado como parmetro.
Paso 4:

Adems de los mtodos que hemos utilizado hasta el momento, Java cuenta con muchos mtodos especiales de utilera, con los que podemos crear un String nuevo con ciertas caractersticas especiales basndonos en otro String. Un ejemplo de estos mtodos es el mtodo toUpperCase() que nos devuelve un String igual que el String que manda a llamar el mtodo pero con todas las minsculas cambiadas por sus equivalentes en maysculas. Sabiendo esto podemos construir el mtodo que cambia a maysculas:

68 PROGRAMACION ORIENTADA A OBJETOS

UNIDADES TECNOLOGICAS DE SANTANDER INGENIERIA DE TELECOMUNICACIONES

Por ltimo cuenta el nmero de vocales que tiene el String utilizando el mtodo que creamos en el paso 3 y muestralo en un message dialog.
Comprime tu carpeta de trabajo y mndala por correo.

69 PROGRAMACION ORIENTADA A OBJETOS

UNIDADES TECNOLOGICAS DE SANTANDER INGENIERIA DE TELECOMUNICACIONES

Prctica 6. Ejercicios Varios Creacin de una Pantalla de Login


Instrucciones
Una gran cantidad de aplicaciones necesitan una pantalla de login para poder validar a los usuarios. Este tipo de validaciones se hacen utilizando la sentencia if.

Paso 1:
Crea una interfaz grfica en la que el usuario pueda poner su nombre de usuario y contrasea y despus presionar un botn para que estos sean validados. Algunas consideraciones: Dos objetos de tipo String se comparan con el mtodo equals(), *NO* con == Para obtener el texto de un JTextField utiliza el mtodo getText() Para obtener el texto de un JPasswordField utiliza el mtodo getPassword() de la siguiente manera:

El nombre de usuario y contrasea deben ser fijos, al comparar compara contra un String

70 PROGRAMACION ORIENTADA A OBJETOS

UNIDADES TECNOLOGICAS DE SANTANDER INGENIERIA DE TELECOMUNICACIONES

Programacin con Ciclos


Instrucciones
Paso 1:

Descarga el esqueleto de la aplicacin que vamos a utilizar en esta sesin y abre el proyecto en NetBeans. Ahora compila y corre la aplicacin. Aparecer una pantalla gris con tres divisiones (que tienen controles aunque no estn pintados). Al terminar la aplicacin tendremos una interfaz grfica similar a la siguiente:

En esta aplicacin vamos a utilizar Graphics y lo que hemos aprendido de ciclos para crear estas tres figuras. Primero empecemos con el tablero de ajedrez. Como podemos ver el tablero de ajedrez es una figura muy sencilla compuesta de 64 cuadros ordenados en una cuadrcula de 8 x 8. Vamos a analizar un poco ms a fondo cmo vamos a hacer esto:

Nuestro tablero est formado por cuadros de 25 pixeles cada uno. Eso significa que la esquina superior izquierda (el origen) de el quinto cuadro de la primera fila sera (4 x 25, 0) es decir (100, 0), el sexto cuadro estara en (5 x 25, 0) o (125, 0). Aqui podemos ver un patrn que es muy improtante porque es la base con la que vamos a crear nuestro ciclo. Veamos qu sucede para el quinto cuadro de la sexta fila (4 x 25, 5 x 25) o (100, 125). Como podemos ver todas las posiciones estn en base a ((columna - 1) x 25, (fila - 1) x 25). Para evitar estar restando a las columnas y las filas podemos utilizar un ndice que empiece de cero en lugar de uno. Lo siguiente que debemos determinar es cules son los lmites de nuestro ciclo. Podramos hacer un ciclo que cuente hasta el 64 y que utilice una divisin y su mdulo para obtener el nmero de fila y columna respectivamente. Podemos verlo con el siguiente cdigo:

71 PROGRAMACION ORIENTADA A OBJETOS

UNIDADES TECNOLOGICAS DE SANTANDER INGENIERIA DE TELECOMUNICACIONES

NOTA: Es muy importante que no olvides agregar el incremento hasta el final (square++). En caso de que lo hagas, tu programa se va a congelar y va a comenzar a utilizar muchsimos recursos para pintar. Peor an, podra ser que NetBeans intentara dibujar el componente y se quedara atorado por siempre en el ciclo, por lo que tendras que cerrar la aplicacin y perderas tu trabajo. En caso de que corras un programa que tenga un ciclo sin fin puedes utilizar la ventana de runtime como se ve en la imagen (la ventana runtime est junto a la ventana de Projects y en caso de que no se vea puedes utilizar Window -> Runtime o Ctrl+5 para que aparezca):

Fjate en el if. Lo que estamos haciendo es ver qu color haba en la celda anterior y pintar la nueva celda con un color diferente. Esto nos sirve para hacer los cuadros blancos y negros alternados. Ahora compila y corre el programa y vers la siguiente imagen

Esto sucede porque los cuadros no siempre deben cambiar de color (como lo estamos haciendo en nuestro programa) sino que al cambiar de fila utilizan el mismo color que antes (si el ltimo de la fila anterior era negro el primero de la fila actual tambin es negro). Podemos revisar con un if si estamos cambiando de fila (cuando col es igual a cero, significa que estamos en una fila nueva). El if puede ser como el siguiente:

72 PROGRAMACION ORIENTADA A OBJETOS

UNIDADES TECNOLOGICAS DE SANTANDER INGENIERIA DE TELECOMUNICACIONES

Vuelve a probar tu programa y ahora deber dibujar el tablero de manera correcta (en realidad casi correcta, el tablero tiene un cuadrado negro en la esquina inferior derecha y debera ser blanco, puedes cambiar el color con el que empezamos a pintar para corregir esto). Como puedes ver, puedes utilizar el mdulo y la divisin como operaciones complementarias al utilizar ciclos, aunque este enfoque no es muy utilizado. Ms adelante veremos una manera un poco ms sencilla de lograr esto mismo. Una vez que hayas probado tu programa contina con el ejercicio del gusano

Aqui hay varias cosas importantes que tomar en cuenta. Primero que nada, las partes del cuerpo van a estar alternando su posicin vertical entre 0 y 5. Puedes observar que todas las partes del cuerpo nones van a estar arriba, mientras que las pares van a estar abajo, podemos utilizar un if que revise si la parte del cuerpo es non o par y la ponga en la posicin en y que le corresponde. Tambin podemos ver que la cabeza es diferente de las dems partes del cuerpo, por lo que debemos pintarla por separado y fuera de un ciclo. Por ltimo debemos definir cmo va a ser el ciclo que utilicemos para pintar todas las partes del cuerpo. La primera parte despus de la cabeza (primera parte del cuerpo) va a estar en la posicin 1 x 10, la segunda parte va a estar en la posicin 2 x 10, la tercera parte va a estar en la posicin 3 x 10. Ah est el patrn que necesitamos para empezar a pintar. Tomando esto en cuenta podemos utilizar un ciclo que empiece desde 1 (fjate que la primera parte tiene un 1, a diferencia del problema anterior porque aqu la cabeza es diferente). Tomando en cuenta estas consideraciones podemos programar el siguiente cdigo:

73 PROGRAMACION ORIENTADA A OBJETOS

UNIDADES TECNOLOGICAS DE SANTANDER INGENIERIA DE TELECOMUNICACIONES


NOTA: Recuerda que es muy importante aumentar el acumulador con la lnea pieces++. Fjate en cmo vamos a dibujar 40 piezas empezando el contador (pieces) en 1 y repitiendo el ciclo mientras que pieces sea menor o igual a cuarenta. Tambin fjate que utilizamos una variable y que representa la posicin en y en que vamos a dibujar y el if se va a encargar de cambiarla de 0 a 5 y viceversa segn sea necesario. Compila y corre tu cdigo asegurandote de que se dibuje el gusano correctamente. Por ltimo vamos a dibujar el camin.

En teora es muy similar al gusano, slo que ahora en lugar de tener un nmero fijo de piezas del cuerpo tenemos un nmero variable que se encuentra guardado en la variable boxes. Otro detalle importante es que las cajas van separadas unas de otras, por lo que tendremos que poner un poco de separacin.

Como podemos ver el mtodo es practicamente igual que el anterior, pero cambiamos un poco la manera de dibujar los controles. Compila tu aplicacin y correla para probar que funcione adecuadamente. Cambia el nmero de cajas que tiene el camin utilizando la caja de texto (introduce el nmero y presiona enter).
Comprime tu carpeta de trabajo y mndala por correo.

74 PROGRAMACION ORIENTADA A OBJETOS

UNIDADES TECNOLOGICAS DE SANTANDER INGENIERIA DE TELECOMUNICACIONES

Sesin integradora
Instrucciones Paso 1:
Crea una interfaz grfica con tres pneles. El JPanel est en la paleta y nos permite dividir la interfaz grfica en secciones. Esto es til por dos razones, para el usuario final es mucho ms intuitivo cuando los controles estn agrupados por funcin y cuando no hay muchos controles juntos, adems, como el constructor de ventanas de NetBeans todava no es un producto completamente terminado entonces es muy complicado poner los controles de ciertas maneras (por ejemplo, poner un control que ocupe el tamao de toda la ventana y luego varios controles centrados, luego algunos en la izquierda y algunos en la derecha), como el JPanel es un contenedor de controles podemos poner varios JPanel alineados y que dentro de ellos estn los controles para que estos no estn alineados. Para agregar un panel seleccionalo en la paleta:

Puedes ponerle un borde para que se vea ms llamativo o para que tenga informacin sobre los controles que se encuentran dentro haciendo click en el botn que tiene tres puntos de la siguiente foto:

Aparecer una pantalla como la siguiente en la que puedes controlar la apariencia del borde:

No olvides cambiar el nombre del JPanel en el inspector. El prefijo para los pneles es pnl.

Si haces doble click en el inspector sobre un JPanel puedes editar slo el panel, lo que te permite poner controles en la posicin que t quieres o te permite ver cmo se va a comportar el panel al cambiar de tamao. Si quieres regresar a la ventana principal en el inspector selecciona la opcin de hasta arriba del rbol que dice [JPanel]. Para cada problema agrega un panel con los controles que se te solicitan para poderlo resolver.

Paso 2:
75 PROGRAMACION ORIENTADA A OBJETOS

UNIDADES TECNOLOGICAS DE SANTANDER INGENIERIA DE TELECOMUNICACIONES


Existe un problema muy interesante en computacin llamado El Problema 3n + 1. Lo que hace este problema interesante es que nadie sabe si existe un nmero con el que el algoritmo nunca va a terminar de ejecutarse y se queda ciclado permanentemente. El problema es muy sencillo, consiste en leer un nmero n, si el nmero es impar entonces n = 3n + 1, si el nmero es par entonces n = n / 2, despus se vuelve a revisar si el nmero es par o impar. El algoritmo termina cuando n == 1. Para ayudar a los cientficos computacionales en su tarea de investigacin agrega a tu interfaz grfica una caja de texto donde el usuario pueda poner n y el programa calcule cuntos pasos tomar terminar el Problema 3n + 1. Por ejemplo, para 22 el programa debera indicar que termin en 16, porque tendramos 1. 22 (par, n / 2) = 2. 11 (impar 3n + 1) = 3. 34 (par, n / 2) = 4. 17 (impar 3n + 1) = 5. 52 (par, n / 2) = 6. 26 (par, n / 2) = 7. 13 (impar 3n + 1) = 8. 40 (par, n / 2) = 9. 20 (par, n / 2) = 10. 10 (par, n / 2) = 11. 5 (impar 3n + 1) = 12. 16 (par, n / 2) = 13. 8 (par, n / 2) = 14. 4 (par, n / 2) = 15. 2 (par, n / 2) = 16. 1 (termina en uno) Por lo tanto tu programa debe mostrar un mensaje que diga que el Problema 3n + 1 termin en 16 pasos.

Paso 3:
Crea un Bean Form que muestre una cuadrcula de 30 x 10 en que cada rectngulo tenga un color diferente al azar. Para generar un color al azar puedes utilizar el siguiente cdigo:

La clase Random permite generar nmeros al azar mediante sus mtodos. El mtodo nextInt() puede recibir un nmero que representa el lmite superior, el lmite inferior siempre es 0. Puedes cambiar los valores mximos a otros nmeros y tambin puedes sumarles algn valor constante para que tus colores sean ms homogeneos y se vean un poco mejor, la nica condicin es que todos los valores no pueden ser menores que 0 ni mayores que 255 (por ejemplo, puedes utilizar rand.nextInt(100) + 155 para obtener valores entre 155 y 255). Adems, el programa deber calcular el ancho y alto de los rectngulos para que ocupen todo el espacio del Java Bean. Puedes obtener el ancho y alto del Java Bean mediante los siguientes mtodos:

Paso 4:
Un amigo nuestro va a ir a las Vegas a probar su suerte dentro de unos meses. A nuestro amigo le gusta mucho jugara los dados, y va a pasar varias horas jugando. El juego que le gusta jugar a nuestro amigo consiste en lanzar dos dados y apostar a que el nmero va a ser mayor que nueve, menor que cuatro o algn valor intermedio. Nuestro amigo no cree en la probabilidad, por lo que te ha pedido que desarrolles un sistema que le diga a qu nmero apostar. El programa debe lanzar los dos dados doscientas veces y mostrar el valor que apareci un mayor nmero de veces (puedes obtenerlo sacando el promedio de todos los tiros o utilizando variables contador). Por ejemplo, si en las tiradas salieron los siguientes valores: 1. 4 + 3 = 7 (Entre 4 y 9) 76 PROGRAMACION ORIENTADA A OBJETOS

UNIDADES TECNOLOGICAS DE SANTANDER INGENIERIA DE TELECOMUNICACIONES


2. 6 + 4 = 10 (Mayor que 9) 3. 3 + 6 = 9 (Entre 4 y 9) 4. 1 + 2 = 3 (Menor que 4) 5. 2 + 2 = 4 (Entre 4 y 9) Entonces debe imprimir que es ms conveniente apostar a un nmero entre 4 y 9.

Paso 5:
Nuestro amigo tambin est interesado en jugar a las cartas, pero desgraciadamente no sabe ingls, por lo que piensa que podran tomarle el pelo. Para ayudarlo a conocer las cartas y sus nombres crea la clase Card que tiene dos parmetros, un char con el maso al que pertenece y un int con su valor. La clase Card debe contar con un constructor que reciba dos parametros: char suit e int value. Los valores que pueden tener estos parmetros son: suit: 'C' para treboles (clubs), 'D' para diamantes (diamonds), 'H' para corazones (hearts) y 'S' para espadas (swords) value: cualquier valor entre 2 y 14. La clase Card tambin debe tener getters y setters. Los setters deben realizar validaciones (para el maso slo se pueden poner los cuatro caracteres ya mencionados y para el valor slo se pueden poner valores entre 2 y 14), recuerda lanzar un IllegalArgumentException en caso de que los valores no sean vlidos. Por ltimo debes implementar el mtodo toString() que devuelve un String con la representacin del objeto (puedes utilizar autocompletar para construir el encabezado del mtodo, pon el cursor en algn lugar en que puedas escribir un mtodo y despus presiona ctrl+space y comienza a escribir toString()). El mtodo toString() debe devolver el nombre completo de la carta, por ejemplo, para al carta con suit == 'H' y value == 3 debe devolver "3 de Corazones". Si el valor est entre 2 y 10 debe devolver el valor numrico, si el valor es 11 debe devolver Joto, si el valor es 12 debe devolver Reina, si el valor es 13 debe devolver Rey y si el valor es 14 debe devolver As. Por ejemplo:
Maso H D C S 3 10 11 14 Valor 3 de Corazones 10 de Diamantes Joto de Treboles As de Espadas toString()

Puedes utilizar un switch o varios if para convertir los valores y las letras a String. Recuerda que el switch tiene un caso especial que se ejecuta cuando ningn otro caso se ejecut llamado default.

Comprime tu carpeta de trabajo y mndala por correo.

77 PROGRAMACION ORIENTADA A OBJETOS

UNIDADES TECNOLOGICAS DE SANTANDER INGENIERIA DE TELECOMUNICACIONES

Practica 7 Arreglos.
Instrucciones
Hasta ahora sabemos que podemos guardar un valor en una variable, pero si queremos guardar ms de un valor utilizamos varias variables. Este enfoque es til cuando trabajamos con pocos valores, pero cuando queremos definir cientos o miles de valores se vuelve muy poco prctico. Los arreglos son la estructura de datos ms sencilla. Representan un grupo de elementos relacionados que tienen el mismo nombre y el mismo tipo de dato. Para poder acceder a los diferentes valores se utiliza indexacin. Los arreglos son extremadamente tiles en la programacin ya que nos permiten acceder a grandes cantidades de datos de manera sencilla y rpida sin gastar mucha memoria. Su principal desventaja es que una vez que se declara un arreglo no se puede cambiar su tamao. Podemos imaginar un arreglo como un grupo de cajas en las que podemos guardar objetos.

La caracterstica que distingue a los arreglos de las variables normales son los corchetes []. Si en la definicin de la variable se incluyen corchetes quiere decir que esta variable es un arreglo. Para crear un arreglo en Java utilizamos la siguiente sintaxis: tipo nombre[]; Donde tipo es un tipo de dato, nombre es el nombre de la variable (con el que nos vamos a referir al arreglo) y los corchetes indican que es un arreglo.

Cmo crearlo
Una vez que creamos el arreglo debemos iniciarlo a un cierto tamao (que es fijo) utilizando la siguiente sintaxis: nombre = new tipo[tamao]; Podemos hacer la declaracin e inicializacin en una sola lnea. Por ejemplo:

78 PROGRAMACION ORIENTADA A OBJETOS

UNIDADES TECNOLOGICAS DE SANTANDER INGENIERIA DE TELECOMUNICACIONES

Cmo leerlo
Para obtener los valores del arreglo debemos utilizar un ndice. El ndice debe ir entre corchetes [ ] y debe ser un valor numrico entero (un int). Debemos recordar que el ndice de los arreglos siempre empieza de cero, por lo que la primera posicin del arreglo siempre tiene el ndice 0 y la ltima tiene el ndice n 1 donde n es el nmero de elementos del arreglo.

Como cambiarlo
Para agregar un valor tambin debemos utilizar un ndice de manera similar a la lectura.

Como cada posicin del arreglo es un objeto del mismo tipo entonces podemos utilizar sus mtodos directamente mediante el ndice:

79 PROGRAMACION ORIENTADA A OBJETOS

UNIDADES TECNOLOGICAS DE SANTANDER INGENIERIA DE TELECOMUNICACIONES

Cmo recorrerlo
Para recorrer un arreglo hay dos detalles importantes que debemos tener en cuenta. Ya dijimos que podemos leer (o escribir) un arreglo mediante un ndice, por lo que para poder recorrerlo tendramos que tener un ndice que cambiara de valor desde cero hasta el largo del arreglo menos uno (recuerda que el ndice empieza de cero). Qu instruccin nos permite hacer esto? Adems tenemos otro problema cmo obtener el largo del arreglo para poderlo recorrer? Para resolver el primer problema podemos utilizar un ciclo. Regularmente utilizamos un ciclo for porque ya tiene un ndice. Tambin es muy sencillo resolver el segundo problema porque todos los arreglos tienen una propiedad llamada length (fjate que no es mtodo porque no tiene parntesis). Entonces para recorrer un arreglo debemos utilizar un ciclo que vaya desde cero hasta el largo del arreglo menos uno de la siguiente manera:

Puedo utilizar el ndice para cosas un poco ms complicadas como iniciar el arreglo.

Esto puedo extenderlo a varias otras secuencias como por ejemplo los nmeros pares.

80 PROGRAMACION ORIENTADA A OBJETOS

UNIDADES TECNOLOGICAS DE SANTANDER INGENIERIA DE TELECOMUNICACIONES

Una vez que hemos puesto valores a nuestro arreglo podemos utilizar otro ciclo que recorra todas las localidades para hacer algo con ellas.

Con este tipo de ciclos podemos cambiar los valores o leerlos para todo tipo de algoritmos.

Actividad Individual
Crea un arreglo llamado scores con seis localidades de nmeros enteros que representa las calificaciones de un alumno. Pon los valores de las calificaciones del alumno (recuerda utilizar el ndice 0 para la primera y el ndice 5 para la ltima calificacin). Ahora recorre el arreglo para obtener la suma de todas las calificaciones. Divide la suma entre 6 (el nmero de materias) para obtener el promedio. Usos El principal uso de los arreglos es guardar una coleccin de informacin, por ejemplo, todos los pedidos de la tienda, todos los nombres de los clientes, todos los productos que se venden. Java utiliza arreglos para implementar la clase String y en algunos lenguajes (como C o C++) no se incluye una librera especial como String que oculte la complejidad y se utilizan arreglos de char para representar texto. Se pueden utilizar arreglos para representar estructuras como rboles o grafos (por ejemplo, un mapa de carreteras).

81 PROGRAMACION ORIENTADA A OBJETOS

UNIDADES TECNOLOGICAS DE SANTANDER INGENIERIA DE TELECOMUNICACIONES Matrices


En la presentacin pasada vimos los arreglos, que son una relacin entre un nombre y un conjunto de valores. 0 Valores 38 1 98 2 83 3 3 4 03 5 87 6 78 7 20 8 15

Tambin podemos utilizar matrices para relacionar un nombre con un conjunto de valores, la nica diferencia es que las matrices pueden ser de dos o ms dimensiones. Por esta razn, para poder hacer referencia a una localidad de la matriz necesitamos dos nmeros, el nmero de fila y el nmero de columna. De la misma manera que los arreglos empiezan en el ndice cero, los ndices para la fila y la columna de una matriz tambin empiezan en cero. ndices 0 1 2 0 12 87 21 1 46 67 30 2 35 43 24

Declarar una matriz es muy similar a declarar un arreglo, lo nico es que debemos de utilizar dos o ms pares de corchetes (dependiendo del nmero de dimensiones que querramos).

Cmo crearlas
La sintaxis para declarar una matriz es: tipo nombre[][]; Donde tipo es el tipo de dato, nombre es el nombre con el que nos vamos a referir a la matriz y los dos pares de corchetes nos indican que es una matriz de dos dimensiones (como la tabla de la diapositiva anterior). Al igual que los arreglos debemos iniciar las matrices a un tamao fijo despus de declararlas: nombre = new tipo[filas][columnas]; Y tambin podemos hacer la declaracin e inicializacin en una sola lnea. Para poder acceder a los valores de una matriz utilizamos tantos corchetes como dimensiones tenga el arreglo. ndices 0 1 2 0 12 87 21 1 46 67 30 2 35 43 24

En el ejemplo anterior podemos obtener el valor que est en la fila 1 y en la columna 2 con la siguiente instruccin: int valor = nombre[1][2]; // valor=43

82 PROGRAMACION ORIENTADA A OBJETOS

UNIDADES TECNOLOGICAS DE SANTANDER INGENIERIA DE TELECOMUNICACIONES Cmo leerlo


Como pudimos ver en el ejemplo anterior tambin el acceso se hace comenzando en el ndice cero, igual que en los arreglos. De esta manera la primera localidad del arreglo de la diapositiva anterior la accederamos con: int valor = nombre[0][0]; // valor=12 Y a la ltima localidad accederamos con: int valor = nombre[2][2]; // valor=24 Para asignar un valor tambin se utilizan los dos ndices de manera similar a lo que haramos con un arreglo. Cmo cambiarlo Para poder cambiar el valor de una posicin de la matriz debemos utilizar la siguiente sintaxis: nombre[fila][columna] = valor; ndices 0 1 2 0 12 87 21 1 46 67 30 2 35 43 24

Por ejemplo, para cambiar el valor que esta en la fila 1 en la columna 0 debemos utilizar la siguiente instruccin: nombre[1][0] = 17;

Actividad Individual
Cmo queda la matriz despus de ejecutar la siguiente secuencia de instrucciones.

Ciclos Anidados
De la misma manera en que un solo for es la instruccin que acompaa a los arreglos podemos imaginar que la estructura que va a acompaar a las matrices van a ser los ciclos anidados. Por ejemplo, para recorrer una matriz de dos dimensiones debemos utilizar dos ciclos anidados.

Esta estructura de ciclos anidados nos permite recorrer todas las celdas de una matriz. El primer ciclo va a recorrer todas las filas y por cada una de las filas el ciclo interior va a recorrer todas las columnas. 83 PROGRAMACION ORIENTADA A OBJETOS

UNIDADES TECNOLOGICAS DE SANTANDER INGENIERIA DE TELECOMUNICACIONES

Cmo nos arreglamos?


Instrucciones Paso 1:
Crea un nuevo programa de Java que tenga una ventana llamada MainFrame. Recuerda agregar la lnea setVisible(true) en el constructor de la ventana y llamar el constructor desde el mtodo main(). En esta ventana agrega cinco JButton y un JTextField como se ve en la siguiente imagen:

Lo primero que debemos hacer es crear un arreglo que tenga alcance global en toda la clase, para hacer esto debemos declararlo debajo de la lnea en que declaramos la clase de la siguiente manera:

Una vez que ya declaramos un arreglo que podemos utilizar en toda la clase vamos a implementar los mtodos de arreglos de este laboratorio. El primer mtodo que vamos a crear es un mtodo que imprima un arreglo. Este mtodo nos va a devolver una representacin en String del arreglo que pasamos como parmetro. Para lograr esto debemos recorrer todas las posiciones del arreglo e ir guardando los valores en un String, que es el que vamos a devolver. El mtodo puede ser similar al siguiente:

Una vez que tenemos este mtodo vamos a empezar a codificar los botones, el primer botn debe de iniciar el arreglo con diez posiciones y despus poner valores aleatorios entre cero y cien en cada una de las posiciones del arreglo. Para hacer esto vamos a utilizar la clase Random de Java que nos permite obtener nmeros aleatorios y vamos a recorrer el arreglo poniendo un nmero aleatorio en cada posicin. Para hacer esto puedes utilizar un cdigo similar al siguiente:

84 PROGRAMACION ORIENTADA A OBJETOS

UNIDADES TECNOLOGICAS DE SANTANDER INGENIERIA DE TELECOMUNICACIONES

Paso 2:
Con estos dos mtodos ya podemos crear todos los dems. Para obtener el nmero mayor del arreglo debemos ir revisando casilla por casilla viendo si el nmero que tiene la casilla es ms grande o ms chico que el nmero ms grande que habamos revisado hasta ese entonces. Aqu debemos pensar en un par de cosas. Primero que nada debemos darnos cuenta de que es muy importante el valor con el que iniciamos nuestro mximo del arreglo. Regularmente se utiliza el valor mnimo que se puede encontrar en el arreglo. Por ejemplo, como nuestro arreglo contiene nmeros del cero al cien utilizaramos el cero. Esto se hace para que garanticemos que cualquier nmero que est en el arreglo es mayor o igual que el nmero actual. Despus debemos tomar en cuenta que debemos realizar una comparacin para ver si el nmero del arreglo es mayor que el que habamos guardado como mximo del arreglo (como se ve en la animacin). Esto en cdigo podemos verlo de la siguiente manera:

Por analoga implementa el mtodo para encontrar el menor del arreglo.

Paso 3:
Ahora vamos a crear un nuevo mtodo que nos permita obtener la suma de todas las posiciones del arreglo. De la misma manera que hemos hecho hasta ahora vamos a recorrer el arreglo sumando todos los valores que estn guardados y vamos a imprimir ese nmero. Esto podemos lograrlo de la siguiente manera:

85 PROGRAMACION ORIENTADA A OBJETOS

UNIDADES TECNOLOGICAS DE SANTANDER INGENIERIA DE TELECOMUNICACIONES

Para obtener el promedio de un arreglo debes obtener la suma de todos los valores del arreglo y despus debes dividirlo entre el nmero de elementos que tiene el arreglo. Recuerda que existen mtodos que te permiten saber el tamao de un arreglo. Utilizando estos conocimientos y por analoga implementa el mtodo que imprime el promedio de todos los elementos del arreglo. Recuerda que la divisin de enteros trunca el resultado y no tiene decimales, por lo que vas a necesitar hacer un cast a double antes de poder realizar la divisin. Comprime tu carpeta de trabajo y mndala por correo.

Tarea: Funciones con arreglos


Instrucciones Paso 1:
Crea un programa en Java que tenga una ventana MainFrame similar a la que utilizamos en el laboratorio de arreglos en la cual hayan cuatro JButton y un JTextField. Los botones debern realizar las siguientes operaciones: Iniciar el arreglo con veinte valores aleatorios y mostrarlo en el JTextField Contar el nmero de valores impares dentro del arreglo y desplegarlo. Por ejemplo, en el arreglo [1, 5, 3, 2, 4] deber mostrar "Hay 3 valores impares en el arreglo". Obtener la suma de los valores pares del arreglo y desplegarla. Por ejemplo, en el arreglo [1, 5, 3, 2, 4] deber mostrar "La suma de los valores pares es: 6". Mostrar dos dialogos de input en los que se pregunten dos valores numricos X y Y. Despus deber sustituir todos los valores del arreglo que sean iguales a X por Y. Es decir, si el arreglo es [1, 5, 3, 2, 4], X es igual a 5 y Y es igual a 7 deber mostrar: "1 7 3 2 4". Para mostrar un dialogo de input puedes utilizar el siguiente cdigo:

Comprime tu carpeta de trabajo y mndala por correo.

86 PROGRAMACION ORIENTADA A OBJETOS

UNIDADES TECNOLOGICAS DE SANTANDER INGENIERIA DE TELECOMUNICACIONES

Welcome to the Matrix


Instrucciones
Paso 1:

Descarga el esqueleto de la aplicacin. Abre el proyecto en NetBeans, complalo y crrelo para verificar que todo funcione correctametne. Deber aparecer una pantalla similar a la siguiente:

La ventana cuenta con un JPanel que tiene varios JTextField, estos JTextField estn configurados para actualizar automaticamente una matriz que se llama matrix y est declarada como variable global, con esta matriz es con la que vamos a trabajar todo el resto del proyecto. Ahora haz click derecho sobre el botn suma y despus actions -> actionPerformed para ir al cdigo de la suma. Para poder obtener la suma de una matriz debemos de ir avanzando por todas las posiciones del arreglo, esto podemos lograrlo con dos ciclos for de la siguiente manera:

En el cdigo anterior hay una cosa interesante que es preciso entender para poder saber cmo funcionan las matrices. En el segundo for podemos ver la instruccin matrix[i].length que quiere decir que obtenga el largo del arreglo en la posicin i de la matriz. Como cada una de las posiciones del arreglo contienen arreglos utilizamos el for de afuera para recorrer el arreglo principal y con el for de adentro recorremos los arreglos que estn contenidos dentro. Esto quiere decir que podemos tratar matrix[0] como si fuera un arreglo normal, por ejemplo, para mandarlo como parmetro de una funcin, tambin quiere decir que los arreglos no necesariamente son rectangulares sino que pueden tener diferente nmero de columnas en cada fila. Como puedes ver recorrer matrices es muy similar a recorrer arreglos la principal diferencia es que utilizamos dos ciclos for para recorrer el arreglo de afuera y el arreglo de adentro. Si tuvieramos una matriz de tres dimensiones querra decir que tenemos un arreglo que contiene arreglos que contienen arreglos, por lo que tendramos que utilizar tres ciclos para recorrerlos.
87 PROGRAMACION ORIENTADA A OBJETOS

UNIDADES TECNOLOGICAS DE SANTANDER INGENIERIA DE TELECOMUNICACIONES


Ahora vamos a crear el mtodo que obtiene el valor absoluto. El valor absoluto de un nmero es el valor numrico de un nmero sin tomar en cuenta su signo. Y est definido como la siguiente funcin:

Tomando esto en cuenta podemos recorrer toda la matriz y si el nmero en la posicin i,j es menor que cero entonces le cambiamos el signo de la siguiente manera:

Al final mandamos llamar printMatrix() que va a poner los valores nuevos de la matriz en los JTextField que se muestran en la interfaz grfica. Por analoga con el ejercicio de la suma de matrices y los valores absolutos, as como los ejercicios de arreglos contesta los dems ejercicios del laboratorio.
Comprime tu carpeta de trabajo y mndala por correo.

88 PROGRAMACION ORIENTADA A OBJETOS

UNIDADES TECNOLOGICAS DE SANTANDER INGENIERIA DE TELECOMUNICACIONES

Prctica Practica 0. Cmo mandar un proyecto. Prctica 1. Java IDE NetBeans. Prctica 2. Programacin con Variables Prctica 3. If y Switch Prctica 4. Ciclos Prctica 5. Programacin Modular. Prctica 6. Ejercicios varios. Prctica 7. Arreglos

Pg. 1 2-14 15-27 28-37 38-47 48-69 70-77 78-88

89 PROGRAMACION ORIENTADA A OBJETOS