You are on page 1of 249

Programacin

Orientada a Objetos
(con Java)
Dra. Maria Lucia Barrn Estrada

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

Programa de estudio
Unidad 1: Introduccin al paradigma de la
programacin orientado a objetos.
Unidad 2: Clases y objetos.
Unidad 3: Herencia.
Unidad 4: Polimorfismo.
Unidad 5: Excepciones
Unidad 6: Flujos y archivos.
Instituto Tecnolgico de Culiacn
Ing. En Sistemas Computacionales

Unidad 1. Introduccin al paradigma de la


programacin orientado a objetos.
1.1 Elementos del modelo de objetos:
clases, objetos, abstraccin,
modularidad, encapsulamiento,
herencia y polimorfismo.
1.2 Lenguaje de modelado unificado:
diagrama de clases.

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

Unidad 1. Introduccin al paradigma


POO
Competencia:
Comprender, describir y modelar los conceptos
principales del paradigma de POO y aplicarlos a
situaciones de la vida real.
Producto
Modelo de un problema real usando los conceptos de
la unidad

1.1 Elementos del modelo de objetos.


Clases.
En el contexto del anlisis y el diseo, una clase
es una categora o grupo de cosas que tienen
atributos y comportamientos comunes.
La accin de agrupar los objetos de acuerdo a sus
caractersticas comunes se llama clasificacin y
es una habilidad que utilizamos los humanos para
organizar el conocimiento.
La clasificacin puede verse como la accin de
colocar cada objeto en un casillero etiquetado
exprofeso para alojar a todos los objetos de esa
clase.

Objetos.
Un objeto es una instancia o caso particular de
una clase.
Un objeto contiene atributos y mtodos.
Los atributos identifican el estado del objeto (su
identidad) y los mtodos establecen su
comportamiento (funcionamiento).
Normalmente un objeto tiene una identidad
personal que lo distingue de los dems objetos.
De esta forma, un objeto tiene estado,
comportamiento e identidad.

Abstraccin
Es un proceso mental que se aplica al seleccionar
algunas caractersticas y propiedades de un conjunto
de cosas del mundo real, excluyendo otras no
pertinentes. En otras palabras, es una representacin
mental de la realidad.
f. Consideracin aislada de las cualidades esenciales
de un objeto, o del mismo objeto en su pura esencia o
nocin. (Diccionario de la real lengua espaola)
Permite aislar los elementos mas importantes o
sobresalientes para identificar a un objeto.
Se refiere a Qu hace? No Cmo lo hace?
La abstraccin expresa las caractersticas esenciales
de un objeto.

Dinmica grupal
Series de TV famosas para ejemplificar a
travs de una dinmica el concepto de
abstraccin.
Los estudiantes debern formar equipos de 3 o
4 miembros, un estudiante utilizara dibujos en
el pizarrn para que los otros 3 intenten
adivinar la serie de tv a la que se trata de
representar. No se pueden escribir palabras,
hacer gestos, sonidos o movimientos con el
cuerpo.
Instituto Tecnolgico de Culiacn
Ing. En Sistemas Computacionales

Los Simpson
Friends
Smallville
Lost
Dr. House
Dragon ball
csi: escena del crimen
Grey's Anatomy
Sex and the city
Big bang theory
South park
Caballeros del Zodiaco
Los expedientes secretos x
Instituto Tecnolgico de Culiacn
Ing. En Sistemas Computacionales

Modularidad
es la capacidad de descomponerse y
reorganizarse en mdulos
es la caracterstica por la cual un programa
esta compuesto de porciones que se conocen
como mdulos
es la propiedad que permite subdividir una
aplicacin en partes ms pequeas (llamadas
mdulos), cada una de las cuales debe ser tan
independiente como sea posible de la aplicacin
en s y de las restantes partes.

El Modelo como resultado de la abstraccin.

Los modelos se utilizan en muchas


actividades de la vida humana. Estos
abstraen una realidad compleja.
Puedes dar algunos ejemplos de modelos
que se desarrollan para diferentes
actividades del quehacer humano?

La OMT (Object Modeling Technique), intenta


abstraer la realidad utilizando tres clases de
modelos OO:
El modelo de objetos: describe la estructura esttica;
El modelo dinmico: describe las relaciones temporales
entre objetos;
El modelo funcional: describe las relaciones funcionales
entre valores.

Mediante estos tres modelos, se representa una


abstraccin de la realidad que tiene en s misma
informacin sobre las principales caractersticas de
sta.

OMT es un predecesor de UML

OMT Object Diagram


http://en.wikipedia.org/wiki/object-modeling_technique

1.2 El UML como una herramienta de


modelado de objetos.
Un lenguaje de modelado de
objetos contiene un conjunto de
smbolos y reglas para organizar tales
smbolos y se utiliza para expresar los
distintos modelos que se producen en
el proceso de desarrollo de software.
Un lenguaje de modelado define una
coleccin de elementos del modelo.

UML ( Lenguaje Unificado de Modelado )


es un ejemplo de lenguaje de modelado.
Un lenguaje de modelado como UML es,
por tanto, un lenguaje estndar para los
planos del software.
UML permite a los creadores de sistemas
generar diseos que capturen sus ideas en
una forma convencional y fcil de
comprender, para comunicarlas a otras
personas.

Diagramas de UML
http://en.wikipedia.org/wiki/Unified_Modeling_Language

Diagramas UML de clases


Una clase es una categora o grupo de cosas que
tiene atributos y acciones similares. El smbolo que
representa a la clase es un rectngulo dividido en
tres reas. El rea superior contiene el nombre, el
rea central contiene los atributos, y el rea inferior
las acciones.
CLASE

Nombre
Atributos

Mtodos

Al modelar un sistema orientado a objetos,


el mundo puede dividirse al menos en un
par de formas. En primer lugar est la
divisin entre clase y objeto.
Una clase es una abstraccin y un objeto
es una manifestacin de una clase.
OBJETO
CLASE

Los
diagramas
de
clases
facilitan
las
representaciones a partir de las cuales los
desarrolladores podrn trabajar.
Los diagramas de clases colaboran en lo referente
al anlisis. Permite al analista hablarle a los clientes
en su propia terminologa, lo cual hace posible que
los clientes indiquen importantes detalles de los
problemas que requieren ser resueltos.

Terminologa y Conceptos
Una relacin es una conexin entre
elementos.
En el lenguaje de modelado
orientado a objetos, las tres
relaciones mas importantes son:
Dependencia
Generalizacin
Asociacin

1.- Dependencia. Es una relacin de uso que


declara que un cambio en la especificacin de
un elemento puede afectar a otro elemento. Las
dependencias se representan con una flecha y
se emplean cuando se quiere indicar que un
elemento utiliza a otro. Por ejemplo:

2.- Generalizacin. Es una relacin


entre un elemento general (llamado
superclase o padre) y un caso mas
especfico de ese elemento (llamado
subclase o hijo). La generalizacin se
llama a veces relacin "es-un" (un
elemento
mas
general).
Las
relaciones se utilizan cuando se
quieran mostrar relaciones padre/hijo.

Ejemplo de generalizacin

3.- Asociacin. Es una relacin estructural que


especifica que los objetos de un elemento estn
conectados con los de otros.
Las asociaciones entre dos clases se representan
mediante una lnea que las une. La lnea puede tener
una serie de elementos grficos que expresan
caractersticas particulares de la asociacin.
Las asociaciones se utilizan para definir que se puede
navegar desde un objeto de una clase hasta otro
objeto de otra clase y viceversa.
La asociacin tiene cuatro tipos de partes: el nombre,
el rol, la multiplicidad y la agregacin.

Nombre de la Asociacin y Direccin


El nombre de la asociacin es opcional y se
muestra como un texto que est prximo a la
lnea. Se puede aadir un pequeo tringulo
negro slido que indique la direccin en la cual
leer el nombre de la asociacin.

Indicador

Significado

0..1
1
0..*
1..*
n

Zero or one
One only
Zero or more
One or more
Only n (where n > 1)

0..n

Zero to n (where n > 1)

1..n

One to n (where n > 1)

Multiplicidad La multiplicidad es una restriccin que se pone a una


asociacin, que limita el nmero de instancias de una clase que pueden
tener esa asociacin con una instancia de la otra clase. Puede
expresarse de las siguientes formas:
Con un nmero fijo: 1.
Con un intervalo de valores: 2..5.
Con un rango en el cual uno de los extremos es un asterisco. Significa
que es un intervalo abierto. Por ejemplo, 2..* significa 2 o ms.
Con una combinacin de elementos como los anteriores separados por
comas: 1, 3..5, 7, 15..*.
Con un asterisco: * . En este caso indica que puede tomar cualquier
valor (cero o ms).

En el ejemplo se puede leer la asociacin


como Director manda sobre Empleado.

Los

nombres de las asociaciones normalmente


se incluyen en los modelos para aumentar la
legibilidad.
En ocasiones pueden hacer demasiado
abundante la informacin que se presenta, con
el consiguiente riesgo de saturacin. En ese
caso se puede suprimir el nombre de las
asociaciones consideradas como
suficientemente conocidas.
En las asociaciones de tipo agregacin y de
herencia no se suele poner el nombre.

La agregacin representa una relacin estructural


entre iguales, es decir, ambas clases estn
conceptualmente en el mismo nivel, sin que ninguna
sea ms importante que la otra.
A veces es necesario modelar una relacin
"todo/parte", en la cual una clase representa una cosa
grande (el todo), que consta de elementos mas
pequeos (las partes).
Para especificar la agregacin se utiliza el smbolo de
rombo, que representa una relacin de tipo "tiene-un".

Qu significan las relaciones?

Trabajo de Investigacin
Cuantos tipos de diagramas existen en
UML 2.2?
Como se clasifican los diagramas?
Presenta un ejemplo de cada uno de los
diferentes diagramas.
Elabora una presentacin con la
informacin recabada.
Anota todas las fuentes consultadas.

Evaluacin
50% proyecto en equipo
20% portafolio individual incluye 10%
investigacin de diagramas de UML
30% examen

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

2. Clases y Objetos
2.1 Declaracin de clases: atributos, mtodos,
encapsulamiento.
2.2 Instanciacin de una clase.
2.3 Referencia al objeto actual.
2.4 Mtodos: declaracin, mensajes, paso de parmetros,
retorno de valores.
2.5 Constructores y destructores: declaracin, uso y
aplicaciones.
2.6 Sobrecarga de mtodos.
2.7 Sobrecarga de operadores: Concepto y utilidad,
operadores unarios y binarios.
Instituto Tecnolgico de Culiacn
Ing. En Sistemas Computacionales

2. Clases y Objetos
Competencias
Implementar clases y objetos cumpliendo las
reglas de la programacin orientada a
objetos.
Implementar constructores y destructores
para inicializar atributos y liberar recursos.
Sobrecargar mtodos y operadores para
optimizar el cdigo de una clase.
Instituto Tecnolgico de Culiacn
Ing. En Sistemas Computacionales

2.1 Declaracin de clases: atributos,


mtodos, encapsulamiento.
Una clase contiene el cdigo para la
manipulacon de objetos de esa clase.
Constructores para crear objetos,
Variables (atributos) para almacenar el estado de
la clase y sus objetos y
Mtodos que implementan el comportamiento de
la clase y sus objetos.

La clase tiene dos partes:


Encabezado
Cuerpo

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

Encabezado de la clase
Modificadores class Identificador Extiende Implementa
Modificadores
public
private
protected
static
final
native
synchronized
abstract
threadsafe

Extiende
extends IdentificadorDeClase
Implementa
implements ListaDeInterfaces

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

Ejemplos [de Java Tutorial]


public class Stack
public class Stack implements Cloneable
public class BINGO
class RingMaster implements States
public class Player extends JPanel implements ActionListener,
ItemListener, BallListener
public class Object
public final class Math extends Object
public class Vector<E> extends AbstractList<E>
implements List<E>, RandomAccess, Cloneable, Serializable

Enero-Junio 2012

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

Cuerpo de una Clase


El cuerpo de la clase esta delimitado por { }
declaracines de Miembros
Variables (declaracin e inicializacin)
Variables de instancia
Variables de clase

