You are on page 1of 191

Programacin con Objetos I

Prof. Ing. Pablo Pandolfo

UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo

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

UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo

Pautas:
Condiciones de Regularizacin
Aprobar:
Dos parciales tericos/prcticos y/o un recuperatorio.
Dos trabajos prcticos especiales a definir durante la cursada.

Metodologa de Desarrollo de Software


eXtreme Programming (XP): Programacin de a pares
(conductor/observador)
Clase.
Trabajos prcticos especiales.
Parciales (el Final es individual)

Personal Software Process (PSP): Mtricas + Lotes de Prueba.


Ejercicios del apunte, auxiliares y de la OIA (Olimpadas
Informtica Argentina)
http://www.oia.unsam.edu.ar/problemas/

UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo

Mtricas:

UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo

Organizacin de carpetas para lotes de prueba:


NombreProblema

<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

UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo

Web Site de la Ctedra


https://sites.google.com/site/unoprogconobjetos1/
Docentes, Lugar de cursada, Horarios y Fechas
Importantes.
Material didctico.
Alumnos.
Sobre sus profesores.
Links de inters.
Ejemplos con cdigo.

UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo

Introduccin a Programacin con Objetos


Paradigma:
Coleccin de modelos conceptuales (principios o fundamentos especficos) que
juntos modelan el proceso de diseo, orientan la forma de pensar y solucionar
los problemas y, por lo tanto, determinan la estructura final de un programa.
Clasificacin
Operacionales: Indican el modo de construir la solucin, es decir detallan paso a
paso el mecanismo para obtenerla (secuencia e instrucciones de control)
Declarativos: Describen las caractersticas que debe tener la solucin.
(proposiciones, condiciones, ecuaciones, transformaciones)

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

Introduccin a Programacin con Objetos


Paradigma Orientado a Objetos. Definicin:
Dentro de los paradigmas operacionales.
Se fundamenta en concebir a un sistema como un conjunto
de entidades que representan al mundo real, los objetos,
que tienen distribuida la funcionalidad e informacin
necesaria y que cooperan entre s para el logro de un
objetivo comn.

UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo

Introduccin a Programacin con Objetos


Paradigma Orientado a Objetos. Objetivos:
Desarrollar los sistemas con modelos ms cercanos a la realidad que a
las especificaciones computacionales.
Construir componentes de software que sean reutilizables.
Disear una implementacin de manera que puedan ser extendidos y
codificados con el mnimo impacto en el resto de su estructura.

UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo

10

Introduccin a Programacin con Objetos


Paradigma Orientado a Objetos. Caractersticas:
Estructura de desarrollo modular basada en objetos, que son definidos
a partir de clases, como implementacin de tipos abstractos de datos.
Encapsulamiento como forma de abstraccin que separa las interfaces
de las implementaciones de la funcionalidad del sistema (mtodos) y
oculta la informacin (variables).
Mecanismo de envo de mensajes, que posibilita la interaccin entre
los objetos y permite la delegacin de responsabilidades de unos
objetos a otros.
Polimorfismo, basado en el enlace dinmico, de forma que las
entidades del programa puedan referenciar en tiempo de ejecucin a
objetos de diferentes clases.
Herencia, que permite que una clase sea definida como una extensin
o modificacin de otra.
UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo

11

Introduccin a Programacin con Objetos


Objeto:
Los objetos son abstracciones que representan las entidades del mundo real
que forman parte del dominio del problema, a los componentes
computacionales, tanto de software como de hardware, y a toda unidad de
informacin que sea necesaria para desarrollar un programa.
Todo es pensado como un objeto.
Al implementar los objetos mediante un lenguaje de programacin, los
atributos que conforman el estado interno se denominan variables o
colaboradores internos y a las funcionalidades que conforman su
comportamiento se las llama mtodos. Estos pueden requerir de
colaboradores externos (ayudan al objeto a responder un mensaje especfico)

UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo

12

Introduccin a Programacin con Objetos


Objetos como Abstracciones
Un objeto presenta:
Un comportamiento bien determinado
Qu hace el objeto?
Representa la esencia del ente

Una implementacin para ese comportamiento


Cmo hace el objeto lo que hace?
Provee una posible implementacin para esa esencia

Una Identidad
Cmo podemos distinguir un objeto de otro?
Identidad vs. Igualdad.

Ciclo de vida de un objeto:


Creacin.
Uso.
Destruccin.
UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo

13

Introduccin a Programacin con Objetos


Encapsulamiento
Un objeto no conoce el funcionamiento interno de los
dems objetos y no lo necesita para poder interactuar con
ellos, sino que le es suficiente con conocer su interfase, es
decir saber la forma en que debe enviarles sus mensajes y
como va a recibir la respuesta. Ante la modificacin de una
funcionalidad en particular del sistema, en la medida que su
implementacin este encapsulada en un objeto, el impacto
que produce su cambio no afectara a los otros objetos que
interactan con l.

UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo

14

Introduccin a Programacin con Objetos


