Logo Studenta

Programação Orientada a Objetos

¡Este material tiene más páginas!

Vista previa del material en texto

Diapositiva 1 
 
Programación Orientada a
Objetos
Cátedra: Paradigmas de Programación
Universidad Tecnológica Nacional, Facultad Regional Mendoza - Dpto. Ing. en Sistemas de Información
 
 
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________ 
 
Diapositiva 2 
 
Caso: un ejemplo en C
struct Raza {
char *nmb;
};
struct Perro {
Raza *tipo;
float peso;
};
int main(void) {
Raza r;
Perro a;
r.nmb = (char *)malloc(8);
strcpy(r.nmb, "Bulldog");
a.tipo = &r;
a.peso = 34.5;
cout << a.tipo->nmb << “,” << 
a.peso << endl;
}
 
 
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________ 
 
Diapositiva 3 
 
� Clases 
� Son tipos compuestos (similar a struct)
� Atributos (variables)
� Métodos (procedimientos o funciones)
� Sirven “de plantilla” para crear objetos
� Pueden tener cero o más instancias (objetos)
� Objetos 
� Son instancias de clases
� Poseen los atributos y métodos definidos en la clase
� Ocupan espacio en memoria de datos (dinámica)
� Tienen comportamiento (implementado por métodos)
� Existen estereotipos (interface, control, entidad)
Clases y Objetos
Clase perro
instancias
 
 
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________ 
 
Diapositiva 4 
 
