Temas Selectos de Java
Oscar Ch´
avez
Arreglos de tipos de datos primitivos
Declaraci´
on
de un arreglo de enteros:
int a[];
Creaci´
on
de un arreglo de enteros:
a = new int[10];
En un s´
olo paso:
int a[] = new int[10];
¡Un arreglo s´
olo es un objeto!
Arreglos de tipos de datos primitivos
Declaraci´
on
de un arreglo de enteros:
int a[];
Creaci´
on
de un arreglo de enteros:
a = new int[10];
En un s´
olo paso:
int a[] = new int[10];
¡Un arreglo s´
olo es un objeto!
Arreglos de tipos de datos primitivos
Declaraci´
on
de un arreglo de enteros:
int a[];
Creaci´
on
de un arreglo de enteros:
a = new int[10];
En un s´
olo paso:
int a[] = new int[10];
¡Un arreglo s´
olo es un objeto!
Arreglos de tipos de datos primitivos
Declaraci´
on
de un arreglo de enteros:
int a[];
Creaci´
on
de un arreglo de enteros:
a = new int[10];
En un s´
olo paso:
int a[] = new int[10];
¡Un arreglo s´
olo es un objeto!
Arreglos de tipos de datos primitivos
Declaraci´
on
de un arreglo de enteros:
int a[];
Creaci´
on
de un arreglo de enteros:
a = new int[10];
En un s´
olo paso:
int a[] = new int[10];
¡Un arreglo s´
olo es un objeto!
Arreglos de objetos
Arreglo de objetos:
Calculadora []x = new Calculadora[10];
¡Un arreglo s´
olo es un objeto!
Crear los objetos de tipo
Calculadora
x[0] = new Calculadora();
x[1] = new Calculadora();
..
.
Arreglos de objetos
Arreglo de objetos:
Calculadora []x = new Calculadora[10];
¡Un arreglo s´
olo es un objeto!
Crear los objetos de tipo
Calculadora
x[0] = new Calculadora();
x[1] = new Calculadora();
..
.
Arreglos de objetos
Arreglo de objetos:
Calculadora []x = new Calculadora[10];
¡Un arreglo s´
olo es un objeto!
Crear los objetos de tipo
Calculadora
x[0] = new Calculadora();
x[1] = new Calculadora();
..
.
Arreglos inicializados
1 c l a s s A r r e g l o {
2 p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) { 3 i n t a r r e g l o [ ] [ ] = { {1 , 2 , 3},
4 {4},
5 {5 , 6},
6 {7 , 8 , 9 , 1 0}
7 };
8 System . o u t . p r i n t l n ( a r r e g l o . l e n g t h ) ;
9 }
Matrices
Declaraci´
on
de una matriz de enteros:
int m[][];
Creaci´
on
de una matriz de enteros:
m = new int[10][5];
En un s´
olo paso:
Matrices
Declaraci´
on
de una matriz de enteros:
int m[][];
Creaci´
on
de una matriz de enteros:
m = new int[10][5];
En un s´
olo paso:
Matrices
Declaraci´
on
de una matriz de enteros:
int m[][];
Creaci´
on
de una matriz de enteros:
m = new int[10][5];
En un s´
olo paso:
Matrices
Declaraci´
on
de una matriz de enteros:
int m[][];
Creaci´
on
de una matriz de enteros:
m = new int[10][5];
En un s´
olo paso:
¿Es correcto este c´
odigo?
1 c l a s s A r r e g l o {
2 p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) { 3 i n t [ ] [ ] m = new i n t [ 1 0 ] [ ] ;
4 }
¿Y que tal este otro?
1 c l a s s A r r e g l o {
2 p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) { 3 i n t b [ ] ;
4 b = {1 , 2 , 4};
5 }
Polimorfismo
Tratar un objeto espec´ıfico como uno m´
as general, permite
aprovechar el funcionamiento gen´
erico de la clase para tratar
objetos diferentes
Generalizaci´
on: Compartir informaci´
on entre dos entidades
evitando la redundancia,
Herencia: Un
Animal
es una clase
m´
as general que un
Perro.
Polimorfismo
Tratar un objeto espec´ıfico como uno m´
as general, permite
aprovechar el funcionamiento gen´
erico de la clase para tratar
objetos diferentes
Generalizaci´
on
: Compartir informaci´
on entre dos entidades
evitando la redundancia,
Herencia
: Un
Animal
es una clase
m´
as general que un
Perro
.
Polimorfismo
Tratar un objeto espec´ıfico como uno m´
as general, permite
aprovechar el funcionamiento gen´
erico de la clase para tratar
objetos diferentes
Generalizaci´
on
: Compartir informaci´
on entre dos entidades
evitando la redundancia,
Herencia
: Un
Animal
es una clase
m´
as general que un
Perro
.
Especializaci´
on
: Definir nuevas clases a partir de otras ya
existentes.
Herencia
: Un
Perro
es una clase m´
as especializada
Ejemplo: ¿Es correcto este c´
odigo?
1 c l a s s C a l c u l a d o r a { 2 p u b l i c v o i d suma ( ) { } 3 }
4
5 c l a s s C a l c u l a d o r a C i e n t i f i c a e x t e n d s C a l c u l a d o r a { 6 p u b l i c v o i d r a i z ( ) { }
7 } 8
9 p u b l i c c l a s s P o l i m o r f i s m o {
10 p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) { 11 C a l c u l a d o r a c = new C a l c u l a d o r a ( ) ; 12 C a l c u l a d o r a C i e n t i f i c a c c = new
13 C a l c u l a d o r a C i e n t i f i c a ( ) ; 14 c = c c ;
15 c . suma ( ) ; 16 }
¿Y que tal este otro?
1 c l a s s C a l c u l a d o r a { 2 p u b l i c v o i d suma ( ) { } 3 }
4
5 c l a s s C a l c u l a d o r a C i e n t i f i c a e x t e n d s C a l c u l a d o r a { 6 p u b l i c v o i d r a i z ( ) { }
7 } 8
9 p u b l i c c l a s s P o l i m o r f i s m o {
10 p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) { 11 C a l c u l a d o r a c = new C a l c u l a d o r a ( ) ; 12 C a l c u l a d o r a C i e n t i f i c a c c = new
13 C a l c u l a d o r a C i e n t i f i c a ( ) ; 14 c = c c ;
15 c . r a i z ( ) ; 16 }
Polimorfismo en arreglos: ¿Es correcto este c´
odigo?
1 p u b l i c c l a s s P o l i m o r f i s m o {
2 p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) { 3 C a l c u l a d o r a c [ ] = new C a l c u l a d o r a [ 2 ] ; 4
5 c [ 0 ] = new C a l c u l a d o r a ( ) ;
6 c [ 1 ] = new C a l c u l a d o r a C i e n t i f i c a ( ) ; 7
8 c [ 0 ] . sumar ( ) ; 9 c [ 1 ] . sumar ( ) ; 10 }
Casting
: ¿Es correcto este c´
odigo?
1 c l a s s C a l c u l a d o r a { 2 p u b l i c v o i d suma ( ) { } 3 }
4
5 c l a s s C a l c u l a d o r a C i e n t i f i c a e x t e n d s C a l c u l a d o r a { 6 p u b l i c v o i d r a i z ( ) { }
7 } 8
9 p u b l i c c l a s s P o l i m o r f i s m o {
10 p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) { 11 C a l c u l a d o r a c = new C a l c u l a d o r a ( ) ; 12 C a l c u l a d o r a C i e n t i f i c a c c = new
13 C a l c u l a d o r a C i e n t i f i c a ( ) ; 14 c = c c ;
15 c c = ( C a l c u l a d o r a C i e n t i f i c a ) c ; 16 }
¿Y que tal este otro?
1 c l a s s C a l c u l a d o r a { 2 p u b l i c v o i d suma ( ) { } 3 }
4
5 c l a s s C a l c u l a d o r a C i e n t i f i c a e x t e n d s C a l c u l a d o r a { 6 p u b l i c v o i d r a i z ( ) { }
7 } 8
9 p u b l i c c l a s s P o l i m o r f i s m o {
10 p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) { 11 C a l c u l a d o r a c = new C a l c u l a d o r a ( ) ; 12 C a l c u l a d o r a C i e n t i f i c a c c = new
13 C a l c u l a d o r a C i e n t i f i c a ( ) ; 14 c c = ( C a l c u l a d o r a C i e n t i f i c a ) c ;
15 c c . r a i z ( ) ; 16 }
Generalizaci´
on vs. especializaci´
on
Generalizaci´
on
: Una
CalculadoraCientifica
puede ser
vista como una
Calculadora
, pero con p´
erdida de
funcionalidad
Especializaci´
on: Una
Calculadora
puede ser vista como una
CalculadoraCientifica
haciendo un
casting
obligatorio
Generalizaci´
on vs. especializaci´
on
Generalizaci´
on
: Una
CalculadoraCientifica
puede ser
vista como una
Calculadora
, pero con p´
erdida de
funcionalidad
Especializaci´
on
: Una
Calculadora
puede ser vista como una
CalculadoraCientifica
haciendo un
casting
obligatorio
Generalizaci´
on vs. especializaci´
on
Generalizaci´
on
: Una
CalculadoraCientifica
puede ser
vista como una
Calculadora
, pero con p´
erdida de
funcionalidad
Especializaci´
on
: Una
Calculadora
puede ser vista como una
CalculadoraCientifica
haciendo un
casting
obligatorio
¿Es correcto este c´
odigo?
1 c l a s s A { v o i d metodoA ( ) {} }
2 c l a s s B e x t e n d s A { v o i d metodoB ( ) {} } 3 c l a s s C e x t e n d s A { v o i d metodoC ( ) {} } 4
5 p u b l i c c l a s s P o l i m o r f i s m o {
6 p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) { 7 A a = new A ( ) ;
8 C c = (C) a ; 9 c . metodoC ( ) ; 10 }
11 }
Si compila!, pero
¿Es correcto este c´
odigo?
1 c l a s s A { v o i d metodoA ( ) {} }
2 c l a s s B e x t e n d s A { v o i d metodoB ( ) {} } 3 c l a s s C e x t e n d s A { v o i d metodoC ( ) {} } 4
5 p u b l i c c l a s s P o l i m o r f i s m o {
6 p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) { 7 A a = new A ( ) ;
8 C c = (C) a ; 9 c . metodoC ( ) ; 10 }
11 }
Si compila!
, pero
¿Y este otro?
1 c l a s s A { v o i d metodoA ( ) {} }
2 c l a s s B e x t e n d s A { v o i d metodoB ( ) {} } 3 c l a s s C e x t e n d s A { v o i d metodoC ( ) {} } 4
5 p u b l i c c l a s s P o l i m o r f i s m o {
6 p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) { 7 A a = new C ( ) ;
8 C c = (C) a ; 9 c . metodoC ( ) ; 10 }
Ejemplo 1: Generalizaci´
on
1 i n t e r f a c e A n i m a l { 2 v o i d comer ( ) ; 3 }
4
5 c l a s s P e r r o i m p l e m e n t s A n i m a l { 6 f i n a l p u b l i c v o i d comer ( ) { } 7 }
8
9 p u b l i c c l a s s C a c h o r r o e x t e n d s P e r r o { 10 v o i d d o r m i r ( ) { }
11 p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) { 12 C a c h o r r o s c r a p p y = new C a c h o r r o ( ) ; 13 P e r r o s c o o b y = s c r a p p y ;
Ejemplo 2: Especializaci´
on (enga˜
nando al compilador)
1 i n t e r f a c e A n i m a l { 2 v o i d comer ( ) ; 3 }
4
5 c l a s s P e r r o i m p l e m e n t s A n i m a l { 6 f i n a l p u b l i c v o i d comer ( ) { } 7 }
8
9 p u b l i c c l a s s C a c h o r r o e x t e n d s P e r r o { 10 v o i d d o r m i r ( ) { }
11 p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) { 12 P e r r o s c o o b y = new P e r r o ( ) ;
13 C a c h o r r o s c r a p p y = ( C a c h o r r o ) s c o o b y ; 14 }
Ejemplo 3: Especializaci´
on
1 i n t e r f a c e A n i m a l { 2 v o i d comer ( ) ; 3 }
4
5 c l a s s P e r r o i m p l e m e n t s A n i m a l { 6 f i n a l p u b l i c v o i d comer ( ) { } 7 }
8
9 p u b l i c c l a s s C a c h o r r o e x t e n d s P e r r o { 10 v o i d d o r m i r ( ) { }
11 p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) { 12 P e r r o s c o o b y = new C a c h o r r o ( ) ;
13 C a c h o r r o s c r a p p y = ( C a c h o r r o ) s c o o b y ; 14 }
Ejemplo 4: ¿Especializaci´
on?
1 i n t e r f a c e A n i m a l { 2 v o i d comer ( ) ; 3 }
4
5 c l a s s P e r r o i m p l e m e n t s A n i m a l { 6 f i n a l p u b l i c v o i d comer ( ) { } 7 }
8
9 p u b l i c c l a s s C a c h o r r o e x t e n d s P e r r o { 10 v o i d d o r m i r ( ) { }
11 p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) { 12 P e r r o s c o o b y = new P e r r o ( ) ;
13 C a c h o r r o s c r a p p y = ( C a c h o r r o ) s c o o b y ; 14 s c r a p p y . d o r m i r ( ) ;
Ejemplo 5: ¿Generalizaci´
on?
1 i n t e r f a c e A n i m a l { 2 v o i d comer ( ) ; 3 }
4
5 c l a s s P e r r o i m p l e m e n t s A n i m a l { 6 f i n a l p u b l i c v o i d comer ( ) { } 7 }
8
9 p u b l i c c l a s s C a c h o r r o e x t e n d s P e r r o { 10 v o i d d o r m i r ( ) { }
11 p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) { 12 C a c h o r r o s c r a p p y = new C a c h o r r o ( ) ; 13 P e r r o s c o o b y = s c r a p p y ;
14 s c o o b y . d o r m i r ( ) ; 15 }
Sobrecarga vs. Polimorfismo
1 a b s t r a c t c l a s s A n i m a l { } 2 c l a s s P e r r o e x t e n d s A n i m a l { } 3 c l a s s Gato e x t e n d s A n i m a l { } 4
5 c l a s s V e t e r i n a r i o 1 {
6 v o i d v a c u n a r ( P e r r o p ) { } 7 v o i d v a c u n a r ( Gato g ) { } 8 }
9
10 c l a s s V e t e r i n a r i o 2 {
Composici´
on vs. agregaci´
on
Composici´
on
: Una clase
A
tiene una instancia de la clase
B
Agregaci´
on
: Una clase
A
tiene una declaraci´
on de clase
B
(o
viceversa). No es posible una agregaci´
on circular
Ejemplo
1 i m p o r t j a v a . awt . D i m e n s i o n ; 2 i m p o r t j a v a . awt . C o l o r ; 3
4 c l a s s C a l c u l a d o r a { 5 P a n t a l l a p ;
6 c l a s s C u b i e r t a { 7 C o l o r c o l o r ;
8 }
9 } 10