Вы находитесь на странице: 1из 178

Java Inicial: clase 1

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

Tipos fuertes vs tipos dbiles


Un lenguaje es de tipos dbiles si las variables no tienen un tipo concreto,
e incluso puede tomar valores de diferente tipo a lo largo de la ejecucin del
programa.
Un lenguaje es de tipos fuertes si las variables son de un tipo concreto, y
no puede ser utilizada como si fuera de otro tipo a menos que una conversin
explcita tenga lugar.
JAVA pertenece a la segunda categora.
www.belatrixsf.com |

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

Libre y de especificacin abierta


Una especificacin define todos los detalles necesarios para poder
llevar adelante correctamente una implementacin. Una especificacin
detalla qu se debe hacer, pero no cmo.
Una especificacin es abierta si sus detalles son pblicos.
JAVA es desarrollado y distribudo libremente bajo la licencia GPL
(General Public License), que otorga la libertad de usar, estudiar, compartir
y modificar el software. Se permiten propsitos comerciales.
www.belatrixsf.com |

IDE Generalidades de JAVA

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 |

IDE Generalidades de JAVA

Tipos primitivos

www.belatrixsf.com |

IDE Generalidades de JAVA

Operadores para tipos primitivos


El operador de asignacin (dar valor a una variable) es el smbolo: =
Los literales para variables de tipo char se colocan entre comillas
simples. Ej: 'a', 'c', 'x', etc.
El operador de comparacin (valor idntico) es: ==. El resultado de la
comparacin es un valor booleano (true o false). Cualquier tipo
numrico puede compararse con cualquier otro tipo numrico (sea
entero o de punto decimal). Ej: float vs int
www.belatrixsf.com |

Clases e interfaces

Qu son las Clases?


Tipos de datos complejos.
Modelos para elementos de la realidad.
Moldes a partir de los cuales se crean objetos (instancias).
Poseen atributos y mtodos (operaciones).
Pueden heredar atributos y mtodos de otras clases.
www.belatrixsf.com |

Clases e interfaces

Caractersticas de las Clases


Todas heredan directa o indirectamente de la clase Object (SIN EXCEPCIN).
Existen clases Top level o internas. Pueden crearse clases annimas.
Pueden heredar solo de una clase. Pueden implementar mltiples interfaces.
Sus miembros pueden ser: Atributos, Mtodos, Constructores u otras clases.
Pueden existir varias clases en un archivo .java pero slo una de ellas puede
ser pblica y debe llamarse igual que el archivo.
.

www.belatrixsf.com |

Clases e interfaces

Mtodos tiles heredados de Object


toString: devuelve una representacin del objeto en forma de cadena de
caracteres.
equals: indica si el objeto pasado como parmetro es el mismo que el
objeto actual. Se compara que sean la misma instancia.
Se recomienda sobreescribir ambos mtodos con la lgica de negocio
que represente nuestra operacin de igualdad, y lo que nosotros
consideramos que es la impresin de uno de nuestros objetos.
www.belatrixsf.com |

