SlideShare ist ein Scribd-Unternehmen logo
1 von 36
3. Interfaces
             Herencia y clases abstractas
                   Object y herencia simple
                   Clases abstractas y métodos genéricos
             Fundamento / El por qué
             ¿Qué son? Definición
             Implementación, simple y múltiple
             Herencia de Interfaces


Programación III                        Tema 3 - Interfaces
Herencia - Definición
   • Relación es-un entre dos clases: coche  vehículo,
     alumnopersona, rectángulopolígono, etc.
   • Clase hija (subclase)  clase padre (superclase)
           – Hijas - más concretas, padres - comportamiento más general
   • En Java, cada hija sólo tiene un padre: herencia simple,
     aunque puede tener N hijas
   • La raíz de la jerarquía de clases en Java es la clase Object
   • Una clases hereda (tiene) todos los métodos y atributos de
     sus clases superiores (de la clase hasta Object)
   • Sólo puede acceder directamente a los que no sean privados
     (private)
   • Ventajas principales:
           – reutilización de código
           – diferenciación de código          (menos “if”s)
Programación III                        Tema 3 - Interfaces
Sintaxis
   • La relación jerárquica se representa mediante extends
                    class <hija> extends <padre>
   • Ejemplo:               Figura


                          Rectángulo

                   class Rectangulo extends Figura {
                          ...
                   }
   • La herencia es transitiva: si A  B y B  C, A  C
   • Si no hay cláusula extends, la clase deriva de Object




Programación III                     Tema 3 - Interfaces
Ejemplo de herencia
   class Persona{
                                                    class Alumno extends Persona {
      private int edad;
                                                       private int curso;
      private String nombre;
                                                       private char grupo;
                                                       private String titulacion;
         Persona (int e, String n){
              edad = e;
                                                           Alumno (int c, char g, String t){
              nombre = n;
                                                                curso = c;
         }
                                                                grupo = g;
         /* Métodos set/get para todos los
         atributos */                                           titulacion = t;
   }                                                       }
                                                           /* Métodos set/get para todos los
                                                           atributos */
                   Persona                          }


                                                    • Este código da un error ¿por qué?
                   Alumno




Programación III                         Tema 3 - Interfaces
Llamada de constructores
                      en herencia 1 - super
   • Cuando en una clase no se define ningún
     constructor, Java crea (aunque no se ve) el
     constructor por defecto
   class Persona{
      private int edad;
      private String nombre;

         Persona ( ){ //Constructor por defecto. Existe, pero no se ve.
         }
         /* Métodos set/get para todos los atributos */
         ...
         public static void main(String args[]){
              //Se puede comprobar que existe, creando objetos Persona
              Persona p1 = new Persona();
              /* La llamada al constructor vacío no da error, porque Java
         lo ha        creado */
         }
   }
Programación III                     Tema 3 - Interfaces
Llamada de constructores
                     en herencia 2 - super
   • En el momento en el que el programador crea otro
     constructor, el constructor por defecto deja de existir.
   class Persona{
      private int edad;
      private String nombre;

         Persona (int e, String n){
              edad = e;
              nombre = n;
         }
         /* Métodos set/get para todos los atributos */
         ...
         public static void main(String args[]){
              /* Esta misma llamada daría error, porque no existe un constructor
         con esas características */
              Persona p1 = new Persona();
              /*Sí es posible llamar al constructor definido */
              Persona p2 = new Persona(20, “Ana”);
         }
   }
