Download Seminario de JAVA - XP

Document related concepts
no text concepts found
Transcript
Seminario de JAVA
Your First Cup of Java
.http://java.sun.com/j2se/
Seminario de Java
1
Dept. LSI
Introducción a Java: Historia
(1990) Inicialmente denominado oak y asociado al
proyecto Green de Sun Microsystems, por el
investigador James Gosling.
Razones que llevaron a crear Java:
1. Necesidad de interfaces mucho más cómodas e
intuitivas.
2. Fiabilidad del código y facilidad de desarrollo.
3. Enorme diversidad de controladores electrónicos para
la programación de calculadoras, microondas,
televisión interactiva...
(1993) Tras la llegada de Van Hoff y Shaiao al
equipo de Java, se empieza a pensar en la
posibilidad de habilitar Java para Internet.
Seminario de Java
2
Dept. LSI
Introducción a Java: ¿Por qué Java?
(1995) Bill Joy juzgó que Internet podría llegar a ser el
campo adecuado para disputar a Microsoft su primacía
en el terreno del software, y vio en Java el instrumento
idóneo para llevar a cabo estos planes.
Algunas de las razones que llevaron a Bill Joy a pensar
que Java podría llegar a ser rentable son:
Simple. Ofrece la funcionalidad de otros lenguajes eliminando
características complejas como aritmética de punteros, macros,...
Orientado a Objetos. Todos los datos en Java son objetos.
Robusto. Realiza verificaciones en busca de problemas tanto en
tiempo de compilación como en tiempo de ejecución.
Arquitectura neutra. Compila el código fuente en un código
neutro independiente de la máquina.
Seminario de Java
3
Dept. LSI
Introducción a Java: ¿Por qué Java?
Distribuido. Facilita la interconexión entre maquinas a través
de las librerías.
Seguro. Elimina problemas de seguridad de otros lenguajes
como accesos directos a memoria, casting implícitos, ...
Portable. Los tipos de datos son los mismos
independientemente de la plataforma y máquina.
Interpretado. El código neutro es interpretado por la máquina
virtual de Java en tiempo de ejecución.
Multitarea. Incluye de modo nativo en el lenguaje mecanismos
para la ejecución de múltiples tareas y su sincronización
(threads, objetos de sincronización, ...).
Dinámico. Los módulos y librerías se conectan en tiempo de
ejecución.
Seminario de Java
4
Dept. LSI
Introducción a Java: ¿Por qué Java?
Java y otros lenguajes de programación
Extraido: “Learning Java” Pat Niemeyer et al. O'Reilly, 2000
Seminario de Java
5
Dept. LSI
Introducción a Java: El entorno
Editor
xx.java
Disco
(1)
Compilador
(1)
xx.class
Disco
(2)
(2)
Cargador
MEMORIA PRINCIPAL
(2)
Verificador
(2)
Interprete
.
.
.
(1) javac xx.java
(2) java xx/appletviewer xx.html
Seminario de Java
6
Dept. LSI
Introducción a Java: El entorno
Un programa Java puede ser:
Una aplicación: Programa que se ejecuta
independientemente de cualquier browser.
Un applet: Programa incluido dentro de un
documento html. Su ejecución se realiza cuando
un web browser carga la página web que contiene
el applet, o cuando se utiliza un visualizador de
applets (appletviewer).
<applet code="Clase.class" width="34" height="10">
</applet>
Un programa tiene una estructura u otra en función
de que sea una aplicación o un applet.
Seminario de Java
7
Dept. LSI
Introducción a Java: El entorno
Estructura de un applet
¡mport java.awt.Graphics; // importar la clase Graphics;
import javax.swing.JApplet; // importar la clase JAppelt
public class EjemploApplet extends Applet
{
... // definición de los elementos de la interfaz de usuario
public void init(){ // inicialización del applet, se invoca automáticamente una única
vez
....
}
public void start() { // Se invoca cade vaz que se visualiza el applet
...
}
public void paint( Graphics g){ // Muestra los resultados
...
}
.... // metodos manejadores de eventos
public void stop(){ // Se invoca cuando dejemos de visualizar un applet
...
}
public void destroy() { // Se invoca cuando deja de usarse el applet para liberar
recursos
...
}
}
Seminario de Java
8
Dept. LSI
Introducción a Java: El entorno
Estructura mínima de una aplicación
public class EjemploAplicación
{
... // definición de las variables de instancia.
....// definición de los métodos de instancia de la clase.
public static void main(String args[])
{
...
}
}
Seminario de Java
9
Dept. LSI
Introducción a Java: El
Introducción
El lenguaje
lenguaje
1. Propiedades básicas.
4. Ocultar la implementación.
1. Variables y tipos de datos.
2. Los operadores.
3. El flujo de control.
2. Objetos y clases.
1. Las Interfaces.
2. Los paquetes.
5. Contenedores de objetos.
1. Concepto y tipos de
contenedores.
1. El concepto de objeto y clase.
2. Definición de una clase.
3. Construcción, uso y destrucción de
objetos.
4. Las clases Array y String.
3. Herencia y polimorfismo.
2. Taxonomía de los
contenedores.
3. Funcionalidad de las
colecciones.
4. Funcionalidad de los Map.
1. Reutilización de código.
2. Concepto de herencia.
3. Definición de un jerarquía de
herencia.
4. Conceptos asociados a la herencia.
5. Concepto de polimorfismo.
Seminario de Java
6. Entrada/Salida desde terminal.
7. Manejo de excepciones.
10
Dept. LSI
Java (El lenguaje):Propiedades básicas
1.1.Variables y tipos de datos
Las variables almacenan objetos o “valores puros”.
Tipos de datos.
Tipos primitivos (valores puros).
Tipos referencia (objetos).
Toda declaración de variable debe tener su nombre y su
tipo.
tipo variable (inicialización).
String s = new String('abc'); // se crea la referencia s
y se construye un objeto String que es almacenado en
el montículo(heap) y es referenciado por s.
int x =20; // se crea la variable automática x y se
guarda en la pila(stack) junto con su valor.
Seminario de Java
11
Dept. LSI
Java (El lenguaje):Propiedades básicas
1.1.Variables y tipos de datos
A) Tipos primitivos
Tipo primitivo
Tamaño/formato
Descripción
boolean
--true o false
char
16 bit (Unicode)
un carácter simple
byte
8 bit c.2
entero
short
16 bit c.2
entero
int
32 bit c.2
entero
long
64 bit c.2
entero
float
32 bit SP
punto flotante
double
64 bit DP
punto flotante
char c = 'x';
Character c1 = new Character(c);
Character c1 = new Character('x');
char c = c1.charValue();
Seminario de Java
12
Dept. LSI
Java (El lenguaje):Propiedades básicas
1.1.Variables y tipos de datos
B) Ámbito de variables y vida de los objetos
El ámbito es trozo de código desde el que la variable
puede ser accedida.
{
String s = new String(“abc”);
.... s...
} // fin del ámbito de s
El objeto creado y almacenado en el montículo sigue
existiendo pero no puede ser accedido desde s.
¿Cuándo deja de existir el objeto? Cuando actúe el
recolector de basura.
Seminario de Java
13
Dept. LSI
Java (El lenguaje):Propiedades básicas
1.1.Variables y tipos de datos
C) Categorías de variables según su ámbito
Variables miembro de clase o de objeto, declaradas en la
clase.
class A
{ private int x;
...
} // x es accesible desde el código de la clase (métodos)
Variables locales declaradas dentro de un método o
bloque de código (ejemplo pag. 13).
Parámetros de los métodos (argumentos formales).
void func(String s)
{ String s1 = new String(s); // s1 variable local
...s ...
} // fin del ámbito de s
Seminario de Java
14
Dept. LSI
Java (El lenguaje):Propiedades básicas
1.2. Los operadores.
Un operador realiza alguna función entre operandos (uno o
dos)
Tipo de operador
Unario
Aritméticos
Relacional
Lógicos (y de bit)
Condicional ternario
Asignación
Seminario de Java
Operador
+ - ++ -* / % + - << >>
> < >= <= == !=
! && || & | ^ ~
?: (A>B? X:Y)
= (y asignaciones compuestas *=, ..)
15
Dept. LSI
Java (El lenguaje):Propiedades básicas
1.3. El flujo de control.
Tipo estamento
Toma de decisión
Iteraciones
Otros
if (expresión condicional)
sentencia;
if (expresión condicional)
sentencia;
else
sentencia;
Seminario de Java
Estamento
if-else, switch
While, do-while, for
Return, break, continue
If (x >5)
if( y >5)
System.out.println(“x >5; y > 5”);
else
System.out.println(“x >5; y<=5”);
if (x >5)
{if( y >5)
System.out.println(“x >5; y > 5”);}
else
System.out.println(“x <=5”);
16
Dept. LSI
Java (El lenguaje):Propiedades básicas
1.3. El flujo de control.
switch(selector){
case valor1: sentencia1; break;
case valor2: sentencia2; break;
...
default: sentencia3;
}
if(selector== valor1)
sentencia1;
else
if (selector ==valor2)
sentencia2;
....
else
sentencia 3;
switch (dia) {
case 1: System.out.println(“lunes”); break;
case 2: System.out.println(“martes”); break;
case 3: System.out.println(“miercoles”); break;
case 4: System.out.println(“jueves”); break;
case 5: System.out.println(“viernes”); break;
case 6: System.out.println(“sabado”); break;
case 7: System.out.println(“domingo”); break;
default: System.out.println(“dia ilegal”); break;
}
Seminario de Java
17
Dept. LSI
Java (El lenguaje):Propiedades básicas
1.3.El flujo de control.
while(Expresión-condicional)
sentencia;
public class PruebaWhile {
public static void main(String [] args)
{
int count = 1;
while (count<=10){
System.out.println(count %2 == 1? "*****": "-----");
count++;
}
}
}
Seminario de Java
18
Dept. LSI
Java (El lenguaje):Propiedades básicas
1.3.El flujo de control.
do
sentencia;
while(Expresión-condicional);
public class PruebaDoWhile {
public static void main(String [] args)
{
int count = 1;
do {
System.out.println(count %2 == 1? "*****": "-----");
count++;
}while (count<=10);
}
}
Seminario de Java
19
Dept. LSI
Java (El lenguaje):Propiedades básicas
1.3.El flujo de control.
for (inicialización; expresión-condicional; incremento)
sentencia;
public class TablaMultiplicar {
public static void main (String [] args){
for (int x = 1; x <=9;x++)
System.out.print("\t" + x);
System.out.println();
System.out.println();
for (int x= 1; x<=9; x++){
System.out.print(x);
for (int y= 2; y<=9; y++)
System.out.print("\t" + x*y);
System.out.println();
}
}
}
Seminario de Java
20
Dept. LSI
Java (El lenguaje):Propiedades básicas
1.3.El flujo de control.
return expresión
// indica devolución de control y de objetos, cuando
// no es void, en los métodos
public class PruebaReturn {
public static int prueba (int i, int j){
if (i<j) return 1;
else if(i>j) return -1;
else return 0;
}
public static void main (String [] args){
Random aleatorio = new Random();
int k,l;
l = aleatorio.nextInt() % 100;
k = aleatorio.nextInt() % 100;
System.out.println(prueba(l,k));
}
}
Seminario de Java
21
Dept. LSI
Java (El lenguaje):Propiedades básicas
1.3.El flujo de control.
break; // salida de un bucle a la siguiente sentencia de fin de iteración
continue; // salida de un iteración al principio del bucle para
// comenzar la siguiente iteración
public class PruebaBreakContinue {
public static void main (String [] args){
int i=0;
while (true){
i++;
if (i == 10) break;
if (i%2==1) continue;
System.out.println(i);
}
}
}
Seminario de Java
22
Dept. LSI
Java (El lenguaje):Los objetos y las clases.
2.1 El concepto de objeto y clase.
Objeto: Entidad software con capacidad de procesamiento,
el cual se caracteriza por una identidad, un estado y un
funcionamiento.
Estado
Funcionamiento
Seminario de Java
23
Dept. LSI
Java (El lenguaje):Los objetos y las clases.
2.1 El concepto de objeto y clase.
Los objetos se relacionan entre si: El estado de un objeto
puede estar definido por el estado de otros objetos que
forman parte de él.
Otro objeto ...
Seminario de Java
24
Dept. LSI
Java (El lenguaje):Los objetos y las clases.
2.1 El concepto de objeto y clase.
Los objetos se comunican entre si a través del envío de
mensaje.
Ob1
Ob2
Ob2.ope2()
Objeto emisor
Seminario de Java
Objeto receptor
25
Dept. LSI
Java (El lenguaje):Los objetos y las clases.
2.1 El concepto de objeto y clase.
Una Clase es la especificación de un conjunto de objetos
que poseen las mismas características: mismos atributos
que definen su estado y misma capacidad de procesamiento
que define su funcionamiento.
Las clases en Java son plantillas que nos definen a un
conjunto de objetos que cumplen con lo especificado en la
clase.
En Java la unidad de programación es la clase.
Para la construcción de objetos (unidad de procesamiento
en Java) se recurre a la instanciación de la clase.
String s = new String(“abc”);
Seminario de Java
26
Dept. LSI
Java (El lenguaje):Los objetos y las clases.
2.2. Definición de una clase.
La definición de una clase se compone de dos partes:
declaración { cuerpo}
La declaración tiene la siguiente sintaxis:
[public][abstract|final] class NomClase
[extends NomSuperClase]
[implements NomInterface, ...]
public: clase que puede ser usada fuera del paquete en el
que está definida.
abstract: clase que no puede ser instanciada, no pueden
construirse objetos de esa clase.
final: clase no puede tener subclases en una relación de
herencia.
extends: define la relación de herencia.
implements: indica la interface que implementa la clase.
Seminario de Java
27
Dept. LSI
Java (El lenguaje):Los objetos y las clases.
2.2. Definición de una clase.
El cuerpo de la clase se compone de:
Declaración de variables miembro.
Implementación de los métodos miembro.
Sintaxis de una declaración de variable miembro:
[especificadorAcceso][static][final] tipo nomVar [=inicialización];
especificadorAcceso: Definen el acceso a la variable.
static: Variable miembro de clase.
final: Variable que es una constante.
inicialización: valor que toma esa variable en su
definición.
Seminario de Java
28
Dept. LSI
Java (El lenguaje):Los objetos y las clases.
2.2. Definición de una clase.
Implementación de los métodos miembro.
declaración {cuerpo}
Sintaxis de la declaración:
[especificadorAcceso] [static] [abstract|final] returnType
nomMetodo ([listParametros]) [throws listaExcepciones];
especificadorAcceso: Definen el acceso al método.
static: Método miembro de clase.
abstract: Método sin implementación.
final: Método que no puede ser redefinido.
throws: especificación del tipo de excepciones que
puede lanzar el método.
Seminario de Java
29
Dept. LSI
Java (El lenguaje):Los objetos y las clases.
2.2. Definición de una clase.
El cuerpo contiene el código Java que implementa el
método, en particular:
Declaración e inicialización de variable locales.
Envío de mensajes a otros objetos, que sean visibles
desde ese método.
Dentro del código de un método, se puede hacer uso de
las pseudovaribles this y super. Tanto this como super
referencia al objeto receptor del mensaje.
this.oper(); // envío de mensaje al propio objeto receptor.
super.oper(); // igual que this salvo que oper() debe
// buscarse a partir de la superclase.
Seminario de Java
30
Dept. LSI
Java (El lenguaje):Los objetos y las clases.
2.2. Definición de una clase.
Especificador de acceso
private
.package
.protected
.public
La clase La subclaseEl paquete La demás
X
X
X
X
X
X
X
X
X
X
Valor por defecto del modificador de acceso es package
Seminario de Java
31
Dept. LSI
Java (El lenguaje):Los objetos y las clases.
2.2. Definición de una clase.
Devolución de objetos por un método
(returnType)
Tipo del dato u objeto que se devuelve o void si no se
devuelve nada.
En la implementación del método se usa el operador
return para devolver un objeto.
Cuando se devuelve un tipo interface, el objeto devuelto
debe pertenecer a alguna de la clases que implementa la
interface.
Se devuelve una refencia al objeto.
Seminario de Java
32
Dept. LSI
Java (El lenguaje):Los objetos y las clases.
2.2. Definición de una clase.
Nombre del método
(nomMetodo)
Sobrecarga de métodos: Múltiples métodos dentro de la
misma Clase con el mismo nombre, se diferencian por el
número y tipo de los argumentos.
Los constructores:
Encargados de la construcción e inicialización de
objetos.
Deben tener el mismo nombre de la clase.
Sólo son llamados con el operador new.
Pueden estar sobrecargados.
Una clase puede redefinir métodos heredados,
manteniendo su nombre, el tipo devuelto, y la lista de
parámetros.
Seminario de Java
33
Dept. LSI
Java (El lenguaje):Los objetos y las clases.
2.2. Definición de una clase.
Paso de información en los envíos de mensajes.
En los envíos de mensaje, llamada a métodos de un objeto,
los objetos son pasados por valor.
Los valores de tipos primitivos no cambian su valor fuera
del ámbito del método.
En un envío de mensaje, a los objetos pasados como
parámetros, no se le podrá cambiar la referencia, pero sí
modificar el estado del objeto usando sus métodos.
Seminario de Java
34
Dept. LSI
Java (El lenguaje):Los objetos y las clases.
2.2. Definición de una clase.
.package ejemplo1;
import java.lang.*;
// Clase Punto
public class Punto {
private float x; // coordenada x
private float y; // coordenada y
//Constructor
public Punto(float xValue, float
yValue) {
x=xValue;
y=yValue;
}
public Punto(Punto p0){
x = p0.getX();
y = p0.getY();
}
Seminario de Java
// Modificadores
public void setX(float xValue) {
x=xValue;
}
public void setY(float yValue) {
y=yValue;
}
// Consultores
public float getX() {
return x;
}
public float getY() {
return y;
}
public String toString() {
return "[" + getX() + "," + getY() + "]";
}
35
Dept. LSI
Java (El lenguaje):Los objetos y las clases.
2.2. Definición de una clase.
package ejemplo1;
import java.lang.*;
// Clase Rectangulo
public class Rectangulo {
private Punto esqSupDer;// esquina superior derecha
private Punto esqInfIzq; // esquina inferior izquierda
//Constructores
public Rectangulo(float x1, float y1, float x2, float y2) {
esqSupDer = new Punto(x1,y1);
esqInfIzq = new Punto(x2,y2);
}
public Rectangulo(Punto p1, Punto p2){
esqSupDer = new Punto(p1);
esqInfIzq = new Punto(p2);
}
Seminario de Java
36
Dept. LSI
Java (El lenguaje):Los objetos y las clases.
2.2. Definición de una clase.
// Modificadores
public void trasladar(Punto p0) {
esqSupDer.setX(p0.getX() +esqSupDer.getX());
esqSupDer.setY(p0.getY() +esqSupDer.getY());
esqInfIzqr.setX(p0.getX() +esqInfIzq.getX());
esqInfIzqr.setY(p0.getY() +esqInfIzq.getY());
}
public void setEsqSup(Punto p0){
esqSupDer.setX(p0.getX());
esqSupDer.setY(p0.getY());
}
public void setEsqInf(Punto p0){
esqInfIzqr.setX(p0.getX());
esqInfIzqr.setY(p0.getY());
}
Seminario de Java
37
Dept. LSI
Java (El lenguaje):Los objetos y las clases.
2.2. Definición de una clase.
// Consultores
public float altura() {
return esqSupDer.getY() - esqInfIzq.getY();
}
public float anchura(){
return esSupDer.getX() - esqInfIzq.getX();
}
public float area(){
return this.altura() * this.anchura();
}
public float perimetro(){
return (this.altura()) *2 + ((this.anchura()) * 2;
}
public String toString() {
return esqInfIzq.toString() + " , " +
esqSupDer.toString();
}
Seminario de Java
38
Dept. LSI
Java (El lenguaje):Los objetos y las clases.
2.3. Construcción, uso y destrucción de objetos.
Orden en el proceso de construcción/inicialización de
Objetos.
1. La primera vez que se referencia una clase, el
interprete de Java la busca y la carga en memoria.
2. Se ejecutan (una única vez) todos sus inicializadores
de sus variables estáticas (static).
3. Cuando se construye un objeto de la clase, se guarda
suficiente espacio en la memoria dinámica
(montículo) para almacenar el objeto.
4. Se inicializan todas sus variables miembro de forma
automática.
5. Se ejecutan la inicialización indicada en la definición
de sus variables miembro.
6. Se ejecuta el constructor (inicializador).
Seminario de Java
39
Dept. LSI
Java (El lenguaje):Los objetos y las clases.
2.3. Construcción, uso y destrucción de objetos.
Class A1 {
A1(int valor)
{
System.out.println("Constructor A1 con " +
valor);
}}
class B1 {
RESULTADO
A1 a1 = new A1(1);
B1 () {
Antes de construir b de B1
System.out.println("Entrada constructor B1");
Constructor A1 con 0
a2 = new A1(3);
System.out.println("Salida constructor B1"); Constructor A1 con 1
Constructor A1 con 2
}
Entrada Constructor de B1
A1 a2 = new A1(2);
Constructor A1 con 3
static A1 as = new A1(0);
Salida constructor B1
}
Despues de construir b de B1
public class C1 {
public static void main(String[] args) {
System.out.println("Antes de construir b de B1");
B1 b = new B1();
System.out.println("Despues de construir b de
B1");
}}
Seminario de Java
40
Dept. LSI
Java (El lenguaje):Los objetos y las clases.
2.3. Construción, uso y destrucción de objetos.
Class A1 {
A1(int valor)
{
System.out.println("Constructor A1 con " +
valor);
}}
class B1 {
RESULTADO
A1 a1 = new A1(1);
B1 () {
System.out.println("Entrada constructor B1"); Constructor A1 con 0
Antes de construir b de B1
a2 = new A1(3);
System.out.println("Salida constructor B1"); Constructor A1 con 1
Constructor A1 con 2
}
A1 a2 = new A1(2);
Entrada Constructor de B1
static A1 as = new A1(0);
Constructor A1 con 3
}
Salida constructor B1
public class C1 {
Despues de construir b de B1
public static void main(String[] args) {
A1 a = B1.as;
System.out.println("Antes de construir b de B1");
B1 b = new B1();
System.out.println("Despues de construir b de
B1");
}}
Seminario de Java
41
Dept. LSI
Java (El lenguaje):Los objetos y las clases.
2.3. Construcción, uso y destrucción de objetos.
El uso de un objeto es siempre a través del envío de mensaje a
ese objeto.
a.mens(parametros)
En un momento determinado de la ejecución del programa
tenemos dos estructuras (grafos dirigidos):
una que contiene la relaciones estructurales entre
objetos (estructura estática),
y otra que contiene las relaciones de uso a través del
envío de mensaje (estructura dinámica).
La destrucción de un objeto se realiza de forma automática por
parte del recolector de basura. Cuando un objeto deja de ser
referenciado, el recolector de basura lo elimina de la memoria
dinámica. (B. Eckel 2002, p-147-150).
Un objeto deja de estar referenciado cuando la variable deja de
estar en su ámbito o cuando se le asigna otro objeto.
Seminario de Java
42
Dept. LSI
Java (El lenguaje):Los objetos y las clases.
2.3. Construcción, uso y destrucción de objetos.
Class A1 {
A1(int valor)
{
}
public void fA1 (String c){
System.out.println("control en " + c + " de A1 con
fA1");
}}
class B1 {
A1 a1 = new A1(1);
static A1 as = new A1(0);
public void fB1(String c) {
System.out.println("control en " + c + " de B1 con
fB1");
A1 alocal = new A1(6);
a1.fA1("a1");
RESULTADO
alocal.fA1("alocal");
}}
control en b de B1 con fB1
public class C1 {
control en a1 de A1 con fA1
public static void main(String[] args) {
control en alocal de A1 con fA1
A1 localMain = B1.as;
control en localMain de A1 con fA1
B1 b = new B1();
b.fB1("b");
localMain.fA1("localMain");
}}
Seminario de Java
43
Dept. LSI
Java (El lenguaje):Los objetos y las clases.
2.3. Construcción, uso y destrucción de objetos.
Estructura estática
Estructura dinámica
.b
.a1
C1
.llocalMain
B1
Seminario de Java
.aLocal
.as
44
Dept. LSI
Java (El lenguaje):Los objetos y las clases.
2.4. Las clases Array y String.
La clase Array es una clase Contenedora de objetos del mismo
tipo, accedidos a través de un índice y de tamaño (cantidad de
objetos que puede almacenar) fijo.
Declaración de variable de tipo Array y construcción de objetos.
Sin inicialización explícita:
int[] arr1 = new int[tamaño]
Con inicialización explicita de sus elementos:
int[] arr2 = {1, 2, 3, 4}
En general, para objetos de tipo A:
A[] a1 = new A[tamaño] // inicializados a null
A[] a1 ={new A(,..), new A(,..),...}
Seminario de Java
45
Dept. LSI
Java (El lenguaje):Los objetos y las clases.
2.4. Las clases Array y String.
Funcionalidad de los objetos Array.
Consultor del numero de elemento de un objeto Array.
A[] a = new A[tamaño];
int longitud = a.length ;
Operador de acceso, [], a sus elementos:
A a1 = a[i] // consultor con 0<=i <tamaño;
a[i] = a1; // modificador;
Seminario de Java
46
Dept. LSI
Java (El lenguaje):Los objetos y las clases.
2.4. Las clases Array y String.
Ejemplos de Array
public class SumArray {
public static void main(String[] args) {
int[] arr = {1,2,3,4,5,6,7,8,9};
int total = 0;
for (int i = 0; i<arr.length; i++)
total += arr[i];
System.out.println("total = " + total);
}
}
Seminario de Java
47
Dept. LSI
Java (El lenguaje):Los objetos y las clases.
2.4. Las clases Array y String.
import javax.swing.*;
import java.lang.*;
public static void bubbleSort(int arr[]){
for( int j = 1; j< arr.length; j++) {
for(int k =0; k<arr.length-1; k++) {
if (arr[k] > arr[k+1])
this.swap(arr,k,k+1);
}
}
}// fin del método bubbleSort
public class BubbleSort {
public static void main(String args[]) {
JTextArea areaSalida = new JTextArea();
String salida = "array antes de ordenar \n";
int[] array ={3,2,4,20,5,50,1,6,8,2,0,50};
for(int i=0; i<array.length; i++)
salida += " " + array[i];
public static void swap(int ar[], int pr, int se)
{
int inter;
inter =ar[pr];
ar[pr]= ar[se];
ar[se]= inter;
}// fin del método swap
bubbleSort(array);
salida += "\n\narray despues de ordenados
\n";
for(int i=0; i<array.length; i++)
salida += " " + array[i];
areaSalida.setText(salida);
JoptionPane.showMessageDialog(null,
outputArea, "ordenar array",
JOptionPane.INFROMATION_MESSAGE);
} // fin del main
Seminario de Java
48
}// fin de la clase
Dept. LSI
Java (El lenguaje):Los objetos y las clases.
2.4. Las clases Array y String.
import javax.swing.*;
import java.lang.*;
import java.awt.*;
Public void bubbleSort(int arr[]){
for( int j = 1; j< arr.length; j++) {
for(int k =0; k<arr.length-1; k++) {
if (arr[k] > arr[k+1])
this.swap(arr,k,k+1);
}
}
}// fin del método bubbleSort
public class BubbleSort extends JApplet {
public void init() {
JTextArea areaSalida = new JTextArea();
Container container = getContentPane();
container.add(areaSalida);
String salida = "array antes de ordenar \n";
int array[] ={3,2,4,20,5,50,1,6,8,2,0,50};
for(int i=0; i<array.length; i++)
salida += " " + array[i];
this.bubbleSort(array);
salida += "\n\narray despues de ordenados
\n";
public void swap(int ar[], int pr, int se){
int inter;
inter =ar[pr];
ar[pr]= ar[se];
ar[se]= inter;
}// fin del método swap
}// fin de la clase
for(int i=0; i<array.length; i++)
salida += " " + array[i];
areaSalida.setText(salida);
} // fin del init
Seminario de Java
49
Dept. LSI
Java (El lenguaje):Los objetos y las clases.
2.4. Las clases Array y String.
Array bidimensionales
Columna 0 Columna 1 Columna2 Columna 3
Fila 0
Fila 1
A[0][0]
A[1][0]
A[2][0]
A[0][1]
A[1][1]
A[2][1]
A[0][2]
A[1][2]
A[2][2]
A[0][3]
A[1][3]
A[2][3]
ClaseA A[][] =new ClaseA[3][4];
ClaseA A[][] = {{1,2,3,4},{5,6,7,8},{9,0,10,11}};
Columna 0Columna 1Columna2 Columna 3
Fila 0
A[0][0]
A[0][1]
Fila 1
A[1][0]
A[1][1]
A[0][2]
A[0][3]
ClaseA A[][] =new ClaseA[][];
A[0]= new ClaseA[4]; A[1] =new ClaseA[2];
Seminario de Java
50
Dept. LSI
Java (El lenguaje):Los objetos y las clases.
2.4. Las clases Array y String.
import javax.swing.*;
import java.lang.*;
public class bidimensional {
public static void main(String[] args) {
String salida = "\t0 \t1 \t2 \n";
int arr[][] = new int[3][3];
for (int i = 0; i< arr.length; i++)
for (int j= 0; j< arr[0].length; j++)
arr[i][j] = i*j;
for (int k =0; k < arr.length; k ++)
{salida += k + "\t";
for(int l =0; l<arr[0].length; l++)
salida += arr[k][l] + "\t";
salida += "\n";
};
JTextArea areaSalida = new JTextArea();
areaSalida.setText(salida);
JOptionPane.showMessageDialog(null, areaSalida, "bidimensional prueba",
JoptionPane.INFORMATION_MESSAGE);
}}
Seminario de Java
51
Dept. LSI
Java (El lenguaje):Los objetos y las clases.
2.4. Las clases Array y String.
La clase String es una clase que modela objetos de tipo cadena de
caracteres.
Declaración de variable de tipo String y construcción de objetos.
Sin inicialización explícita:
String s1 = new String();
Con inicialización explícita de sus elementos:
String s2 = new String(s);
String s3 = ''un string'';
Seminario de Java
52
Dept. LSI
Java (El lenguaje):Los objetos y las clases.
2.4. Las clases Array y String.
Funcionalidad de la clase String.
Consultores
String s1 = new String(''prueba de los String'');
Longitud de un String: length
int l = s1.length;
Obtener un carácter: charAt(int)
char c = s1.charAt(i)
Obtener un rango de caracteres: getChars(int,int,char[],
int)
char[] arrChar = new char[6];
s1.getChars(0,5,arrChar,0);
Seminario de Java
53
Dept. LSI
Java (El lenguaje):Los objetos y las clases.
2.4. Las clases Array y String.
Comparando String
String s1 = new String(''un string'');
String s2 = ''hola'';
String s3 = new String(''hola'');
Igualdad de objetos:
s2.equals(s3) // true
s2.equalsIgnoreCase(''Hola'') // true
s1.compareTo(s2) // 1
s2.compareTo(s1) // -1
s2.compareTo(s3) // 0
Identidad de objetos: == String
s2 == s3 // false
s2 == ''hola'' // true
Seminario de Java
54
Dept. LSI
Java (El lenguaje):Los objetos y las clases.
2.4. Las clases Array y String.
Localizando caracteres y substring.
String s1 = ''dekjfdhf dejsfaou sahoun string'';
s1.indexOf('d') // 0
s1.lastIndexOf('d') // 8
s1.indexOf('y') // -1
s1.indexOf(''de'') // 0
s1.lastIndexOf(''de'') //9
s1.lastIndexOf(''yyy'') // -1
Extraer substring:
s1.substring(25) // ''tring''
s1.substring(2,6) // ''kjfd''
Concatenar String
String s1= ''buenos '';
String s2 = ''dias'';
String s3 = s1.concat(s2) // ''buenos dias''
Seminario de Java
55
Dept. LSI
Java (El lenguaje):Los objetos y las clases.
2.4. Las clases Array y String.
Modificadores
String s1 = ''hola''
s1.replace('h','H') // ''Hola''
s1.toUpperCase() // ''HOLA''
s1.toLowerCase() // ''hola''
char[] arrChar = s1.toCharArray() // ['h','o','l','a']
Convertir tipos primitivos a String: El método static
valueOf de la clase String.
String.valueOf(tipoPrimitivo);
String.valueOf(73); // ''73''
Seminario de Java
56
Dept. LSI
Java (El lenguaje):Herencia y polimorfismo.
3.1. Reutilización de código.
Dos forma de reutilización de código:
La composición: Creación y uso de objetos ya
definidos dentro de la clase que estamos definiendo
(reutilización de la funcionalidad del código).
Ejemplo, en la definición del Rectángulo el uso de
Punto.
La herencia: Definición de una clase a partir de otra
que ya existe, añadiéndole nuevas propiedades.
NuevaClase = ClaseExistente + nuevas propiedades
Añadiendo algo de código podemos tener un objeto
con estado y funcionalidad más compleja que el
objeto base.
Seminario de Java
57
Dept. LSI
Java (El lenguaje):Herencia y polimorfismo.
3.2. Concepto de herencia.
La herencia es el mecanismo que nos proporcionan los
lenguajes de programación para modelar la relación
''es-un''.
Cuando podemos expresar con facilidad que la clase “B
es un A” entonces debemos hacer uso de la herencia
para implementar esa relación.
A la clase B se le denomina subclase y a A superclase.
La herencia puede ser:
Simple: una subclase sólo tiene una superclase.
Múltiple: una subclase puede tener más de una
superclase.
Seminario de Java
58
Dept. LSI
Java (El lenguaje):Herencia y polimorfismo.
3.3. Definición de una jerarquía de herencia en Java.
Cuando tengamos definidas todas las relaciones ''es-un'' en
nuestro programa tendremos definida una jerarquía de
herencia que se podrá representar mediante un Grafo
dirigido sin ciclos (herencia múltiple) o mediante un árbol
(herencia simple). En Java tenemos herencia simple.
Figura2D
Rectángulo
Elipse
Point
Seminario de Java
59
Cuadrado
Dept. LSI
Java (El lenguaje):Herencia y polimorfismo.
3.3. Definición de un jerarquía de herencia en Java.
public abstract class Figura2D {
public abstract double area();
public abstract double perimetro();
public abstract void trasladar(Point p0);
}
class Rectangulo extends Figura2D {
...
}
class Point {
...
}
Seminario de Java
60
Dept. LSI
Java (El lenguaje):Herencia y polimorfismo.
3.3. Definición de un jerarquía de herencia en Java.
public class Elipse extends Figura2D {
private Point centro; // centro de la elipse
private double radio1; // radio menor
private double radio2; // radio mayor
public Elipse(float x1, float y1, double r1, double r2) {
centro = new Point(x1, y1);
radio1 = r1;
radio2 = r2;
}
public Elipse(Point p1, double r1, double r2) {
centro = new Point(p1);
radio1= r1;
radio2 = r2;
}
Seminario de Java
61
Dept. LSI
Java (El lenguaje):Herencia y polimorfismo.
3.3. Definición de un jerarquía de herencia en Java.
Public void trasladar(Point p0) {
centro = new Point(p0);
}
public void setRadio1(double r) {
radio1 = r;
}
public void setRadio2 (double r) {
radio2 =r;
}
public double getRadio1() {
return radio1;
}
public double getRadio2() {
return radio2;
}
Seminario de Java
62
Dept. LSI
Java (El lenguaje):Herencia y polimorfismo.
3.3. Definición de un jerarquía de herencia en Java.
public double area() {
return Math.PI*radio1*radio2;
}
public double perimetro() {
return Math.PI*2*
Math.sqrt((Math.pow(radio1,2)+Math.pow(radio2,2))/2);
}
public String toString() {
return centro.toString()+" , radio 1= "+radio1+"radio 2
="+radio2;
}
}
Seminario de Java
63
Dept. LSI
Java (El lenguaje):Herencia y polimorfismo.
3.3. Definición de un jerarquía de herencia en Java.
public final class Cuadrado extends Rectangulo {
private double lado;
+l));
public Cuadrado(Point p0, double l)
{
super (new Point(p0), new Point(p0.getX()+l,p0.getY()
}
lado =l;
}
Algunos de los métodos heredados de Cuadrado pueden
ser redefinidos por eficiencia
Seminario de Java
64
Dept. LSI
Java (El lenguaje):Herencia y polimorfismo.
3.4. Conceptos asociados a la herencia.
Acceso protegido a miembros (protected)
Todos los miembros de una clase definidos como
protected pueden ser accedidos desde la subclase.
Cuando son definidos como privados son heredados
pero no accesibles.
Métodos redefinidos
Método heredado que es nuevamente implementado
en la subclase, anulando al de la superclases.
No confundir redefinición con sobrecarga.
En la redefinición se mantiene la interfaz del
método.
En la sobrecarga se mantiene el nombre del
método.
Seminario de Java
65
Dept. LSI
Java (El lenguaje):Herencia y polimorfismo.
3.4. Conceptos asociados a la herencia.
Clases y métodos abstractos.
Método abstracto (abstract): Método sin
implementación.
Clase abstracta (abstract): Clase sin instancias.
Cuando en una clase hay métodos abstractos la clase
debe ser abstracta.
Clases y métodos finales.
Clase final (final): Clase que no puede tener subclases.
Método final (final): Método que no puede ser
redefinido.
Seminario de Java
66
Dept. LSI
Java (El lenguaje):Herencia y polimorfismo.
3.5. Concepto de polimorfismo.
Polimorfismo: variable que referencia a objetos de
distintas clases a lo largo de la ejecución de un
programa.
RESULTADO
El Area del rectangolo es = 2.0
el rectangulo es((1.0,1.0) , (2.0,3.0))
el perimetro del rectangulo es = 6.0
El Area de la elipse es = 18.8495559
El Area del cuadrado es = 9.0
public class PruebaHerencia {
public static void main(String[] args) {
Point p1 = new Point(1,1);
Point p2 = new Point(2,3);
Figura2D fig;
fig = new Rectangulo(p1,p2);
System.out.println("El Area del rectangolo es = " + fig.area());
System.out.println("el rectangulo es" + ((Rectangulo)fig).toString());
System.out.println("el perimetro del rectangulo es = " + fig.perimetro());
fig = new Elipse(p1,2,3);
System.out.println("El Area de la elipse es = " + fig.area());
fig = new Cuadrado(p1,3);
System.out.println("El Area del cuadrado es = " + fig.area());
}
}
Seminario de Java
67
Dept. LSI
Java (El lenguaje):Ocultar la implementación.
4.1 Las interfaces.
Una interfaz describe el comportamiento de alguna entidad,
indicando la definición de sus operaciones. Una interfaz no
incluye ni la implementación de esas operaciones ni los
atributos de esa entidad.
Una interfaz para poder ser usada debe estar implementada en
una clase.
<<interface>> IntA
ClaA
oper1();
oper2();
Interface IntA{
public void oper1();
public void oper2();
}
Seminario de Java
atrib
operA()
Class ClaA implements IntA{
private int atrib;
public void operA() {...}
public void oper1() {...}
public void oper2() {...}
}
68
Dept. LSI
Java (El lenguaje):Ocultar la implementación.
4.1 Las interfaces.
Una interfaz puede ser usada en cualquier definición de
tipo, cuando ese elemento va a ser usado tiene que haber
un objeto de alguna de las clases que implementan la
interfaz.
Cuerda
<<interface>>Instrumento
void tocar()
String que()
void ajustar()
void tocar()
String que()
void ajustar()
Viento
Percusión
void tocar()
String que()
void ajustar()
void tocar()
String que()
void ajustar()
Madera
Metal
String que()
String que()
Seminario de Java
69
Dept. LSI
Java (El lenguaje):Ocultar la implementación.
4.1 Las interfaces.
interface Instrumento {
void tocar();
String que();
void ajustar();
}
public class Cuerda implements Instrumento
{
public void tocar(){
System.out.println("doooo.reeeee");
}
public String que(){
return "Cuerda";
}
public void ajustar(){
System.out.println("do.re");
}
}
Seminario de Java
public class Percusion implements Instrumento
{
public void tocar(){
System.out.println("miiiiiii.faaaaa");
}
public String que(){
return "Percusin";
}
public void ajustar(){
System.out.println("mi.fa");
}
}
70
Dept. LSI
Java (El lenguaje):Ocultar la implementación.
4.1 Las interfaces.
abstract public class Viento implements Instrumento {
public void tocar() {
System.out.println("solllll.laaaa.siiiii");
}
abstract public String que();
public void ajustar(){
System.out.println("sol.la.si");
}
}
public class Madera extends Viento {
Public class Metal extends Viento{
public String que(){
return "Viento.Madera";
public String que(){
return "Viento.Metal";
}
}
}
Seminario de Java
}
71
Dept. LSI
Java (El lenguaje):Ocultar la implementación.
4.1 Las interfaces.
public class Concierto {
public static void main(String[] args) {
Instrumento[] orquesta = new Instrumento[4];
int i =0;
orquesta[i++] = new Cuerda();
orquesta[i++] = new Percusion();
orquesta[i++] = new Metal();
orquesta[i++] = new Madera();
// composicin de la orquesta
for (i=0; i< orquesta.length; i++)
System.out.println(orquesta[i].que());
// afinar la orquesta
for (i=0; i< orquesta.length; i++)
orquesta[i].ajustar();
// concierto
for (i=0; i< orquesta.length; i++)
orquesta[i].tocar();
RESULTADO
Cuerda
Percusion
Viento.Metal
Viento.Madera
do.re
mi.fa
sol.la.si
sol.la.si
doooo.reeeee
miiiiiii.faaaaa
solllll.laaaa.siiiii
solllll.laaaa.siiiii
}
}
Seminario de Java
72
Dept. LSI
Java (El lenguaje):Ocultar la implementación.
4.2 Los paquetes.
La unidad básica de construcción en Java es la Clase. Un
conjunto de clases(biblioteca de componentes) pueden ser
agrupadas formando una unidad cohesiva, para ello se usa
el término package. Para usar algún elemento de esa
unidad hay que importarlo, para ello se usa el término
import.
package miPaquete;
public class MiClase {
...
}
package miPaquete;
public class TuClase {
...
}
Seminario de Java
import miPaquete;
public class ClasePrueba {
...
// Uso de todos las propiedades definidas
// en miPaquete como públicas
...
}
73
Dept. LSI
Java (El lenguaje):Ocultar la implementación.
4.2 Los paquetes.
La clase La subclaseEl paquete Las demás
X
private
X
X
X
protected
X
X
.package
X
X
X
X
.public
B
A
A1
A2
B1
B2
<<import>>
Seminario de Java
74
Dept. LSI
Java (El lenguaje):Contenedores de objetos.
5.1 Concepto y tipos de contenedores
Un contenedor de objetos puede almacenar cualquier
clase de objetos, el comportamiento del contenedor
viene determinado por el tipo de contenedor que se use.
Un contenedor no puede almacenar datos de tipo
primitivo, tan sólo objetos.
Tipos generales de contenedor:
Colección (Collection): Grupo de objetos individuales
que se agrupan siguiendo una determinada regla.
Mapa (Map): Grupo de pares de objetos clave-valor
(diccionario).
Seminario de Java
75
Dept. LSI
Java (El lenguaje):Contenedores de objetos.
5.1 Concepto y tipos de contenedores
import java.util.*;
public class Contenedores1 {
static Collection rellenar(Collection c){
RESULTADO
c.add("perro");
[perro, gato]
c.add("gato");
{1=perro, 2=gato}
return c;
}
static Map rellenar(Map m){
m.put("1","perro");
m.put("2","gato");
return m;
}
public static void main(String [] args){
System.out.println(rellenar(new ArrayList()));
System.out.println(rellenar(new HashMap()));
}
}
Seminario de Java
76
Dept. LSI
Java (El lenguaje):Contenedores de objetos.
5.2 Taxonomía de los contenedores.
Map
Collection
List
Set
ArrayList LinkedList
HashSet
Seminario de Java
77
HashMap
TreeMap
TreeSet
Dept. LSI
Java (El lenguaje):Contenedores de objetos.
5.2 Taxonomía de los contenedores.
List
Colección de elementos con un orden determinado.
ArrayList
Una List implementada con un array.
LinkedList
Una List con implementación optimizada para eliminar
e insertar en cualquier posición.
Set
Colección de elementos sin orden y sin duplicados.
HashSet
Un Set implementado mediante una tabla hash.
TreeSet
Un Set implementado mediante un tree.
Map
Colección de pares de:(clave, valor) sin duplicados
de clave.
Seminario de Java
78
Dept. LSI
Java (El lenguaje):Contenedores de objetos.
5.3 Funcionalidad de las colecciones
.boolean add(Object)
Añade un objeto a la colección, devuelve false si no lo añade
boolean addAll(Collection)
Añade una colección de objetos a la colección, devuelve false si no
la añade
void clear()
Elimina todos los objetos de la colección.
.boolean contains(Object)
Devuelve true si el objeto está en la colección, false en caso
contrario
.boolean containsAll(Collection)
Devuelve verdadero cuando todos los objetos de la colección están
incluidos en nuestra colección.
.boolean isEmpty()
Devuelve true si la colección no tiene elementos, false en caso
contrario
Seminario de Java
79
Dept. LSI
Java (El lenguaje):Contenedores de objetos.
5.3 Funcionalidad de las colecciones
Iterator iterador()
Devuelve un iterador que puede ser usado para recorrer los
elementos de la colección
.boolean remove(Object)
Elimina un objetos de la colección, devuelve true si es eliminado,
y false en caso contrario
.boolean removeAll(Collection)
Elimina los elementos de la colección que se encuentren en nuestra
coleccion, devuelve true si se ha eliminado alguno.
.boolean retainAll(Collection)
Mantiene sólo los elementos de la colección que se encuentren
en nuestra colección, devuelve true si hubo cambios.
.int size()
Devuelve el número de elementos de la colección.
Object[] toArray()
Devuelve un Array con todos los elementos de la colección.
Seminario de Java
80
Dept. LSI
Java (El lenguaje):Contenedores de objetos.
5.3 Funcionalidad de las colecciones
import java.util.*;
import java.awt.Color;
public class Contenedores2 {
private static final String colores[] = {"rojo","verde","azul"};
}
public Contenedores2(){
List lista = new ArrayList();
lista.add(Color.MAGENTA);
for(int i=0; i<colores.length; i++)
lista.add(colores[i]);
System.out.println(" la lista completa es: ");
Iterator itList= lista.iterator();
while(itList.hasNext())
System.out.println(itList.next() + ", ");
}
RESULTADO
public static void main(String [] args){
la lista completa es:
new Contenedores2();
java.awt.Color[r=255,g=0,b=255]
}
rojo
Seminario de Java
verde
azul
81
Dept. LSI
Java (El lenguaje):Contenedores de objetos.
5.3 Funcionalidad de las colecciones
import java.util.*;
import java.awt.Color;
public class Contenedores3 {
private static final String colores1[] = {"rojo","verde","azul"};
private static final String colores2[] = {"blanco", "negro", "gris"};
public void print(List l){
ListIterator itList = l.listIterator();
System.out.println("LISTA:");
while(itList.hasNext())
System.out.print(itList.next()+ " ");
System.out.println();
}
public static void main(String [] args)
{
new Contenedores3();
}
Seminario de Java
82
Dept. LSI
Java (El lenguaje):Contenedores de objetos.
5.3 Funcionalidad de las colecciones
.public Contenedores3(){
List lista1 = new LinkedList();
List lista2 = new LinkedList();
RESULTADO
for(int i=0; i<colores1.length; i++){ LISTA:
lista1.add(colores1[i]);
rojo verde azul blanco negro gris
lista2.add(colores2[i]);}
LISTA:
lista1.addAll(lista2);
rojo verde azul blanco negro negro gris
print(lista1);
LISTA:
lista1.add(4,"negro");
rojo verde azul blanco negro gris
print(lista1);
LISTA:
lista1.remove("negro");
rojo verde azul
print(lista1);
LISTA:
lista1.removeAll(lista2);
azul verde rojo
print(lista1);
ListIterator itL = lista1.listIterator(lista1.size());
System.out.println("LISTA:");
while(itL.hasPrevious())
System.out.print(itL.previous() + " ");
System.out.println();
}
}
Seminario de Java
83
Dept. LSI
Java (El lenguaje):Contenedores de objetos.
5.3 Funcionalidad de las colecciones: Ordenar colecciones
import java.util.*;
public class Sort1 {
private static final String cartas[] = { "Oros", "Copas", "Espadas", "Bastos" };
private void printElements() {
List list = new LinkedList( Arrays.asList( cartas ) );
System.out.println( "Elementos desordenados:\n" + list );
Collections.sort( list ); // sort ArrayList
System.out.println( "Elementos ordenados ascendentemente:\n" + list );
Collections.sort(list,Collections.reverseOrder());
System.out.println( "Elementos ordenados descendentemente:\n" + list );
}
public static void main( String args[] ){
new Sort1().printElements();
RESULTADO
}
Elementos desordenados:
[Oros, Copas, Espadas, Bastos]
}
Elementos ordenados ascendentemente:
[Bastos, Copas, Espadas, Oros]
Elementos ordenados descendentemente:
[Oros, Espadas, Copas, Bastos]
Seminario de Java
84
Dept. LSI
Java (El lenguaje):Contenedores de objetos.
5.3 Funcionalidad de las colecciones: Ordenar colecciones
import java.util.*;
public class Sort3 {
public void printElements() {
List list = new ArrayList();
RESULTADO
Elementos desordenado:
[06:24:34, 18:14:05, 12:07:58]
Elementos ordenados:
list.add( new Time2( 6, 24, 34 ) );[06:24:34, 12:07:58, 18:14:05]
list.add( new Time2( 18, 14, 05 ) );
list.add( new Time2( 12, 07, 58 ) );
System.out.println( "Elementos desordenado:\n" + list );
Collections.sort( list, new TimeComparator() );
System.out.println( "Elementos ordenados:\n" + list );
}
public static void main( String args[] ) {
new Sort3().printElements();
}
Seminario de Java
85
Dept. LSI
Java (El lenguaje):Contenedores de objetos.
5.3 Funcionalidad de las colecciones: Ordenar colecciones
private class TimeComparator implements Comparator {
int hourCompare, minuteCompare, secondCompare;
Time2 time1, time2;
public int compare( Object object1, Object object2 ){
time1 = ( Time2 ) object1;
time2 = ( Time2 ) object2;
hourCompare = new Integer( time1.getHour() ).compareTo(
new Integer( time2.getHour() ) );
if ( hourCompare != 0 ) return hourCompare;
minuteCompare = new Integer( time1.getMinute() ).compareTo(
new Integer( time2.getMinute() ) );
if ( minuteCompare != 0 )
return minuteCompare;
secondCompare = new Integer( time1.getSecond() ).compareTo(
new Integer( time2.getSecond() ) );
return secondCompare; // return result of comparing seconds
}
} // fin de la clase TimeComparator
} // fin de la clase Sort3
Seminario de Java
86
Dept. LSI
Java (El lenguaje):Contenedores de objetos.
5.3 Funcionalidad de las colecciones: Ordenar colecciones
import java.util.*;
class Card {
private String palo;
private String numero;
public Card( String iniPalo, String iniNumero ){
palo = iniPalo;
numero = iniNumero;
}
public String getPalo() {
return new String(palo);
}
public String getNumero() {
return new String(numero);
}
public String toString() {
StringBuffer buffer = new StringBuffer( numero + " de " + palo );
buffer.setLength( 30 );
return buffer.toString();
}
} // end class Card
Seminario de Java
87
Dept. LSI
Java (El lenguaje):Contenedores de objetos.
5.3 Funcionalidad de las colecciones: Ordenar
public class Juego {
colecciones
}
private static final String palos[] = { "Oros", "Copas", "Espadas", "Bastos" };
private static final String numeros[] = { "Uno", "Dos", "Tres",
"Cuatro", "Cinco", "Seis", "Siete", "Sota", "Caballo", "Rey"};
private List list;
public Juego() {
Card baraja[] = new Card[ 40 ];
for ( int count = 0; count < baraja.length; count++ )
baraja[ count ] = new Card(palos[ count / 10 ], numeros[ count % 10 ]);
list = Arrays.asList( baraja ); // get List
Collections.shuffle( list ); // shuffle deck
}
public void printCards() {
int half = list.size() / 2 - 1;
for ( int i = 0, j = half + 1; i <= half; i++, j++ )
System.out.println( list.get( i ).toString() +"\t\t\t" + list.get( j ) );
}
public static void main( String args[] ) {
new Juego().printCards();
}
Seminario de Java
88
Dept. LSI
Java (El lenguaje):Contenedores de objetos.
5.3 Funcionalidad de las colecciones: Ordenar colecciones
RESULTADO
Tres de Espadas
Sota de Oros
Sota de Espadas
Cuatro de Bastos
Seis de Oros
Cinco de Bastos
Rey de Oros
Tres de Bastos
Dos de Bastos
Caballo de Copas
Rey de Bastos
Dos de Oros
Sota de Copas
Tres de Copas
Caballo de Bastos
Cinco de Oros
Cuatro de Oros
Uno de Oros
Rey de Espadas
Cuatro de Copas
Uno de Espadas
Siete de Bastos
Cinco de Espadas
Siete de Espadas
Sota de Bastos
Seis de Espadas
Dos de Copas
Siete de Copas
Seis de Copas
Seis de Bastos
Uno de Bastos
Siete de Oros
Cinco de Copas
Caballo de Oros
Dos de Espadas
Rey de Copas
Cuatro de Espadas
Caballo de Espadas
Uno de Copas
Tres de Oros
Seminario de Java
89
Dept. LSI
Java (El lenguaje):Contenedores de objetos.
5.3 Funcionalidad de las colecciones: Búsqueda de elementos
import java.util.*;
public class Contenedores4B {
private static final String colores[] = {"rojo","verde","azul","blanco", "negro", "gris"};
public static void main(String [] args){
List lista = new ArrayList(Arrays.asList(colores));
Collections.sort(lista);
int result = 0;
result = Collections.binarySearch(lista, colores[0]);
System.out.println("RESULTADO DE LA BÚSQUEDA DE "+ colores[0] + " ES: " + (result >=0?
" encontrado en el indice " + result : " elemento no encontrado "));
result = Collections.binarySearch(lista, "verde");
System.out.println("RESULTADO DE LA BUSQUEDA DE " + "verde" + " ES: " + (result >=0?
" encontrado en el indice " + result : " elemento no encontrado "));
result = Collections.binarySearch(lista, "coblan");
System.out.println("RESULTADO DE LA BUSQUEDA DE "+ "coblan" + " ES: " + (result >=0?
"encontrado en el indice" + result : "elemento no encontrado"));
}
}
RESULTADO
RESULTADO DE LA BÚSQUEDA DE rojo ES: encontrado en el indice 4
RESULTADO DE LA BUSQUEDA DE verde ES: encontrado en el indice 5
RESULTADO DE LA BUSQUEDA DE coblan ES: elemento no encontrado
Seminario de Java
90
Dept. LSI
Java (El lenguaje):Contenedores de objetos.
5.3 Funcionalidad de las colecciones
import java.util.*;
public class Contenedores6 {
private Set conjunto;
public Contenedores6(){
conjunto = new TreeSet();
for (int i=0; i<=5; i++)
conjunto.add(new MiTipo(i));
conjunto.add(new MiTipo(5));
}
RESULTADO
El conjunto es :[5, 4, 3, 2, 1, 0]
public void printSet(){
System.out.println("El conjunto es :" + conjunto);
}
public static void main(String [] args){
new Contenedores6().printSet();
}
Seminario de Java
91
Dept. LSI
Java (El lenguaje):Contenedores de objetos.
5.3 Funcionalidad de las colecciones
class MiTipo implements Comparable {
private int i;
public MiTipo(int n){i=n;}
public boolean equals (Object o){
return (i ==((MiTipo)o).i);
}
public int hashCode(){
return i;
}
public String toString() {return i + "";}
public int compareTo(Object o){
int i2 = ((MiTipo)o).i;
return (i2<i ? -1 :(i2 ==i ? 0:1));
}
} // fin de la clase MiTipo
}// fin de la clase Contenedores6
Seminario de Java
92
Dept. LSI
Java (El lenguaje):Contenedores de objetos.
5.4 Funcionalidad de los Map (diccionarios).
import java.util.*;
import java.io.*;
public class Contenedores5 {
}}
RESULTADO
Introducir frase:la que la que tu
Resultado : {que=2, la=2, tu=1}
Resultado de la búsqueda:2
public static void main(String [] args) throws IOException {
Map conTerminos = new HashMap();
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
System.out.print("Introducir frase");
String s = in.readLine();
StringTokenizer token = new StringTokenizer(s);
while (token.hasMoreTokens()){
String termino = token.nextToken().toLowerCase();
if(conTerminos.containsKey(termino)){
Integer count = (Integer) conTerminos.get(termino);
conTerminos.put(termino,new Integer(count.intValue()+1));
} else
conTerminos.put(termino,new Integer(1));
}
System.out.println("Resultado : " + conTerminos);
if(conTerminos.containsKey("la"))
System.out.println("Resultado de la búsqueda:" + conTerminos.get("la"));
Seminario de Java
93
Dept. LSI
Java (El lenguaje):Entrada/salida desde
terminal
Salidas:
System.out.print(“un string”)
System.out.println(“un string”)
Conversores de tipos a string
Integer.toString(int i)
Double.toString(double d)
Entradas:
BufferedReader in = new BufferedReader(
new InputStreamReader (System.in));
Lectura y conversión de String a otros tipos.
String s = in.readLine();
Double d = Double.valueOf(in.readLine());
Integer i = Integer.valueOf(in.readLine());
Seminario de Java
94
Dept. LSI
Java (El lenguaje):Manejo de excepciones.
Objetivo: Controlar de forma explícita las excepciones
que se puedan producir en ejecución.
Para usar el manejador de excepciones hay que escribir
código:
Para lanzar la excepción y construir el objeto
excepción.
If(t==null) throw new NullPointerException(“t=null”)
Para manejar la excepción.
try {// código que podría generar la excepción
}catch (UnTipoDeExcepcion excepcion1){...
}catch (OtroTipoDeExcepcion excepcion2){...
}
...
finally {// actividades que se ejecutan siempre}
Seminario de Java
95
Dept. LSI
Java (El lenguaje):Manejo de excepciones.
Estructura básica de Java para el manejo de excepciones
Throwable
Error
Exception
RunTimeException
Seminario de Java
IOException
96
OutOfMemoryError
Dept. LSI
...
Java (El lenguaje):Manejo de excepciones.
Ejemplo 1
public class UsingExceptions {
public static void main( String args[] ){
try {
throwException(); // call method throwException
} catch ( Exception exception ) {
System.err.println( "Excepcion manajada en main" );
}
doesNotThrowException(); }
RESULTADO
Método throwException
Excepción manajada en throwException
finally ejecutado en throwException
Excepción manejada en main
Método doesNotThrowException
finally ejecutado en doesNotThrowException
Fin del método doesNotThrowException
Seminario de Java
97
Dept. LSI
Java (El lenguaje):Manejo de excepciones.
public static void throwException() throws Exception{
try {
System.out.println( "Método throwException" );
throw new Exception(); // generate exception
} catch ( Exception exception ) {
System.err.println("Excepción manajada en throwException" );
throw exception; // rethrow for further processing
} finally {
System.err.println( "finally ejecutado en throwException" );
}
// cualquier código puesto aquí no se alcanzaría nunca.
} // end method throwException
RESULTADO
Método throwException
Excepción manajada en throwException
finally ejecutado en throwException
Excepción manejada en main
Método doesNotThrowException
finally ejecutado en doesNotThrowException
Fin del método doesNotThrowException
Seminario de Java
98
Dept. LSI
Java (El lenguaje):Manejo de excepciones.
public static void doesNotThrowException(){
try {
System.out.println( "Método doesNotThrowException" );
} catch( Exception exception ) {
System.err.println( exception );
} finally {
System.err.println( "finally ejecutado en doesNotThrowException"
}
System.out.println( "Fin del método doesNotThrowException" );
} // fin del método doesNotThrowException
} // fin de la clase UsingExceptions
RESULTADO
Método throwException
Excepción manajada en throwException
finally ejecutado en throwException
Excepción manejada en main
Método doesNotThrowException
finally ejecutado en doesNotThrowException
Fin del método doesNotThrowException
Seminario de Java
99
Dept. LSI
Java (El lenguaje):Manejo de excepciones.
Ejemplo 2
class ListNode {
Object data;
ListNode nextNode;
ListNode( Object object ){
this( object, null );
}
ListNode( Object object, ListNode node ){
data = object;
nextNode = node;
}
Object getObject(){
return data; // return Object in this node
}
ListNode getNext(){
return nextNode; // get next node
}
} // end class ListNode
Seminario de Java
100
Dept. LSI
Java (El lenguaje):Manejo de excepciones.
public class List {
private ListNode firstNode;
private ListNode lastNode;
private String name; // string like "list" used in printing
public List() {
this( "list" );
}
public List( String listName ) {
name = listName;
firstNode = lastNode = null;
}
public void insertAtFront( Object insertItem ){
if ( isEmpty() )
firstNode = lastNode = new ListNode( insertItem );
else
firstNode = new ListNode( insertItem, firstNode );
}
public void insertAtBack( Object insertItem ) {
if ( isEmpty() )
firstNode = lastNode = new ListNode( insertItem );
else
lastNode = lastNode.nextNode = new ListNode( insertItem );
}
Seminario de Java
101
Dept. LSI
Java (El lenguaje):Manejo de excepciones.
public Object removeFromFront() throws EmptyListException {
if ( isEmpty() ) throw new EmptyListException( name );
Object removedItem = firstNode.data;
if ( firstNode == lastNode )
firstNode = lastNode = null;
else
firstNode = firstNode.nextNode;
return removedItem; // return removed node data
}
public Object removeFromBack() throws EmptyListException {
if ( isEmpty() ) throw new EmptyListException( name );
Object removedItem = lastNode.data; // retrieve data being removed
if ( firstNode == lastNode )
firstNode = lastNode = null;
else { // locate new last node
ListNode current = firstNode;
while ( current.nextNode != lastNode )
current = current.nextNode;
lastNode = current; // current is new lastNode
current.nextNode = null;
}
return removedItem; // return removed node data
}
Seminario de Java
102
Dept. LSI
Java (El lenguaje):Manejo de excepciones.
public boolean isEmpty() {
return firstNode == null; // return true if List is empty
}
public void print() {
if ( isEmpty() ) {
System.out.println( "Empty " + name );
return;
}
System.out.print( "The " + name + " is: " );
ListNode current = firstNode;
while ( current != null ) {
System.out.print( current.data.toString() + " " );
current = current.nextNode;
}
System.out.println();
}
} // end class List
Seminario de Java
103
Dept. LSI
Java (El lenguaje):Manejo de excepciones.
public class EmptyListException extends RuntimeException {
public EmptyListException()
{
this( "List" ); // call other EmptyListException constructor
}
public EmptyListException( String name )
{
super( name + " is empty" ); // call superclass constructor
}
} // end class EmptyListException
Seminario de Java
104
Dept. LSI
Java (El lenguaje):Manejo de excepciones.
public class ListTest {
public static void main( String args[] ) {
List list = new List(); // create the List container
Boolean bool = Boolean.TRUE;
Character character = new Character( '$' );
Integer integer = new Integer( 34567 );
String string = "hello";
list.insertAtFront( bool );
list.print();
list.insertAtFront( character );
list.print();
list.insertAtBack( integer );
list.print();
list.insertAtBack( string );
list.print();
Seminario de Java
105
Dept. LSI
Java (El lenguaje):Manejo de excepciones.
try {
Object removedObject = list.removeFromFront();
System.out.println( removedObject.toString() + " removed" );
list.print();
RESULTADO
The list is: true
removedObject = list.removeFromFront();
The list is: $ true
System.out.println( removedObject.toString()+" removed" ); The list is: $ true 34567
list.print();
The list is: $ true 34567 hello
$ removed
The list is: true 34567 hello
removedObject = list.removeFromBack();
System.out.println( removedObject.toString()+" removed" ); true removed
The list is: 34567 hello
list.print();
hello removed
The list is: 34567
removedObject = list.removeFromBack();
34567 removed
System.out.println( removedObject.toString()+" removed" ); Empty list
list.print();
}catch ( EmptyListException emptyListException ) {
emptyListException.printStackTrace();
}
}
} // end class ListTest
Seminario de Java
106
Dept. LSI