Polimorfismo
Permite a dos o mas objetos distintos tengan definidos mtodos de
igual nombre, pero cada uno con su correspondiente implementacin.
Un objeto emisor puede comunicarse con cualquiera de estos objetos
mandndole un mensaje donde se menciona el nombre del mtodo, y el
objeto receptor ejecutara la implementacin que tenga definida,
independientemente de la otras implementaciones que tengan los otros
objetos. Desde el punto de vista del objeto emisor, tampoco le interesa
conocer si ante la misma invocacin hecha a diferentes objetos, la
forma en que cada uno de ellos ejecuto el mtodo internamente fue la
misma o no.
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.
UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo

15

Introduccin a Programacin con Objetos

UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo

16

Introduccin a Programacin con Objetos


Binding:
Binding Temprano o Esttico
Operandos y operadores son ligados en tiempo de compilacin.
Es el programador quin decide qu se debe ejecutar.

Binding Tardo o Dinmico


Operandos y operadores son ligados en tiempo de ejecucin.
Es el objeto receptor del mensaje quin decide qu se debe ejecutar.

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).
UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo

17

Introduccin a Programacin con Objetos


Clase:
Es un objeto responsable de crear otros objetos (sus
instancias)
Describe completa y detalladamente la estructura de
informacin y el comportamiento que tendr todo objeto
de esa clase, o sea, define el conjunto de variables y de
mtodos que determinan como van a ser y como se van a
comportar sus objetos.
Qu sucede cuando las clases comparten parte del
conocimiento que representan?
Subclasificacin

UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo

18

Introduccin a Programacin con Objetos


Relaciones entre clases:
Dependencia (Colaboradores Externos)
utiliza un
Pedido utiliza la clase Cuenta.

Composicin (Colaboradores Internos) / Agregacin


tiene un
Pedido contiene objetos de tipo Articulo.

Herencia (Compartir conocimiento)


es un
PedidoVigente es un Pedido.

UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo

19

Introduccin a Programacin con Objetos

UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo

20

Introduccin a Programacin con Objetos


Lenguajes Orientados a Objetos. Caractersticas.
Bsicas:
Todo es un objeto.
Todo objeto es instancia de una clase.
Todos los objetos de la misma clase pueden recibir los mismos mensajes.
Las clases se organizan en una estructura arbrea de raz nica, llamada
jerarqua de herencia.
Un programa es un conjunto de objetos que se comunican mediante el
envo de mensajes.

Opcionales:
Genericidad.
Gestin de errores.
Aserciones.
Tipado esttico.
Recogida de basura.
Reflexin.

UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo

21

Introduccin a Programacin con Objetos


Lenguajes Orientados a Objetos. Historia.
1967. Simula67. Ole-Johan Dahl y Kristen Nygaard de Norwegian Computer
Center (Noruega). Modelado y simulacin de procesos industriales y
cientficos.
1980. Smalltalk. Alan Kay. LOO puro.
1980-1986:
Extensiones de Smalltalk: Smalltalk/V
Extensiones de C: Objective C, C++ (Bjarne Stroustrup)
Extensiones de Pascal: Object Pascal, Delphi
Extensiones de LISP: CLOS
Extensiones de Simula: Eiffel (Bertrand Meyer) (puro)

1986. Primera conferencia internacional sobre LOO.


A partir de los 90 proliferan con gran xito la tecnologa y LOO.
1995. Java. James Gosling de Sun Microsystems. "write once, run anywhere"
Los mas implantados en la actualidad: Java, C++ y PHP.
C#, Python, Ruby, Delphi son otros LOO muy utilizados.
UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo

22

Introduccin a Programacin con Objetos


Caso de estudio: Envo de Flores
Ejemplo: Supongamos que Luis quiere enviar flores a Alba, que vive
en otra ciudad.
Luis va a la floristera ms cercana, regentada por un florista llamado
Pedro.
Luis le dice a Pedro que tipo de flores enviar a Alba y la direccin de
recepcin.

El mecanismo utilizado para resolver el problema es encontrar un


agente apropiado (Pedro)
Enviarle un mensaje conteniendo la peticin (enva flores a Alba).
Es la responsabilidad de Pedro satisfacer esa peticin.
Para ello, es posible que Pedro disponga de algn mtodo (algoritmo o
conjunto de operaciones) para realizar la tarea.
Luis no necesita (ni le interesa) conocer el mtodo particular que Pedro
utilizar para satisfacer la peticin: esa informacin est OCULTA
UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo

23

Introduccin a Programacin con Objetos


Caso de estudio: eMail
Cada usuario tiene una casilla de correos
La correspondencia puede ser texto o imagen
Queremos mostrar el contenido de una casilla
Comparemos:
El paradigma procedural o imperativo (C/Fortran/BASIC/Pascal)
El paradigma orientado a objetos (Java/C++/Smalltalk/Eiffel)

Agreguemos correspondencia de audio

UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo

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

Un lenguaje: posibilita el desarrollo de aplicaciones


seguras, robustas sobre mltiples plataformas en redes
heterogneas y distribuidas.
Sintaxis agradable.
Semntica comprensible.
UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo

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.

UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo

27

Introduccin
Principales caractersticas del Lenguaje:
Simple y Familiar
Orientado a Objetos
Distribuido
Robusto
Seguro

Arquitectura neutral
Multithread
Interpretado
Dinmico

UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo

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

UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo

29

Introduccin
Orientado a Objetos:
Java posee todas las caractersticas de un lenguaje
orientado a objetos
Polimorfismo.
Encapsulamiento.
Herencia.

