T11 - Clases

24
Tema 11 Clases y objetos

Transcript of T11 - Clases

Page 1: T11 - Clases

Tema – 11Clases y objetos

Page 2: T11 - Clases

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

Page 3: T11 - Clases

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

Page 4: T11 - Clases

11.2. Definiciones: clase y objeto

• Ejemplo:

Clase Objetos

PROGRAMACIÓN – Daniel Santiago 4

MUEBLE

Silla

Mesa

Estantería

Page 5: T11 - Clases

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

Page 6: T11 - Clases

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

Page 7: T11 - Clases

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

Page 8: T11 - Clases

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

Page 9: T11 - Clases

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

Page 10: T11 - Clases

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

Page 11: T11 - Clases

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

Page 12: T11 - Clases

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

Page 13: T11 - Clases

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

Page 14: T11 - Clases

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

Page 15: T11 - Clases

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

Page 16: T11 - Clases

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

Page 17: T11 - Clases

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

Page 18: T11 - Clases

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

Page 19: T11 - Clases

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

Page 20: T11 - Clases

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

Page 21: T11 - Clases

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

Page 22: T11 - Clases

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

Page 23: T11 - Clases

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

Page 24: T11 - Clases

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