Docsity
Docsity

Prepara tus exámenes
Prepara tus exámenes

Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity


Consigue puntos base para descargar
Consigue puntos base para descargar

Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium


Orientación Universidad
Orientación Universidad


Conceptos de Orientación a Objetos en Java (II): Herencia y Polimorfismo, Diapositivas de Programación Java

La programación orientada a objetos en java y caracteristicas, apuntes de la asignatura

Tipo: Diapositivas

2018/2019

Subido el 03/12/2019

david-santos-bsh
david-santos-bsh 🇪🇸

9 documentos

1 / 51

Toggle sidebar

Esta página no es visible en la vista previa

¡No te pierdas las partes importantes!

bg1
Projecte de Programació
Projecte de Programació
Conceptos de Orientación
a Objetos en Java (II)
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19
pf1a
pf1b
pf1c
pf1d
pf1e
pf1f
pf20
pf21
pf22
pf23
pf24
pf25
pf26
pf27
pf28
pf29
pf2a
pf2b
pf2c
pf2d
pf2e
pf2f
pf30
pf31
pf32
pf33

Vista previa parcial del texto

¡Descarga Conceptos de Orientación a Objetos en Java (II): Herencia y Polimorfismo y más Diapositivas en PDF de Programación Java solo en Docsity!

Projecte de Programació

Conceptos de Orientación

a Objetos en Java (II)

Herencia

  • El origen del concepto de herencia está en la IA (taxonomías:

bases de conocimiento estructuradas en frames, creando

relaciones is-a para poder hacer inferencia)

  • Una clase hijo H hereda de la clase padre P sus atributos y

métodos. Diremos que H es subclase de P, y que P es

superclase de H. Se hereda TODO, no existe la herencia

“selectiva”

  • La clase H puede redefinir lo que ha heredado: tipos de los

atributos, implementación de los métodos. En Java no se

pueden renombrar atributos/métodos

Conceptos Orientación a Objetos

