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