Herencia

  • April 2020
  • PDF

This document was uploaded by user and they confirmed that they have the permission to share it. If you are author or own the copyright of this book, please report to us by using this DMCA report form. Report DMCA


Overview

Download & View Herencia as PDF for free.

More details

  • Words: 2,577
  • Pages: 25
Profesora Yasna Meza Hidalgo mailto: mailto: [email protected]

Orientación a objetos Clase Objeto Encapsulación Relaciones entre clases

Agosto 2005

Profesora Yasna Meza Hidalgo

Diapositiva 2

1

Suponga que se desea manejar información acerca de los empleados de una empresa. Se sabe que los empleados se dividen en Empleados Fijos y Empleados a Honorarios. Los Empleados fijos cuentan con un sueldo base y un número de cargas, por su parte los empleados a honorarios cuentan con un valor por hora y un número de horas trabajadas. Independiente del tipo de empleado que se trate cada uno de ellos, tiene un nombre, un RUT y una ciudad de residencia.

Agosto 2005

Profesora Yasna Meza Hidalgo

Diapositiva 3

Cada empleado tiene un RUT, un nombre y una ciudad de residencia.

EMPLEADO

public class Empleado { /* Definición de atributos */ private String RUT; private String nombre; private String ciudad;

- RUT - Nombre - Ciudad + + + +

RUT() nombre() ciudad() imprimir()

Agosto 2005

/* Definición de métodos */

}

Profesora Yasna Meza Hidalgo

Diapositiva 4

2

Cada empleado fijo tiene los antecedentes comunes a todo empleado, además, de un sueldo fijo y un número de cargas. EMPLEADO FIJO -

RUT Nombre Ciudad Sueldo_Fijo Numero_Cargas

+ + + + + +

RUT() nombre() ciudad() sueldo() cargas() imprimir()

Agosto 2005

public class EmpleadoFijo { /* Definición de atributos */ private String RUT; private String nombre; private String ciudad; private long sueldo_fijo; private int numero_cargas; /* Definición de métodos */

}

Profesora Yasna Meza Hidalgo

Diapositiva 5

Cada empleado a honorarios tiene los antecedentes comunes a todo empleado, además, de un valor cancelado por hora y un número de horas trabajadas. EMPLEADO HONORARIO -

RUT Nombre Ciudad Valor_Hora Numero_Horas

+ + + + + +

RUT() nombre() ciudad() valorhora() horas() imprimir()

Agosto 2005

public class EmpleadoHonorario { /* Definición de atributos */ private String RUT; private String nombre; private String ciudad; private long valor_hora; private int numero_horas; /* Definición de métodos */

}

Profesora Yasna Meza Hidalgo

Diapositiva 6

3

De esta forma se tienen tres clases definidas EMPLEADO - RUT - Nombre - Ciudad + + + +

RUT() nombre() ciudad() imprimir()

Agosto 2005

EMPLEADO FIJO -

RUT Nombre Ciudad Sueldo_Fijo Numero_Cargas

+ + + + + +

RUT() nombre() ciudad() sueldo() cargas() imprimir()

EMPLEADO HONORARIO -

RUT Nombre Ciudad Valor_Hora Numero_Horas

+ + + + + +

RUT() nombre() ciudad() valorhora() horas() imprimir()

Diapositiva 7

Profesora Yasna Meza Hidalgo

Información REPETIDA, que es común a todos los elementos. EMPLEADO - RUT - Nombre - Ciudad + + + +

RUT() nombre() ciudad() imprimir()

Agosto 2005

EMPLEADO FIJO -

RUT Nombre Ciudad Sueldo_Fijo Numero_Cargas

+ + + + + +

RUT() nombre() ciudad() sueldo() cargas() imprimir()

Profesora Yasna Meza Hidalgo

EMPLEADO HONORARIO -

RUT Nombre Ciudad Valor_Hora Numero_Horas

+ + + + + +

RUT() nombre() ciudad() valorhora() horas() imprimir()

Diapositiva 8

4

EMPLEADO - RUT - Nombre - Ciudad

Superclase

+ + + +

Subclase 1

