Publicado el 31 de Julio del 2017
603 visualizaciones desde el 31 de Julio del 2017
286,2 KB
34 paginas
Creado hace 18a (15/04/2007)
Objetos
Luis Fernando Llana Díaz
Departamento de Sistemas Informáticos y Computación
Universidad Complutense de Madrid
15 de abril de 2007
Luis Fernando Llana Díaz
Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid
Objetos
Objeto es un ejemplar de una clase.
Estado interno, no manipulable directamente.
Métodos de manipulación.
Programa colección de clases.
Clase definición de objetos.
Similar a RECORD de Pascal + métodos de manipulación.
Java no es un lenguaje orientado a objetos puro, tiene tipos
primitivos.
Luis Fernando Llana Díaz
Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid
Objetos
Implementación de fechas
Implementación de fecha:
Representación de una fecha ordinaria (día/mes/año)
moderna (desde 01/01/1601).
Dada una fecha, pasar a la siguiente, anterior, añadir/restar
días.
Comparar fechas.
¿Cuántos días hay entre 2 fechas?
Luis Fernando Llana Díaz
Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid
Objetos
Uso de fechas
import fecha . Fecha ;
public class P r F e c h a {
public static void main ( String [] args ) {
Fecha f1 = new Fecha (30 , Fecha . DICIEMBRE , 1 9 9 9 ) ;
Fecha f2 = new Fecha (1 , Fecha . MARZO , 2 0 0 4 ) ;
while ( f1 . c o m p a r e T o ( f2 ) <=0) {
System . out . p r i n t l n ( f1 . d i a S e m a n a ()+ " : " + f1 );
f1 . s i g u i e n t e ();
}
}
}
1
2
3
4
5
6
7
8
9
10
11
Luis Fernando Llana Díaz
Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid
Objetos
Implementación de fechas
p a c k a g e fecha ;
public class Fecha i m p l e m e n t s C o m p a r a b l e {
p r i v a t e int dia ;
p r i v a t e int mes ;
p r i v a t e int anyo ;
public Fecha ( int _dia , int _mes , int _anyo ) {
dia = _dia ; mes = _mes ; anyo = _anyo ;
}
public String t o S t r i n g ( ) {
return dia + " / " + mes + " / " + anyo ;
}
public int c o m p a r e ( Object o )
. . . . . . . . . .
}
public void a n y a d i r ( int días ) {
. . . . . . . . . .
}
public void s i g u i e n t e () {
a n y a d i r (1);
}
public void a n t e r i o r () {
a n y a d i r (1);
}
public int d i a s H a s t a ( Fecha otra ) {
......
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
Luis Fernando Llana Díaz
Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid
Objetos
Implementación más real
Establecemos una fecha inicial el día 0, para simplificar el
01/01/1601 ¿por qué?.
Representamos cada fecha como el número de días
transcurridos desde el día 0.
Necesitamos métodos de traducción
Luis Fernando Llana Díaz
Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid
Objetos
Clase Fecha
p a c k a g e fecha ;
public class Fecha i m p l e m e n t s Comparable , C l o n e a b l e {
// C o n s t a n t e s para los m e s e s
public final static int ENERO =0;
public final static int F E B R E R O =1;
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
public final static int D I C I E M B R E =11;
// C o n s t a n t e s para los días
public final static int LUNES =0;
public final static int MARTES =1;
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
public final static int D O M I N G O =6;
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
// Días t r a n s c u r r i d o s d e s d e del 1 de e n e r o de 1601
p r i v a t e int d i a s D e s d e I n i c i o ;
public Fecha ( int dia , int mes , int anyo ) {
c o m p r u e b a F e c h a ( dia , mes , anyo );
d i a s D e s d e I n i c i o = c a l c u l a D i a s D e s d e I n i c i o ( dia , mes , anyo );
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
Luis Fernando Llana Díaz
Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid
Objetos
Clase Fecha
public void a n y a d i r D i a s ( int inc ) {
int d = d i a s D e s d e I n i c i o + inc ;
if (d <0) throw new F e c h a F u e r a D e R a n g o ( " Día a n t e r o r al p e r m i t i d o " );
d i a s D e s d e I n i c i o = d ;
}
public void s i g u i e n t e () {
a n y a d i r D i a s (1);
}
public void a n t e r i o r () {
a n y a d i r D i a s ( -1);
}
public b o o l e a n equals ( Object obj ) {
if (! ( obj i n s t a n c e o f Fecha )) return false ;
return d i a s D e s d e I n i c i o ==(( Fecha ) obj ). d i a s D e s d e I n i c i o ;
}
public int c o m p a r e T o ( Object o ) {
if (!( o i n s t a n c e o f Fecha ))
throw new C l a s s C a s t E x c e p t i o n ( " Se r e q u i e r e un objeto de clase Fecha " );
return d i a s D e s d e I n i c i o -(( Fecha ) o ). d i a s D e s d e I n i c i o ;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Luis Fernando Llana Díaz
Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid
Objetos
Clase Fecha
p r i v a t e static int c a l c u l a D i a s D e s d e I n i c i o ( int elDia , int elMes , int elAnyo ){
int dias ;
dias = c a l u l a D i a s H a s t a P r i m e r o D e ( elAnyo );
dias = dias + c a l c u l a D i a s H a s t a P r i m e r o D e l M e s ( elMes , elAnyo );
dias = dias + elDia -1; // el 1 / 1 / 1 6 0 1 es el dia 0
return dias ;
}
1
2
3
4
5
6
7
8
Luis Fernando Llana Díaz
Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid
Objetos
Clase Fecha
p r o t e c t e d static int d i a s M e s ( int mes , int anyo ) {
int [] d i a s M e s ={31 , 28 , 31 ,
30 , 31 , 30 ,
31 , 31 , 30 ,
31 , 30 , 31};
int dias = d i a s M e s [ mes ] + ( ( mes == F E B R E R O )? a n y o B i s i e s t o ( anyo ):0 );
return dias ;
}
p r i v a t e static int c a l c u l a D i a s H a s t a P r i m e r o D e l M e s ( int mes , int anyo ){
int dias = 0;
for ( int i = 0; i < mes ; i ++) {
dias = dias + d i a s M e s (i , anyo );
}
return dias ;
}
p r i v a t e static int c a l u l a D i a s H a s t a P r i m e r o D e ( int elAnyo ){
int dias ;
int diff = elAnyo - A N Y O _ I N I C I O ;
dias = diff *365; // se a n y a d e n 365 dias por cada año
dias = dias + diff / 4; // a ñ a d i m o s 1 por cada m ú l t i p l o de 4
dias = dias - ( diff /100); // se q u i d a 1 por cada m ú l t i m o de 100
dias = dias + ( diff /400); // se a ñ a d e 1 por cada m ú l t i m o de 400
return dias ;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
Luis Fernando Llana Díaz
Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid
Objetos
Clase Fecha
public String t o S t r i n g (){
F e c h a T e r n a f = new F e c h a T e r n a ( d i a s D e s d e I n i c i o );
return f . t o S t r i n g ();
}
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
class F e c h a T e r n a {
p r i v a t e int dia ;
p r i v a t e int mes ;
p r i v a t e int anyo ;
public F e c h a T e r n a ( int _dia , int _mes , int _anyo ) {
dia = _dia ; mes = _mes ; anyo = _anyo ;
}
public String t o S t r i n g () {
return dia + " / " + mes + " / " + anyo ;
}
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Luis Fernando Llana Díaz
Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid
Objetos
Clase Fecha
p r i v a t e static final int grupo1 = 365;
p r i v a t e static final int grupo4 = 4 * 3 6 5 + 1 ;
p r i v a t e static final int g r u p o 1 0 0 = 25* grupo4 -1;
p r i v a t e static final int g r u p o 4 0 0 = 4* g r u p o 1 0 0 +1;
public F e c h a T e r n a ( int dias ) {
int quedan = dias ;
int g r u p o s 4 0 0 = quedan / g r u p o 4 0 0 ;
quedan = quedan % g r u p o 4 0 0 ;
int g r u p o s 1 0 0 = quedan / g r u p o 1 0 0 ;
quedan = quedan % g r u p o 1 0 0 ;
int g r u p o s 4 = quedan / grupo4 ;
quedan = quedan % grupo4 ;
int g r u p o s 1 = quedan / grupo1 ;
quedan = quedan % grupo1 ;
int anyo = Fecha . A N Y O _ I N I C I O +
g r u p o s 1 + 4* g r u p o s 4 +
100* g r u p o s 1 0 0 + 400* g r u p o s 4 0 0 ;
int mes =0;
while ( quedan >= Fecha . d i a s M e s ( mes , anyo )) {
quedan = quedan - Fecha . d i a s M e s ( mes , anyo );
mes ++;
}
this . dia = quedan +1;
this . mes = mes +1;
this . anyo = anyo ;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
Luis Fernando Llana Díaz
Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid
Objetos
Terminología
clase
Definición de objetos. Todo objeto pertenece a una clase.
Fecha f1 = new Fecha (30 , Fecha . DICIEMBRE , 1 9 9 9 ) ;
Fecha f2 = new Fecha (1 , Fecha . MARZO , 2 0 0 4 ) ;
p a c k a g e fecha ;
public class Fecha i m p l e m e n t s C o m p a r a b l e {
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
}
class F e c h a T e r n a {
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
}
1
2
1
2
3
4
5
6
7
8
9
10
11
Luis Fernando Llana Díaz
Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid
Objetos
Terminología
constructor
Procedimiento que construye objetos
public Fecha ( int dia , int mes , int anyo ) {
c o m p r u e b a F e c h a ( dia , mes , anyo );
d i a s D e s d e I n i c i o = c a l c u l a D i a s D e s d e I
Comentarios de: Objetos (0)
No hay comentarios