SlideShare una empresa de Scribd logo
1
Introducción a la Programación
en Java
Clases, Métodos y Atributos
Ángel Lucas González Martínez
Jaime Ramírez
DLSIIS. Facultad de Informática
Universidad Politécnica de Madrid
Clase
• Las clases son el elemento fundamental de los
programas en Java
• Todo programa consta de al menos una clase
• Recordemos:
– Clase: Tipo de datos, compuesto de atributos y
métodos, que representa a una entidad o
elemento de la realidad
– Instancia u objeto: Es un individuo particular de
una clase, es decir, una variable de tipo clase
2
Declaración de una Clase
[modif_clase] class nombre_clase
[extends nombre_clase]
[implements nombre_interfaz{, nombre_interfaz}]
{
{[modif_atributos] tipo id_atributo [= valor_inicial];}
{[modif_métodos] tipo_retorno id_método ([list_parám])
{cuerpo_método}}
}
modifi_clase = abstract | public | final
modif_atributos = private | public | protected | final | static
modif_métodos = abstract | private | public | protected | final | static
Declaración de una Clase
• Recomendación metodológica:
• Los atributos deben ser privados
• Las métodos:
– Privado: si se utiliza como función aux
– Público: si va a ser utilizada fuera de la clase
• Cuando se expliquen los paquetes, se
distinguirán más niveles de acceso
3
Ciclo de vida de un objeto
• Supuesta la definición de la clase
NombreClase
1. Declaración de un objeto
2. Creación de una instancia
3. Utilización de la instancia
NombreClase obj; // declaración
obj= new NombreClase (); // declaración
obj.función(....); // invocación de un método
a = obj.atributo; // acceso a un atributo
//función y atributo tienen que ser accesibles por
//quien lo utiliza*.
Ciclo de vida de un objeto
4. Destrucción del objeto o instancia
• Automática
• El objeto ya no es referenciado por nadie:
• A null todas las referencias del objeto
• Se sale del ámbito
• Entra en juego el GC
NombreClase obj= new NombreClase ();
{
NombreClase obj2= obj; // declaración
.......
} //Eliminación de una referencia
obj= null; // Eliminación de la última referencia obj
4
Modificadores de una clase
• Los modificadores de una clase son:
– abstract: La clase no está completa y no se
pueden crear instancia
– final: No puede ser extendida
– public: Pública
– nada (friendly): Sólo se puede utilizar dentro del
paquete en que se define (crear instancias o uso
de métodos de clase)
• Herencia y especializaciones: extends e
implements
Modificadores de atributos y métodos
• De acceso para Atributos y Métodos:
– private: Nadie puede acceder al método o atributo
– nada (friendly): sólo es visible dentro del paquete que
incluye la clase que lo definió
– protected: es friendly, y además es visible para todas las
subclases de la clase que lo definió
– public: es visible para todos
– static: define atributo o método de clase
– final: en atributos junto con static define una constante.
En métodos indica que no puede ser sobre escrito
• Sólo para métodos: abstract y la clase ha sido
declarada como abstract
5
Recomendaciones sobre control de
acceso
• Los atributos deben ser siempre privados
• Los métodos deben ser:
– “friendly”: si se desea que sólo sean utilizados
dentro del paquete (no suele ser muy
recomendable)
– protected: si se desea permitir que posibles
subclases definidas en otros paquetes tengan
acceso
– public: si se desea permitir el acceso a ellos
desde cualquier parte del programa
Ejemplo de clase
public class Empleado {
private String nombre;
private double sueldo;
public String getNombre() {
return nombre;
}
public void setNombre(String nombre1) {
nombre = nombre1;
}
public double getSueldo() {
return sueldo;
}
public void setSueldo(double sueldo1) {
sueldo = sueldo1;
}
}
6
Ejemplo de clase
import Empleado;
public class TestEjemplo {
public static void main(String[] args) {
Empleado emp1;
emp1 = new Empleado();
emp1.setNombre("Pepe");
emp1.setSueldo(1000);
System.out.print("El sueldo de " +
emp1.getNombre() + " es " +
emp1.getSueldo());
}
}
Constructor
• Método especial
• Permite inicializar un objeto al crearlo
• Mismo nombre que la clase
• No puede devolver valor o dato
• Si no se define java proporciona uno por defecto
que asigna a cada atributo de instancia su valor
por defecto: 0, false, 0l, 0.0f, null,’0’
• No se inicializan las variables locales de un
método
7
Constructor
• El constructor se ejecuta al crear el objeto con el
new
• El constructor puede tener parámetros
• Los parámetros se utilizan para inicializar los
atributos
• Los parámetros se pasan al invocar a new
• Para notificar problemas al inicializar se utilizan
excepciones
Ejemplo de constructores
public class Date {
private int day, month, year;
public Date(String date) {
String [] partes = date.split("/");
day = Integer.parseInt(partes[0]);
month = Integer.parseInt(partes[1]);
year = Integer.parseInt(partes[2]);
}
public Date(int d, int m, int y) {
day=d; month=m; year=y;
}
public String toString() {
return day + "/" + month + "/" + year;
}
}
8
Ejemplo de constructores
import Date;
public class TestDate {
public static void main(String[] args) {
Date ob1, ob2;
ob1 = new Date(4, 11, 1996);
ob2 = new Date(“22/10/2001");
System.out.println("La primera fecha es " + ob1);
System.out.print("La segunda fecha es " + ob2);
}
}
Garbage Collection (GC)
• Recoge la memoria que no es accesible
(basura)
• Es activado de forma automática por la JVM
• Se puede “sugerir” su ejecución por medio de
System.gc()
• La invocación manual se ha de realizar con
cuidado
• GC sólo se encarga de recuperar memoria
9
Destructor
• Java no proporciona un destructor al uso
• El método finalize () es llamado por el GC
• Libera la memoria que ocupa el objeto
• Debe usarse sólo para liberar memoria
• No se debe utilizar para realizar tareas
correspondientes a un destructor:
– Liberar recursos hardware
– Conexiones vía sockets
– Cerrar ficheros
– Etc.
• Definir métodos para la “desinicialización”
Puntero this
• Todo método de instancia lleva un parámetro
implícito
• Este parámetro una referencia al objeto sobre el
que se hace la llamada
• Esta referencia se llama this
• Se puede usar para evitar colisiones de
identificadores dentro de un método
public class Date {
.....
public Date(int day, int month, int year) {
this.day=day; this.month=month; this.year=year;
}
}
10
Paquetes
• Permite agrupar en una misma librería varias
clases e interfaces
• Un paquete crea un espacio de nombres ⇒
– Dos clases pertenecientes a distintos paquetes
se pueden llamar igual
• Un paquete puede contener otros paquetes
• Si no se especifica nada la clase pertenece al
paquete por defecto
Cómo crear un paquete
• Al comienzo de todos los ficheros
pertenecientes a un mismo paquete ‘a’:
package a;
• Todos los .java perteneciente a un paquete
debería colgar del mismo directorio
• Si el paquete ‘a’ está dentro del paquete ‘b’, y
éste a su vez está dentro de ‘c’, entonces:
package c.b.a;
11
Cómo crear un paquete
• En un mismo fichero se pueden definir varias
clases y/o interfaces, sólo una puede ser pública
• Todos los ficheros del paquete ‘a’ deben:
– o estar localizados en un directorio llamado A
que cuelgue de un directorio incluido en la
variable CLASSPATH (por ejemplo: c/b/a)
– o estar incluidos en un file .jar, y el path del
fichero debe estar incluido en la variable
CLASSPATH
Cómo usar un paquete
• Escribiendo la referencia completa al elemento:
nombre_paquete.nombre_elem
• Importando:
– el paquete entero:
import nombre_paquete.*;
– o sólo el elemento a ser utilizado:
import nombre_paquete.nombre_elem;
12
Igualdad y Asignación
• Una variable declarada como de una cierta
clase es una referencia o “alias” de un objeto
NombreClase obj= new NombreClase ();
{
NombreClase obj2= obj; // declaración
.......
} //Eliminación de una referencia
obj= null; // Eliminación de la última referencia obj
Instancia
NombreClase
obj obj2
Igualdad y Asignación
public static void main(String[] args) {
Date ob1, ob2, ob3;
ob1 = new Date(12, 4, 96);
ob2 = ob1; // ambos se refieren al mismo objeto Date
System.out.println("La primera fecha es " + ob1);
System.out.println("La segunda fecha es " + ob2);
ob1.setDia(10); // cambio el día por medio de ob1
if (ob1==ob2) // pero siguen siendo iguales
System.out.println(“Son iguales”);
else
System.out.println(“Son distintos”);
ob3 = new Date(10, 4, 96);
if (ob1==ob3) // son distintos!?
System.out.println(“Son iguales”);
else
System.out.println(“Son distintos”);
}
13
Igualdad y Asignación
• ¿Por qué ob1 y ob3 son distintos?
• El operador de igualdad comprueba si ambas
referencias son dos “alias” del mismo objeto,
• ob1 y ob3 son dos objetos con el mismo contenido, pero
“alias” o referencias a instancias distintas
• ¿Cómo podemos comparar dos objetos de modo que el
resultado sea cierto si ambos objetos tienen el mismo
contenido?
• Solución: definir un método equals() en la clase Date.
• Esta solución es la que se ha adoptado en la API (véase
la clase String)
Ejemplo con equals
public boolean equals (Object o) {
return (day==((Date) o).day) &&
(month==((Date) o).month) &&
(year==((Date) o).year);
}
public static void main(String[] args) {
Date ob1, ob2;
ob1 = new Date(12, 4, 96);
ob2 = new Date("12/4/96");
System.out.println("La primera fecha es " + ob1);
System.out.println("La segunda fecha es " + ob2);
System.out.println(ob1 == ob2);
System.out.println(ob1.equals(ob2));
}
14
Paso de parámetros a funciones
• El paso de parámetros en Java no es por
referencia, sino por valor ⇒
– Los cambios en los parámetros se pierden al
terminar la función.
static void intercambiar
(Date d1, Date d2) {
Date aux = d1;
d1 = d2;
d2 = aux;
}
static void intercambiar
(Date d1, Date d2) {
"intercambiar d1.day y
d2.day"
"intercambiar d1.month
y d2.month"
"intercambiar d1.year y
d2.year"
}
Ejercicios
• Hacer una clase Menu que reciba un conjunto
de cadenas de caracteres, el tipo de
numeración que se desea: usando letras (a-z) o
números (1-n)
• Definir una clase agenda y un programa de
prueba que utilice la clase Menu. Debe
permitirse insertar, borrar, buscar y Listar. Cada
entrada de la agenda contendrá:
– Datos personales
– Datos de contacto

Más contenido relacionado

PDF
Đề tài: Cài đặt một web server đơn giản trên một board vi xử lý
DOCX
Soal pat mtk kelas 8 k13 (websiteedukasi.com)
PDF
Soal uts bahasa sunda kelas 3 semester 1
PPTX
Objective C clases y metodos
PDF
polimorfismo
PDF
Tema 8 desarrollo de aplicaciones en java por gio
DOCX
Garficas de funciones trigonometricas
PPTX
PROYECTOS TRANSVERSALES
Đề tài: Cài đặt một web server đơn giản trên một board vi xử lý
Soal pat mtk kelas 8 k13 (websiteedukasi.com)
Soal uts bahasa sunda kelas 3 semester 1
Objective C clases y metodos
polimorfismo
Tema 8 desarrollo de aplicaciones en java por gio
Garficas de funciones trigonometricas
PROYECTOS TRANSVERSALES

Destacado (20)

PPTX
Proyecto san antonio ok
PDF
PDF
Programas de consola y jpa con net beans por gio
PDF
Apresentação 4
DOCX
Funciones de angulos dobles y multiples christian siavichay 2 c2
DOCX
Programación
PDF
Rad47739 proyec cabaña actualok
PPTX
Proyecto secundino porras 1
DOCX
Leer historia pasadas
PPTX
Proyecto sede ancon cpe 47750 actual
PPTX
Proyecto aula sede delicias cpe 47696
PPTX
Los propósitos de la rieb se centran
PPTX
Proyecto aula sede delicias cpe 47696
PDF
Joption pane en java
PDF
Tema 5 arreglos y cadenas - lsia por gio
PDF
Conexión a bases de datos con net beans por gio
ODT
Examen del proyecto final de programacion
PPTX
How To Use Picmonkey
PPTX
Learning to Succeed in the Digital World
Proyecto san antonio ok
Programas de consola y jpa con net beans por gio
Apresentação 4
Funciones de angulos dobles y multiples christian siavichay 2 c2
Programación
Rad47739 proyec cabaña actualok
Proyecto secundino porras 1
Leer historia pasadas
Proyecto sede ancon cpe 47750 actual
Proyecto aula sede delicias cpe 47696
Los propósitos de la rieb se centran
Proyecto aula sede delicias cpe 47696
Joption pane en java
Tema 5 arreglos y cadenas - lsia por gio
Conexión a bases de datos con net beans por gio
Examen del proyecto final de programacion
How To Use Picmonkey
Learning to Succeed in the Digital World
Publicidad

Similar a Clases metodos y atributos (20)

PPTX
Programacion orientada a objetos 1
PDF
secme-23192.pdf
PPTX
JAVA_BASICO_modo_consola_introduccion.pptx
PDF
Programación Orientada a Objetos en Java - Parte I 2015
PPT
Programación Orientada a Objetos
PDF
2introduccionallenguajejava 141109171757-conversion-gate02
PDF
INTRODUCCION LENGUAJE JAVA
PDF
2) introduccion al lenguaje java
PDF
Clases y objetos en Java
PDF
Programación 3: Clases y objetos en Java
PDF
JAVA ORIENTADO A OBJETOS - CLASES Y OBJETOS
PPTX
Conceptos basicos POO
PDF
1 -programacion_oo
PPTX
Guia poo
PDF
JAVA OO - TEMA 01 - CLASES Y OBJETOS
PPT
PPTX
Programación Orientada a Objetos - Unidad 2: clases y objetos
PPTX
Programacion orientada a objetos 2
PDF
Unidad 2 poo_clases_y_objetos
Programacion orientada a objetos 1
secme-23192.pdf
JAVA_BASICO_modo_consola_introduccion.pptx
Programación Orientada a Objetos en Java - Parte I 2015
Programación Orientada a Objetos
2introduccionallenguajejava 141109171757-conversion-gate02
INTRODUCCION LENGUAJE JAVA
2) introduccion al lenguaje java
Clases y objetos en Java
Programación 3: Clases y objetos en Java
JAVA ORIENTADO A OBJETOS - CLASES Y OBJETOS
Conceptos basicos POO
1 -programacion_oo
Guia poo
JAVA OO - TEMA 01 - CLASES Y OBJETOS
Programación Orientada a Objetos - Unidad 2: clases y objetos
Programacion orientada a objetos 2
Unidad 2 poo_clases_y_objetos
Publicidad