RUT() nombre() ciudad() imprimir()

Subclase 2

EMPLEADO FIJO

EMPLEADO HONORARIO

- Sueldo_Fijo - Numero_Cargas

- Valor_Hora - Numero_Horas

+ sueldo() + cargas()

+ valorhora() + horas()

Agosto 2005

Profesora Yasna Meza Hidalgo

Diapositiva 9

Permite que las clases puedan heredar atributos y operaciones de otras clases. FIGURA centro

Superclase respecto de CUADRADO Y RECTÁNGULO

Superclase

Dibujar()

CUADRILATERO

Subclases de Figura

… Dibujar()

CUADRADO



Redefine operación dibujar

la

Dibujar()

RECTÁNGULO





Perímetro()

Área()

Agosto 2005

CÍRCULO

Hereda el atributo centro y el método Dibujar() y agrega un método que calcula el área

Profesora Yasna Meza Hidalgo

Diapositiva 10

5

¿Cómo se define una subclase en Java? public class <nombre hija> extends <nombre padre> { … }

Agosto 2005

Palabra reservada que representa la relación de herencia entre clases

Profesora Yasna Meza Hidalgo

¿Qué pasa con la visibilidad de los atributos y métodos definidos en la clase padre?

Agosto 2005

Diapositiva 11

Los atributos definidos como privados NO SON VISIBLES dentro de las subclases. Las subclases los heredan, pero NO PUEDEN ACCEDER a ellos.

Profesora Yasna Meza Hidalgo

Diapositiva 12

6

Entonces, cuando se quiera crear un objeto de la clase Empleado Fijo por ejemplo, ¿Cómo se va a acceder a los atributos de la clase Empleado?

Agosto 2005

Para definir el constructor de la clase EmpleadoFijo se DEBE hacer uso del constructor de la clase Empleado que se haya definido.

Profesora Yasna Meza Hidalgo

Diapositiva 13

¿Cómo se hace uso del constructor de una clase padre en una clase hija?, porque el siguiente código marca un error …

public class EmpleadoFijo extends Empleado { /* Definición de atributos */ … /* Definición de constructor */ public EmpleadoFijo(String n_rut, String n_nombre, String n_ciudad, long n_sueldo, int n_cargas) {

RUT = n_rut; nombre = n_nombre; ciudad = n_ciudad; sueldo_fijo = n_sueldo; numero_cargas = n_cargas; } }

Agosto 2005

Profesora Yasna Meza Hidalgo

Diapositiva 14

7

public class Empleado { /* Definición de atributos */ … /* Definición de constructor */ public Empleado(String n_rut, String n_nombre, String n_ciudad) { RUT = n_rut; nombre = n_nombre; ciudad = n_ciudad; } }

Forma

de

invocar

al

public class EmpleadoFijo extends Empleado constructor de la clase { padre /* Definición de atributos */ … /* Definición de constructor */ public EmpleadoFijo(String n_rut, String n_nombre, String n_ciudad, long n_sueldo, int n_cargas) {

super(n_rut, n_nombre, n_ciudad); sueldo_fijo = n_sueldo; numero_cargas = n_cargas; } }

Agosto 2005

Profesora Yasna Meza Hidalgo

Sin embargo, existe un tipo de visibilidad que permite tener visibilidad de los atributos en las clases hijas.

Agosto 2005

Profesora Yasna Meza Hidalgo

Diapositiva 15

¿Cuál es ese tipo de visibilidad?

Diapositiva 16

8

public class Empleado { /* Definición de atributos */ protected String RUT, nombre, ciudad; }

Ahora es acceso atributos.

válido el a estos

public class EmpleadoFijo extends Empleado { /* Definición de atributos */ … /* Definición de constructor */ public EmpleadoFijo(String n_rut, String n_nombre, String n_ciudad, long n_sueldo, int n_cargas) {

RUT = n_rut; nombre = n_nombre; ciudad = n_ciudad; sueldo_fijo = n_sueldo; numero_cargas = n_cargas; } }

Agosto 2005

Profesora Yasna Meza Hidalgo

Diapositiva 17

• C y D son subclases de B. • B es superclase de C y D • A y B son subclases de Object

