Your SlideShare is downloading. ×

JAVA2: Segunda Lección

1,801

Published on

Published in: Education
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
1,801
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
58
Comments
0
Likes
1
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Clases y Objetos Pequeño Repaso
  • 2. Clase
    • Una clase es una plantilla o molde para la creación de un tipo de objetos.
    • 3. Define los atributos y métodos con los que contarán todos los objetos de esta clase.
    • 4. Pensemos en la clase pelota. Qué es una pelota? Una pelota es un objeto circular que tiene color y que dependiendo del material en que se elabore puede rebotar o no
  • 5. Clase: Pelota
    • Atributos:
      • Color
      • 6. Material: plástico, tela, cuero
  • 11. Atributos Clase Pelota
    • Color: una cadena de texto que almacene el nombre del color de la pelota
      • String color;
    • Material: una cadena de texto que almacena el material del que está hecha la pelota, pero que sólo puede tomar/tener tres valores : plástico, tela, cuero
      • String material;
      • 12. String[] materialesPermitidos = {“plastico”,”tela”,”cuero”};//define un arreglo
  • 13. Arreglo materialesPermitidos materialesPermitidos 0 1 2 plastico tela cuero Índice del arreglo Para acceder al contenido del arreglo se utiliza la sintaxis: nombreArreglo[indice] Por ejemplo para recuperar el valor plástico: materialesPermitidos[0]
  • 14. Métodos Clase Pelota
    • Pelota(): constructor sin parámetros
    • 15. Pelota(color): constructor – sobrecargado – que recibe un parámetro, correspondiente al color de la pelota que se está creando (instanciando)
    • 16. dePlastico(): método que define material = plastico
    • 17. deTela(): método que define material = tela
    • 18. deCuero(): método que define material = cuero
  • 19. Clase Pelota (Pelota.java) class Pelota{ String color; String material; //Arreglo de Strings que define los materiales permitidos String[] materialesPermitidos = {"plastico","tela","cuero"}; /* * Constructor */ Pelota(){ color = "Blanco";//por defecto las pelotas se crean Blancas material = materialesPermitidos[0];//por defecto se crean de plastico } /* * Constructor sobrecargado: permite definir el color * deseado al momento de la construcción de la pelota */ Pelota(String colorDeseado){ color = colorDeseado;//por defecto las pelotas se crean Blancas material = materialesPermitidos[0];//por defectos se crean de plastico } /* * modifica el material de una pelota conviertiendolo en plastico */ void dePlastico(){ material = materialesPermitidos[0]; } /* * modifica el material de una pelota conviertiendolo en tela */ void deTela(){ material = materialesPermitidos[1]; } /* * modifica el material de una pelota conviertiendolo en cuero */ void deCuero(){ material = materialesPermitidos[2]; } }
  • 20. Clase Fabrica
    • La clase Fábrica representa una fábrica de pelotas, cuenta únicamente con un método estático main que permite su ejecución directa
  • 21. Clase Fábrica (Fabrica.java) /* * Clase Fabrica: * hara uso de la clase Pelota * para fabricar las pelotas */ class Fabrica{ public static void main(String[] args){ //fabricacion de una pelota blanca de plastico Pelota producto1 = new Pelota(); //fabricacion de una pelota amarilla de plastico Pelota producto2 = new Pelota("Amarillo"); //modificacion de la primera pelota para que sea de cuero producto1.deCuero(); //modificacion de la segunda pelota para que sea de tela producto2.deTela(); //notificacion al usuario final System.out.println("Se han fabricado - instanciado - dos pelotas diferentes"); } }
  • 22. Revisando las Pelotas instanciadas
    • Para poder revisar las pelotas instanciadas es necesario definir un nuevo método en la clase Pelota que permita consultar el color y material de las mismas
    • 23. Asimismo en la clase Fábrica debemos hacer uso del nuevo método definido para imprimir las características de cada producto
  • 24. Método mostrarCaracteristicas (Pelota.java) /* * permite visualizar el material y el color de * una pelota */ String[] mostrarCaracteristicas(){ String[] caracteristicas;//se define un arreglo caracteristicas = new String[2];//el arreglo tendra dos posiciones caracteristicas[0] = color;//en la posicion 0 tendra el color caracteristicas[1] = material;//en la posicion 1 tendra el material return caracteristicas; }
  • 25. Consultando los productos (Fabrica.java) //detalle de las pelotas fabricadas System.out.println("Pelota 1"); System.out.println("Color: "+producto1. mostrarCaracteristicas()[0] ); System.out.println("Material: "+producto1. mostrarCaracteristicas()[1] ); System.out.println("Pelota 2"); System.out.println("Color: "+producto2.mostrarCaracteristicas()[0]); System.out.println("Material: "+producto2.mostrarCaracteristicas()[1]);
  • 26. Aplicación Curso Clases Kiosko y Departamento
  • 27. Clase Departamento
    • La clase Departamento cuenta con un atributo tipo String para el nombre y con los métodos requeridos para modificar y recuperar el nombre. Asimismo cuenta con un constructor
  • 28. Departamento.java class Departamento{ String nombre; //constructor Departamento(){ nombre = "Sin Nombre"; } /* * constructor sobrecargado: * esta nueva version del constructor permitira * fijar el nombre de un departamento tan pronto * como se crea */ Departamento(String auxNombre){ nombre = auxNombre; } /* * este metodo permite cambiar el nombre * de un departamento previamente creado * se habla de cambiar en lugar de definir * pues en el peor de los casos un departamento * se llama Sin Nombre - que ya es en si un nombre - */ void cambiarNombre(String nuevoNombre){ nombre = nuevoNombre; } /* * este metodo permite recuperar el nombre * de un departamento creado previamente */ String recuperarNombre(){ return nombre; } }
  • 29. Clase Kiosko
    • La clase Kiosko contará con un método que servirá como punto de entrada de la aplicación
    • 30. Dentro de este método serán creados 5 Departamentos diferentes con los siguientes nombres: Hogar, Belleza, Entretenimiento, Libros, Jardín
    • 31. El método presentará la información al usuario dándole la bienvenida al almacen por Departamentos
  • 32. Kiosko.java class Kiosko{ /* * Este metodo sera el punto de entrada de la * aplicacion */ public static void main(String[] args){ /* * arreglo de Strings con los nombres de los * departamentos */ String[] nombresDepartamentos = {"Hogar","Belleza","Entretenimiento", "Libros","Jardin"};//1 statement puede escribirse en varias lineas // String auxiliar de bienvenida al usuario String saludo = "Bienvenido a Nuestra Tienda de Departamentos"; // variable tipo int auxiliar para el listado int aux = 0; /* * creacion de los 5 Departamentos usando el constructor * sobrecargado */ Departamento depto1 = new Departamento(nombresDepartamentos[0]); Departamento depto2 = new Departamento(nombresDepartamentos[1]); Departamento depto3 = new Departamento(nombresDepartamentos[2]); Departamento depto4 = new Departamento(nombresDepartamentos[3]); Departamento depto5 = new Departamento(nombresDepartamentos[4]); /* * Mensaje de bienvenida al usuario, indicacion del numero de * departamentos existentes y listado de los mismos */ System.out.println(saludo); System.out.println("Contamos con los siguientes (" +nombresDepartamentos.length+") Departamentos:"); System.out.println(++aux+" - "+depto1.recuperarNombre()); System.out.println(++aux+" - "+depto2.recuperarNombre()); System.out.println(++aux+" - "+depto3.recuperarNombre()); System.out.println(++aux+" - "+depto4.recuperarNombre()); System.out.println(++aux+" - "+depto5.recuperarNombre()); } }
  • 33. Control de Flujo Definiendo el curso a seguir dentro de la aplicación
  • 34. If
    • If es el primer mecanismo de control de flujo que puede usarse en Java. Evalúa una condición lógica y si el resultado es verdadero (true) realiza el conjunto de instrucciones (statements) que se hayan definido. En caso de que el resultado de la evaluación sea falso (false) no se realiza ninguna de las instrucciones contenidas en el If y el programa continúa luego del } que define el final del mismo
  • 35. Simple1.java - Ejemplo class Simple1{ /* * entry point de la clase Simple1. En esta * ocasion se empleara el arreglo de parametros * de entrada */ public static void main(String[] args){ if( args.length == 0 ){ System.out.println("Usted no paso ningun parametro a la aplicacion Simple1"); } System.out.println("Fin de la primera prueba"); } }
  • 36. Simple1.java - Ejemplo
    • Al invocar esta aplicación sin parámetros se observa la siguiente salida:
    java Simple1 Usted no paso ningun paramentro a la aplicacion Simple1 Fin de la primera prueba
    • En caso de invocar la aplicación pasando parámetros la salida cambia por la siguiente:
    java Simple1 param1 Fin de la primera prueba parámetro
  • 37. Simple1.java - Explicación
    • La condición a evaluar en esta aplicación de ejemplo tiene que ver con el tamaño del arreglo que almacena los argumentos de entrada: String[] args, en caso de que la aplicacion se invoque sin argumentos (args.length == 0) se ejecuta la instrucción de impresión que se encuentra definida dentro de los {} del If, en caso contrario sólo se imprime la segunda línea.
    • 38. length es un atributo de los arreglos que se utiliza para determinar su tamaño
  • 39. If - Else
    • La instrucción If – Else permite definir condiciones tanto para el caso en el que la expresión evaluada sea verdadera, como para cuando sea falsa.
  • 40. Simple2.java class Simple2{ /* * entry point de la clase Simple1. En esta * ocasion se empleara el arreglo de parametros * de entrada */ public static void main(String[] args){ if(args.length == 0){ System.out.println("Usted no paso ningun parametro a la aplicacion Simple2"); }else{ System.out.println("Usted paso "+args.length+" parametro(s) a la aplicacion Simple2"); } System.out.println("Fin de la segunda prueba"); } } true false
  • 41. If anidados
    • De la misma forma que en la vida real la toma de desiciones implica la ejecución de varios pasos, en programación – en JAVA – es posible anidar If para condicionar el flujo de un programa de forma compleja
  • 42. Simple3.java class Simple3{ /* * entry point de la clase Simple1. En esta * ocasion se empleara el arreglo de parametros * de entrada */ public static void main(String[] args){ if(args.length == 0){ System.out.println("Usted no paso ningun parametro a la aplicacion Simple3"); }else{ if(args.length > 1){ System.out.println("Usted paso mas de 1 parametro a la aplicacion Simple3"); }else{ System.out.println("Usted paso exactamente 1 parametro a la aplicacion Simple3"); } } System.out.println("Fin de la segunda prueba"); } }
  • 43. De vuelta al Almacén Ahora que los diferentes departamentos del almacén han sido codificados, su jefe desea la siguiente funcionalidad:
    • La aplicación deberá responder a una entrada numérica del usuario y presentar el Departamento correspondiente, por ejemplo si el usuario ingresa el número 1 el programa presentará el mensaje: Departamento: Hogar.
    • 44. La aplicación deberá contar con un mensaje de ayuda que aparezca cuando el usuario ingrese el caracter ?, dicho mensaje será: Para acceder a la información del departamento ingrese un número entre 1 y 5 y presione ENTER.
    • 45. La aplicación deberá presentar un mensaje de error si el usuario ingresa cualquier otro valor.
  • 46. Cómo leer datos del usuario?
    • Para capturar un byte (caracter) del usuario en medio de la ejecución de un programa se emplea el método: System.in.read() y se asigna su valor de retorno a una variable del tipo deseado: int / char
    • 47. Para poder usar este método es necesario declarar una excepción
  • 48. ReadMe.java – leer un int import java.io.IOException; //requerida para el manejo de excepciones class ReadMe{ public static void main(String[] args){ //variable auxiliar para almacenar un int int numeroIngresado; System.out.println("Ingrese un numero: "); try{ numeroIngresado = (int)System.in.read(); /* * numeroIngresado contiene un valor ASCII * que debe modificarse antes de poderse * usar */ System.out.println(numeroIngresado - '0');//para convertir del valor ASCII al int } catch (IOException e){ System.out.println("No se puede leer el dato"); } }//main method }//ReadMe Class
  • 49. ReadMe2.java – leer un char import java.io.IOException;//requerida para el manejo de excepciones class ReadMe2{ public static void main(String[] args){ //variable auxiliar para almacenar un char char caracterIngresado; System.out.println("Ingrese un caracter: "); try{ caracterIngresado = (char)System.in.read(); System.out.println(caracterIngresado); } catch (IOException e){ System.out.println("No se puede leer el dato"); } } }
  • 50. Kiosko.java – modificaciones solicitadas //modificaciones requeridas para implementar el ejercicio // de la diapositiva 28 int asciiValue; //recuerde que el valor es el codigo ASCII System.out.println(&quot;Ingrese el numero del departamento de su interes o ? para mas informacion&quot;); try{ asciiValue = System.in.read(); /* * Los valores de la tabla ASCII para los numeros 1 al 5 son * 49,50,51,52,53 * El valor del simbolo ? es: 63 */ if(asciiValue >= 49 & asciiValue <= 53){ //se trata de un departamento valido y se presenta la informacion if(asciiValue == 49){ System.out.println(&quot;Departamento: &quot;+depto1.recuperarNombre()); } if(asciiValue == 50){ System.out.println(&quot;Departamento: &quot;+depto2.recuperarNombre()); } if(asciiValue == 51){ System.out.println(&quot;Departamento: &quot;+depto3.recuperarNombre()); } if(asciiValue == 52){ System.out.println(&quot;Departamento: &quot;+depto4.recuperarNombre()); } if(asciiValue == 53){ System.out.println(&quot;Departamento: &quot;+depto5.recuperarNombre()); } } if(asciiValue == 63){ System.out.println(&quot;Para acceder a la informacion del departamento ingrese un numero entre 1 y 5 y presione ENTER&quot;); } /* * si en este punto la variable isValid es false quiere decir que * el usuario ingreso un dato invalido */ if((asciiValue>=0 & asciiValue<49)|(asciiValue>53 & asciiValue<63)|asciiValue>63){ System.out.println(&quot;Opcion Invalida&quot;); } } catch(IOException e){ System.out.println(&quot;Se produjo un error al intentar leer su informacion&quot;); }
  • 51. Loops Multiples iteraciones
  • 52. For Loop
    • Se trata de una clase de Loop que realiza una instrucción (statement) o conjunto de instrucciones hasta el momento en que la evaluación de una condición booleana cambia
  • 53. Simple4.java – For Loop import java.io.IOException;//requerida para el manejo de excepciones class Simple4{ public static void main(String[] args){ //el primer parametro ingresado por el usuario //es el limite hasta el que se ejecuta el ciclo For try{ for(int i=0;i< Integer.parseInt(args[0]); i++){ System.out.println(i); } } catch( ArrayIndexOutOfBoundsException e){ System.out.println(&quot;No es posible iterar ese numero de veces&quot;); } } }
  • 54. De vuelta al Almacén
    • Ahora que usted ha aprendido a definir ciclos For modifique el código de la clase Kiosko para asignar los nombres de los departamentos de una forma más eficiente
  • 55. Kiosko.java Departamento depto1 = new Departamento(nombresDepartamentos[0]); Departamento depto2 = new Departamento(nombresDepartamentos[1]); Departamento depto3 = new Departamento(nombresDepartamentos[2]); Departamento depto4 = new Departamento(nombresDepartamentos[3]); Departamento depto5 = new Departamento(nombresDepartamentos[4]); //el cambio que sigue requiere un arreglo de departamentos para //su implementacion Departamento[] depto = new Departamento[nombresDepartamentos.length]; for(int i=0;i<nombresDepartamentos.length;i++){ depto[i] = new Departamento(nombresDepartamentos[i]); } ANTES DESPUES
  • 56. Kiosko.java System.out.println(saludo); System.out.println(&quot;Contamos con los siguientes (&quot; +nombresDepartamentos.length+&quot;) Departamentos:&quot;); System.out.println(++aux+&quot; - &quot;+depto1.recuperarNombre()); System.out.println(++aux+&quot; - &quot;+depto2.recuperarNombre()); System.out.println(++aux+&quot; - &quot;+depto3.recuperarNombre()); System.out.println(++aux+&quot; - &quot;+depto4.recuperarNombre()); System.out.println(++aux+&quot; - &quot;+depto5.recuperarNombre()); for(int i=0;i<nombresDepartamentos.length;i++){ System.out.println(++aux+&quot; - &quot;+depto[i].recuperarNombre()); } ANTES DESPUES
  • 57. While y Do... While Loops
    • El Loop While es similar al For, las instrucciones que contiene se ejecutan hasta el momento en que una condición booleana cambia su valor, su diferencia radica en que no requiere un contador
    • 58. El Loop Do..While es muy similar al While, pero la diferencia entre los dos reside en que en éste último las instrucciones contenidas siempre se ejecutan al menos una vez
  • 59. Simple5.java – While vs Do..While class Simple5{ public static void main(String[] args){ int aux = 1; /* * esta es la diferencia entre while y do while */ while(aux<=Integer.parseInt(args[0])){ System.out.println(&quot;While - paso &quot;+aux); aux++; } aux = 1; do{ System.out.println(&quot;Do..While - paso &quot;+aux); aux++; }while(aux<=Integer.parseInt(args[0])); } }
  • 60. Simple5.java - ejecución
    • Java Simple5 2
    While - paso 1 While - paso 2 Do..While - paso 1 Do..While - paso 2
    • Java Simple5 0
    Do..While - paso 1
  • 61. Nuestro Jefe... de nuevo
    • Luego de realizar una investigación de mercadeo nuestro Jefe ha decidido que el programa del Almacen debe continuar solicitando un valor de entrada cuando el usuario ingrese un valor incorrecto. Es decir ahora aparte del mensaje de Opción incorrecta, el usuario verá de nuevo el mensaje que le solicita un valor entre 1 y 5 y podrá realizar un segundo intento
    • 62. Sugerencia: boolean + while
  • 63. El ENTER es un caracter
    • Notó cómo al resolver el ejercicio anterior apareció un problema de doble línea?
    while( System.in.available()>0 ){ System.in.read(); }

×