Clases e interfaces
package ar.com.gestion.principal;
public class Principal {
private String textToPrint;
public String getTextToPrint() {
return textToPrint;
}

Paquete
Atributo
Mtodo

public void setTextToPrint(String textToPrint) {


this.textToPrint = textToPrint;
}
Constructor
public Principal() {
this.textToPrint = "Texto de bienvenida";
}

Mtodo main

public static void main() {


Principal principal = new Principal();
principal.setTextToPrint("Texto de bienvenida");
System.out.println(principal.getTextToPrint());
}

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;

Para asignar valores a la variable, se utiliza el operador =.


valor = 100;

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

Partes de la declaracin de un Mtodo


Tipo de valor de retorno

Modificador

Nombre del mtodo

Modificador de parmetro

public boolean imprimirMensaje(String mensaje) {


System.out.println(mensaje);
return true;
}

Tipo del parmetro

Nombre del parmetro

Sentencia de retorno

www.belatrixsf.com |

Clases e interfaces

Inicio de la aplicacin: Clase Principal


Cada aplicacin tiene una clase que contiene un mtodo principal,
utilizada para iniciar la ejecucin.
La clase principal de una aplicacin es aquella que contiene el mtodo
main. Cumple el papel de nuestro ejecutable.
package ar.com.cursojava.principal;
public class Principal {
public static void main(String[] args) {
System.out.println("Hola mundo");
}
}

www.belatrixsf.com |

Clases e interfaces

Compilando y ejecutando
Compilacin: javac -d .\ Principal.java
Ejecucin: java ar.com.cursojava.principal.Principal

www.belatrixsf.com |

IDE Generalidades de JAVA

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 |

IDE Generalidades de JAVA

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 |

IDE Generalidades de JAVA

Workspace
Carpeta de trabajo que contiene
un grupo de proyectos.
Puede cambiarse en
cualquier momento
(File Switch workspace).

www.belatrixsf.com |

IDE Generalidades de JAVA

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 |

IDE Generalidades de JAVA

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 |

IDE Generalidades de JAVA

Importar clases para su uso


Consiste en importar una clase dentro de otra para poder usarla dentro
de sta ltima.
Sintaxis: import paquetes.hasta.clase.NombreClase
import ar.com.gestion.abstracta.Vehculo;

Atajo en eclipse: Fix imports (Ctrl + Shift + O).

www.belatrixsf.com |

IDE Generalidades de JAVA

Operadores para tipos primitivos


Al asignar valores a una variable numrica pueden utilizarse literales
(un nmero). Puede forzarse un literal a un tipo numrico determinado:
F o f: fuerza un valor numrico al tipo float. Ej.: float flotante = 3f;
L o l: fuerza un valor numrico al tipo long. Ej.: long largo = 5l;
D o d: fuerza un valor numrico al tipo double: Ej.: double d = 4d;

www.belatrixsf.com |

IDE Generalidades de JAVA

Operadores para tipos primitivos


Los operadores para comparacin de nmeros son: < (menor), <= (menor o
igual), > (mayor), >= (mayor o igual), == (igual), != (distinto)
JAVA utiliza notacin infija para las operaciones matemticas. Los
operadores matemticos son: + (unario, signo positivo), - (unario, signo
negativo), + (suma), - (resta), * (multiplicacin), / (divisin), % (resto del
cociente), ++ (suma 1), (resta 1).
Para la precedencia de operaciones, se utilizan parntesis.
www.belatrixsf.com |

IDE Generalidades de JAVA

Operadores para tipos primitivos


Operadores a nivel de bits: <<, >> (rotacin a nivel de bits sin signo),
>>> (rotacin a nivel de bits con signo), ~ (complemento a nivel de bits), &
(AND a nivel de bits), | (OR a nivel de bits) y ^ (XOR a nivel de bits)
Operadores booleanos: == (igual), != (distinto), ! (complemento), & (AND), |
(OR), ^ (XOR), && (AND condicional), || (OR condicional).

www.belatrixsf.com |

IDE Generalidades de JAVA

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;

El valor de entero ser 1 (se pierde la parte decimal).

www.belatrixsf.com |

IDE Generalidades de JAVA

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.

public class Persona {


public Persona () {}
}

public class Persona {


public String nombre;
public Persona (String nombre) {
this.nombre = nombre;
}
}

www.belatrixsf.com |

Clases e interfaces

Creacin de un objeto
Se permite definir ms de un
constructor para una misma clase
(sobrecarga de constructores).

public class Persona {


public String nombre;
public Persona () {}
public Persona (String nombre) {
this.nombre = nombre;
}
}

Persona calc = new Persona();

Instanciacin usando new


Persona calc = new Persona(John Snow);

www.belatrixsf.com |

Clases e interfaces

Acceder miembros de un objeto


Para acceder a un atributo pblico de un objeto, utilizamos el operador .
(punto). Podemos asignar un valor al mismo mediante el operador =.
Persona persona = new Persona();
persona.nombre = "John Snow";

Para invocar un mtodo de un objeto, utilizamos el operador . (punto).


persona.setNombre("John

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

La clase Object contiene un mtodo (equals) que sirve para comparar


Objetos. El resultado de la siguiente comparacin devuelve VERDADERO
Float num1 = new Float(5);
Float num2 = new Float(5);
System.out.println(num1.equals(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 |

IDE Generalidades de JAVA

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

Para acceder al tercer elemento del arreglo podemos hacer:


Persona terceraPersona

= 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;

Para obtener la cantidad de elementos de un arreglo, usar length (devuelve


un int):
Persona[] personas = new Persona[10];
System.out.println(personas.length);

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

Inicializacin rpida de arreglos:


String[] arreglo = {"uno", "dos", "tres"};

www.belatrixsf.com |

IDE Generalidades de JAVA

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;

Herencia: palabra reservada


extends

public float sumar(float primerSumando,


float segundoSumando) {
return primerSumando + segundoSumando;
}
public float restar(float minuendo, float sustraendo) {
return minuendo - sustraendo;
}
public float multiplicar(float multiplicando,
float multiplicador) {
return multiplicando * multiplicador;
}
public float dividir(float dividendo, float divisor) {
return dividendo / divisor;
}
}

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

Una clase puede sobreescribir un mtodo de una clase padre, definiendo en su


cuerpo un mtodo con la misma firma que la del mtodo que quiere sobreescribir.
@Override
public float sumar(float primerSumando, float segundoSumando) {
return primerSumando + segundoSumando;
}

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 |

IDE Generalidades de JAVA

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;

public class CalculadoraBase {

public class CalculadoraAvanzada extends CalculadoraBase {

protected float multiplicar(float multiplicando,


float multiplicador) {
return multiplicando * multiplicador;
}

public float cuadrado(float numero) {


return multiplicar(numero, numero);
}
}

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;

public class CalculadoraBase {

public class CalculadoraAvanzada extends CalculadoraBase {

float multiplicar(float multiplicando,


float multiplicador) {
return multiplicando * multiplicador;
}

public float cuadrado(float numero) {


return multiplicar(numero, numero);
}
}

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;

public class CalculadoraBase {

public class CalculadoraAvanzada {

float multiplicar(float multiplicando,


float multiplicador) {
return multiplicando * multiplicador;
}
}

public float cuadrado(float numero) {


CalculadoraBase calc = new CalculadoraBase();
return calc.multiplicar(numero, numero);
}
}

www.belatrixsf.com |

Clases e interfaces

Consideracin: acceso a objetos


IMPORTANTE: Debe evitar accederse/asignar valores a los atributos de
un objeto en forma directa. Generalmente los atributos son privados y se
ofrecen mtodos pblicos para asignar y obtener valores al/del objeto.
Ejemplo:
public class Persona {
private String nombre;

public String getNombre() {


return nombre;
}
public void setNombre(String nombre) {
this.nombre = nombre;
}
}

www.belatrixsf.com |

Clases e interfaces

Modificadores de clase: static


static: indica que un elemento determinado se define a nivel de clase, no de
instancia. Puede accederse a los mismos sin necesidad de crear una
instancia. Se aplica solo a mtodos o atributos. Hay dos usos comunes para
este modificador:
Un atributo static este toma el mismo valor para todas las instancias
del objeto contenedor. Hay un nico objeto compartido.
Para el caso de un mtodo static, este puede invocarse sin necesidad
de instanciar la clase.
www.belatrixsf.com |

Clases e interfaces

Modificadores de clase: static - Ejemplo


package ar.com.cursojava.principal;
import ar.com.cursojava.utils.ImpresoraMensaje;
public class Principal {
public static void main(String[] args) {
String mensaje = args[0];
ImpresoraMensaje.imprimirMensaje(mensaje);
}
}
package ar.com.cursojava.utils;
public class ImpresoraMensaje {
public static void imprimirMensaje(String mensaje) {
System.out.println(mensaje);
}
}

www.belatrixsf.com |

Clases e interfaces

Modificadores de clase: final


final: identifica elementos que no van a cambiar, es decir, que son constantes.
se aplica a variables, clases y mtodos. Caractersticas de los atributos final:
Su valor solo puede ser inicializado al definir la constante o en
el constructor del objeto. Posteriormente no se cambia su valor.
Para los nombres se utilizan palabras completamente en maysculas.
Si hay ms de una palabra, separarlas con guiones bajos ( _ )
Por lo general, los atributos final son static ya que solo se
necesita 1 copia de un valor constante.
www.belatrixsf.com |

Clases e interfaces

Modificadores de clase: final - Ejemplo


package ar.com.cursojava.principal;
import ar.com.cursojava.utils.ImpresoraMensaje;
public class Principal {
public static void main(String[] args) {
String mensaje = args[0];
ImpresoraMensaje.imprimirMensaje(Version: + ImpresoraMensaje.VERSION_IMPRESORA);
ImpresoraMensaje.imprimirMensaje(mensaje);
}
}
package ar.com.cursojava.utils;
public class ImpresoraMensaje {
public static void imprimirMensaje(String mensaje) {
System.out.println(mensaje);
}
}

www.belatrixsf.com |

Clases e interfaces

Modificadores de clase: final


Caractersticas de los mtodos y clases final:
Un mtodo final no puede ser sobreescrito por clases hijas.
El estndar de nomenclatura para mtodos final es el mismo que
el utilizado para mtodos convencionales.
Una clase final indica que no puede ser extendida por otra clase.

www.belatrixsf.com |

Clases e interfaces

Modificadores de clase: abstract


Abstraen elementos comunes a ms de una clase.
Permiten definir operaciones comunes que deberan tener las clases hijas.
Cada hijo puede realizar de distinta forma la misma tarea (Polimorfismo).
No pueden ser instanciadas. Son un concepto abstracto.

www.belatrixsf.com |

Clases e interfaces

Modificadores de clase: abstract


Si una clase tiene un mtodo abstracto, ella debe ser abstracta.
Los mtodos abstractos no pueden tener cuerpo.
Una clase abstracta puede contener mtodos no abstractos.
Una clase que extiende una clase abstracta tiene la obligacin de
Implementar todos los mtodos de su padre, o debe ser abstracta ella
tambin.
www.belatrixsf.com |

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 |

IDE Generalidades de JAVA

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 |

IDE Generalidades de JAVA

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

Sentencia if - else resumida


Sirve para expresar en forma resumida una asignacin de valor a una
variable, cuyo valor depende de una condicin. Ejemplo:
package ar.com.cursojava.principal;
public class Principal {
public static void main(String[] args) {
long numero = Long.parseLong(args[0]);
String mensaje = (numero > 0L) ? "Mayor a 0" : "Menor a 0";
System.out.println(mensaje);
}
}

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:

Dia dia = Dia.valueOf(args[0]);


switch (dia) {
case LUNES:
System.out.println("Es lunes");
break;
case MARTES:
System.out.println("Es martes");
break;
case MIERCOLES:
System.out.println("Es miercoles");
break;
case JUEVES:
System.out.println("Es jueves");
break;
case VIERNES:
System.out.println("Es viernes");
break;
default:
System.out.println("Finde!!!");
break;
}

Parmetro de
programa

www.belatrixsf.com |

Clases e interfaces

Ejemplo sin
break
(cascada):

public class Principal {


public static void main(String[] args) {
Dia dia = Dia.valueOf(args[0]);
System.out.println("Cunto queda para el finde?\n");
switch (dia) {
case LUNES:
System.out.println("Te falta el lunes");
case MARTES:
System.out.println("Te falta el martes");
case MIERCOLES:
System.out.println("Te falta el mircoles");
case JUEVES:
System.out.println("Te falta el jueves");
case VIERNES:
System.out.println("Finalmente el viernes!!!");
break;
default:
System.out.println("Ya es finde!!!");
break;
}
}
}

www.belatrixsf.com |

IDE Generalidades de JAVA

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 |

IDE Generalidades de JAVA

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 |

IDE Generalidades de JAVA

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 |

IDE Generalidades de JAVA

Bucles for pasos de ejecucin


1- Se ejecuta el paso de inicializacin. Este paso solo se ejecuta una vez.
No es obligatorio: puede omitirse la sentencia (pero no el ;). Puede
inicializarse ms de una variable, separando las mismas con una coma.
2- Se ejecuta el cuerpo del bucle.
3- Se ejecuta el paso de actualizacin. Puede actualizarse el valor de
cualquier variable. Es opcional, puede omitirse (pero no el ; que lo precede).
4- Se comprueba la condicin. Si no se cumple, se sale del bucle. Caso
contrario, volver al paso 2.
www.belatrixsf.com |

IDE Generalidades de JAVA

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 |

IDE Generalidades de JAVA

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 |

IDE Generalidades de JAVA

Diferencia entre while y do while


public class Principal {
public static void main(String[] args) {
int x = 10;
while (x < 10) {
x++;
System.out.println("Vuelta: " + x);
}
}
}

No ingresa al cuerpo

public class Principal {


public static void main(String[] args) {
int x = 10;
do {
x++;
System.out.println("Vuelta: " + x);
} while (x < 10);
}
}

Ejecuta el cuerpo 1 vez

www.belatrixsf.com |

IDE Generalidades de JAVA

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 |

IDE Generalidades de JAVA

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 |

IDE Generalidades de JAVA

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 |

IDE Generalidades de JAVA

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 |

IDE Generalidades de JAVA

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

Collection Framework - Beneficios


Reduce el esfuerzo de desarrollo
Incrementa la performance y calidad del cdigo
Permite la relacionar diferentes aplicaciones que utilicen collections
casi sin esfuerzo solo necesitamos conocer el collection framework
Facilita implementaciones propias solo debemos implementar las
interfaces

www.belatrixsf.com |

Collections

Collection Framework - Collection


Collection: es la clase raz de todas las interfaces collection. Contiene
elementos. Se usa cuando se quiere mxima generalidad puede
Ser una referencia a cualquiera de sus subinterfaces. Java no provee
una implementacin directa, sino que implementa las subinterfaces.
public interface Collection<E> extends Iterable<E> {
int size();
boolean isEmpty();
boolean contains(Object element);
boolean add(E element);
boolean remove(Object element);
Iterator<E> iterator();

boolean containsAll(Collection<?> c);


boolean addAll(Collection<? extends E> c);
boolean removeAll(Collection<?> c);
boolean retainAll(Collection<?> c);
void clear();
Object[] toArray();
<T> T[] toArray(T[] a);
}

www.belatrixsf.com |

Collections

Collection Framework - Set


Set: es una Interfaz que extiende Collection (es una coleccin), que
no admite elementos duplicados. Ejemplos de implementacin:
HashSet (no garantiza orden de iteracin), TreeSet (ordena sus elementos
en base a su valor) y LinkedHashList (ordena sus elementos en base al
orden de insercin). Solo brinda acceso secuencial.
public interface Set<E> extends Collection<E> {
int size();
boolean isEmpty();
boolean contains(Object element);
boolean add(E element);
boolean remove(Object element);
Iterator<E> iterator();

boolean containsAll(Collection<?> c);


boolean addAll(Collection<? extends E> c);
boolean removeAll(Collection<?> c);
boolean retainAll(Collection<?> c);
void clear();
Object[] toArray();
<T> T[] toArray(T[] a);
}

www.belatrixsf.com |

Collections

Uso de Set Implementacin HashSet


package ar.com.gestion.principal;
import java.util.HashSet;
import java.util.Set;
public class Principal {
public static void main(String[] args) {
Set cadenas = new HashSet();
cadenas.add("Una cadena");
System.out.println(cadenas.size());
}
}

www.belatrixsf.com |

Collections

Collection Framework - List


List: coleccin ordenada, que provee acceso aleatorio y secuencial a
sus elementos. Permite duplicados. Agrega operaciones para agregar
elementos en una posicin determinada, obtener el elemento en una
posicin determinada, buscar, obtener sublistas, etc. Implementaciones:
ArrayList, LinkedList y Vector.
public interface List<E> extends Collection<E> {
E get(int index);
E set(int index, E element);
boolean add(E element);
void add(int index, E element);
E remove(int index);

boolean addAll(int index, Collection<? extends E> c);


int indexOf(Object o);
int lastIndexOf(Object o);
ListIterator<E> listIterator();
ListIterator<E> listIterator(int index);
List<E> subList(int from, int to);
}

www.belatrixsf.com |

Collections

Uso de List Implementacin ArrayList


package ar.com.gestion.principal;
import java.util.ArrayList;
import java.util.List;
public class Principal {
public static void main(String[] args) {
List cadenas = new ArrayList();
cadenas.add("Una cadena");
System.out.println(cadenas.get(0));
}
}

www.belatrixsf.com |

Collections

Recorriendo Sets y Lists: Iterator


Para iterar en un Set o un List, podemos utilizar la interfaz iterator. Un iterator
es un objeto que nos permite recorrer un collection en forma serial elemento
por elemento, en orden. La interfaz iterator contiene 3 elementos: hasNext,
next y remove. Para recorrer los elementos, tiene un puntero al elemento actual.
hasNext: devuelve un valor boolean que indica si quedan elementos.
next: devuelve el siguiente elemento, y avanza el puntero una posicin.
remove: quita del iterator el elemento actual.
www.belatrixsf.com |

Collections

Recorriendo Sets y Lists: Iterator


public class Principal {
public static void main(String[] args) {
Set cadenas = new HashSet();
cadenas.add("Una cadena");
cadenas.add("Otra cadena");

public class Principal {


public static void main(String[] args) {
List cadenas = new ArrayList();
cadenas.add("Una cadena");
cadenas.add("Otra cadena");

Iterator iterator = cadenas.iterator();


System.out.println(cadenas.size());

ListIterator iterator = cadenas.listIterator();


System.out.println(cadenas.size());

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

Recorriendo Lists: por ndice


public class Principal {
public static void main(String[] args) {
List cadenas = new ArrayList();
cadenas.add("Una cadena");
cadenas.add("Otra cadena");
for(int i = 0; i < cadenas.size(); i++) {
String cadena = cadenas.get(i).toString();
System.out.println(cadena);
}
}
}
www.belatrixsf.com |

IDE Generalidades de JAVA

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

Tipificar collections: Generics


Java permite tipificar el contenido de un collection utilizando generics (<>). De
esta forma se puede especificar de qu tipo ser el contenido del collection.
De esta forma, al obtener un elemento del mismo, en lugar de ser un Object
y tener que castear al tipo objetivo, el objeto obtenido ser del tipo especificado
en los Generics.
public class Principal {
public static void main(String[] args) {
List<String> cadenas = new ArrayList<String>();
cadenas.add("Una cadena");
cadenas.add("Otra cadena");
for(int i = 0; i < cadenas.size(); i++) {
System.out.println(cadenas.get(i));
}
}
}

www.belatrixsf.com |

Collections

Recorriendo Collections: foreach


Java provee un operador especial para iterar en los elementos de un
Collection: la construccin foreach. Esta construccin nos permite iterar
en un collection tipificado, en forma secuencial, sin necesidad de hacerlo
por ndice o de obtener su Iterator. Ejemplo de uso:
public class Principal {
public static void main(String[] args) {
Collection<Vehculo> vehiculos = new ArrayList<Vehculo>();
vehiculos.add(new Auto());
vehiculos.add(new Moto());
for(Vehculo vehiculo : vehiculos) {
vehiculo.encenderMotor();
System.out.println("\n");
}
}
}

www.belatrixsf.com |

IDE Generalidades de JAVA

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

Collection Framework - Map


Map: Un mapa es una coleccin que asocia un valor con una llave. Para
determinar en qu lugar del mapa se guarda un valor, se aplica una funcin
de hash a la llave. No pueden existir 2 valores con la misma llave. Insertar
Una llave ya existente, sobreescribe el valor actual. Implementacin ms
comn: HashMap.
public interface Map<K,V> {
V put(K key, V value);
V get(Object key);
V remove(Object key);
boolean containsKey(Object key);
boolean containsValue(Object value);
int size();
boolean isEmpty();
void putAll(Map<? extends K, ? extends V> m);

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 |

IDE Generalidades de JAVA

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

Aplicacin: 2 ventanas JFrame


import javax.swing.JFrame;
public class Principal {
public static void main(String[] args) {
JFrame ventana = new JFrame();
ventana.setTitle("Mi primera ventana");
ventana.setSize(300, 200);
ventana.setLocation(0, 0);
ventana.setVisible(true);
ventana.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
JFrame ventana2 = new JFrame();
ventana2.setTitle("Mi segunda ventana");
ventana2.setSize(300, 200);
ventana2.setLocation(400, 0);
ventana2.setVisible(true);
ventana2.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
}
}

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

Recuperar posicin (devolver Lpez):


model.getValueAt(1, 1);

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

Dilogos: JDialog - Ejemplos


Message Dialog: muestra una ventana con un mensaje, y un botn para
cerrarlo. Creacin: JOptionPane.showMessageDialog(contenedor,
Mensaje); (ver JavaDoc para ms detalles)

www.belatrixsf.com |

Collections

Dilogos: JDialog - Ejemplos


Input Dialog: muestra una ventana con un mensaje, un Input y un botn
para enviar el texto. El mtodo getInputValue nos permite obtener el
valor que introdujo el usuario. Creacin: JOptionPane.show
MessageDialog(contenedor, mensaje);

www.belatrixsf.com |

Collections

Dilogos: JDialog - Ejemplos


Confirm Dialog: muestra una ventana con 3 botones: S, No y Cancelar.
Las cadenas para cada valor son parametrizables. La creacin del
dilogo retornar un entero, dependiendo de la eleccin del usuario.
Dicho entero puede compararse contra 3 valores posibles: JOptionPane.
YES_OPTION, JOptionPane.NO_OPTION y JOptionPane.CANCEL.

www.belatrixsf.com |

Collections

Dilogos: JDialog - Ejemplos


Option Dialog: muestra una ventana con un mensaje y botones definidos
por nosotros. Creacin: JOptionPane.showOptionDialog (ver JavaDoc)
String[] opciones = {"S", "No", "Cancelar"};
JOptionPane.showOptionDialog(panel, "Quiere guardar sus cambios antes de salir?"
, "Guardar y salir", JOptionPane.YES_NO_CANCEL_OPTION,
JOptionPane.QUESTION_MESSAGE, null, opciones, null);

www.belatrixsf.com |

IDE Generalidades de JAVA

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

MDI: Ventanas internas


Se utilizan los siguientes componentes:
JDesktopPane: Panel que puede contener otras ventanas en su
interior.
JInternalFrame:Ventana que puede ser contenida dentro de un
JDesktopPane.
El contenedor JDesktopPane debe estar incluido dentro de una ventana
JFrame.
www.belatrixsf.com |

Collections

MDI: Ventanas internas


public class Principal extends JFrame {
public static void main(String[] args) {
JDesktopPane desktop = new JDesktopPane();
desktop.setSize(800, 200);
desktop.setVisible(true);

segundaInternalFrame.setSize(300, 100);
segundaInternalFrame.setVisible(true);
segundaInternalFrame.setLocation(400, 0);

JInternalFrame primeraInternalFrame =
new JInternalFrame("Ventana 1");
primeraInternalFrame.setSize(300, 100);
primeraInternalFrame.setVisible(true);

Principal ventana = new Principal();


ventana.add(desktop);
ventana.setSize(800, 200);
desktop.add(primeraInternalFrame);
desktop.add(segundaInternalFrame);

JInternalFrame segundaInternalFrame =
new JInternalFrame("Ventana 2");
segundaInternalFrame.setSize(300, 100);

ventana.setVisible(true);
}
}

www.belatrixsf.com |

Collections

MDI: Ordenando el cdigo


El cdigo anterior muestra una alarmante duplicacin de cdigo. Los
JInternalFrame creados son prcticamente idnticos. Tener un
componente propio que defina las propiedades por defecto que vamos
a utilizar para toda nuestra aplicacin sera deseable.
Podemos conseguir esto a travs de la herencia. Todas las clases que
hemos presentado hasta el momento pueden ser extendidas, y
podemos utilizar su constructor para establecer los parmetros que
deseemos.
www.belatrixsf.com |

Collections

MDI: Ordenando el cdigo


import javax.swing.JInternalFrame;
public class MiInternalFrame extends JInternalFrame {
public MiInternalFrame(String titulo, int x, int y,
int ancho, int alto) {
super(titulo);
this.setLocation(x, y);
this.setSize(ancho, alto);
this.setVisible(true);
}
}

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

MDI: Ordenando el cdigo


public class Principal extends JFrame {
public Principal(int alto, int ancho) {
this.setSize(alto, ancho);
this.setVisible(true);
}
public static void main(String[] args) {
MiDesktopPane desktop = new MiDesktopPane(800, 200);
MiInternalFrame primeraInternalFrame = new MiInternalFrame("Ventana 1", 0, 0, 300, 100);
MiInternalFrame segundaInternalFrame = new MiInternalFrame("Ventana 2", 400, 0, 300, 100);
Principal ventana = new Principal(800, 200);
ventana.add(desktop);
desktop.add(primeraInternalFrame);
desktop.add(segundaInternalFrame);
ventana.setVisible(true);
}
}

www.belatrixsf.com |

Collections

MDI: Mensajes internos


La contraparte de las ventanas de dilogo de SDI son las ventanas de
dilogo internas. Las mismas pueden ser creado mediante mtodos
similares de la clase JOptionPane, solo que generalmente los mtodos
tienen la palabra Internal para distinguirlos de las ventanas. Ejemplo:
JOptionPane.showInternalMessageDialog(desktop, "Mensaje interno");

www.belatrixsf.com |

IDE Generalidades de JAVA

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 |

IDE Generalidades de JAVA

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 |

IDE Generalidades de JAVA

Patrn de diseo: observador

www.belatrixsf.com |

IDE Generalidades de JAVA

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 |

IDE Generalidades de JAVA

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 |

IDE Generalidades de JAVA

Ventaja de Netbeans IDE para Swing


Netbeans proporciona herramientas para la construccin de interfaces
Swing mediante un muy completo editor grfico. El mismo es accesible
En la pestaa Design de una clase que represente un componente grfico.
Algunos apartados muy tiles que ofrece para los componentes son:
Properties: define valores para las propiedades del componente.
Events: permite definir eventos de distintos tipos para el componente
actual
www.belatrixsf.com |

IDE Generalidades de JAVA

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 |

IDE Generalidades de JAVA

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 |

IDE Generalidades de JAVA

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 |

IDE Generalidades de JAVA

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 |

IDE Generalidades de JAVA

JUnit framework - Ejemplo


import
import
import
import

static org.junit.Assert.*;
org.junit.After;
org.junit.Before;
org.junit.Test;

public class MiTestDeUnidad {


@Before
public void setUp() throws Exception {
}
@After
public void tearDown() throws Exception {
}
@Test
public void test() {
fail("Not yet implemented");
}
}

www.belatrixsf.com |

IDE Generalidades de JAVA

JUnit framework - Anotaciones


@Before: anota un mtodo que debe ejecutarse antes de comenzar
la ejecucin de cada mtodo de la clase actual
@After: anota un mtodo que debe ejecutarse al finalizar la ejecucin
de de cada mtodo de la clase actual
@Test: anota un mtodo que representa un test unitario. El test fallar
si lanza una excepcin (por ejemplo, si falla un assert).

www.belatrixsf.com |

IDE Generalidades de JAVA

JUnit framework - Anotaciones


@Ignore: anota un mtodo/clase que debe ignorarse al ejecutarse los
tests de unidad.
@BeforeClass: anota un mtodo que debe ser ejecutado una nica vez
antes de ejecutar los mtodos de la clase.
@AfterClass: anota un mtodo que debe ser ejecutado una nica vez
al terminar de ejecutar los mtodos de la clase.

www.belatrixsf.com |

IDE Generalidades de JAVA

JUnit framework - Anotaciones


@Test(timeout = 800): el parmetro timeout de un test de unidad
permite definir un tiempo mximo de ejecucin para el test. Si se excede
este tiempo, el test fallar. El valor es numrico, y representa tiempo en
milisegundos.
@Test(expected = NullPointerException.class): el parmetro expected
indica que la ejecucin del test de unidad espera que se lance la
excepcin especificada. El parmetro es una clase. En caso de que se
lance la excepcin, el test finaliza exitosamente. Sino, falla. Sirve para
probar casos que deberan lanzar una excepcin (ej.: 0 / 0).
www.belatrixsf.com |

IDE Generalidades de JAVA

JUnit framework - Asserts


Los tests de unidad son utilizados para probar que ciertas condiciones se
cumplen. Para realizar estas comprobaciones con poco esfuerzo, junit
incluye una clase llamada Asserts que proporciona mtodos que
pueden ser invocados estticamente, y son muy tiles.
El constructor de la clase Asserts es protegido debido a que est pensada
para ser utilizada a travs de sus mtodos estticos.

www.belatrixsf.com |

IDE Generalidades de JAVA

JUnit framework - Asserts


assertEquals(expected, actual): compara ambos valores, el
esperado y el resultado. Si son iguales no hace nada, si son
diferentes lanza una Excepcin (el test falla).
assertTrue / assertFalse: reciben como parmetro una expresin
Booleana. El primero compara con el valor true, el segundo con false.
Si falla la comparacin, lanza una excepcin.
assertNull / assertNotNull: reciben como parmetro un objeto y
revisa que sea / no sea nulo.
www.belatrixsf.com |

IDE Generalidades de JAVA

www.belatrixsf.com |

IDE Generalidades de JAVA

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 |

IDE Generalidades de JAVA

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 |

IDE Generalidades de JAVA

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 |

IDE Generalidades de JAVA

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 |

IDE Generalidades de JAVA

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 |

IDE Generalidades de JAVA

Excepciones
Object
Throwable

Exception

Error

RuntimeException
www.belatrixsf.com |

IDE Generalidades de JAVA

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 |

IDE Generalidades de JAVA

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;
}
}

Exception in thread "main" java.lang.ArithmeticException: / by zero


at EjemploExcepciones.dividirEnteros(EjemploExcepciones.java:12)
at EjemploExcepciones.main(EjemploExcepciones.java:4)

www.belatrixsf.com |

IDE Generalidades de JAVA

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 |

IDE Generalidades de JAVA

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 |

IDE Generalidades de JAVA

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 |

IDE Generalidades de JAVA


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) {
int resultado = 0;
try {
resultado = dividendo / divisor;
} catch (ArithmeticException e) {
System.out.print("No puede realizarse una divisin de enteros para los parmetros: ");
System.out.print(dividendo);
System.out.print(" / ");
System.out.print(divisor);
} finally {
System.out.println("Clculo terminado.");
}
return resultado;
}
}

www.belatrixsf.com |

IDE Generalidades de JAVA

Excepciones Atrapando ms de una


Podemos manejar ms de una excepcin en el mismo bloque try/catch. Si
manejamos la excepcin Exception, este bloque catch debe ser colocado al
final (ya que todas las excepciones extienden de Exception, y por lo tanto
siempre entrarn por ese bloque).
En lneas generales, una Excepcin puede ser manejada tambin por un
bloque catch que atrape a cualquiera de sus ascendientes.
El caso ms general, y que sirve para manejar cualquier excepcin, es un
bloque catch que atrape Exception.
www.belatrixsf.com |

IDE Generalidades de JAVA

Excepciones Atrapando ms de una


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) {
int resultado = 0;
try {
resultado = dividendo / divisor;
} catch (ArithmeticException e) {
System.out.print("No puede realizarse una divisin de enteros 0 sobre 0");
} catch (Exception ex) {
System.out.print("Ha ocurrido un error inesperado. Contacte con un administrador");
}
return resultado;
}
}

www.belatrixsf.com |

IDE Generalidades de JAVA

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 |

IDE Generalidades de JAVA

Nuestras propias excepciones


Podemos crear nuestras propias clases manejadoras de excepciones
cumpliendo con los requisitos que hemos explicado anteriormente:
Deben heredar directa o indirectamente de Throwable.
Pueden ser checked o unchecked (revisar de qu clase
extendemos).
Pueden tener atributos y mtodos, e incluso mostrar un mensaje
definido por nosotros (parmetro o definido en la clase)
www.belatrixsf.com |

IDE Generalidades de JAVA

Nuestras propias excepciones


public static int dividirEnteros(int dividendo, int divisor) {
int resultado = 0;
try {
resultado = dividendo / divisor;
} catch (ArithmeticException e) {
throw new DivisionPorCeroException(dividendo);
}

Unchecked

return resultado;
}

public class DivisionPorCeroException extends RuntimeException {


public DivisionPorCeroException(int dividendo) {
super("No se puede dividir " + dividendo + " entre 0.");
}
}

www.belatrixsf.com |

IDE Generalidades de JAVA

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 |

IDE Generalidades de JAVA

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 |

Вам также может понравиться