La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Medio de tele-comunicación

Presentaciones similares


Presentación del tema: "Medio de tele-comunicación"— Transcripción de la presentación:

1 Herencia, CONSTRUCTORES, clases y métodos abstractos, interfaces y Polimorfismo

2 Medio de tele-comunicación
Cosa Herencia en el mundo real Medio de tele-comunicación Medio de transporte Objeto de oficina Coche Vehiculo aéreo

3 Herencia Objetivos: a) Definir el concepto de herencia entre clases
b) Interpretar el código fuente de una aplicación Java donde aparecen clases relacionadas mediante la herencia. c) Construir una aplicación Java sencilla, convenientemente especificada, que haga uso de la herencia entre clases.

4 Definición Herencia La herencia es una propiedad que permite la declaración de nuevas clases a partir de otras ya existentes. Esto proporciona una de las ventajas principales de la Programación Orientada a Objetos: la reutilización de código previamente desarrollado ya que permite a una clase más específica incorporar la estructura y comportamiento de una clase más general.

5 Herencia En otras palabras:
La idea básica es poder crear clases basadas en clases ya existentes. Cuando heredamos de una clase existente, estamos re-usando código (métodos y campos). Podemos agregar métodos y variables para adaptar la clase a la nueva situación.

6 Herencia La herencia la identificamos cuando encontramos la relación es-un entre la nueva clase y la ya existente. Un estudiante es una persona. La clase ya existente se le llama superclase, clase base , o clase padre. A la nueva clase se le llama subclase, clase derivada, o clase hija.

7 Herencia De hecho, en Java, todas las clases deben derivar de alguna clase. (Object) Cuando una clase B se construye a partir de otra A mediante la herencia, la clase B hereda todos los atributos, métodos y clases internas de la clase A. Además la clase B puede redefinir los componentes heredados y añadir atributos, métodos y clases internas específicas

