Professional Documents
Culture Documents
Orientada a Objetos
(con Java)
Dra. Maria Lucia Barrn Estrada
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
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.
Diagramas de UML
http://en.wikipedia.org/wiki/Unified_Modeling_Language
Nombre
Atributos
Mtodos
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
Ejemplo de generalizacin
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
1..n
Los
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
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
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
Enero-Junio 2012
Ejemplo
punto3
punto2
punto1
Miembros de
instancia
mtodos de
instancia
Enero-Junio 2012
x=2
y=1
void setx(int _x)
String toString ()
x=5
y=5
void setx(int _x)
String toString ()
Punto
Miembros
de clase
totalPuntos = 0
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
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;
}
}
Enero-Junio 2012
class AnIntegerNamedX {
int x; int x;
static
public static int x() {
return x;
}
public static void setX(int newX) {
x = newX;
}
}
// ERROR de compilacion
Enero-Junio 2012
Ejemplos
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
Cuerpo
{ estatutos }
Ejemplos
public boolean isEmpty() {
if (items.size() == 0)
return true;
else
return false;
}
Enero-Junio 2012
objeto.mtodo()
objeto.mtodo(parmetros)
Enero-Junio 2012
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
x = newX;
Enero-Junio 2012
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
blue
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;
}
}
paquete
interface
clase
mtodos
clase atributos
interface
atributos
mtodos
mtodos
Variables
locales
mtodos
Variables
locales
Enero-Junio 2012
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);
}
Ejemplo 2
Fruta () {
this(sin nombre,10);
}
Fruta (String n, int g ){
nombre=n;
gramos = g
}
Cuantos constructores
tiene la clase Fruta?
Que hace el constructor
que no tiene parmetros?
Como se pueden crear
ejemplares de Fruta?
Destructores
Disponibles en lenguajes o entornos en los que el responsable
de devolver la memoria es el programador
Enero-Junio 2012
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
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
Enero-Junio 2012
1.
2.
3.
4.
5.
6.
7.
Alumnos
Profesores
Tecnologicos
Rectangulos
Proveedores
Mascotas
Libros
Enero-Junio 2012
encabezado de los
mtodos, no su
implementacion.
Enero-Junio 2012
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
Enero-Junio 2012
Conversion de tipos
Se pueden sumar un dato entero (int) y
un real (float)?
5 + 3.14
Enero-Junio 2012
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
Enero-Junio 2012
A
short, int, long, float, double
int, long, float, double
int, long, float, double
long, float, double
float, double
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
Enero-Junio 2012
Universal
Paramtrico
Inclusin (subtipos)
Enero-Junio 2012
Enero-Junio 2012
Salida
Thread[Thread-4,5,main]
Java Mania
abc
4
-9223372036854775808
3.40282e+38
3.14159
true
Enero-Junio 2012
Operadores sobrecargados
Operator
Uso
Descripcion
+
*
/
op1 + op2
Suma op1 y
op1 - op2
op1 * op2
Multiplica op1 y
op1 / op2
Divide op1 y
Enero-Junio 2012
op2
op2
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
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
Evaluacin
Para derecho de evaluacin
Asistencia: mnima 80%
Portafolio de evidencias 100%
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
3. Herencia.
Competencia
Implementar la herencia en clases
derivadas para reutilizar los miembros
de una clase base.
Que es herencia?
Herencia*. Derecho a heredar.
Heredar*. Recibir los bienes, derechos
y acciones de una persona.
Herencia
Reutilizacion de software
Organizacion jerarquica
Superclase (clase padre)
Subclase (clase derivada)
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 Mixin
Crea nuevas clases mezclando una clase con otra clase especial
Enero-Junio 2012
ColorPoint
Enero-Junio 2012
D3Point
Point
Color
La herencia Multiple de
Implementacion puede generar el
Problema Diamante
ColorPoint
Enero-Junio 2012
cdigo en C++
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
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
Enero-Junio 2012
package java.awt;
public class Window .{
}
}
Ejemplo
(superclase de WarningWindow)
Clase base
Clase derivada
(subclase de Window)
Enero-Junio 2012
Ejemplo
Clase base
Clases derivadas
Enero-Junio 2012
Ejemplo
Persona
Alumno
Profesor
Enero-Junio 2012
Secretaria
Herbivoro
Carnivoro
Domestico
Animal
Reptil
Enero-Junio 2012
Ave
Mamifero
Salvaje
Corral
}
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+")";
}
}
String nombre;
Calendar fechaNacimiento;
public Persona(String n){
nombre = n;
// atributos
// mtodos nuevos
// mtodos sobreescritos
}
Enero-Junio 2012
Enero-Junio 2012
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
}
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;
}
}
Enero-Junio 2012
Enero-Junio 2012
Enero-Junio 2012
Public
Private
Protected
Package
Enero-Junio 2012
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
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
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
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
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
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;
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;
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
subclass
package
private
protected
public
package
Enero-Junio 2012
world
Enero-Junio 2012
Enero-Junio 2012
3.9 Aplicaciones.
Definir una clase base
Definir una subclase
Constructores
Llame a super
No llame a super
Sobreescritura
Sobrecarga
Enero-Junio 2012
Evaluacin
Para derecho de evaluacin
Asistencia: mnima 80%
Portafolio de evidencias 100%
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.
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
4. Polimorfismo y reutilizacin.
Competencia
Implementar interfaces y clases
polimrficas.
Categorias de polimorfismo
Ad hoc
Coercin
Sobrecarga
Ejemplos
( (Hourly) empleado).getPago();
stack = new Vector(10);
Universal
Subtipos
empleado.toString();
Paramtrico
Enero-Junio 2012
Ejemplo de
polimorfismo
// sobrecarga de constructores
// casting
// subtipo/inclusion
}
}
Enero-Junio 2012
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
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
Enero-Junio 2012
Enero-Junio 2012
Enero-Junio 2012
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
Ejemplo equals
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
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
}
public class Button extends Component {
Ejemplo
Es posible crear
instancias de las clases
Button o ScrollBar pero
NO de Component.
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
Bloque
extends ListaDeInterfaces
{
//constantes
//mtodos
}
Enero-Junio 2012
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
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
Enero-Junio 2012
Enero-Junio 2012
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
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
interface
mtodos
Subpaquete
interface
clase
mtodos
atributos
mtodos
Variables
locales
Enero-Junio 2012
Ejemplo
Empleado
Recibos
Servicios
EmpleadoHora
Reportes
EdoFinanciero
EmpleadoBase
Condomino
Gastos
Nomina
ABCC
Compras
etc
ABCC
empleados
condominos
sac
Enero-Junio 2012
finanzas
Empleado
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
Ejemplos
//uso del nombre completo de la clase (sin import)
sac.empleados.EmpleadoBase empleadob = new sac.empleados.EmpleadoBase ();
Enero-Junio 2012
Ordenar un arreglo
Intercambiar variables
Procesar una lista de datos
Colecciones (Pilas, Colas, Arboles, etc.)
Enero-Junio 2012
Ejemplo
interface List<A> {
void add(A x);
Iterator<A> iterator();
}
interface Iterator<A> {
A next();
boolean hasNext();
}
Enero-Junio 2012
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
Enero-Junio 2012
Enero-Junio 2012
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
5. Excepciones.
Competencia
Identificar, manejar, gestionar y crear
las condiciones de error que
interrumpan el flujo normal de ejecucin
de un programa.
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
mtodo en ejecucin
ERROR!!!
Exception object
Encontro?
si
Busca un manejador
5
De excepciones
Enero-Junio 2012
Termina la
no ejecucin
del
programa
Pasa la
excepcion al
manejador
Object
Error
Exception
ArithmeticException
VirtualMachineError
AWTError
Etc.
RunTimeException
NullPointerException
IllegalAccessException
IndexOutOfBoundsE
ClassNotFoundException
Etc.
Enero-Junio 2012
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.
Enero-Junio 2012
5.1.3 Propagacin.
Enero-Junio 2012
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
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
// 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)
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
}
Enero-Junio 2012
class
class
class
class
class
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
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
Persona persona;
String p = persona.getNombre();
y = (Prueba)x;
int i = j / i;
a[i] = x;
Enero-Junio 2012
Enero-Junio 2012
try {
int respuesta = CalcRespuesta();
resp = String.valueOf(respuesta);
}
catch (RangoNumericoException e) {
resp =e.getMessage();
}
.
Enero-Junio 2012
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;
}
}
call method2;
}
method2 {
Solo method1
esta interesado en
procesar un error.
call method3;
}
method3 {
}
Enero-Junio 2012
call readFile;
// 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;
call method3;
call readFile;
proceed;
Enero-Junio 2012
}
Enero-Junio 2012
Enero-Junio 2012
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
6. Flujos y archivos.
Competencia
Implementar aplicaciones orientadas a
objetos que creen y manipulen archivos
para guardar y recuperar informacin.
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
Enero-Junio 2012
Enero-Junio 2012
Escribir
Abrir un stream
while (hay mas informacion)
escribir information
Cerrar el stream
Paquete java.io
Streams de salida
Stream de
Caracteres
Streams de entrada
Streams de
Bytes
Streams
datos
Enero-Junio 2012
Streams
procesamiento
Enero-Junio 2012
Paquete java.io
Enero-Junio 2012
Stream de datos
Stream de Caracteres
Stream de procesamiento
Clases abstractas
Enero-Junio 2012
Stream de datos
Stream de Bytes
Enero-Junio 2012
Stream de procesamiento
Enero-Junio 2012
import java.io.*;
import java.io.*;
Ejercicio
Modifica el programa anterior para
incluir un manejador de excepciones
que detecte cuando el archivo de
entrada no se encuentra.
Enero-Junio 2012
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
Enero-Junio 2012
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
Enero-Junio 2013