Java implementa herencia simple de clases. Una clase


puede ser subclase de una nica clase. Todas las clases
heredan de la clase Object. (Todo es un objeto)
Java enriquece el modelo de herencia simple de clases,
implementando interfaces.
UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo

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.

UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo

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.

Chequeos de seguridad en el Class Loader:


Las clases de la API Java no pueden ser sobrescritas por clases importadas
desde la red.
Las clases importadas desde la red, se ubican en espacios de nombres
privados.

Verificacin del ByteCode: el intrprete Java chequea los archivos


.class que vienen de la red, evaluando:
Que el cdigo no falsifique punteros.
Que el cdigo no viole restricciones de acceso.
Que el cdigo no viole el acceso a los objetos usando casting.
UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo

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.

UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo

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)

UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo

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.

UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo

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)

Entornos integrado de desarrollo (IDE)


Forte
Sun ONE Studio
Sun Java Studio
Netbeans (IDE de SUN, principal competencia de Eclipse)
Eclipse (escrito en Java)

Opciones de entorno:
JDK + editor de texto
IDE

Uso de herramientas de la lnea de comandos


Abrir ventana de shell
Ejecutar los siguientes comandos:
Javac Bienvenido.java
Java Bienvenido
UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo

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

UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo

39

Introduccin
La aplicacin Hola Mundo
Modificador de
acceso

Todo vive dentro


de una clase

Delimita bloques

public class HelloWorld {


public static void main(String[] args) {
System.out.println(Hola mundo);
}
}
>>> javac HelloWorld.java
>>> java HelloWorld
>>> Hola mundo

Invocacin de
mtodo

Terminacin de
sentencia

JVM empieza la ejecucin en el cdigo que se encuentra en el mtodo main


Eclipse  se ejecuta <CTRL>+<F11>

UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo

40

Componentes del lenguaje


En Java existen dos categoras de tipos de datos:
Tipos primitivos:
int
boolean
char
byte
short
long
float
double

32-bit complemento a dos


true o false
16-bit caracteres Unicode
8-bit complemento a dos
16-bit complemento a dos
64-bit complemento a dos
32-bit IEEE 754
64-bit IEEE 754

Clases o interfaces

Java es un lenguaje fuertemente tipado:


Comprobacin estricta de tipos: todas las variables tienen que tener un
tipo declarado.
UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo

41

Componentes del lenguaje


Para los tipos primitivos existen clases wrappers:
int Integer
boolean Boolean
char Character
...

Para qu utilizar las clases wrappers?


Java no es un lenguaje orientado a objetos puro.

UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo

42

Componentes del lenguaje


Clase String:
Es una secuencia de caracteres.
No es un tipo primitivo.
Los String son instancias de la clase java.lang.String.
El compilador trata a los String como si fuesen tipos del lenguaje.
La clase tiene varios mtodos para trabajar con ellos.
Son inmutables.
Como crear uno:
String saludo = Hola;
String otroSaludo = new String(Como ands?);
saludo.length();
saludo.charAt(0);
saludo.substring(0,2);
saludo.compareTo(adios);
saludo.equals(Hol);
saludo.split(o);
saludo.trim();

saludo.indexOf(a);
saludo.indexOf(a, 2);
saludo.toLowerCase();
saludo.toUpperCase();
saludo.equalsIgnoreCase(h);
saludo.endsWith(la);

UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo

43

Componentes del lenguaje


Operadores:
Asignacin:
i = i + 1;
j += k;
Aritmticos:
i+4*f
j (8 / b)
Lgicos:
a && b
d || c
!a

Relacionales:
2 >= p
a == 5
b != 8
Otros:
i++
j-[] . () (refundicin) new instanceof
Condicional:
(x<y)?x:y

UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo

44

Componentes del lenguaje


Arreglos:
Todo arreglo es de un tipo o una clase.
Se los instancia con el operador new
Son zero-based
Ejemplos:
char[] carcteres;
String[] palabras = new String[10];
float[] arreglo = {2, 4, 6};
int[][] matriz = {{1}, {3, 4}};
carcteres = new char[]{a, 1};
palabras[2] = chango;

UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo

45

Componentes del lenguaje


Parmetros de la lnea de comandos
public class Mensaje {
public static void main(String[] args) {
if (args[0].equals(-h))
System.out.println(Hola );
if (args[0].equals(-a))
System.out.println(Adis );
for(int i=1; i<args.length; i++)
System.out.println( + args[i]);
System.out.println(!);
}
}
UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo

46

Componentes del lenguaje


Parmetros de la lnea de comandos:
>>> java Mensaje h mundo cruel
>>> Hola, mundo cruel!
>>> java Mensaje a mundo cruel
>>> Adis, mundo cruel!

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

Componentes del lenguaje


Estructuras de control:
if:
if (condicin) {
sentencias;
}
while:
while (condicin) {
sentencias;
}
for:
for (int i=0; i < 8; i++) {
sentencias;
}
for (tipo elemento: coleccin) {
sentencias; // por c/ elemento
}

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

UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo

Rompe el flujo de
control.

48

Componentes del lenguaje