Caso: representación en Java
class Perro {
public final Raza tipo;
private float peso;
public Perro(Raza r) { tipo = r; }
public void setPeso(float p) { 
peso = p; 
}
public float getPeso() { 
return peso; 
}
}
class Raza {
public final String nmb;
public Raza(String s) { nmb = s; }
}
public class Programa {
public static void main(String []arg) {
Raza r = new Raza(“Bulldog");
Perro a = new Perro(r);
a.setPeso(34.5);
System.out.println( a.tipo.nmb
+ “,” + a.getPeso() );
}
}
acceso dinámico
sin punteros
restricciones de acceso
a miembros
 
 
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________ 
 
Diapositiva 5 
 
Conceptos básicos sobre POO
� Definición de clases
� Implementación de objetos
� Identidad de objetos vs. nombre
� Variables de instancia
� Métodos de instancia
� Calificadores de acceso
�public y private
� Atributos públicos deberían ser constantes
� Mensajes
� Estado de un objeto
Clase perro
instancias
Boby
Rufus
Picho
Variable1
Variable2
Método1
Método2
Método3
…
… O
b
je
to
 
 
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________ 
 
Diapositiva 6 
 
Relaciones entre clases y objetos
� de Asociación
�Cardinalidad, nombre y rol
�Estáticas vs. dinámicas
�Formas
� Asociación
� Agregación
� Composición
�Clases asociativas
� de Uso
� de Instanciación o Dependencia
n tiene
construye
Modelo: carga
Chasis:82928281
Motor: 19282828
título
RNA
venta
1 inscripto
1 tieneUn
1 formadoPor
1 parteDe
1 esDe
 
 
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________ 
 
Diapositiva 7 
 
Caso: Camiones
Titulo
prop : String
Titulo()
(from Legal )
Fabrica
nombre : String
Fabrica()
construye()
(from modelovehiculos)
Motor
numero : Integer
Motor()
setCamion()
(from Repuestos)
Rueda
marca : String
rodaje : int
Rueda()setRodaje()
getRodaje()
(from Repuestos)
RNA
ID : String = "Mendoza"
registrar()
mostrar()
(from Legal )
Chasis
numero : Integer
Chasis()
(from modelovehiculos)
Camion
marca : String
carga : int
prop : String
Camion()
setCarga()
setProp()
getCarga()
getProp()
setMotor()
registrar()
setRuedas()
(from modelovehiculos)
1
1
+esDe
1
-tieneUn
1
0..n
-tiene[]
0..n
0..n
-inscripto[]
0..n
construye
1
1
+parteDe
+formadoPor
1
1
Conceptos
�Packages
�Arreglos
�Iterador
�Calificador de acceso
�Métodos get()/set()
�Clases asociativas
�Instanciación
�Agregación
�Asociación
�Composición
 
 
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________ 
 
Diapositiva 8 
 
� de Herencia
�Superclase (clase base)
� Calificador de acceso: protected
� Clases abstractas
�Subclases (clases derivadas)
� Constructores: super() y this()
� Accesores: super y this
� Re-definición de métodos
� Polimorfismo
� Métodos abstractos
� Envío de mensajes y despachador de métodos
� Herencia (por generalización)
� Delegación de funcionalidades
Relaciones entre clases y objetos
Vehiculo
es un
instancias
instancias
 
 
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________ 
 
Diapositiva 9 
 
Caso: Vehículos
Conceptos
�Superclase
�Subclases
�Clase abstracta
�protected
�super() y this()
�super y this
�Re-definición 
�Polimorfismo
�Método abstracto
 
 
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________ 
 
Diapositiva 10 
 
Concepto de objeto
Reloj r = new Reloj();
r.ponerHora(“23: 45: 12”);
r.ponerFecha(“25/06/2012”);
Comportamientos
Poner hora
Poner fecha
hora
fecha
ponerHora
ponerFecha
Reloj
especificaciones de objetos (modelo de un auto, un tipo de seguro, …)
eventos (un accidente, un llamado, un vuelo, …)
interacciones entre objetos ( una compra, una venta, ...)
cosas tangibles (auto, avión, …)
roles (cliente, empleado, jefe, ...)
 
 
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________ 
 
Diapositiva 11 
 
class abstract U {
private int a;
protected float b;
public abstract void m1();
public void m2() {…}
}
class T extends U {
private int a;
private float c;
public void m1() {…}
public void m2() { super.m2(); }
}
class W {
public void m3() {
T obj = new T();
obj.m1();
obj.m2();
}
}
obj
código T: m2
código T: m1
código U : m2
a c
ptrTDM
ptrTDM
heapstack
ba
Despachador de métodos
 
 
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________ 
 
Diapositiva 12 
 
Semántica de…
� Calificación constante
�Métodos “inline”
�Atributos y parámetros
� Métodos set/get (accesor)
� Arreglos
�de tipos primitivos
�de objetos
� Operaciones con objetos
�Duplicación 
�Destrucción de objetos
Clases utilitarias
Object
protected Object clone()
boolean equals(Object obj)
protected void finalize()
Class getClass()
int hashCode()
...
System
static void exit(int)
static void gc()
public static final InputStream in
public static final PrintStream out
...
Class
String getName()
...
 
 
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
__________________________________________________________________________________________ 
 
Diapositiva 13 
 
Uso d packages
� Classpath
� Parte pública
� Parte privada
� Exportación e importación
� acceso a componentes
Main
A B
CR
L
� Packages
� Classpath
� Parte pública y privada
� Exportación e importación
� Acceso a componentes
 
 
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________ 
 
Diapositiva 14 
 
Gestión de errores
leerArchivo {
abrir el archivo;
determinar su tamaño;
asignar memoria;
leer archivo a memoria;
cerrar el archivo;
}
Qué pasa si…
• no se puede determinar la 
longitud del archivo
• no hay suficiente memoria libre
• falla la lectura
• no se puede cerrar el archivo
Leer datos de archivo 
y almacenarlos en heap
int leerArchivo {
inicializar codError = 0;
abrir el archivo;
if (archivoAbierto) {
determinar la longitud del archivo;
if (obtenerLongitudArchivo) {
asignar suficiente memoria;
if (reservarMemoria) {
leer el archivo a memoria;
if (errorLectura) codError = -1;
} else codError = -2;
} else codError = -3;
cerrar el archivo;
if (errorAlCerrar) codError = -4;
else codError = 1;
} else codError = -5;
return codError;
}
 
 
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________ 
 
Diapositiva 15 
 
Manejador de excepciones
int leerArchivo {
inicializar codError = 0;
try {
abrir el archivo;
determinar su tamaño;
asignar suficiente memoria;
leer el archivo a la memoria;
cerrar el archivo;
}
catch (errorAbrirArchivo e1) { codError = -5; }
catch (errorDeterminacionLongitud e2) { codError = -3; }
catch (errorResrevaMemoria e3) { codError = -2; }
catch (errorLectura e4) { codError = -1; }
catch (errorCerrarArchivo e5) {
if (errorAlCerrar) codError = -4;
else codError = 1;
}
} 
 
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________ 
 
Diapositiva 16 
 
POO en Java: Excepciones
try {
...
}
catch (clase1 x){
...
}
catch (clase2 y){
...
}
catch (clase3 z){
...
}
finally {
...
}
Bloque try
Bloque catch1
Bloque catch2
Bloque catchn
Bloque finally
 
 
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________ 
 
Diapositiva 17 
 
POO en Java: Excepciones
void métodoC()throws EE{
...
if (?)throw new EE();
...
}
......
Throwable
Error
ExceptionVirtualMachineError
IOException RuntimeException
EE
...
class EE extends Exception{
...
}
void métodoB(){
...
métodoC();
...
}
void métodoB(){
...
try { métodoC();}
catch (EE x){ ... }
...
}
void métodoB()throws EE{
...
métodoC();
...
}
void métodoA(){
...
try { métodoB();}
catch (EE x){ ... }
...
}
a
lt
e
rn
a
ti
v
a
s
 
 
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________ 
 
Diapositiva 18 
 
Caso: Excepciones ErrorVelocidadNegativa
objDondeOcurre()
ponerEnCero()
Package: errores
 
 
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________ 
 
Diapositiva 19 
 
POO en Java: componentes visuales
Gestor de eventos (event-driven)
Implica escribir el código 
para atender el evento
No secuencial
Dependiente de 
sucesos externos al 
programa
Evento
Señal de que algo ocurrió 
enviadaal programa 
Una alarma, paro de un 
motor, un click, …
Manejo de eventos
Handlers
uno por evento
implementan el 
comportamiento
Fuentes 
censores, teclado, 
mouse, el S.O…
Input controller
Apl1 Apl2 Apln
…
Gestores: GUI, Eventos
cola cola cola
Implementar una interface 
visual para el 
modelo Vehículos Fuentes de eventos
Cola de 
eventos
 
 
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________ 
 
Diapositiva 20 
 
Conceptos varios
� Métodos de clase
• Restricciones de acceso
� Objetos persistentes
• Calificador transient
� Herencia múltiple
• Interfaces
� Clases final
• Métodos final
� Contenedores
� Clase Class
� Envoltura de tipo (autoboxing)
• Clase Number y subclases
� Sobrecarga de métodos
� Variables de clase
• Inicializador static
 
 
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________ 
 
Diapositiva 21 
 
Clases parametrizadas
class Box <T> {
private T obj;
public void add(T obj){ this.obj = obj; }
public T get() { return this.obj; }
}
public class Ejemplo {
public static void main(String[] args) {
Box<String> p = new Box();
p.add(new String("Hola"));
String s = p.get();
System.out.println(s);
}
}
E elemento (colecciones Java)
K clave
N número
T tipo
S, U, etc. (otros tipos)
V valor
Especificación de clase 
genérica (parámetro)
No requiere ‘cast’
Sólo se pueden agregar 
objetos String
 
 
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________ 
 
Diapositiva 22 
 
� Clases que operan con cualquier tipo de dato, donde el tipo:
� No se indica hasta que se instancie la clase
� Es un parámetro de tipo formal
� No puede ser primitivo
� Principal utilidad en el uso de colecciones
� Se aplican reglas estáticas de verificación de tipos
� No es necesario usar “cast”
� Restricciones
� No se pueden crear instancias de parámetros de tipos genéricos
� Un miembro estático no puede usar parámetros de tipos genéricos 
declarados externamente
� Se pueden parametrizar los métodos estáticos
� No pueden heredar de Throwable
Generalidades: Clases parametrizadas
 
 
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________ 
 
Diapositiva 23 
 
Cualquier tipo T que herede de A y de B
public class Divisor<T extends A & B> { … }
Los tipos T1 y T2 heredan de Number
public class Sumador<T1 extends Number, T2 extends Number> {
public T1 imprimir(T2 objeto) { ... }
}
Método parametrizado
public <T extends Comparable> void imprimir(T objeto) { ... }
Creación de una instancia de tipo genérico
T otro = (T)obj.getClass().newInstance();
Uso de clases parametrizadas
 
 
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________ 
 
Diapositiva 24 
 
class Box <T extends Number> {
private T t;
public void add(T t) { this.t = t; }
public T get() { return t; }
public <U extends Comparable> void mostrar (U obj) {
System.out.println("T:"+obj.getClass().getName());
}
}
Box<Integer> obj = new Box();
obj.add(new Integer(10));
obj.mostrar(obj);
obj.add(new Float(23.56));
obj.mostrar(obj.toString());
Clases y métodos parametrizados
Error: Box no es subclase de Comparable
Object
Number
Float Integer …
Character
 
 
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
__________________________________________________________________________________________________________________________________________________________
_____________ 
 
Diapositiva 25 
 
Clases parametrizadas acotadas
� Acotadas
class Impresor <T extends Number> {
private T obj;
public Impresor(T obj) { this.obj = obj; }
public void setObjeto(T obj) { this.obj = obj;}
public T getObjeto() { return obj; }
public void imprimir() { 
System.out.println(obj.toString()); 
}
}
public class Ejemplo {
public static void main(String[] args) {
Impresor<String> cadena;
Impresor<Integer> entero = new Impresor(780);
entero.imprimir();
}
}
Impone restricción
T sólo puede ser de clases 
derivadas de Number
Error: String no es subclase 
de Number
 
 
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________ 
 
Diapositiva 26 
 
Métodos parametrizados
class Comparadora {
public <K, V> boolean compare(Autos<K, V> a, Autos<K, V> b){
return a.valor.equals(b.valor) && a.marca.equals(b.marca);
}
}
class Autos<K, V> {
public final K valor;
public final V marca;
public Autos(K v, V m) { valor = v; marca = m; }
}
…
Autos<Integer, String> p1, p2;
p1 = new Autos<Integer, String>(10000, "Fiat");
p2 = new Autos<Integer, String>(20000, "Ford");
boolean iguales = new Comparadora().compare(p1, p2);
Se asocia a K
Se asocia a V
 
 
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________ 
 
Diapositiva 27 
 
Parametrización con comodines
� <? extends xClase>
� Establece un límite superior
� cualquier clase que sea subclase xClase
� para la semántica «in» de datos en métodos
� <? super xClase>
� Establece un límite inferior
� cualquier clase que sea super de xClase
� para la semántica «out» de datos en métodos
Indicar las restricciones para los tipos con los que se puede 
parametrizar una clase
 
 
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________ 
 
Diapositiva 28 
 
Ejemplos de parametrización
<T extends Object & Comparable<? super T>>
objetos de una clase T que sea subclase de Object y que 
implemente Comparable para objetos cuya superclase sea T 
(incluído T)
static <T extends Comparable<? super T>> void sort(List<T> list)
Por ejemplo: List acepta objetos Estudiante que implementan 
Comparable<Persona> si Estudiante es subclase de Persona 
static <T extends Comparable<T>> void sort(List<T> list)
Por ejemplo: List acepta sólo objetos que implementan 
Comparable<Persona>
 
 
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________ 
 
Diapositiva 29 
 
Parametrización: uso de extends y super
class Aplica {
public void algo(D <? super B> x){...}
public void otro(){
algo(new D<A>());
algo(new D<B>());
algo(new D<C>());
}
}
class Aplica {
public void algo(D <? extends B> x){...}
public void otro(){
algo(new D<A>());
algo(new D<B>());
algo(new D<C>());
}
}
class A{
}
class B extends A{
}
class C extends B{
}
class D<T>{
}
 
 
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________ 
 
Diapositiva 30 
 
� Clase interna definida en un bloque de código
� Por ejemplo dentro de un método
� Sólo visibles y usables dentro del bloque
� No pueden
� Incluir un modificador de acceso
� Ser estáticas
� Utilidad
� Claridad de código, evita el exceso de clases pequeñas 
� Encapsulamiento y ocultamiento en paquetes
� Agrupamiento de clases relacionadas
� Proximidad entre la definición y el uso de las clases
� Aplicación
� Tratamiento de eventos
� Creación de clases de ayuda o adaptación
Clases anidadas: locales
 
 
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
__________________________________________________________________________________________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________ 
 
Diapositiva 31 
 
class VectorInverso extends Vector {
class Iterador implements Enumeration {
private VectorInverso contenedor;
public Iterador(VectorInverso v){ contenedor = v; }
public Object nextElement() { return contenedor.get(indice--); }
public boolean hasMoreElements() { return indice >= 0; }
}
private int indice;
public Enumeration elements() {
indice = elementCount - 1;
return new Iterador(this);
}
}
public class Main {
public static void main(String[] args) {
VectorInverso v = new VectorInverso();
for (int i = 0; i < 10; i++) v.addElement(new Long(i));
Enumeration e = v.elements();
while (e.hasMoreElements())
System.out.println(e.nextElement());
}
}
Clases anidadas
c
re
a
 o
b
je
to
It
e
ra
d
o
r
return new ListIterator(){
private int indice = 0;
public void add(Object o) {}
public boolean hasNext() {return true;}
public boolean hasPrevious() {return true;}
public Object next() { return indice == size() ? get(indice = 0) : get
public int nextIndex() {return indice == size() - 1 ? 0 : indice + 1;}
public Object previous() {return null;}
public int previousIndex() {return indice == 0 ? size() - 1 : indice -
public void remove() {}
public void set(Object o) {}
};
}
}
 
 
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________ 
 
Diapositiva 32 
 
� Clase interna definida como miembro (no static) de otra clase
� Pueden declararse como privadas o protegidas 
� Esto no impide su acceso desde la clase contenedora
� Cada instancia de una clase miembro se asocia internamente 
a una instancia de la clase contenedora
� Tiene acceso completo y directo a la clase externa 
� Incluidos miembros private
� No puede tener miembros estáticos
� No pueden tener nombres comunes con la clase externa
� No es posible crear un objeto de la clase interna sin tener un 
objeto de la clase contenedora
Clases miembro
 
 
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________ 
 
Diapositiva 33 
 
� Clase interna local sin nombre
� Se define e instancia en una sola operación
� Sólo puede existir una instancia
� Puede ser incluida en una expresión
� Utilidad 
� Adaptadores de clase (patrones)
� Añadir comportamiento a objetos que ya tienen nombre
� Escritura de pequeños “callbacks” encapsulados 
(enumeradores, iteradores, …)
Clases anónimas
 
 
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________ 
 
Diapositiva 34 
 
class VectorInverso extends Vector {
private int indice;
public Enumeration elements() {
indice = elementCount - 1;
return new Enumeration() {
public Object nextElement() { return elementData[indice--]; }
public boolean hasMoreElements() { return indice >= 0; }
};
}
}
public class MyVector {
public static void main(String args[ ]) {
VectorInverso v = new VectorInverso();
for (int i = 0; i < 10; i++) v.addElement(new Long(i));
Enumeration e = v.elements();
while (e.hasMoreElements()) 
System.out.println(e.nextElement());
}
}
Clases anónimas
 
 
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________ 
 
Diapositiva 35 
 
� Clases o interfaces estáticas anidadas dentro de otra clase
� Deben calificarse static
� Sólo se pueden anidar dentro de clases normales o de 
clases internas de alto nivel
� No es necesario un objeto de la clase externa para crear un 
objeto de la clase interna estática
� Modo de referenciarlas
� NombreClaseExterna.NombreClaseInterna
� Desde la clase estática interna sólo se pueden acceder a los 
miembros estáticos de la clase externa
� Al compilar el .class se genera
� NombreClaseExterna$NombreClaseInterna
Clases e interfaces de alto nivel
 
 
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
__________________________________________________________________________________________________________________________________________________________
_____________________________________________________________________________
_____________ 
 
Diapositiva 36 
 
Interfaces de alto nivel
class Pila<T> {
public T cbza() {
throw new IllegalStateException();
}
public Pila<? extends Number> cola() { 
throw new IllegalStateException();
}
public void sacar( Pila<T> list ) { 
throw new IllegalStateException();
}
public static <T> Pila<T> poner( Pila<? extends Number> list, T nuevaCbza ) {
return new ListBody<T>( nuevaCbza, list );
}
public String contenido( Pila<? extends Number> list ) {
return list.esVacia() ? "" : " > " + list.cbza() + contenido( list.cola() );
}
public boolean esVacia() { 
return true; 
}
private static class ListBody<T> extends Pila<T> {
...
}
}
Clases static
Refinamiento de métodos y 
comportamiento polimórfico
Parametrización de clases
Método finalize()
Anotaciones
 
 
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________ 
 
Diapositiva 37 
 
Interfaces de alto nivel
private static class ListBody<T> extends Pila<T> 
T cbza;
Pila<? extends Number> cola;
ListBody( T cab, Pila<? extends Number> col ) {
cbza = cab;
cola = col;
}
@Override public void sacar( Pila<T> list ) {
if (!list.esVacia() && 
!list.cola().esVacia()){
cbza = (T)list.cola().cbza();
cola = list.cola().cola();
}
else try { this.finalize(); }
catch (Throwable e) {}
}
@Override public T cbza() { 
return cbza; 
}
@Override public Pila<? extends Number> cola(){ 
return cola; 
}
@Override public boolean esVacia() { 
return false; 
}
}
public class claseStatic {
public static void main(String[] a){
Pila<Integer> obj;
obj = new Pila<Integer>();
int v[] = {34,67,89,12,45,67,23};
obj.sacar(obj);
for (int e : v) 
obj = Pila.poner(obj, e);
System.out.println(
obj.contenido(obj)
);
obj.sacar(obj);
System.out.println(
obj.contenido(obj)
);
}
}
 
 
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________ 
 