Más de Robert Wolf (20)

PDF
Tema6resumido
PDF
Tema4 herencia
PDF
Tema 6
PDF
Tema 16 acceso a base de datos usando jpa por gio
PDF
Tema 15 aplicaciones de dos capas por gio
PDF
Tema 14 imágenes en java por gio
PDF
Tema 13 gráficas en java por gio
PDF
Tema 12 hilos en java por gio
PDF
Tema 11 expresiones regulares en java por gio
PDF
Tema 10 clase abstractas e interfaz
PDF
Tema 10 entrada y salida por gio
PDF
Tema 9 pruebas unitarias por gio
PDF
Tema 9 aplicaciones de dos capas por gio
PDF
Tema 8 entrada y salida por gio
PDF
Tema 7 gui, swing y java beans por gio
PDF
Tema 7 desarrollo de aplicaciones en java - lsia por gio
PDF
Tema 6 gui, swing y java beans por gio
PDF
Tema 6 colecciones por gio
PDF
Tema 5 arreglos y cadenas por gio
PDF
Tema 4 excepciones por gio
Tema6resumido
Tema4 herencia
Tema 6
Tema 16 acceso a base de datos usando jpa por gio
Tema 15 aplicaciones de dos capas por gio
Tema 14 imágenes en java por gio
Tema 13 gráficas en java por gio
Tema 12 hilos en java por gio
Tema 11 expresiones regulares en java por gio
Tema 10 clase abstractas e interfaz
Tema 10 entrada y salida por gio
Tema 9 pruebas unitarias por gio
Tema 9 aplicaciones de dos capas por gio
Tema 8 entrada y salida por gio
Tema 7 gui, swing y java beans por gio
Tema 7 desarrollo de aplicaciones en java - lsia por gio
Tema 6 gui, swing y java beans por gio
Tema 6 colecciones por gio
Tema 5 arreglos y cadenas por gio
Tema 4 excepciones por gio