mtodos (declaracin implementacion)


mtodos de instancia
mtodos de clase

declaracin e implementacion de Constructores


Bloque de inicializacin
Enero-Junio 2012

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

2.2 Instanciacin de una clase.


Un objeto es una instancia de una
clase.
Los objetos se crean usando
new Constructor( parmetros )

Un objeto contiene atributos de


instancia y puede ejecutar todos los
mtodos de instancia declarados en la
clase.
Instituto Tecnolgico de Culiacn
Ing. En Sistemas Computacionales

Ejemplo

public class Punto {


private int x=0;
private int y=0;
public static int totalPuntos =0;
Punto (int _x, int _y){
x=_x;
y=_y;
totalPuntos++;
}
public void setx(int _x){
x= _x;
}
public String toString (){
return (+x+,+y+);
}
}

public class UsaPunto {


public static void main(String[] args){
Punto punto1= new Punto(2,1);
Punto punto2 = new Punto(5,5);
Punto punto3 = punto1;

punto3

punto2

punto1
Miembros de
instancia
mtodos de
instancia

Enero-Junio 2012

Punto[] puntos = {punto1,punto2};


System.out.println(Arrays.toString(puntos));
System.out.println(Puntos creados +
Punto.totalPuntos);
}
}

x=2
y=1
void setx(int _x)
String toString ()

x=5
y=5
void setx(int _x)
String toString ()

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

Punto
Miembros
de clase

totalPuntos = 0

public class Fruta {


String nombre;
int gramos;
int caloriasPorGramo;
Cuantos miembros tiene la clase
Fruta (String n ){
nombre=n;
}
Que clase de miembros son?
public void setPeso (int g ){
de instancia o de clase?
gramos=g;
}
Cuantos mtodos existen?
public int getPeso ( ){
return gramos;
}
Escribe un programa que use la
public void setCalorias(int c){
caloriasPorGramo =c;
clase Fruta para crear varios
}
objetos.
public int getCalorias(){
return caloriasPorGramo;
}
public String toString (){
return nombre+" peso "+gramos+" gramos.";
}
}
Instituto Tecnolgico de Culiacn
Ing. En Sistemas Computacionales

Fruta?

Atributos static.
Un miembro esttico (static) pertenece a la
clase, no a las instancias de la clase
(objetos)
Los miembros anotados como static se
crean cuando se carga la clase y
permanencen ahi hasta que la clase es
descargada.
Los miembros estticos se comparten (solo
existe uno) entre todos los objetos de esa
clase.
Enero-Junio 2012

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

static (variables de clase)


Las variables estaticas mantienen un
solo valor que es accesado por todos
los objetos de la clase.
Las variables de clase se usan cuando
solo se requiere una copia del dato el
cual es compartido por todos los
objetos de esa clase y sus clases
derivadas.
Enero-Junio 2012

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

class AnIntegerNamedX {
int x;
public int x() {
return x;
}
public void setX(int newX) {
x = newX;
}
}

class AnIntegerNamedX {
static int x;
public int x() {
return x;
}
public void setX(int newX) {
x = newX;
}
}

AnIntegerNamedX myX = new AnIntegerNamedX();


AnIntegerNamedX anotherX = new AnIntegerNamedX();
myX.setX(1);
anotherX.setX (2);
System.out.println("myX.x = " + myX.x());
System.out.println("anotherX.x = " + anotherX.x());
Instituto Tecnolgico de Culiacn
Ing. En Sistemas Computacionales

static (mtodos de clase)


Un mtodo declarado esttico es un
mtodo de clase.
Los mtodos estticos solo pueden
operar sobre variables de clase y NO
pueden accesar las variables de
instancia.

Enero-Junio 2012

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

class AnIntegerNamedX {
int x; int x;
static
public static int x() {
return x;
}
public static void setX(int newX) {
x = newX;
}
}
// ERROR de compilacion

AnIntegerNamedX.java:4: Can't make a static reference to


nonstatic variable x in class AnIntegerNamedX.

Enero-Junio 2012

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

2.3 Referencia this.


this es una variable especial que tiene un
significado predefinido en el lenguaje Java.
Se utiliza para referirse a los miembros
especficos del objeto en ejecucin (seleccin
dinmica de mtodos)
Se usa para eliminar la ambigedad cuando hay
dos identificadores iguales

Se puede usar para invocar a otros constructores


que cumplan con los parmetros usados.
Enero-Junio 2012

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

Ejemplos