Comentarios:
No aparecen en el programa ejecutable.
Existen tres tipos:
Por lnea: //
Bloque de cdigo: /* */
JavaDoc: /** */ Genera automticamente la documentacin.
En HTML a partir del Programa Fuente.
Vista en Eclipse.
Marcadores:
@param
@return
@throws
@exception
@author
@version
@deprecated

UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo

49

Componentes del lenguaje


Entrada y Salida
Entrada de datos por teclado:
Scanner in = new Scanner(System.in);
in.nextLine(); //lee una lnea de entrada
in.next();
//lee una sola palabra
in.nextInt(); //lee un entero
in.nextDouble(); //lee nmero de coma
flotante
in.hasNext();
//si hay o no otra palabra
in.hasNextInt(); //si hay o no otro entero
in.hasNextDouble(); //si hay o no otro
nmero de coma flotante
UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo

50

Componentes del lenguaje


Entrada y Salida
Salida de datos a consola:
System.out.print(Hola mundo);
System.out.println(Hola mundo);
Double x = 10000.0/3.0;
System.out.println(x); //3333.3333333
System.out.printf(%8.2f, x); //3333.33
System.out.printf(%,.2f, x); //3,333.33
String.format(Hola, %s. El ao que viene
tendrs %d, nombre, edad);
UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo

51

Componentes del lenguaje


Ejercicios:
Recorrer el siguiente arreglo de nmeros sumando en una
variable los nmeros pares y en otra los impares.
Recorrerlo utilizando un for y luego utilizando un while.

int[] arreglo = new int[150];


int pares;
int impares;
Imprimir los 20 primeros nmeros enteros positivos.
Sumar los 1000 primeros nmeros naturales
(1+2+3+4+...+1000), imprimiendo por cada suma el
resultado parcial obtenido.
Comprobar si un entero es par o impar.
UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo

52

Componentes del lenguaje


Ejercicios:
Nmeros "pedrisco"
Se ha comprobado experimentalmente para nmeros naturales muy grandes que si a un nmero natural, N, se le
somete al siguiente proceso:
Si el nmero es par, dividirlo por 2
Si es impar, multiplicarlo por 3 y sumar 1
Si N es igual a 1, finalizar el proceso. Si N es distinto de 1 volver al paso 1.

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.

UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo

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

UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo

54

Clases y Objetos
Forma general de declaracin de una Clase:
package nombrePaquete;
{importaciones}
[modificadores] class nombreClase
[extends nombreSuperClase]
[implements nombresInterfaces] {
}

Si una clase no declara explcitamente su superclase,


entonces se asume que extiende a la clase Object.

UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo

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.

UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo

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.

UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo

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

UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo

59

Clases y Objetos

UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo

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:

public class MesaAlgarrobo extends Mesa {


public MesaAlgarrobo() {}
}
abstract class Mesa {
Mesa() {}
}
UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo

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.

UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo

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

UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo

65

Clases y Objetos
Variables, accesibilidad:

public class MesaAlgarrobo extends Mesa {


private Color color;
bool redonda;
}
UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo

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

UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo

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.

UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo

68

Clases y Objetos
Variables:
Visibilidad: bloque de cdigo en donde es accesible la
variable
Hay 3 categoras:

UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo

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.

[accesibilidad] [modificadores] tipoRetorno


nombreMtodo([parmetros]) [throws
excepciones] {
...
}

Ejemplo: public boolean isEmpty() {...}


UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo

70

Clases y Objetos
Mtodos, modificadores:

Se declaran mtodos privados cuando:


Demasiado cerca de la implementacin
Requieren un determinado orden de llamada
Se utilizan en las operaciones de la propia clase
UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo

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

final:El mtodo no puede ser redefinido por las subclases.


native: El mtodo est implementado en otro lenguaje.
synchronized: Permite que mltiples objetos invoquen el
mismo mtodo con exclusin mutua.
UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo

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)

UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo

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

UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo

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.

UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo

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

UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo

80

Clases y Objetos
Creacin:
Se lleva a cabo utilizando los constructores.
Rectangle rect = new Rectangle();

Esta sentencia realiza:


Declaracin
Instanciacin
Inicializacin

UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo

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

UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo

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;

UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo

83

Clases y Objetos
Finalizacin:
Conceptualmente existen dos variantes:
El usuario se encarga de liberar los recursos (Delphi).

El sistema es el encargado de liberar los recursos (Smalltalk, Java).

UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo

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

El programador agrupa sus clases e interfaces en paquetes,


anteponiendo la clusula package NombreDelPaquete; a las
declaraciones de todas las clases e interfaces agrupadas.
Se recomienda utilizar el nombre de dominio de Internet al revs.
Ejemplo: ar.edu.uno.programacion.uno.xxx.
No puede haber dos paquetes con el mismo nombre dentro de un
mismo paquete.
UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo

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.

UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo

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

Importando el paquete ntegro:


import graphics.*;
Circle miCir = new Circle();
Rectangle miRec = new Rectangle();
*: no tiene efectos negativos sobre el tamao del cdigo.
UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo

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

UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo

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;

UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo

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

Es un mecanismo potente y complejo.


Inters especial para los constructores de herramientas y no
para los programadores de aplicaciones.
UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo

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.

UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo

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.

UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo

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

UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo

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

UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo

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

UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo

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.

UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo

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

UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo

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

Crear clases nuevas que se construyan tomando como