Clases metodos y atributos

  • 1. 1 Introducción a la Programación en Java Clases, Métodos y Atributos Ángel Lucas González Martínez Jaime Ramírez DLSIIS. Facultad de Informática Universidad Politécnica de Madrid Clase • Las clases son el elemento fundamental de los programas en Java • Todo programa consta de al menos una clase • Recordemos: – Clase: Tipo de datos, compuesto de atributos y métodos, que representa a una entidad o elemento de la realidad – Instancia u objeto: Es un individuo particular de una clase, es decir, una variable de tipo clase
  • 2. 2 Declaración de una Clase [modif_clase] class nombre_clase [extends nombre_clase] [implements nombre_interfaz{, nombre_interfaz}] { {[modif_atributos] tipo id_atributo [= valor_inicial];} {[modif_métodos] tipo_retorno id_método ([list_parám]) {cuerpo_método}} } modifi_clase = abstract | public | final modif_atributos = private | public | protected | final | static modif_métodos = abstract | private | public | protected | final | static Declaración de una Clase • Recomendación metodológica: • Los atributos deben ser privados • Las métodos: – Privado: si se utiliza como función aux – Público: si va a ser utilizada fuera de la clase • Cuando se expliquen los paquetes, se distinguirán más niveles de acceso
  • 3. 3 Ciclo de vida de un objeto • Supuesta la definición de la clase NombreClase 1. Declaración de un objeto 2. Creación de una instancia 3. Utilización de la instancia NombreClase obj; // declaración obj= new NombreClase (); // declaración obj.función(....); // invocación de un método a = obj.atributo; // acceso a un atributo //función y atributo tienen que ser accesibles por //quien lo utiliza*. Ciclo de vida de un objeto 4. Destrucción del objeto o instancia • Automática • El objeto ya no es referenciado por nadie: • A null todas las referencias del objeto • Se sale del ámbito • Entra en juego el GC NombreClase obj= new NombreClase (); { NombreClase obj2= obj; // declaración ....... } //Eliminación de una referencia obj= null; // Eliminación de la última referencia obj
  • 4. 4 Modificadores de una clase • Los modificadores de una clase son: – abstract: La clase no está completa y no se pueden crear instancia – final: No puede ser extendida – public: Pública – nada (friendly): Sólo se puede utilizar dentro del paquete en que se define (crear instancias o uso de métodos de clase) • Herencia y especializaciones: extends e implements Modificadores de atributos y métodos • De acceso para Atributos y Métodos: – private: Nadie puede acceder al método o atributo – nada (friendly): sólo es visible dentro del paquete que incluye la clase que lo definió – protected: es friendly, y además es visible para todas las subclases de la clase que lo definió – public: es visible para todos – static: define atributo o método de clase – final: en atributos junto con static define una constante. En métodos indica que no puede ser sobre escrito • Sólo para métodos: abstract y la clase ha sido declarada como abstract
  • 5. 5 Recomendaciones sobre control de acceso • Los atributos deben ser siempre privados • Los métodos deben ser: – “friendly”: si se desea que sólo sean utilizados dentro del paquete (no suele ser muy recomendable) – protected: si se desea permitir que posibles subclases definidas en otros paquetes tengan acceso – public: si se desea permitir el acceso a ellos desde cualquier parte del programa Ejemplo de clase public class Empleado { private String nombre; private double sueldo; public String getNombre() { return nombre; } public void setNombre(String nombre1) { nombre = nombre1; } public double getSueldo() { return sueldo; } public void setSueldo(double sueldo1) { sueldo = sueldo1; } }
  • 6. 6 Ejemplo de clase import Empleado; public class TestEjemplo { public static void main(String[] args) { Empleado emp1; emp1 = new Empleado(); emp1.setNombre("Pepe"); emp1.setSueldo(1000); System.out.print("El sueldo de " + emp1.getNombre() + " es " + emp1.getSueldo()); } } Constructor • Método especial • Permite inicializar un objeto al crearlo • Mismo nombre que la clase • No puede devolver valor o dato • Si no se define java proporciona uno por defecto que asigna a cada atributo de instancia su valor por defecto: 0, false, 0l, 0.0f, null,’0’ • No se inicializan las variables locales de un método
  • 7. 7 Constructor • El constructor se ejecuta al crear el objeto con el new • El constructor puede tener parámetros • Los parámetros se utilizan para inicializar los atributos • Los parámetros se pasan al invocar a new • Para notificar problemas al inicializar se utilizan excepciones Ejemplo de constructores public class Date { private int day, month, year; public Date(String date) { String [] partes = date.split("/"); day = Integer.parseInt(partes[0]); month = Integer.parseInt(partes[1]); year = Integer.parseInt(partes[2]); } public Date(int d, int m, int y) { day=d; month=m; year=y; } public String toString() { return day + "/" + month + "/" + year; } }
  • 8. 8 Ejemplo de constructores import Date; public class TestDate { public static void main(String[] args) { Date ob1, ob2; ob1 = new Date(4, 11, 1996); ob2 = new Date(“22/10/2001"); System.out.println("La primera fecha es " + ob1); System.out.print("La segunda fecha es " + ob2); } } Garbage Collection (GC) • Recoge la memoria que no es accesible (basura) • Es activado de forma automática por la JVM • Se puede “sugerir” su ejecución por medio de System.gc() • La invocación manual se ha de realizar con cuidado • GC sólo se encarga de recuperar memoria
  • 9. 9 Destructor • Java no proporciona un destructor al uso • El método finalize () es llamado por el GC • Libera la memoria que ocupa el objeto • Debe usarse sólo para liberar memoria • No se debe utilizar para realizar tareas correspondientes a un destructor: – Liberar recursos hardware – Conexiones vía sockets – Cerrar ficheros – Etc. • Definir métodos para la “desinicialización” Puntero this • Todo método de instancia lleva un parámetro implícito • Este parámetro una referencia al objeto sobre el que se hace la llamada • Esta referencia se llama this • Se puede usar para evitar colisiones de identificadores dentro de un método public class Date { ..... public Date(int day, int month, int year) { this.day=day; this.month=month; this.year=year; } }
  • 10. 10 Paquetes • Permite agrupar en una misma librería varias clases e interfaces • Un paquete crea un espacio de nombres ⇒ – Dos clases pertenecientes a distintos paquetes se pueden llamar igual • Un paquete puede contener otros paquetes • Si no se especifica nada la clase pertenece al paquete por defecto Cómo crear un paquete • Al comienzo de todos los ficheros pertenecientes a un mismo paquete ‘a’: package a; • Todos los .java perteneciente a un paquete debería colgar del mismo directorio • Si el paquete ‘a’ está dentro del paquete ‘b’, y éste a su vez está dentro de ‘c’, entonces: package c.b.a;
  • 11. 11 Cómo crear un paquete • En un mismo fichero se pueden definir varias clases y/o interfaces, sólo una puede ser pública • Todos los ficheros del paquete ‘a’ deben: – o estar localizados en un directorio llamado A que cuelgue de un directorio incluido en la variable CLASSPATH (por ejemplo: c/b/a) – o estar incluidos en un file .jar, y el path del fichero debe estar incluido en la variable CLASSPATH Cómo usar un paquete • Escribiendo la referencia completa al elemento: nombre_paquete.nombre_elem • Importando: – el paquete entero: import nombre_paquete.*; – o sólo el elemento a ser utilizado: import nombre_paquete.nombre_elem;
  • 12. 12 Igualdad y Asignación • Una variable declarada como de una cierta clase es una referencia o “alias” de un objeto NombreClase obj= new NombreClase (); { NombreClase obj2= obj; // declaración ....... } //Eliminación de una referencia obj= null; // Eliminación de la última referencia obj Instancia NombreClase obj obj2 Igualdad y Asignación public static void main(String[] args) { Date ob1, ob2, ob3; ob1 = new Date(12, 4, 96); ob2 = ob1; // ambos se refieren al mismo objeto Date System.out.println("La primera fecha es " + ob1); System.out.println("La segunda fecha es " + ob2); ob1.setDia(10); // cambio el día por medio de ob1 if (ob1==ob2) // pero siguen siendo iguales System.out.println(“Son iguales”); else System.out.println(“Son distintos”); ob3 = new Date(10, 4, 96); if (ob1==ob3) // son distintos!? System.out.println(“Son iguales”); else System.out.println(“Son distintos”); }
  • 13. 13 Igualdad y Asignación • ¿Por qué ob1 y ob3 son distintos? • El operador de igualdad comprueba si ambas referencias son dos “alias” del mismo objeto, • ob1 y ob3 son dos objetos con el mismo contenido, pero “alias” o referencias a instancias distintas • ¿Cómo podemos comparar dos objetos de modo que el resultado sea cierto si ambos objetos tienen el mismo contenido? • Solución: definir un método equals() en la clase Date. • Esta solución es la que se ha adoptado en la API (véase la clase String) Ejemplo con equals public boolean equals (Object o) { return (day==((Date) o).day) && (month==((Date) o).month) && (year==((Date) o).year); } public static void main(String[] args) { Date ob1, ob2; ob1 = new Date(12, 4, 96); ob2 = new Date("12/4/96"); System.out.println("La primera fecha es " + ob1); System.out.println("La segunda fecha es " + ob2); System.out.println(ob1 == ob2); System.out.println(ob1.equals(ob2)); }
  • 14. 14 Paso de parámetros a funciones • El paso de parámetros en Java no es por referencia, sino por valor ⇒ – Los cambios en los parámetros se pierden al terminar la función. static void intercambiar (Date d1, Date d2) { Date aux = d1; d1 = d2; d2 = aux; } static void intercambiar (Date d1, Date d2) { "intercambiar d1.day y d2.day" "intercambiar d1.month y d2.month" "intercambiar d1.year y d2.year" } Ejercicios • Hacer una clase Menu que reciba un conjunto de cadenas de caracteres, el tipo de numeración que se desea: usando letras (a-z) o números (1-n) • Definir una clase agenda y un programa de prueba que utilice la clase Menu. Debe permitirse insertar, borrar, buscar y Listar. Cada entrada de la agenda contendrá: – Datos personales – Datos de contacto