Diapositiva 38 
 
� Referencia al objeto de la clase contenedora
� Creación de un objeto de una clase interna
� Herencia de una clase interna: constructor de la clase 
Sintaxis de this, new y super
class A {
class B {
private A obj;
public void metodo1() {
obj = A.this;
}
}
}
class A {
class B {
}
}
class C {
private A.B obj;
public void metodo1() {
obj = (new A()).new B();
} 
}
class A {
class B {
}
}
class C extends A.B {
public C() {
(new A()).super();
}
}
 
 
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________ 
 
Diapositiva 39 
 
Threads
Creado
Muerto
Dormido InterrumpidoEsperando Bloqueado
listo
Ejecución
wait
interrupt
interrupted 
sleep
solicitud
I/O
completó
I/O
start
notify
expiró intervalo
d
e
s
p
a
c
h
a
d
o
d
e
s
a
lo
ja
d
o
Proceso A
Hilo
Memoria
Proceso B
Hilo
Memoria
…
Proceso C
Hilo1
Memoria
Hilon
…
Threads
Programación concurrente
Clase Thread
interface Runnable
estados de un thread
prioridades
métodos syncronized
 
 
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________ 
 
Diapositiva 40 
 
Visiones del Paradigma Orientado a Objetos
� Creación de paradigma nuevo
� Simulación del mundo real
� Manejo de la complejidad
� Clases y objetos
� Métodos y mensajes
� Herencia
� Polimorfismo
� Evolución de paradigma existente
� Aumento tamaño de programas => aumenta complejidad
� La complejidad = interconexión de partes
� Manejo de la complejidad
� Procedimientos
� Módulos
� Tipos de datos abstractos + herencia
 
 
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________ 
 