base clases ya existentes.
Cuando se hereda, se reutilizan mtodos y atributos
(pueden ser statics)
Permite extender la funcionalidad de un objeto.
UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo

103

Herencia

Generalidades
Especialidades
(cambios no
afectan a la
superclase)

UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo

104

Herencia

UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo

105

Herencia
public class CajaDeAhorro extends
CuentaBancaria {
}

CajaDeAhorro es subclase/clase derivada / clase hija


Especialidades
Tiene mas funcionalidad
Cambios no afectan a la superclase.

CuentaBancaria es superclase / clase base / clase


padre
Generalidades
UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo

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

UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo

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

UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo

108

Herencia

UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo

109

Herencia

UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo

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)

UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo

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.

Binding Tardo o Dinmico


Operandos y operadores son ligados en tiempo de ejecucin.
Es el objeto receptor del mensaje quin decide qu se debe ejecutar.
La Mquina Virtual tiene que llamar a la versin del mtodo que
sea la adecuada para el tipo real del objeto al que se refiere.

UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo

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

public String toString()


Utilizado para obtener una representacin textual conveniente.
Los wrappers de tipos primitivos (Integer, Character, Boolean) lo
sobrescriben.

UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo

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

UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo

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.

UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo

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.

UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo

116

Interfaces y clases internas


Interface
Es una forma de describir lo que deberan hacer las clases sin
especificar como deben hacerlo (protocolo de comportamiento)
Es una coleccin de declaraciones de constantes y definiciones de
mtodos sin implementacin, agrupados bajo un nombre.
La razn de usar interfaces es que Java tiene comprobacin estricta de
tipos. Cuando se hace una llamada a un mtodo, el compilador necesita
ser capaz de averiguar si el mtodo existe realmente.
Puede extender mltiples interfaces. Por lo tanto, se tiene herencia
mltiple de interfaces.
Una clase que implementa una interfaz debe implementar cada uno de
los mtodos que estn definidos en sta. Una clase puede implementar
una o mas interfaces.

UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo

117

Interfaces y clases internas


Forma general de declaracin:
package nombrePaquete;
{importaciones}
[public] interface NombreInterfaz [extends
SuperInterfaces] {
[Constantes]
[Encabezados de mtodos]
}

SuperInterfaces es una lista de nombres de interfaces


separados por coma.
Una interfaz hereda todas las constantes y mtodos de sus
SuperInterfaces.
UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo

118

Interfaces y clases internas


public interface Comparable<T> {
int compareTo(T otro);
}
public class CuentaBancaria implements
Comparable<CuentaBancaria> {
public int compareTo(CuentaBancaria otro){
if (saldo < otro.saldo) return -1;
if (saldo > otro.saldo) return 1;
return 0;
}
Arrays.sort(Object []);
Algoritmo de ordenamiento por fusin, ordena invocando
a compareTo.
Comparable<Object> pivot = (Comparable) a[start];

if (pivot.compareTo(a[mid]) < 0)
UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo

119

Interfaces y clases internas


<<interface>>
AccionesGenerales

<<interface>>
AccionesHumanas

+ desplazarse()
+ comer()
+ dormir()

+ bailar():void
+ estudiar():void
+ trabajar():void

<<class>>
Animal

<<class>>
Humano

<<class>>
Hombre

<<class>>
Mujer

<<class>>
Perro

UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo

<<class>>
Gato

120

Interfaces y clases internas


Interfaces, propiedades:
No son clases.
Se pueden declarar variables de tipo interfaz.
Ejemplo: Comparable comparable;

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

Se puede usar instanceof para comprobar si un objeto implementa o no la


interfaz.
Ejemplo: Ejemplo instanceof Comparable;

Se pueden extender las interfaces.


No se pueden poner atributos ni mtodos estticos, si es posible aportar
constantes en ellas.
Los atributos son public static final automticamente.

Las clases pueden implementar mltiples interfaces.


No debe crecer, si se cambia el comportamiento de una interfaz, todas las
clases que la implementen fallaran.
UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo

121

Interfaces y clases internas


Clases internas (Inner classes):
Definicin: una clase anidada es una clase que se encuentra dentro de
otra.
public class UnaClase {
. . .
class UnaClaseAnidada
{
. . .
}
}

ClaseExterna

ClaseInterna

UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo

122

Interfaces y clases internas


Razones de porque podran ser necesario hacer esto:
Los mtodos de las clases internas pueden acceder a los
datos que se encuentren en el mismo mbito en que hayan
sido definidos.
Se pueden ocultar de otras clases del mismo paquete.
Las clases internas annimas son tiles cuando se intentan
definir retrollamadas sin escribir mucho cdigo.
Las clases internas son un fenmeno del compilador, no de
la mquina virtual (no posee conocimiento respecto a ellas)
Las clases se traducen a archivos
UnaClase$UnaClaseAnidada.class
UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo

123

Interfaces y clases internas


Clases internas, caractersticas:
Solo pueden instanciarse dentro de su clase contenedora.
Se instancian de la misma forma que una clase comn.
Puede haber mltiples niveles de clases anidadas.
Las clases anidadas pueden tener las mismas caractersticas que las
clases comunes, salvo que no pueden declarar ni mtodos ni variables
static.
Pueden acceder a todas las variables y mtodos de la clase contenedora,
incluso los private.
La clase contenedora puede acceder a todas las variables y mtodos de
la clase anidada, incluso los private.
Se utilizan principalmente para estructurar mejor el cdigo dentro de
una clase.
UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo

124

Interfaces y clases internas


Clases internas, clases annimas:
Son clases que se declaran en el cdigo para ser utilizadas
en un solo lugar.
Sintaxis crptica.
Deben ser simples, sino utilizar clases anidadas comunes.
No tienen modificadores de acceso ni constructores.
JButton jButton = new JButton(new
AbstractAction() {
public void actionPerformed(ActionEvent e) {
...
}
});
UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo

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>

UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo

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)

UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo

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>

Queue<Integer> cola = new PriorityQueue<Integer>();


cola.add(2);
cola.add(5);
cola.add(3);
System.out.println("toString: " + cola);
cola.poll();
System.out.println("toString: " + cola);
System.out.println("Elemento en a salir: " + cola.peek());

Stack<Integer> pila = new Stack<Integer>();


System.out.println("Esta vacia?: " + pila.empty());
pila.push(2);
pila.push(5);
pila.push(3);
System.out.println("toString: " + pila);
pila.pop();
System.out.println("toString: " + pila);
System.out.println("Esta vacio?: " + pila.empty());
System.out.println("Elemento en el tope: " + pila.peek());

List<Integer> lista = new LinkedList<Integer>();


System.out.println("Esta vacia?: " + lista.isEmpty());
lista.add(2);
lista.add(1, 5);
lista.add(3);
System.out.println("toString: " + lista);
lista.remove(1);
System.out.println("toString: " + lista);
System.out.println("Esta vacia?: " + lista.isEmpty());
System.out.println("Elemento en pos 1?: " + lista.get(1));
System.out.println("Tamao de la lista: " + lista.size());

UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo

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

UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo

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

UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo

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

UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo

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

UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo

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

UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo

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.

UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo

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.

UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo

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.

UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo

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)

Usuarios esperan que el programa se comporte de


forma sensata cuando se producen errores  volver a
un estado seguro.
Refundiciones incorrectas. (ClassCastException)
UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo

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

UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo

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

UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo

142

Excepciones
Declaracin:
Para crear excepciones propias generalmente se hace una
subclase de Exception.
package nombrePaquete;
{importaciones}
[modificadores] class nombreException extends
Exception {
}

UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo

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

UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo

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

UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo

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.

UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo

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

De forma predeterminada se fijan los tres primeros niveles.


registrador.setLevel(Level.FINE); //todos los niveles de FINE y superiores.
registrador.setLevel(Level.ALL); //todos los niveles
registrador.setLevel(Level.OFF); //desactiva todos los niveles

UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo

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

Exception in thread "main" java.lang.AssertionError: -1


at MainAsserciones.main(MainAsserciones.java:5)
UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo

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.

Avanzar paso a paso por un programa


Step into (F5)
Step over (F6)
UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo

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.

UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo

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.

UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo

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.

UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo

159

Ejercicio

UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo

160

Ejercicio

UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo

161

Ejercicio

UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo

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.

UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo

163

Stream

Flujo de ENTRADA (BufferedReader):


abstraccin que consume
informacin

Operaciones de Flujo:
1.Apertura del Flujo
2.Lectura/Escritura en el
flujo
3.Cierre del Flujo

Flujo de SALIDA (BufferedWriter):


abstraccin que produce
informacin

File: Representa un archivo o


directorio
(delete():boolean,
exists():boolean,
getPath():String,
lastModified():long,
length():long)

UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo

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

UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo

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

UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo

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)

UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo

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

Secuencias y Archivos - Ejercicio


Crear un archivo de texto con el nombre y contenido que quiera. Crear una aplicacin que
lea el archivo de texto y muestre su contenido por pantalla sin espacios. Por ejemplo, si el
archivo tiene el siguiente texto Esto es una prueba, deber mostrar Estoesunaprueba.
Capturar las excepciones que sean necesarias.
Crear una aplicacin donde se solicite la ruta de un archivo por teclado y un texto que se
desea escribir en el archivo. Se deber mostrar por pantalla el mismo texto pero variando
entre maysculas y minsculas, es decir, si se escribe Bienvenido deber devolver
bIENVENIDO. Si se escribe cualquier otro carcter, se quedara tal y como se escribi. Se
deber crear un mtodo para escribir en el archivo el texto introducido y otro para mostrar
el contenido en maysculas.
Crear una aplicacin que solicite la ruta de dos archivos de texto y de una ruta de destino
(solo la ruta, sin archivo al final). Se deber copiar el contenido de los dos archivos en uno,
este tendr el nombre de los dos archivos separados por un guin bajo, y se guardar en la
ruta donde se le haya indicado por teclado. Para unir los archivos en uno, crear un mtodo
donde se le pase como parmetro todas las rutas. En este mtodo, adems de copiar debe
comprobar que si existe el archivo de destino, muestre un mensaje informando de si se
quiere sobrescribir el archivo. Por ejemplo, si se tiene un archivo A.txt con ABC como
contenido, un archivo B.txt con DEF y una ruta de destino D:\, el resultado ser un
archivo llamado A_B.txt en la ruta D:\ con el contenido ABCDEF.

UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo

172

Secuencias y Archivos - Ejercicio


Cargar en un vector la poblacin (Cromosoma) leda del
archivo Poblacion.txt creado previamente en su mquina con
los siguientes datos genticos {1110, 0111, 1111, 0001}. Cada
cromosoma esta formado por un conjunto finito de genes
(smbolos binarios) y su adaptabilidad (decodificacin
gentica). Ejemplo: 0111  Adap=7. El objetivo es mostrar en
pantalla el funcionamiento del algoritmo junto con la mejor
solucin (el individuo que mejor se adapt mayor
adaptabilidad) luego de haberse elegido aleatoriamente un
cromosoma y mutado uno de sus genes en la misma
generacin. Mutacin (alteracin gentica): alteracin
aleatoria del valor que toma una posicin en la cadena.
Ejemplo: AleatorioCromosoma=2  Cromosoma= 0111
 Cromosoma= 0011
AleatorioGen =2
UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo

173

Secuencias y Archivos - Ejercicio


Se quiere escribir un programa para manipular polinomios dependientes de las
variables x e y. Por ejemplo:
2x3y xy3 + 8.25 mas 5x5y 2x3y + 7x2 3 es igual a 5x5y + 7x2 xy3 + 5.25

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.

UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo

174

Secuencias y Archivos - Ejercicio

EA 8.0 versin de prueba no registrada EA 8.0 versin de prueba no registrada

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

EA 8.0 versin de prueba no registrada


EA 8.0 versin de prueba no registrada
verificadoresLinea
*

+ VerificadorLinea(String, String)
EA 8.0 versin de prueba no registrada EA 8.0 versin
de prueba no registrada
- comparar() : boolean
+

toString() : String

EA 8.0 versin de prueba no registrada EA 8.0 versin de prueba no registrada

UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo

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.

JDK 5.0 ofrece una solucin mejor: los parmetros de tipo.


Ventajas:
Programas mas fciles de leer y mas seguros (no se necesita refundir).

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 elemento de las colecciones.


Ejemplo: ArrayList<E>

Tipo de clave.
Ejemplo: Hashtable<K,V>

Valor de las tablas.


Ejemplo: Dictionary<K,V>

T,U,V Absolutamente cualquier tipo.


Ejemplo: Comparable<T>
UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo

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

UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo

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

UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo

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

Las variables o comodines de tipo pueden tener mltiples


lmites, por ejemplo:
<T extends Comparable & Serializable>

UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo

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

No se pueden crear objetos de tipos genricos. Ejemplo:


new T(); //Error

No es posible hacer referencias a variables de tipo en atributos o


mtodos estticos. Ejemplo:
private static T ejemplarUnico; //Error

UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo

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>

UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo

183

TTPP Especial N 1 2014


Un Compilador es un tipo de Traductor, como tambin lo son los Interpretes, los Preprocesadores y los Ensambladores.
Un traductor es un programa que traduce o convierte desde un texto o programa escrito en un lenguaje fuente hasta un texto o programa
equivalente escrito en un lenguaje destino produciendo, si cabe, mensajes de error (resultado de la compilacin). Un traductor divide su labor en
dos etapas: una que analiza la entrada y genera estructuras intermedias (controla la correccin del programa fuente) y otra que sintetiza la salida
a partir de dichas estructuras (construye el programa objeto deseado)
Un programa es la especificacin de una tarea de computacin (formalizacin de un algoritmo, es decir, pasos o acciones elementales
transformados en sentencias o instrucciones) por medio de un lenguaje de programacin.
Un lenguaje de programacin es una notacin para escribir programas. Proporcionan constructores (estructuras sintcticas) para organizar los
clculos, bsicamente operadores y flujos de control.
Una estructura sintctica especifica como estn construidos los programas en un lenguaje de programacin. Se especifican a travs de gramticas
(reglas de reescritura). Cada regla tiene asociada una accin semntica (traduccin dirigida por la sintaxis).
Implementar un compilador y un interprete para un lenguaje de programacin especificado a partir de las siguientes reglas:
<Programa> ::= [P] <Instrucciones> [/P]
<Programa> ::= [P] [/P]
<Instrucciones> ::= <Instruccin>
<Instrucciones> ::= <Instruccin> <Instrucciones>
<Instruccin> ::= [C]<Operando>[/C]
<Instruccin> ::= [W]<Operando>[/W]
<Instruccin> ::= [M]<Operando>[/M]
<Instruccin> ::= [m]<Operando>[/m]
<Instruccin> ::= [Q]<Operando>,<Operando>[/Q]
<Operando> ::= a
<Operando> ::= a <Operando>

<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

Se puede ejecutar si y solo si el proceso de compilacin fue exitoso.


En el caso de compilacin fallida mostrar adems del/los tipo/s y descripcin/es del/los error/es, la ubicacin de los mismos.
Se considera WARN si el operando no es una letra.

UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo

184

TTPP Especial N 1 2014


<<enum>>
TipoAdvertencias

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

UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo

InstruccionQ
- operando1:Str
- operando2:Str
- pResFin:Str

185

TTPP Especial N 1 2014


TestCompilador

