Clases Metodos y Atributos - Universidad Politécnica de Madrid

Anuncio
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
1
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
2
Ciclo de vida de un objeto
•
Supuesta la definición de la clase
NombreClase
1. Declaración de un objeto
NombreClase obj; // declaración
2. Creación de una instancia
obj= new NombreClase (); // declaración
3. Utilización de la instancia
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
NombreClase obj= new NombreClase ();
{
NombreClase obj2= obj; // declaración
.......
} //Eliminación de una referencia
obj= null; // Eliminación de la última referencia obj
•
Entra en juego el GC
3
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
4
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;
}
}
5
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
6
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;
}
}
7
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
8
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;
}
}
9
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;
10
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;
11
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
obj
obj2
Instancia
NombreClase
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”);
}
12
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));
}
13
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
14
Descargar