MÓDULO 3<br />INTRODUCCIÓN A JAVA<br />3.9 CLASES ABSTRACTAS E INTERFACES<br />40 HORAS<br />Jesús Muñoz<br />jesus@iluego...
Contenidos tema 3 – Introducción a Java<br />Comenzamos<br />Bases del lenguaje Java<br />Programación Orientada a Objetos...
3<br />Contenidos de este tema<br />Clases abstractas e interfaces<br />Métodos abstractos<br />Clases abstractas<br />Cuá...
4<br />Contenidos de este tema<br />Clases abstractas e interfaces<br />Métodos abstractos<br />Clases abstractas<br />Cuá...
5<br />Métodos abstractos<br />Son métodos que no están implementados (body)<br />Para crear un método abstracto sólo es n...
6<br />Contenidos de este tema<br />Clases abstractas e interfaces<br />Métodos abstractos<br />Clases abstractas<br />Cuá...
7<br />Clases abstractas<br />Una clase abstracta es una clase que contiene<br />uno o más<br />	métodos abstractos<br />U...
8<br />Clases abstractas<br />public abstract class LivingThing {<br />public void breath(){<br />System.out.println("Livi...
9<br />Clases abstractas<br />Cuando una clase concreta extiende de la clase abstracta LivingThing, debe implementar el mé...
10<br />Contenidos de este tema<br />Clases abstractas e interfaces<br />Métodos abstractos<br />Clases abstractas<br />Cu...
11<br />Cuándo usar clases abstractas<br />Resulta evidente en el ejemplo de la figura que los diversos tipos de motores t...
12<br />Contenidos de este tema<br />Clases abstractas e interfaces<br />Métodos abstractos<br />Clases abstractas<br />Cu...
13<br />Qué es un interface<br />Define un camino standard y público de especificar el propósito de las clases<br />Define...
14<br />Contenidos de este tema<br />Clases abstractas e interfaces<br />Métodos abstractos<br />Clases abstractas<br />Cu...
15<br />Por qué usar un interface<br />Para revelar el interface (la funcionalidad del objeto) sin revelar su implementaci...
16<br />Por qué usar un interface<br />Para revelar el interface (la funcionalidad del objeto) sin revelar su implementaci...
17<br />Contenidos de este tema<br />Clases abstractas e interfaces<br />Métodos abstractos<br />Clases abstractas<br />Cu...
18<br />Interface vs. Clase abstracta<br />Todos los métodos de una interface son métodos abstractos, mientras que sólo al...
19<br />Contenidos de este tema<br />Clases abstractas e interfaces<br />Métodos abstractos<br />Clases abstractas<br />Cu...
20<br />Interface como type<br />Cuando definimos un nuevo interface, estamos definiendo un nuevo tipo<br />Podemos usar e...
21<br />Contenidos de este tema<br />Clases abstractas e interfaces<br />Métodos abstractos<br />Clases abstractas<br />Cu...
22<br />Interface vs. Class<br />En la práctica las interfaces y las clases son tipos<br />Esto significa que una interfac...
23<br />Interface vs. Class<br />DIFERENCIAS<br />Los métodos de un interface son todos métodos abstractos<br />No tienen ...
24<br />Interface vs. Class<br />Definiendo una interface:<br />public interface [InterfaceName] {<br />		//some methods w...
25<br />Contenidos de este tema<br />Clases abstractas e interfaces<br />Métodos abstractos<br />Clases abstractas<br />Cu...
26<br />Implementando interfaces<br />Para crear una clase concreta que implemente un interface:<br />implements keyword.<...
27<br />Implementando interfaces<br />public double getLength(){<br />double length = Math.sqrt((x2-x1)*(x2-x1) +<br />(y2...
28<br />Implementando interfaces<br />Cuando la clase trata de implementar una interface hay que asegurarse de implementar...
29<br />Contenidos de este tema<br />Clases abstractas e interfaces<br />Métodos abstractos<br />Clases abstractas<br />Cu...
30<br />Implementando múltiples interfaces<br />Una clase concreta:<br />Extiende sólo de una clase<br />Puede implementar...
31<br />Implementando múltiples interfaces<br />Una clase concreta:<br />Extiende sólo de una clase<br />Puede implementar...
32<br />Contenidos de este tema<br />Clases abstractas e interfaces<br />Métodos abstractos<br />Clases abstractas<br />Cu...
33<br />Herencia en interfaces<br />Las interfaces no son parte de la jerarquía de clases:<br />Sin embargo, las interface...
34<br />Contenidos de este tema<br />Clases abstractas e interfaces<br />Métodos abstractos<br />Clases abstractas<br />Cu...
35<br />Interfaces y polimorfismo<br />Las interfaces permiten polimorfismo, desde que pueden llamar a un método de la int...
36<br />Contenidos de este tema<br />Clases abstractas e interfaces<br />Métodos abstractos<br />Clases abstractas<br />Cu...
37<br />Reescribiendo interfaces<br />Considerar un interface que hemos creado llamado DoIt:<br />public interface DoIt {<...
38<br />Reescribiendo interfaces<br />La solución de reescribir una interface existente:<br />Crear más interfaces después...
39<br />Contenidos de este tema<br />Clases abstractas e interfaces<br />Métodos abstractos<br />Clases abstractas<br />Cu...
40<br />Ejemplo<br />
Es importante que recordeis…<br />“Si haces todos los días lo mismo no llegarás más lejos de lo que otras veces has llegad...
Upcoming SlideShare
Loading in...5
×

09 Clases Abstractas E Interfaces

28,926

Published on

FactoriaJava.com - Desarrollo Java

Curso Desarrollo y Gestión de Aplicaciones Web con Tecnología Java

Tema 03 - Módulo 09 - Clases abstractas e interfaces

Published in: Technology
4 Comments
14 Likes
Statistics
Notes
No Downloads
Views
Total Views
28,926
On Slideshare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
0
Comments
4
Likes
14
Embeds 0
No embeds

No notes for slide

Transcript of "09 Clases Abstractas E Interfaces"

  1. 1. MÓDULO 3<br />INTRODUCCIÓN A JAVA<br />3.9 CLASES ABSTRACTAS E INTERFACES<br />40 HORAS<br />Jesús Muñoz<br />jesus@iluego.com<br />
  2. 2. Contenidos tema 3 – Introducción a Java<br />Comenzamos<br />Bases del lenguaje Java<br />Programación Orientada a Objetos (OOP)<br />Clases y objetos<br />Creando clases<br />Paquetes y java classpath<br />Javabeans<br />Herencia<br />Clases abstractas e interfaces<br />Polimorfismo<br />Clases internas<br />Excepciones<br />Logging<br />Networking<br />2<br />
  3. 3. 3<br />Contenidos de este tema<br />Clases abstractas e interfaces<br />Métodos abstractos<br />Clases abstractas<br />Cuándo usar clases abstractas<br />Qué es un interface<br />Por qué usar un interface<br />Interface vs. clase abstracta<br />Interface como type<br />Interface vs. class<br />Implementando interfaces<br />Implementando múltiples interfaces<br />Herencia en interfaces<br />Interfaces y polimorfismo<br />Reescribiendo interfaces<br />Ejemplo<br />
  4. 4. 4<br />Contenidos de este tema<br />Clases abstractas e interfaces<br />Métodos abstractos<br />Clases abstractas<br />Cuándo usar clases abstractas<br />Qué es un interface<br />Por qué usar un interface<br />Interface vs. clase abstracta<br />Interface como type<br />Interface vs. class<br />Implementando interfaces<br />Implementando múltiples interfaces<br />Herencia en interfaces<br />Interfaces y polimorfismo<br />Reescribiendo interfaces<br />Ejemplo<br />
  5. 5. 5<br />Métodos abstractos<br />Son métodos que no están implementados (body)<br />Para crear un método abstracto sólo es necesaria la declaración del método sin el cuerpo (body) y usando la palabra reservada abstract<br />// Note that there is no body<br />public abstract void someMethod();<br />
  6. 6. 6<br />Contenidos de este tema<br />Clases abstractas e interfaces<br />Métodos abstractos<br />Clases abstractas<br />Cuándo usar clases abstractas<br />Qué es un interface<br />Por qué usar un interface<br />Interface vs. clase abstracta<br />Interface como type<br />Interface vs. class<br />Implementando interfaces<br />Implementando múltiples interfaces<br />Herencia en interfaces<br />Interfaces y polimorfismo<br />Reescribiendo interfaces<br />Ejemplo<br />
  7. 7. 7<br />Clases abstractas<br />Una clase abstracta es una clase que contiene<br />uno o más<br /> métodos abstractos<br />Una clase abstracta no puede ser instanciada. Al compilar recibiremos un error de compilación.<br />Otra clase ha de proveer la implementación de los métodos abstractos<br />Una clase concreta ha de implementar todos los métodos abstractos de la clase abstracta para poder ser instanciada<br />La clase que implementa esos métodos debe extender de ésta (extends)<br />
  8. 8. 8<br />Clases abstractas<br />public abstract class LivingThing {<br />public void breath(){<br />System.out.println("Living Thing breathing...");<br />}<br />public void eat(){<br />System.out.println("Living Thing eating...");<br />}<br />/**<br />* Abstract method walk()<br />* We want this method to be implemented by a<br />* Concrete class.<br />*/<br />public abstract void walk();<br />}<br />
  9. 9. 9<br />Clases abstractas<br />Cuando una clase concreta extiende de la clase abstracta LivingThing, debe implementar el método abstracto walk(), o en su caso, esa subclase debe ser declarada como abstracta y no podría tampoco ser instanciada.<br />public class Human extends LivingThing {<br />public void walk(){<br />System.out.println("Human walks...");<br />}<br />}<br />
  10. 10. 10<br />Contenidos de este tema<br />Clases abstractas e interfaces<br />Métodos abstractos<br />Clases abstractas<br />Cuándo usar clases abstractas<br />Qué es un interface<br />Por qué usar un interface<br />Interface vs. clase abstracta<br />Interface como type<br />Interface vs. class<br />Implementando interfaces<br />Implementando múltiples interfaces<br />Herencia en interfaces<br />Interfaces y polimorfismo<br />Reescribiendo interfaces<br />Ejemplo<br />
  11. 11. 11<br />Cuándo usar clases abstractas<br />Resulta evidente en el ejemplo de la figura que los diversos tipos de motores tienen características diferentes. Realmente tienen poco en común un motor eléctrico de corriente alterna y una turbina de vapor. Sin embargo, la construcción de una jerarquía en la que todos motores desciendan de un ancestro común, la clase abstracta "Motores", presenta la ventaja de unificar la interfaz. Aunque evidentemente su definición será tan "abstracta", que no pueda ser utilizada para instanciar directamente ningún tipo de motor. El creador del lenguaje dice de ellas que soportan la noción de un concepto general del que solo pueden utilizarse variantes más concretas.<br />
  12. 12. 12<br />Contenidos de este tema<br />Clases abstractas e interfaces<br />Métodos abstractos<br />Clases abstractas<br />Cuándo usar clases abstractas<br />Qué es un interface<br />Por qué usar un interface<br />Interface vs. clase abstracta<br />Interface como type<br />Interface vs. class<br />Implementando interfaces<br />Implementando múltiples interfaces<br />Herencia en interfaces<br />Interfaces y polimorfismo<br />Reescribiendo interfaces<br />Ejemplo<br />
  13. 13. 13<br />Qué es un interface<br />Define un camino standard y público de especificar el propósito de las clases<br />Define un contrato<br />Todos los métodos de la interface son abstractos<br />Define las signaturas en un conjunto de métodos, sin el cuerpo (body, implementación)<br />Una clase concreta debe implementar la interface (todos los métodos abstractos de la interface)<br />Permite a las clases, sin importar la localización dentro de la jerarquía de clases, el implementar los métodos comunes<br />public interface Relation {<br />public boolean isGreater( Object a, Object b);<br />public boolean isLess( Object a, Object b);<br />public boolean isEqual( Object a, Object b);<br />}<br />
  14. 14. 14<br />Contenidos de este tema<br />Clases abstractas e interfaces<br />Métodos abstractos<br />Clases abstractas<br />Cuándo usar clases abstractas<br />Qué es un interface<br />Por qué usar un interface<br />Interface vs. clase abstracta<br />Interface como type<br />Interface vs. class<br />Implementando interfaces<br />Implementando múltiples interfaces<br />Herencia en interfaces<br />Interfaces y polimorfismo<br />Reescribiendo interfaces<br />Ejemplo<br />
  15. 15. 15<br />Por qué usar un interface<br />Para revelar el interface (la funcionalidad del objeto) sin revelar su implementación<br />Este es el concepto de encapsulación<br />La implementación puede cambiar sin afectar al llamador de la interface<br />El llamador no necesita la implementación en el tiempo de compilación<br />Sólo necesita la interface durante el tiempo de compilación<br />Durante el tiempo de ejecución, la instancia actual está asociada con el tipo del interface<br />Para tener métodos similares en implementaciones de clases no relacionadas<br />Una clase no es una subclase de otra<br />
  16. 16. 16<br />Por qué usar un interface<br />Para revelar el interface (la funcionalidad del objeto) sin revelar su implementación<br />Este es el concepto de encapsulación<br />La implementación puede cambiar sin afectar al llamador de la interface<br />El llamador no necesita la implementación en el tiempo de compilación<br />Sólo necesita la interface durante el tiempo de compilación<br />Durante el tiempo de ejecución, la instancia actual está asociada con el tipo del interface<br />Para tener métodos similares en implementaciones de clases no relacionadas<br />Una clase no es una subclase de otra<br />Para tener herencia múltiple<br />Cada conjunto es definido como una interface<br />Una clase sólo puede implementar múltiples interfaces, pero sólo puede extender de una clase<br />
  17. 17. 17<br />Contenidos de este tema<br />Clases abstractas e interfaces<br />Métodos abstractos<br />Clases abstractas<br />Cuándo usar clases abstractas<br />Qué es un interface<br />Por qué usar un interface<br />Interface vs. clase abstracta<br />Interface como type<br />Interface vs. class<br />Implementando interfaces<br />Implementando múltiples interfaces<br />Herencia en interfaces<br />Interfaces y polimorfismo<br />Reescribiendo interfaces<br />Ejemplo<br />
  18. 18. 18<br />Interface vs. Clase abstracta<br />Todos los métodos de una interface son métodos abstractos, mientras que sólo algunos de los métodos son abtractos en la clase abstracta<br />Los métodos abstractos de una clase abstracta llevan la palabra reservada abstract<br />Un interface sólo puede definir constantes. La clase abstracta puede tener campos.<br />Interfaces no tienen relación de herencia directa con una clase particular, están definidos independientemente<br />Los interfaces poseen relaciones de herencia a través de ellos mismos<br />
  19. 19. 19<br />Contenidos de este tema<br />Clases abstractas e interfaces<br />Métodos abstractos<br />Clases abstractas<br />Cuándo usar clases abstractas<br />Qué es un interface<br />Por qué usar un interface<br />Interface vs. clase abstracta<br />Interface como type<br />Interface vs. class<br />Implementando interfaces<br />Implementando múltiples interfaces<br />Herencia en interfaces<br />Interfaces y polimorfismo<br />Reescribiendo interfaces<br />Ejemplo<br />
  20. 20. 20<br />Interface como type<br />Cuando definimos un nuevo interface, estamos definiendo un nuevo tipo<br />Podemos usar el nombre del interface en cualquier otro sitio<br />Si definimos una variable por referencia cuyo tipo es un interface, cualquier objeto que asignemos a él será una instancia de la clase que implementa el interface (implements)<br />Vamos a ver cómo la clase Person implementa PersonInterface:<br />Person p1 = new Person();<br />PersonInterface pi1 = p1;<br />PersonInterface pi2 = new Person();<br />
  21. 21. 21<br />Contenidos de este tema<br />Clases abstractas e interfaces<br />Métodos abstractos<br />Clases abstractas<br />Cuándo usar clases abstractas<br />Qué es un interface<br />Por qué usar un interface<br />Interface vs. clase abstracta<br />Interface como type<br />Interface vs. class<br />Implementando interfaces<br />Implementando múltiples interfaces<br />Herencia en interfaces<br />Interfaces y polimorfismo<br />Reescribiendo interfaces<br />Ejemplo<br />
  22. 22. 22<br />Interface vs. Class<br />En la práctica las interfaces y las clases son tipos<br />Esto significa que una interface puede ser usada también en lugares donde una clase puede usarse<br />Por ejemplo:<br />// Recommended practice<br />PersonInterface pi = new Person();<br />// Not recommended practice<br />Person pc = new Person();<br />Tanto la interface como la clase, ambas, pueden definir métodos<br />
  23. 23. 23<br />Interface vs. Class<br />DIFERENCIAS<br />Los métodos de un interface son todos métodos abstractos<br />No tienen cuerpo<br />No se puede crear una instancia de una interface. Por ejemplo:<br />PersonInterface pi = new PersonInterface(); //ERROR!<br />Una interface sólo puede ser implementada por clases o extendida por otras interfaces<br />
  24. 24. 24<br />Interface vs. Class<br />Definiendo una interface:<br />public interface [InterfaceName] {<br /> //some methods without the body<br />}<br />Como ejemplo, vamos a crear un interface que define relaciones entre dos objetos acorde con el orden natural de los objetos<br />public interface Relation {<br />public boolean isGreater( Object a, Object b);<br />public boolean isLess( Object a, Object b);<br />public boolean isEqual( Object a, Object b);<br />}<br />
  25. 25. 25<br />Contenidos de este tema<br />Clases abstractas e interfaces<br />Métodos abstractos<br />Clases abstractas<br />Cuándo usar clases abstractas<br />Qué es un interface<br />Por qué usar un interface<br />Interface vs. clase abstracta<br />Interface como type<br />Interface vs. class<br />Implementando interfaces<br />Implementando múltiples interfaces<br />Herencia en interfaces<br />Interfaces y polimorfismo<br />Reescribiendo interfaces<br />Ejemplo<br />
  26. 26. 26<br />Implementando interfaces<br />Para crear una clase concreta que implemente un interface:<br />implements keyword.<br />/**<br />* Line class implements Relation interface<br />*/<br />public class Line implements Relation {<br />private double x1;<br />private double x2;<br />private double y1;<br />private double y2;<br />public Line(double x1, double x2, double y1, double y2){<br />this.x1 = x1;<br />this.x2 = x2;<br />this.y1 = y1;<br />this.y2 = y2;<br />}<br />// More code follows<br />
  27. 27. 27<br />Implementando interfaces<br />public double getLength(){<br />double length = Math.sqrt((x2-x1)*(x2-x1) +<br />(y2-y1)* (y2-y1));<br />return length;<br />}<br />public boolean isGreater( Object a, Object b){<br />double aLen = ((Line)a).getLength();<br />double bLen = ((Line)b).getLength();<br />return (aLen > bLen);<br />}<br />public boolean isLess( Object a, Object b){<br />double aLen = ((Line)a).getLength();<br />double bLen = ((Line)b).getLength();<br />return (aLen < bLen);<br />}<br />public boolean isEqual( Object a, Object b){<br />double aLen = ((Line)a).getLength();<br />double bLen = ((Line)b).getLength();<br />return (aLen == bLen);<br />}<br />}<br />
  28. 28. 28<br />Implementando interfaces<br />Cuando la clase trata de implementar una interface hay que asegurarse de implementar todos los métodos de la interface. En caso contrario dará un error.<br />
  29. 29. 29<br />Contenidos de este tema<br />Clases abstractas e interfaces<br />Métodos abstractos<br />Clases abstractas<br />Cuándo usar clases abstractas<br />Qué es un interface<br />Por qué usar un interface<br />Interface vs. clase abstracta<br />Interface como type<br />Interface vs. class<br />Implementando interfaces<br />Implementando múltiples interfaces<br />Herencia en interfaces<br />Interfaces y polimorfismo<br />Reescribiendo interfaces<br />Ejemplo<br />
  30. 30. 30<br />Implementando múltiples interfaces<br />Una clase concreta:<br />Extiende sólo de una clase<br />Puede implementar varias interfaces<br />public class ComputerScienceStudent<br />extends Student<br />implements PersonInterface,<br />AnotherInterface,<br />Third interface{<br />// All abstract methods of all interfaces<br />// need to be implemented.<br />}<br />
  31. 31. 31<br />Implementando múltiples interfaces<br />Una clase concreta:<br />Extiende sólo de una clase<br />Puede implementar varias interfaces<br />public class ComputerScienceStudent<br />extends Student<br />implements PersonInterface,<br />AnotherInterface,<br />Third interface{<br />// All abstract methods of all interfaces<br />// need to be implemented.<br />}<br />
  32. 32. 32<br />Contenidos de este tema<br />Clases abstractas e interfaces<br />Métodos abstractos<br />Clases abstractas<br />Cuándo usar clases abstractas<br />Qué es un interface<br />Por qué usar un interface<br />Interface vs. clase abstracta<br />Interface como type<br />Interface vs. class<br />Implementando interfaces<br />Implementando múltiples interfaces<br />Herencia en interfaces<br />Interfaces y polimorfismo<br />Reescribiendo interfaces<br />Ejemplo<br />
  33. 33. 33<br />Herencia en interfaces<br />Las interfaces no son parte de la jerarquía de clases:<br />Sin embargo, las interfaces pueden tener relaciones de herencia entre ellas mismas:<br />public interface PersonInterface {<br />void doSomething();<br />}<br />public interface StudentInterface<br />extends PersonInterface {<br />void doExtraSomething();<br />}<br />
  34. 34. 34<br />Contenidos de este tema<br />Clases abstractas e interfaces<br />Métodos abstractos<br />Clases abstractas<br />Cuándo usar clases abstractas<br />Qué es un interface<br />Por qué usar un interface<br />Interface vs. clase abstracta<br />Interface como type<br />Interface vs. class<br />Implementando interfaces<br />Implementando múltiples interfaces<br />Herencia en interfaces<br />Interfaces y polimorfismo<br />Reescribiendo interfaces<br />Ejemplo<br />
  35. 35. 35<br />Interfaces y polimorfismo<br />Las interfaces permiten polimorfismo, desde que pueden llamar a un método de la interface, y la versión apropiada de ese método será ejecutada dependiendo del tipo de la instancia del objeto pasado en la llamada al método de la interface<br />
  36. 36. 36<br />Contenidos de este tema<br />Clases abstractas e interfaces<br />Métodos abstractos<br />Clases abstractas<br />Cuándo usar clases abstractas<br />Qué es un interface<br />Por qué usar un interface<br />Interface vs. clase abstracta<br />Interface como type<br />Interface vs. class<br />Implementando interfaces<br />Implementando múltiples interfaces<br />Herencia en interfaces<br />Interfaces y polimorfismo<br />Reescribiendo interfaces<br />Ejemplo<br />
  37. 37. 37<br />Reescribiendo interfaces<br />Considerar un interface que hemos creado llamado DoIt:<br />public interface DoIt {<br />void doSomething(int i, double x);<br />int doSomethingElse(String s);<br />}<br />Suponemos que, después, queremos añadir un tercer método a DoIt, de tal forma que la interface sería:<br />public interface DoIt {<br />void doSomething(int i, double x);<br />int doSomethingElse(String s);<br />boolean didItWork(int i, double x, String s);<br />}<br />Si hacemos este cambio, todas las clases que implementan la vieja interface DoIt no funcionará porque en este caso no implementa todos los métodos de la interface<br />
  38. 38. 38<br />Reescribiendo interfaces<br />La solución de reescribir una interface existente:<br />Crear más interfaces después<br />Por ejemplo, puedes crear una DoItPlus interface que extienda de DoIt<br />public interface DoItPlus extends DoIt {<br />boolean didItWork(int i, double x, String s);<br />}<br />Ahora los usuarios pueden continuar usando la interface anterior o actualizar a la nueva interface<br />
  39. 39. 39<br />Contenidos de este tema<br />Clases abstractas e interfaces<br />Métodos abstractos<br />Clases abstractas<br />Cuándo usar clases abstractas<br />Qué es un interface<br />Por qué usar un interface<br />Interface vs. clase abstracta<br />Interface como type<br />Interface vs. class<br />Implementando interfaces<br />Implementando múltiples interfaces<br />Herencia en interfaces<br />Interfaces y polimorfismo<br />Reescribiendo interfaces<br />Ejemplo<br />
  40. 40. 40<br />Ejemplo<br />
  41. 41. Es importante que recordeis…<br />“Si haces todos los días lo mismo no llegarás más lejos de lo que otras veces has llegado”<br />Adelante!!!<br />Jesús Muñoz<br />jesus@iluego.com<br />

×