Object

A

B

C

Agosto 2005

D

Profesora Yasna Meza Hidalgo

Diapositiva 18

9

Java es un lenguaje fuertemente tipado

¿Y eso qué significa …?

Agosto 2005

Realiza la comprobación de tipos en tiempo de compilación

Profesora Yasna Meza Hidalgo

Diapositiva 19

Conversión implícita Conversión explícita

float saldo = 200; /* Es posible asignarle un entero */ int codigo = 3.7; /* ERROR*/

Figura f; Cuadrado c = new Cuadrado(); f = c;

Agosto 2005

Profesora Yasna Meza Hidalgo

Diapositiva 20

10

Conversión implícita Conversión explícita

int i = 200; long l = (long) i; También existe el caso de la conversión de referencias (cast-down). Sin embargo, esto no siempre es válido …

Agosto 2005

Profesora Yasna Meza Hidalgo

Diapositiva 21

Figura[] figuras = new Figura[30]; … Rectangulo r = (Rectangulo) figuras[i]; ERROR En tiempo de ejecución

Cuenta c = (Cuenta) figuras[i];

ERROR En tiempo de compilación

Agosto 2005

Profesora Yasna Meza Hidalgo

Diapositiva 22

11

Cuando un método de la subclase tiene la misma signatura y valor de retorno que un método de la superclase se dice que la subclase lo está REDEFINIENDO.

Los atributos no se puede redefinir, sólo OCULTAN (el campo de la superclase todavía existe pero no se puede acceder).

Agosto 2005

Profesora Yasna Meza Hidalgo

Diapositiva 23

POLÍGONO - NumVertices - Vertices[] + numVertices() + Vertice(int) + perímetro()

RECTÁNGULO - Lado1 - Lado2 + perímetro()

Agosto 2005

Profesora Yasna Meza Hidalgo

Diapositiva 24

12