Diapositiva 41 
 
Caso: Control
UnidadDeControl
temperatura : int
humedad : int
resultados : String
calcAjuste()
run()
estado()
setParametros()
crearLocal()
ConsolaDeCtrl
corriendo : boolean = false
ConsolaDeCtrl()
initComponents()
clickFijar()
clickMostrar()clickCrear()
cambioTemp()
cambioHmdad()
main()
+udadCtrl
11
Acondicionador
consumo : int = 1000
regular()
getConsumo()
(from Local)
Contenedor
listIterator()
1
+ambientes
1
ErrorHardware
obj : Local.Censor
tipo : char
ErrorHardware()
lecturaNula()
(from Local)
Local
volumen : int
Local()
1
+equipoAA
1
1..n1..n
Censor
tempActual : int
hdadActual : int
inputTemperatura()
inputHumedad()
getMedicion()
run()
(from Local)
1
-obj
1
1
+censor
1
�Threads
�Métodos nativos
�Contenedores
�Iteradores
�Excepciones
 
 
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________ 
 
Diapositiva 42 
 
Paradigma Orientado a Objetos
� Necesidades
� Abordar problemas más complejos
� Reducir la complejidad de mantenimiento
� Análisis O.O.
� Modelo conceptual
� Requerimientos del sistema 
� Diseño O.O.
� Diseño lógico
� Diseño físico
� Programación O.O
� Codificación
� Prueba 
Modelos, casos de uso, etc.
Diagramas, patrones, etc.
Java, C#, etc.
 
 
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________ 
 
