JAVA2: Segunda Lección

Post on 03-Jul-2015

1,819 views 2 download

transcript

Clases y Objetos

Pequeño Repaso

Clase

Una clase es una plantilla o molde para la creación de un tipo de objetos.

Define los atributos y métodos con los que contarán todos los objetos de esta clase.

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

Clase: Pelota

Atributos:

Color

Material: plástico, tela, cuero

Métodos:

Pelota()

Pelota(color)

dePlastico()

deTela()

deCuero()

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;

String[] materialesPermitidos = {“plastico”,”tela”,”cuero”};//define un arreglo

Arreglo materialesPermitidos

materialesPermitidos

0

1

2

plastico

tela

cuero

Índice del arreglo

Para acceder al contenido

del arreglo se utiliza lasintaxis:

nombreArreglo[indice]Por ejemplo para

recuperarel valor plástico:

materialesPermitidos[0]

Métodos Clase Pelota

Pelota(): constructor sin parámetros

Pelota(color): constructor – sobrecargado – que recibe un parámetro, correspondiente al color de la pelota que se está creando (instanciando)

dePlastico(): método que define material = plastico

deTela(): método que define material = tela

deCuero(): método que define material = cuero

Clase Pelota (Pelota.java)

class Pelota{

String color;

String material;

//Arreglo de Strings que define los materiales permitidos

String[] materialesPermitidos = {"plastico","tela","cuer

/*

* modifica el material de una pelota conviertiendolo en plastico

*/

void dePlastico(){

material = materialesPermitidos[0];

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

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

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

Asimismo en la clase Fábrica debemos hacer uso del nuevo método definido para imprimir las características de cada producto

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

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]);

Aplicación Curso

Clases Kiosko y Departamento

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

Departamento.java

class Departamento{

String nombre;

//constructor

Departamento(){

nombre = "Sin Nombre";

}

/*

* este metodo permite cambiar el nombre

* de un departamento previamente creado

* se habla de cambiar en lugar de definir

Clase Kiosko

La clase Kiosko contará con un método que servirá como punto de entrada de la aplicación

Dentro de este método serán creados 5 Departamentos diferentes con los siguientes nombres: Hogar, Belleza, Entretenimiento, Libros, Jardín

El método presentará la información al usuario dándole la bienvenida al almacen por Departamentos

Kiosko.java

class Kiosko{

/*

* Este metodo sera el punto de entrada de la

* aplicacion

*/

public static void main(String[] args){

Departamento depto1 = new Departamento(nombresDepartamentos[0]);

Departamento depto2 = new Departamento(nombresDepartamentos[1]);

Departamento depto3 = new Departamento(nombr

Control de Flujo

Definiendo el curso a seguir dentro de la aplicación

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

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){

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 pruebaparámetro

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.

length es un atributo de los arreglos que se utiliza para determinar su tamaño

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.

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){

true

false

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

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){

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.

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

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

Para poder usar este método es necesario declarar una excepción

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

/*

* numeroIngresado contiene un valor ASCII

* que debe modificarse antes de poderse

* usar

*/

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: ");

Kiosko.java – modificaciones solicitadas

//modificaciones requeridas para implementar el ejercicio

// de la diapositiva 28

int asciiValue; //recuerde que el valor es el codigo ASCII

if(asciiValue == 52){

System.out.println("Departamento: "+depto4.recuperarNombre());

}

if(asciiValue == 53){

Loops

Multiples iteraciones

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

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{

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

Kiosko.java

Departamento depto1 = new Departamento(nombresDepartamentos[0]);

Departamento depto2 = new Departamento(nombresDepartamentos[1]);

Departamento depto3 = new Departamento(nombr

//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

Kiosko.java

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+" -

for(int i=0;i<nombresDepartamentos.length;i++){

System.out.println(++aux+" - "+depto[i].recuperarNombre());

}

ANTES DESPUES

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

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

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("While - paso "+aux);

Simple5.java - ejecución

Java Simple5 22While - paso 1

While - paso 2

Do..While - paso 1

Do..While - paso 2

Java Simple5 00Do..While - paso 1

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

Sugerencia: boolean + while

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();

}