public class Poligono { private Punto[] vértices; private int numVertices; ... public float Perimetro() { float perimetro = 0 ; Punto anterior = vertices[0]; Punto actual ; int ultimo = numVertices – 1; for(int i=1 ; i <= ultimo ; i++) { actual = vertices[i]; perimetro+= anterior.distancia(actual) ; anterior = actual ; } /* Distancia del último con el primero */ return ( perímetro+=vértices[ultimo.distancia(vértices[0])) } } Agosto 2005

Profesora Yasna Meza Hidalgo

public class Rectangulo extends Poligono { private double lado1; private double lado2; ... public float Perimetro() { return (2*lado1 + 2*lado2) ; } }

Agosto 2005

Profesora Yasna Meza Hidalgo

Diapositiva 25

Redefine método Perímetro()

Diapositiva 26

13

Poligono p; /* Puede referenciar a un objeto Polígono o Rectángulo */ Rectangulo r = new Rectangulo(); p = r; float peri = p.Perimetro(); ¿Cuál de los dos métodos perimetro() invocará?

Agosto 2005

Profesora Yasna Meza Hidalgo

Diapositiva 27

¿Cuál es la public class Punto interpretación { de la llamada private int x, y; super.borrar()? public void borrar() {} } public class Píxel extends Punto { … public void borrar() { super.borrar(); /* Borra el punto */ color = null; } }

Agosto 2005

Profesora Yasna Meza Hidalgo

Diapositiva 28

14

! " public class Uno { public int test() { return 1;} public int result1() { return this.test(); } } public class Dos extends Uno { public int test() { return 2;} } public class Tres extends Dos { public int result2() { return this.result1();} public int result3() { return super.test();} } public class Cuatro extends Tres { Public int test() { return 4; } }

Agosto 2005

Profesora Yasna Meza Hidalgo

! "

Diapositiva 29

¿Qué imprime?

public class PruebaSuperThis { public static void main(String args[]) { Uno obj1 = new Uno(); Dos obj2 = new Dos(); Tres obj3 = new Tres(); Cuatro obj4 = new Cuatro(); System.out.println(“obj1.test = “+obj1.test()); System.out.println(“obj1.result1 = “+obj1.result1()); System.out.println(“obj2.test = “+obj2.test()); System.out.println(“obj2.result1 = “+obj3.result1()); System.out.println(“obj3.test = “+obj3.test()); System.out.println(“obj4.result1 = “+obj4.result1()); System.out.println(“obj3.result2 = “+obj3.result2()); System.out.println(“obj4.result2 = “+obj4.result2()); System.out.println(“obj3.result3 = “+obj3.result3()); System.out.println(“obj4.result3 = “+obj4.result3()); } } Agosto 2005

Profesora Yasna Meza Hidalgo

Diapositiva 30

15

FIGURA centro

Superclase

Dibujar() Área() Perímtetro()

Superclase respecto de CUADRADO Y RECTÁNGULO

CUADRILATERO

Dibujar()

CUADRADO



Redefine operación dibujar

la

Dibujar()

RECTÁNGULO





Perímetro()

Área()

Agosto 2005

CÍRCULO

Subclases de Figura



Hereda el atributo centro y el método Dibujar() e implementa el método que calcula el área

Profesora Yasna Meza Hidalgo

Diapositiva 31

¿Podría implementar el método Área() y Perímetro() en la clase Figura?

¿Y en la clase Cuadrilátero?

Agosto 2005

Profesora Yasna Meza Hidalgo

Diapositiva 32

16

Del ejemplo anterior se tiene un nuevo concepto ..... Clases Abstractas Entonces ... ¿Qué son las clases abstractas?

Agosto 2005

Profesora Yasna Meza Hidalgo

Diapositiva 33

#$ Se fija un conjunto de métodos y atributos que permitan modelar un cierto concepto, que será refinado mediante la herencia. Un método abstracto cuenta con las siguientes características: • Sólo cuenta con la declaración y no poseen cuerpo de definición • La implementación es específica de cada subclase

Agosto 2005

Profesora Yasna Meza Hidalgo

Diapositiva 34

17

FIGURA - centro + mostrarCentro() + area() + perimetro()

public abstract class Figura { public Punto centro; public void mostrarCentro() { System.out.println(centro.Imprimir()); } public abstract double area(); // No tiene implementación public abstract double perimetro(); // No tiene implementación }

public class Circulo extends Figura { static final double PI = 3.141516; protected int radio; public Circulo(int r) // Constructor { radio = r; } public double area() { return (PI*radio*radio); } public double perimetro() { return (2*PI*radio); } }

Agosto 2005

CÍRCULO * radio

TRIÁNGULO * base * altura

public class Triangulo extends Figura { protected int base, altura; // Constructor public Triangulo(int x_base, int x_altura) { base = x_base; altura = x_altura; } public double area() { return (base*altura/2); } public double perimetro() { ..... } }

Profesora Yasna Meza Hidalgo

Diapositiva 35

#$ Las subclases de una clase abstracta DEBEN: Sobreescribir todos los métodos abstractos de la superclase, o bien, ser declaradas como clases abstractas.

Una abstracta no instanciarse

clase puede

Agosto 2005

• Clases cuya descripción es incompleta • No proporcionan la implementación de todos sus métodos (éstos se declaran como abstract).

• Una clase con un método abstracto DEBE declararse como clase abstracta, pero ..... Una clase puede declararse como abstracta aunque no tenga ningún método abstracto.

Profesora Yasna Meza Hidalgo

Diapositiva 36

18

$ public class usaClaseAbstracta { public static void main(String args[]) { Figura figura; Triangulo triangulo; Circulo circulo;

ERROR!!! No se puede instanciar una clase abstracta

double area_triangulo, area_circulo; figura = new Figura(); triangulo = new Triangulo(29,6); circulo = new Circulo(7); triangulo.mostrarCentro(); circulo.mostrarCentro();

/* Muestra el centro del Triángulo */ /* Muestra el centro del círculo */

/* Calcula las áreas del triángulo y círculo */ area_triangulo = triangulo.area(); figura = circulo; area_circulo = figura.area(); } }

Agosto 2005

Profesora Yasna Meza Hidalgo

%

Diapositiva 37

&

Una interfaz es un conjunto de declaraciones de funciones. • Una interfaz SÓLO DECLARA COMPORTAMIENTO. • Si una clase implementa (implements) una interfaz, debe definir todas las funciones especificadas por la interfaz.. • Permite simular algunos aspectos de la herencia múltiple.

Agosto 2005

Profesora Yasna Meza Hidalgo

Diapositiva 38

19

'

%

interface NombreInterfaz { static final tipo NOMBRECONSTANTE = valor; ........ public tipoDevuelto nombreMetodo([lista de parámetros]); } class nombreClase implements NombreInterfaz1[, NombreInterfaz2,...] { // Declaración atributos y métodos de la clase }

Agosto 2005

Profesora Yasna Meza Hidalgo

%

Diapositiva 39

&

interface Nombrable { static final boolean CIERTO = true; public void mostrarNombre (); } public class Elemento implements Nombrable { String nombre; public Elemento(String nom) { nombre = nom; } /* Obligatorio implementar método mostrarNombre porque se implementa la interfaz Nombrable */ public void mostrarNombre() { consola.IO_println(“Nombre = “+nombre); if (CIERTO) consola.IO_println(“Constante CIERTO del interfaz”); } }

Agosto 2005

Profesora Yasna Meza Hidalgo

Diapositiva 40

20

Proviene del griego polymorphos (“muchas formas”). A nivel conceptual, se entiende como la posibilidad de emplear la misma expresión para denotar operaciones diferentes.

•Ejemplo.

Imprimir(texto) Imprimir(gráfico)

Agosto 2005

Profesora Yasna Meza Hidalgo



Diapositiva 41

En la POO el polimorfismo manifiesta de varias formas: • Objetos polimórficos • Sobrecarga de funciones • Anulación de funciones • Funciones polimórficas argumentos polimórficos)

Agosto 2005

Profesora Yasna Meza Hidalgo

se

(de

Diapositiva 42

21

En muchas ocasiones cuando se utiliza Herencia, es posible tener una familia de clases que comparten una interfaz común. ¿En serio? …..

Agosto 2005

Profesora Yasna Meza Hidalgo

public abstract class Mamifero

Diapositiva 43

Una clase ABSTRACTA

{ private int numero_patas; public abstract void mover() ; } ‹‹MAMÍFERO›› - Numero_patas + mover()

Agosto 2005

Profesora Yasna Meza Hidalgo

Diapositiva 44

22

class Gato extends Mamifero { public void mover() { System.out.println(“Un gato moviéndose …."); } } ‹‹MAMÍFERO›› - Numero_patas + mover()

GATO + mover()

Agosto 2005

Profesora Yasna Meza Hidalgo

Diapositiva 45

class Perro extends Mamifero { public void mover() { System.out.println(“Un perro moviéndose …."); } } ‹‹MAMÍFERO›› - Numero_patas + mover()

Agosto 2005

GATO

PERRO

+ mover()

+ mover()

Profesora Yasna Meza Hidalgo

Diapositiva 46

23

public class Polimorfismo { public static void muevete(Mamifero m) { m.mover(); } public static void main(String args[]) { Gato lindo = new Gato(); Perro feo = new Perro(); muevete(lindo); muevete(feo); } }

Agosto 2005

( $

Profesora Yasna Meza Hidalgo

Diapositiva 47

)

public class Sumar { public float suma(float a, float b) { System.out.println("Estoy sumando reales"); return a+b; } public int suma(int a, int b) { System.out.println("Estoy sumando enteros"); return a+b; } public static void main(String args[]) { float x = 1, float y = 2; int v = 3, int w = 5; System.out.println(suma(x,y)); System.out.println(suma(v,w)); } }

Agosto 2005

Profesora Yasna Meza Hidalgo

Diapositiva 48

24

( $

) ¿La sobrecarga de métodos se puede aplicar a los constructores?

Agosto 2005

Profesora Yasna Meza Hidalgo

Diapositiva 49

25

Related Documents

Herencia
November 2019 39
Herencia
April 2020 26
Herencia Mendeliana
November 2019 32
16-herencia
June 2020 5
Herencia Atipica
November 2019 19
Herencia Cultural
May 2020 27