Download - T11 - Clases
Tema – 11Clases y objetos
11.1. Introducción
• Java es un lenguaje de programación orientado a objetos (POO), lo cual nos permite el uso de clases y objetos.
• Hasta ahora conocemos los tipos de datos simples típicos de Java: enteros, decimales, caracteres, booleanos… Con las clases podremos definir nuevos “tipos de datos”: fechas, formas, personas, empresas…
PROGRAMACIÓN – Daniel Santiago 2
11.2. Definiciones: clase y objeto
• Una clase es un conjunto agrupado de datos y de los métodos necesarios para trabajar con éstos. Una clase es la definición formal de los objetos.
• Un objeto es una instancia (ejemplar) de una clase. Es decir, un objeto es un conjunto de valores determinados de una clase.
PROGRAMACIÓN – Daniel Santiago 3
11.2. Definiciones: clase y objeto
• Ejemplo:
Clase Objetos
PROGRAMACIÓN – Daniel Santiago 4
MUEBLE
Silla
Mesa
Estantería
11.2. Definiciones: atributos
• Como ya se ha dicho, una clase está compuesta de varios datos y de métodos que nos permiten trabajar con éstos. Estos datos se llaman atributos.
• Los atributos de una clase son variables o constantes que almacenan valores de los objetos que se instancian a partir de la clase.
• Los métodos permiten trabajar con los atributos.
PROGRAMACIÓN – Daniel Santiago 5
11.3. Sintaxis
• Las clases en Java se declaran de la siguiente forma:
class Nombre_clase{
//Atributos
//Métodos
}
• A continuación veremos un ejemplo de creación de una clase.
PROGRAMACIÓN – Daniel Santiago 6
11.4. Ejemplo
• Vamos a crear la clase Alumno. Nuestro programa representará un alumno mediante su DNI, su nombre, su edad, y su nota media.
• Decidimos cómo representar cada uno de estos datos:– DNI: cadena de caracteres
– Nombre: cadena de caracteres
– Edad: entero
– Nota media: decimal
PROGRAMACIÓN – Daniel Santiago 7
11.4. Ejemplo
• A continuación pensamos en los métodos necesarios para operar con un alumno:
– Creación del alumno.
– Consultar y cambiar su DNI.
– Consultar y cambiar su nombre.
– Consultar y cambiar su edad.
– Consultar y cambiar su nota media.
PROGRAMACIÓN – Daniel Santiago 8
11.4. Ejemplo
class Alumno{private String dni;private String nombre;private int edad;private double nota;
}• La palabra reservada private se explicará en el
apartado 11.10. Por razones de seguridad, es aconsejable ponerla a todos los atributos de nuestras clases.
PROGRAMACIÓN – Daniel Santiago 9
11.4. Ejemplo
class Alumno{…//Constructorespublic Alumno(){}public Alumno(String dni, String nombre, int edad, double nota){
this.setDni(dni);this.setNombre(nombre);this.setEdad(edad);this.setNota(nota);
}}
PROGRAMACIÓN – Daniel Santiago 10
11.5. Constructores
• Los constructores son métodos que sirven para crear objetos de la clase. Los constructores tienen el mismo nombre que la clase.
• En el ejemplo se han creado dos constructores: uno vacío, sin parámetros, y otro que recibe varios parámetros. El constructor vacío reserva en memoria el espacio necesario para crear la instancia de la clase, pero sin guardar ningún valor. El constructor con parámetros, reserva el espacio en memoria y guarda en él los valores especificados en los parámetros.
• El constructor con parámetros llama a funciones “set”. A continuación se verán implementadas.
PROGRAMACIÓN – Daniel Santiago 11
11.5. Constructores
• Los objetos los crearemos generalmente desde otro archivo java, por ejemplo desde una función main.
• Utilizaremos el operador new para crear objetos, seguido de un constructor.
Alumno alum1 = new Alumno();Alumno alum2 = new Alumno(“12345”, “Pepito”, 18, 9.5);
• En los ejemplos declaramos dos variables de tipo Alumno: alum1 y alum2. En el primero llamamos al constructor vacío, y en el segundo llamamos al constructor con los valores que queremos que tenga el objeto alum2.
PROGRAMACIÓN – Daniel Santiago 12
11.6. Ejemplo (II)
class Alumno{…public void setDni(String dni){
this.dni = dni;}public void setNombre(String nombre){
this.nombre = nombre;}public void setEdad(int edad){
this.edad = edad;}public void setNota(double nota){
this.nota = nota;}
}
PROGRAMACIÓN – Daniel Santiago 13
11.7. Métodos set
• Los métodos set sirven para asignar un valor a un atributo de un objeto concreto de la clase.
• La palabra reservada this es una constante que se utiliza para hacer referencia al objeto actual. De este modo, si ejecutamos this.dni = 12345; estamos asignando un valor al dni de una instancia concreta de la clase.
PROGRAMACIÓN – Daniel Santiago 14
11.8. Ejemplo (III)
class Alumno{…public String getDni(){
return this.dni;}public String getNombre(){
return this.nombre;}public int getEdad(){
return this.edad;}public double getNota(){
return this.nota;}
}
PROGRAMACIÓN – Daniel Santiago 15
11.9. Métodos get
• Los métodos get sirven para consultar el valor de un atributo de un objeto concreto de la clase.
• En resumen, los métodos set y get son necesarios para que podamos trabajar con los atributos privados de una clase.
• El ejemplo completo aquí.
PROGRAMACIÓN – Daniel Santiago 16
11.10. Visibilidad
• Las clases, con sus atributos y métodos, llevan en su definición modificadores que se utilizan para establecer la visibilidad de estos respecto a otras clases.
• Cualquier método de una clase puede acceder a cualquier atributo o método de la misma clase.
• Para que un método pueda acceder a atributos o métodos de otra clase tendremos en cuenta los modificadores de visibilidad.
PROGRAMACIÓN – Daniel Santiago 17
11.10. Visibilidad
• Hay cuatro modificadores de visibilidad en Java:– public: indica que el atributo o método al que
acompaña es accesible desde cualquier clase.– private: indica que el atributo o método al que
acompaña es accesible sólo desde la propia clase.– package: indica que el atributo o método al que
acompaña es accesible desde las clases que pertenezcan al mismo paquete.
– protected: indica que el atributo o método al que acompaña es accesible desde las clases que pertenezcan al mismo paquete, además de las clases que hereden de dicha clase.
PROGRAMACIÓN – Daniel Santiago 18
11.10. Visibilidad
• Si no ponemos ningún modificador, la visibilidad de un atributo o método será de tipo package.
• A las propias clases también se les pueden aplicar dos modificadores de los anteriores:
– public: la clase se podrá usar fuera del paquete al que pertenece.
– package (por defecto): la clase sólo se podrá usardentro del paquete al que pertenece.
PROGRAMACIÓN – Daniel Santiago 19
11.11. Modificador static
• Otro modificador que puede acompañar a variables, métodos o bloques de código es static.
• A continuación veremos las características de las variables y métodos que se declaran con la palabra reservada static.
PROGRAMACIÓN – Daniel Santiago 20
11.11. Modificador static
• Variable estática:
– Pertenece a la clase, no al objeto (instancia). Será compartida por todas las instancias de la clase.
– Se inicializa una única vez, al inicio de la ejecución del programa.
– No hace falta crear un objeto para acceder a la variable estática. Podemos acceder a ella a través de la propia clase con la siguiente sintaxis:
NombreClase.nombreVariable
PROGRAMACIÓN – Daniel Santiago 21
11.11. Modificador static
• Método estático:– Pertenece a la clase, no al objeto (instancia).– Un método estático sólo puede llamar a otros métodos
estáticos.– En un método estático no podemos usar las palabras
reservadas this o super.– No hace falta crear un objeto para acceder al método
estático. Podemos acceder a él a través de la propia clase con la siguiente sintaxis:
NombreClase.nombreMétodo– Por el motivo anterior es por el que el método main es
estático: es necesario para que el programa se ejecute, antes de crear ninguna instancia de ninguna clase.
PROGRAMACIÓN – Daniel Santiago 22
11.12. Ejemplo
• Observar qué valores imprime el siguiente programa:class Prueba {
static int var;Prueba(){
var++;}public static void main(String[] args) {
System.out.println("Valor de var = " + Prueba.var);Prueba p1 = new Prueba();System.out.println("Valor de var en p1 = " + p1.var);Prueba p2 = new Prueba();System.out.println("Valor de var en p2 = " + p2.var);System.out.println("Valor de var en p1 al haber creado p2 = " + p2.var);
}}
PROGRAMACIÓN – Daniel Santiago 23
11.12. Ejemplo
• Se puede ver cómo la variable var, al ser estática, es propia de la clase y no de cada instancia u objeto que creemos. Por tanto cada vez que un objeto modifica el valor de la variable, se modifica para todos los objetos creados.
PROGRAMACIÓN – Daniel Santiago 24