Ud 04
Ud 04
Ud 04
Programación orientada
a objetos con Java
ÍNDICE
4 4.1 4.2 4.3
La sobrecarga de métodos
Es la creación de Mismo nombre Java utiliza el número y
varios métodos con: tipo de parámetros para
Diferente lista de tipos de parámetros
seleccionar qué definición
de método ejecutar.
La programación orientada a objetos. Constructores y sobrecarga de métodos
El constructor
ES UN MÉTODO QUE SE INVOCA CUANDO SE CREA UNA
NUEVA INSTANCIA DE UNA CLASE POR MEDIO DE NEW.
C O M E N Z A R
Herencia y sobreescritura de métodos. Clases abstractas e interfaces
La herencia
ES UNA TÉCNICA QUE PERMITE QUE UNA CLASE HEREDE
LOS ATRIBUTOS Y MÉTODOS DE OTRA CLASE, LO QUE
GARANTIZA LA REUTILIZACIÓN DEL CÓDIGO.
CON LA HERENCIA
Las clases de la parte inferior heredan de las que están en la parte superior, y de
este modo van a disponer de todos los métodos y propiedades de su superclase.
Herencia y sobreescritura de métodos. Clases abstractas e interfaces
En Java
cada clase sólo puede tener una superclase.
HERENCIA SIMPLE
Aspectos fundamentales
DE LA HERENCIA
Carácter estructural
• Las subclases heredan las estructuras de sus clases base.
• Ejemplo: El empleado administrativo y el auxiliar
heredan de la clase empleado todas sus características
estructurales (nombre, dirección, DNI, edad…)
Herencia y sobreescritura de métodos. Clases abstractas e interfaces
Aspectos fundamentales
DE LA HERENCIA
Carácter estructural
Características de comportamiento
Ejemplo: Siguiendo nuestro ejemplo, si la clase Empleado
tiene el método “EscribirDatosPersonales” (nombre,
dirección, DNI, edad…), sus clases derivadas heredan este
mismo método.
Herencia y sobreescritura de métodos. Clases abstractas e interfaces
Aspectos fundamentales
DE LA HERENCIA
Carácter estructural
Características de comportamiento
Especialización
• La herencia se contempla como una especialización
desde el punto de vista del tipo. Según esto, puede ser
que alguno de los métodos que se definen en la
superclase tengan que cambiarse para reflejar las
nuevas características de la superclase.
• Ejemplo: En la clase Empleado, uno de los métodos
como puede ser “CalcularSalario” va a tener
diferente implementación según la clase (empleado
administrativo o auxiliar)
Herencia y sobreescritura de métodos. Clases abstractas e interfaces
Aspectos fundamentales
DE LA HERENCIA
Carácter estructural
Características de comportamiento
Especialización
Extensión
• Los objetos derivados de la clase base tienen más atributos
y servicios, por eso la herencia se puede contemplar como
una extensión de la lase base.
• Ejemplo: La clase “empleado administrativo” puede tener
todos los atributos y métodos de la clase “empleado” y,
además, incluir otros atributos y métodos, como métodos
que calculen temas de contabilidad, que no están
contemplados en la clase Empleado.
Herencia y sobreescritura de métodos. Clases abstractas e interfaces
Aspectos fundamentales
DE LA HERENCIA
Carácter estructural
Características de comportamiento
Especialización
Extensión
Generalización
Es el proceso inverso a la especialización. Consiste en
identificar todos los atributos iguales de un conjunto de
subclases para formar una clase base con dichos
atributos semejantes.
Herencia y sobreescritura de métodos. Clases abstractas e interfaces
La ocultación de información
SE REFIERE A LA OCULTACIÓN DE DECISIONES DE DISEÑO EN UN
PROGRAMA PARA PROTEGER OTRAS PARTES DEL CÓDIGO EN EL
CASO DE QUE SE PRODUZCAN CAMBIOS.
Especificaciones
CON LAS QUE SE CONSIGUE LA OCULTACIÓN DE INFORMACIÓN
class empleado {
DEFINICIONES DE CLASE // variables privadas (visibilidad por defecto)
CON LOS DISTINTOS char * nombre;
ESPECIFICADORES DE ACCESO char * DNI;
int edad;
Ejemplo float peso, altura;
protected:
// variables protegidas
char *direccion;
... ...
public:
// variables publicas
empleado(char *,char *, int, float, float, char *);
cambio_dirección(char *);
... ...};
class empleadoadministratvo : private empleado {
// variables privadas (visibilidad por defecto)
int dpto;
char * tipo_trabajo;
int salario;
char *tipo_formación;
... ...
public:
empleadoadministrativo(int, char *, int, char *);
cambio_dpto(int);
calculo_salario(int);
... ...};
Herencia y sobreescritura de métodos. Clases abstractas e interfaces
DEFINICIONES DE CLASE
CON LOS DISTINTOS
ESPECIFICADORES DE ACCESO
Ejemplo
Herencia y tipado
SE PUEDEN CONFUNDIR A VECES, PERO SON DISTINTOS.
EJEMPLO:
Siguiendo nuestro ejemplo, el “Empleado Administrativo”
es un subtipo de “Empleado” y puede realizar operaciones
definidas para la clase “Empleado”.
Clase Herencia
Implementación
Herencia y sobreescritura de métodos. Clases abstractas e interfaces
La herencia
se puede utilizar de dos formas:
1 Como una implementación del subtipado
EJEMPLO:
La herencia entre "Empleado"y "EmpleadoAdministrativo" es un reflejo del subtipado,
y la herencia entre "Elipse" y "Circulo" es una forma de compartir código común a
las dos clases porque el círculo no es formalmente un tipo de elipse.
Herencia y sobreescritura de métodos. Clases abstractas e interfaces
Recuerda que…
La herencia
ES UNA TÉCNICA QUE PERMITE QUE UNA CLASE HEREDE
LOS ATRIBUTOS Y MÉTODOS DE OTRA CLASE, LO QUE
GARANTIZA LA REUTILIZACIÓN DEL CÓDIGO.
Recuerda que…
Las clases de la parte inferior heredan de las que están en la parte superior, y de
este modo van a disponer de todos los métodos y propiedades de su superclase.
Herencia y sobreescritura de métodos. Clases abstractas e interfaces
Recuerda que…
En Java
cada clase sólo puede tener una superclase.
HERENCIA SIMPLE
LA HERENCIA
Sirve incluso para definir unos términos que tiene que cumplir una clase
para utilizarse en un momento determinado.
TIPOS:
1 Herencia de implementación
2 Herencia de interfaz
Herencia y sobreescritura de métodos. Clases abstractas e interfaces
HERENCIA
De implementación
ES LA MÁS SENCILLA.
Empleado
#nombre
#sueldo
…
+subirSueldo()
…
Para declarar
nuevos atributos o métodos
SE SUMARÁN A LOS ATRIBUTOS QUE HEREDE DE LA
SUPERCLASE, PERO ÉSTOS NO SON ACCESIBLES A
LAS INSTANCIAS DE LA CLASE PADRE, ÚNICAMENTE
LA CLASE HIJA DISPONE DE ELLOS.
HERENCIA
De interfaz
LAS CLASES SUPERIORES NO SON ESPECIALIZADAS POR OTRAS, SINO QUE
DECLARAN UN COMPORTAMIENTO QUE SE DEFINE EN LAS CLASES INFERIORES
DE LA JERARQUÍA, OFRECIENDO SU PROPIA DEFINICIÓN DEL MISMO.
I N T E R FAC E S
Formas de aplicación:
C L A S E S A B ST R AC TA S
Herencia y sobreescritura de métodos. Clases abstractas e interfaces
SUPERCLASE SUBCLASE
Una clase que se hereda La clase que hereda
Es una versión
especializada de una
superclase, hereda todas
las variables y métodos
definidos por la superclase
y agrega sus propios
elementos únicos.
Herencia y sobreescritura de métodos. Clases abstractas e interfaces
EN UNA JERARQUÍA
Es posible
QUE TANTO LAS SUPERCLASES COMO LAS SUBCLASES
TENGAN SUS PROPIOS CONSTRUCTORES.
La subclase
NECESITA QUE SE EJECUTE EL CONSTRUCTOR DE LA
SUPERCLASE ANTES QUE SU PROPIO CONSTRUCTOR PARA
INICIALIZAR LAS VARIABLES DE INSTANCIA HEREDADAS.
super(argumentos opcionales);
Herencia y sobreescritura de métodos. Clases abstractas e interfaces
L A PA L A B R A R E S E RVA D A
Super
PERMITE DIRECCIONAR LA CLASE
PADRE PARA ACCEDER EXPRESAMENTE
A SUS ATRIBUTOS O MÉTODOS.
La utilidad
DE LA PALABRA super
derivada ha declarado atributos con el mismo
nombre. Utilizamos la expresión:
super.nombre
Ejemplo
Fases de la creación
D E U N A N U E VA I N S TA N C I A M E D I A N T E U N C O N S T R U C TO R :
1 2 3
Llamada al
Asignación Ejucución del
constructor
de valores a resto del
de la clase
los atributos. constructor.
ascendente.
Herencia y sobreescritura de métodos. Clases abstractas e interfaces
Ocultación de atributos
PROCESO MEDIANTE EL CUAL SE DECLARAN
ATRIBUTOS CON EL MISMO NOMBRE QUE OTROS
DE LA CLASE PADRE.
• Para indicar qué método sobrescribe al otro utilizaremos la anotación @Override justo antes del
método.
Herencia y sobreescritura de métodos. Clases abstractas e interfaces
package gestion.empleados;
public class Ingeniero extends Empleado{
private int incentivos;
public Ingeniero(String nombre){
Ejemplo super(nombre);
}
public Ingeniero(String nombre, int añosTrabajando, int
sueldo) {
super(nombre, añosTrabajando, sueldo);
}
@Override
public void subirSueldo(int cantidad){
sueldo += cantidad;
incentivos += cantidad/10; // 10% extra en incentivos
}
@Override
public int getSueldo() {
return sueldo + incentivos;
}
}
Herencia y sobreescritura de métodos. Clases abstractas e interfaces
El método de la
clase específica
ES EL QUE ATIENDE SIEMPRE LA
LLAMADA DEL MÉTODO OCULTADO.
Siempre se invoca el
método de la subclase
S O B R E E S C R I T U R A
Cambiar la implementación de
un método estático O C U LTA C I Ó N
class ClasePadre{
public static void pruebaMetodoEstatico(){
System.out.println("LLamada a método estático "+ "de la clase padre");
}
Ejemplo }
class ClaseHija extends ClasePadre{
public static void pruebaMetodoEstatico(){
System.out.println("LLamada a método estático " + "de la clase hija");
}
}
public class PruebaHerencia {
public static void main(String[] args) {
ClasePadre.pruebaMetodoEstatico();
ClaseHija.pruebaMetodoEstatico();
}
}
El polimorfismo
HACE REFERENCIA A QUE EL MISMO COMPONENTE DEL LENGUAJE PUEDE
ASUMIR DIFERENTES TIPOS O MANIPULAR TIPOS DIFERENTES DE OBJETOS.
abstract
LOS MÉTODOS ABSTRACTOS NO CONTIENEN
IMPLEMENTACIÓN, SE DECLARA LA SIGNATURA
DEL MÉTODO TERMINADA EN PUNTO Y COMA.
Herencia forzada
LA OBLIGACIÓN DE ESCRIBIR UNA NUEVA
CLASE QUE HEREDE DE OTRA CUANDO SE
QUIERA USAR ESTA ÚLTIMA.
Ejemplo
Herencia de interfaz
LAS CLASES SUPERIORES NO SON ESPECIALIZADAS POR OTRAS, SINO QUE
DECLARAN UN COMPORTAMIENTO QUE SE DEFINE EN LAS CLASES INFERIORES
DE LA JERARQUÍA, OFRECIENDO SU PROPIA DEFINICIÓN DEL MISMO.
Formas de aplicación:
1 Interfaces
2 Clases abstractas
Herencia y sobreescritura de métodos. Clases abstractas e interfaces
Interfaz
ES SIMILAR A UNA CLASE PERO CON ALGUNAS PARTICULARIDADES:
Definición
DE UNA INTERFAZ
Ejemplo
Para utilizarlas
DEBEMOS DECLARAR CLASES QUE LAS IMPLEMENTEN
Utilizamos:
Ejemplo
public class ReproductorAudio implements Reproductor{
String cancion;
public String getNombreCancion(){
return this.cancion;
}
...
public void reproducir() {
...
} En este ejemplo vemos que en el caso de la
public void parar() { interfaz Reproductor podemos tener un
... reproductor de archivos de audio representado
} por la clase ReproductorAudio, que tiene que
...
implementar los métodos de la interfaz
Reproductor.
}
Herencia y sobreescritura de métodos. Clases abstractas e interfaces
Clases abstractas
SÍ QUE DEFINEN MÉTODOS Y PUEDEN CONTENER ATRIBUTOS.
Creación:
Ejemplo Podemos ver una clase abstracta que representa una fuente de datos. La
clase FuenteDeDatos no puede tener instancias, pero cuando se vaya a
utilizar esta clase vemos que se dispone de los métodos leerDato() y
hayDato(), y getDatosLeidos() que implementa.
C L A S E A B S T R A C TA
Utilización:
C O M E N Z A R
Clases anidadas, locales y anónimas. Diseño orientado a objetos
Clases internas
Como hemos visto anteriormente las clases internas son
clases anidadas dentro de otras clases o métodos. Son
recursos esenciales en el manejo de interfaces gráficas
en Java.
Vam os a
recordarlo
TIEMPO ESTIMADO DE LECTURA
10 min
https://drive.google.com/file/d/1725YKeWujG4TQyTmRHHWEZDOA9PiGMoG/preview
hemos
terminado
¡EXCELENTE TRABAJO!