Diapositiva 43 
 
Modelar la realidad
Secretaria
Fábrica
Gerente
Auto
depende
empleado
produce
empleado
Persona
-sueldo
Gerente
+decidir()
Secretaria
-horario
+redactar()
Fábrica
-capacidad
+producir()
Auto
-longitud
+acelerar()
depende
empleado
produce
abstract class Persona {
private Fabrica trabaja
protected int sueldo
}
class gerente extends Persona {
public void decidir()
}
class secretaria extends Persona {
private Gerente depende
private int horario
public void redactar()
}
class Fabrica {
private int capacidad
public Auto construir()
}
class auto {
private int longitud
public void acelerar()
}
Los “objetos” del mundo 
real tienen características,
comportamientos y relaciones
entre ellos
El modelado O.O. “mapea” 
esa realidad, lo más fielmente 
posible, a fin de reducir “la
distancia“ entre ambas
El paradigma de P.O.O. 
facilita el hacer una 
implementación “más 
cercana” a la situación real
sueldo
decide
sueldo
horario
redacta memos
capacidad
construye
longitud
se mueve
 
 
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________ 
 
Diapositiva 44 
 
Características de la POO
� Abstracción
�de conceptos del mundo real
� Naturalidad
�en la representación del modelo del mundo real
� Encapsulamiento
� implementación oculta accediendo sólo a la interface
� Modularidad 
�subdivisión de la estructura de la aplicación
� Independencia funcional
�modificaciones en el código no impactan en el resto
� Reusabilidad del código
�ampliar comportamientos sin modificar lo existente
 
 
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________

Continuar navegando

Contenido elegido para ti

128 pag.
POOJava_cursoIndra

User badge image

zulmaibalo512

14 pag.
P07-POO-Herencia

User badge image

Aprenda aquí

23 pag.
Semana-3---Clases-en-java

UBAM

User badge image

Contenidos Muy Locos