8 Herencia Para indicar que la clase B (clase descendiente, derivada, hija o subclase) hereda de la clase A (clase ascendiente, heredada, padre, base o superclase) se emplea la palabra reservada extends en la cabecera de la declaración de la clase descendiente. La sintaxis es la siguiente: public class ClaseB extends ClaseA { // Declaración de atributos y métodos específicos de ClaseB // y/o re declaración de componentes heredados }

9 HERENCIA Clases y superclases

10 Herencia en Java Java permite definir una clase como subclase de una clase padre. class clase_hija extends clase_padre { }

11 Herencia

12 Herencia En este diagrama:
La clase Empleado es la superclase de Director, Comercial e Informático. Las clases Director, Comercial e Informático son subclases de la clase Empleado. La clase Director es la superclase de Ejecutivo. La clase Ejecutivo es la subclase de Director. Las subclases heredan todos los métodos y atributos de sus superclases. Por tanto, al definir una subclase, esta tiene automáticamente el mismo comportamiento que la superclase que hereda. Y se debe tener en cuenta que esta herencia sube en la jerarquía hasta llegar a la cumbre.

13 Herencia Existe una raíz en esta jerarquía, que es la clase Object. Todas las clases creadas heredan las características y el comportamiento de Object.

14 Herencia ¿Cómo se define la herencia en Java?
Para indicar que una clase hereda de otra, se utiliza la palabra reservada extends. Siguiendo el ejemplo del gráfico anterior, deberíamos definir las clases de la siguiente manera: class Empleado { } class Director extends Empleado { } class Comercial extends Empleado { } class Informatico extends Empleado { } class Ejecutivo extends Director { }

15 Constructores El objetivo del constructor es el de inicializar un objeto cuando éste es creado. Asignaremos los valores iniciales así como los procesos que ésta clase deba realizar. Se utiliza para crear tablas de métodos virtuales y poder así desarrollar el polimorfismo, una de las herramientas de la programación orientada a objetos (POO). Al utilizar un constructor, el compilador determina cual de los objetos va a responder al mensaje (virtual) que hemos creado. Tiene un tipo de acceso, un nombre y un paréntesis. En java es un método especial dentro de una clase, que se llama automáticamente cada vez que se crea un objeto de esa clase.

16 Constructores Un constructor se llama igual que la clase.
No devuelve nada, ni siquiera void. Pueden existir varios, pero siguiendo las reglas de la sobrecarga de funciones. De entre los que existan, tan sólo uno se ejecutará al crear un objeto de la clase. Dentro del código de un constructor generalmente suele existir inicializaciones de variables y objetos, para conseguir que el objeto sea creado con dichos valores iniciales.

17 Constructores Constructor por defecto
Un constructor por defecto es un constructor sin parámetros que no hace nada. Sin embargo será invocado cada vez que se construya un objeto sin especificar ningún argumento, en cuyo caso el objeto será iniciado con los valores predeterminados por el sistema (los atributos numéricos a ceros, los alfanuméricos a nulos, y las referencias a objetos a null). Para definir los constructores se emplea la siguiente sintaxis: [modifVisibilidad] nombreConstructor (listaParámetros) [throws listaExcepciones] { }

18 Constructores - Ejemplo
public class Arboles { public Arboles() { System.out.println("Un árbol genérico"); } public Arboles(String tipo) { System.out.println("Un árbol tipo " + tipo); } public Arboles(int altura) { System.out.println("Un árbol de " + altura + " metros"); } public Arboles(int altura,String tipo) { System.out.println("Un " + tipo + " de " + altura + " metros"); } public static void main(String args[]) { Arboles arbol1 = new Arboles(4); Arboles arbol2 = new Arboles("Roble"); Arboles arbol3 = new Arboles(); Arboles arbol4 = new Arboles(5,"Pino"); } }

19 Constructores y Herencia
Cuando se declara un objeto de una clase derivada, se ejecutan los constructores siguiendo el orden de derivación, es decir, primero el de la clase base, y después los constructores de las clases derivadas de arriba a abajo. Para pasar parámetros al constructor de la clase padre: super (para1, para2, ..., paraN)

20 Ejemplo de código class Humano { protected String nombre;
protected String apellido; public Humano(String nombre, String apellido) { this.nombre = nombre; this.apellido = apellido; } /* el this es un apuntador al objeto mismo. Y se emplea para evitar ambigüedades, porque en el método constructor que usas sirve para diferenciar el atributo de la clase, del atributo que entra como parámetro. */ public String nombreCompleto() { return this.apellido + ", " + this.nombre; } public String identificacion() { return this.nombreCompleto(); } }

21 CONSTRUCTORES Y Herencia
class Ciudadano extends Humano { protected String documento; public Ciudadano(String nombre,String apellido, String documento) { super(nombre,apellido); this.documento = documento; } //super( ) llama al constructor de la clase de la que se hereda (extends). public String identificacion() { return super.identificacion() + ", documento: " + this.documento; } public String getDocumento(){ return documento; }

22 CONSTRUCTORES Y Herencia
public class Herencia { public static void main (String args[ ]) Humano a = new Humano("Emilio”,"Rosso"); Ciudadano b = new Ciudadano("Emilio","Rosso"," "); System.out.println(a.nombreCompleto()); System.out.println(b.identificacion()); System.out.println(b.getDocumento()); // System.out.println(a.getDocumento()); /* no es posible acceder a un miembro de la clase hija usando una referencia u objeto de la clase padre*/ }

23 Herencia Y CONSTRUCTORES

24 Clases y Métodos Abstractos
Una clase abstracta (abstract) es una clase de la que no se pueden crear objetos. Su utilidad es permitir que otras clases deriven de ella, proporcionándoles un marco o modelo que deben seguir y algunos métodos de utilidad general. En otras palabras una clase abstracta define una interfaz común para los diversos miembros de una jerarquía de clases. La clase abstracta contiene métodos que se definirán en las subclases. Todas las clases de la jerarquía pueden usar la misma interfaz gracias al polimorfismo.

25 Clases y Métodos Abstractos
Una clase abstracta puede tener métodos declarados como abstractos, en cuyo caso no se da definición del método. Si una clase tiene algún método abstracto es obligatorio que la clase sea abstracta. En cualquier sub-clase este método deberá ser redefinido, o bien volver a declararse como abstracto (el método y la sub-clase). Una clase abstracta puede tener métodos que no son abstractos. Aunque no se puedan crear objetos de esta clase, sus sub-clases heredarán el método completamente a punto para ser utilizado. Como los métodos static no pueden ser redefinidos, un método abstract no puede ser static.

26 Clases Abstractas Si una clase contiene al menos un método abstracto, entonces es una clase abstracta. Una clase abstracta es una clase de la que no se pueden crear objetos, pero puede ser utilizada como clase padre para otras clases. Declaración: abstract class NombreClase { }

27 Clases y métodos Abstractos
Algunas veces, una clase que se ha definido representa un concepto abstracto y como tal, no debe ser ejemplarizado. Por ejemplo, la comida en la vida real. ¿Has visto algún ejemplar de comida? No. Lo que has visto son ejemplares de manzanas, pan, y chocolate. Comida representa un concepto abstracto de cosas que son comestibles. No tiene sentido que exista un ejemplar de comida.

28 Clases y métodos Abstractos
Similarmente en la programación orientada a objetos, se podría modelar conceptos abstractos pero no querer que se creen ejemplares de ellos. Por ejemplo, la clase Number del paquete java.lang representa el concepto abstracto de número. Tiene sentido modelar números en un programa, pero no tiene sentido crear un objeto genérico de números.

29 Clases y métodos Abstractos
La clase Number sólo tiene sentido como superclase de otras clases como Integer y Float que implementan números de tipos específicos. Las clases como Number, que implementan conceptos abstractos y no deben ser ejemplarizadas, son llamadas clases abstractas. Una clase abstracta es una clase que sólo puede tener subclases no puede ser ejemplarizada.

30 Clases y métodos Abstractos
Para declarar que una clase es un clase abstracta, se utiliza la palabra clave abstract en la declaración de la clase. abstract class Number { . . . } Si se intenta ejemplarizar una clase abstracta, el compilador mostrará un error similar a este y no compilará el programa: AbstractTest.java:6: class AbstractTest is an abstract class. It can't be instantiated. new AbstractTest(); ^ 1 error

31 Clases y métodos Abstractos

32 Interfaces ¿Qué es una interfaz?
Una interfaz es un conjunto de constantes y métodos abstractos. Cuando una clase declara una lista de interfaces mediante la cláusula implements hereda todas las constantes definidas en la interfaz y se compromete a redefinir todos los métodos de la interfaz ya que estos métodos son abstractos (no tienen implementación o cuerpo). Una interfaz da una solución a los problemas que le plantea a Java no contar con herencia múltiple.

33 INTERFACES Las interfaces no pueden ser instanciadas.
Podemos definir interfaces o usar interfaces ya existentes. Como las interfaces solo definen métodos abstractos posteriormente tendremos que implementar estos métodos en nuestra clase a la cual va a definir mediante la opción de implements. Se deben implementar todos los métodos que aparezcan en esa interfaz, no se pueden elegir algunos de ellos o solamente los que necesitamos.

34 INTERFACES Se debe utilizar la misma firma de método de la interfaz.
Después de tener una clase que ha implementado una interfaz las subclases de esa clase heredan esos nuevos métodos y pueden sobreescribirlos o sobrecargarlos como cualquier otro método que tenga esa clase. Una clase solamente puede derivar extends de una clase base, pero puede implementar varias interfaces. Los nombres de las interfaces se colocan separados por una coma después de la palabra reservada implements.

35 Diferencias entre un interfaz y una clase abstracta
Una interfaz solo contiene definiciones de métodos abstractos y constantes, mientras que una clase abstracta puede incluir métodos implementados y no implementados o abstractos, miembros, datos constantes y otros no constantes.

36 INTERFACES Declaración de una interfaz.
La sintaxis general es la siguiente: [ public] interface NombreInterface [ extends ListadeSuperInterfaces] Utilizando el modificador de interfaz public se consigue que la interfaz sea accesible por cualquier clase en cualquier paquete, de lo contrario la interfaz sólo será accesible por las clases definidas en el mismo paquete que la interfaz. A diferencia de las clases, que únicamente pueden heredar de una superclase, las interfaces pueden heredar de varias interfaces mediante la cláusula extends.

37 interfaces Declaración de una interfaz. La lista de superinterfaces de las que hereda se enumera mediante los nombres de las mismas separados por comas y precedidos por la palabra reservada extends. Por ejemplo: public interface Operable extends OperableAritmético, OperableLógico En este caso, la interfaz Operable heredaría todas las constantes y métodos de las interfaces OperableAritmético y OperableLógico, pudiendo redefinirse en la interface Operable si fuera necesario.

38 INTERFACES Cuerpo de la interfaz. En el cuerpo de la interfaz se declaran los métodos y las constantes de la interfaz. Todos los métodos declarados en el cuerpo de la interfaz son públicos y abstractos (public y abstract) sin que sea necesario declararlos de este modo explícitamente.

39 INTERFACES Cuerpo de la interfaz. Todos los atributos declarados en el cuerpo de la interfaz, si existen, son final, public y static implícitamente. Es decir, son constantes. public interface OperableAritmetico { double PI=3.14; double suma(); double resta(); }

40 Interfaces Definición de una interfaz: interface Nave {
/*public static final int VIDA = 100; por definición todos los atributos de una interfaz son públicos y estáticos por ese motivo es redundante aunque si se escribe no genera ningún tipo de error */ final int VIDA = 100; public abstract void moverPosicion (int x, int y); public abstract void disparar(); ..... }

41 INTERFACES Uso de la interfaz definida:
public class NaveJugador implements Nave { public void moverPosicion (int x, int y) { //Implementación del método } public void disparar() //Implementación del método } .....

42 OTRO Ejemplo de Interfaz
public interface Figura { abstract double area(); abstract double perimetro(); } public class Circulo implements Figura { private double radio; private static double PI=3.1416; public double area() { return PI*radio*radio; } public double perimetro() { return 2*PI*radio; } public class Cuadrado implements Figura { private double lado; public double area() { return lado*lado; } public double perimetro() { return 4*lado; }

43 OTRO Ejemplo de Interfaz
public interface OperableAritmetico { double PI=3.14; double suma(); double resta(); } En este caso, cualquier clase que implemente la interface OperableAritmetico, se compromete a redefinir los métodos suma() y resta(); y hereda la constante PI.

44 OTRO Ejemplo de Interfaz
class DosCirculos implements OperableAritmetico { private int radio1,radio2; public static void main (String args[]) { DosCirculos d = new DosCirculos(10,20); d.saluda(); System.out.println("Suma de áreas: "+d.suma()); System.out.println("Resta de áreas: "+d.resta()); } public DosCirculos(int r1,int r2) { radio1=r1; radio2=r2;

45 OTRO Ejemplo de Interfaz
public double suma() { return PI*(radio1*radio1+radio2*radio2); } public double resta() { return PI*(radio1*radio1- radio2*radio2); public void saluda() { System.out.println("Hola"); } //Termina la clase En este ejemplo, los métodos suma() y resta() deben declararse public ya que todos los métodos pertenecientes a una interface son public.

46 INTERFACES La clase que implementa una o varias interfaces debe redefinir todos los métodos de las interfaces. En el caso de que no redefina todos los métodos de las interfaces, deberá servir únicamente como superclase de otra u otras clases que los redefinan en su totalidad. Es decir, una clase podría redefinir sólo parte de los métodos declarados en las interfaces que implementa y una clase descendiente de ésta, el resto de los métodos.

47 interfaces Pueden declararse variables cuyo tipo sea una interfaz y asignarle a las mismas objetos pertenecientes a cualquier clase que implemente esa interfaz. En el ejemplo anterior, se podría sustituir DosCirculos d = new DosCirculos(10,20); Por OperableAritmetico d = new DosCirculos(10,20); Pero en este caso, sólo podrían utilizarse los métodos pertenecientes a la interfaz suma() y resta() y no ningún otro método que pudiera declarar la clase DosCirculos como saluda() En este caso, el compilador mostraría el error: DosCirculos.java:7: Method saluda() not found in interface OperableAritmetico. d.saluda(); ^ 1 error

48 POLIMORFISMO El concepto de Polimorfismo es uno de los fundamentos para cualquier lenguaje orientado a Objetos, las mismas raíces de la palabra pueden ser una fuerte pista de su significado:  Poli = Multiple, morfismo= Formas , esto implica que un mismo Objeto puede tomar diversas formas.

49 Polimorfismo Una misma llamada ejecuta distintas sentencias dependiendo de la clase a la que pertenezca el objeto al que se aplica el método. Ejemplo: Creamos una clase abstracta denominada Animal de la cual deriva las clases Gato y Perro. Ambas clases redefinen la función habla declarada abstracta en la clase base Animal. public abstract class Animal { public abstract void habla(); }

50 Polimorfismo class Perro extends Animal{ public void habla(){ System.out.println("¡Guau!"); } class Gato extends Animal{ System.out.println("¡Miau!");

51 Polimorfismo El polimorfismo nos permite pasar la referencia a un objeto de la clase Gato a una función hazleHablar que conoce al objeto por su clase base Animal. public class Polimor { public static void main(String[] args) { Gato gato=new Gato(); hazleHablar(gato); } static void hazleHablar(Animal sujeto){ sujeto.habla(); } }

52 Polimorfismo El compilador no sabe exactamente que objeto se le pasará a la función hazleHablar en el momento de la ejecución del programa. Si se pasa un objeto de la clase Gato se imprimirá ¡Miau!, si se pasa un objeto de la clasePerro se imprimirá ¡Guau!. El compilador solamente sabe que se le pasará un objeto de alguna clase derivada de Animal. Por tanto, el compilador no sabe que función habla será llamada en el momento de la ejecución del programa.

53 Polimorfismo El polimorfismo nos ayuda a hacer el programa más flexible, por que en el futuro podemos añadir nuevas clases derivadas de Animal, sin que cambie para nada el método hazleHablar. Como ejercicio, se sugiere añadir la clase Pájaro a la jerarquía, y pasar un objeto de dicha clase a la función hazleHablar para que se imprima ¡pio, pio, pio ..!.

54 POLIMORFISMO Ejemplo: abstract class Interfaz { abstract void metodo1(); abstract void metodo2(); } class Implementacion1 extends Interfaz { void metodo1() { System.out.println("metodo 1, en implementacion 1"); } void metodo2() { System.out.println("metodo 2, en implementacion 1"); } }

55 polimorfismo class Implementacion2 extends Interfaz { void metodo1() { System.out.println("metodo 1, en implementacion 2"); } void metodo2() { System.out.println("metodo 2, en implementacion 2"); } } class EjemploPolimorfismo { public static void main(String [ ] args) { Interfaz imp = new Implementacion1(); imp.metodo1(); imp.metodo2(); imp = new Impelementacion2(); imp.metodo1(); imp.metodo2(); } }

56 POLIMORFISMO imp es del tipo Interfaz, que es la clase abstracta, pero el objeto instanciado es primero del tipo Implementacion1 y después de Implementacion2, y como se usan solamente métodos definidos en la interfaz se pueden invocar sin ningún problema, ejecutándose el código definido en la implementación instanciada.

57 POLIMORFISMO public interface IPerson { int getAge(); } public class Person implements IPerson { int age; public int getAge() { System.out.println("I 'am Person"); return age; } } public class Engineer extends Person { public int getAge() { System.out.println("I 'am Engineer"); return age; } }

58 POLIMORFISMO public class JavaEngineer extends Engineer { public int getAge() { System.out.println("I 'am JavaEngineer"); return age; } } public class Main { public static void main(String[] args) { Person person1 = new Engineer(); person1.getAge(); IPerson person2 = new JavaEngineer(); person2 = person1; person2.getAge();


Descargar ppt "Medio de tele-comunicación"

Presentaciones similares


Anuncios Google