Programación III                         Tema 3 - Interfaces
Llamada de constructores
                     en herencia 3 - super
   • Cuando una clase tiene una
     clase padre, lo primero que                    class Alumno extends Persona {

     hace su constructor (aunque no                     private int curso;
                                                        private char grupo;
     lo veamos), es llamar al                           private String titulacion;
     constructor de la clase
                                                           Alumno(int c, char   g, String t){
     padre (al constructor vacío:                                /*Llamada al   constructor de la
     super( );)                                                  clase padre,   existe pero no se
                                                                 ve*/
                                                                 super();
   class Persona{                                                curso = c;
      private int edad;                                          grupo = g;
      private String nombre;                                     titulacion =   t;
                                                           }
                                                    }
         Persona (int e, String n){
              edad = e;
              nombre = n;                           • Este constructor produce un error
         }                                            ¿por qué?
         /* Métodos set/get para todos los
         atributos */
         ...
   }
Programación III                         Tema 3 - Interfaces
Llamada de constructores
                     en herencia 4 - super
  • Solución 1. Crear constructor vacío              • Solución 2. Llamar explícitamente al
                                                       constructor del padre que sí existe
  class Persona{                                     class Persona{
      private int edad;                                  private int edad;
      private String nombre;                             private String nombre;

        Persona ( ) { }                                    Persona (int e, String n){
        Persona (int e, String n){                               edad = e;
              edad = e;                                          nombre = n;
              nombre = n;                                  }
        }                                            }
  }                                                  class Alumno extends Persona {
  class Alumno extends Persona {                         private int curso;
      private int curso;                                 private char grupo;
      private char grupo;                                private String titulacion;
      private String titulacion;
                                                           Alumno(int c, char g, String t,
        Alumno(int c, char g, String t){                          int e, String n){
              super();                                           super(e, n);
              curso = c;                                         curso = c;
              grupo = g;                                         grupo = g;
              titulacion = t;                                    titulacion = t;
        }                                                  }
  }                                                  }


Programación III                           Tema 3 - Interfaces
Ejemplo de llamada a
                         constructores
  class Figura {                                       class X {
     Figura (){                                           public static void main (...){
        s.o.p.(“Creando figura”);                            Cuadrado c1 = new
     }                                                    Cuadrado();
  }                                                       }
                                                       }
  class Rectangulo extends Figura
     {                                                 • ¿Qué sale por pantalla?
     Rectangulo (){                                    • ¿A qué se debe?
        s.o.p.(“Creando                                • (super)
     rectangulo”);
     }
  }

   class Cuadrado extends
         Rectangulo {
         Cuadrado (){
                 s.o.p.(“Creando cuadrado”);
         }
   }
Programación III                           Tema 3 - Interfaces
this
   • Dentro de un método, hace referencia al objeto
     que lo llama
   class Persona{
      private int edad;
      private String nombre;

     Persona (int edad, String nombre){
         edad = edad;
         nombre = nombre;
     }
   • ¿Qué pasa en este constructor? ¿Cómo resolverlo?
     void imprimirDatos(){
         s.o.p.(“Persona: “ + this.nombre + “ “ + this.edad);
         /* En este caso no sería necesario, es suficiente el
     nombre de los atributos */
     }
   }
Programación III                 Tema 3 - Interfaces
this y super
                                       class Alumno extends Persona{
   class Persona{                          private int curso;
      private int edad;                    private char grupo;
      private String nombre;               private String titulacion;

                                           Alumno(int c, char g, String t, int e, String n){
         Persona (int edad, String                super(e, n);
         nombre){                                 curso = c;
              this.edad = edad;                   grupo = g;
               this.nombre = nombre;              titulacion = t;
                                           }
                                           void imprimirDatos (){
         }                                        s.o.p.(curso + “-” + grupo);
         void imprimirDatos(){                    s.o.p.(“(“ + titulacion + “)”);
              s.o.p.(“Persona: “);         }
                                           void imprimirTodos(){
              s.o.p.(nombre + “ “);
                                                  super.imprimirDatos();
              s.o.p.(edad);                       this.imprimirDatos();
         }                                        imprimirDatos();
   }                                       }
                                           public static void main(String args[]){
                                             Alumno al;
                                             al = new Alumno(1, 'a', "ITTET", 18, "Pedro");
                                             al.imprimirTodos();
                                           }
                                       }
                                       •   ¿Qué obtenemos por pantalla?

Programación III                           Tema 3 - Interfaces
this en constructores
   class Alumno extends Persona{
      ...

         Alumno(int c, char g, String t, int e,
         String n){
              super(e, n);
              curso = c;
              grupo = g;
              titulacion = t;
         }

         Alumno(int c, char g, String t){
              this(c, g, t, 0, “Sin definir”);
         }

         ...
   }




Programación III                         Tema 3 - Interfaces
Resumen this y super

       – this
               • Es la referencia al propio objeto sobre el que se está trabajando.
               • No hace falta usarla para acceder a los atributos y métodos propios.
               • Pero a veces es necesaria cuando se quiere pasar la referencia al
                 propio objeto como parámetro de otro método.
               • En constructores puede usarse para llamar entre ellos (lo primero)
       – super
               • Permite referenciar a la clase padre.
               • Se emplea cuando se ha redefinido un método y se quiere acceder al
                 método del padre (si no se usara esta palabra reservada se llamaría
                 al método de la propia clase y no habría forma de invocar el del
                 padre). [super.método(...)]
               • Permite también llamar al constructor de la clase padre desde el
                 constructor de la clase hija. [super(...)] Esto es lo primero que se
                 hace en todo constructor (si no se indica explícitamente, se hace sin
                 parámetros).


Programación III                           Tema 3 - Interfaces
Comprob. tipo en ejecución

   • instanceof
           – Permite controlar la clase a la que
             pertenece un objeto (no la variable, el
             objeto)

                    Vehiculo[] v = new Vehiculo[3]
                    v[0] = new Coche();
                    v[1] = new Moto();
                    v[2] = new CocheJuguete();
                    ...
                    if (v[i] instanceof Moto) {
                        (Moto)v[i] ... }
Programación III                  Tema 3 - Interfaces
Método abstracto
   • Precedido de la palabra clave abstract
   • Un método abstracto es el que no tiene
     implementación
           class X {
             abstract void m1();
           }
   • NO es lo mismo que un método “vacío”
           class X {
             void m1(){ }
           }
   • Una clase que contiene un método abstracto, es
     una clase abstracta, y debe de llevar el modificador
     abstract
           abstract class X {
             abstract void m1();
           }
Programación III                   Tema 3 - Interfaces
Herencia de métodos
                              abstractos
   • Cuando una clase hereda un método abstracto, tiene dos
     opciones:
           – Implementar el método (darle código)
                   class Y extends X {
                     void m1(){...}
                   }
           – No implementarlo (no hacer nada con él). En este caso la clase pasa
             a ser abstracta (si no se pone abstract no compila)
                   abstract class Y extends X {
                   }

   • Una clase es abstracta si:
           – Tiene un método abstracto definido dentro (clase X)
           – Hereda un método abstracto y no lo implementa (clase Y, ejem 2)
   • NO se pueden crear objetos de una clase abstracta:
                   X x1; //Correcto
                   x1 = new X(); //Incorrecto
                   ¿Por qué?

Programación III                                Tema 3 - Interfaces
Utilidad de métodos
                                  abstractos
   • Si no se pueden crear objetos de clases abstractas ¿para qué sirven?
   • Son clases de definición
           – Indican cómo deben comportarse las subclases, qué métodos deben tener
             obligatoriamente (porque la herencia no puede quitar métodos)
           – Sirven para proporcionar un comportamiento y definición general a las
             subclases, permitiendo especificar en cada subclase una implementación diferente
                   • No compromete cuál debe ser ese comportamiento
           – Puede haber algunos métodos no abstractos porque su código sí pueda definirse
                   • ej.: FiguraGeometrica – void dibujar() { dibujarArea(); dibujarAristas() }


                                                abstract Animal
                                  abstract void emitirSonido( );


       Perro                               Felino                                 Ave
       void emitirSonido( ){               void emitirSonido( ){                  void emitirSonido( ){
          s.o.p.(“Guau”);                     s.o.p.(“Grrr...”);                     s.o.p.(“Pio-pio”);
       }                                   }                                      }


                                          Gato         Lince          Pantera       Canario       Golondrina

Programación III                                         Tema 3 - Interfaces
Modificador final

       • final
               – Indica que la definición de la clase está completa.
                   • No se puede heredar de esa clase (no puede tener
                     subclases).
                   • Si una clase es declarada abstract y final  Error de
                     compilación
               – Otros usos de final :
                   • en atributos indica constantes (su valor no puede cambiar)
                   • en métodos indica que no se pueden redefinir en subclases
                     (una clase final hace a todos sus métodos finales)




Programación III                          Tema 3 - Interfaces
Interfaces: fundamento

   • Ejemplo: bubble sort
           – Ordenar fechas
           – Ordenar fracciones
           – ¿Cómo generalizamos?




Programación III              Tema 3 - Interfaces
Ordenación de fechas
           public class OrdenarFechas {
             static void ordenaArray( Fecha v[] )
             // Ordena array de fechas por bubble sort
             {
               for (int i=0; i<v.length-1; i++) {
                     for (int j=1; j<v.length-i; j++) {
                           if (v[j-1].esMayorQue(v[j])) {
                                 Fecha temp = v[j];
                                 v[j] = v[j-1]; v[j-1] = temp;
                           }
                     }
               }
             }
           ...

Programación III                 Tema 3 - Interfaces
Ordenación de fracciones
           public class OrdenarFracciones {
             static void ordenaArray( Fraccion v[] )
             // Ordena array de fracciones por bubble sort
             {
               for (int i=0; i<v.length-1; i++) {
                     for (int j=1; j<v.length-i; j++) {
                           if (v[j-1].esMayorQue(v[j])) {
                                 Fraccion temp = v[j];
                                 v[j] = v[j-1]; v[j-1] = temp;
                           }
                     }
               }
             }
           ...

Programación III                 Tema 3 - Interfaces
¿Cómo generalizar?
   • Método de ordenación idéntico
           – Son clases distintas
           – Ambas se pueden comparar por mayor
           – Pero no se pueden heredar (no tienen nada que ver)
   • ¿Cómo lo generalizamos?
           public class OrdenarLoQueSea {
             static void ordenaArray( LoQueSea v[] ) {
              for (int i=0; i<v.length-1; i++) {
                     for (int j=1; j<v.length-i; j++) {
                            if (v[j-1].esMayorQue(v[j])) {
                                   LoQueSea temp = v[j];
                                   v[j] = v[j-1]; v[j-1] = temp;
                            }
                     }
              } ...

Programación III                   Tema 3 - Interfaces
Solución
                   interface Ordenable {
                     boolean esMayorQue( Ordenable o );
                   }
                   public class Ordenar {
                     static void ordenaArray( Ordenable v[] ) {
                           for (int i=0; i<v.length-1; i++) {
                                   for (int j=1; j<v.length-i; j++) {
                                          if (v[j-1].esMayorQue(v[j])) {
                                                  Ordenable temp = v[j];
                                                  v[j]=v[j-1]; v[j-1]=temp;
                     }     }       }      }
                   class Fraccion implements Ordenable {
                     public boolean esMayorQue( Ordenable o ) {
                           if (o instanceof Fraccion) {
                                   Fraccion f2 = (Fraccion) o;
                                   return (1.0*num/den > 1.0*f2.num/f2.den);
                           } else return false;
                     ...

Programación III                           Tema 3 - Interfaces
El por qué de los interfaces (1)
   • Herencia Múltiple
           – Una clase tiene más de un padre
           – Presenta problemas cuando:
                   • Se heredan varias implementaciones para un mismo método
                   • Se heredan varias copias de un mismo atributo
   • Ejemplo:
                                                               Vehiculo




                                    VehiculoTerrestre                         VehiculoAcuatico




                            Coche                       VehiculoAnfibio                          Barco


Programación III                                        Tema 3 - Interfaces
El por qué de los interfaces
                      (2)
   • Complejidad (Eiffel, C++):
           – Si la clase Vehículo tuviera un atributo llamado
             matrícula, ¿Cuántas matrículas tendría la clase
             VehiculoAnfibio?
           – ¿Si Vehículo tuviera un método implementado
             de forma diferente por VehiculoTerrestre y por
             VehiculoAcuatico?
   • Java no permite la herencia múltiple
           – ¿Cómo resuelve Java estas jerarquías?
           – Mediante otro mecanismo: los interfaces

Programación III                 Tema 3 - Interfaces
¿Qué es un interface?
   • Es un conjunto de métodos
           – Sólo cabeceras, sin implementación
           – Definen un comportamiento específico para un conjunto
             de objetos
   • Es una forma de crear tipos (como las clases)
           – Se pueden declarar variables
           – Se pueden declarar métodos
   • Y debido a esto:
           – Sus métodos son “abstractos”
           – No se pueden instanciar (como las clases abstractas)
           – No se hereda codificación, sólo definición

Programación III                    Tema 3 - Interfaces
Definición de interfaces
   • Palabra reservada interface seguida de una lista de
     métodos (cabeceras) sin implementación
   • Ejemplo 1:
                   interface UnInterface
                   {
                     void mensaje1();
                     void mensaje2();
                   }
   • Ejemplo 2:
                   interface Driveable
                   {
                     boolean startEngine();
                     void stopEngine();
                     float accelerate(float acc);
                     boolean turn(Direction dir);
                   }
   • Todos los métodos de un interface son públicos
Programación III                     Tema 3 - Interfaces
Implementación de interfaces (1)
   • Para “implementar” un interface:
           – Cláusula implements
           – Cuando se relaciona una clase con una interfaz y no se implementan los métodos, la
             clase pasa a ser “abstracta” (no se puede instanciar).
   • Ejemplo 1:
                     class UnaClase implements UnInterface
                     {
                        void mensaje1() { System.out.println(“1”); }
                        void mensaje2() { System.out.println(“2”); }
                     }
   • Ejemplo 2:
                     class Automobile implements Driveable
                     {
                        public boolean startEngine()
                        {
                           if (notTooCold) engineRunning = true; ...
                        }
                        public void stopEngine()
                        { ...
                           engineRunning = false;
                        }
                        public float accelerate(float acc)
                        { ...
                        }
                        public boolean turn(Direction dir)
                        { ...
                        }
                     }
Programación III                                Tema 3 - Interfaces
Implementación de interfaces (2)
   • En estos momentos:
           – La clase Automobile implementa el interface Driveable
           – La clase Automobile posee un tipo “extra”: El tipo Driveable
           – Todos los objetos de la clase Automobile pertenecen también al tipo Driveable
   • Un interface puede ser implementado por más de una clase
                     class Automobile implements Driveable
                     { ...
                     }
                     class LawnMower implements Driveable
                     { ...
                     }
           – En cualquier lugar donde se requiera un objeto del tipo Driveable podremos situar un
             objeto de la clase Automobile o de la clase LawnMower. De esta forma nos
             aseguramos que los métodos existen aunque no nos preocupa su implementación real.
             Estamos definiendo una API, una interfaz de programación que asegura un concepto,
             no una implementación concreta.
                     Automobile auto = new Automobile();
                     Lawnmower mower = new Lawnmower();
                     Driveable vehicle;
                     vehicle = auto;
                     vehicle.startEngine();
                     vehicle.stopEngine();
                     ...
                     vehicle = mower;
                     vehicle.startEngine();
                     vehicle.stopEngine();




Programación III                               Tema 3 - Interfaces
Interfaces - ejemplo

   • interfaz Comparable
           – Método int compareTo(Object o)
                   • Devuelve -1, 0, +1
   • Todas las clases que sean ordenables pueden
     implementar este interfaz
   • ¿Qué ventajas tiene el programador?
           – Regularidad: siempre se compara igual
           – Polimorfismo:
                   • void ordenaGrupo( Comparable c[] )


Programación III                          Tema 3 - Interfaces
Implem. de interfaces múltiples (1)
   • Una clase puede implementar más de un interface
     (herencia múltiple)
           – Ejemplo 1:
                    interface A
                    {
                      void mensaje1();
                      void mensaje2();
                    }
                    interface B
                    {
                      void mensaje3();
                      void mensaje4();
                    }
                    class C implements A, B
                    {
                      void mensaje1() {System.out.println(“1”);}
                      void mensaje2() {System.out.println(“2”);}
                      void mensaje3() {System.out.println(“3”);}
                      void mensaje4() {System.out.println(“4”);}
                    }


Programación III                        Tema 3 - Interfaces
Implem. de interfaces múltiples (2)
           – Ejemplo 2:
                   • Tenemos un nuevo interface: el interface Cloneable
                        interface Cloneable
                        {
                          Object clone();
                        }
                   • Tenemos una clase base para todos los tipos de vehículos llamada Vehicle
                   • Definamos Automobile:
                        class Automobile extends Vehicle                 implements Driveable, Cloneable
                        { ...
                          public boolean startEngine() {                 ... }
                          public void stopEngine() { ...                 }
                          public float accelerate( float                 acc ) { ... }
                          public boolean turn( Direction                 dir ) { ... }
                          public Object clone() { ... }
                        }
                   • Automobile debe implementar los métodos de todos los interfaces que
                     implemente si se quiere poder instanciar objetos de tipo Automobile.
                   • Los objetos de la clase Automobile pertenecerán a 4 tipos distintos
                     (se podrán usar como si fueran de cualquiera de esos tipos):
                        –   El tipo Automobile
                        –   El tipo Vehicle
                        –   El tipo Driveable
                        –   El tipo Cloneable

Programación III                                   Tema 3 - Interfaces
Herencia de interfaces
   •     Los interfaces pueden heredar mediante extends
                    interface A
                    {
                       void mensaje1();
                    }
                    interface B extends A
                    {
                       void mensaje2();
                    }
   •     Una clase que implemente el interface B deberá implementar los métodos de ambos
         interfaces si quiere poder crear objetos.
                    class C implements B
                    {
                       void mensaje1() {System.out.println(“1”);}
                       void mensaje2() {System.out.println(“2”);}
                    }
   •     Además, Java admite la herencia múltiple entre interfaces
                    interface A {
                       void mensaje1();
                    }
                    interface B extends A {
                       void mensaje2();
                    }
                    interface C extends A {
                       void mensaje3();
                    }
                    interface D extends B, C {
                       void mensaje4();
                    }
   •     La clase que implemente el interface D deberá implementar los 4 métodos si quiere que se
         puedan instanciar objetos.

Programación III                                    Tema 3 - Interfaces
Ejemplo: Interfaces y clases abstractas
                   interface ElementoVolador
                   {
                     void acelerar( int vel );
                   }
                   interface ElementoMecanicoVolador extends ElementoVolador
                   {
                     void arreglarMecanismos();
                   }
                   abstract class Avion implements ElementoMecanicoVolador
                   {
                     boolean elMotorFunciona;
                     public void arreglarMecanismos()
                     {
                           elMotorFunciona = true;
                     }
                   }
                   class AvionComercial extends Avion
                   {
                     int velocidad;
                     public void acelerar( int vel )
                     {
                           velocidad += vel;
                     }
                   }


Programación III                             Tema 3 - Interfaces
Ejercicios propuestos (1)
   • Implementación de Enumeration
                   • Queremos incorporar en la clase ListaEnlazada el interface de
                     java.util.Enumeration. Para ello:
                       – Definiremos una clase de paquete EnumeradorLista que implemente el
                         interface de Enumeration sobre una lista enlazada. Esto es, tiene que tener
                         un constructor que inicialice la secuencia, un método de comprobación de
                         final hasMoreElements() y un método de extracción del siguiente elemento
                         de la secuencia nextElement().
                       – Para evitar que esta clase la tenga que manipular directamente el usuario
                         incorporaremos a la clase ListaEnlazada un método enumeracion() que
                         devuelva una instancia de EnumeradorLista inicializada sobre la propia lista.
                       – Así, desde un programa podremos para recorrer cualquier lista y hacer algo
                         así como:
                            java.util.Enumeration e = l.enumeracion();
                            while (e.hasMoreElements())
                            {
                               System.out.print( " " + e.nextElement() );
                            }
                       – Esta clase EnumeradorLista es el clásico ejemplo de uso de clase interna.
                         Probar a definirla así.
                       – Cambiar la clase ListaEnlazada de acuerdo a todo esto. Probar en el main
                         que efectivamente la enumeración funciona.


Programación III                                   Tema 3 - Interfaces
Ejercicios propuestos (2)
   • Jerarquía de figuras
           – Crear una clase llamada Figura de la que extiendan las clases Cuadrado,
             Triángulo y Círculo. Figura debe ser una clase abstracta que contenga dos
             métodos void dibujar() y void borrar(). Por otro lado, cada clase
             descendiente de Figura va a redefinir estos métodos visualizando por
             pantalla, en cada caso, un mensaje.
                   • (Por ejemplo: “Dibujando cuadrado/triángulo/círculo”, “Borrando
                     cuadrado/triángulo/círculo”).
           – Crear por otro lado una clase Pizarra que tenga un atributo que sea un array
             de Figuras. Además, tendrá un método para añadir Figuras al array y otro
             para borrar todas las figuras del array.
                   • Para probar el funcionamiento, realizar una clase Ejemplo que añada varias
                     figuras (de cualquier tipo) a la pizarra. Ir viendo lo que saldría por pantalla para
                     ver cómo funciona el polimorfismo. También se puede llamar al método borrar
                     de la clase Pizarra para ver cómo se irían borrando todas las figuras.
           – Jerarquía de figuras + Interfaces
                   • Modificar el ejercicio anterior de la siguiente forma:
                        – Definir un interface llamado Coloreable que hace referencia a todos los objetos que
                          admiten un color, definiendo los métodos void cambiaColor( Color c ) que cambia el
                          color del objeto y el Color queColor() que devuelve el color del objeto.
                        – Hacer que Figura implemente el interfaz Coloreable, añadiendo los métodos y
                          atributos necesarios. ¿Dónde implementarías estos métodos? Hazlo.



Programación III                                      Tema 3 - Interfaces

Weitere ähnliche Inhalte

Was ist angesagt?

10. programacion orientada a objetos en visual basic .net
10.  programacion orientada a objetos en visual basic .net10.  programacion orientada a objetos en visual basic .net
10. programacion orientada a objetos en visual basic .netjohnny herrera
 
Unidad 2 ProgramacióN Orientada A Objetos (Repaso)
Unidad 2 ProgramacióN Orientada A Objetos (Repaso)Unidad 2 ProgramacióN Orientada A Objetos (Repaso)
Unidad 2 ProgramacióN Orientada A Objetos (Repaso)Sergio Sanchez
 
Programación Orientada a Objetos
Programación Orientada a ObjetosProgramación Orientada a Objetos
Programación Orientada a ObjetosUVMVirtual
 
Programación 3: Clases y objetos en Java
Programación 3: Clases y objetos en JavaProgramación 3: Clases y objetos en Java
Programación 3: Clases y objetos en JavaAngel Vázquez Patiño
 
2 POO Presentación
2 POO Presentación2 POO Presentación
2 POO Presentaciónguest7b7e934
 
Principios orientacion-objetos
Principios orientacion-objetosPrincipios orientacion-objetos
Principios orientacion-objetoskarlalopezbello
 
Java certificacion
Java certificacionJava certificacion
Java certificacionAlex Herrera
 

Was ist angesagt? (20)

10. programacion orientada a objetos en visual basic .net
10.  programacion orientada a objetos en visual basic .net10.  programacion orientada a objetos en visual basic .net
10. programacion orientada a objetos en visual basic .net
 
Definición de clases en POO
Definición de clases en POODefinición de clases en POO
Definición de clases en POO
 
Programacion Orientada a Objetos
Programacion Orientada a ObjetosProgramacion Orientada a Objetos
Programacion Orientada a Objetos
 
JAVA ORIENTADO A OBJETOS - INTRODUCCIÓN
JAVA ORIENTADO A OBJETOS - INTRODUCCIÓNJAVA ORIENTADO A OBJETOS - INTRODUCCIÓN
JAVA ORIENTADO A OBJETOS - INTRODUCCIÓN
 
Unidad 2 ProgramacióN Orientada A Objetos (Repaso)
Unidad 2 ProgramacióN Orientada A Objetos (Repaso)Unidad 2 ProgramacióN Orientada A Objetos (Repaso)
Unidad 2 ProgramacióN Orientada A Objetos (Repaso)
 
8.Clases y objetos Java
8.Clases y objetos Java8.Clases y objetos Java
8.Clases y objetos Java
 
Programación Orientada a Objetos para Python
Programación Orientada a Objetos para PythonProgramación Orientada a Objetos para Python
Programación Orientada a Objetos para Python
 
Programación Orientada a Objetos
Programación Orientada a ObjetosProgramación Orientada a Objetos
Programación Orientada a Objetos
 
Programación 3: Clases y objetos en Java
Programación 3: Clases y objetos en JavaProgramación 3: Clases y objetos en Java
Programación 3: Clases y objetos en Java
 
Programación orientada a objetos
Programación orientada a objetosProgramación orientada a objetos
Programación orientada a objetos
 
2 POO Presentación
2 POO Presentación2 POO Presentación
2 POO Presentación
 
Principios orientacion-objetos
Principios orientacion-objetosPrincipios orientacion-objetos
Principios orientacion-objetos
 
Tema2
Tema2Tema2
Tema2
 
Java OO: Introducción
Java OO: IntroducciónJava OO: Introducción
Java OO: Introducción
 
Diapositivas de la poo
Diapositivas de la pooDiapositivas de la poo
Diapositivas de la poo
 
Presentacion de clases en c#
Presentacion de clases en c#Presentacion de clases en c#
Presentacion de clases en c#
 
Qué es la poo
Qué es la pooQué es la poo
Qué es la poo
 
Java Basico
Java BasicoJava Basico
Java Basico
 
Java certificacion
Java certificacionJava certificacion
Java certificacion
 
Poo3 java-0910
Poo3 java-0910Poo3 java-0910
Poo3 java-0910
 

Andere mochten auch

POO: Herencia, Abstraccion y Polimorfismo
POO: Herencia, Abstraccion y PolimorfismoPOO: Herencia, Abstraccion y Polimorfismo
POO: Herencia, Abstraccion y PolimorfismoActimel
 
Polimorfismo en java
Polimorfismo en javaPolimorfismo en java
Polimorfismo en javaSa_Van
 
Aho hopcroft - estructura de datos y algoritmos p1
Aho   hopcroft - estructura de datos y algoritmos p1Aho   hopcroft - estructura de datos y algoritmos p1
Aho hopcroft - estructura de datos y algoritmos p1Emiliano Andres Abadi
 
Mcts self paced training kit exam 432 sql server 2008 - implementation and ...
Mcts self paced training kit exam 432   sql server 2008 - implementation and ...Mcts self paced training kit exam 432   sql server 2008 - implementation and ...
Mcts self paced training kit exam 432 sql server 2008 - implementation and ...Portal_do_Estudante_SQL
 
3 interfaces clases_abstractas_herencia_polimorfismo
3 interfaces clases_abstractas_herencia_polimorfismo3 interfaces clases_abstractas_herencia_polimorfismo
3 interfaces clases_abstractas_herencia_polimorfismoJesus Alberto Iribe Gonzalez
 
delegacion_herencia_polimorfismo
delegacion_herencia_polimorfismodelegacion_herencia_polimorfismo
delegacion_herencia_polimorfismoJohana Añez
 
Sql server 2012_licensing_reference_guide
Sql server 2012_licensing_reference_guideSql server 2012_licensing_reference_guide
Sql server 2012_licensing_reference_guideamenus006
 
Interface Design Getting Real
Interface Design Getting RealInterface Design Getting Real
Interface Design Getting RealMiguel Rodriguez
 
Estructuras de datos osvaldo cairo
Estructuras de datos   osvaldo cairoEstructuras de datos   osvaldo cairo
Estructuras de datos osvaldo cairoYossLu Molina
 
Windows Server 2012 Exam Paper 70-411 PDF
Windows Server 2012 Exam Paper 70-411 PDFWindows Server 2012 Exam Paper 70-411 PDF
Windows Server 2012 Exam Paper 70-411 PDFKesavan Munuswamy
 
Clases abstractas e interfaces
Clases abstractas e interfacesClases abstractas e interfaces
Clases abstractas e interfaceslopezcortes
 
09 Clases Abstractas E Interfaces
09   Clases Abstractas E Interfaces09   Clases Abstractas E Interfaces
09 Clases Abstractas E InterfacesNetwork Sens
 
Sql server 2012 transact sql dml reference
Sql server 2012 transact sql dml referenceSql server 2012 transact sql dml reference
Sql server 2012 transact sql dml referenceU.N.S.C
 
SQL Server Backup and Restore
SQL Server Backup and RestoreSQL Server Backup and Restore
SQL Server Backup and RestoreKesavan Munuswamy
 

Andere mochten auch (20)

POO: Herencia, Abstraccion y Polimorfismo
POO: Herencia, Abstraccion y PolimorfismoPOO: Herencia, Abstraccion y Polimorfismo
POO: Herencia, Abstraccion y Polimorfismo
 
Polimorfismo en java
Polimorfismo en javaPolimorfismo en java
Polimorfismo en java
 
Aho hopcroft - estructura de datos y algoritmos p1
Aho   hopcroft - estructura de datos y algoritmos p1Aho   hopcroft - estructura de datos y algoritmos p1
Aho hopcroft - estructura de datos y algoritmos p1
 
Mcts self paced training kit exam 432 sql server 2008 - implementation and ...
Mcts self paced training kit exam 432   sql server 2008 - implementation and ...Mcts self paced training kit exam 432   sql server 2008 - implementation and ...
Mcts self paced training kit exam 432 sql server 2008 - implementation and ...
 
3 interfaces clases_abstractas_herencia_polimorfismo
3 interfaces clases_abstractas_herencia_polimorfismo3 interfaces clases_abstractas_herencia_polimorfismo
3 interfaces clases_abstractas_herencia_polimorfismo
 
delegacion_herencia_polimorfismo
delegacion_herencia_polimorfismodelegacion_herencia_polimorfismo
delegacion_herencia_polimorfismo
 
Clases abstractas
Clases abstractasClases abstractas
Clases abstractas
 
Informes+con+ireport (2)
Informes+con+ireport (2)Informes+con+ireport (2)
Informes+con+ireport (2)
 
Sql server 2012_licensing_reference_guide
Sql server 2012_licensing_reference_guideSql server 2012_licensing_reference_guide
Sql server 2012_licensing_reference_guide
 
Clases abstractas
Clases abstractasClases abstractas
Clases abstractas
 
Interface Design Getting Real
Interface Design Getting RealInterface Design Getting Real
Interface Design Getting Real
 
Java colecciones
Java coleccionesJava colecciones
Java colecciones
 
Estructuras de datos osvaldo cairo
Estructuras de datos   osvaldo cairoEstructuras de datos   osvaldo cairo
Estructuras de datos osvaldo cairo
 
Leyes de la dinamica
Leyes de la dinamicaLeyes de la dinamica
Leyes de la dinamica
 
Windows Server 2012 Exam Paper 70-411 PDF
Windows Server 2012 Exam Paper 70-411 PDFWindows Server 2012 Exam Paper 70-411 PDF
Windows Server 2012 Exam Paper 70-411 PDF
 
Clases abstractas e interfaces
Clases abstractas e interfacesClases abstractas e interfaces
Clases abstractas e interfaces
 
09 Clases Abstractas E Interfaces
09   Clases Abstractas E Interfaces09   Clases Abstractas E Interfaces
09 Clases Abstractas E Interfaces
 
MCSA Exam paper 70-412 PDF
MCSA Exam paper 70-412 PDFMCSA Exam paper 70-412 PDF
MCSA Exam paper 70-412 PDF
 
Sql server 2012 transact sql dml reference
Sql server 2012 transact sql dml referenceSql server 2012 transact sql dml reference
Sql server 2012 transact sql dml reference
 
SQL Server Backup and Restore
SQL Server Backup and RestoreSQL Server Backup and Restore
SQL Server Backup and Restore
 

Ähnlich wie Programación III (Java) - 03 Interfaces

Constructores con el parámetro this
Constructores con el parámetro thisConstructores con el parámetro this
Constructores con el parámetro thisDarwin Chungandro
 
Poo1conceptobasicoconinstanciacion
Poo1conceptobasicoconinstanciacionPoo1conceptobasicoconinstanciacion
Poo1conceptobasicoconinstanciacionjlmanmons
 
JAVA_BASICO_modo_consola_introduccion.pptx
JAVA_BASICO_modo_consola_introduccion.pptxJAVA_BASICO_modo_consola_introduccion.pptx
JAVA_BASICO_modo_consola_introduccion.pptxFamiliaAyluardo
 
2.android java
2.android   java2.android   java
2.android javaguidotic
 
Introduccion a la poo
Introduccion a la pooIntroduccion a la poo
Introduccion a la pooBoris Salleg
 
Clases metodos y atributos
Clases metodos y atributosClases metodos y atributos
Clases metodos y atributosRobert Wolf
 
Lenguajes de Programación: Herencia, Polimorfismo Y UML
Lenguajes de Programación: Herencia, Polimorfismo Y UMLLenguajes de Programación: Herencia, Polimorfismo Y UML
Lenguajes de Programación: Herencia, Polimorfismo Y UMLLuis Fernando Aguas Bucheli
 
11 Curso de POO en java - métodos constructores y toString()
11 Curso de POO en java - métodos constructores y toString()11 Curso de POO en java - métodos constructores y toString()
11 Curso de POO en java - métodos constructores y toString()Clara Patricia Avella Ibañez
 
Programación III (Java) - 01 Introduccion
Programación III (Java) - 01 IntroduccionProgramación III (Java) - 01 Introduccion
Programación III (Java) - 01 IntroduccionAndoni Eguíluz Morán
 
Herencia y Polimorfismo en Java
Herencia y Polimorfismo en JavaHerencia y Polimorfismo en Java
Herencia y Polimorfismo en JavaAme Linares Vivas
 
Programacion orientada a objetos 1
Programacion orientada a objetos 1Programacion orientada a objetos 1
Programacion orientada a objetos 1mellcv
 

Ähnlich wie Programación III (Java) - 03 Interfaces (20)

Presentacion4
Presentacion4Presentacion4
Presentacion4
 
Constructores con el parámetro this
Constructores con el parámetro thisConstructores con el parámetro this
Constructores con el parámetro this
 
Poo1conceptobasicoconinstanciacion
Poo1conceptobasicoconinstanciacionPoo1conceptobasicoconinstanciacion
Poo1conceptobasicoconinstanciacion
 
Dev c++ en oo
Dev c++ en ooDev c++ en oo
Dev c++ en oo
 
JAVA_BASICO_modo_consola_introduccion.pptx
JAVA_BASICO_modo_consola_introduccion.pptxJAVA_BASICO_modo_consola_introduccion.pptx
JAVA_BASICO_modo_consola_introduccion.pptx
 
Ios.s2
Ios.s2Ios.s2
Ios.s2
 
2.android java
2.android   java2.android   java
2.android java
 
Introduccion a la poo
Introduccion a la pooIntroduccion a la poo
Introduccion a la poo
 
Clases metodos y atributos
Clases metodos y atributosClases metodos y atributos
Clases metodos y atributos
 
Prototype-based, object-oriented programming
Prototype-based, object-oriented programmingPrototype-based, object-oriented programming
Prototype-based, object-oriented programming
 
Lenguajes de Programación: Herencia, Polimorfismo Y UML
Lenguajes de Programación: Herencia, Polimorfismo Y UMLLenguajes de Programación: Herencia, Polimorfismo Y UML
Lenguajes de Programación: Herencia, Polimorfismo Y UML
 
11 Curso de POO en java - métodos constructores y toString()
11 Curso de POO en java - métodos constructores y toString()11 Curso de POO en java - métodos constructores y toString()
11 Curso de POO en java - métodos constructores y toString()
 
Java
JavaJava
Java
 
JAVA OO - TEMA 01 - CLASES Y OBJETOS
JAVA OO - TEMA 01 - CLASES Y OBJETOSJAVA OO - TEMA 01 - CLASES Y OBJETOS
JAVA OO - TEMA 01 - CLASES Y OBJETOS
 
Programación III (Java) - 01 Introduccion
Programación III (Java) - 01 IntroduccionProgramación III (Java) - 01 Introduccion
Programación III (Java) - 01 Introduccion
 
Poo
PooPoo
Poo
 
JAVA ORIENTADO A OBJETOS - CLASES Y OBJETOS
JAVA ORIENTADO A OBJETOS - CLASES Y OBJETOSJAVA ORIENTADO A OBJETOS - CLASES Y OBJETOS
JAVA ORIENTADO A OBJETOS - CLASES Y OBJETOS
 
Presentacion5
Presentacion5Presentacion5
Presentacion5
 
Herencia y Polimorfismo en Java
Herencia y Polimorfismo en JavaHerencia y Polimorfismo en Java
Herencia y Polimorfismo en Java
 
Programacion orientada a objetos 1
Programacion orientada a objetos 1Programacion orientada a objetos 1
Programacion orientada a objetos 1
 

Mehr von Andoni Eguíluz Morán

Cebek oficina fija oficina movil 2 - 201611
Cebek   oficina fija oficina movil 2 - 201611Cebek   oficina fija oficina movil 2 - 201611
Cebek oficina fija oficina movil 2 - 201611Andoni Eguíluz Morán
 
Cebek - oficina fija oficina movil 1 - 201610
Cebek - oficina fija oficina movil 1 - 201610Cebek - oficina fija oficina movil 1 - 201610
Cebek - oficina fija oficina movil 1 - 201610Andoni Eguíluz Morán
 
El papel de las tic en la construccióLa integración de recursos didácticos di...
El papel de las tic en la construccióLa integración de recursos didácticos di...El papel de las tic en la construccióLa integración de recursos didácticos di...
El papel de las tic en la construccióLa integración de recursos didácticos di...Andoni Eguíluz Morán
 
Falta de profesionales tecnológicos.Cómo lo abordamos
Falta de profesionales tecnológicos.Cómo lo abordamosFalta de profesionales tecnológicos.Cómo lo abordamos
Falta de profesionales tecnológicos.Cómo lo abordamosAndoni Eguíluz Morán
 
Cebek oficina fija oficina movil 2 - 201512
Cebek   oficina fija oficina movil 2 - 201512Cebek   oficina fija oficina movil 2 - 201512
Cebek oficina fija oficina movil 2 - 201512Andoni Eguíluz Morán
 
Cebek - Oficina fija oficina movil 1 - 201512
Cebek - Oficina fija oficina movil 1 - 201512Cebek - Oficina fija oficina movil 1 - 201512
Cebek - Oficina fija oficina movil 1 - 201512Andoni Eguíluz Morán
 
Uso seguro de las TIC en el mundo educativo
Uso seguro de las TIC en el mundo educativoUso seguro de las TIC en el mundo educativo
Uso seguro de las TIC en el mundo educativoAndoni Eguíluz Morán
 
CCD2015 - Creación contenidos digitales
CCD2015 - Creación contenidos digitalesCCD2015 - Creación contenidos digitales
CCD2015 - Creación contenidos digitalesAndoni Eguíluz Morán
 
Cebek - Medidas basicas de seguridad - 201504
Cebek - Medidas basicas de seguridad - 201504Cebek - Medidas basicas de seguridad - 201504
Cebek - Medidas basicas de seguridad - 201504Andoni Eguíluz Morán
 
CYPED 2015 - Comunicación y Participación en Entornos Digitales
CYPED 2015 - Comunicación y Participación en Entornos DigitalesCYPED 2015 - Comunicación y Participación en Entornos Digitales
CYPED 2015 - Comunicación y Participación en Entornos DigitalesAndoni Eguíluz Morán
 
Cebek - jornada identidad digital corporativa
Cebek - jornada identidad digital corporativaCebek - jornada identidad digital corporativa
Cebek - jornada identidad digital corporativaAndoni Eguíluz Morán
 
Gamificación, serious games y negocio (SGGN-1409)
Gamificación, serious games y negocio (SGGN-1409)Gamificación, serious games y negocio (SGGN-1409)
Gamificación, serious games y negocio (SGGN-1409)Andoni Eguíluz Morán
 
Programación III (Java) - 06 Ventanas
Programación III (Java) - 06 VentanasProgramación III (Java) - 06 Ventanas
Programación III (Java) - 06 VentanasAndoni Eguíluz Morán
 

Mehr von Andoni Eguíluz Morán (20)

Cebek oficina fija oficina movil 2 - 201611
Cebek   oficina fija oficina movil 2 - 201611Cebek   oficina fija oficina movil 2 - 201611
Cebek oficina fija oficina movil 2 - 201611
 
Cebek - oficina fija oficina movil 1 - 201610
Cebek - oficina fija oficina movil 1 - 201610Cebek - oficina fija oficina movil 1 - 201610
Cebek - oficina fija oficina movil 1 - 201610
 
El papel de las tic en la construccióLa integración de recursos didácticos di...
El papel de las tic en la construccióLa integración de recursos didácticos di...El papel de las tic en la construccióLa integración de recursos didácticos di...
El papel de las tic en la construccióLa integración de recursos didácticos di...
 
Falta de profesionales tecnológicos.Cómo lo abordamos
Falta de profesionales tecnológicos.Cómo lo abordamosFalta de profesionales tecnológicos.Cómo lo abordamos
Falta de profesionales tecnológicos.Cómo lo abordamos
 
Cebek oficina fija oficina movil 2 - 201512
Cebek   oficina fija oficina movil 2 - 201512Cebek   oficina fija oficina movil 2 - 201512
Cebek oficina fija oficina movil 2 - 201512
 
Cebek - Oficina fija oficina movil 1 - 201512
Cebek - Oficina fija oficina movil 1 - 201512Cebek - Oficina fija oficina movil 1 - 201512
Cebek - Oficina fija oficina movil 1 - 201512
 
Uso seguro de las TIC en el mundo educativo
Uso seguro de las TIC en el mundo educativoUso seguro de las TIC en el mundo educativo
Uso seguro de las TIC en el mundo educativo
 
Uso ético y seguro de las TIC
Uso ético y seguro de las TICUso ético y seguro de las TIC
Uso ético y seguro de las TIC
 
Redes Sociales Educativas
Redes Sociales EducativasRedes Sociales Educativas
Redes Sociales Educativas
 
CCD2015 - Creación contenidos digitales
CCD2015 - Creación contenidos digitalesCCD2015 - Creación contenidos digitales
CCD2015 - Creación contenidos digitales
 
Cebek - Medidas basicas de seguridad - 201504
Cebek - Medidas basicas de seguridad - 201504Cebek - Medidas basicas de seguridad - 201504
Cebek - Medidas basicas de seguridad - 201504
 
CYPED 2015 - Comunicación y Participación en Entornos Digitales
CYPED 2015 - Comunicación y Participación en Entornos DigitalesCYPED 2015 - Comunicación y Participación en Entornos Digitales
CYPED 2015 - Comunicación y Participación en Entornos Digitales
 
Cebek - jornada identidad digital corporativa
Cebek - jornada identidad digital corporativaCebek - jornada identidad digital corporativa
Cebek - jornada identidad digital corporativa
 
Gamificación, serious games y negocio (SGGN-1409)
Gamificación, serious games y negocio (SGGN-1409)Gamificación, serious games y negocio (SGGN-1409)
Gamificación, serious games y negocio (SGGN-1409)
 
SGGN 20140605
SGGN 20140605SGGN 20140605
SGGN 20140605
 
Programación III (Java) - 09 Cierre
Programación III (Java) - 09 CierreProgramación III (Java) - 09 Cierre
Programación III (Java) - 09 Cierre
 
Programación III (Java) - 08 threads
Programación III (Java) - 08 threadsProgramación III (Java) - 08 threads
Programación III (Java) - 08 threads
 
Programación III (Java) - 07b Swing
Programación III (Java) - 07b SwingProgramación III (Java) - 07b Swing
Programación III (Java) - 07b Swing
 
Programación III (Java) - 07 Eventos
Programación III (Java) - 07 EventosProgramación III (Java) - 07 Eventos
Programación III (Java) - 07 Eventos
 
Programación III (Java) - 06 Ventanas
Programación III (Java) - 06 VentanasProgramación III (Java) - 06 Ventanas
Programación III (Java) - 06 Ventanas
 

Kürzlich hochgeladen

Metabolismo 3: Anabolismo y Fotosíntesis 2024
Metabolismo 3: Anabolismo y Fotosíntesis 2024Metabolismo 3: Anabolismo y Fotosíntesis 2024
Metabolismo 3: Anabolismo y Fotosíntesis 2024IES Vicent Andres Estelles
 
Manejo del Dengue, generalidades, actualización marzo 2024 minsa
Manejo del Dengue, generalidades, actualización marzo 2024 minsaManejo del Dengue, generalidades, actualización marzo 2024 minsa
Manejo del Dengue, generalidades, actualización marzo 2024 minsaLuis Minaya
 
Día de la Madre Tierra-1.pdf día mundial
Día de la Madre Tierra-1.pdf día mundialDía de la Madre Tierra-1.pdf día mundial
Día de la Madre Tierra-1.pdf día mundialpatriciaines1993
 
PLANIFICACION ANUAL 2024 - INICIAL UNIDOCENTE.docx
PLANIFICACION ANUAL 2024 - INICIAL UNIDOCENTE.docxPLANIFICACION ANUAL 2024 - INICIAL UNIDOCENTE.docx
PLANIFICACION ANUAL 2024 - INICIAL UNIDOCENTE.docxJUANSIMONPACHIN
 
TUTORIA II - CIRCULO DORADO UNIVERSIDAD CESAR VALLEJO
TUTORIA II - CIRCULO DORADO UNIVERSIDAD CESAR VALLEJOTUTORIA II - CIRCULO DORADO UNIVERSIDAD CESAR VALLEJO
TUTORIA II - CIRCULO DORADO UNIVERSIDAD CESAR VALLEJOweislaco
 
Contextualización y aproximación al objeto de estudio de investigación cualit...
Contextualización y aproximación al objeto de estudio de investigación cualit...Contextualización y aproximación al objeto de estudio de investigación cualit...
Contextualización y aproximación al objeto de estudio de investigación cualit...Angélica Soledad Vega Ramírez
 
Técnicas de grabado y estampación : procesos y materiales
Técnicas de grabado y estampación : procesos y materialesTécnicas de grabado y estampación : procesos y materiales
Técnicas de grabado y estampación : procesos y materialesRaquel Martín Contreras
 
PINTURA ITALIANA DEL CINQUECENTO (SIGLO XVI).ppt
PINTURA ITALIANA DEL CINQUECENTO (SIGLO XVI).pptPINTURA ITALIANA DEL CINQUECENTO (SIGLO XVI).ppt
PINTURA ITALIANA DEL CINQUECENTO (SIGLO XVI).pptAlberto Rubio
 
SISTEMA INMUNE FISIOLOGIA MEDICA UNSL 2024
SISTEMA INMUNE FISIOLOGIA MEDICA UNSL 2024SISTEMA INMUNE FISIOLOGIA MEDICA UNSL 2024
SISTEMA INMUNE FISIOLOGIA MEDICA UNSL 2024gharce
 
La Función tecnológica del tutor.pptx
La  Función  tecnológica  del tutor.pptxLa  Función  tecnológica  del tutor.pptx
La Función tecnológica del tutor.pptxJunkotantik
 
5° SEM29 CRONOGRAMA PLANEACIÓN DOCENTE DARUKEL 23-24.pdf
5° SEM29 CRONOGRAMA PLANEACIÓN DOCENTE DARUKEL 23-24.pdf5° SEM29 CRONOGRAMA PLANEACIÓN DOCENTE DARUKEL 23-24.pdf
5° SEM29 CRONOGRAMA PLANEACIÓN DOCENTE DARUKEL 23-24.pdfOswaldoGonzalezCruz
 
LA OVEJITA QUE VINO A CENAR CUENTO INFANTIL.pdf
LA OVEJITA QUE VINO A CENAR CUENTO INFANTIL.pdfLA OVEJITA QUE VINO A CENAR CUENTO INFANTIL.pdf
LA OVEJITA QUE VINO A CENAR CUENTO INFANTIL.pdfNataliaMalky1
 
Estrategia de Enseñanza y Aprendizaje.pdf
Estrategia de Enseñanza y Aprendizaje.pdfEstrategia de Enseñanza y Aprendizaje.pdf
Estrategia de Enseñanza y Aprendizaje.pdfromanmillans
 
Tarea 5_ Foro _Selección de herramientas digitales_Manuel.pdf
Tarea 5_ Foro _Selección de herramientas digitales_Manuel.pdfTarea 5_ Foro _Selección de herramientas digitales_Manuel.pdf
Tarea 5_ Foro _Selección de herramientas digitales_Manuel.pdfManuel Molina
 
cuadernillo de lectoescritura para niños de básica
cuadernillo de lectoescritura para niños de básicacuadernillo de lectoescritura para niños de básica
cuadernillo de lectoescritura para niños de básicaGianninaValeskaContr
 
PPT GESTIÓN ESCOLAR 2024 Comités y Compromisos.pptx
PPT GESTIÓN ESCOLAR 2024 Comités y Compromisos.pptxPPT GESTIÓN ESCOLAR 2024 Comités y Compromisos.pptx
PPT GESTIÓN ESCOLAR 2024 Comités y Compromisos.pptxOscarEduardoSanchezC
 
LINEAMIENTOS INICIO DEL AÑO LECTIVO 2024-2025.pptx
LINEAMIENTOS INICIO DEL AÑO LECTIVO 2024-2025.pptxLINEAMIENTOS INICIO DEL AÑO LECTIVO 2024-2025.pptx
LINEAMIENTOS INICIO DEL AÑO LECTIVO 2024-2025.pptxdanalikcruz2000
 

Kürzlich hochgeladen (20)

Metabolismo 3: Anabolismo y Fotosíntesis 2024
Metabolismo 3: Anabolismo y Fotosíntesis 2024Metabolismo 3: Anabolismo y Fotosíntesis 2024
Metabolismo 3: Anabolismo y Fotosíntesis 2024
 
Manejo del Dengue, generalidades, actualización marzo 2024 minsa
Manejo del Dengue, generalidades, actualización marzo 2024 minsaManejo del Dengue, generalidades, actualización marzo 2024 minsa
Manejo del Dengue, generalidades, actualización marzo 2024 minsa
 
Día de la Madre Tierra-1.pdf día mundial
Día de la Madre Tierra-1.pdf día mundialDía de la Madre Tierra-1.pdf día mundial
Día de la Madre Tierra-1.pdf día mundial
 
PLANIFICACION ANUAL 2024 - INICIAL UNIDOCENTE.docx
PLANIFICACION ANUAL 2024 - INICIAL UNIDOCENTE.docxPLANIFICACION ANUAL 2024 - INICIAL UNIDOCENTE.docx
PLANIFICACION ANUAL 2024 - INICIAL UNIDOCENTE.docx
 
Aedes aegypti + Intro to Coquies EE.pptx
Aedes aegypti + Intro to Coquies EE.pptxAedes aegypti + Intro to Coquies EE.pptx
Aedes aegypti + Intro to Coquies EE.pptx
 
TUTORIA II - CIRCULO DORADO UNIVERSIDAD CESAR VALLEJO
TUTORIA II - CIRCULO DORADO UNIVERSIDAD CESAR VALLEJOTUTORIA II - CIRCULO DORADO UNIVERSIDAD CESAR VALLEJO
TUTORIA II - CIRCULO DORADO UNIVERSIDAD CESAR VALLEJO
 
Tema 7.- E-COMMERCE SISTEMAS DE INFORMACION.pdf
Tema 7.- E-COMMERCE SISTEMAS DE INFORMACION.pdfTema 7.- E-COMMERCE SISTEMAS DE INFORMACION.pdf
Tema 7.- E-COMMERCE SISTEMAS DE INFORMACION.pdf
 
Contextualización y aproximación al objeto de estudio de investigación cualit...
Contextualización y aproximación al objeto de estudio de investigación cualit...Contextualización y aproximación al objeto de estudio de investigación cualit...
Contextualización y aproximación al objeto de estudio de investigación cualit...
 
Técnicas de grabado y estampación : procesos y materiales
Técnicas de grabado y estampación : procesos y materialesTécnicas de grabado y estampación : procesos y materiales
Técnicas de grabado y estampación : procesos y materiales
 
PINTURA ITALIANA DEL CINQUECENTO (SIGLO XVI).ppt
PINTURA ITALIANA DEL CINQUECENTO (SIGLO XVI).pptPINTURA ITALIANA DEL CINQUECENTO (SIGLO XVI).ppt
PINTURA ITALIANA DEL CINQUECENTO (SIGLO XVI).ppt
 
SISTEMA INMUNE FISIOLOGIA MEDICA UNSL 2024
SISTEMA INMUNE FISIOLOGIA MEDICA UNSL 2024SISTEMA INMUNE FISIOLOGIA MEDICA UNSL 2024
SISTEMA INMUNE FISIOLOGIA MEDICA UNSL 2024
 
La Función tecnológica del tutor.pptx
La  Función  tecnológica  del tutor.pptxLa  Función  tecnológica  del tutor.pptx
La Función tecnológica del tutor.pptx
 
5° SEM29 CRONOGRAMA PLANEACIÓN DOCENTE DARUKEL 23-24.pdf
5° SEM29 CRONOGRAMA PLANEACIÓN DOCENTE DARUKEL 23-24.pdf5° SEM29 CRONOGRAMA PLANEACIÓN DOCENTE DARUKEL 23-24.pdf
5° SEM29 CRONOGRAMA PLANEACIÓN DOCENTE DARUKEL 23-24.pdf
 
LA OVEJITA QUE VINO A CENAR CUENTO INFANTIL.pdf
LA OVEJITA QUE VINO A CENAR CUENTO INFANTIL.pdfLA OVEJITA QUE VINO A CENAR CUENTO INFANTIL.pdf
LA OVEJITA QUE VINO A CENAR CUENTO INFANTIL.pdf
 
Estrategia de Enseñanza y Aprendizaje.pdf
Estrategia de Enseñanza y Aprendizaje.pdfEstrategia de Enseñanza y Aprendizaje.pdf
Estrategia de Enseñanza y Aprendizaje.pdf
 
Tarea 5_ Foro _Selección de herramientas digitales_Manuel.pdf
Tarea 5_ Foro _Selección de herramientas digitales_Manuel.pdfTarea 5_ Foro _Selección de herramientas digitales_Manuel.pdf
Tarea 5_ Foro _Selección de herramientas digitales_Manuel.pdf
 
cuadernillo de lectoescritura para niños de básica
cuadernillo de lectoescritura para niños de básicacuadernillo de lectoescritura para niños de básica
cuadernillo de lectoescritura para niños de básica
 
PPT GESTIÓN ESCOLAR 2024 Comités y Compromisos.pptx
PPT GESTIÓN ESCOLAR 2024 Comités y Compromisos.pptxPPT GESTIÓN ESCOLAR 2024 Comités y Compromisos.pptx
PPT GESTIÓN ESCOLAR 2024 Comités y Compromisos.pptx
 
LINEAMIENTOS INICIO DEL AÑO LECTIVO 2024-2025.pptx
LINEAMIENTOS INICIO DEL AÑO LECTIVO 2024-2025.pptxLINEAMIENTOS INICIO DEL AÑO LECTIVO 2024-2025.pptx
LINEAMIENTOS INICIO DEL AÑO LECTIVO 2024-2025.pptx
 
Earth Day Everyday 2024 54th anniversary
Earth Day Everyday 2024 54th anniversaryEarth Day Everyday 2024 54th anniversary
Earth Day Everyday 2024 54th anniversary
 

Programación III (Java) - 03 Interfaces

  • 1. 3. Interfaces Herencia y clases abstractas Object y herencia simple Clases abstractas y métodos genéricos Fundamento / El por qué ¿Qué son? Definición Implementación, simple y múltiple Herencia de Interfaces Programación III Tema 3 - Interfaces
  • 2. Herencia - Definición • Relación es-un entre dos clases: coche  vehículo, alumnopersona, rectángulopolígono, etc. • Clase hija (subclase)  clase padre (superclase) – Hijas - más concretas, padres - comportamiento más general • En Java, cada hija sólo tiene un padre: herencia simple, aunque puede tener N hijas • La raíz de la jerarquía de clases en Java es la clase Object • Una clases hereda (tiene) todos los métodos y atributos de sus clases superiores (de la clase hasta Object) • Sólo puede acceder directamente a los que no sean privados (private) • Ventajas principales: – reutilización de código – diferenciación de código (menos “if”s) Programación III Tema 3 - Interfaces
  • 3. Sintaxis • La relación jerárquica se representa mediante extends class <hija> extends <padre> • Ejemplo: Figura Rectángulo class Rectangulo extends Figura { ... } • La herencia es transitiva: si A  B y B  C, A  C • Si no hay cláusula extends, la clase deriva de Object Programación III Tema 3 - Interfaces
  • 4. Ejemplo de herencia class Persona{ class Alumno extends Persona { private int edad; private int curso; private String nombre; private char grupo; private String titulacion; Persona (int e, String n){ edad = e; Alumno (int c, char g, String t){ nombre = n; curso = c; } grupo = g; /* Métodos set/get para todos los atributos */ titulacion = t; } } /* Métodos set/get para todos los atributos */ Persona } • Este código da un error ¿por qué? Alumno Programación III Tema 3 - Interfaces
  • 5. Llamada de constructores en herencia 1 - super • Cuando en una clase no se define ningún constructor, Java crea (aunque no se ve) el constructor por defecto class Persona{ private int edad; private String nombre; Persona ( ){ //Constructor por defecto. Existe, pero no se ve. } /* Métodos set/get para todos los atributos */ ... public static void main(String args[]){ //Se puede comprobar que existe, creando objetos Persona Persona p1 = new Persona(); /* La llamada al constructor vacío no da error, porque Java lo ha creado */ } } Programación III Tema 3 - Interfaces
  • 6. Llamada de constructores en herencia 2 - super • En el momento en el que el programador crea otro constructor, el constructor por defecto deja de existir. class Persona{ private int edad; private String nombre; Persona (int e, String n){ edad = e; nombre = n; } /* Métodos set/get para todos los atributos */ ... public static void main(String args[]){ /* Esta misma llamada daría error, porque no existe un constructor con esas características */ Persona p1 = new Persona(); /*Sí es posible llamar al constructor definido */ Persona p2 = new Persona(20, “Ana”); } } Programación III Tema 3 - Interfaces
  • 7. Llamada de constructores en herencia 3 - super • Cuando una clase tiene una clase padre, lo primero que class Alumno extends Persona { hace su constructor (aunque no private int curso; private char grupo; lo veamos), es llamar al private String titulacion; constructor de la clase Alumno(int c, char g, String t){ padre (al constructor vacío: /*Llamada al constructor de la super( );) clase padre, existe pero no se ve*/ super(); class Persona{ curso = c; private int edad; grupo = g; private String nombre; titulacion = t; } } Persona (int e, String n){ edad = e; nombre = n; • Este constructor produce un error } ¿por qué? /* Métodos set/get para todos los atributos */ ... } Programación III Tema 3 - Interfaces
  • 8. Llamada de constructores en herencia 4 - super • Solución 1. Crear constructor vacío • Solución 2. Llamar explícitamente al constructor del padre que sí existe class Persona{ class Persona{ private int edad; private int edad; private String nombre; private String nombre; Persona ( ) { } Persona (int e, String n){ Persona (int e, String n){ edad = e; edad = e; nombre = n; nombre = n; } } } } class Alumno extends Persona { class Alumno extends Persona { private int curso; private int curso; private char grupo; private char grupo; private String titulacion; private String titulacion; Alumno(int c, char g, String t, Alumno(int c, char g, String t){ int e, String n){ super(); super(e, n); curso = c; curso = c; grupo = g; grupo = g; titulacion = t; titulacion = t; } } } } Programación III Tema 3 - Interfaces
  • 9. Ejemplo de llamada a constructores class Figura { class X { Figura (){ public static void main (...){ s.o.p.(“Creando figura”); Cuadrado c1 = new } Cuadrado(); } } } class Rectangulo extends Figura { • ¿Qué sale por pantalla? Rectangulo (){ • ¿A qué se debe? s.o.p.(“Creando • (super) rectangulo”); } } class Cuadrado extends Rectangulo { Cuadrado (){ s.o.p.(“Creando cuadrado”); } } Programación III Tema 3 - Interfaces
  • 10. this • Dentro de un método, hace referencia al objeto que lo llama class Persona{ private int edad; private String nombre; Persona (int edad, String nombre){ edad = edad; nombre = nombre; } • ¿Qué pasa en este constructor? ¿Cómo resolverlo? void imprimirDatos(){ s.o.p.(“Persona: “ + this.nombre + “ “ + this.edad); /* En este caso no sería necesario, es suficiente el nombre de los atributos */ } } Programación III Tema 3 - Interfaces
  • 11. this y super class Alumno extends Persona{ class Persona{ private int curso; private int edad; private char grupo; private String nombre; private String titulacion; Alumno(int c, char g, String t, int e, String n){ Persona (int edad, String super(e, n); nombre){ curso = c; this.edad = edad; grupo = g; this.nombre = nombre; titulacion = t; } void imprimirDatos (){ } s.o.p.(curso + “-” + grupo); void imprimirDatos(){ s.o.p.(“(“ + titulacion + “)”); s.o.p.(“Persona: “); } void imprimirTodos(){ s.o.p.(nombre + “ “); super.imprimirDatos(); s.o.p.(edad); this.imprimirDatos(); } imprimirDatos(); } } public static void main(String args[]){ Alumno al; al = new Alumno(1, 'a', "ITTET", 18, "Pedro"); al.imprimirTodos(); } } • ¿Qué obtenemos por pantalla? Programación III Tema 3 - Interfaces
  • 12. this en constructores class Alumno extends Persona{ ... Alumno(int c, char g, String t, int e, String n){ super(e, n); curso = c; grupo = g; titulacion = t; } Alumno(int c, char g, String t){ this(c, g, t, 0, “Sin definir”); } ... } Programación III Tema 3 - Interfaces
  • 13. Resumen this y super – this • Es la referencia al propio objeto sobre el que se está trabajando. • No hace falta usarla para acceder a los atributos y métodos propios. • Pero a veces es necesaria cuando se quiere pasar la referencia al propio objeto como parámetro de otro método. • En constructores puede usarse para llamar entre ellos (lo primero) – super • Permite referenciar a la clase padre. • Se emplea cuando se ha redefinido un método y se quiere acceder al método del padre (si no se usara esta palabra reservada se llamaría al método de la propia clase y no habría forma de invocar el del padre). [super.método(...)] • Permite también llamar al constructor de la clase padre desde el constructor de la clase hija. [super(...)] Esto es lo primero que se hace en todo constructor (si no se indica explícitamente, se hace sin parámetros). Programación III Tema 3 - Interfaces
  • 14. Comprob. tipo en ejecución • instanceof – Permite controlar la clase a la que pertenece un objeto (no la variable, el objeto) Vehiculo[] v = new Vehiculo[3] v[0] = new Coche(); v[1] = new Moto(); v[2] = new CocheJuguete(); ... if (v[i] instanceof Moto) { (Moto)v[i] ... } Programación III Tema 3 - Interfaces
  • 15. Método abstracto • Precedido de la palabra clave abstract • Un método abstracto es el que no tiene implementación class X { abstract void m1(); } • NO es lo mismo que un método “vacío” class X { void m1(){ } } • Una clase que contiene un método abstracto, es una clase abstracta, y debe de llevar el modificador abstract abstract class X { abstract void m1(); } Programación III Tema 3 - Interfaces
  • 16. Herencia de métodos abstractos • Cuando una clase hereda un método abstracto, tiene dos opciones: – Implementar el método (darle código) class Y extends X { void m1(){...} } – No implementarlo (no hacer nada con él). En este caso la clase pasa a ser abstracta (si no se pone abstract no compila) abstract class Y extends X { } • Una clase es abstracta si: – Tiene un método abstracto definido dentro (clase X) – Hereda un método abstracto y no lo implementa (clase Y, ejem 2) • NO se pueden crear objetos de una clase abstracta: X x1; //Correcto x1 = new X(); //Incorrecto ¿Por qué? Programación III Tema 3 - Interfaces
  • 17. Utilidad de métodos abstractos • Si no se pueden crear objetos de clases abstractas ¿para qué sirven? • Son clases de definición – Indican cómo deben comportarse las subclases, qué métodos deben tener obligatoriamente (porque la herencia no puede quitar métodos) – Sirven para proporcionar un comportamiento y definición general a las subclases, permitiendo especificar en cada subclase una implementación diferente • No compromete cuál debe ser ese comportamiento – Puede haber algunos métodos no abstractos porque su código sí pueda definirse • ej.: FiguraGeometrica – void dibujar() { dibujarArea(); dibujarAristas() } abstract Animal abstract void emitirSonido( ); Perro Felino Ave void emitirSonido( ){ void emitirSonido( ){ void emitirSonido( ){ s.o.p.(“Guau”); s.o.p.(“Grrr...”); s.o.p.(“Pio-pio”); } } } Gato Lince Pantera Canario Golondrina Programación III Tema 3 - Interfaces
  • 18. Modificador final • final – Indica que la definición de la clase está completa. • No se puede heredar de esa clase (no puede tener subclases). • Si una clase es declarada abstract y final  Error de compilación – Otros usos de final : • en atributos indica constantes (su valor no puede cambiar) • en métodos indica que no se pueden redefinir en subclases (una clase final hace a todos sus métodos finales) Programación III Tema 3 - Interfaces
  • 19. Interfaces: fundamento • Ejemplo: bubble sort – Ordenar fechas – Ordenar fracciones – ¿Cómo generalizamos? Programación III Tema 3 - Interfaces
  • 20. Ordenación de fechas public class OrdenarFechas { static void ordenaArray( Fecha v[] ) // Ordena array de fechas por bubble sort { for (int i=0; i<v.length-1; i++) { for (int j=1; j<v.length-i; j++) { if (v[j-1].esMayorQue(v[j])) { Fecha temp = v[j]; v[j] = v[j-1]; v[j-1] = temp; } } } } ... Programación III Tema 3 - Interfaces
  • 21. Ordenación de fracciones public class OrdenarFracciones { static void ordenaArray( Fraccion v[] ) // Ordena array de fracciones por bubble sort { for (int i=0; i<v.length-1; i++) { for (int j=1; j<v.length-i; j++) { if (v[j-1].esMayorQue(v[j])) { Fraccion temp = v[j]; v[j] = v[j-1]; v[j-1] = temp; } } } } ... Programación III Tema 3 - Interfaces
  • 22. ¿Cómo generalizar? • Método de ordenación idéntico – Son clases distintas – Ambas se pueden comparar por mayor – Pero no se pueden heredar (no tienen nada que ver) • ¿Cómo lo generalizamos? public class OrdenarLoQueSea { static void ordenaArray( LoQueSea v[] ) { for (int i=0; i<v.length-1; i++) { for (int j=1; j<v.length-i; j++) { if (v[j-1].esMayorQue(v[j])) { LoQueSea temp = v[j]; v[j] = v[j-1]; v[j-1] = temp; } } } ... Programación III Tema 3 - Interfaces
  • 23. Solución interface Ordenable { boolean esMayorQue( Ordenable o ); } public class Ordenar { static void ordenaArray( Ordenable v[] ) { for (int i=0; i<v.length-1; i++) { for (int j=1; j<v.length-i; j++) { if (v[j-1].esMayorQue(v[j])) { Ordenable temp = v[j]; v[j]=v[j-1]; v[j-1]=temp; } } } } class Fraccion implements Ordenable { public boolean esMayorQue( Ordenable o ) { if (o instanceof Fraccion) { Fraccion f2 = (Fraccion) o; return (1.0*num/den > 1.0*f2.num/f2.den); } else return false; ... Programación III Tema 3 - Interfaces
  • 24. El por qué de los interfaces (1) • Herencia Múltiple – Una clase tiene más de un padre – Presenta problemas cuando: • Se heredan varias implementaciones para un mismo método • Se heredan varias copias de un mismo atributo • Ejemplo: Vehiculo VehiculoTerrestre VehiculoAcuatico Coche VehiculoAnfibio Barco Programación III Tema 3 - Interfaces
  • 25. El por qué de los interfaces (2) • Complejidad (Eiffel, C++): – Si la clase Vehículo tuviera un atributo llamado matrícula, ¿Cuántas matrículas tendría la clase VehiculoAnfibio? – ¿Si Vehículo tuviera un método implementado de forma diferente por VehiculoTerrestre y por VehiculoAcuatico? • Java no permite la herencia múltiple – ¿Cómo resuelve Java estas jerarquías? – Mediante otro mecanismo: los interfaces Programación III Tema 3 - Interfaces
  • 26. ¿Qué es un interface? • Es un conjunto de métodos – Sólo cabeceras, sin implementación – Definen un comportamiento específico para un conjunto de objetos • Es una forma de crear tipos (como las clases) – Se pueden declarar variables – Se pueden declarar métodos • Y debido a esto: – Sus métodos son “abstractos” – No se pueden instanciar (como las clases abstractas) – No se hereda codificación, sólo definición Programación III Tema 3 - Interfaces
  • 27. Definición de interfaces • Palabra reservada interface seguida de una lista de métodos (cabeceras) sin implementación • Ejemplo 1: interface UnInterface { void mensaje1(); void mensaje2(); } • Ejemplo 2: interface Driveable { boolean startEngine(); void stopEngine(); float accelerate(float acc); boolean turn(Direction dir); } • Todos los métodos de un interface son públicos Programación III Tema 3 - Interfaces
  • 28. Implementación de interfaces (1) • Para “implementar” un interface: – Cláusula implements – Cuando se relaciona una clase con una interfaz y no se implementan los métodos, la clase pasa a ser “abstracta” (no se puede instanciar). • Ejemplo 1: class UnaClase implements UnInterface { void mensaje1() { System.out.println(“1”); } void mensaje2() { System.out.println(“2”); } } • Ejemplo 2: class Automobile implements Driveable { public boolean startEngine() { if (notTooCold) engineRunning = true; ... } public void stopEngine() { ... engineRunning = false; } public float accelerate(float acc) { ... } public boolean turn(Direction dir) { ... } } Programación III Tema 3 - Interfaces
  • 29. Implementación de interfaces (2) • En estos momentos: – La clase Automobile implementa el interface Driveable – La clase Automobile posee un tipo “extra”: El tipo Driveable – Todos los objetos de la clase Automobile pertenecen también al tipo Driveable • Un interface puede ser implementado por más de una clase class Automobile implements Driveable { ... } class LawnMower implements Driveable { ... } – En cualquier lugar donde se requiera un objeto del tipo Driveable podremos situar un objeto de la clase Automobile o de la clase LawnMower. De esta forma nos aseguramos que los métodos existen aunque no nos preocupa su implementación real. Estamos definiendo una API, una interfaz de programación que asegura un concepto, no una implementación concreta. Automobile auto = new Automobile(); Lawnmower mower = new Lawnmower(); Driveable vehicle; vehicle = auto; vehicle.startEngine(); vehicle.stopEngine(); ... vehicle = mower; vehicle.startEngine(); vehicle.stopEngine(); Programación III Tema 3 - Interfaces
  • 30. Interfaces - ejemplo • interfaz Comparable – Método int compareTo(Object o) • Devuelve -1, 0, +1 • Todas las clases que sean ordenables pueden implementar este interfaz • ¿Qué ventajas tiene el programador? – Regularidad: siempre se compara igual – Polimorfismo: • void ordenaGrupo( Comparable c[] ) Programación III Tema 3 - Interfaces
  • 31. Implem. de interfaces múltiples (1) • Una clase puede implementar más de un interface (herencia múltiple) – Ejemplo 1: interface A { void mensaje1(); void mensaje2(); } interface B { void mensaje3(); void mensaje4(); } class C implements A, B { void mensaje1() {System.out.println(“1”);} void mensaje2() {System.out.println(“2”);} void mensaje3() {System.out.println(“3”);} void mensaje4() {System.out.println(“4”);} } Programación III Tema 3 - Interfaces
  • 32. Implem. de interfaces múltiples (2) – Ejemplo 2: • Tenemos un nuevo interface: el interface Cloneable interface Cloneable { Object clone(); } • Tenemos una clase base para todos los tipos de vehículos llamada Vehicle • Definamos Automobile: class Automobile extends Vehicle implements Driveable, Cloneable { ... public boolean startEngine() { ... } public void stopEngine() { ... } public float accelerate( float acc ) { ... } public boolean turn( Direction dir ) { ... } public Object clone() { ... } } • Automobile debe implementar los métodos de todos los interfaces que implemente si se quiere poder instanciar objetos de tipo Automobile. • Los objetos de la clase Automobile pertenecerán a 4 tipos distintos (se podrán usar como si fueran de cualquiera de esos tipos): – El tipo Automobile – El tipo Vehicle – El tipo Driveable – El tipo Cloneable Programación III Tema 3 - Interfaces
  • 33. Herencia de interfaces • Los interfaces pueden heredar mediante extends interface A { void mensaje1(); } interface B extends A { void mensaje2(); } • Una clase que implemente el interface B deberá implementar los métodos de ambos interfaces si quiere poder crear objetos. class C implements B { void mensaje1() {System.out.println(“1”);} void mensaje2() {System.out.println(“2”);} } • Además, Java admite la herencia múltiple entre interfaces interface A { void mensaje1(); } interface B extends A { void mensaje2(); } interface C extends A { void mensaje3(); } interface D extends B, C { void mensaje4(); } • La clase que implemente el interface D deberá implementar los 4 métodos si quiere que se puedan instanciar objetos. Programación III Tema 3 - Interfaces
  • 34. Ejemplo: Interfaces y clases abstractas interface ElementoVolador { void acelerar( int vel ); } interface ElementoMecanicoVolador extends ElementoVolador { void arreglarMecanismos(); } abstract class Avion implements ElementoMecanicoVolador { boolean elMotorFunciona; public void arreglarMecanismos() { elMotorFunciona = true; } } class AvionComercial extends Avion { int velocidad; public void acelerar( int vel ) { velocidad += vel; } } Programación III Tema 3 - Interfaces
  • 35. Ejercicios propuestos (1) • Implementación de Enumeration • Queremos incorporar en la clase ListaEnlazada el interface de java.util.Enumeration. Para ello: – Definiremos una clase de paquete EnumeradorLista que implemente el interface de Enumeration sobre una lista enlazada. Esto es, tiene que tener un constructor que inicialice la secuencia, un método de comprobación de final hasMoreElements() y un método de extracción del siguiente elemento de la secuencia nextElement(). – Para evitar que esta clase la tenga que manipular directamente el usuario incorporaremos a la clase ListaEnlazada un método enumeracion() que devuelva una instancia de EnumeradorLista inicializada sobre la propia lista. – Así, desde un programa podremos para recorrer cualquier lista y hacer algo así como: java.util.Enumeration e = l.enumeracion(); while (e.hasMoreElements()) { System.out.print( " " + e.nextElement() ); } – Esta clase EnumeradorLista es el clásico ejemplo de uso de clase interna. Probar a definirla así. – Cambiar la clase ListaEnlazada de acuerdo a todo esto. Probar en el main que efectivamente la enumeración funciona. Programación III Tema 3 - Interfaces
  • 36. Ejercicios propuestos (2) • Jerarquía de figuras – Crear una clase llamada Figura de la que extiendan las clases Cuadrado, Triángulo y Círculo. Figura debe ser una clase abstracta que contenga dos métodos void dibujar() y void borrar(). Por otro lado, cada clase descendiente de Figura va a redefinir estos métodos visualizando por pantalla, en cada caso, un mensaje. • (Por ejemplo: “Dibujando cuadrado/triángulo/círculo”, “Borrando cuadrado/triángulo/círculo”). – Crear por otro lado una clase Pizarra que tenga un atributo que sea un array de Figuras. Además, tendrá un método para añadir Figuras al array y otro para borrar todas las figuras del array. • Para probar el funcionamiento, realizar una clase Ejemplo que añada varias figuras (de cualquier tipo) a la pizarra. Ir viendo lo que saldría por pantalla para ver cómo funciona el polimorfismo. También se puede llamar al método borrar de la clase Pizarra para ver cómo se irían borrando todas las figuras. – Jerarquía de figuras + Interfaces • Modificar el ejercicio anterior de la siguiente forma: – Definir un interface llamado Coloreable que hace referencia a todos los objetos que admiten un color, definiendo los métodos void cambiaColor( Color c ) que cambia el color del objeto y el Color queColor() que devuelve el color del objeto. – Hacer que Figura implemente el interfaz Coloreable, añadiendo los métodos y atributos necesarios. ¿Dónde implementarías estos métodos? Hazlo. Programación III Tema 3 - Interfaces