Escolar Documentos
Profissional Documentos
Cultura Documentos
Jorge Valencia
Departamento de Informatica
Universidad Tecnica Federico Santa Mara
Agenda
Introduccion a TDAs y OO
Orientacion a Objetos
Operadores
Clases y objetos
Excepciones
Streams y archivos
Agenda
Introduccion a TDAs y OO
Orientacion a Objetos
Operadores
Clases y objetos
Excepciones
Streams y archivos
Problemas de desarrollo
Ideas:
I Organizar el programa en grupos de subprogramas y
datos, logicamente relacionados, denominados modulos.
I Agrupar en subprogramas que puedan ser compilados de
forma independiente, sin necesidad de recompilar todo el
sistema.s
Modularidad y Reutilizacion de Software
Encapsulacion
Agrupar un conjunto de subprogramas junto a los datos que
ellos manipulan. Esto permite resolver los dos problemas
presentados.
Ventajas:
I Mayor modularidad
I Facilita la mantencion
I Permite la reutilizacion
I Ocultamiento de la informacion
I Enfasis en la interfaz abstrae de la implementacion
I Permite la reutilizacion
Tipos de Datos Abstractos
Ocultamiento de la informacion
Mediante control de acceso, detalles innecesarios de la
implementacion de un TDA se ocultan a aquellas unidades
fuera de la encapsulacion.
Un cliente es una unidad de programa que hace uso de una
instancia de un TDA.
Ejemplo
import j a v a . u t i l . L i n k e d L i s t ;
for ( Object o : l i s t a )
System . o u t . p r i n t l n ( o . t o S t r i n g ( ) ) ;
System . o u t . p r i n t l n ( l i s t a . s i z e ( ) ) ;
}
}
Problemas de Reuso
Introduccion a TDAs y OO
Orientacion a Objetos
Operadores
Clases y objetos
Excepciones
Streams y archivos
Vision Orientada a Objetos
Lenguajes OO puros
Realmente consideran que todo es un objeto. Ejemplos:
Smalltalk, Eiffel, Ruby.
Lenguajes OO no puros
Disenados para programacion OO, pero mantienen algunas
caractersticas de otros paradigmas. Ejemplos: Java mantiene
tipos de datos primitivos (i.e. no-objetos); Python tiene
elementos de la programacion funcional y la programacion
orientada a aspectos.
Lenguajes extendidos a OO
Historicamente han seguido otro paradigma pero se han
extendido para soportar caractersticas de la OO. Ejemplos:
C++,Fortran 2003, Perl.
Soporte para Programacion OO
Herencia
Puede ser simple o multiple.
Polimorfismo
Con especie particular de ligado de metodos a su
implementacion (clases y metodos virtuales en C++, interfaces
en Java).
Objetos
import j a v a . u t i l . L i n k e d L i s t ;
for ( Object o : l i s t a )
System . o u t . p r i n t l n ( o . t o S t r i n g ( ) ) ;
System . o u t . p r i n t l n ( l i s t a . s i z e ( ) ) ;
}
}
Clases
I Introducidas en SIMULA 67
I Una clase representa un conjunto de objetos con
caractersticas comunes
I Se puede interpretar como una plantilla de objetos
I Un objeto es una instancia de una clase
I Una clase puede tener variables de clase (o campos de
clase) como tambien metodos de clase; estos son
comunes para todos los objetos de la misma clase
Clases vs. Objetos
# include c l a s e s . h
double complex : : g e t R e a l P a r t ( )
{
return r e a l ;
}
double complex : : g e t I m a g i n a r y P a r t ( )
{
return imaginary ;
}
Clases: ejemplo en C++
using namespace s t d ;
i n t main ( ) {
complex com ( 1 . 3 , 2 . 0 ) ;
public class L i s t a E n l a z a d a {
p r i v a t e i n t dato , tam ;
private ListaEnlazada sgte ;
public L i s t a E n l a z a d a ( i n t dato ) {
t h i s . dato=dato ;
s g t e = n u l l ; tam =1;
}
public class E j e m p l o L i s t a E n l a z a d a {
public s t a t i c void main ( S t r i n g [ ] args ) {
L i s t a E n l a z a d a l i s t a =new L i s t a E n l a z a d a ( 6 ) ;
l i s t a . add ( 5 ) ; l i s t a . add ( 4 ) ; l i s t a . add ( 3 ) ;
l i s t a . add ( 2 ) ; l i s t a . add ( 1 ) ; l i s t a . add ( 0 ) ;
public S t r i n g getRut ( ) {
return r u t ;
}
public S t r i n g getNombre ( ) {
r e t u r n nombre ;
}
public S t r i n g t o S t r i n g ( ) {
r e t u r n nombre+ ( + r u t + ) ;
Jerarqua de Herencia: ejemplo en Java
(Estudiante.java)
public E s t u d i a n t e ( S t r i n g r u t , S t r i n g r o l ) {
super ( r u t , Jorge ) ;
this . r o l = r o l ;
}
public S t r i n g g e t R o l ( ) {
return r o l ;
}
}
Jerarqua de Herencia: ejemplo en Java
(EjemploHerencia.java)
System . o u t . p r i n t l n ( p r o f e s o r . getRut ( ) ) ;
System . o u t . p r i n t l n ( e s t u d i a n t e . getRut ( ) +
<> + e s t u d i a n t e . g e t R o l ( ) ) ;
/ / profesor . getRol ( ) / E r r o r /
/ Se puede? /
Persona x = new E s t u d i a n t e ( 14.567.8923 ,
23915057 ) ;
System . o u t . p r i n t l n ( x . getRut ( ) ) ;
System . o u t . p r i n t l n ( La persona + x ) ;
/ / System . o u t . p r i n t l n ( x . g e t R o l ( ) ) ; / E r r o r /
}
}
Herencia: Relaciones entre Clases
I Colision de nombres
I Perdida de eficiencia dada su complejidad (sobretodo en
el ligado de metodos)
I No es claro que su uso mejore el diseno y la facilidad en la
mantencion de sistemas, teniendo en cuenta el aumento
en la complejidad de la organizacion de la jerarqua
Polimorfismo
using namespace s t d ;
class f i g u r a {
public :
v i r t u a l double getArea ( ) = 0 ;
v i r t u a l double g e t P e r i m e t r o ( ) = 0 ;
};
Clases y Metodos Virtuales: ejemplo en C++
(cuadrado)
using namespace s t d ;
public :
cuadrado ( double l ) { l a d o = l ; }
double getArea ( ) { r e t u r n l a d o l a d o ; }
double g e t P e r i m e t r o ( ) { r e t u r n 4 . 0 l a d o ; }
};
Clases y Metodos Virtuales: ejemplo en C++
(circulo)
class c i r c u l o : public f i g u r a {
private :
double r a d i o ;
s t a t i c const double p i = 3.14159265358979323846;
public :
c i r c u l o ( double r ) { r a d i o = r ; }
double getArea ( ) { r e t u r n p i r a d i o r a d i o ; }
double g e t P e r i m e t r o ( ) { r e t u r n 2 p i r a d i o ; }
};
Clases y Metodos Virtuales: ejemplo en C++
(uso figuras.cpp)
# include <iostream>
# include figura
# include cuadrado
# include circulo
using namespace s t d ;
i n t main ( )
{
figura fig [2];
f i g [ 0 ] = new cuadrado ( 2 . 3 ) ; f i g [ 1 ] = new c i r c u l o ( 3 . 0 ) ;
f o r ( i n t i = 0 ; i < 2 ; i ++)
c o u t << f i g [ i ]>getArea ( ) <<
<< f i g [ i ]>g e t P e r i m e t r o ( ) << e n d l ;
return 0;
}
Interfaces
public i n t e r f a c e E j e c u t a b l e {
public void e j e c u t a r ( ) ;
}
Interfaces: ejemplo en Java (Tarea.java)
private int n ;
p r i v a t e S t r i n g mensaje ;
public void e j e c u t a r ( ) {
f o r ( i n t i =0; i <n ; i ++)
System . o u t . p r i n t l n ( mensaje ) ;
}
}
Interfaces: ventajas
Introduccion a TDAs y OO
Orientacion a Objetos
Operadores
Clases y objetos
Excepciones
Streams y archivos
Historia
Leguaje de Programacion
Especificado por Sun Microsystems, orientado a objetos, con
sintaxis similar a la de C++.
Plataforma
Incluye a la Java Virtual Machine y la especificacion de una
extensa API.
Tres sabores...
Se distribuye, segun la necesidad, en al menos tres ediciones:
I JSE: Java Standard Edition
I JME: Java Micro Edition
I JEE: Java Enterprise Edition
Caractersticas
I Significa aplicacioncita.
I Su uso normal es a traves de la Web.
I Difiere de un programa normal en su modelo de ejecucion.
I El browser es el encargado de iniciar una maquina virtual
que no correra un metodo main, sino que instanciara la
clase especificada y la dibujara con ayuda de la API AWT.
Applets: modelo de ejecucion
Applets: ejemplo
import j a v a . u t i l . ;
import j a v a . s q l . ;
/
l a c l a s e HolaMundo implementa una a p p l e t que
simplemente d e s p l i e g a Hola Mundo ! .
/
public class HolaMundoApplet extends j a v a . a p p l e t . A p p l e t
public void p a i n t ( j a v a . awt . Graphics g ) {
j a v a . u t i l . Date fecha ;
g . d r a w S t r i n g ( Hola Curso Dormido ! , 50 ,
}
}
Applets: ejemplo
<HTML>
<HEAD>
<TITLE>Un Programa Simple con A p p l e t< / TITLE>
< /HEAD>
<BODY>
Aqui v i e n e l a s a l i d a d e l programa :
<APPLET CODE= HolaMundoApplet . c l a s s
WIDTH=150 HEIGHT=25>
< / APPLET>
< /BODY>
< /HTML>
Nombres
Introduccion a TDAs y OO
Orientacion a Objetos
Operadores
Clases y objetos
Excepciones
Streams y archivos
Datos primitivos
Introduccion a TDAs y OO
Orientacion a Objetos
Operadores
Clases y objetos
Excepciones
Streams y archivos
Precedencia y asociatividad
Introduccion a TDAs y OO
Orientacion a Objetos
Operadores
Clases y objetos
Excepciones
Streams y archivos
Conceptos generales
public
Por omision una clase solo es accesible por clases del mismo
paquete, salvo que sea declarada publica
abstract
La clase no puede ser instanciada
final
La clase no puede ser derivada
Atributos
static {
i n s t a n c i a =new U n i c a I n s t a n c i a ( ) ;
}
public U n i c a I n s t a n c i a ( ) {}
public s t a t i c U n i c a I n s t a n c i a g e t I n s t a n c i a ( ) {
return i n s t a n c i a ;
}
}
Metodo finalize
public S t r i n g getRut ( ) {
return r u t ;
}
public S t r i n g getNombre ( ) {
r e t u r n nombre ;
}
public S t r i n g t o S t r i n g ( ) {
r e t u r n nombre+ ( + r u t + ) ;
}
}
Metodo toString
import java . u t i l . ;
Introduccion a TDAs y OO
Orientacion a Objetos
Operadores
Clases y objetos
Excepciones
Streams y archivos
Arreglos
class E j e m p l o A r r e g l o s {
public s t a t i c void main ( S t r i n g [ ] args ) {
i n t i a [ ] [ ] = { {1 , 2} , n u l l };
System . o u t . p r i n t l n ( i a . g e t C l a s s ( ) . getName ( ) ) ;
System . o u t . p r i n t l n ( i a [ 0 ] . g e t C l a s s ( ) . getName ( ) ) ;
System . o u t . p r i n t l n ( ) ;
try {
f o r ( i n t [ ] ea : i a )
f o r ( i n t e : ea )
System . o u t . p r i n t l n ( e ) ;
} catch ( E x c e p t i o n e ) {
System . e r r . p r i n t l n ( Ups ! +e ) ;
}
System . o u t . p r i n t l n ( i a [ 1 0 ] ) ;
}
}
Strings
public class E j e m p l o S t r i n g s {
public s t a t i c void main ( S t r i n g [ ] args ) {
String i n v e r t i r = lenguajes ;
i f ( args . l e n g t h > 0 )
i n v e r t i r =args [ 0 ] ;
f o r ( i n t i = ( l a r g o 1 ) ; i >= 0 ; i )
d e s t i n o . append ( i n v e r t i r . c h a r A t ( i ) ) ;
System . o u t . p r i n t l n ( d e s t i n o ) ;
}
}
Numeros
Introduccion a TDAs y OO
Orientacion a Objetos
Operadores
Clases y objetos
Excepciones
Streams y archivos
Motivacion
...
VALOR DEVUELTO
Cuando acaban bien, fopen, fdopen y freopen
devuelven un puntero a FILE. Cuando no,
devuelven NULL y la variable global errno
contiene un valor que indica el error.
ERRORES
EINVAL El modo pasado a fopen, fdopen, o a
freopen no era valido.
...
Tratamiento de errores: ejemplo en Java
import j a v a . i o . ;
try {
BufferedReader a r c h i v o = new BufferedReader (
new F i l e R e ad e r ( EjemploExp . j a v a ) ) ;
f o r ( S t r i n g s= a r c h i v o . r e a d L i n e ( ) ; s ! = n u l l ; s= a r c h i v o . r e a d L i n e ( ) )
System . o u t . p r i n t l n ( s ) ;
} catch ( EOFException e ) {
System . o u t . p r i n t l n ( F i n d e l a r c h i v o ) ;
} catch ( Fil eNo tFo und Exc ept ion e ) {
System . e r r . p r i n t l n ( E l a r c h i v o no e x i s t e ) ;
} catch ( IOException e ) {
System . e r r . p r i n t l n ( E r r o r de E / S ) ;
}
}
}
Anidamiento de excepciones: ejemplo
void metodo1 ( ) {
try {
metodo2 ( ) ;
} catch ( E x c e p t i o n e ) {
System . e r r . p r i n t l n ( Ups ! O c u r r i o e l s i g u i e n t e e r r o r : + e ) ;
}
}
i f ( x>1)
throw new I l l e g a l A r g u m e n t E x c e p t i o n (
E l argumento debe s e r menor a uno . ) ;
Tratamiento de excepciones: capturar
BufferedReader a r c h i v o ;
try {
a r c h i v o =new B u f f e r e d r e a d e r (new F i l e R ea d e r ( m i a r c h i v o ) ;
...
} catch ( IOException e ) {
System . e r r . p r i n t l n ( E r r o r de E / S con e l a r c h i v o : + e ) ;
} catch ( E x c e p t i o n e ) {
System . e r r . p r i n t l n ( Se e n c o n t r o un e r r o r desconocido : + e ) ;
} finally {
i f ( archivo != null )
archivo . close ( ) ;
}
Agenda
Introduccion a TDAs y OO
Orientacion a Objetos
Operadores
Clases y objetos
Excepciones
Streams y archivos
Streams