public static void main(String[] args) {


Programa programa = new Programa();
programa.agregarInstruccion(new InstruccionIniP("[P]"));
programa.agregarInstruccion(new InstruccionC("[C]", "HolaMundo", "[/C]"));
programa.agregarInstruccion(new InstruccionC("[C]", "Hola Mundo", "[/C]"));
programa.agregarInstruccion(new InstruccionW("[W]", "Hola Mundo", "[/W]"));
programa.agregarInstruccion(new InstruccionMAY("[M]", "Hola Mundo", "[/M]"));
programa.agregarInstruccion(new InstruccionMIN("[m]", "Hola Mundo", "[/m]"));
programa.agregarInstruccion(new InstruccionQ("[Q]", "Hola Mundo", "Hola
Mundo", "[/Q]"));
programa.agregarInstruccion(new InstruccionQ("[Q]", "Hola Mundos", "Hola
Mundo", "[/Q]"));
programa.agregarInstruccion(new InstruccionFinP("[/P]"));
System.out.println(Compilador.compilar(programa));
System.out.println(programa);
System.out.println(Interprete.ejecutar(programa));
}

El operando de la instruccin tiene caracteres que no son letras(Lnea: 3)WARNING


El operando de la instruccin tiene caracteres que no son letras(Lnea: 4)WARNING
El operando de la instruccin tiene caracteres que no son letras(Lnea: 5)WARNING
El operando de la instruccin tiene caracteres que no son letras(Lnea: 6)WARNING
El operando de la instruccin tiene caracteres que no son letras(Lnea: 7)WARNING
El operando de la instruccin tiene caracteres que no son letras(Lnea: 8)WARNING
[Cantidad Errores: 0Cantidad Advertencias: 6]
1-[P]
2-[C]HolaMundo[/C]
3-[C]Hola Mundo[/C]
4-[W]Hola Mundo[/W]
5-[M]Hola Mundo[/M]
6-[m]Hola Mundo[/m]
7-[Q]Hola Mundo,Hola Mundo[/Q]
8-[Q]Hola Mundos,Hola Mundo[/Q]
9-[/P]
9
10
2
HOLA MUNDO
hola mundo
SI
NO

UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo

186

Rubricas TTPP Especial N 1 2014


CALIDAD DE CODIGO
SEG

Modificadores de acceso.

SEM

Nomenclaturas.

ADV

0 Advertencias.

DOC

Documentacin/Comentarios.

IND

Indentacin.

LIN

Lneas en Blanco.

DEP

No cdigo comentado.

TYS

Uso de this y super.

REU

Reutilizacin.

FUNCIONALES
LP1

Programa vaco.

LP2

Programa sin [P].

LP3

Programa sin [/P].

LP4

Programa con 2..* [P]

LP5

Programa con 2..* [/P]

LP6

Programa con instruccin invlida.

LP7

Programa con warning.

LP8

Programa con [P] y [/P].

LP9

Programa con [P] [C] Hola [/C] [/P]

LP10 Programa con 2..* instrucciones.


UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo

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.

UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo

188

Parcial N 1 2014 (cont.)


Hacer una interfaz llamada Entregable con los siguientes mtodos:
entregar(): cambia el atributo prestado a true.
devolver(): cambia el atributo prestado a false.
isEntregado(): devuelve el estado del atributo prestado.
Mtodo compareTo (Object a), compara las horas estimadas en los
videojuegos y en las series el numero de temporadas. y en las Pelculas el
ao

Crear una aplicacin ejecutable que haga lo siguiente:


Crea tres arrays, uno de Pelculas, otro de Series y otro de Videojuegos,
Crea un objeto en cada posicin del array, con los valores que desees,
puedes usar distintos constructores.
Entrega algunos Videojuegos y Pelculas y Series con el mtodo entregar().
Cuenta cuantas Pelculas Series y Videojuegos hay entregados. Al contarlos,
devulvelos.
Por ltimo, indica que Videojuego tiene ms horas estimadas, la serie con
mas temporadas y la Pelcula mas antigua. Mustralos en pantalla con toda
su informacin (usa el mtodo toString()).
UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo

189

TTPP Especial N 2 2014


Descripcin del problema
Se tiene una funcin de n variables. Se solicita construir un programa que
lea dicha funcin, y la evalu para una cantidad s de puntos.

Datos de entrada. Se recibe un archivo funcion.in que contiene:


Primera lnea: la funcin a ejecutar, expresada en RPN. Las funciones
estn formadas por variables, constantes (literales numricos) y
operaciones. Las operaciones pueden ser unarias: Logaritmo (ln); o
binarias: suma (+), multiplicacin (*), divisin (/), resta (-)
y potenciacin (^).
Segunda lnea: la cantidad n de variables que hay en la funcin, y la
cantidad s de puntos a evaluar (1 <= n <= 3) y (1 <= s <= 1000).
Cada una de las siguientes s lneas con los valores reales v que adopta
cada una de las variables para cada evaluacin de la funcin (-10E10 <= v
<= 10E10)

Datos de salida. El programa debe generar un archivo funcion.out con:


Primera lnea: la cantidad s de valores de salida.
Cada una de las siguientes s lneas con los valores que adopta para cada
conjunto de variables la funcin en ese punto.
UNO Programacin con Objetos I Prof. Ing. Pablo Pandolfo

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

You might also like