Ejemplo (1/4) public class Point { protected int x,y; public Point(int xval, int yval) { x = xval; // this.x = xval y = yval; // this.y = yval } public int getX() { return x; // return this.x } public boolean setX(int xval) { x = xval; return true; } public void dibujar() { … }

... } Conceptos Orientación a Objetos en Java

Herencia

this hace referencia
al objeto “actual”

Herencia

super hace referencia
al objeto del cual this
es hijo

Ejemplo (2/4) import java.awt.Color; public class ColorPoint extends Point { private Color c; public ColorPoint(int xval, int yval, Color cval) { super(xval, yval); c = cval; // this.c = cval } public Color getC() { return c; //return this.c } public boolean setC(Color cval) { c = cval; return true; }

... } Conceptos Orientación a Objetos en Java

Ejemplo (4/4) : en Java se puede redefinir operaciones ( override). Basta con definirla de nuevo con el mismo número de parámetros, tipos compatibles y tipo de retorno (si lo hay) compatible public class ColorPoint extends Point {

... // queremos que sólo se puedan mover los puntos // de ciertos colores public boolean setX(int xval) { if (condFiltro(c)) { super.setX(xval); } else { return false; } private boolean condFiltro(Color c) {…} ... } Conceptos Orientación a Objetos en Java

Herencia

Cláusulas static y final

  • Static: variable o método DE CLASE
    • Existe una sola copia para todos los objetos de la clase
    • Existen antes de instanciar el primer objeto
    • Se pueden acceder con el nombre de la clase: nombreClase.atributoStatic / nombreClase.metodoStatic
  • Final
    • Variable final: no se puede modificar (sólo se puede

asignar un valor en la constructora, y una única vez)

  • Método final: no se puede redefinir en descendientes de

la clase ( frozen de UML)

  • Clase final: no se puede heredar de ella
  • Para declarar constantes: public static final double PI = 3.14159265358979323846; Java

Herencia: mecanismo de Delegación

Si pretendemos simular que una clase hijo hereda de 2 o más

clases padre:

1. Se elige uno de los padres como “principal” (la clase más

relevante o compleja) y se hereda explícitamente de ella

2. Para cada una del resto de las clases padre, se agrega un

atributo privado de ese tipo en la clase hijo, que se instancia

en la constructora

3. Se replican todos los métodos accesibles de las clases padre

del punto anterior en la clase hijo (de forma que su interface

sea la misma que si hubiera heredado directamente de todas

las clases padre)

Conceptos Orientación a Objetos en Java

Herencia: mecanismo de Delegación

Ejemplo (1/2): queremos que una clase Profesor herede sus datos personales de la clase Persona y sus datos fiscales de otra clase PersonaFiscal public class Persona { private int dni; private String nombre;

... } public class PersonaFiscal { private String nif; … public String getNif() { return this.nif; } public boolean setNif (String x) {... } public void calcularTramoFiscal(float param1) {.. .} } Conceptos Orientación a Objetos en Java

Herencia

La herencia ofrece:

  • (^) Reusabilidad
  • (^) Extensibilidad
  • (^) Bajo coste de mantenimiento
  • (^) Un método para relacionar las clases de forma

semánticamente sensata

  • (^) Una forma de compartir código

Programar en OO es “ programar por diferencias ”:

un método hijo normalmente tendrá pocas líneas de código (lo

específico), mientras el método del padre implementa todo el

núcleo de código común y probablemente sea llamado por el

método del hijo ( super.metodo() )

Conceptos Orientación a Objetos en Java

Polimorfismo

  • Un nombre puede denotar entidades (objetos o métodos) de

tipos/clases diferentes: es posible usar valores de diferentes

tipos con una interficie uniforme

  • La misma entidad (objeto o método) puede tener más de un

tipo/clase

La ambigüedad que es consecuencia del polimorfismo se

resuelve en tiempo de compilación ( static binding) o en tiempo

de ejecución ( dynamic binding), según el LP

3 tipos:

1. Paramétrico: polimorfismo de clases/objetos -> genericidad

2. Ad-Hoc: polimorfismo de métodos -> sobrecarga/ override

3. De Subtipo o Inclusión: polimorfismo de objetos

Conceptos Orientación a Objetos

Polimorfismo Ad-Hoc

Binding:

  • (^) La sobrecarga de operadores/métodos de la misma clase no

ofrece ambigüedad, pues los tipos son diferentes -> se

resuelve en tiempo de compilación

Java: no se permite que dos métodos se diferencien sólo en

el tipo de lo que retornan (podría generar ambigüedades)

tipo1 g(t1 x, t2 y) {…} tipo2 g(t1 x, t2 y) {…} //Error tipo1 z = g(x,y); //Error incluso si no ambiguo

  • (^) La redefinición dentro de una subclase se tiene que resolver

en tiempo de ejecución

Conceptos Orientación a Objetos en Java

Polimorfismo de Subtipo

Es aquel en que con el mismo nombre de variable se pueden denotar
instancias de clases diferentes

Binding:

  • (^) La ambigüedad sobre la adecuación del uso de estas variables se
resuelve en tiempo de compilación (comprobación estática de tipos)
  • (^) La ambigüedad sobre qué objeto es el receptor del mensaje y qué
método hay que ejecutar, en tiempo de ejecución -- dynamic binding

Conceptos Orientación a Objetos en Java

Polimorfismo de Subtipo

Ejemplo (2/3):

public static void main(String args []) { Animal a; Gat ga = new Gat(); Gos go = new Gos(); a = ga; System.out.println(a.talk()); a = go; System.out.println(a.talk()); }

Qué se escribirá?

Conceptos Orientación a Objetos en Java

Polimorfismo de Subtipo

Ejemplo (3/3) :

public static void main(String args []) { Random rnd = new Random(); int i; Animal[] a = new Animal(100); for (i=0; i < 100; ++i) { a[i] = (rnd.nextInt(2) == 0)? new Gat() : new Gos(); } for (i=0; i < 100; ++i) { System.out.println(a[i].talk()); } }

Qué se escribirá?

Conceptos Orientación a Objetos en Java