public class Fruta {


String nombre;
int gramos;

class AnIntegerNamedX {
int x;
Fruta () {
public int x() {
this(sin nombre,10);
return x;
}
Llama al constructor
}
Fruta (String n, int g ){
nombre=n;
public void setX(int x) {
gramos = g;
this.x = x;
}
}
public void setPeso (int g ){
}
gramos=g;

}
public int getPeso ( ){
return gramos;
}
Enero-Junio 2012

Elimina ambigedad
Instituto Tecnolgico de Culiacn
Ing. En Sistemas Computacionales

2.4 Concepto de mtodo.


Un mtodo es una parte de cdigo que se
encarga de implementar parte del
comportamiento de un objeto.
Un mtodo tiene dos partes:
Encabezado
Cuerpo

Un mtodo se invoca usando un objeto.


objeto.mtodo(parmetros)
Dentro del cuerpo de un mtodo se pueden
declarar variables locales.
Enero-Junio 2012

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

2.4.1 Declaracin de mtodos.


Modificadores
Modificadores
Modificadores
Modificadores
Modificadores
public
private
protected
package
static
final
native
synchronized
abstract
Enero-Junio 2012

void Identificador (parmetros) ;


void Identificador (parmetros) Cuerpo
tipo Identificador (parmetros) ;
tipo Identificador (parmetros) Cuerpo
parmetros
tipo identificador , tipo identificador

Cuerpo
{ estatutos }

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

Ejemplos
public boolean isEmpty() {
if (items.size() == 0)
return true;
else
return false;
}

abstract class GraphicObject {


int x, y;
void moveTo(int newX, int newY) {
x = newX;
y = newY;
}
abstract void draw();
}

double calculaPago(double prestamo, double tasa, double valorFuturo, int periodos) {


double I, partial1, denominator, answer;
I = rate / 100.0;
partial1 = Math.pow((1 + I), (0.0 - numPeriods));
denominator = (1 - partial1) / I;
answer = ((-1 * loanAmt) / denominator) - ((futureValue * partial1) / denominator);
return answer;
}
Enero-Junio 2012

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

public class OStack {


private Object[] store= new Object[10];
private int size= 0;
public void push (Object elem) {
if (size >= store.length) {
Object[] tmp = new Object[size*2];
System.arraycopy(store,0,tmp,0,store.length);
store= tmp;
}
store[size++] = elem;
}
public Object pop() {
return store[--size];
}
public static void main (String [] args) {
OStack x = new OStack();
x.push(new Integer(17));
Integer y = (Integer) x.pop();
}
}

Enero-Junio 2012

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

2.4.2 Llamadas a mtodos


(mensajes).
Los objetos pueden realizar operaciones
para:
Manipular o inspeccionar sus variables
Ejecutar sus mtodos.

Los objetos se comunican con otros objetos a


traves de mensajes.
Un mensaje es una seal que recibe un
objeto para ejecutar alguno de sus mtodos.
Enero-Junio 2012

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

objeto.mtodo()
objeto.mtodo(parmetros)

public class UsaPunto {


public static void main(String[] args){
Punto punto1= new Punto(2,1);
Punto punto2 = new Punto(5,5);
punto1.setx(1);
String s= punto1.toString() + punto2.toString();

OStack x = new OStack();


x.push(new Integer(17));
}

AnIntegerNamedX myX = new AnIntegerNamedX();


AnIntegerNamedX anotherX = new AnIntegerNamedX();
myX.setX(1);
anotherX.setX(2);
System.out.println("myX.x = " + myX.x());
System.out.println("anotherX.x = " + anotherX.x());

Enero-Junio 2012

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

2.4.3 Tipos de mtodos.


Abstractos - no tienen implementacion
Finales No se pueden redefinir en las
clases derivadas
estticos solo hay un mtodo para
todos los objetos.
Sobrecargados varios mtodos con
el mismo nombre y diferentes
parmetros.
Enero-Junio 2012

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

Mtodos finales
Un mtodo final es aquel que no se
puede redefinir en sus clases
descendientes
Los mtodos finales se utilizan cuando
se desea que no cambie la
implementacion en las clases derivadas

Enero-Junio 2012

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

2.7 Forma de pasar argumentos.


parmetros
Formales definidos en la declaracin del
mtodo public static void setX(int newX) {
}

x = newX;

Actuales valores usados en la llamada


al mtodo
myX.setX(1);
anotherX.setX(2);

Enero-Junio 2012

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

Pase de parmetros
El pase de parmetros en Java es
unicamente por valor.
Los mtodos pueden enviar como argumento
Datos Primitivos los datos de tipo primitivo pasan
su valor a los parmetros formales (los parmetros
actuales no cambian despues de la ejecucin del mtodo)
Datos Referencia los datos de tipo referencia
(objetos) envian su direccion a los parmetros formales
(los cambios en los parmetros formales afectan a los
parmetros actuales)
Enero-Junio 2012

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

Pase de datos primitivos


class Pen {
int redValue, greenValue, blueValue;
void getRGBColor(int red, int green, int blue) {
redValue = red;
greenValue = green;
Las variables red, green y
blueValue = blue;
Pueden cambiar de valor
}
}

blue

Los valores de r, g y b se asignan a


las variables red, green y blue
int r = -1, g = -1, b = -1;
pen.getRGBColor(r, g, b);
System.out.println("red = " + r + ", green = " + g + ", blue = " + b);
Enero-Junio 2012
Instituto Tecnolgico de Culiacn
Los
valores de r, g yIng.
b En
noSistemas
cambian
despues de la ejecucin
Computacionales

Pase de referencias
class RGBColor {
public int red, green, blue;
}

class Pen {
int redValue, greenValue, blueValue;
void getRGBColor(RGBColor aColor) {
aColor.red = redValue;
aColor.green = greenValue;
aColor.blue = blueValue;
}
}

RGBColor penColor = new RGBColor();


pen.getRGBColor(penColor);
System.out.println("red = " + penColor.red +
", green = " + penColor.green +
", blue = " + penColor.blue);
Enero-Junio 2012

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

2.8 Devolver un valor desde un


mtodo.
Los mtodos pueden regresar valores
Como resultado del mtodo
En los argumentos (parmetros referencia)
public int x() {
return x;
}
public Object pop() {
return store[--size];
}
public boolean isEmpty() {
return (items.size() == 0);
}
Enero-Junio 2012

void getRGBColor(RGBColor aColor) {


aColor.red = redValue;
aColor.green = greenValue;
aColor.blue = blueValue;
}

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

Estructura del cdigo.

paquete

interface

clase

mtodos

clase atributos

interface

atributos
mtodos

mtodos

Variables
locales

mtodos
Variables
locales

Enero-Junio 2012

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

2.5. Constructor, destructor.


2.5.1 Conceptos de constructor y destructor.
2.5.2 Declaracin de constructor y destructor.
2.5.3 Aplicaciones de constructores y
destructores.
2.5.4 Tipos de constructores y destructores.

Enero-Junio 2012

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

2.5.1 Conceptos de constructor y


destructor.
Los constructores son mtodos especiales
que se invocan para crear (inicializar) nuevos
ejemplares de una clase, a este proceso se le
conoce como instanciacion.
Los constructores usan el mismo nombre de la
clase
Java soporta la sobrecarga de constructores.
Pueden existir varios constructores para una
clase, estos se distinguen por los parmetros
que contienen.
Enero-Junio 2012

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

public class Punto {


private int x=0;
private int y=0;
public static int totalPuntos =0;
Punto (){
totalPuntos++;
}
Punto (int _x, int _y){
x=_x;
y=_y;
totalPuntos++;
}
Punto (Punto p){
this.x = p.x;
this.y = p.y;
totalPuntos++;
}
public void setx(int _x){
x= _x;
}
public String toString (){
return (+x+,+y+);
}
}
Enero-Junio 2012

Ejemplo
// usando la clase Punto para crear objetos
public static void main(String[] args){
Punto p1 = new Punto();
System.out.println(p1);
Punto p2 = new Punto(2,3);
System.out.println(p2);
Punto p3 = new Punto(p1);
System.out.println(p3);
}

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

La clase Punto tiene los siguientes


mtodos constructores
Punto () crea un objeto con los valores
definidos en la declaracin
Punto(x:int, y:int) - inicializa las
coordenadas del punto con los valores x,y
Punto(Punto p) - inicializa las
coordenadas del punto con los valores de
las coordenadas del punto p
Enero-Junio 2012

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

En el momento de crear un ejemplar, se


puede usar cualquiera de los constructores
disponibles
Punto p1 = new Punto(); //llamada sin parmetros
Punto p2 = new Punto(p1); //llamada con un parmetro de tipo Punto
Punto p3 = new Punto(2,5); //llamada con dos parmetros enteros

El entorno descubre cual es el que se desea


llamar por medio del nmero y tipo de los
argumentos
Enero-Junio 2012

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

public class Fruta {


String nombre;
int gramos;

Ejemplo 2

Fruta () {
this(sin nombre,10);
}
Fruta (String n, int g ){
nombre=n;
gramos = g
}

public void setPeso (int g ){


gramos=g;
}
public int getPeso ( ){
return gramos;
}
Enero-Junio 2012

Cuantos constructores
tiene la clase Fruta?
Que hace el constructor
que no tiene parmetros?
Como se pueden crear
ejemplares de Fruta?

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

Destructores
Disponibles en lenguajes o entornos en los que el responsable
de devolver la memoria es el programador

Un destructor es un mtodo que se invoca


inmediatamente antes de que se libere la
memoria donde se almacena un objeto
Los destructores realizan todas las tareas que se
desean realizar sobre un objeto antes de
destruirlo, pero no realizan esta destruccin
La destruccin se realiza por medio de funciones
del sistema como dispose() en Pascal

Enero-Junio 2012

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

Recoleccin de basura
La basura son pedazos de memoria que ya
no seran utilizados por el programa.
La recoleccin de basura es realizada por el
sistema peridicamente
Esta es una operacin de alto costo
(consume tiempo de ejecucin)
La utilizacin de funciones de devolucin de
memoria obliga a trabajar con cuidado para
no intentar acceder posteriormente a zonas
de memoria que ya no estan disponibles
Enero-Junio 2012

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

Recoleccin de basura
Existen entornos o lenguajes de POO en los
que el sistema se encarga de devolver la
memoria que no est siendo utilizada (Java)
Este proceso se denomina recoleccin de
basura (garbage collection), y consiste en
Recorrer todas las referencias del programa
marcando todas las zonas de memoria que
permanecen accesibles
Recorrer toda la memoria devolviendo al sistema
aquellas zonas que no estn marcadas
Enero-Junio 2012

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

2.5.2 Declaracin de constructores.


Constructor default. Java provee
automaticamente un constructor cuando el
programador no declara explcitamente al
menos uno. Este constructor no contiene
parmetros formales y cuando es invocado,
las variables de instancia asumen los valores
definidos en su declaracin o sus valores
default.
Campos numericos = 0
Campos char = Unicode 0
Enero-Junio 2012

Campos boolean = false


Campos referencia = null

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

2.5.2 Declaracin de constructores.


Constructor explictamente declarado. Son
constructores definidos por el programador
para efectuar el proceso de inicializacin de
variables de instrancia en la creacin de
objetos.
Los constructores se definen con el mismo
nombre de la clase
Modificadores NombreClase (parmetros) ClausulasThrows
Cuerpo
Enero-Junio 2012

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

Una clase puede contener diversos


constructores.
Cuando un constructor invoca a otro usando
this, esta llamada debe ser la primera
instruccion del cuerpo del constructor.
Los constructres solo pueden invocarse para
construir objetos.
Los constructores NO son considerados
miembros de la clase.
Enero-Junio 2012

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

Creacin de objetos con


constructores
1.
2.
3.
4.
5.
6.

Se obtiene espacio de memoria.


Se limpia la memoria (valores default)
Se puede llamara a otro constructor en la misma
clase.
Se llama al constructor de la clase padre ya sea
implicitamente o explicitamente usando super.
Los campos inicializados explicitamente con una
asignacion se ejecutan.
Se ejecuta el resto de las instrucciones del cuerpo
del constructor.

Enero-Junio 2012

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

2.5.3 Aplicaciones de constructores.

Define los atributos y constructores para las


clases de cada uno de los siguientes
elementos:
Solo define el

1.
2.
3.
4.
5.
6.
7.

Alumnos
Profesores
Tecnologicos
Rectangulos
Proveedores
Mascotas
Libros

Enero-Junio 2012

encabezado de los
mtodos, no su
implementacion.

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

2.5.4 Tipos de constructores.


Privados (private).
Ninguna otra clase puede crear instancias
usando este constructor.
Algunos mtodos de la clase, pueden usar
el constructor para crear instancias de la
clase y regresarlas como resultado. Estos
mtodos se les llama fabricas (factory
method)
Enero-Junio 2012

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

2.5.4 Tipos de constructores.


Protegidos (protected).
Solo clases derivadas y clases en el
mismo pakete pueden crear instancias
usando estos constructores.

Paquete (package o no especificado).


Solo las clases dentro del mismo paquete
pueden crear instancias usando este
constructor.
Enero-Junio 2012

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

2.5.4 Tipos de constructores.


class AnimationThread extends Thread {
int framesPerSecond;
int numImages;
Image[] images;
AnimationThread(int fps, int num) {
super("AnimationThread"); // llama al constructor de la superclase
this.framesPerSecond = fps; // inicializa las var. de instancia
this.numImages = num;
this.images = new Image[numImages];
for (int i = 0; i <= numImages; i++) {
. . . // Load all the images. . . .
}
}
...
}

Enero-Junio 2012

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

2.6 Sobrecarga.
2.6.1 Conversin de tipos.
2.6.2 Sobrecarga de mtodos.
2.6.3 Sobrecarga de operadores.
Ejemplos

Enero-Junio 2012

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

2.6.1 Conversin de tipos.


Existen dos formas de convertir tipos de
datos a otros tipos.
Implcita.
Explcita.

A esta operacin de conversin se le


conoce como coercin.

Enero-Junio 2012

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

Conversion de tipos
Se pueden sumar un dato entero (int) y
un real (float)?
5 + 3.14

Se pueden concatenar datos String con


enteros?
Resultado + total
Enero-Junio 2012

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

Para realizar las operaciones es necesario


hacer una conversion de datos a un solo
tipo.
Implcita. La conversin implcita es realizada por
el compilador automticamente para efectuar
algunas operaciones. Ej. La concatenacin de
elementos en un println.

Explcita. La conversin explcita es especificada


por el programador para convertir un dato a otro tipo
especfico. Ej. Usando operaciones de cast.

Enero-Junio 2012

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

Conversiones
Los datos primitivos pueden convertirse
en dos formas:
Ampliando el dato (Widening) Es una
operacin segura porque no pierde informacin
(una conversin de punto flotante puede perder
precisin)
Reduciendo el dato (Narrowing) Es una
operacin insegura porque va de un tipo a otro
que usa menos espacio de memoria para su
representacin.
Enero-Junio 2012

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

Conversiones permitidas en Java


(Widening)
De
byte
short
char
int
long
float

Enero-Junio 2012

A
short, int, long, float, double
int, long, float, double
int, long, float, double
long, float, double
float, double
double

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

Conversiones permitidas en Java


(Narrowing)
De
byte
short
char
int
long
float
double

Enero-Junio 2012

A
char
byte, char
byte, short
byte, short, char
byte, short, char, int
byte, short, char, int, long
byte, short, char, int, long, float

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

Cual es el tipo de dato primitivo que no


aparece en las conversiones?
Los datos de tipo boolean NO se
pueden convertir de ninguna forma.

Enero-Junio 2012

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

Formas de realizar conversiones


En una asignacion.
float dinero;
int pesos;
dinero = pesos; // ok! Se convierte automticamente
pesos = dinero; // ERROR!!

Una promocin aritmtica


perimetro = 5 * 3.14; // conversin antes de la multiplicacin

Una operacion de cast


pesos = (int) dinero; // ok! Se convierte antes de la asignacin
Enero-Junio 2012

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

2.6.2 Sobrecarga de mtodos.


El polimorfismo es una de las principales
caractersticas de los Lenguajes de
Programacin Orientados a Objetos.
El polimorfismo se divide en:
Ad hoc
Sobrecarga
Coercin

Universal
Paramtrico
Inclusin (subtipos)
Enero-Junio 2012

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

2.6.2 Sobrecarga de mtodos.


Sobrecarga significa usar un
identificador para referirse a mltiples
elementos en el mismo mbito.
Java permite al programador
sobrecargar mtodos y constructores
pero no variables u operadores.

Enero-Junio 2012

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

Ejemplo: el mtodo println


println (String s)
println (int i)
println (double d)
println (char c)
println (boolean b)
println (String s)
System.out.println(Numero total de estudiantes );
System.out.println(totalEstudiantes);
Enero-Junio 2012

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

public class DataTypePrintTest {


public static void main(String[] args) {
Thread objectData = new Thread();
String stringData = "Java Mania";
char[] charArrayData = { 'a', 'b', 'c' };
int integerData = 4;
long longData = Long.MIN_VALUE;
float floatData = Float.MAX_VALUE;
double doubleData = Math.PI;
boolean booleanData = true;
System.out.println(objectData);
System.out.println(stringData);
System.out.println(charArrayData);
System.out.println(integerData);
System.out.println(longData);
System.out.println(floatData);
System.out.println(doubleData);
System.out.println(booleanData);
}
}
Enero-Junio 2012

Salida
Thread[Thread-4,5,main]
Java Mania
abc
4
-9223372036854775808
3.40282e+38
3.14159
true

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

2.6.3 Sobrecarga de operadores.


Java provee implcitamente la
sobrecarga de operadores pero NO
permite que el programador defina
explcitamente la sobrecarga de ellos.
Algunos otros lenguajes como C++ y Ada OO,
permiten la sobrecarga de los operadores.

Enero-Junio 2012

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

Operadores sobrecargados
Operator

Uso

Descripcion

+
*
/

op1 + op2

Suma op1 y

op1 - op2

Resta op2 de op1

op1 * op2

Multiplica op1 y

op1 / op2

Divide op1 y

Enero-Junio 2012

op2; tambien se usa para concatenar Strings

op2

op2

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

Sobrecarga
Los mtodos sobrecargados tienen
firmas distintas.
Cuando existen mtodos
sobrecargados, las llamadas se
resuelven en tiempo de compilacin.
El compilador usa la firma del mtodo
para identificar el cdigo que se
ejecutar.
Enero-Junio 2012

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

public class Point {


import java.util.Vector;
private int x = 0;
public class UsaPoint {
private int y = 0;
public static void main(String[] args){
public static int totalPuntos = 0;
Vector puntos = new Vector();
// a constructor
Point origen = new Point(0,0);
public Point (){
Point p=null;;
totalPuntos++;
for (int i =0; i<5; i++){
}
public Point(int x, int y) {
p= new Point(i,i+1);
this.x = x;
puntos.addElement(p);
this.y = y;
}
totalPuntos++;
System.out.println("Punto1\t Punto2\t Punto medio");
}
for (int i=0; i<5; i++){
public Point(Point p) {
p= (Point)puntos.elementAt(i);
this.x = p.x;
System.out.println(origen+"\t"+p+"\t"+p.medio(origen));
this.y = p.y;
totalPuntos++;
}
}
}
public void setx(int _x){
}
x= _x;
}
public Point medio (Point p){
return new Point((p.x+x)/2, (p.y+y)/2);
}
public String toString (){
return "("+x+","+y+")";
}
Enero-Junio 2012
Instituto Tecnolgico de Culiacn
}
Ing. En Sistemas Computacionales

Ejemplo: Usando cast

public class Point {


import java.util.Vector;
private int x = 0;
public class UsaPointParmetrizado {
private int y = 0;
public static void main(String[] args){
public static int totalPuntos = 0;
Vector<Point> puntos = new Vector<Point>();
// a constructor
Point origen = new Point(0,0);
public Point (){
Point p=null;;
totalPuntos++;
for (int i =0; i<5; i++){
}
public Point(int x, int y) {
p= new Point(i,i+1);
this.x = x;
puntos.addElement(p);
this.y = y;
}
totalPuntos++;
System.out.println("Punto1\t Punto2\t Punto medio");
}
for (int i=0; i<5; i++){
public Point(Point p) {
p= puntos.elementAt(i);
this.x = p.x;
System.out.println(origen+"\t"+p+"\t"+p.medio(origen));
this.y = p.y;
totalPuntos++;
}
}
}
public void setx(int _x){
}
x= _x;
}
public Point medio (Point p){
return new Point((p.x+x)/2, (p.y+y)/2);
}
public String toString (){
return "("+x+","+y+")";
}
Enero-Junio 2012
Instituto Tecnolgico de Culiacn
}
Ing. En Sistemas Computacionales

Ejemplo: Usando
parmetro de tipo

Ejercicios
Investigar en la clase Math cuales mtodos
estn sobrecargados.
Describe dos situaciones distintas en las que
una clase requiere de un mtodo
sobrecargado.
Agrega a la clase Point dos mtodos
llamados move
Parmetros (Point) movimiento absoluto
Parmetros (int, int) movimiento relativo
Enero-Junio 2012

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

Evaluacin
Para derecho de evaluacin
Asistencia: mnima 80%
Portafolio de evidencias 100%

Trabajo individual 20% (portafolio,


programas y tareas)
Trabajo en equipo (proyecto) 30%
Examen 50%
Instituto Tecnolgico de Culiacn
Ing. En Sistemas Computacionales

Actividades de aprendizaje

Programar clases con atributos pblicos para exponer y comprender la vulnerabilidad de los
datos.
Proteger los atributos con modificadores de acceso privados o protegidos y programar
mtodos pblicos para otorgar acceso seguro a los mismos.
Reunir dentro de una clase los miembros necesarios para resolver un problema en
particular, y as implementar el encapsulamiento.
Instanciar objetos para identificar el nacimiento y muerte de los mismos.
Programar constructores y destructores para las clases, de manera que permitan dar un
valor inicial a sus atributos cuando nazcan sus objetos, o liberar recursos cuando mueran
los mismos.
Identificar los comportamientos de una clase que pueden variar dependiendo del paso,
cantidad, tipo u orden de argumentos.
Programar cada variacin del comportamiento en mtodos sobrecargados para agregar
flexibilidad a la clase.
Identificar operaciones que puedan ser realizadas entre dos objetos de la misma clase.
Seleccionar un operador existente del lenguaje y sobrecargarlo en la clase de los objetos
para implementarles dicha funcionalidad.
Instituto Tecnolgico de Culiacn
Ing. En Sistemas Computacionales

3. Herencia.
3.1 Introduccin a la herencia.
3.2 Herencia simple.
3.3 Herencia mltiple.
3.4 Clase base y clase derivada.
3.4.1 Definicin.
3.4.2 Declaracin.
3.5 Parte protegida.
3.5.1 Propsito de la parte protegida.
3.6 Redefinicin de los miembros de las clases derivadas.
3.7 Clases virtuales y visibilidad.
3.8 Constructores y destructores en clases derivadas.
3.9 Aplicaciones.
Enero-Junio 2012

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

3. Herencia.
Competencia
Implementar la herencia en clases
derivadas para reutilizar los miembros
de una clase base.

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

Que es herencia?
Herencia*. Derecho a heredar.
Heredar*. Recibir los bienes, derechos
y acciones de una persona.

* Diccionario Pequeno Larousse Ilustrado, Ed. Larousse 2003.


Enero-Junio 2012

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

3.1 Introduccin a la Herencia.


Herencia es el acto de derivar una nueva
clase de una ya existente.
La herencia es una tecnica fundamental para
organizar y crear clases.
Incrementa la reutilizacion de cdigo al
desarrollar nuevos programas.
Se pueden crear referencias polimorficas a
partir de una jerarquia de clases definida con
herencia.
Enero-Junio 2012

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

Herencia
Reutilizacion de software
Organizacion jerarquica
Superclase (clase padre)
Subclase (clase derivada)

ejecucin dinamica a traves de mensajes


Acceso protegido para especializadores
Sobreescritura (especializacion de
comportamiento)
Enero-Junio 2012

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

Tipos de Herencia
Herencia Simple o Multiple
Define el numero de clases/interfaces padre
Simple. Una sola clase/interface padre
Multiple. Mas de una clase/interface padre

Herencia de implementacion o de Interface


Implementacion. Hereda comportamiento
Interface. Hereda solo la estructura

Herencia Mixin
Crea nuevas clases mezclando una clase con otra clase especial
Enero-Junio 2012

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

3.2 Herencia simple.


Solo existe una clase padre.
Object
Point

ColorPoint

Enero-Junio 2012

D3Point

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

3.3 Herencia mltiple.


Existen muchas clases padre.
Object

Point

Color

La herencia Multiple de
Implementacion puede generar el
Problema Diamante

ColorPoint

Enero-Junio 2012

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

Ejemplo Problema diamante


class link { }

cdigo en C++

class task : public link {


virtual debug* get_d ();
}
class job : public link {
virtual debug* get_d ();
}
class myClass : public task, public job{ . }
debug* d = s-> get_d();

// error! ambiguous method invocation

debug* e = s -> job::get_d(); // explicit delegation using class job


debug* f = s -> task::get_d();// explicit delegation using class task
Enero-Junio 2012

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

Herencia Mixin
// mixin definition
mixin Undo {
inherited String getText( );
//must be in the class to be mixed
inherited void setText(String s); //must be in the class to be mixed
String lastText;
void setText(String s) {
lastText = getText( );
super.setText(s);
}
void undo( ) { setText(lastText); }
}
class Textbox extends Component { // a class with getText and setText
String text;

String getText( ) { }
void setText(String s) { }
}
class TextboxWithUndo = Undo extends Textbox { } // new class

Enero-Junio 2012

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

mixin

Clase 1

nueva
class

Herencia en Java
La herencia ocurre cuando una clase adopta y/o
adapta las estructuras y mtodos de una clase base
(clase padre) e implementa los mtodos de una o
mas interfaces.
Herencia Simple de Implementacion
Una clase solo puede tener una clase padre
Herencia Multiple de Interfaces
Una clase puede tener muchas interfaces padre
Enero-Junio 2012

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

Object es la clase mas general.


La clase Object definida en el paquete java.lang define e
implementa el comportamiento que todas las clases requieren.
Las clases se derivan de Object o de otras clases lo que forma una
jerarquia de clases.
Las clases de los niveles bajos de la jerarquia definen un
comportamiento mas especializado.
Una subclase se deriva de otra clase.
La superclase es la clase que es el ancestro directo de otra clase.
Cada clase tiene solo una superclase inmediata.

Enero-Junio 2012

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

3.4 Clase base y clase derivada.


Clase base. Es aquella que se usa para definir una nueva
clase (usando la parte extends del encabezado de definicion de
clase).

Clase derivada. Es la clase que agrega y/o especializa


elementos a una clase base.

La clase derivada hereda a todos los miembros


definidos en la clase base y puede usar directamente
todos aquellos que tiene acceso public o protected.
Los constructores NO son miembros, por lo tanto no
se heredan.
Enero-Junio 2012

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

package java.awt;
public class Window .{

public Window(Frame owner) {

}
}

Ejemplo
(superclase de WarningWindow)
Clase base

public class WarningWindow extends java.awt.Window{

Clase derivada
(subclase de Window)

Enero-Junio 2012

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

Ejemplo
Clase base

Clases derivadas

Enero-Junio 2012

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

Ejemplo
Persona

Alumno

Profesor

Enero-Junio 2012

Secretaria

Usando la sintaxis de Java


Definir las clases:
Persona
Alumno
Profesor
Secretaria

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

Cuantas diferentes jerarquias se


pueden crear?
Animal
Animal

Herbivoro

Carnivoro
Domestico
Animal

Reptil
Enero-Junio 2012

Ave

Mamifero

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

Salvaje

Corral

public class ColorPoint extends Point {


private String color = "rojo";
public void setColor (String c){
color = c;
}
public String getColor(){
return color;
}
public String toString(){
return super.toString()+","+color;
}
public static void main(String[] args){
ColorPoint c1 = new ColorPoint();
System.out.println(c1);
c1.setx(5); // heredado
c1.setColor("blanco");
System.out.println(c1);
Point p1 = new ColorPoint();
p1.move(2,3);
System.out.println(p1);
}
}
Enero-Junio 2012

public class Point {


private int x = 0;
private int y = 0;
public static int totalPuntos = 0;
// a constructor
public Point (){
totalPuntos++;
}
public Point(int x, int y) {

}
public Point(Point p) {

}
public void setx(int _x){
x= _x;
}
public Point medio (Point p){
return new Point((p.x+x)/2, (p.y+y)/2);
}
public String toString (){
return "("+x+","+y+")";
}
}

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

public class Persona {

Agrega a la clase Alumno


los elementos necesarios
para su funcionamiento

String nombre;
Calendar fechaNacimiento;
public Persona(String n){

nombre = n;

public class Alumno extends Persona{

// atributos

// mtodos nuevos

// mtodos sobreescritos
}

Enero-Junio 2012

public String toString(){


return nombre;
}
}

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

3.5 Parte protegida.


Los miembros o constructores
protegidos pueden ser accesados
desde fuera del paquete en el cual se
declararon solo por el cdigo que es
responsable de la implementacion
del objeto que realiza el acceso.

Enero-Junio 2012

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

Ejemplo
http://java.sun.com/docs/books/jls/second_edition/html/names.doc.html

package algunPaquete;
public class Padre {
protected int a;

Enero-Junio 2012

package otroPaquete;
public class Hijo extends Padre {
public boolean equal(Hijo p){
return a == p.a; // Ok!
}
public int getIt(Padre p){
return p.a; // ERROR
// p debe ser Hijo o subclase de Hijo
}

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

Ejemplo
http://java.sun.com/docs/books/jls/second_edition/html/names.doc.html#62587

package points;
public class Point {
protected int x, y;
public void move(int dx, int dy) {
x += dx;
y += dy;
}

package threePoint;
import points.Point;
public class Point3d extends Point {
protected int z;
public void delta(Point p) {
p.x += this.x; // compile-time error: cannot access p.x
p.y += this.y; // compile-time error: cannot access p.y
}
public void delta3d(Point3d q) {
q.x += this.x;
q.y += this.y;
q.z += this.z;
}
}

Cuando la clase Point3D se coloca en el mismo paquete


que la clase Point no existen errores de compilacion
Enero-Junio 2012

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

3.6 Redefinicin de los miembros de


las clases derivadas.
La redefinicion de un mtodo se da
cuando una subclase contiene un mtodo
con la misma firma (mismo nombre y
numero, tipo y orden de los parmetros) que
la clase base.

Enero-Junio 2012

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

public class MyClass {


private int anInt = 4;
//Overrides toString in Object class.
public String toString() {
return "Instance of MyClass. anInt = " + anInt;
}
}

Enero-Junio 2012

public class MyClass {


private int anInt = 4;
//Overrides toString in Object class.
public String toString() {
return "Instance of MyClass. anInt = " + anInt;
}
//Overloads toString method name to provide
//additional functionality.
public String toString(String prefix) {
return prefix + ": " + toString();
}
}

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

public class Animal {


public static void hide() {
System.out.println("The hide method in Animal.");
}
public void override() {
System.out.println("The override method in Animal.");
}
}
public class Cat extends Animal {
public static void hide() {
System.out.println("The hide method in Cat.");
}
public void override() {
System.out.println("The override method in Cat.");
}
public static void main(String[] args) {
Cat myCat = new Cat();
Animal myAnimal = (Animal)myCat;
myAnimal.hide();
myAnimal.override();
}
}

//The output from this program is as follows:


The hide method in Animal.
The override method in Cat.

Enero-Junio 2012

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

3.7 Clases virtuales y visibilidad.


Java no contiene clases virtuales.
Visibilidad, se aplica solamente a las
variables de instancia y determina si la
variable puede utilizarse fuera de la clase en
la cual es declarada. Se establece mediante
un modificador de acceso.
Los modificadores de acceso son:

Public
Private
Protected
Package

Enero-Junio 2012

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

Especificadores de acceso
public: Cualquier clase en cualquier
paquete, tiene acceso a los miembros
pblicos.
private: Un miembro privado es
accesible solo en la clase donde fue
definido.Usa este tipo de especificador
para miembros que solo deben ser
utilizados por la clase.
Enero-Junio 2012

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

Ejemplo private:
class Alpha {
private int iamprivate;
public int iampublic;
}
class Beta {
void accessMethod()
{ Alpha a = new Alpha();
a.iamprivate = 10; // illegal
a.iampublic; // legal } }
Enero-Junio 2012

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

Especificadores de acceso
protected: Los miembros protected
solo pueden ser accesados por la clase,
subclases y todas las clases del mismo
paquete.
Usa los miembros protegidos cuando
deseas que los miembros sean usados
por subclases, pero no clases no
relacionadas.
Enero-Junio 2012

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

package A;
public class Foo{
package A;
int x;
public class Example{
void bar(){
public int i;
int j; //package
Example e=new Example();
protected int k;
x=e.i;
private int l;
x= e.j;
X
x=e.k;
x=e.l;
}
}
Que pasa si cambiamos de paquete a la clase
Example?
Enero-Junio 2012

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

Especificadores de acceso
Si no se define ningn especificador
de acceso, package es el que se
establece.
En este nivel se permite a todas las
clases del mismo paquete de la clase
actual, acceder a sus miembros.

Enero-Junio 2012

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

package B;
import A.*;
public class Foo{
int x;
void bar()
{
Example e=new
Example();
x=e.i;
x= e.j;
x=e.k;
x=e.l; }
}

Enero-Junio 2012

package A;
public class Example{
public int i;
int j; //package
protected int k;
private int l;

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

package B;
import A.Example;
public class Foo extends
A.Example{
int x;
void bar()
{
Example e=new Example();
x=e.i;
x= e.j;
x=e.k;
x=e.l; }
x=this.k; //ok
}

Enero-Junio 2012

package A;
public class Example{
public int i;
int j; //package
protected int k;
private int l;

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

Package y Protected
Podemos referenciar nuestra propia
variable protected (variable k) que se
heredo de la clase Example, es por eso
que se permite: x=this.k;
Pero no se puede referenciar las
variables protected del objeto padre
de manera directa, solo se puede hacer
esto a travs de la herencia.
Enero-Junio 2012

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

Resumen de Modificadores de acceso


Especificador class

subclass

package

private

protected

public

package

Enero-Junio 2012

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

world

3.8 Constructores y destructores en


clases derivadas.
Java no tiene destructores explcitos.
Los constructores deben tener el mismo
nombre de la clase.
No es obligatorio definir un constructor
para la clase. Si no se hace, el Java
runtime system provee uno por
default, el cual crea la instancia de la
clase.
Enero-Junio 2012

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

Caractersticas de los Constructores


No tienen valores de retorno
Una clase puede tener varios
constructores sobrecargados, los
cuales permiten a los objetos de esa
misma clase inicializarse de distinta
manera.

Enero-Junio 2012

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

3.8 Constructores y destructores en


clases derivadas.
Java no tiene destructores explcitos.

Enero-Junio 2012

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

3.9 Aplicaciones.
Definir una clase base
Definir una subclase
Constructores
Llame a super
No llame a super

Sobreescritura
Sobrecarga
Enero-Junio 2012

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

Evaluacin
Para derecho de evaluacin
Asistencia: mnima 80%
Portafolio de evidencias 100%

Trabajo individual 20% (portafolio,


programas y tareas)
Trabajo en equipo 30%
Examen 50%
Instituto Tecnolgico de Culiacn
Ing. En Sistemas Computacionales

Actividades de aprendizaje

Analizar analogas taxonmicas de los seres vivos que compartan rasgos comunes por estar relacionados mediante
una herencia gentica e identificar la especie a la que pertenecen.
Identificar los atributos y comportamientos propios de una especie que comparten los animales pertenecientes a ella.
Analizar objetos reales que compartan caractersticas comunes por pertenecer a una misma categora de objetos.
Identificar los atributos y comportamientos propios de una categora de objetos que compartan todos sus miembros.
Investigar en fuentes de informacin los conceptos relacionados con la herencia y su implementacin en un lenguaje
de programacin orientado a objetos.
Programar una clase base para una especie de animales con los atributos y comportamientos comunes a todos los
animales pertenecientes a ella.
Implementar clases derivadas para animales pertenecientes a la misma especie de la cual se program la clase
base anteriormente.
Especializar cada clase derivada con comportamientos y atributos especficos de un tipo de animal para identificarlo
y distinguirlo de los dems.
Crear varias instancias de clases derivadas diferentes para verificar la existencia de los miembros heredados
comunes en todas ellas, y la diversidad de sus especializaciones.
Repetir las mismas actividades pero utilizando objetos y categoras de objetos reales.
Sobrecargar los constructores de las clases base y derivadas para analizar y experimentar el comportamiento y uso
de los constructores en combinacin con la herencia.
Analizar qu animales u objetos de la vida real rompen algn comportamiento heredado para reinventar el suyo
propio por sobre el resto de sus parientes que siguen respetando el heredado.
Redefinir un mtodo en una clase derivada para sobrescribir el de su clase base e introducirse al polimorfismo.

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

4. Polimorfismo y reutilizacin.
4.1 Concepto del polimorfismo.
4.2 Clases abstractas.
4.2.1 Definicin.
4.2.2 Redefinicin.
4.3 Definicin de una interfaz.
4.4 Implementacin de la definicin de una interfaz.
4.5 Reutilizacin de la definicin de una interfaz.
4.6 Definicin y creacin de paquetes / librera.
4.7 Reutilizacin de las clases de un paquete / librera.
4.8 Clases genricas (Plantillas).

Enero-Junio 2012

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

4. Polimorfismo y reutilizacin.
Competencia
Implementar interfaces y clases
polimrficas.

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

4.1 Concepto del polimorfismo.


Polimorfismo: propiedad de un cuerpo que
puede cambiar su morfologia sin cambiar su
naturaleza.*
El polimorfismo de subtipos es una
caracterstica fundamental de los LPOO.

* Diccionario Pequeno Larousse Ilustrado, Ed. Larousse 2003.


Enero-Junio 2012

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

Categorias de polimorfismo
Ad hoc
Coercin
Sobrecarga

Ejemplos
( (Hourly) empleado).getPago();
stack = new Vector(10);

Universal
Subtipos

empleado.toString();

Paramtrico

stack = new Vector<Integer>();

Enero-Junio 2012

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

public class OStack {


private int top=0;
private int size;
private Object[] store= new Object[size];
public OStack (){ this(10); }
public OStack (int s){ size = s; }
public void push (Object elem) {
if (top >= store.length) {
//size = store.length;
Object[] tmp = new Object[store.length+size];
System.arraycopy(store,0,tmp,0,store.length);
store= tmp;
}
store[top++] = elem;
}
public Object pop() {
return store[--size];
}
public String toString(){
String s = new String(" Resultado ");
for (int i=0; i<store.length; i++)
s = s + store[i];
return s;
}
public static void main (String [] args) {
OStack x = new OStack();
Object o = new OStack(15);
((OStack)o).push(new Integer(3));
x.push(new Integer(17));
x.push(new Integer(20));
System.out.println(o);
System.out.println(x);

Ejemplo de
polimorfismo
// sobrecarga de constructores

// casting
// subtipo/inclusion

}
}

Enero-Junio 2012

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

Redefiniendo mtodos
(sobrescritura)
Es la habilidad de una subclase de
redefinir el mtodo de una superclase
cuyo comportamiento es muy
parecido, pero diferente, en la
subclase.

Enero-Junio 2012

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

Ejemplo de redefinicin de mtodo


public class Stack {
private Vector items;
// code for Stack's methods and constructor not shown
// overrides Object's toString method
public String toString()
{
int n = items.size();
StringBuffer result = new StringBuffer();
result.append("[");
for (int i = 0; i < n; i++) {
result.append(items.elementAt(i).toString());
if (i < n-1) result.append(",");
}
result.append("]"); return result.toString();
}
}
Enero-Junio 2012

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

Propiedades a considerar al
momento de la redefinicin
El tipo de retorno, nombre del mtodo, nmero,
tipo y orden de los parmetros para el mtodo
redefinido debe ser igual que para el mtodo
original.
El mtodo redefinido puede tener una clasula
throws igual que el original.
El mtodo redefinido puede tener mayor acceso que
el mtodo redefiniendo, pero no menos. Ej.- Un
mtodo protected en la superclase puede hacerse
public, pero no private.
Enero-Junio 2012

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

Llamando al mtodo redefinido de la


superclase
super.overriddenMethodName();

Enero-Junio 2012

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

Qu mtodos no se puede redefinir?


Un mtodo definido como final en la
superclase, no se puede redefinir.
Tampoco se puede redefinir los
mtodos static (mtodos de clase).

Enero-Junio 2012

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

Descendientes de la clase Object


Como la clase Object es superclase de todas
las clases. sta define el estado y
comportamiento bsico que todo objeto
debera tener:
Habilidad para compararse.
Habilidad para convertirse en String.
Habilidad para regresar la clase del objeto.
Entre otras

Todas estas habilidades se implementan


redefiniendo algunos mtodos de la clase
Object.
Enero-Junio 2012

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

Mtodos que se pueden o no


redefinir
Se pueden redefinir:
clone (usado para obtener una copia del objeto)
equals (usado para comparar objetos)
finalize (se invoca cuando el objeto se destruye,
no se recomienda redefinir).

toString (representacin como String del objeto).

Enero-Junio 2012

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

El mtodo equals
Se utiliza para comparar dos objetos.
La clase debe sobreescribir este
mtodo para comparar los atributos de
los objetos
Para realizar una comparacin se
invoca al mtodo:
unObjeto.equals(otroObjeto);
Enero-Junio 2012

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

public class Point {


private int x = 0;
private int y = 0;
public static int totalPuntos = 0;
// a constructor
public Point (){
totalPuntos++;
}
public Point(int x, int y) { }
public Point(Point p) { }
public void setx(int _x){
x= _x;
}
public boolean equals(Object o){
Point p = (Point) o;
return ((x==p.x) && (y==p.y));
}
public Point medio (Point p){
return new Point((p.x+x)/2, (p.y+y)/2);
}
public String toString (){
return "("+x+","+y+")";
}
}
Enero-Junio 2012

Ejemplo equals

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

Ejemplo equals
public class ColorPoint extends Point {
private String color = "rojo";
public void setColor (String c){
color = c;
}
public String getColor(){
return color;
}
public String toString(){
return super.toString()+","+color;
}
// redefinicion del mtodo equals

// Resultado de
Point p0 = new Point();
ColorPoint cp = new ColorPoint();
p0.equals(p0);
p0.equals(cp);
cp.equals(p0);
cp.equals(cp);

}
Enero-Junio 2012

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

4.2 Clases abstractas.


Una clase abstracta es una definicin parcial
(incompleta) de un grupo de elementos.
Una clase abstracta contiene mtodos
abstractos (no estan implementados).
Las clases abstractas se usan para definir
jerarquias de clases (herencia) que contienen
comportamiento y estructura.
La definicin de clases abstractas forza la
redefinicin (sobreescritura) de mtodos.
Enero-Junio 2012

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

Clases abstractas
La palabra reservada abstract aparece en el
encabezado de la definicion de la clase
cuando esta contiene cero o mas mtodos
abstractos.
Una clase abstracta se usa cuando:
Habra varias subclases
Se desea manejar a todas las diferentes
subclases como instancias de la superclase
La superclase por si misma no tiene sentido como
un objeto.
Enero-Junio 2012

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

// con algunos identificadores cambiados


public abstract class Component {

public abstract void DrawMeOnScreen();

}
public class Button extends Component {

public void DrawMeOnScreen(){


// implementacion
}
}
public class ScrollBar extends Component {

public void DrawMeOnScreen(){


// implementacion
}
}
Enero-Junio 2012

Ejemplo
Es posible crear
instancias de las clases
Button o ScrollBar pero
NO de Component.

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

Jerarqua de clases
Empleado

Empleado
Asalariado

Empleado por
Comisin

Empleado por
Horas

Empleado Base Ms
Comisin

Observaciones:
Existe un mtodo ingresos que se aplica genricamente a todos los
empleados.
El clculo de los ingresos de cada empleado depende de su clase.
Enero-Junio 2012

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

public abstract class Employee


{
private String firstName;
private String lastName;
private String socialSecurityNumber;
// constructores

// mtodos comunes a todos los trabajadores

// mtodo abstracto sobreescrito por las subclases


public abstract double ingresos(); // no hay implementacion aqui
}
public class SalariedEmployee extends Employee
{
private double weeklySalary;
// calcula ingresos; sobreescribe el mtodo abstracto ingresos en Employee
public double ingresos()
{
return weeklySalary;
}
}
Enero-Junio 2012

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

4.3 Definicin de una interfaz.*


Una interface es un dispositivo o sistema
que dos entidades usan para interactuar
entre ellas.
interface
Palabra clave del lenguaje Java(TM) usada
para definir una coleccion de mtodos y
valores constantes. Esta puede ser
implementada posteriormente por una clase
usando la palabra clave implements.
* De Java Tutorial
http://java.sun.com/docs/books/tutorial/java/concepts/interface.html
Enero-Junio 2012

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

Una interfaz es una coleccion de


constantes y mtodos sin
implementacion.
Una interface se usa para definir la
estructura de un grupo de elementos.
Los identificadores de interfaces
pueden usarse como tipos para
referenciar variables.
Enero-Junio 2012

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

Definicin de una interfaz.


Una interfaz se define en dos partes:
Encabezado
ModificadorAcceso interface Identificador Superinterfaces

Bloque

extends ListaDeInterfaces
{
//constantes
//mtodos
}

Enero-Junio 2012

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

Interfaces
Una interface establece una garantia de los
servicios que un objeto proporciona.
Las interfaces permiten efectuar llamadas
polimorficas donde el mtodo que se invoca
se selecciona del objeto actual que se
encuentra en ejecucin.
Las interfaces permiten que multiples clases
compartan datos definidos en una localidad.
Enero-Junio 2012

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

Interfaces
Una interface se usa para definir un protocolo de
comportamiento que puede ser implementado por
culaquier clase de la jerarquia cuando:
Se requiere un identificador comun para un parmetro
de un mtodo.
Deseas compilar tu cdigo sin tener una
implementacion del objeto particular.
Se requiere especificar la firma exacta de los mtodos
que deben proveerse por todas las clases que
implementen la interface.
Capturar similaridades entre clases no relacionadas
Enero-Junio 2012

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

Interfaces y Clases Abstractas


Las interfaces y las clases abstractas
se usan como mecanismos para definir
jerarquias (de clases) mas finas.
Una clase puede heredar la estructura
de muchas interfaces.
Java cuenta con un conjunto de clases
abstractas e interfaces dentro de sus
APIs
Enero-Junio 2012

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

Interfaces y Clases Abstractas


No contiene mtodos
implementados
No forma parte de la
jerarqua de clases
Puede extender muchas
interfaces
Los mtodos definidos en
una interface son
implcitamente abstractos
Enero-Junio 2012

Puede contener mtodos


implementados
Es parte de la jerarqua
de clases
Puede extender solo una
superclase
Los mtodos abstractos
deben ser explcitamente
definidos

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

4.4 Implementacin de la definicin


de una interfaz.
public interface StockWatcher {
void valueChanged(TickerSymbol tickerSymbol, BigDecimal newValue);
}
public class StockApplet extends Applet implements StockWatcher {
public void valueChanged(TickerSymbol tickerSymbol, BigDecimal newValue) {
switch (tickerSymbol) {
case SUNW: ... break;
case ORCL: ... break;
case CSCO: ... break;
default: // handle unknown stocks ... break;
}
}
}
Enero-Junio 2012

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

Interfaces como tipos


El identificador de la interface define el tipo del parmetro.
Cualquier objeto de una clase que implemente StockWatcher
puede ser usado como parmetro actual
public class StockMonitor {
public void watchStock(StockWatcher watcher,
TickerSymbol tickerSymbol, BigDecimal delta) {
...
}
}

Enero-Junio 2012

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

4.5 Reutilizacin de la definicin de


una interfaz
Las interfaces no pueden crecer
(modificar la interface para agregarle
mas mtodos). Esto provocara errores
(inconsistencias) en las clases que
actualmente implementan la interfaz.
Una interfaz puede extender a otra
interfaz para agregarle nuevos
mtodos.
Enero-Junio 2012

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

// NO actualizar la interface en esta forma!!


public interface StockWatcher {
void valueChanged(TickerSymbol tickerSymbol, BigDecimal newValue);
void currentValue(TickerSymbol tickerSymbol, BigDecimal newValue);
}

public interface StockTracker extends StockWatcher {


void currentValue(TickerSymbol tickerSymbol, BigDecimal newValue);
}

Enero-Junio 2012

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

Tarea de Interfaces
Investigar la interface Comparable del
paquete java.lang
Investigar las interfaces Collection e
Iterator del paquete java.util
Incluir un ejemplo del uso de dichas
interfaces (30% del examen)
Enero-Junio 2012

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

4.6 Definicin y creacin de


paquetes / librera.
Un paquete (package) es una coleccin de
archivos .class relacionados, los cuales se
encuentran en un subdirectorio.
Un paquete es una biblioteca (library) de
clases y a su vez es un subdirectorio.

Paquete = Directorio
(nombre del paquete debe ser igual al nombre del directorio)

Clase = Archivo
(nombre de la clase debe ser igual al nombre del archivo)
Enero-Junio 2012

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

Definicin y creacin de paquetes /


librera
Los paquetes se utilizan para agrupar
diversas clases dandoles un nombre de
grupo que pueda identificarlas.
Los paquetes permiten asignar a las clases
nombres que incluyen la ruta donde estas se
localizan. (Nombres completos)
package java.util.zip;
public class ZipFile {}
Enero-Junio 2012

Nombre completo de la clase


java.util.zip.ZipFile

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

Definicin y creacin de paquetes /


librera
paquete
clase
clase
atributos
atributos
mtodos
mtodos
Variables
Variables
locales locales

interface
mtodos

Subpaquete

interface
clase
mtodos
atributos
mtodos
Variables
locales

TAREA: Investigar como se selecciona el nombre de un paquete.


Enero-Junio 2012

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

Los paquetes permiten definir un


espacio de nombres (namespace)
Los paquetes NO tienen interfaces
propias
Los paquetes NO permiten obtener
diferentes vistas de sus elementos

Enero-Junio 2012

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

Ejemplo
Empleado

Recibos

Servicios

EmpleadoHora

Reportes

EdoFinanciero

EmpleadoBase

Condomino

Gastos

Nomina

ABCC

Compras

etc

ABCC
empleados

condominos

sac

Enero-Junio 2012

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

finanzas

Definicin y creacin de paquetes /


librera
Una unidad de compilacin (clase o interface)
puede iniciar con un estatuto que defina a
que paquete pertenece:
package poo.proyecto1;
La ausencia de esta declaracin, coloca la
clase en un paquete annimo en el mismo
directorio donde se almacena el archivo.
Enero-Junio 2012

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

Empleado

Empleado Empleado Empleado


Base
Hora
Comision

El archivo .class que se


genera en la compilacion
se almacenara en el
directorio definido por la
declaracin del paquete.

package sac.empleados;
public abstract class Empleado{}

package sac.empleados;
public class EmpleadoBase{}
package sac.empleados;
public class EmpleadoComision{}
package sac.empleados;
public class EmpleadoHora{}
Enero-Junio 2012

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

4.7 Reutilizacin de las clases de un


paquete / librera.
Solo los miembros pblicos de un paquete
estan accesibles fuera del paquete.
Para usar un miembro se puede:
Usar su nombre completo ej.
sac.empleados.EmpleadoBase
Importarlo del paquete individualmente
import sac.empleados.EmpleadoBase
Importar a todos los miembros del paquete
import sac.empleados.*
Enero-Junio 2012

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

Ejemplos
//uso del nombre completo de la clase (sin import)
sac.empleados.EmpleadoBase empleadob = new sac.empleados.EmpleadoBase ();

//uso de la clase importandola individualmente


import sac.empleados.EmpleadoBase;
EmpleadoBase empleadob = new EmpleadoBase ();

//uso de la clase importandola colectivamente


import sac.empleados.*;
EmpleadoBase empleadob = new EmpleadoBase ();

Enero-Junio 2012

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

4.8 Clases genricas.


(Plantillas en C++).
El cdigo generico es una abstraccin
sobre tipos de datos. Esto significa que el
mismo proceso se puede utilizar
independientemente del tipo de dato.
Ejemplos:

Ordenar un arreglo
Intercambiar variables
Procesar una lista de datos
Colecciones (Pilas, Colas, Arboles, etc.)

Enero-Junio 2012

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

Java 1.5 incluye genricos


Las clases, interfaces, constructores, y mtodos
pueden ser genericos si se utilizan parmetros de
tipos.
El cdigo genrico provee mayor legibilidad de los
programas y mas seguridad en la ejecucin.
Se compila solo una vez y para siempre.
Se realiza una traduccin homogenea.
Enero-Junio 2012

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

Ejemplo
interface List<A> {
void add(A x);
Iterator<A> iterator();
}
interface Iterator<A> {
A next();
boolean hasNext();
}
Enero-Junio 2012

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

Node
class LinkedList<A> implements List<A>{
protected class Node {
elt next
A elt; Node next;
Node(A e) { elt= e; next=null;}
}
protected Node h,t;
public LinkedList() {h = new Node(null); t = h;}
public void add(A elt){ t.next = new Node(elt); t = t.next;}
public Iterator<A> iterator(){
return new Iterator<A>(){
protected Node p = h.next;
public boolean hasNext() {return p != null;}
public A next(){A e = p.elt; p=p.next; return e;}
}
}
}
Enero-Junio 2012

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

Usando la clase con parmetro de tipo


List<Integer> xs = new LinkedList<Integer>();
xs.add(0);
// boxing automatico
Integer x = xs.iterator().next(); // no cast
Usando la clase SIN parmetro de tipo
List xs = new LinkedList();
xs.add(new Integer(0));
// requiere wrapping
Integer x = (Integer) xs.iterator().next();
// requiere cast (puede fallar en ejecucin)

Enero-Junio 2012

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

//Usando parmetros de tipo


List<String> ys = new LinkedList<String>();
ys.add(zero);
List<List<String>> yss = new LinkedList<List<String>>();
yss.add(ys);
String y=yss.iterator().next().iterator().next();
Integer z = ys.iterator().next();
// error en tiempo de compilacion

//Sin usar parmetros de tipo


List ys = new LinkedList();
ys.add(zero);
List yss = new LinkedList();
yss.add(ys);
String y = (String)((List)yss.iterator().next()).iterator().next();
Integer z = (Integer) ys.iterator().next(); // error en tiempo de ejecucin

Enero-Junio 2012

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

Se pueden definir restriciones


recursivamente
OrderedList<T implements Orderable<T>>

Solo se pueden usar referencias como


parmetros de tipo
El tiempo de ejecucin es similar a la
implementacion usando Object y cast
Enero-Junio 2012

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

Evaluacin
Para derecho de evaluacin
Asistencia: mnima 80%
Portafolio de evidencias 100%

Portafolio 20%
Trabajo en equipo 30%
Examen 50%
Instituto Tecnolgico de Culiacn
Ing. En Sistemas Computacionales

Actividades de aprendizaje

Analizar clases base que no requieran ser instanciadas, o que carezcan de sentido para
ello por ser abstractas.
Investigar en fuentes de informacin los conceptos y reglas para implementar clases
abstractas en un lenguaje de programacin orientado a objetos.
Implementar clases abstractas en clases base que no requieran ser instanciadas con al
menos un mtodo abstracto para que sea implementado por sus clases derivadas en
mltiples formas.
Implementar una clase con todos sus comportamientos abstractos.
Investigaren diversas fuentes de informacin el concepto de interfaz y compararlo con la
clase cien por ciento abstracta.
Programar interfaces para definir los comportamientos que una clase deber de tener al
implementarla.
Implementar una misma interfaz en diferentes clases para dar en cada una un
comportamiento diferente a sus mtodos.
Realizar una herencia de interfaces para especializar los comportamientos que las clases
podrn implementar.
Declarar variables miembro de tipo clase abstracta o interfaz para que en tiempo de
ejecucin se inicialice con diferentes subtipos o implementaciones de las mismas, y se
demuestre as, toda la flexibilidad del polimorfismo al cambiar el comportamiento de un
objeto en tiempo de ejecucin.
Instituto Tecnolgico de Culiacn
Ing. En Sistemas Computacionales

5. Excepciones.
5.1 Definicin.
5.1.1 Que son las excepciones.
5.1.2 Clases de excepciones.
5.1.3 Propagacin.
5.2 Gestin de excepciones.
5.2.1 Manejo de excepciones.
5.2.2 Lanzamiento de excepciones.
5.3 Excepciones definidas por el usuarios.
5.3.1 Clase base de las excepciones.
5.3.2 Creacin de un clase derivada del tipo excepcin.
5.3.3 Manejo de una excepcin definida por el usuario.
Enero-Junio 2012

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

5. Excepciones.
Competencia
Identificar, manejar, gestionar y crear
las condiciones de error que
interrumpan el flujo normal de ejecucin
de un programa.

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

5.1 Definicin.
Regla de oro que siempre debe recordarse:
En los programas de software ocurren errores
Que pasa despues de que ocurre un error?
Como se maneja el error?
Quien lo maneja?
Se puede recuperar de un error un programa?
Debe enviar un mensaje de error y terminar?
Enero-Junio 2012

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

5.1.1 Que son las excepciones.


Una excepcion es un evento que
rompe el flujo normal de instrucciones
durante la ejecucin de un programa.
Java posee un mecanismo para el
manejo de excepciones que le permite
ver que excepcion se ha presentado y
como puede recuperarse de ella.
Enero-Junio 2012

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

mtodo en ejecucin

ERROR!!!

Exception object

Encontro?
si

RTS procesa el error

Busca un manejador
5
De excepciones
Enero-Junio 2012

Termina la
no ejecucin
del
programa

Pasa la
excepcion al
manejador

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

Object

5.1.2 Clases de excepciones.


Throwable

Error

Exception
ArithmeticException

VirtualMachineError
AWTError
Etc.

RunTimeException

NullPointerException

IllegalAccessException

IndexOutOfBoundsE

ClassNotFoundException
Etc.

Enero-Junio 2012

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

Etc.

Clases de Excepciones
Checked Exceptions. Son aquellas que deben
ser capturadas por un mtodo o deben ser listadas
en la clausula throws de cualquier mtodo que pueda
lanzar la excepcion o propagarla.

Unchecked Exceptions. Son aquellas que no


deben ser capturadas y no requieren estar en la
clausula throws. Se derivan de RunTimeException.

Enero-Junio 2012

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

5.1.3 Propagacin.

Enero-Junio 2012

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

5.1.3 Propagacin.
m3
mtodo donde ocurre un error
Llama m3

m2
mtodo sin manejador de excepcion

Llama m2

m1
mtodo con manejador de excepcion
main

Llama m1

Stack de llamadas
Enero-Junio 2012

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

Busca un manejador
apropiado para el
error, siguiendo la
secuencia de llamadas
de mtodos en orden
inverso

Definicin de excepciones
try {
// cdigo que puede producir un error

}
catch (TipoDeExcepcion identificador) {
// cdigo que se ejecuta en caso de error

}
// pueden definirse muchos catch

finally {
// cdigo que siempre se ejecuta

}
Enero-Junio 2012

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

// Ejemplo de http://www.cica.es/formacion/JavaTut/Cap6/excep.html
// Capturando una excepcin en un mtodo
class Testcap {
static int slice0[] = { 0,1,2,3,4 };
Captura de la excepcion en main()

Ejemplo

java.lang.ArrayIndexOutOfBoundsException: -1
at Testcap.uno(Testcap.java:8)
at Testcap.main(Testcap.java:16)

static void uno() {


try {
slice0[-1] = 4; //linea #8
} catch( NullPointerException e ) {
System.out.println( "Captura una excepcion diferente" );
}
}

public static void main( String a[] ) {


try {
uno(); //linea # 16
} catch( Exception e ) {
System.out.println( "Captura de la excepcion en main()" );
e.printStackTrace();
}
}
}
Enero-Junio 2012

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

import cs1.Keyboard;
public class ProductCodes {
public static void main( String[] args ) {
String code;
char zone;
int district, valid=0, banned=0;
System.out.print("cdigo de producto (XXX para salir)");
code = Keyboard.readString();
while (!code.equals("XXX")) {
try {
zone = code.charAt(9);
district = Integer.parseInt(code.substring(3,7));
valid++;
if (zone == 'R' && district > 2000) banned++;
}
catch (StringIndexOutOfBoundsException e){
System.out.println ("Longitud invalida"+code);
}
catch (NumberFormatException e){
System.out.println ("El distrito no es nuemrico"+code);
}
System.out.print("cdigo de producto (XXX para salir)");
code = Keyboard.readString();
}
System.out.println( "Total de cdigos validos "+valid );
System.out.println( "Total de cdigos banned "+banned );
}
}
Enero-Junio 2012
Instituto Tecnolgico de Culiacn
Ing. En Sistemas Computacionales

Ejemplo

Ejemplo
public void paint( Graphics g ) {
try {
g.drawString( Saludos[i],25,25 );
}
catch( ArrayIndexOutOfBoundsException e ) {
g.drawString( "Saludos desbordado",25,25 );
}
catch( Exception e ) {
// Cualquier otra excepcin
System.out.println( e.toString() );
}
finally {
System.out.println( "Esto se imprime siempre!" );
}
i++;
}

Enero-Junio 2012

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

5.2 Gestin de excepciones.


Las excepciones pueden generarse
implcitamente cuando se produce un
error y es detectado por el RTS o
explcitamente cuando el programa
detecta un error.
Los nombres de las excepciones
identifican al error que se representa.
Enero-Junio 2012

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

5.2 Gestin de excepciones.


Clausula try contiene el bloque de
instrucciones que pueden producir un error.
Debe ser seguida por una clausula catch o
finally.
Clausula catch contiene el cdigo que se
ejecuta cuando ocurre una excepcion del tipo
especificado.
Clausula finally es el bloque de cdigo
que se ejecuta siempre, haya sucedido o no
una excepcion.
Enero-Junio 2012

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

Clausula throws se define en el encabezado


del mtodo que lanzara esa excepcion.
public static void main(String[] a) throws IOException
{
}

Clausula throw lanza una excepcion


explicitamente.
try {
if( temp > 40 ) throw ( new demasiadoCalor() );

}
Enero-Junio 2012

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

class
class
class
class
class

Limites extends Exception {}


demasiadoCalor extends Limites {}
demasiadoFrio extends Limites {}
demasiadoRapido extends Limites {}
demasiadoCansado extends Limites {}

try {
if( temp > 40 ) throw( new demasiadoCalor() );
if( dormir < 8 ) throw( new demasiado Cansado() );
}
catch( Limites lim ) {
if( lim instanceof demasiadoCalor ){
System.out.println( "Capturada excesivo calor!" );
return;
}
if( lim instanceof demasiadoCansado ) {
System.out.println( "Capturada excesivo cansancio!" );
return;
}
}
finally
System.out.println( "En la clausula finally" );

Enero-Junio 2012

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

Excepciones predefinidas
ArithmeticException. Se generan por una operacion
de division por cero.
NullPointerException. Se genera cuando se intenta
acceder a un variable que no existe (null).
ClassCastException. Se genera cuando se convierte
(cast) un objeto a otra clase que no es vlida.
ArrayIndexOutOfBoundsException. Se genera
cuando se intenta acceder a un elemento que no
existe.
NoClassDefFoundException. Se genera cuando se
requiere de una clase y el sistema no puede
localizarla.
Enero-Junio 2012

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

Persona persona;

String p = persona.getNombre();

y = (Prueba)x;
int i = j / i;

a[i] = x;

Enero-Junio 2012

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

5.3 Excepciones definidas por el


usuarios.
Las excepciones en Java son clases derivadas de la clase
base de las excepciones Exception la cual a su vez se
deriva de la clase Throwable.
La clase Exception contiene tres mtodos heredados de
la clase Throwable, que se utilizan para obtener
informacion de la excepcion estos son:
toString() Convierte el objeto a String.
getMessage() Regresa un String con informacion de la
excepcion.
printStackTrace() Despliega la jerarquia de llamadas de mtodos
que provoco la excepcion.
Enero-Junio 2012

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

Creacin de un clase derivada del


tipo excepcin.
Para crear una excepcion, se deriva una
clase de la clase Exception.
Ejemplo. Define una clase para manejar una
excepcion que valide un rango de valores.
public class RangoNumericoException extends Exception {
public RangoNumericoException (String mensaje){
super(mensaje);
}
}

Enero-Junio 2012

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

Manejo de una excepcin definida


por el usuario.
Las excepciones definidas por el usuario se capturan
(catch) y se lanzan (throw) en la misma forma que
las excepciones predefinidas.
Una excepcion puede ser lanzada en un mtodo y
capturada en un mtodo diferente (el que llamo a
ejecucin).
El compilador se asegura que existan manejadores
de excepciones para todas las excepciones definidas
en la clausula throws.
Enero-Junio 2012

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

try {
int respuesta = CalcRespuesta();
resp = String.valueOf(respuesta);
}
catch (RangoNumericoException e) {
resp =e.getMessage();
}
.

El mtodo CalcRespuesta no atrapa la


excepcion definida en su encabezado por lo
tanto cualquier mtodo que llame a
CalcRespuesta debe atrapar a esa excepcion.

public int CalcRespuesta() throws RangoNumericoException {


.
try {
int1 = Integer.parseInt(str1);
int2 = Integer.parseInt(str2);
if ((int1 < 10) || (int1 > 20) || (int2 < 10) || (int2 > 20)) {
RangoNumericoException e = RangoNumericoException (numero fuera de rango);
throw e;
}
respuesta1 = int1 + int2;
}
catch (NumberFormatException e) {
resp =e.toString();
}
return respuesta1;
}
Enero-Junio 2012

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

Ventajas de las Excepciones


El cdigo regular, se separa del cdigo que
maneja los errores. (parte try, parte catch)
// pseudocdigo
readFile {

Enero-Junio 2012

open the file;


determine its size;
allocate that much memory;
read the file into memory;
close the file;

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

errorCodeType readFile {
initialize errorCode = 0;
open the file;
if (theFileIsOpen) {
determine the length of the file;
if (gotTheFileLength) {
allocate that much memory;
if (gotEnoughMemory) {
read the file into memory;
if (readFailed) {
errorCode = -1;
}
} else {
errorCode = -2;
}
} else {
errorCode = -3;
}
close the file;
if (theFileDidntClose && errorCode == 0) {
errorCode = -4;
} else {
errorCode = errorCode and -4;
}
} else {
errorCode = -5;
}
return errorCode;
}

Enero-Junio 2012

readFile {
try {
open the file;
determine its size;
allocate that much memory;
read the file into memory;
close the file;
} catch (FileOpenFailed) {
doSomething;
} catch (SizeDeterminationFailed) {
doSomething;
} catch (MemoryAllocationFailed) {
doSomething;
} catch (ReadFailed) {
doSomething;
} catch (FileCloseFailed) {
doSomething;
}
}

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

Ventajas de las Excepciones


Los errores se pueden propagar usando el
Stack (Pila) de llamadas.
method1 {

call method2;

}
method2 {

Solo method1
esta interesado en
procesar un error.

call method3;

}
method3 {
}

Enero-Junio 2012

call readFile;

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

// SIN excepciones
method1 {
errorCodeType error;
error = call method2;
if (error)

doErrorProcessing;

else
}

proceed;

errorCodeType method2 {
errorCodeType error;
error = call method3;
if (error)
return error;
else
}

proceed;

errorCodeType method3 {
errorCodeType error;
error = call readFile;
if (error)
return error;
else
}

// CON excepciones
method1 {
try {

call method2;

}
catch (exception e) {
}

doErrorProcessing;

method2 throws exception {


}

call method3;

method3 throws exception {


}

call readFile;

proceed;

Enero-Junio 2012

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

Ventajas de las Excepciones


Los errores pueden ser agrupados y pueden
diferenciarse de otros.
catch (FileNotFoundException e){

catch (IOException e){

}
Enero-Junio 2012

Manejador para un error especfico

Manejador para todos los errores


relacionados con IO

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

Ventajas de las Excepciones


El cdigo es mas legible.
Facilita la depuracion de programas.
NO generan overhead por lo tanto el
tiempo de ejecucin no se ve afectado.

Enero-Junio 2012

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

Evaluacin
Para derecho de evaluacin
Asistencia: mnima 80%
Portafolio de evidencias 100%

Portafolio 10%
Trabajo en equipo 40%
Examen 50%
Instituto Tecnolgico de Culiacn
Ing. En Sistemas Computacionales

Actividades de aprendizaje

Crear un programa que deliberadamente genere excepciones comunes para identificar: sus
nombres, sus causas, su comportamiento, y reporte de error.
Programar una clase con varios mtodos invocndose en cadena, donde el ltimo mtodo
genere una excepcin para estudiar y comprender la propagacin de las mismas.
Utilizar la selectiva intenta para atrapar excepciones de diferentes tipos, y prevenir la
interrupcin de ejecucin de un programa.
Analizar situaciones en las que un mtodo no pueda devolver un valor de retorno como
indicador de un error interno, y tenga la necesidad de levantar una excepcin por el usuario
que le indique que su funcin no pudo ser realizada.
Programar la instanciacin y lanzamiento de excepciones definidas por el lenguaje para
situaciones en que no es posible regresar un valor desde un mtodo que indique una
condicin de error interna.
Identificar condiciones de error requeridas por el usuario y no previstas por el lenguaje que
requieran la creacin de un nuevo tipo de excepcin.
Implementar un nuevo tipo de excepcin definido por el usuario heredando de la clase base
de las excepciones o alguna otra ya definida por el lenguaje que ms se aproxime al
comportamiento deseado del usuario.
Programar y experimentar el lanzamiento, propagacin y manejo de una excepcin definida
por el usuario.
Instituto Tecnolgico de Culiacn
Ing. En Sistemas Computacionales

6. Flujos y archivos.
6.1 Definicin de Archivos de texto y archivos
binarios.
6.2 Operaciones bsicas en archivos texto

Enero-Junio 2012

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

6. Flujos y archivos.
Competencia
Implementar aplicaciones orientadas a
objetos que creen y manipulen archivos
para guardar y recuperar informacin.

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

Flujos de IO
Un flujo (stream) es una secuencia
ordenada de bytes que puede ser usada
como fuente de una entrada o como
destino de una salida.
Los archivos, la memoria o los sockets
pueden proveer/recibir informacion
abriendo un fujo de datos.
Enero-Junio 2012

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

Enero-Junio 2012

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

Los algoritmos para leer o escribir


informacion siempre ejecutan una serie
de pasos.
Leer
Abrir un stream
while (hay mas informacion)
leer information
Cerrar el stream

Enero-Junio 2012

Escribir
Abrir un stream
while (hay mas informacion)
escribir information
Cerrar el stream

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

Paquete java.io
Streams de salida
Stream de
Caracteres

Streams de entrada

Streams de
Bytes

Streams
datos
Enero-Junio 2012

Streams
procesamiento

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

Streams de datos. Representa un stream


particular (fuente o destino), ejemplo un
archivo.
Streams de procesamiento. Ejecuta cierta
manipulacon de los datos (filtrado).
Stream de Caracteres. Manipula caracteres
de 16 bits (unicode).
Stream de Bytes. Manipula datos binarios
de 8 bits.

Enero-Junio 2012

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

Paquete java.io

Enero-Junio 2012

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

Stream de datos

Stream de Caracteres

Stream de procesamiento

Clases abstractas

Enero-Junio 2012

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

Stream de datos

Stream de Bytes

Enero-Junio 2012

Stream de procesamiento

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

Lectura y Escritura de Archivos


Un archivo se puede utilizar en un
programa definiendo un stream para el.
Los archivos de entrada proveen
informacion.
Los archivos de salida reciben
informacion.

Enero-Junio 2012

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

import java.io.*;

// usa stream de caracteres


public class CopiaArchivo{
public static void main (String [] args) throws IOException{
// define los archivos fisicos
File archivoEntrada = new File("entrada.txt");
File archivoSalida = new File("salida.txt");
// Define los flujos de datos usando los archivos fisicos
FileReader in = new FileReader(archivoEntrada);
FileWriter out = new FileWriter(archivoSalida);
int c;
while ((c=in.read()) != -1)
out.write(c);
// cierra los archivos
in.close();
out.close();
}
}
Enero-Junio 2012

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

import java.io.*;

// usa stream de bytes


public class CopiaBytes {
public static void main(String[] args) throws IOException {
// define los archivos fisicos
File inputFile = new File("entrada.txt");
File outputFile = new File("salida2.txt");
// abre los flujos de entrada y salida usando los archivos fisicos
FileInputStream in = new FileInputStream(inputFile);
FileOutputStream out = new FileOutputStream(outputFile);
int c;
// lee los datos del archivo de entrada y los escribe en el archivo de salida
while ((c = in.read()) != -1)
out.write(c);
// cierra los archivos
in.close();
out.close();
}
}
Enero-Junio 2012

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

Ejercicio
Modifica el programa anterior para
incluir un manejador de excepciones
que detecte cuando el archivo de
entrada no se encuentra.

Enero-Junio 2012

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

Lectura de Archivos de texto.


Los archivos de texto definen a cada
uno de los elementos que contienen
como una linea completa.
La clase BufferedReader contiene un
mtodo llamado readLine() que permite
leer una linea de caracteres en una sola
operacion, regresando como resultado
un String.
Enero-Junio 2012

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

Lectura de archivos de texto


FileReader representa un archivo de
entrada que contiene datos caracter.
La clase FileReader se deriva de la clase
InputStreamReader y hereda el mtodo
read para leer datos.
BufferedReader no representa una
fuente de datos, se usa para filtrar datos
de un stream.
Enero-Junio 2012

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

Ejemplo
Supongamos que tenemos un archivo
llamado inventario.txt el cual contiene
los siguientes datos en cada linea:
descripcion, cantidad y precio.
Zapatos 2 150.00
Pantalon 3 224.99
Vestido 1 367.50
Collar 5 79.99
Enero-Junio 2012

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

import java.io.*; import java.util.StringTokenizer;


public class Inventario {
public static void main(String[] args) {
Articulo [] inventario = new Articulo[100];
StringTokenizer tokenizer ;
String linea, desc, entrada = "inventario.txt";
int cant, contador =0;
float prec;
try{
FileReader file = new FileReader(entrada);
BufferedReader archivoEntrada = new BufferedReader(file);
linea = archivoEntrada.readLine();
while (linea != null){
tokenizer = new StringTokenizer(linea);
desc = tokenizer.nextToken();
try { cant = Integer.parseInt(tokenizer.nextToken());
prec = Float.parseFloat(tokenizer.nextToken());
inventario[contador++] = new Articulo(desc,cant,prec);
} catch(NumberFormatException formatoNumero){
System.out.println("Linea erronea, sera ignorada: \r "+linea);
}
linea = archivoEntrada.readLine();
}
archivoEntrada.close();
for (int i=0; i<contador; i++) System.out.println(inventario[i]);
}
catch (FileNotFoundException excepcion){
System.out.println("el archivo "+entrada+" no fue encontrado"); }
catch (IOException excepcion){ System.out.println(excepcion);
}
}
Enero-Junio 2012
Instituto Tecnolgico de Culiacn
}
Ing. En Sistemas Computacionales

catch (NumberFormatException exception) {

public class LeeArchivo {


System.out.println("ERROR en la linea " + line);
public static void main (String [] args){
}
infile.close();
int maxi, maxj, dato;
}
StringTokenizer tokenizer;
catch (FileNotFoundException exception) {
String line, name, file = "datosMatriz.txt";
System.out.println("Archivo no encontrado");
int i,j,gen,count = 0;
}
try {
catch (IOException exception) {
FileReader fr = new FileReader(file);
System.out.println(exception);
}
BufferedReader infile = new BufferedReader(fr);
}
line = infile.readLine();
}
tokenizer = new StringTokenizer(line);
try {
maxi= Integer.parseInt(tokenizer.nextToken());
maxj= Integer.parseInt(tokenizer.nextToken());
System.out.println("Renglones = "+maxi+" Columnas = "+maxj);
line = infile.readLine();
tokenizer = new StringTokenizer(line);
gen = Integer.parseInt(tokenizer.nextToken());
System.out.println("Generaciones = "+gen);
line = infile.readLine();
while (line != null) {
tokenizer = new StringTokenizer(line);
i= Integer.parseInt(tokenizer.nextToken());
j= Integer.parseInt(tokenizer.nextToken());
System.out.println("i = "+i+" j = "+j);
line = infile.readLine();
}
} Enero-Junio 2012
Instituto Tecnolgico de Culiacn
Ing. En Sistemas Computacionales

Enero-Junio 2012

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

Escritura de archivos de texto


La clase FileWriter representa un
archivo de texto de salida.
La clase PrintWriter contiene los
mtodos print y println.
La clase BufferedWriter puede usarse
para proveer algunas capacidades
extras.
Enero-Junio 2012

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

import java.io.*;
import cs1.Keyboard;
public class CreaArchivoArticulos {
public static void main (String [] args) {
String archivo = "articulos.txt";
try {
Articulos.txt
FileWriter fw = new FileWriter(archivo);
Zapatos 2 150.00
PrintWriter file = new PrintWriter(fw);
String d;
Pantalon 3 224.99
int c;
Vestido 1 367.50
float p;
for (int i=0; i<5; i++){
Collar 5 79.99
System.out.println("descripcion ");
d=Keyboard.readString();
System.out.println("cantidad ");
c= Keyboard.readInt();
System.out.println("Precio ");
p = Keyboard.readFloat();
file.println(d+" "+c+" "+p);
}
file.close();
System.out.println("El archivo "+archivo+" ha sido creado");
}
catch (IOException e){ System.out.println(e);
}
}
Enero-Junio 2012
Instituto Tecnolgico de Culiacn
}
Ing. En Sistemas Computacionales

Evaluacin
Para derecho de evaluacin
Asistencia: mnima 80%
Portafolio de evidencias 100%

Portafolio10%
Trabajo en equipo 0%
Examen 50%
Instituto Tecnolgico de Culiacn
Ing. En Sistemas Computacionales

Actividades de aprendizaje
Investigar en fuentes de informacin los conceptos y
metodologas para manipular archivos de texto y
binarios en un lenguaje de programacin orientado a
objetos.
Programar una clase que cree, consulte, modifique y
borre archivos de texto.
Programar una clase que cree, consulte, modifique y
borre archivos binarios.
Disear un caso de estudio que requiera el uso de
archivos para que sea resuelto por el alumno.
Instituto Tecnolgico de Culiacn
Ing. En Sistemas Computacionales

Fin del curso!

Buena suerte en el examen final!

Enero-Junio 2013

Instituto Tecnolgico de Culiacn


Ing. En Sistemas Computacionales

You might also like