Clases metodos y atributos
Upcoming SlideShare
Loading in...5
×
 

Clases metodos y atributos

on

  • 52 views

 

Statistics

Views

Total Views
52
Views on SlideShare
52
Embed Views
0

Actions

Likes
0
Downloads
1
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Clases metodos y atributos Clases metodos y atributos Document Transcript

  • 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 View slide
  • 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 View slide
  • 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