Академический Документы
Профессиональный Документы
Культура Документы
Presentacin.
IDE: Eclipse.
Clases e interfaces.
Generalidades de JAVA.
Presentacin
Qu es JAVA?
Lenguaje de programacin independiente de la plataforma, orientado a objetos
y que utiliza una mquina virtual para ejecutar el cdigo compilado.
Se provee una especificacin abierta, utilizada por diversos proveedores para
implementar su propia mquina virtual.
www.belatrixsf.com |
Presentacin
Proveedores de JVM
Oficial, de Oracle
Open JDK (oficial, pero abierta y de cdigo libre)
Apache Harmony (de Apache, abierta y de cdigo libre
Muchas otras (http://en.wikipedia.org/wiki/List_of_Java_virtual_machines)
www.belatrixsf.com |
Presentacin
JRE y JDK
El JRE (Java Runtime Environment) es un archivo binario que contiene todo lo
necesario para ejecutar aplicaciones JAVA: una implementacin de la JVM y
bibliotecas para correr cualquier aplicacin JAVA.
El JDK (Java Development Kit) es una archivo binario que contiene una
implementacin de la JVM, bibliotecas para correr cualquier aplicacin y
adems, un conjunto de herramientas necesarias para el desarrollo de
aplicaciones, tal como: compilador, debugger, etc.
Cul es la diferencia entre ambos? JDK = JRE + herramientas de desarrollo.
www.belatrixsf.com |
Presentacin
Plataformas JAVA
JAVA SE (Standard Edition): lo que comnmente se denomina JAVA.
Contiene las bibliotecas bsicas (lang, math, util, etc).
JAVA EE (Enterprise Edition): agrega componentes para facilitar
el desarrollo de aplicaciones grandes, generalmente corriendo
en servidores de aplicaciones: incluye JSP, EJB, Servlets, etc.
JAVA ME (Micro Edition): versin orientada a desarrollo mvil.
www.belatrixsf.com |
Presentacin
www.belatrixsf.com |
Presentacin
Caractersticas de JAVA
Orientado a objetos
De tipos fuertes
Multiplataforma
De especificacin abierta
Case sensitive (diferencia maysculas y minsculas)
www.belatrixsf.com |
Presentacin
Orientacin a objetos
Paradigma de programacin, no est atada a un lenguaje.
Ayuda a entender un problema, concentrndonos en las entidades
(modeladas en forma de objetos) que forman parte del mismo, la
interaccin entre las mismas, sus propiedades y las acciones que
pueden llevar a cabo (o de las que pueden ser parte).
Los objetos son modelados a travs de clases, las que definen un
concepto o abstraccin de una entidad que forma parte del problema.
www.belatrixsf.com |
Presentacin
Presentacin
Multiplataforma
Esto es posible gracias a la existencia de la mquina virtual de JAVA
(JVM). El cdigo fuente no se convierte a cdigo de mquina, sino
a un cdigo intermedio que es interpretado por la JVM.
De esta manera, para poder portar nuestra aplicacin a otra plataforma
solo necesitamos:
Implementacin de la JVM para la plataforma de destino.
Cdigo compilado que ser interpretado por la JVM.
www.belatrixsf.com |
Presentacin
Java JDK
Descarga: http://www.oracle.com/technetwork/es/java/javase/downloads/index.html
Elegir la versin de nuestro SO y tipo de arquitectura (32 o 64 bits).
Agregar a las variables de entorno el PATH a la carpeta bin que se encuentra
en el interior de la carpeta de instalacin de la JDK. Instrucciones especficas
para cada SO: http://www.java.com/es/download/help/path.xml
www.belatrixsf.com |
Tipos primitivos
www.belatrixsf.com |
Clases e interfaces
Clases e interfaces
www.belatrixsf.com |
Clases e interfaces
Clases e interfaces
package ar.com.gestion.principal;
public class Principal {
private String textToPrint;
public String getTextToPrint() {
return textToPrint;
}
Paquete
Atributo
Mtodo
Mtodo main
Instanciacin de objeto
www.belatrixsf.com |
Clases e interfaces
Paquete
Contenedor de clases que permite agrupar funcionalidades similares.
Creacin de un nuevo paquete: Click derecho en src New package.
Se utiliza el . como delimitadores de paquete (paquetes anidados).
Las clases deben tener nombre nico, dentro del paquete. Pueden reutilizarse
los nombres de clase para diferentes paquetes. Los paquetes definen un
espacio de nombres o namespace.
www.belatrixsf.com |
Clases e interfaces
Atributo
Define una caracterstica de la clase.
El nombre del atributo debe ser nico para la clase. No puede contener
espacios, palabras reservadas, valores booleanos, caracteres reservados
para operaciones (+, -, ?...), ni comenzar con un nmero.
www.belatrixsf.com |
Clases e interfaces
Atributo
La sintaxis de definicin es: [Modificadores] Tipo nombreVariable;
private int valor;
www.belatrixsf.com |
Clases e interfaces
Mtodo
Conjunto de operaciones o proceso que produce un resultado, devolviendo el
mismo al finalizar la ejecucin o produciendo un cambio en un objeto.
La combinacin de nombre de mtodo y tipos de parmetros que recibe debe
ser nica dentro de una clase.
Sintaxis de definicin de mtodos: [Modificadores] tipoRetorno nombreMtodo(
TipoParmetro nombreParmetro, TipoParmetro nombreParmetro...) { }
www.belatrixsf.com |
Clases e interfaces
Mtodo
Los mtodos se invocan con la sintaxis: nombreObjeto.miMtodo(parmetros);
Todos los parmetros se pasan por referencia: son referencias a objetos.
los cambios hechos a un objeto en un mtodo sern visibles en el mtodo de
origen tambin.
Se utiliza la sentencia return para hacer que un mtodo devuelva un valor.
Ejemplo:
public float multiplicar(float multiplicando, float multiplicador) {
return multiplicando * multiplicador;
}
www.belatrixsf.com |
Clases e interfaces
Modificador
Modificador de parmetro
Sentencia de retorno
www.belatrixsf.com |
Clases e interfaces
www.belatrixsf.com |
Clases e interfaces
Compilando y ejecutando
Compilacin: javac -d .\ Principal.java
Ejecucin: java ar.com.cursojava.principal.Principal
www.belatrixsf.com |
Actividad
Crear un archivo de texto llamado Principal.java usando Wordpad.
Pegar el siguiente texto en el archivo creado:
package ar.com.gestion.principal;
public class Principal {
public static void main(String[] args) {
System.out.println("Hola mundo");
}
}
Compilar y ejecutar.
www.belatrixsf.com |
Eclipse (IDE)
IDE (Integrated Development Environment) que ofrece mltiples herramientas
y facilidades para el desarrollo JAVA.
Un IDE es solo una herramienta. No es necesario para programar.
Url de descarga: http://www.eclipse.org/downloads/
Instrucciones de instalacin: descargar y descomprimir nada ms.
www.belatrixsf.com |
Workspace
Carpeta de trabajo que contiene
un grupo de proyectos.
Puede cambiarse en
cualquier momento
(File Switch workspace).
www.belatrixsf.com |
Creando un proyecto
File Create project
Java Project Introducir un
Nombre Finish
Podemos tener en el workbench
muchos proyectos, aunque no es
recomendable (overhead).
www.belatrixsf.com |
Actividad
Crear un nuevo proyecto. Crear una clase que contenga un mtodo que
calcule el cuadrado de un nmero.
Agregar el mtodo main. Definir una variable de tipo primitivo int, asignarle
un valor y pasarlo como parmetro al mtodo de clculo de cuadrados.
Imprimir por pantalla el resultado (System.out.println(valor)).
Ejecutar usando Eclipse.
www.belatrixsf.com |
www.belatrixsf.com |
www.belatrixsf.com |
www.belatrixsf.com |
Conversin de valores
JAVA es de tipos fuertes. Significa que no puedo convertir valores entre
diferentes tipos numricos? S se puede, pero debo explicitar que deseo
hacer una conversin de tipos a travs del operador CAST (se encierra el
tipo destino entre parntesis). El siguiente cdigo es vlido:
double doble = 1.5;
int entero = (int) doble;
www.belatrixsf.com |
Actividad
Qu sucede si convertimos de un tipo de datos origen un tipo de datos
destino con una precisin menor? Comprobemos!!!
Crear una clase con un mtodo main, inclur el siguiente cdigo y ejecutar:
public static void main(String[] args) throws Exception {
double doble = 32767;
short corto = (short) doble;
System.out.println(corto);
doble = 32768;
corto = (short) doble;
System.out.println(corto);
}
www.belatrixsf.com |
Clases e interfaces
Qu es un objeto?
Las clases definen un molde, definen las caractersticas y operaciones de una
clase de objeto. Una clase es una abstraccin o generalizacin de un
concepto de la realidad. Es una especificacin de las caractersticas que
tiene algo en particular.
Un objeto es la realizacin de una clase, es una instancia de una clase.
Consiste en una existencia concreta que cumple con las caractersticas y
operaciones del molde (clase).
www.belatrixsf.com |
Clases e interfaces
Qu es un objeto? (ejemplo)
package ar.com.cursojava.principal;
public class
String
String
String
}
Persona {
dni;
nombre;
apellido;
instanciacin
Dni: 30.912.451
Nombre: Martn
Apellido: Venegas
instanciacin
instanciacin
Dni: 15.375.823
Nombre: Marcelo
Apellido: Arzuaga
Dni: 12.111.931
Nombre: Julia
Apellido: Lpez
www.belatrixsf.com |
Clases e interfaces
Creacin de un objeto
Al definir una variable, indicamos al compilador un nombre con el que nos
referimos a una unidad de datos de un tipo determinado.
Una variable de tipo primitiva, al ser definida, tambin reserva en memoria
espacio para ser almacenada. Una variable que referencia un objeto NO.
Definicin de una variable que har referencia a un objeto de tipo
CalculadoraBase:
CalculadoraBase calculadora;
www.belatrixsf.com |
Clases e interfaces
Creacin de un objeto
Al definir una variable para hacer referencia a un objeto de una clase, su
valor inicial es indefinido (null). En este caso, se reserva memoria cuando
se instancia (crea) un objeto de la clase mediante el operador new.
El operador new utiliza el constructor de la clase para instanciar un objeto.
Toda clase tiene un constructor, el cual define las reglas de creacin del
objeto. Si no creamos uno explcitamente, estar disponible el constructor
por defecto (crea objeto sin valor en sus variables).
www.belatrixsf.com |
Clases e interfaces
Creacin de un objeto
Constructor por defecto (sin
parmetros ni lgica, se crea objeto
sin inicializar). Puede obviarse
Constructor con parmetros. Permite
inicializar el objeto. Agregar un
constructor con parmetros quita
el constructor por defecto.
www.belatrixsf.com |
Clases e interfaces
Creacin de un objeto
Se permite definir ms de un
constructor para una misma clase
(sobrecarga de constructores).
www.belatrixsf.com |
Clases e interfaces
Snow");
www.belatrixsf.com |
Clases e interfaces
Comparacin de objetos
CUIDADO! No se debe utilizar el operador == para comprar objetos. Este
Operador solo compara que dos objetos distintos hagan referencia a la
Misma instancia. El resultado de la siguiente comparacin devuelve FALSO
Float num1 = new Float(5);
Float num2 = new Float(5);
System.out.println(num1 == num2);
www.belatrixsf.com |
Clases e interfaces
Comparacin de objetos
Por defecto, Java compara que la instancia de los objetos comparados
sea la misma. Entonces, qu es lo que sucedi aqu? La clase Float
sobreescribe el mtodo equals por defecto.
Podemos hacer lo mismo que la clase Float para nuestros tipos complejos?
S. Para obtener un comportamiento basado en reglas de negocio, debemos
sobreescribir el mtodo equals reflejando nuestras reglas de comparacin,
y sobreescribir el mtodo hashcode. Veremos cmo hacer esto ms adelante
www.belatrixsf.com |
Actividad
Qu significa que una variable de tipo objeto haga referencia a un
Objeto? Averigemos...
Modificar el mtodo main para que cree una instancia de la clase Persona
usando el constructor con 1 parmetro (nombre). A continuacin definir
otra variable de tipo Persona, y asignarle el valor de la variable recin
creada. Cambiar el valor del nombre para la segunda variable Persona
e imprimir el nombre de la primera por pantalla.
www.belatrixsf.com |
Clases e interfaces
Arreglos
Definen un objeto contenedor que guarda un nmero fijo de valores de
un tipo nico.
Todos los valores del arreglo deben ser del mismo tipo.
Su tamao es esttico (no puede cambiar).
Se reserva espacio en memoria una vez creamos el arreglo (new).
www.belatrixsf.com |
Clases e interfaces
Arreglos
Los elementos de un arreglo son accedidos por un ndice. El primer
elemento de un arreglo se accede con el ndice 0. Sintaxis de
declaracin/creacin de arreglos:
Persona[] personas = new Persona[10];
= personas[2];
www.belatrixsf.com |
Clases e interfaces
Arreglos
Para asignar un valor al tercer elemento del arreglo podemos hacer:
Persona terceraPersona = new Persona();
Persona[] personas = new Persona[10];
personas[2] = terceraPersona;
www.belatrixsf.com |
Clases e interfaces
Arreglos
Un arreglo puede tener ms de una dimensin:
int[][] matriz = new int[3][3];
int[][][] cubo = new int[3][3][3];
www.belatrixsf.com |
Actividad
Crear un arreglo de tamao 3 para contener elementos de tipo int.
Asignar un valor a las primeras dos posiciones.
Asignar a la tercera posicin la suma de las otras dos posiciones.
Imprimir el resultado por pantalla.
www.belatrixsf.com |
Clases e interfaces
Herencia
Permite crear clases usando una clase existente como base. Se puede
reusar las propiedades y mtodos de la clase existente, ubicando atributos
y mtodos comunes a muchos hijos.
La clase base se llama superclase, y la que la extiende se llama
subclase.
La clase hija o subclase puede agregar funcionalidad propia (extiende
la funcionalidad base).
www.belatrixsf.com |
Clases e interfaces
Herencia
public class CalculadoraBase {
public String duenio;
package ar.com.cursojava.calculos;
public class CalculadoraAvanzada extends CalculadoraBase {
public float cuadrado(float numero) {
return multiplicar(numero, numero);
}
}
www.belatrixsf.com |
Clases e interfaces
Herencia
La clase hija tiene su propio constructor. Puede invocarse el constructor
padre mediante la instruccin super.
public CalculadoraAvanzada () {
super();
}
www.belatrixsf.com |
Clases e interfaces
Herencia
Una variable de tipo Padre puede hacer referencia a una instancia de
alguna de sus clases hijas.
Ms de una clase puede heredar de una misma clase Padre, pero una
Clase hija no puede heredar de ms de un padre.
Cada hijo puede sobreescribir el mismo mtodo del padre a su
manera. Esto permite que una misma tarea pueda realizarse por los hijos
de diferentes maneras, dependiendo de la implementacin en cada hijo
(polimorfismo)
www.belatrixsf.com |
Actividad
Cmo funciona el polimorfismo? Hagamos un ejemplo.
Crear una clase Vehiculo que contenga un mtodo encenderMotor. Crear
dos clases Auto y Moto que hereden de la clase Vehiculo (extends).
Crear un mtodo encenderMotor en ambas clases hijas, e imprimir por
pantalla diferentes cadenas. Modificar el mtodo main, declarando dos
variables de tipo vehculo e instanciar para la primera un objeto de tipo
Auto, y para la segunda un objeto de tipo Moto. Ejecutar el mtodo
encenderMotor para ambos casos y analizar el resultado.
www.belatrixsf.com |
Clases e interfaces
Modificadores de acceso
Determinan desde qu clase se puede acceder a un determinado elemento.
Son aplicables a variables, mtodos o clases.
private: los elementos solo pueden accederse desde la misma clase en que
se encuentran. Es el tipo ms restrictivo.
private float dividir(final float dividendo, final float divisor) {
return dividendo / divisor;
}
www.belatrixsf.com |
Clases e interfaces
Modificadores de acceso
protected: los elementos solo pueden accederse desde clases ubicadas en su
mismo paquete, y desde cualquier clase que extienda la clase en que se
encuentra.
package ar.com.cursojava.calculos;
package ar.com.cursojava.calculos;
www.belatrixsf.com |
Clases e interfaces
Modificadores de acceso
default: no se especifica palabra clave. Permite acceder al elemento
nicamente desde clases que se encuentran en el mismo paquete que la
clase que lo contiene. Lo siguiente no est permitido (CalculadoraAvanzada
intenta acceder ilegalmente al mtodo multiplicar de su superclase):
package ar.com.cursojava.calculos;
package ar.com.cursojava.calculos.avanzado;
www.belatrixsf.com |
Clases e interfaces
Modificadores de acceso
public: permite acceder al elemento desde cualquier clase,
independientemente de que sta pertenezca o no al mismo paquete que la
clase contenedora. En el siguiente ejemplo ambas clases estn ubicadas en
diferentes paquetes (y el cdigo es vlido):
package ar.com.cursojava.calculos;
package ar.com.cursojava.calculos.avanzado;
www.belatrixsf.com |
Clases e interfaces
www.belatrixsf.com |
Clases e interfaces
Clases e interfaces
www.belatrixsf.com |
Clases e interfaces
Clases e interfaces
www.belatrixsf.com |
Clases e interfaces
www.belatrixsf.com |
Clases e interfaces
www.belatrixsf.com |
Clases e interfaces
Clases e interfaces
Clases abstractas
Define una tarea general dejando a los hijos los detalles especficos.
No pueden ser instanciadas. Son conceptos abstractos.
Si al menos un mtodo tiene el modificador abstract, la clase debe
ser abstracta. Puede contener mtodos no abstractos (con cuerpo).
Un mtodo abstracto lleva el modificador abstract, y no tiene cuerpo.
www.belatrixsf.com |
Clases e interfaces
package ar.com.gestion.abstracta;
public abstract class Vehculo {
public abstract void encenderMotor();
public void encenderLuces() {
System.out.println("Encender luces");
}
}
package ar.com.gestion.abstracta;
public class Auto extends Vehculo {
@Override
public void encenderMotor() {
System.out.println("Girar llave");
}
package ar.com.gestion.abstracta;
public class Moto extends Vehculo {
@Override
public void encenderMotor() {
System.out.println("Girar llave");
System.out.println("Dar patada");
}
}
www.belatrixsf.com |
Actividad
1- Declarar todos los mtodos de CalculadoraBase como estticos.
Declarar la clase como abstracta y definir en ella un mtodo potencia,
abstracto, que reciba 2 nmeros como parmetro. Qu sucede en
CalculadoraAvanzada?
2- Declarar todos los mtodos de CalculadoraAvanzada como estticos.
Implementar el mtodo potencia. Usar Math.pow para el clculo.
3- Modificar el mtodo main para utilizar la calculadora si necesidad de
crear objetos. Ejecutar el programa.
www.belatrixsf.com |
Clases e interfaces
Interfaces
Son como clases abstractas en su mxima expresin. Ninguno de sus
mtodos tienen cuerpo. Solo definen operaciones. Todos sus mtodos
son pblicos.
Pueden heredar de otras interfaces (Herencia mltiple). No pueden
implementar otras interfaces.
Pueden tener atributos, pero stos sern pblicos estticos y constantes
(aunque nosotros no lo indiquemos).
www.belatrixsf.com |
Clases e interfaces
Interfaces
Definen una especie de contrato: especifican qu harn y se garantiza
que el resultado de la operacin y sus parametros no cambiarn.
Si una clase implementa (mediante la palabra reservada implements)
una interfaz, debe proveer una implementacin de todos sus mtodos.
Una variable utilizada para referenciar una clase de tipo interfaz puede
ser utilizada para hacer referencia a cualquier instancia de una de sus
implementaciones.
www.belatrixsf.com |
Clases e interfaces
Interfaces
package ar.com.cursojava.descuentos;
public interface DescuentoCliente {
float calcularDescuento(float totalAPagar);
}
package ar.com.cursojava.descuentos;
public class DescuentoClienteNuevo
implements DescuentoCliente {
@Override
public float calcularDescuento(float totalAPagar) {
return totalAPagar;
}
}
package ar.com.cursojava.descuentos;
public class DescuentoClientePremium implements DescuentoCliente {
@Override
public float calcularDescuento(float totalAPagar) {
return totalAPagar - (totalAPagar * 20 / 100);
}
}
www.belatrixsf.com |
Actividad
1- Copiar el ejemplo de descuentos, creando las interfaces y clases que sean
necesarias.
2- Crear una clase que contenga un mtodo main. En el mismo, definir dos
variables de tipo DescuentoCliente, e instanciar en un caso la
implementacin de cliente nuevo, y en el segundo caso la implementacin
de cliente premium.
3- Imprimir por pantalla el clculo de descuento de ambos objetos.
www.belatrixsf.com |
Clases e interfaces
Enumeraciones
Son tipos complejos con valores constantes predefinidos. Extienden Enum
No se instancian. Los valores se acceden estticamente.
Dan un mayor control sobre los valores posibles que un mtodo puede
aceptar. Define un conjunto de valores posibles.
Pueden contener variables o mtodos.
Utilizan constructores privados para inicializar sus valores. Los
constructores no pueden ser invocados manualmente.
www.belatrixsf.com |
Clases e interfaces
Enumeraciones - Uso
package ar.com.gestion.enumeraciones;
public enum Dia {
LUNES(1), MARTES(2), MIERCOLES(3),
JUEVES(4), VIERNES(5), SABADO(6),
DOMINGO(7);
private int diaDeSemana;
private Dia(int diaDeSemana) {
this.diaDeSemana = diaDeSemana;
}
public int getDiaDeSemana() {
return diaDeSemana;
}
package ar.com.gestion.principal;
import ar.com.gestion.enumeraciones.Dia;
public class Principal {
public static void main(String[] args) {
imprimirNumeroDeDiaDeSemana(Dia.LUNES);
}
public static void imprimirNumeroDeDiaDeSemana(
Dia dia) {
System.out.println(dia.getDiaDeSemana());
}
}
www.belatrixsf.com |
Clases e interfaces
Condicionales: Sentencias if
Los condicionales permiten modificar el flujo normal de la ejecucin de una
aplicacin. Permiten definir fragmentos de cdigo que sern ejecutados si
se cumple determinada condicin. La condicin debe ser una expresin
cuyo resultado sea un valor booleano.
Un bloque if de una sola lnea puede omitir las llaves ( { } ) del cuerpo,
pero se lo considera una mala prctica (dificulta la legibilidad).
Los condicionales pueden evaluar mltiples expresiones, utilizando
operadores booleanos ( &&, ||, !, etc).
www.belatrixsf.com |
Clases e interfaces
Condicionales: Sentencias if
public class Principal {
public static void main(String[] args) {
long numero = Long.parseLong(args[0]);
if(numero == 0) {
System.out.println("El nmero ingresado es
"mayor a 0 y menor a 10.");
} else if (numero > 10 && numero < 20) {
System.out.println("El nmero ingresado es
"mayor a 10 y menor a 20.");
} else if (numero > 20) {
System.out.println("El nmero ingresado es
"mayor a 20.");
} else {
System.out.println("El nmero ingresado es
"negativo.");
}
}
}
" +
" +
" +
" +
www.belatrixsf.com |
Clases e interfaces
www.belatrixsf.com |
Clases e interfaces
Sentencia switch
Sirve para definir diferentes caminos de ejecucin dependiendo de un valor.
Los tipos que pueden ser utilizados en una clusla switch son: byte, short,
char, int, Strings, enumeraciones y ciertos wrappers de tipos primitivos: Byte,
Short, Character e Integer.
Para salir de la clusula switch se usa la palabra reservada break. En caso
de no existir una, se ejecutan los dems caminos en cascada.
www.belatrixsf.com |
Clases e interfaces
Ejemplo:
Parmetro de
programa
www.belatrixsf.com |
Clases e interfaces
Ejemplo sin
break
(cascada):
www.belatrixsf.com |
Actividad
1- Copiar el ejemplo de descuentos, crear una enumeracin TipoCliente
con dos valores: Nuevo y Premium.
2- Usar la sentencia switch o if para determinar el tipo de cliente, e instanciar
la implementacin de clculo de descuento correspondiente en base a un
parmetro de entrada. Usar una variable de tipo DescuentoCliente (padre)
para hacer referencia a la instancia creada.
3- Imprimir por pantalla el clculo de descuento.
www.belatrixsf.com |
Bucles
Un bucle es una instruccin especial que define un conjunto de
instrucciones que deben ejecutarse mientras se cumpla una determinada
condicin. Hay 3 mecanismos:
for: conoce de antemano la cantidad de iteraciones necesarias.
while: evala la condicin al comienzo, si no se cumple no
ingresa al cuerpo. Puede no ingresar nunca al cuerpo.
do while: garantiza la ejecucin del cuerpo al menos una vez.
Evala la condicin al final
www.belatrixsf.com |
Bucles - for
Permite la ejecucin de un conjunto de instrucciones un nmero de
veces que es conocido de antemano. La cabecera del bucle for tiene 3
partes: inicializacin, condicin de continuidad y paso de actualizacin.
public class Principal {
public static void main(String[] args) {
for(int x = 0; x < 10; x++) {
System.out.println("Vuelta: " + x);
}
}
}
www.belatrixsf.com |
Bucles - while
While nos permite ejecutar un bloque de cdigo mltiples veces,
revisando que una condicin sea verdadera en cada vuelta. La
condicin se revisa antes de ejecutar el cuerpo. Debido a esto, es
posible que el cuerpo nunca se ejecute, en el caso de que la condicin
sea falsa en el primer check.
public class Principal {
public static void main(String[] args) {
int x = 0;
while (x < 10) {
x++;
System.out.println("Vuelta: " + x);
}
}
}
www.belatrixsf.com |
Bucles do while
Do while es muy similar a while. La nica diferencia es que el valor
de la condicin se revisa al terminar la ejecucin del cuerpo, en lugar del
comienzo. Como resultado, el cuerpo del mtodo se ejecuta, como
mnimo, una vez.
public class Principal {
public static void main(String[] args) {
int x = 0;
do {
x++;
System.out.println("Vuelta: " + x);
} while (x < 10);
}
}
www.belatrixsf.com |
No ingresa al cuerpo
www.belatrixsf.com |
Actividad
1- Crear un arreglo de enteros de 10 elementos. Almacenar 10 valores.
2- Crear 3 bucles, uno de cada tipo, que itere en los elementos del arreglo
y haga una sumatoria de los mismos.
3- Imprimir por pantalla el resultado del clculo.
www.belatrixsf.com |
Bucles continue
La palabra reservada continue nos permite omitir el resto del cuerpo del
bucle y saltar a la siguiente iteracin.
public class Principal {
public static void main(String[] args) {
// Imprimimos nmeros del 0 al 9, excepto el 3
for(int x = 0; x < 10; x++) {
if(x == 3) {
continue;
}
System.out.println("Vuelta: " + x);
}
}
}
www.belatrixsf.com |
Actividad
1- Crear un arreglo de enteros de 10 elementos. Almacenar 10 valores.
2- Crear un bucle, que itere en los elementos del arreglo y haga una sumatoria
de solo los valores pares. Utilizar para ello la palabra clave continue.
3- Imprimir por pantalla el resultado del clculo.
www.belatrixsf.com |
Bucles break
La palabra reservada break nos permite salir de la ejecucin del bucle.
No se continuar iterando, la ejecucin contina con la siguiente
instruccin al bucle.
public class Principal {
public static void main(String[] args) {
// Sumatoria de numeros, salimos al superar el valor 10
int i = 1;
int acumulado = 0;
while(true) {
acumulado += i; // resumen para: acumulado = acumulado + i;
if(acumulado > 10) {
break;
}
}
System.out.println("Acumulado: " + acumulado);
}
}
www.belatrixsf.com |
Actividad
1- Crear un arreglo de enteros de 10 elementos. Almacenar 10 valores.
2- Crear un bucle, que itere en los elementos del arreglo, buscando un
valor determinado. Por cada vuelta imprimir por pantalla el valor
analizado.
3- Al encontrar el valor buscado, imprimir la posicin en que se encuentra
y salir del bucle.
www.belatrixsf.com |
Collections
Collection Framework
Un collection es un objeto que agrupa elementos relacionados. Proporcionan
diferentes operaciones para almacenar, obtener, buscar y manipular de
diferentes formas los elementos que contienen.
Un framework de collections est formado tpicamente por 3 componentes:
Interfaces: definen las operaciones que desempean.
Implementaciones: implementacin concreta de las interfaces.
Algoritmos: operaciones tiles y muy comunes para collections.
www.belatrixsf.com |
Collections
www.belatrixsf.com |
Collections
www.belatrixsf.com |
Collections
www.belatrixsf.com |
Collections
www.belatrixsf.com |
Collections
www.belatrixsf.com |
Collections
www.belatrixsf.com |
Collections
Collections
while(iterator.hasNext()) {
iterator.next();
iterator.remove();
}
while(iterator.hasNext()) {
iterator.next();
iterator.remove();
}
System.out.println(cadenas.size());
System.out.println(cadenas.size());
}
}
}
}
www.belatrixsf.com |
Collections
Actividad
1- Crear un collection. Agregar objetos de tipo String
2- Iterar en el collection (iterator o .get de list) usando un bucle
3- En cada iteracin, comparar con un valor determinado. Al encontrarlo,
Asignar el valor en una variable y romper el bucle
4- Imprimir el valor por pantalla
www.belatrixsf.com |
Collections
www.belatrixsf.com |
Collections
www.belatrixsf.com |
Actividad
1- Crear una clase (o modificar una existente) que tenga un tipo enumerado
entre sus atributos (ejemplo: TipoCombustible, con valores DIESEL y NAFTA).
2- Crear un Collection del tipo creado. Crear varias instancias con diferente
valor para la enumeracin e insertarlas en el collection.
3- Usar for each para iterar en los elementos del collection. Al encontrarlo,
asignarlo a una variable, salir del bucle y encenderlo.
www.belatrixsf.com |
Collections
void clear();
public Set<K> keySet();
public Collection<V> values();
public Set<Map.Entry<K,V>> entrySet();
public interface Entry {
K getKey();
V getValue();
V setValue(V value);
}
}
www.belatrixsf.com |
Collections
Map: uso
public class Principal {
public static void main(String[] args) {
Map<String, Vehculo> vehiculos =
new HashMap<String, Vehculo>();
vehiculos.put("auto", new Auto());
vehiculos.put("moto", new Moto());
Vehculo vehiculo = vehiculos.get("moto");
vehiculo.encenderMotor();
}
}
www.belatrixsf.com |
Actividad
1- Utilizar la clase Vehculo existente (o crear una nueva). Agregarle un
Campo de tipo Long, llamado id.
2- Crear dos vehculos con diferente id. Crear un Mapa con Long como
key, y Vehculo como value. Almacenar los vehculos creados en el
mapa, usando el id como key y el objeto como value.
3- Obtener los vehculos del mapa y ejecutar sus mtodos encender.
www.belatrixsf.com |
Collections
Patrn singleton
Singleton es un patrn de diseo utilizado cuando se requiere solo una
nica instancia de un objeto para toda la aplicacin. Se logra esto
haciendo su constructor privado, y creando un mtodo pblico que
se encarga de devolver su instancia (nica), creando el objeto de ser
necesario. Todas las invocaciones al mtodo devolvern la misma instancia.
Este patrn permite crear objetos de estado global, permite evitar la creacin
de objetos innecesarios en memoria, permite el control centralizado de
acceso a recursos compartidos, etc.
www.belatrixsf.com |
Collections
Patrn singleton
package ar.com.gestion.principal;
public class ExpertoUsuarios {
private static ExpertoUsuarios expertoUsuarios = null;
public static ExpertoUsuarios getInstancia() {
if (expertoUsuarios == null) {
expertoUsuarios = new ExpertoUsuarios();
}
return expertoUsuarios;
}
private ExpertoUsuarios() {
}
public Usuario crearUsuario(String nombreUsuario, String contrasea) {
// crear usuario
}
}
www.belatrixsf.com |
Collections
Interfaces grficas
Java ofrece una biblioteca para construr GUIs (Graphic User Interfaces):
SWING. Reemplaz a la antigua biblioteca de GUIs de Java, AWT
(actualmente en desuso).
Hay dos formas de organizar las ventanas en swing:
SDI: diferentes ventanas, separadas e independientes
MDI: ventanas contenidas dentro de una misma ventana principal
www.belatrixsf.com |
Collections
Ventanas: JFrame
La clase JFrame representa una ventana. Tiene diversos mtodos que
permiten cambiar sus parmetros: tamao, agregar componentes,
definir qu componente mostrar su contenido, definir la disposicin de
los componentes que contenga (layout), etc.
Una aplicacin puede abrir ms de una ventana. Cada una tendr su
representacin en la barra de tareas.
www.belatrixsf.com |
Collections
Ventanas: JFrame
JFrame permite varias acciones de cierre (click en la X de la ventana):
JFrame.DISPOSE_ON_CLOSE: cierra el JFrame actual. Si es el
ltimo JFrame, la aplicacin termina
JFrame.EXIT_ON_CLOSE: termina la aplicacin
JFrame.DO_NOTHING_ON_CLOSE: deshabilita la X de la ventana
JFrame.HIDE_ON_CLOSE: esconde la ventana. Puede volver a
mostrarse posteriormente (visible = true y estado = State.NORMAL)
www.belatrixsf.com |
Collections
www.belatrixsf.com |
Collections
Layouts
Puede definirse un layout para todo componente contenedor de
componentes. El layout define cul ser la ubicacin de los
componentes que se agreguen al contenedor. El layout se especifica
usando el mtodo setLayout de los contenedores. Algunos ejemplos:
BoxLayout: coloca los componentes verticalmente.
FlowLayout: coloca los componentes horizontalmente.
null: deja la ubicacin en nuestras manos, mediante el uso de
absolute positioning (coordenadas cartesianas).
www.belatrixsf.com |
Collections
Labels: JLabel
La clase JLabel permite definir una etiqueta un elemento que mostrar
texto en su interior.
Mtodos tiles:
setText: define un texto para la etiqueta
getText: obtiene el texto que la etiqueta muestra actualmente
JLabel label = new JLabel("Mi primera etiqueta");
www.belatrixsf.com |
Collections
Botones: JButton
La clase JButton permite definir un botn, el texto que muestra y asociarle
un evento.
JButton boton = new JButton();
boton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent event) {
JOptionPane.showMessageDialog(contenedor, "Texto");
}
});
www.belatrixsf.com |
Collections
Inputs: JTextField
La clase JTextField permite definir casillas de texto que sern utilizadas
por un usuario para introducir datos en el sistema.
Podemos manipular el texto que los mismos muestran a travs del mtodo
setText, y recuperar su contenido a travs del mtodo getText.
JTextField textField = new JTextField();
textField.setText("Texto a mostrar inicialmente");
www.belatrixsf.com |
Collections
Tablas: JTable
La clase JTable permite crear una tabla. Se permite la definicin de
columnas que posteriormente podremos poblar, para mostrar informacin
en forma tabular. JTable mantiene internamente un modelo con la
informacin de columnas que est mostrando, y las filas que contiene en
un momento dado. Inicializacin:
JTable tabla = new JTable();
tabla.setModel(new javax.swing.table.DefaultTableModel(new Object[][] {
{ "Pedro", "Gonzlez" }, { "Martn", "Lpez" }, },
new String[] { "Nombre", "Apellido" }));
www.belatrixsf.com |
Collections
Tablas: JTable
Obtencin del modelo de la tabla:
DefaultTableModel model = (DefaultTableModel) tabla.getModel();
Agregar fila:
model.addRow(new Object[]{"Juan", "Prez"});
www.belatrixsf.com |
Collections
Tablas: JTable
Para hacer visible una tabla y brindar funcionalidad de scroll, es
necesario colocar la misma en el interior de un JScrollPane. Este
componente es un contenedor que proporciona scrollbars.
Utilizacin:
JScrollPane scroll = new JScrollPane();
scroll.setBounds(0, 0, 300, 100);
scroll.setVisible(true);
scroll.setViewportView(tabla);
www.belatrixsf.com |
Collections
Contenedor: JPanel
La clase JPanel permite definir un contenedor de componentes, al cual
podemos agregar componentes para manipularlos como a un todo.
Un JPanel permite definir un Layout de la misma forma que una ventana.
Esto facilita el trabajo a la hora de decidir cmo queremos que nuestros
componentes se vean en pantalla, ya que podemos definir mltiples
paneles, y que cada uno defina su propio Layout.
JPanel panel = new JPanel();
panel.setLayout(new FlowLayout());
www.belatrixsf.com |
Collections
Dilogos: JDialog
Un Dialog es una subventana independiente de la venana principal,
destinada a mostrar un mensaje al usuario. La mayora de los Dialog se
utilizan para mostrar un error o una advertencia al usuario, pero nada nos
impide hacerlos ms complicados: mostrar imgenes, inputs, botones,
etc.
La clase utilizada en Swing para mostrar dilogos es JOptionPane. La
misma define algunos dilogos por defecto, que pueden ser creados
invocando algunos mtodos de JOptionPane estticamente.
www.belatrixsf.com |
Collections
www.belatrixsf.com |
Collections
www.belatrixsf.com |
Collections
www.belatrixsf.com |
Collections
www.belatrixsf.com |
Actividad
1- Crear una clase main. Crear un JFrame. Agregar un campo de texto y
un botn.
2- Agregar un evento para que al hacer click en el botn (actionPerformed),
se tome el valor que se haya introducido en el campo de texto y lo muestre
en un dialog.
3- Ejecutar.
www.belatrixsf.com |
Collections
Collections
segundaInternalFrame.setSize(300, 100);
segundaInternalFrame.setVisible(true);
segundaInternalFrame.setLocation(400, 0);
JInternalFrame primeraInternalFrame =
new JInternalFrame("Ventana 1");
primeraInternalFrame.setSize(300, 100);
primeraInternalFrame.setVisible(true);
JInternalFrame segundaInternalFrame =
new JInternalFrame("Ventana 2");
segundaInternalFrame.setSize(300, 100);
ventana.setVisible(true);
}
}
www.belatrixsf.com |
Collections
Collections
import javax.swing.JDesktopPane;
public class MiDesktopPane extends JDesktopPane {
public MiDesktopPane(int ancho, int alto) {
this.setSize(ancho, alto);
this.setVisible(true);
}
}
www.belatrixsf.com |
Collections
www.belatrixsf.com |
Collections
www.belatrixsf.com |
Actividad
1- Crear una clase main. Crear un JFrame. Crear un JDesktopPane dentro.
Crear un JInternalFrame dentro del desktop pane.
2- Agregar un campo de texto y un botn al JInternalFrame. Agregar un
evento para que al hacer click en el botn (actionPerformed), se tome el
valor que se haya introducido en el campo de texto y lo muestre en un
dialog.
3- Ejecutar.
www.belatrixsf.com |
Manejo de eventos
El manejo de eventos en Swing se implementa a travs de Listeners, clases
que se encuentran monitoreando un componente a la espera de que se
produzca un evento determinado, para tomar una accin en consecuencia.
Los componentes pueden contener una lista de objetos suscriptos a un
determinado evento, y en el momento en que se produzca dicho evento
notificar a todos los suscriptos que ha llegado el momento de actuar.
Esto corresponde con el patrn de diseo Observador.
www.belatrixsf.com |
www.belatrixsf.com |
Manejo de eventos
Cada componente define una serie de mtodos con los cuales podemos
Registrar y eliminar Listeners (observadores). Dichos mtodos nos dan
una idea de los eventos que soporta cada componente. Ejemplo:
boton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent event) {
String[] opciones = {"S", "No", "Cancelar"};
JOptionPane.showOptionDialog(testPanel, "Quiere guardar sus cambios antes de salir?"
, "Guardar y salir", JOptionPane.YES_NO_CANCEL_OPTION,
JOptionPane.QUESTION_MESSAGE, null, opciones, null);
}
});
www.belatrixsf.com |
Manejadores de eventos
Para implementar un manejador de eventos, se proveen interfaces para cada
tipo de eventos posibles. En el ejemplo anterior, ActionListener es la interfaz
provista para manejar eventos de accin (en el caso de los botones, un
click). Dicha interfaz obliga a implementar el mtodo actionPerformed, que
es el proceso que se ejecutar cuando se lleve a cabo la correspondiente
accin. La clase que implementa ActionListener es el observador.
Las implementaciones de manejadores de eventos pueden recibir informacin
del evento en el parmetro ActionEvent (por ejemplo, cundo se ejecut).
www.belatrixsf.com |
Actividad
1- Crear una interfaz grfica (SDI o MDI, a gusto). Agregar un input, un
botn y una tabla con una sola columna.
2- Agregar un evento al botn para que al hacer click recupere el valor
del input y lo guarde en la tabla.
3- Ejecutar.
www.belatrixsf.com |
JUnit framework
JUnit es un framework de pruebas unitarias para Java. Permite escribir
casos de prueba que ejecutarn el cdigo existente con ciertos
parmetros preestablecidos y evaluarn que el resultado sea el
Esperado.
La idea es construr casos de prueba para fragmentos de cdigo con
todos los parmetros posibles, para los cuales sabemos cul es el
resultado esperado, y revisar que el resultado de la ejecucin sea
el correcto.
www.belatrixsf.com |
JUnit framework
JUnit sirve un doble propsito:
Permite asegurar que el cdigo entregado responde de acuerdo a
los requerimientos.
Protege el cdigo de futuros cambios. Si un desarrollador cambia
un fragmento de cdigo introduciendo defectos en el cdigo, si
tenemos tests de unidad para ese fragmento, deberamos ser
capaces de detectar el error al ejecutar los junits.
www.belatrixsf.com |
JUnit framework
Por lo general se incluye entre los pasos de compilacin un paso que
ejecuta los tests de unidad de la aplicacin. Maven permite esto.
Las ltimas versiones de JUnit permiten configurar los tests utilizando
anotaciones, lo cual facilita mucho el trabajo.
Tanto Netbeans como Eclipse incluyen entre los tipos de archivos que
pueden ser creados la opcin de crear JUnits. Esto genera una clase
bsica con un mtodo de test.
www.belatrixsf.com |
static org.junit.Assert.*;
org.junit.After;
org.junit.Before;
org.junit.Test;
www.belatrixsf.com |
www.belatrixsf.com |
www.belatrixsf.com |
www.belatrixsf.com |
www.belatrixsf.com |
Actividad
1- Crear una clase con un mtodo que recibe 3 objetos como parmetro, los
guarde dentro de un collection y retorne el collection.
2- Crear un test de unidad para el mtodo. Usar asserts para probar que el
collection tenga la cantidad de elementos correctos, y que contenga los 3
objetos que pasamos como parmetro.
3- Correr el test de unidad y verificar que tenga xito
www.belatrixsf.com |
Excepciones
Las excepciones son errores producidos en tiempo de ejecucin. El
compilador de Java no puede detectar estos errores, ya que dependen
de las condiciones / estado actual del sistema al momento de ejecutar
el cdigo.
Son errores asociados a la lgica del programa. Es trabajo del
programador definir la lgica que permita manejar estos errores.
www.belatrixsf.com |
Excepciones
Hay dos tipos de errores en tiempo de ejecucin:
Excepciones: situaciones raras, pero que se consideran dentro del
flujo normal de la aplicacin.
Errores: situaciones que no deberan ocurrir, a menos que algo haya
salido realmente mal y deba detenerse la aplicacin.
www.belatrixsf.com |
Excepciones
Las clases Exception son clases Java como cualquier otra, con la
particularidad de que heredan de la clase Throwable, la cual extiende de
Object.
Throwable tiene 2 subclases:
Exception: representan situaciones excepcionales.
Error: representan errores irrecuperables (ej: IOError).
www.belatrixsf.com |
Excepciones
La primera de las clasificaciones, las excepciones, pueden dividirse en
dos de acuerdo a si el compilador nos obliga o no a manejarlas:
Checked: el compilador obliga al programador a manejar el error. Si
No lo hace, el cdigo no compilar.
Unchecked: no exigen que el programador maneje el error. Son
subclases de la clase RuntimeException (que extiende de Exception)
o la clase Error.
www.belatrixsf.com |
Excepciones
Object
Throwable
Exception
Error
RuntimeException
www.belatrixsf.com |
Excepciones - Sintaxis
Hay 3 palabras bloques asociados a excepciones:
try: indica que las instrucciones del bloque son peligrosas, que pueden
lanzar una excepcin.
catch: especifica qu excepcin se espera, y cmo se llevar a cabo el
manejo de la misma.
finally: indica un conjunto de instrucciones que se ejecutarn sin importar
lo que suceda, se lance o no una excepcin.
www.belatrixsf.com |
Excepciones Unchecked
public class EjemploExcepciones {
public static void main(String[] args) {
dividirEnteros(1, 0);
}
public static double dividirEnteros(int dividendo, int divisor) {
return dividendo / divisor;
}
}
www.belatrixsf.com |
Excepciones Unchecked
Como vimos en la filmina anterior, es posible hacer que la excepcin lance
un mensaje por s misma. Sin embargo, esto puede ser til para el
desarrollador, pero la impresin del stacktrace por consola puede no ser
agradable para el usuario final. El cdigo no lanz un error de compilacin
debido a que la excepcin que lanza (ArithmeticException) es una subclase
de RuntimeException (unchecked).
Podemos hacer que el cdigo nos avise que el mtodo realiza algo riesgoso
usando en la definicin del mtodo la sentencia throws Exception. Esta
sentencia enva hacia arriba la excepcin para que otro la maneje (en caso
de que se presente).
www.belatrixsf.com |
Excepciones Checked
El siguiente cdigo lanza un error de compilacin en la llamada al
mtodo dividirEnteros, ya que se especifica en el mtodo que puede
lanzarse una Exception (checked), y no se hace nada por manejarla en
el invocador:
public class EjemploExcepciones {
public static void main(String[] args) {
int resultado = dividirEnteros(0, 0);
System.out.print("Resultado: " + resultado);
}
public static int dividirEnteros(int dividendo, int divisor) throws Exception {
return dividendo / divisor;
}
}
www.belatrixsf.com |
Excepciones Atrapando
Podemos ejecutar el cdigo riesgoso dentro de un bloque try y proporcionar
un manejo de excepcin ms amistoso.
La ventaja de realizar esto es que tenemos control sobre cmo queremos que
la aplicacin reaccione ante esta situacin poco comn (aunque posible).
En algunas condiciones podramos incluso manejar el error en forma
transparente sin que el usuario jams llegue a enterarse que se produjo un
error, debido a que en el manejo de la excepcin puede tomarse alguna
accin correctiva que permita terminar la ejecucin normalmente.
www.belatrixsf.com |
www.belatrixsf.com |
www.belatrixsf.com |
Actividad
1- Crear un mtodo que reciba dos strings como parmetro. Dicho mtodo
debe realizar una conversin de los Strings a Double, y realizar una divisin
entre ellos
2- Manejar las excepciones: conversin a entero y divisin por 0.
3- Crear un test de unidad para cada caso: divisin correcta, error por
divisin por 0 y string no numrico.
www.belatrixsf.com |
Unchecked
return resultado;
}
www.belatrixsf.com |
Actividad
1- Crear dos excepciones propias, checked: divisin por cero y error al
convertir String a nmero.
2- Adaptar el cdigo para lanzar las nuevas excepciones.
3- Crear un test de unidad para cada caso: error por divisin por 0 y
error por string no numrico.
4- Editar el mtodo main y ejecutar con diversos parmetros para ver los
resultados.
www.belatrixsf.com |
Consultas?
www.belatrixsf.com |
Clases e interfaces
Proyecto
Se desarrollar el sistema propuesto, o uno que los alumnos elijan.
El trabajo deber proyectar los conocimientos aprendidos en el curso.
Se considerar con mejor calificacin a los grupos que completen el proyecto.
Se considerar con mejor calificacin a los grupos que realicen los puntos extra.
www.belatrixsf.com |