Professional Documents
Culture Documents
Programa:
Introduccin a la Programacin con Objetos.
Introduccin a Java.
Componentes del lenguaje.
Clases y Objetos.
Herencia.
Interfaces y clases internas.
Colecciones.
Excepciones y depuracin.
Secuencias y archivos.
Programacin genrica.
UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo
Bibliografa:
Ttulo
Autor(es)
Edicin
Editorial
Cmo programar en
Java.
DEITEL, DEITEL
PEARSON
EDUCACION
2012
Core Java 2
Volumen I
Fundamentos
GARY CORNELL,
CAY S.
HORSTMANN
PEARSON
EDUCACION
2005
Core Java 2
Volumen I
Avanzado
GARY CORNELL,
CAY S.
HORSTMANN
PEARSON
EDUCACION
2005
Apuntes
PANDOLFO,
PABLO
Pautas:
Condiciones de Regularizacin
Aprobar:
Dos parciales tericos/prcticos y/o un recuperatorio.
Dos trabajos prcticos especiales a definir durante la cursada.
Mtricas:
<metricas.xls>
<Documentacion
Prueba.doc>
LoteDePrueba
in
(casos del cliente,
Buenas ideas, fatigas)
ProgramaProbador
(en caso de pedirlo)
out
(outs esperados)
outGenerados
(por el programa)
00.in
00.out
00.out
01.in
01.out
01.out
Programa:
Especificacin formal de un algoritmo por medio de un lenguaje de
programacin.
Algoritmo:
Secuencia de acciones elementales que transforma los datos de entrada en datos
de salida con el objetivo de resolver un problema computacional.
Lenguaje de programacin:
Notacin para escribir programas. Proporcionan estructuras (sintcticas: cmo
escribir una expresin y semnticas: cmo evaluar una expresin) para
organizar los clculos.
UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo
10
11
12
Una Identidad
Cmo podemos distinguir un objeto de otro?
Identidad vs. Igualdad.
13
14
15
16
17
18
19
20
Opcionales:
Genericidad.
Gestin de errores.
Aserciones.
Tipado esttico.
Recogida de basura.
Reflexin.
21
22
23
24
Introduccin a Java
Java abarca dos aspectos:
Una plataforma: es un ambiente de software y/o hardware
sobre el que se ejecuta un programa.
Enorme biblioteca.
Cdigo reutilizable.
Entorno de ejecucin: seguridad, adaptabilidad, Garbage Collector
25
Introduccin a Java
La plataforma Java se compone de:
La Java Virtual Machine (JVM): es la base de la
Plataforma Java y puede ser incorporada en la mayora de
las plataformas (hardware y sistema operativo). Contiene el
intrprete Java.
La Java Application Programming Interface (Java
API): es una coleccin de componentes de software que
proveen una amplia gama de funcionalidades, como GUIs,
I/O, Seguridad, etc. Est dividida en paquetes o libreras de
componentes relacionadas.
UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo
26
Introduccin
La Plataforma Java (la API y la JVM) independiza al
programa Java del hardware.
27
Introduccin
Principales caractersticas del Lenguaje:
Simple y Familiar
Orientado a Objetos
Distribuido
Robusto
Seguro
Arquitectura neutral
Multithread
Interpretado
Dinmico
28
Introduccin
Simple y Familiar
El objetivo de los diseadores de Java fue crear un lenguaje de
programacin que fuera fcil de aprender. Java adopt una sintaxis
similar a la de C/C++ teniendo en cuenta su popularidad. Y elimin
aquellas caractersticas que son fuente de confusin.
Caractersticas de C/C++ eliminadas en Java
No ms preprocesador
No ms estructuras de datos ni uniones
No ms tipos enumerativos
No ms funciones
No ms herencia mltiple de clases
No ms GOTO
No ms punteros
29
Introduccin
Orientado a Objetos:
Java posee todas las caractersticas de un lenguaje
orientado a objetos
Polimorfismo.
Encapsulamiento.
Herencia.
30
Introduccin
Distribuido:
Con Java es posible usar protocolos como HTTP y FTP
para leer o copiar archivos remotos de manera tan simple
como si estuviesen en el File System local.
El comportamiento distribuido de Java posibilita la
colaboracin y la distribucin de carga de trabajo del
sistema. Ejemplo: Applets.
RMI (Java Remote Method Invocation) provee una forma
simple y directa de manejar objetos distribuidos.
31
Introduccin
Seguro:
Mapa de memoria y alocacin de memoria:
En Java no existe el concepto de punteros a memoria al estilo C y C++.
En Java el modelo de alocacin de memoria es transparente al
programador, ya que es controlado ntegramente por JVM.
32
Introduccin
Arquitectura neutral:
Java fue diseado para soportar aplicaciones que se
ejecutan en ambientes de redes heterogneos,
independientemente de la plataforma de hardware y del
sistema operativo.
La arquitectura neutral dada por los ByteCodes es el paso
ms importante hacia la portabilidad de los programas.
Write once, run anywhere.
33
Introduccin
Multithreaded:
Un Thread es un flujo de control secuencial dentro de un
programa. Java provee mltiples threads en un programa,
ejecutndose concurrentemente y llevando a cabo tareas
distintas.
La API Java contiene primitivas de sincronizacin.
Los mltiples hilos (threads) de ejecucin permiten mejorar
la interactividad y la performance del sistema. (Mejor
respuesta interactiva y comportamiento de tiempo real)
34
Introduccin
Interpretado y dinmico:
El compilador Java genera ByteCodes para la JVM. El
intrprete, incorporado en la JVM es el que permite
ejecutar el programa.
Los ByteCodes de Java pueden ejecutarse en cualquier
plataforma que tenga la JVM implementada.
Java es dinmicamente extensible ya que las clases se
linkean a medida que se necesitan y pueden ser cargadas
dinmicamente a travs de la red.
35
Introduccin
Tipos de programas:
Applets: son pequeos programas que se ejecutan dentro
de un web browser Java-compatible. (p.e. Netscape
Navigator, Microsoft Internet Explorer, HotJava).
Aplicaciones: son programas comunes que se ejecutan
utilizando solo a JVM como plataforma.
Servlets: son programas que corren dentro de un ambiente
provisto por un contenedor. Los contenedores son
servidores de aplicaciones. Su ejecucin se desencadena
escribiendo su URL en un browser web.
UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo
36
Introduccin
Java es un lenguaje de la empresa SUN
Primera versin 1.0 (1996)
Versin
1.0
1.1
1.2
1.3
1.4
5.0
Caractersticas
El lenguaje en s
Clases internas
Ninguna (Java 2) J2SE/EE/ME
Ninguna
Aserciones
Clases genricas, for each, argumentos
variables, enumeraciones
UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo
N Clases e
Interfaces
211
477
1524
1840
2723
3270
37
Introduccin
Entornos de programacin Java
JDK: Java Development Kit
Java SDK: Software Development Kit (versiones 1.2 a 1.4)
Opciones de entorno:
JDK + editor de texto
IDE
38
Introduccin
Eclipse
Es un IDE abierto y extensible (plugins)
Un IDE es un programa compuesto por
un conjunto de herramientas tiles para
un desarrollador.
Software libre.
Gran parte de la programacin Eclipse
hecha por IBM.
Antecesor de Eclipse: VisualAge
En 2001 IBM y Borland crearon la
Fundacin Eclipse
Sitio web: www.eclipse.org
Versin
Ao
Nombre
3.0
2004
Eclipse 3.0
3.1
2005
Eclipse 3.1
3.2
2006
Callisto
3.3
2007
Europa
3.4
2008
Ganymede
3.5
2009
Galileo
3.6
2010
Helio
3.7
2011
Indigo
4.2
2012
Juno
4.3
2013
Kepler
4.4
2014
Luna
2015
Mars
39
Introduccin
La aplicacin Hola Mundo
Modificador de
acceso
Delimita bloques
Invocacin de
mtodo
Terminacin de
sentencia
40
Clases o interfaces
41
42
saludo.indexOf(a);
saludo.indexOf(a, 2);
saludo.toLowerCase();
saludo.toUpperCase();
saludo.equalsIgnoreCase(h);
saludo.endsWith(la);
43
Relacionales:
2 >= p
a == 5
b != 8
Otros:
i++
j-[] . () (refundicin) new instanceof
Condicional:
(x<y)?x:y
44
45
46
Operaciones de arreglos:
int [] a = new int [10000];
Arrays.sort(a);
Arrays.binarySearch(a, 3);
Arrays.fill(a, 3);
UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo
47
if else:
if (condicin) {
sentencias
} else {
sentencias
}
enteros, caracteres o
switch:
constantes enumeradas
switch (i) {
case 1:{sentencias;[break;]}
case 2:{sentencias;[break;]}
case 3:{sentencias;[break;]}
}
Rompe el flujo de
control.
48
49
50
51
52
Todos los nmeros naturales acaban tomando el valor 1 despus de un cierto nmero de iteraciones del proceso.
Por ejemplo, si tomamos N = 5:
N0 = 5 N1 = 3 * 5 + 1 = 16
N1 = 16 N2 = 16 / 2 = 8
N2 = 8 N3 = 8 / 2 = 4
N3 = 4 N4 = 4 / 2 = 2
N4 = 2 N5 = 2 / 2 = 1
observamos que para N=5, el proceso se realiza 5 veces antes de su finalizacin.
Se desconoce si esta es una propiedad intrnseca a los nmeros naturales o bien si se trata de una particularidad para
la que an no se ha encontrado ningn contraejemplo.
El ejercicio consiste en disear un programa en Java que tome como entrada un nmero M y realice este proceso
para todos los nmeros naturales N en el rango 1 <= N <= M.
El programa deber escribir en consola los pares Nmero natural - Nmero de iteraciones necesarias para finalizar
el proceso. Adems el programa deber almacenar en un vector los P nmeros que ms iteraciones realizan y cul es
ese nmero de iteraciones para cada uno de esos P nmeros. Los dos datos de entrada (M y P) han de ser ledos
desde la lnea de comandos.
53
Clases y Objetos
Clase
Cada clase, excepto la clase Object, es una extensin
(subclase), de una sola clase ya existente (herencia simple).
En Java, una clase se compone de:
Declaracin
Cuerpo
54
Clases y Objetos
Forma general de declaracin de una Clase:
package nombrePaquete;
{importaciones}
[modificadores] class nombreClase
[extends nombreSuperClase]
[implements nombresInterfaces] {
}
55
Clases y Objetos
nombrePaquete:
Todo nombre de paquete debe por convencin comenzar
con una letra minscula.
Java utiliza caracteres Unicode: fcil, araa, vistaCliente2
son nombres de paquetes vlidos.
El alcance de un identificador de paquete es todo el paquete
en donde se declara, por lo tanto no puede haber dos
paquetes con el mismo nombre dentro de un mismo
paquete.
56
Clases y Objetos
Modificadores:
Existen tres modificadores:
public
abstract: clases que no se pueden instanciar. Toda clase que tenga
1 o mas mtodos abstractos tiene que declararse abstracta a su vez.
Puede tener atributos y mtodos concretos.
final: clases que no se pueden extender. Ejemplo String. Todos los
mtodos de una clase final son final automticamente NO as los
atributos.
Son opcionales
Se pueden combinar, salvo abstract y final.
UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo
57
Clases y Objetos
nombreClase:
Todo nombre de clase debe por convencin comenzar con
una letra mayscula.
Java utiliza caracteres Unicode: Intil, Pequea,
NegroEl8 son nombres de clases vlidos.
El alcance de un identificador de clase es todo el paquete
en donde se declara la clase, por lo tanto no puede haber
dos clases con el mismo nombre dentro de un mismo
paquete.
58
Clases y Objetos
Cuerpo
Se considera como cuerpo de una clase todo lo encerrado
entre { y }.
En el cuerpo se declaran:
Atributos
Constructores
Mtodos
Otras clases
59
Clases y Objetos
60
Clases y Objetos
Constructores, declaracin
package nombrePaquete;
public class NombreClase {
[accesibilidad] NombreClase
([parmetros])[throws excepciones] {
...
}
}
Los constructores:
No son mtodos
Tienen el mismo nombre que su clase
No se heredan de las superclases
UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo
61
Clases y Objetos
Constructores, accesibilidad:
62
Clases y Objetos
Constructores :
Si una clase no declara ningn constructor, entonces tiene
el constructor por defecto.
Nmeros se inicializan en 0.
Booleanos se inicializan en false.
Objetos se inicializan en null.
63
Clases y Objetos
Constructores:
Una clase puede tener varios constructores (overloading).
Los diferentes constructores se diferencian por el nmero y
tipo de los parmetros.
Los constructores tienen el mismo manejo de excepciones
que los mtodos.
public class Crculo {
protected Crculo(Punto punto) {...}
public Crculo(Punto punto, Color color) {
this(punto); ...
}
}
UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo
64
Clases y Objetos
Variables:
Todas las variables tienen un tipo. El tipo puede ser:
Tipo primitivo
Clase
Interfaz
Declaracin en una clase:
[accesibilidad] [modificadores] tipo nombre
[= valor];
Declaracin en un mtodo:
[final] tipo nombre [= valor];
65
Clases y Objetos
Variables, accesibilidad:
66
Clases y Objetos
Variables, modificadores:
static: variables de clase. Existen desde que el ClassLoader
carga la clase. Pertenecen a la clase y no a ningn objeto
individual (variable compartida)
transient: no persistentes.
volatile: indica a la JVM que la variable puede ser
modificada en forma asincrnica por cualquier thread.
final: constantes. Deben recibir valor inicial cuando se
construye el objeto. En lo sucesivo, el campo o atributo no
podr ser modificado. Ejemplo: Math.PI
public static final double PI = 3.14.;
67
Clases y Objetos
Variables:
Nombre:
Compuesto de caracteres Unicode.
Por convencin los nombres de las variables empiezan con
minscula.
Como en las clases, si se juntan varias palabras, al principio de cada
una se coloca mayscula.
Case Sensitive.
68
Clases y Objetos
Variables:
Visibilidad: bloque de cdigo en donde es accesible la
variable
Hay 3 categoras:
69
Clases y Objetos
Mtodos, definicin:
Consta de dos partes:
Declaracin: se declaran los modificadores, tipo de retorno, nombre, lista
de excepciones.
Cuerpo: se declaran las variables locales y el cdigo del mtodo.
Las variables locales de un mtodo siempre deben recibir un valor inicial
explcito.
70
Clases y Objetos
Mtodos, modificadores:
71
Clases y Objetos
Mtodos, modificadores:
abstract: Un mtodo abstracto no tiene implementacin.
Debe ser miembro de una clase abstracta. Actan como
reservas de espacio para los mtodos que se implementan
en las subclases.
static: Declara al mtodo como mtodo de clase. No
necesita de un objeto que lo controle. Ejemplo: Math.pow
Mtodos factora: Mtodos estticos que retornan objetos de su
propia clase. Ejemplo: NumberFormat.getCurrencyInstance()
72
Clases y Objetos
Mtodos, tipo de retorno:
Todo mtodo debe tener un tipo de retorno o void si el
mtodo no devuelve nada.
Ejemplos:
public void beOn()
public boolean isEmpty()
public Object[] getElements()
public Enumeration elements()
public Vector getElements()
UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo
73
Clases y Objetos
Mtodos, nombre:
Cualquier identificador vlido puede ser nombre de
mtodo. Caracteres Unicode.
Los nombres de los mtodos empiezan con minscula.
Pueden existir mltiples mtodos con el mismo nombre.
Los mtodos se diferencian por el nmero y tipo de los
parmetros. (Sobrecarga de mtodos)
Se recomienda el uso de getters y setters:
getX() Mtodo de acceso o consulta. No escribir mtodos de
acceso que devuelvan referencias de objetos que se pueden
modificar. Solucin: clonarlo (.clone())
setX() Mtodo de modificacin
UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo
74
Clases y Objetos
Mtodos, lista de parmetros:
Es una lista delimitada por coma de la forma tipo
parmetro.
Los tipos primitivos se pasan por valor.
Los objetos usan pasaje de referencias por valor.
No se puede declarar una variable dentro de un mtodo con
el mismo nombre que un parmetro.
Ejemplo:
void unMtodo(int x, int y, String s)
75
Clases y Objetos
Mtodos, lista de parmetros variables:
Nmero variable de argumentos (varargs)
Ejemplo:
void unMetodo(Objectargs) {
//args es manipulado como un arreglo de Objects
}
Invocaciones al mtodo:
objeto.unMetodo(new Punto());
objeto.unMetodo(new Punto(), new Integer(3));
objeto.unMetodo(new Integer(3), Hola, Mundo);
76
Clases y Objetos
Mtodos, lista de excepciones:
Java plantea un esquema de excepciones estricto.
Contiene todas las excepciones que se pueden levantar a
raz de la ejecucin del mtodo.
Cuando se invoca un mtodo que puede levantar una
excepcin, hay que incluirlo dentro de una clusula try
catch.
77
Clases y Objetos
Mtodos, cuerpo:
Se considera como cuerpo todo lo encerrado entre { y }.
Las variables locales enmascaran a las variables miembro de la clase.
Las variables declaradas dentro de los mtodos duran lo que dura el
mtodo.
this:
Se refiere al objeto actual.
Slo puede aparecer en el cuerpo de un mtodo de instancia, en un
constructor (invoca a otro constructor de la misma clase) o en la
inicializacin de una variable de instancia.
super:
Se refiere a la superclase del objeto actual.
return:
Se utiliza para devolver un valor en los mtodos que devuelven algo (no
void).
UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo
78
Clases y Objetos
Clases Predefinidas
Math
Date
Math.sqrt(double):double
Math.pow(double, double):double
Math.max(int, int):int
Math.min(int, int):int
Math.random():double [0,1)
Date fecha = new Date();
GregorianCalendar
GregorianCalendar hoy = new GregorianCalendar();
hoy.get(Calendar.MONTH)
UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo
79
Clases y Objetos
Ciclo de vida de un objeto. Fases:
Creacin
Utilizacin
Finalizacin
80
Clases y Objetos
Creacin:
Se lleva a cabo utilizando los constructores.
Rectangle rect = new Rectangle();
81
Clases y Objetos
Creacin:
new es el operador de Java que aloca espacio para un
nuevo objeto.
Luego del new se coloca un constructor con sus parmetros
si los tuviera.
Ejemplos:
new Rectangle(10,10);
new Rectangle(new Point(10, 10), 10, 10);
82
Clases y Objetos
Utilizacin de objetos:
Invocacin de mtodos, acceso a variables y constantes:
En clases:
Movible.ORIGEN;
Math.abs(-1);
En instancias:
rect.width();
new Point(10,10).x;
83
Clases y Objetos
Finalizacin:
Conceptualmente existen dos variantes:
El usuario se encarga de liberar los recursos (Delphi).
84
Clases y Objetos
Finalizacin:
Las referencias mantenidas en variables locales son
liberadas cuando salen del alcance o cuando se les asigna
null.
Los objetos son recolectados cuando no existen ms
referencias a ellos.
Antes de destruir un objeto el Garbage Collector llama al
mtodo finalize() de dicho objeto. Se utiliza para liberar
recursos.
UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo
85
Clases y Objetos
Paquetes, descripcin:
Un paquete es un conjunto de clases e interfaces relacionadas que
proveen acceso protegido y administracin de nombres.
Las clases e interfaces que son parte del lenguaje estn agrupadas en
paquetes de acuerdo a su funcin:
java.lang: Clases del lenguaje. Se importa por defecto.
java.io: para manejo de Entrada/Salida
86
Clases y Objetos
Paquetes, Creacin:
Un paquete es creado simplemente incorporando una clase
o una interfaz.
Se requiere escribir la sentencia package como primer
sentencia del archivo fuente en donde se est definiendo la
clase o la interfaz.
87
Clases y Objetos
Paquetes, beneficios:
Reconocer y encontrar fcilmente las clases e interfaces
relacionadas.
Evitar conflictos de nombres, ya que cada clase pertenece a
un nico paquete (no puede haber dos clases con el mismo
nombre dentro de un mismo paquete).
Controlar el acceso a las clases del paquete.
Si no se usa la sentencia package, las clases e interfaces se
ubican en el paquete por defecto (default package), que es
un paquete sin nombre. No es recomendable utilizar este
paquete.
UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo
88
Clases y Objetos
Paquetes, accesos:
Las clases e interfaces miembros de un paquete declarados pblicos
pueden ser accedidos desde afuera del paquete, de alguna de las
siguientes formas:
Refirindose a su nombre largo:
graphics.Rectangle miRect = new graphics.Rectangle();
Es la solucin al conflicto del mismo nombre de clase en paquetes importados.
Importndolo:
import graphics.Circle;
Circle miCir = new Circle();
89
Clases y Objetos
Paquetes, accesos estticos:
Permiten llamar a un mtodo o propiedad esttica sin
necesidad de hacer referencia al nombre de su clase.
La sintaxis general, es:
import static paquete.Clase.metodo_o_propiedad_static; //Para un
slo mtodo o propiedad.
import static paquete.Clase.*; //para todos los elementos estticos de
la clase
Ejemplo:
import static java.lang.System.*;
out.println(Hola);
exit(0);
90
Clases y Objetos
Clases de enumeracin:
Para declarar variables con un conjunto restringido de
valores.
Enum es una clase.
El enum posee objetos.
Ejemplo:
enum Porte {MINI, MEDIANO, GRANDE,
EXTRA_GRANDE};
Porte s = Porte.MEDIANO;
91
Clases y Objetos
Clases de enumeracin:
Ejemplo:
public enum Talla
{ MINI(S), MEDIANO(M), GRANDE(L),
EXTRA_GRANDE(XL);
private Talla(String abrev){
this.abrev = abrev;
}
public String getAbreviatura() {
return abrev;
}
private String abrev;
}
UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo
92
Clases y Objetos
Reflection, definicin:
Es la habilidad que tiene un programa para realizar algn
tipo de computacin sobre s mismo.
Tambin se conoce como introspeccin.
Para esto es necesario representar los elementos que
forman parte de los sistemas de objetos:
Clases
Mensajes
93
Clases y Objetos
Reflection, tipos:
Structural Reflection:
Referida a las propiedades estructurales de los sistemas, como
jerarquas de clases, tipos, etc. (versin provista por Java)
Behavioral Reflection:
Que ataca el comportamiento de los objetos en el sistema. Utilizada
para monitorear y modificar dicho comportamiento.
94
Clases y Objetos
Reflection, funcionalidad:
Determinar la clase de un objeto.
Obtener informacin acerca de las clases: modificadores,
constructores, mtodos, variables, superclases e interfaces
que implementan.
Obtener informacin acerca de las interfaces: declaracin
de mtodos y constantes.
Invocar mtodos que no son conocidos hasta el tiempo de
ejecucin.
Crear instancias de clases que son desconocidas hasta el
tiempo de ejecucin.
UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo
95
Clases y Objetos
Cmo obtener instancias de la clase Class?
Class c = mystery.getClass();
TextField t = new TextField();
Class c = t.getClass();
Class s = c.getSuperclass();
Class c = java.awt.Button.class;
Class c = Class.forName(strg);
Creacin de un objeto:
c.newInstance() //Llama al constructor predeterminado.
96
Clases y Objetos
Descubriendo los modificadores:
public void printModifiers(Object o) {
Class c = o.getClass();
int m = c.getModifiers();
if (Modifier.isPublic(m))
System.out.println("public");
if (Modifier.isAbstract(m))
System.out.println("abstract");
if (Modifier.isFinal(m))
System.out.println("final");
}
UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo
97
Clases y Objetos
Recuperando las variables:
public void printPublicFieldNames(Object o) {
Class c = o.getClass();
Field[] publicFields = c.getFields();
for (int i = 0; i < publicFields.length; i++) {
String fieldName = publicFields[i].getName();
Class typeClass = publicFields[i].getType();
String fieldType = typeClass.getName();
System.out.println("Name: " + fieldName +
", Type: " + fieldType);
}
}
98
Clases y Objetos
Recuperando los mtodos:
public void showMethods(Object o) {
Class c = o.getClass();
Method[] methods = c.getMethods();
for (int i = 0; i < methods.length; i++) {
String name = methods[i].getName();
System.out.println(Name: " + name);
String return = methods[i].getReturnType().getName();
System.out.println("Return Type: " + return);
Class[] paramTypes = methods[i].getParameterTypes();
System.out.print("Parameter Types:");
for (int k = 0; k < paramTypes.length; k ++) {
String parameterString = paramTypes[k].getName();
System.out.print(" " + parameterString);
}
System.out.println();
}
}
99
Clases y Objetos
Invocacin de mtodos:
Method metodo = Empleado.class.getMethod(getNombre);
System.out.println(metodo.invoke(new Empleado()));
metodo = Math.class.getMethod(sqrt, Double.class);
(Double) metodo.invoke(null, 9);
100
Clases y Objetos
Ejercicios:
Defina una clase punto que tendr dos atributos, de tipo real, x e y, que
representarn las coordenadas del punto dentro del plano. Defina un mtodo
que tenga como argumento otro objeto de la clase punto y que calcule la
distancia entre los dos puntos. Para probar esta funcionalidad, escriba un
mtodo main en el que se creen dos puntos, el primero de los cuales deber
tener las coordenadas 100.0, 200.0 y el segundo deber tener las coordenadas
400.0, 800.0 y calcule e imprima la distancia entre ambos.
Defina una clase 'Monedero' que permita gestionar la cantidad de dinero de
que una persona dispone en un momento dado. La clase deber tener un
constructor que permitir crear un monedero con una cantidad de dinero
inicial y deber definir un mtodo para meter dinero en el monedero, otro
para sacarlo y finalmente, otro para consultar el disponible; solo podr
conocerse la cantidad de dinero del monedero a travs de este ltimo mtodo.
Por supuesto, no se podr sacar ms dinero del que haya en un momento dado
en el monedero. Para probar el funcionamiento de la clase, escriba un mtodo
'main' con una serie de instrucciones que hagan uso de los mtodos definidos.
101
<<class>>
CajaAhorro
<<class>>
Banco
- nombreBanco:String
+ Banco(String)
+ setNombreBanco(String):void
+ getNombreBanco():String
+ setCajasAhorro(ArrayList<CajaAhorro>):void
+ getCajasAhorro():ArrayList<CajaAhorro>
+ <a definir>
+ toString():String
<<class>>
Movimiento
- fechaMovimiento:Date
- importeMovimiento: Double
+ Movimiento(TipoMovimiento)
+ Movimiento(TipoMovimiento,Double)
+ setFechaMovimiento(Date):void
+ getFechaMovimiento():Date
+ setImporteMovimiento(Double):void
+ getImporteMovimiento(): Double
+ setTipoMovimiento(TipoMovimiento): void
+ getTipoMovimiento(): TipoMovimiento
+ toString():String
<<class>>
Titular
- SALDO_INICIAL:Double = 0.0
- cantidadCajasAhorro: Integer = 0
- numeroCajaAhorro: Integer
- saldoCajaAhorro: Double
+ CajaAhorro(Titular)
+ CajaAhorro(Titular, Double)
+ setCantidadCajasAhorro(Integer):void
+ getCantidadCajasAhorro():Integer
+ setNumeroCajaAhorro(Integer):void
+ getNumeroCajaAhorro():Integer
+ setSaldoCajaAhorro(Double):void
+ getSaldoCajaAhorro():Double
+ setTitularCajaAhorro(Titular):void
+ getTitularCajaAhorro():Titular
+ setEstadoCajaAhorro(EstadoCajaAhooro):void
+ getEstadoCajaAhorro():EstadoCajaAhorro
+ setMovimientos(ArrayList<Movimiento>):void
+ getMovimientos(): ArrayList<Movimiento>)
+ depositarMonto(Double):void
+ extraerMonto(Double):void
+ cerrarCajaAhorro():void
+ suspenderCajaAhorro():void
+ mostrarMovimientos():void
- registrarMovimiento(Movimiento):void
- estaAbiertaCajaAhorro():Boolean
+ toString():String
- numeroDNITitular: Long
- nombreTitular:String
- sexoTitular: Character
+ Titular(Long, String)
+ setNumeroDNITitular(Long):void
+ getNumeroDNITitular():Long
+ setNombreTitular(String): void
+ getNombreTitular():String
+ setSexoTitular(Character):void
+ getSexoTitular():Character
+ toString(): String
<<enumeration>>
EstadoCajaAhorro
ACTIVA
CERRADA
SUSPENDIDA
<<enumeration>>
TipoMovimiento
CREAR
DEPOSITAR
EXTRAER
VER_SALDO
VER_MOVIM
SUSPENDER
CERRAR
102
Herencia
Usamos las clases para representar parte del
conocimiento que adquirimos del dominio de
problema
Qu sucede cuando las clases comparten parte del
conocimiento que representan?
Subclasificacin
103
Herencia
Generalidades
Especialidades
(cambios no
afectan a la
superclase)
104
Herencia
105
Herencia
public class CajaDeAhorro extends
CuentaBancaria {
}
106
Herencia
Los constructores NO se heredan de las superclases.
Si se puede invocar del constructor de la subclase a la
superclase con super(). Debe ser primera sentencia
del cuerpo del constructor.
public class CajaDeAhorro extends
CuentaBancaria {
public CajaDeAhorro() {
super();
}
}
107
Herencia
Polimorfismo:
Dos o ms objetos son polimrficos respecto de un conjunto de
mensajes, si todos pueden responder esos mensajes, an cuando cada
uno lo haga de un modo diferente.
Podemos decir que objetos polimrficos corresponden a un mismo
tipo de objeto.
Mismo tipo significa mismo comportamiento esencial,
independientemente de implementacin.
Permite que clases de distintos tipos puedan ser referenciadas por una
misma variable
CuentaBancaria cta;
cta = new CajaDeAhorro();
cta = new CuentaCorriente();
108
Herencia
109
Herencia
110
Herencia
El Polimorfismo es la clave de un buen diseo
Cdigo genrico
Objetos desacoplados
Objetos intercambiables
Objetos reusables
Programar por protocolo, no por implementacin (buscar la
esencia)
111
Herencia
Binding
Binding Temprano o Esttico
Operandos y operadores son ligados en tiempo de compilacin.
Es el programador quin decide qu se debe ejecutar.
112
Herencia
Clase Object
Todas las clases de Java extienden a Object.
Es la clase raz de todo el rbol de la jerarqua de clases de Java.
Se puede utilizar una variable de tipo Object como referencia de
objetos de cualquier tipo.
Mtodos de Object
public boolean equals(Object obj)
Define que significa que dos objetos sean iguales.
La implementacin en Object retorna true si y solo si se trata del mismo
objeto (equivale a una comparacin usando ==)
113
Herencia
Modele una Empresa con empleados. Una empresa conoce a todos sus empleados. Los empleados pueden
ser de planta permanente o temporaria, adems hay gerentes, que tambin son empleados de planta
permanente, pero siguen un rgimen salarial particular.
Cuando un empleado es de planta permanente cobra la cantidad de horas trabajadas por $30, ms
antigedad ($10 por ao de antigedad), ms salario familiar. Cuando es de planta temporaria, no cobra
antigedad y cobra la cantidad de horas trabajadas por $20, ms salario familiar. El salario familiar es $20
por cada hijo, los empleados casados adems cobran $10 por su esposa/o.
Un gerente cobra de manera similar a un empleado de planta permanente pero su hora trabajada vale $40,
por antigedad se le pagan $15 por ao, mientras que el salario familiar es el mismo que el de los
empleados de planta permanente y temporal.
Defina e implemente el mensaje montoTotal() en la clase Empresa, que retorna el monto total que la
empresa debe pagar en concepto de sueldos a sus empleados.
Realice la implementacin del sistema completo en Java.
Provea una clase TestEmpresa para instanciar y testear su sistema. En el mtodo main de esa clase cree el
siguiente escenario y enve a la empresa el mensaje montoTotal() para obtener la liquidacin total.
Una empresa, con el CUIT y Razn Social que desee, y con los cuatro empleados que se describen a
continuacin.
Un empleado de Planta Temporaria con 80 horas trabajadas, con esposa y sin hijos.
Un empleado de Planta Permanente (que no sea gerente) con 80 horas trabajadas, con esposa, 2 hijos y 6
aos de antigedad.
Un empleado de Planta Permanente (que no sea gerente) con 160 horas trabajadas, sin esposa, sin hijos y
con 4 aos de antigedad.
Un Gerente con 160 horas trabajadas, con esposa, un hijo y 10 aos de antigedad
114
Herencia
Un negocio se dedica a la reparacin de PCs. Cada PC que recoge contiene informacin sobre el cdigo de
la reparacin, el cdigo del cliente, la descripcin de la avera y el precio de la reparacin. Adems
contiene un campo entero que recoge el estado de la reparacin con la siguiente informacin:
. Cuando llega una PC al taller se queda pendiente de aprobar el presupuesto y el estado es 0
. Cuando el cliente acepta el presupuesto el campo estado se pone a 1
. Cuando el ordenador esta reparado el campo estado se pone a 2
Algunas PCs estn en garanta, en cuyo caso se aadir un campo con la fecha de compra (AAAAMMDD)
a) Codifique la clase PC. Tendr un constructor que permita inicializar el cdigo de la reparacin, el cdigo
del cliente y la descripcin de la avera. Tambin tendr un mtodo que permita convertir a cadena una
representacin de la PC.
b) Codifique una subclase para las pcs en garanta. En esta clase, el mtodo que convierte la PC en cadena
aadir tambin la fecha de la compra.
c) Codifique una clase Taller. El constructor de dicha clase permitir la creacin de una coleccin de donde
se almacenarn las PCs que estn en el taller; dicho constructor tomar como argumento el nmero de PCs
mximo que puede tener el taller. La clase Taller contendr mtodos para:
La entrada de una PC en el taller.
La aceptacin del presupuesto de una reparacin por el cliente. El mtodo deber buscar la PC y poner el
estado de la reparacin a 1.
La comunicacin del final de la reparacin de la PC . Este mtodo recibir el cdigo de la reparacin y
pondr el estado a 2. En el caso de ordenadores que no estn en garanta recibir tambin el precio y
actualizar el campo correspondiente.
La entrega de una PC, dejando el elemento que ocupaba a nulo.
115
Herencia
Modele una Empresa de Correo con envos a diferentes lugares del pas. Una empresa conoce todos sus
envos. Los envos pueden ser cartas o encomiendas, adems hay telegramas, que tambin son cartas, pero
siguen un clculo de precio particular. Un envo implementa la interfaz Calculable, la misma describe la
funcionalidad precio que devuelve un double.
Cuando un envo es una encomienda el precio se calcula sobre el peso de la misma, siendo la cantidad de
gramos de peso por $0.01 ms precio por distancia. Cuando es una carta solo se cobra por distancia. El
precio por distancia es de $1 si no supera los 100 km., $1.5 si la distancia est entre los 100 km. y los 500
km. y $2 si supera los 500 Km.
Un telegrama se cobra de manera similar a una carta pero se le adiciona $0.01 por carcter (no se incluyen
los espacios en blanco). Si la cantidad de palabras supera las 100 lanzar la exception
SuperaLimiteException.
Defina e implemente el mensaje liquidacinTotal() en la clase Correo, que retorna el monto total que la
empresa debe cobrar en concepto de precios de envo.
Realice la implementacin del sistema completo en Java.
Provea una clase TestCorreo para instanciar y testear su sistema. En el mtodo main de esa clase cree el
siguiente escenario y enve a la empresa de correo el mensaje liquidacinTotal() para obtener la liquidacin
total.
Una empresa, con el CUIT y Razn Social que desee, y con los cuatro envos que se describen a
continuacin.
Una encomienda con 120 km. de recorrido y con 3.5 kg. de peso
Una carta con 650 km. de recorrido.
Una carta con 5 km. de recorrido.
Un telegrama con 405 Km. de recorrido y un texto Te deseo hoy y siempre felicidad completa.
Las clases se organizan en el paquete, cuyo nombre es su apellido.
116
117
118
if (pivot.compareTo(a[mid]) < 0)
UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo
119
<<interface>>
AccionesHumanas
+ desplazarse()
+ comer()
+ dormir()
+ bailar():void
+ estudiar():void
+ trabajar():void
<<class>>
Animal
<<class>>
Humano
<<class>>
Hombre
<<class>>
Mujer
<<class>>
Perro
<<class>>
Gato
120
Las variables de tipo interfaz tienen que referirse a un objeto de tipo de una
clase que implemente la interfaz.
Ejemplo: comparable = new Integer(4);
121
ClaseExterna
ClaseInterna
122
123
124
125
Colecciones
Object
AbstractCollection<E>
AbstractList<E>
AbstractMap<K,V>
AbstractSet<E>
ArrayList<E>
HashSet<E>
AbstractQueue<E>
TreeSet<E>
HashMap<K,V>
TreeMap<K,V>
PriorityQueue<E>
Dictionary<K,V>
Hashtable<K,V>
Properties
Vector<E>
Stack<E>
Collections
(sort, binarySearch, reverse, shuffle, fill, copy, min, max)
Arrays
(sort, binarySearch, copy, asList, fill)
AbstractSequentialList<E>
LinkedList<E>
126
Colecciones
ArrayList
java.util.ArrayList<T>
Ajusta automticamente su capacidad a medida que se
ingresan y eliminan elementos.
Es una clase genrica que admite un tipo como parmetro.
Mas eficiente que la clase Vector.
Construtores:
ArrayList<T>()
ArrayList<T>(int capacidadInicial)
127
Colecciones
ArrayList
Mtodos:
size(): int //nmero de elementos almacenados actualmente.
ensureCapacity(int capacidad): void
trimToSize(): void //reduce capacidad de almacenamiento a su
tamao actual
add(T obj): boolean
add(int indice, T obj): void //desplaza hacia adelante
set(int indice, T obj): void // sobreescribe
get(int indice): T
remove(int indice): T
remove(T obj): boolean
UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo
128
Colecciones
Stack
java.util.Stack<E>
Extiende a Vector.
Lgica LIFO
Constructores:
Stack()
Mtodos:
push(E obj): E
pop(): E
peek(): E
empty(): boolean
UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo
129
Colecciones
ArrayList<E>
Stack<E>
Usos:
ArrayList<Integer> vector = new ArrayList<Integer>();
System.out.println("Esta vacio?: " + vector.isEmpty());
vector.add(2);
vector.add(5);
vector.add(3);
System.out.println("toString: " + vector);
vector.remove(2);
System.out.println("toString: " + vector);
System.out.println("Esta vacio?: " + vector.isEmpty());
System.out.println("Posicin del elemento 5: " + vector.indexOf(5));
System.out.println("Tamao del vector: " + vector.size());
PriorityQueue<E>
LinkedList<E>
130
Colecciones
Mapa
Es una estructura de Java que permite almacenar pares
clave-valor.
Mapas importantes:
Properties:
Extiende a Hashtable (ordena por valor y no por clave)
til para almacenar y recuperar archivos de propiedades (opciones de
configuracin para programas)
HashMap
Extiende a AbstractMap
Implementacin basada en una tabla hash
131
Colecciones
Properties
Properties prop = new Properties();
prop.put(user, ppando);
prop.get(user);
prop.load(new FileInputStream(new
File("propiedades/prop.properties")));
HashMap
HashMap<String, Object> map = new HashMap<String,
Object>();
map.put("user", "ppando");
map.get("user");
UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo
132
Colecciones
Dato recursivo:
Si el nombre del tipo aparece en su propia definicin (una o
ms veces)
Ejemplo:
public class Nodo<T> {
private T elemento;
private Nodo<T> sig;
}
133
Colecciones
Pila Dinmica
public class PilaDinamica<T> implements Pila<T> {
class Nodo<T> {
private T elemento;
private Nodo<T> siguiente;
public Nodo() {
this(null, null);
}
public Nodo(T elemento, Nodo<T> siguiente) {
this.setElemento(elemento);
this.setSiguiente(siguiente);
}
public Nodo(T elemento) {
this(elemento, null);
}
public T getElemento() {
return this.elemento;
}
public void setElemento(T elemento) {
this.elemento = elemento;
}
public Nodo<T> getSiguiente() {
return this.siguiente;
}
134
Colecciones
Pila Dinmica
public class PilaDinamica<T> implements Pila<T> {
public void setSiguiente(Nodo<T> siguiente) {
this.siguiente = siguiente;
}
}
private Nodo<T> tope;
public PilaDinamica() {
this.setTope(null);
}
private Nodo<T> getTope() {
return this.tope;
}
private void setTope(Nodo<T> tope) {
this.tope = tope;
}
public boolean vacia() {
return (this.getTope() == null);
}
public void poner(T elemento) {
this.setTope(new Nodo<T>(elemento, this.getTope()));
}
135
Colecciones
Pila Dinmica
public class PilaDinamica<T> implements Pila<T> {
public void sacar() throws PilaVaciaException {
if (this.vacia())
throw new PilaVaciaException();
this.setTope(this.getTope().getSiguiente());
}
public T ver() throws PilaVaciaException {
if (this.vacia())
throw new PilaVaciaException();
return this.getTope().getElemento();
}
public void vaciar() {
while (!this.vacia())
try {
this.sacar();
} catch (PilaVaciaException pilaVaciaException) {
pilaVaciaException.printStackTrace();
}
}
136
Colecciones
Ejercicios:
1. En una terminal de teletipo existe un carcter de retroceso que permite cancelar el ultimo carcter.
Por ejemplo: si el carcter de retroceso es /, entonces la lnea abc/d//e ser interpretada como ae.
Existe tambin un carcter anulador que elimina todos los caracteres ingresados hasta el momento,
suponga que ese carcter es &. Realice un mtodo que dada una tira de caracteres terminadas con *
(leda del archivo Fuente.txt) ejecute las operaciones indicadas si se encuentra con el carcter / o el
&. Debe por ultimo imprimir la tira resultante. */
2. Un comercio tiene dos pilas con las facturas emitidas durante el da, una con los duplicados y otra
con los triplicados. De cada factura se conoce: nmero, importe y nombre del vendedor. Hacer un
mtodo que reciba las dos pilas y devuelva otra donde las copias de una misma factura queden juntas.
3. En un supermercado se mantiene una cola A con diversos clientes de los que se conoce nmero de
ubicacin en la cola y cantidad de productos que lleva. Se abre una nueva cola B para clientes que
llevan menos de 5 productos. Usted debe dejar en la cola A los clientes que llevan ms de 5 o hasta 5
productos en el orden en que estaban, y en la cola B los que compran menos de 5 artculos, respetando
el orden que tenan en la cola A. En ambas colas reasignar un nuevo nmero de ubicacin.
4. Se tiene una serie de trabajos para ser realizados en el computador en forma diferida. Los trabajos
se procesarn de acuerdo a una prioridad ya establecida; y a igualdad de prioridades, por orden de
llegada. Por cada trabajo que llega se conoce: cdigo, prioridad y kb de memoria estimada que
ocupar. Los mismos deben ser almacenados en la cola de espera de acuerdo al criterio antes
mencionado. Escribir funciones para:
A). Ingresar un trabajo en la cola.
B) Atender un trabajo. (El primero de la cola si alcanza la memoria disponible, de lo contrario el siguiente).
Considerar que se cuenta con una variable LIBRE que es la memoria disponible expresada en kb.
137
Colecciones
Ejercicios:
5. Hacer un programa que simule la prestacin de servicio de lectura/escritura de las
cabezas de un disco rgido. Cada pedido es un nmero entero, son 40, y no se hace
distincin entre lectura y escritura. Si las cabezas se mueven en un sentido, y se produce
un pedido que las obliga a moverse en sentido contrario, se debe producir una
penalizacin de tiempo debido a que se deben detener y avanzar en sentido contrario. Se
puede probar con una penalizacin fija igual a 2. Hallar el tiempo total de atencin de
todos los pedidos, teniendo en cuenta el sentido de movimiento de las cabezas. El
programa deber adems ingresar los pedidos en una cola de prioridades para luego ser
procesadas. La prioridad de calcula de acuerdo con el siguiente criterio: las cabezas, al
desocuparse, darn servicio al cilindro ms cercano al que se encuentre en ese momento.
6. Se tiene ordenada por cdigo de producto, una lista donde cada Producto, tiene como
atributos cdigo, descripcin, importe y stock. Implementar mtodos para:
A) Imprimir la lista completa.
B) Dado un entero k, imprimir el k-simo elemento.
C) Incrementar el importe de un producto dado en un 10%.
D) Devolver el stock de un producto dado o cero si no esta. Devolver tambin su ubicacin.
E) Hacer una funcin que devuelva dos listas, una de productos con stock inferior a 50 unidades
y la otra con el resto.
138
Excepciones
Introduccin:
Representan condiciones excepcionales que el programador
quiere tratar.
La clase Exception extiende la clase Throwable.
La clase Throwable provee caractersticas tiles para tratar
con excepciones.
Especficamente:
provee un slot para un mensaje.
contiene un stack trace.
139
Excepciones
Manejo de errores en tiempo de ejecucin:
Introduccin de datos de formato incorrecto.
(NumberFormatException)
Archivo con informacin incorrecta. (IOException)
ndice matricial incorrecto.
(ArrayIndexOutOfBoundsException)
null.mtodo() (NullPointerException)
140
Excepciones
Clasificacin de excepciones:
Error describe errores internos y el agotamiento de
recursos dentro del sistema de ejecucin de Java. No se
deben lanzar objetos de este tipo. No recuperable. No
comprobada.
Exception Se produce porque se ha cometido un error
de programacin. Recuperable. Comprobada.
RuntimeException No Comprobada.
Throwable
Error
Exception
IOException
RuntimeException
141
Excepciones
Tipos de excepciones:
Comprobadas:
Compilador verifica que el programador proporcione un
manejador.
Ejemplo: FileNoFoundException, SQLException, etc.
No Comprobadas:
Excepciones comunes, como acceder a una referencia nula que no
se comprueban.
Ejemplo: Error y todas las subclases de RuntimeException son
excepciones no comprobadas (NullPointerException,
ArrayIndexOutOfBoundException, NumberFormatException,
ClassCastException, ArithmeticException, etc.)
142
Excepciones
Declaracin:
Para crear excepciones propias generalmente se hace una
subclase de Exception.
package nombrePaquete;
{importaciones}
[modificadores] class nombreException extends
Exception {
}
143
Excepciones
Cmo se causan excepciones?
Implcitamente: el programa hace algo ilegal.
Explcitamente: ejecucin de la sentencia throw.
class SinNaftaException extends Exception { }
class Auto {
...
if (nafta < 0.1)
throw new SinNaftaException();
...
}
144
Excepciones
Cmo manejar una excepcin?
try {
// Cdigo que levanta una excepcin.
}
catch (TipoExcepcin nombre) {
// Cdigo que se ejecuta en caso de
excepcin.
}
finally {
// Cdigo que se ejecuta siempre.
// Es decir, si se produce o no la exception.
}
UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo
145
Excepciones
Cmo manejar mltiples excepciones?
try {
sentencias;
}
catch (TipoExcepcion1 nombre) {
}
catch (TipoExcepcion2 nombre) {
}
// En aumento a Exception (de lo particular a
lo general); al revs no compila
UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo
146
Excepciones
Ejemplo
public Object pop() throws SinElementosException {
if (this.getElementos().isEmpty()) {
throw new SinElementoException();
} else {
return this.getElementos().removeLast();
}}
...
try {
elemento = pila.pop();
} catch (SinElementosException e) {
e.printStackTrace();
}
UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo
147
Excepciones
Comportamiento de tipo reanudacin
boolean continuar = true;
while(continuar) {
try {
System.out.print("Introduce un nmero entero: ");
InputStreamReader datosInsertados = new InputStreamReader(System.in);
BufferedReader datos = new BufferedReader(datosInsertados);
String cadenaDatos = datos.readLine();
int numero = Integer.parseInt(cadenaDatos);
int cuadrado = numero * numero;
System.out.println("El cuadrado de " + numero + " = " + cuadrado);
continuar = false;
} catch(Exception e) {
System.out.println(e.getMessage());
}
}
148
Excepciones
Sobre el uso de excepciones:
Una condicin de error es tratada slo donde tiene sentido
hacerlo y no en todo el nivel entre que ocurre y es tratada.
El cdigo puede ser escrito como si todas las operaciones
funcionaran correctamente.
Deben ser tratadas lo ms especficamente posible.
No se deben dejar vacos o solo imprimiendo el stack trace
los bloques catch.
Stack Trace (Seguimiento de Pila):
Listado de todas las llamadas a mtodos pendientes en un
determinado momento de la ejecucin de un programa.
149
Logs
El sistema de generacin de logs maneja un registrador predeterminado llamado
Logger.global que se puede emplear en lugar de System.out
java.util.logging.Logger
Sintaxis inspirada en Log4j
Logs dirigirlos a Consola (ConsoleHandler), Archivo (FileHandler) o tubera (SocketHandler)
Se pueden definir registradores propios
Logger registrador = Logger.getLogger(com.miApp);
Existen 7 niveles de registros:
SEVERE fatales
WARNING advertencias
INFO
informaciones
CONFIG configuraciones
FINE
depuraciones
FINER
detalles
FINEST mas detalles
150
Logs
Envo de mensajes:
registrador.warning(Esto es un warning);
registrador.fine(Depuraciones); //=
registrador.log(Level.FINE, Depuraciones);
Mtodos de conveniencia para seguir el flujo de
ejecucin:
registrador.entering(UnaClase, unMetodo);
registrador.throwing(UnaClase, unMetodo,
Throwable);
registrador.exiting(UnaClase, unMetodo);
UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo
151
Logs
Ejemplo
import java.util.logging.*;
public class Main {
private static Logger logger = Logger.getLogger(Main.class.getName());
public static void main(String[] args) {
logger.setLevel(Level.FINER);
logger.setUseParentHandlers(false);
Handler manejador = new ConsoleHandler();
manejador.setLevel(Level.FINER);
logger.addHandler(manejador);
logger.entering(Main.class.getName(), "main");
logger.exiting(Main.class.getName(),"main");
}
}
UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo
152
Aserciones
Expresiones de uso frecuente para hacer programacin defensiva.
Solo deben emplearse para hallar errores internos del programa durante las pruebas.
El mecanismo de aserciones permite insertar pruebas durante la comprobacin y
hacer que se eliminen automaticamente en el cdigo de produccion.
Ejemplos:
assert condicin;
assert x>=0;
assert condicin : expresin; assert x>=0 : x;
Ambas sentencias evaluan la condicin y lanzan un AssertionError si resulta ser
false.
En la segunda sentencia, la expresin se le pasa al constructor del objeto
AssertionError y se transforma en una cadena de mensaje.
Las aserciones por default estan desactivadas. Se activan ejecutando el programa
con las opciones (argumentos de la VM):
-enableassertions o
-ea
Y se desactivan:
-disableassertions o
-da
UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo
153
Aserciones
Ejemplo
public class MainAsserciones {
public static void main(String[] args) {
int x = -1;
assert x>0:x;
}
}
154
Depurador de Eclipse
Se pueden fijar puntos de ruptura.
Sobre la lnea deseada <CTRL+SHIFT+B>
Empezar a depurar
Run Debug As Java Application
Inspeccionar variables.
Cuando el depurador se detiene en un punto de ruptura, se
puede ver la pila de llamadas y las variables locales.
155
Ejercicios
Ejercicio 1: Cree una clase con un mtodo main() que genere un objeto de
la clase Exception dentro de un bloque try. Proporcione al constructor de
Exception un argumento String. Capture la excepcin dentro de una
clusula catch e imprima el argumento String. Aada una clausula finally
e imprima un mensaje para demostrar que pas por all.
Ejercicio 2: Defina una referencia a un objeto e inicializela a null. Trate de
invocar un mtodo a travs de esta referencia. Ahora rodee el cdigo con
una clausula try-catch para probar la nueva excepcin.
Ejercicio 3: Escriba cdigo para generar y capturar una excepcin
ArrayIndexOutOfBoundsException (ndice de matriz fuera de lmites).
Ejercicio 4: Cree su propia clase de excepcin utilizando la palabra clave
extends. Escriba un constructor para dicha clase que tome un argumento
String y lo almacene dentro del objeto como una referencia de tipo String.
Escriba un mtodo que muestre la cadena de caracteres almacenada. Cree
una clusula try-catch para probar la nueva excepcin.
Ejercicio 5: Defina un comportamiento de tipo reanudacin utilizando un
bucle while que se repita hasta que se deje de generar una excepcin.
UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo
156
Ejercicio
Implementar un simulador de Vehculos. Existen dos tipos de Vehculos: Coche y Camin.
Sus caractersticas comunes son la matricula y la velocidad. En el momento de crearlos, la matricula se
recibe por parmetro y la velocidad se inicializa a cero. El mtodo toString() de los vehculos devuelve
informacin acerca de la matricula y la velocidad. Adems se pueden acelerar, pasando por parmetro la
cantidad en km/h que se tiene que acelerar.
Los coches tienen adems un atributo para el nmero de puertas, que se recibe tambin por parmetro en el
momento de crearlo. Tiene adems un mtodo que devuelve el nmero de puertas (este comportamiento
esta descripto en la interfaz Puertable).
Los camiones tienen un atributo de tipo Remolque que inicializa a null (para indicar que no tiene
remolque). Adems tiene un mtodo porRemolque(), que recibe el Remolque por parmetro, y otro quita
Remolque(). Cuando se muestre la informacin de un camin que lleve remolque, adems de la matricula y
la velocidad del camin, debe aparecer la informacin del remolque.
En esta clase hay que sobrescribir el mtodo acelerar de manera que si el camin tiene remolque y la
velocidad mas las aceleracin superan los 100 km/h se lance un excepcin de tipo
DemasiadoRapidoException.
Hay que implementar la clase Remolque. Esta clase tiene un atributo de tipo entero que es el peso y cuyo
valor se le da en el momento de crear el objeto. Debe tener un mtodo toString() que devuelva la
informacin del remolque.
Utilizando esta implementacin, desarrolle una aplicacin que haga lo siguiente:
Declare y cree un objeto de la clase ArrayList con 4 vehculos (2 camiones y 2 coches)
Suponiendo que no se sabe en que posicin del vector estn los coches y los camiones: Ponga un remolque
de 5000 Kg. a los camiones. Acelere todos los vehculos y escriba por pantalla la informacin de todos
ellos.
157
Ejercicio
Un banco contiene las Cuentas de sus clientes. Las CuentasDeAhorro no pueden tener
nmeros rojos. Las CuentasCorrientes pueden tener una CuentaDeAhorro asociada, de forma
que si se intenta retirar ms dinero del saldo actual, se debe retirar el dinero que falte de la
CuentaDeAhorro asociada.
1) Define Cuenta de forma que no pueda instanciarse. De toda Cuenta se debe poder ingresar y retirar
dinero, preguntar por el saldo, por el DNI del titular y debe tener un mtodo toString de devuelva al
menos el saldo y el DNI del titular.
2) Implementa las clases CuentaCorriente y CuentaDeAhorro.
3) Crea una especializacin CuentaDeAhorroEsp de CuentaDeAhorro en la que se aade un entero
penalizacin, de forma que se penaliza la retirada con una penalizacin % del dinero retirado.
Sobrescribe slo los mtodos necesarios (incluyendo constructor y toString).
4) Si el saldo de CuentaDeAhorro fuese a quedar negativo, antes de debe lanzar una excepcin
SaldoNegativo (que hereda de Exception).
5) Implementa la clase Banco que contiene un array polimrfico de Cuentas, incluyendo el
constructor que consideres ms apropiado.
6) Incluye el mtodo totalSaldoMaxPenalizacin en la clase Banco que devuelva la suma de los
saldos de todas las cuentas corrientes y la mxima penalizacin entre las CuentaDeAhorroEsp .
Crea una clase con mtodo main en la que instanciamos un Banco de 100 Cuentas, nos creamos una
CuentaCorriente con 500 euros y una cuenta de ahorro especial con una penalizacin del 5%.
Finalmente debe mostrar informacin de todas las Cuentas del Banco. En un bloque try & catch retirar
dinero de una cuenta de Ahorro.
158
Ejercicio
Una editorial de libros edita libros en tres formatos diferentes: edicin rstica, edicin blanco
y negro con tapa dura, edicin color con tapa dura.
La informacin de la editorial para todos los libros es igual: nombre autor, titulo libro,
cantidad de pginas, cantidad de figuras que tiene el libro. El costo de la impresin depende
en lo que el cliente solicita: rstica, tapa dura, o lujo
El costo de un libro editado en forma rstica es el valor por pgina por la cantidad de
pginas, el costo un libro editado con tapa dura es igual que el anterior ms un valor fijo y la
edicin de lujo es igual a la anterior ms un valor fijo por la cantidad de figuras a color que
lleva el libro, es decir:
Sea v el valor de la pgina, w el valor adicional por tapa dura y z el valor adicional por color,
entonces:
rstica: v x cantidad de pginas
tapa dura: v x cantidad de pginas + w
lujo: v x cantidad de pginas +w+ z x cantidad de figuras
Ingresar por teclado el nombre del cliente, la cantidad de libros a imprimir y qu tipo de
edicin solicita y almacenarlo en un ArrayList.
Ingresar por teclado los valores v, w y z y la cantidad de libros a imprimir y emitir el valor
total de edicin.
Se deber usar una interface que describe la funcionalidad costoEdicinLibro(), la misma
devuelve un double.
159
Ejercicio
160
Ejercicio
161
Ejercicio
162
Secuencias y Archivos
Secuencia
Secuencia de entrada: Un objeto del que se puede leer una
sucesin de bytes. (InputStream)
Secuencia de salida: Un objeto del que se puede escribir
una sucesin de bytes. (OutputStream)
La clase File
No sirve ni para leer ni para escribir en un archivo, sino que
sirve para trabajar con el sistema de archivos de la mquina
del usuario.
Puede representar tanto archivo como directorio.
163
Stream
Operaciones de Flujo:
1.Apertura del Flujo
2.Lectura/Escritura en el
flujo
3.Cierre del Flujo
164
Secuencias y Archivos
File f = new File(c:\\prueba.txt);
= new File(c:\\, prueba.txt);
= new File(File directorio, String nombre);
canRead(): boolean
canWrite():boolean
delete():boolean
exits():boolean
getCanonicalFile(): File
getCannonicalPath(): String
getName(): String
getParent(): String
UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo
165
Secuencias y Archivos
getParentFile(): File
getPath(): String
isDirectory(): boolean
isFile(): boolean
isHidden(): boolean
lastModified(): long
length(): long
list(): String[]
listFiles(): File[]
list(FilenameFilter): String[]
listFiles(FilenameFilter): File[]
UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo
166
Secuencias y Archivos
createNewFile(): boolean
mkdir(): boolean
renameTo(File): boolean
setLastModified(long fecha): boolean
setReadOnly(): boolean
toURL(): URL
167
Secuencias y Archivos
La interfaz FilenameFilter
public class FiltroExtensiones implements
FilenameFilter
{
private String extension;
public FiltroExtensiones(String extension) {
this.extension = extension;
}
public boolean accept(File dir, String nombre) {
return nombre.endsWith(extension);
}
}
UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo
168
Secuencias y Archivos
Lectura de Objetos
ObjectInputStream ois = new ObjectInputStream(new
FileInputStream(new File("c:\\prueba.dat")));
Punto p = (Punto) ois.readObject();
System.out.println(p.getX());
Escritura de Objetos
ObjectOutputStream oos = new ObjectOutputStream(new
FileOutputStream(new File("c:\\prueba.dat")));
oos.writeObject(new Punto(1,2));
169
Secuencias y Archivos
BufferedReader(Reader)
Object
Writer
OutputStreamWriter
Reader
BufferedWriter
InputStreamReader
FileWriter
FileWriter(File)
FileWriter(File, boolean)
FileWriter(String)
FileWriter(String, boolean)
BufferedReader
FileReader
FileReader(File)
FileReader(String)
BufferedWriter(Writer)
170
Secuencias y Archivos
Lectura de Texto
BufferedReader br = new BufferedReader(new
FileReader("c:\\prueba.dat"));
while((linea=br.readLine()) != null)
System.out.println(linea);
//otra forma de leer!!!
for (; in.ready(); linea += in.readLine() + "\n");
Escritura de Texto
BufferedWriter bw = new BufferedWriter(new
FileWriter("c:\\prueba.dat"));
bw.write(hola);
bw.newLine();
UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo
171
172
173
Cada termino del polinomio ser representado por un objeto de una clase Termino y
cada polinomio por un objeto que sea una lista lineal simplemente enlazada
ordenada de elementos Termino.
Los trminos de un polinomio estarn ordenados ascendentemente primero por x y
despus por y. El algoritmo que emplearemos ser el siguiente: a cada unidad del
exponente x le damos un peso k y a cada unidad del exponente de y un peso de 1; la
suma de ambas cantidades nos da el valor utilizado para efectuar la ordenacin
requerida. El valor de k ser la potencia de 10 que sea igual o mayor que el mayor
de los exponentes de x e y del termino a insertar.
Construir un polinomio, inicialmente con 0 trminos.
Construir un polinomio con trminos ledos de un archivo.
Obtener el numero de trminos que tiene actualmente un polinomio.
Sumar dos polinomios. El polinomio resultante quedara tambin ordenado.
Obtener la cadena de caracteres correspondiente a la representacin de un
polinomio con el formato del ejemplo siguiente: + 5x^5y + 7x^2 xy^3 + 5.25.
174
class Sistema
EA 8.0 versin
de prueba
no registrada EA 8.0 versin deVerificadorLinea
prueba no registrada
VerificadorArchiv
o
-
ArchivoUno: File
ArchivoDos: File
+
+
+
+
+
VerificadorArchivo(File, File)
sincronizar() : void
getConflictos() : ArrayList<VerificadorLinea>
mostrarConflictos() : void
mostrarConflictos(File) : void
lineaArchivoUno: String
lineaArchivoDos: String
sonIguales: boolean
+ VerificadorLinea(String, String)
EA 8.0 versin de prueba no registrada EA 8.0 versin
de prueba no registrada
- comparar() : boolean
+
toString() : String
175
Generics
Consiste en escribir cdigo que se puede reutilizar para objetos
de muy distintos tipos.
Antes de JDK 5.0, la programacin genrica en Java siempre
se realizaba por herencia (Object). Problemas:
Se necesita una refundicin siempre que se recupera un valor.
No hay comprobacin de errores. Un error de compilacin es mucho
mejor que una excepcin de refundicin (ClassCastException) durante
la ejecucin.
Desventajas:
No es tan fcil implementarlas.
UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo
176
Generics
Convencin de nombres de las variables de tipo:
E
Tipo de clave.
Ejemplo: Hashtable<K,V>
177
Generics
Definicin de una clase genrica:
Es una clase que tiene una o mas variables de tipo.
Ejemplo:
public class Pareja <T> {
private T prim;
private T seg;
public Pareja() {prim=null; seg=null;}
public Pareja(T p, T s) {prim=p; seg=s;}
public T getPrim() {return prim;}
public T getSeg() {return seg;}
}
178
Generics
Los tipos genricos se particularizan reemplazando
las variables de tipo por tipos, de la forma:
Pareja<String> obj = new Pareja<String>();
Pareja<String> obj2 = new Pareja<String>(1,
2);
String primero = obj2.getPrim();
179
Generics
Mtodos genricos:
Se puede definir un nico mtodo con parmetros de tipo.
public class AlgMatrices {
public static <T> T getInicial(T[] a) {
return a[a.length/2];
}
}
String [] vocales = {a, e, i};
String inicial =
AlgMatrices.<String>getInicial(vocales);
UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo
180
Generics
Lmites para las variables de tipo:
Restringir T a una clase que implemente una interfaz o a
una subclase. Ejemplo:
public static <T extends Comparable> T min(T[] a){
...
}
181
Generics
Lmites para las variables de tipo:
No es posible reemplazar un parmetro de tipo por un tipo primitivo.
No es posible lanzar ni capturar objetos de clases genricas.
No se permite que una clase genrica extienda a Throwable.
No es posible declarar vectores de tipos parametrizados. Ejemplo:
Pareja<String> [] v = new Pareja<String>(10); //Error
182
Generics
Tipo comodn:
Denota cualquier tipo genrico de Pareja cuyo parmetro de
tipo sea una subclase CuentaBancaria, tal como
Pareja<CajaDeAhorro>, pero no Pareja<String>
Pareja<? extends CuentaBancaria>
183
<Operando> ::= Z
<Operando> ::= Z <Operando>
Acciones semnticas:
[C]<Operando>[/C]
//Cuenta caracteres.
[W]<Operando>[/W]
// Cuenta palabras.
[M]<Operando>[/M]
// Transforma a maysculas.
[m]<Operando>[/m]
//Transforma a minsculas.
[Q]<Operando>,<Operando>[/Q] // Verifica si son iguales, escribiendo SI o NO
184
<<abstract>>
Traductor
- programa
OPERANDO
Problema
Interprete
Compilador
+ ejecutar: ResultadoEjecucion
ResultadoCompilacion
<<enum>>
TipoProblemas
- desc:String
- ubic: Integer
ERROR,
WARNING,
SIN_PROBLEMAS
+ compilar():ResultadoCompilacion
ResultadoEjecucion
<<abstract>>
Instruccin
<<enum>>
TipoErrores
-palResInicio:String
Programa
- instrucciones
- compilado:Boolean
+ esSintacticamenteCorrecta():TipoProblema
+ ejecutar():String
PRG_VACIO,
PRG_SIN_INST,
PRG_CON_MUL_INS,
PRG_ERROR_SINTAX
+ agregarInstruccion(Instruccin):void
InstruccionIniP
InstruccionFinP
InstruccionC
InstruccionW
- operando:Str
- pResFin:Str
- operando:Str
- pResFin:Str
InstruccionMAY
InstruccionMIN
- operando:Str
- pResFin:Str
- operando:Str
- pResFin:Str
InstruccionQ
- operando1:Str
- operando2:Str
- pResFin:Str
185
186
Modificadores de acceso.
SEM
Nomenclaturas.
ADV
0 Advertencias.
DOC
Documentacin/Comentarios.
IND
Indentacin.
LIN
Lneas en Blanco.
DEP
No cdigo comentado.
TYS
REU
Reutilizacin.
FUNCIONALES
LP1
Programa vaco.
LP2
LP3
LP4
LP5
LP6
LP7
LP8
LP9
187
Parcial N 1 2014
Un VideoClub pone a disposicin de sus socios series, pelculas y videojuegos
Crear una clase llamada Pelcula con las siguientes caractersticas:
Sus atributos son titulo, ao, entregado, genero y director.
Por defecto, el genero es no definido y entregado false. El resto de atributos sern valores por defecto segn el tipo del atributo.
Los constructores que se implementaran sern:
Un constructor por defecto.
Un constructor con el titulo y director. El resto por defecto.
Un constructor con todos los atributos, excepto de entregado.
Los mtodos que se implementara sern:
Mtodos get de todos los atributos, excepto de entregado.
Mtodos set de todos los atributos, excepto de entregado.
Sobrescribe los mtodos toString.
Crear una clase llamada Serie con las siguientes caractersticas:
Sus atributos son titulo, numero de temporadas, entregado, genero y creador.
Por defecto, el numero de temporadas es de 3 temporadas y entregado false. El resto de atributos sern valores por defecto segn el tipo del
atributo.
Los constructores que se implementaran sern:
Un constructor por defecto.
Un constructor con el titulo y creador. El resto por defecto.
Un constructor con todos los atributos, excepto de entregado.
Los mtodos que se implementara sern:
Mtodos get de todos los atributos, excepto de entregado.
Mtodos set de todos los atributos, excepto de entregado.
Sobrescribe los mtodos toString.
Crear una clase Videojuego con las siguientes caractersticas:
Sus atributos son titulo, horas estimadas, entregado, genero y compaa.
Por defecto, las horas estimadas sern de 10 horas y entregado false. El resto de atributos sern valores por defecto segn el tipo del atributo.
Los constructores que se implementaran sern:
Un constructor por defecto.
Un constructor con el titulo y horas estimadas. El resto por defecto.
Un constructor con todos los atributos, excepto de entregado.
Los mtodos que se implementara sern:
Mtodos get de todos los atributos, excepto de entregado.
Mtodos set de todos los atributos, excepto de entregado.
Sobrescribe los mtodos toString.
188
189
190
Parcial N 2 2014
Resolver cincuenta mltiples choices.
Completar resultados en grilla (con marca X)
1
2
...
50
Se aprueba con el 60% de los tems correctos (36 correctos)
UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo
191