SlideShare una empresa de Scribd logo
CLASES ABSTRACTAS HERENCIA MULTIPLE INTERFACES TEMA 5
Clases Abstractas Clases abstractas: Clases de las que no tiene sentido crear Objetos, pero que agrupan características de clases que derivan de ellas. Ejemplo : Clase  LavadoraMX , no tiene sentido que existan objetos (lavadoras) de esta clase: existen lavadoras  MX1 ,  MX2  y  MX3deLuxe . La finalidad de  LavadoraMX  es definir los aspectos comunes a todos los modelos de lavadoras que se fabrican. Ejemplo : Por la carretera no circulan  Vehículos  en abstracto, circulan  Coches ,  Camiones ,  Bicicletas , etc...
Clases Abstractas (Java) En Java se puede indicar explícitamente que una clase es abstracta y no se pueden crear objetos de ella: abstract  class LavadoraMX { //... } abstract  class Vehiculo { //... }
Métodos Abstractos Las clases abstractas pueden (y suelen) incluir métodos sin implementación, son los llamados métodos abstractos. Métodos abstractos: Métodos que no tienen implementación y que obligan a ser implementados en las clases derivadas. Si una clase posee  un método abstracto     es  clase abstracta : Si una clase deriva de una clase abstracta y no implementa alguno de los métodos abstractos de la clase base, entonces hereda el método abstracto y se convierte en abstracta: Para poder crear objetos hay que implementar todos los métodos abstractos heredados.
Clases Abstractas: Ejemplo
Clase Figura abstract  class  Figura  { private  String  _nombre ; abstract   public  double  area  (); abstract   public  void  dibujar  (); public   Figura  (String nombreFigura) { _nombre = nombreFigura; } public  boolean  menorQue  (Figura f) { return ( this.area() < f.area() ); } public  String  toString  () { return ( _nombre + &quot; , &quot; + area() ); } } No es posible crear Objetos de esta clase Método sin implementación
Clase Circulo class  Circulo  extends  Figura { private  double  _radio ; private  static final double  PI  = 3.1415926535879; public   Circulo  (double r) { super (&quot;Circulo&quot;); _radio = r; } public   Circulo  () { this (10.0); } public  double  area  () { return ( PI * _radio * _radio ); } public  void  dibujar  () { System.out.println (&quot;Soy un Circulo de radio: &quot; + _radio); } } Los métodos abstractos han sido implementados: Es posible crear objetos  Circulo Construye la parte heredada de  Figura , NO un objeto específico
Clase Rectángulo class  Rectangulo  extends  Figura { private  double  _base ; private  double  _altura ; public Rectangulo  (double ancho, double alto) { super (&quot;Rectangulo&quot;); _base = ancho; _altura = alto; } public Rectangulo  () { this (10.0, 10.0); } public  double  area  () { return ( _base * _altura ); } public  void  dibujar  () { System.out.println (&quot;Soy un Rectangulo de: &quot; + _base + &quot;*&quot; + _altura); } } Los métodos abstractos han sido implementados: Es posible crear objetos  Rectangulo Construye la parte heredada de  Figura , NO un objeto específico
Clase Cuadrado class  Cuadrado  extends  Rectangulo { public Cuadrado  (double lado) { super (lado, lado); } public Cuadrado  () { super (10.0, 10.0); } } Deriva de  Rectangulo  que no tiene métodos abstractos: Es posible crear objetos  Cuadrado
Ejemplo de utilización de la jerarquía de Figuras class  testfiguras  { public  static void  main  (String[] args) { Figura[] fig = new Figura[3]; int menor; fig[0] = new Circulo(); fig[1] = new Cuadrado(55); fig[2] = new Rectangulo(20,30); for (int i=0; i<fig.length; i++) { System.out.println (fig[i]); System.out.println (&quot;Area: &quot; + fig[i].area()); System.out.println (&quot;Dibujar:&quot;); fig[i].dibujar(); } if ( fig[0].menorQue (fig[1]) ) menor = 0; else menor = 1; if ( fig[2].menorQue (fig[menor]) ) menor = 2; System.out.println (&quot;La figura menor es:&quot;); System.out.println (fig[menor]); } } Array de 3 Figuras ( no crea objetos ) Se crean 3 Figuras  concretas  y se almacenan en el array fig[i]  aplica los métodos de su clase : Circulo ,  Cuadrado ,  Rectangulo
Métodos finales En ocasiones interesa indicar que un determinado método no se puede redefinir    Método final final public  boolean  menorQue  (Figura f) { return ( this.area() < f.area() ); } Las clases derivadas NO pueden  redefinir   menorQue Ojo: redefinir implica mantener la signatura del método. Los métodos finales tienen ligadura estática (compilación).
Clases finales Se puede prohibir que una clase sea extendida declarándola como final. final  class  Cuadrado  extends  Rectangulo { public Cuadrado  (double lado) { super (lado, lado); } public Cuadrado  () { super (10.0, 10.0); } } No es posible definir una nueva clase que derive de  Cuadrado
Concepto: Una clase puede derivarse de varias clases base. Un  EstudianteQueTrabaja  es un  Estudiante  y es un  Empleado Herencia múltiple Herencia Simple Herencia Múltiple 2, 3, 4, ...
Herencia múltiple: Conflictos (1)
Herencia múltiple: Conflictos (2)
Herencia múltiple No siempre es problemática, pero se procura evitar, en la medida de los posible. Hay lenguajes O.O. que directamente no la soportan: Java ,  Smalltalk . Otros lenguajes O.O. sí que la admiten: C++ .
Ejemplo Herencia Múltiple
Interfaces Una “interface” en Java es una colección de definiciones de métodos (sin implementación) y de valores constantes Una interface es análogo a una clase abstracta con todos sus métodos abstractos y variables “finales y estáticas” con valor inicial. Una clase A puede heredar de una sola clase (extends<<>>herencia simple) y puede “heredar” de varias interfaces (implements <<>>herencia múltiple).  Ambigüedades no permitidas en herencia de variables (en general Java no resuelve por sí mismo las ambigüedades en ningún caso) Todas las interfaces descienden de “Object” No se permiten ciclos en el grafo de clases e interfaces
Interfaces en Java ¿Cómo definir una interfaz? [ public ]  interface  nombre_interfaz  extends  superinterfaces { cuerpo interfaz } -  Si el modificador de acceso public no está presente,  la interfaz es sólo accesible en el paquete al cual pertenece -  El cuerpo de la interfaz puede incluir declaración de  constantes y de métodos (sin definición).
Interfaces de JAVA - Una interfaz puede derivarse de varias interfaces. En este  caso hereda todas las constantes y métodos de sus  superinterfaces, excepto aquellos que ella redefina. }
import java.util.*; // Interfaz IFecha: métodos y constantes para obtener el día, //mes y año public interface IFecha { public final static int DIA_DEL_MES = Calendar.DAY_OF_MONTH; public final static int MES_DEL_AÑO = Calendar.MONTH; public final static int AÑO = Calendar.YEAR; public abstract int día(); public abstract int mes(); public abstract int año(); } Ejemplo Interface Java
public class CCuentaAhorro extends CCuenta implements IFecha { .... public void comisiones() {  // Se aplican mensualm.por el mantenimiento de la cuenta if (día() == 1) reintegro(cuotaMantenimiento); } public double intereses() { if (día() != 1) return 0.0; // Acumular los intereses por mes sólo los días 1 de cada mes double intProducidos = 0.0; intProducidos= estado() * obtenerTipoDeInterés()/12; ingreso(intProducidos); // Devolver el interés mensual por si fuera necesario return interesesProducidos; }
// Implementación de los métodos de la interfaz //IFecha public int dia() { GregorianCalendar fechaActual = new GregorianCalendar(); return fechaActual.get(DIA_DEL_MES); } public int mes() { return 0;} // no se necesita public int año() { return 0;} // no se necesita }  Ejemplo Interface Java
Cada clase que implemente una interfaz, debe definir todos los métodos de ésta última. Notar que el acceso a las constantes definidas en la interfaz es directo. Si una clase implementa una interfaz, todas sus subclases heredan los métodos y constantes de aquella. Ejemplo Interface Java
Jerarquía de Clases Clase Object Clase CCuenta Clase CcuentaCorriente Clase CcuentaCorrienteConIn Interfaz IFecha Clase CCuentaAhorro
Clase abstracta vs interfaz ¿ Es equivalente una interfaz a una clase abstracta? Ejemplo: la interfaz IFecha  ¿se podría definir como una clase abstracta? No, pues CCuentaAhorro y CCuentaCorriente ya tienen una superclase.  Mas aún, la idea es que la interacción con GregorianCalendar no requiere establecer una relación de clases. Sólo se utiliza la interfaz para implementar uno o dos métodos específicos. Una interfaz es sólo un protocolo que implementa una clase cuando necesita usarlo.
¿Para qué se usa una interfaz? 1º Para captar similitudes entre clases no relacionadas, sin forzar una relación artificial. 2º Para declarar métodos que una o mas clases deben implementar en determinadas situaciones. 3º Publicar la interfaz de programación de una clase, sin descubrir como esta implementada.

Más contenido relacionado

PDF
Tema 10 clase abstractas e interfaz
PPTX
Clases abstractas
PPTX
Clases abstractas e interfaces (AlexandraPerez)
PDF
Introducción a la programación y la informática. Tema 5
PDF
Aprendiendo objetos en c++
PPT
instrumentos de trabajo
PPT
Introduccion
PPT
Unidad o informatica
Tema 10 clase abstractas e interfaz
Clases abstractas
Clases abstractas e interfaces (AlexandraPerez)
Introducción a la programación y la informática. Tema 5
Aprendiendo objetos en c++
instrumentos de trabajo
Introduccion
Unidad o informatica

La actualidad más candente (20)

PPTX
MéTodos En Java
DOCX
Datos Previos
PPTX
Clases abstractas e interfaces
DOCX
Datos Previos
PPT
3 Bases De La OrientacióN A Objetos
PDF
Programación 3: Clases y objetos en Java
PPTX
Estructuras y clases
PDF
OCP, JSE 6 Programmer (1Z0-851) - Guia practica 6 de 7(Colecciones y Genericos)
PDF
Guia de estudio OCP Java SE 7 Programmer
PDF
JAVA ORIENTADO A OBJETOS - ALCANCE DE CLASE
PPTX
MéTodos Java
PPTX
Programación 1: modularización
PPTX
Intro
ODP
Programación Orientada a Objetos para Python
PDF
Diseño de la logica
PDF
4 manejo de_metodos
PDF
OCP JSE 6 Programmer (1Z0-851) - Guia practica 1 de 7(Declaraciones)
PPT
5 metodos y parametros
PDF
11 Curso de POO en java - métodos constructores y toString()
PPT
UTPL-PROGRAMACIÓN AVANZADA-II-BIMESTRE-(OCTUBRE 2011-FEBRERO 2012)
MéTodos En Java
Datos Previos
Clases abstractas e interfaces
Datos Previos
3 Bases De La OrientacióN A Objetos
Programación 3: Clases y objetos en Java
Estructuras y clases
OCP, JSE 6 Programmer (1Z0-851) - Guia practica 6 de 7(Colecciones y Genericos)
Guia de estudio OCP Java SE 7 Programmer
JAVA ORIENTADO A OBJETOS - ALCANCE DE CLASE
MéTodos Java
Programación 1: modularización
Intro
Programación Orientada a Objetos para Python
Diseño de la logica
4 manejo de_metodos
OCP JSE 6 Programmer (1Z0-851) - Guia practica 1 de 7(Declaraciones)
5 metodos y parametros
11 Curso de POO en java - métodos constructores y toString()
UTPL-PROGRAMACIÓN AVANZADA-II-BIMESTRE-(OCTUBRE 2011-FEBRERO 2012)
Publicidad

Similar a Tema5 (20)

PPT
Clases abstractas interfaces
PPTX
Clases abs e interfaces
PPTX
Clasesabstractaseinterfacesalexandraperez 121220190613-phpapp02
PPTX
Clases abstractas e interfaces
PPTX
Alejandro Merizalde
PPTX
Benalcazar esteban
PPTX
Clases abstractas e interfaces en java
PPTX
Clases abstractas e interfaces en java
PPTX
Programación 3: clases derivadas y polimorfismo
PPSX
Clases Abstractas Pc
PPTX
Clases abstractas e interfaces en java
PPTX
Clases abstractas e interfaz
PPTX
10-Unidad 3: Encapsulamiento y modularidad
PDF
Interfaces 14k
PDF
Tarea 3
PDF
03 java poo_parte_2
PDF
Laboratorio clase abstract
PDF
Interfaces en java
PDF
JAVA 00 - TEMA 05 - HERENCIA
PPT
polimorfismo aplicado a la programcin POO.ppt
Clases abstractas interfaces
Clases abs e interfaces
Clasesabstractaseinterfacesalexandraperez 121220190613-phpapp02
Clases abstractas e interfaces
Alejandro Merizalde
Benalcazar esteban
Clases abstractas e interfaces en java
Clases abstractas e interfaces en java
Programación 3: clases derivadas y polimorfismo
Clases Abstractas Pc
Clases abstractas e interfaces en java
Clases abstractas e interfaz
10-Unidad 3: Encapsulamiento y modularidad
Interfaces 14k
Tarea 3
03 java poo_parte_2
Laboratorio clase abstract
Interfaces en java
JAVA 00 - TEMA 05 - HERENCIA
polimorfismo aplicado a la programcin POO.ppt
Publicidad

Más de guest70285f (6)

PPT
PPT
PPT
PPT
PPT
PPT
Temaswing
Temaswing

Último (20)

PPTX
Propuesta BKP servidores con Acronis1.pptx
PPTX
ANCASH-CRITERIOS DE EVALUACIÓN-FORMA-10-10 (2).pptx
DOCX
TRABAJO GRUPAL (5) (1).docxjsjsjskskksksk
PDF
MANUAL de recursos humanos para ODOO.pdf
PDF
MANUAL TECNOLOGÍA SER MINISTERIO EDUCACIÓN
PDF
ADMINISTRACIÓN DE ARCHIVOS - TICS (SENA).pdf
PPTX
Mecanismos-de-Propagacion de ondas electromagneticas
PPTX
historia_web de la creacion de un navegador_presentacion.pptx
PDF
Instrucciones simples, respuestas poderosas. La fórmula del prompt perfecto.
PPTX
Presentacion de Alba Curso Auditores Internos ISO 19011
PPTX
ccna: redes de nat ipv4 stharlling cande
PDF
Tips de Seguridad para evitar clonar sus claves del portal bancario.pdf
PDF
0007_PPT_DefinicionesDeDataMining_201_v1-0.pdf
PPT
Protocolos de seguridad y mecanismos encriptación
DOCX
TRABAJO GRUPAL (5) (1).docxsjsjskskksksksks
PPTX
Curso de generación de energía mediante sistemas solares
PDF
programa-de-estudios-2011-guc3ada-para-el-maestro-secundarias-tecnicas-tecnol...
PDF
Diapositiva proyecto de vida, materia catedra
DOCX
TRABAJO GRUPAL (5) (1).docxsjjsjsksksksksk
PDF
capacitación de aire acondicionado Bgh r 410
Propuesta BKP servidores con Acronis1.pptx
ANCASH-CRITERIOS DE EVALUACIÓN-FORMA-10-10 (2).pptx
TRABAJO GRUPAL (5) (1).docxjsjsjskskksksk
MANUAL de recursos humanos para ODOO.pdf
MANUAL TECNOLOGÍA SER MINISTERIO EDUCACIÓN
ADMINISTRACIÓN DE ARCHIVOS - TICS (SENA).pdf
Mecanismos-de-Propagacion de ondas electromagneticas
historia_web de la creacion de un navegador_presentacion.pptx
Instrucciones simples, respuestas poderosas. La fórmula del prompt perfecto.
Presentacion de Alba Curso Auditores Internos ISO 19011
ccna: redes de nat ipv4 stharlling cande
Tips de Seguridad para evitar clonar sus claves del portal bancario.pdf
0007_PPT_DefinicionesDeDataMining_201_v1-0.pdf
Protocolos de seguridad y mecanismos encriptación
TRABAJO GRUPAL (5) (1).docxsjsjskskksksksks
Curso de generación de energía mediante sistemas solares
programa-de-estudios-2011-guc3ada-para-el-maestro-secundarias-tecnicas-tecnol...
Diapositiva proyecto de vida, materia catedra
TRABAJO GRUPAL (5) (1).docxsjjsjsksksksksk
capacitación de aire acondicionado Bgh r 410

Tema5

  • 1. CLASES ABSTRACTAS HERENCIA MULTIPLE INTERFACES TEMA 5
  • 2. Clases Abstractas Clases abstractas: Clases de las que no tiene sentido crear Objetos, pero que agrupan características de clases que derivan de ellas. Ejemplo : Clase LavadoraMX , no tiene sentido que existan objetos (lavadoras) de esta clase: existen lavadoras MX1 , MX2 y MX3deLuxe . La finalidad de LavadoraMX es definir los aspectos comunes a todos los modelos de lavadoras que se fabrican. Ejemplo : Por la carretera no circulan Vehículos en abstracto, circulan Coches , Camiones , Bicicletas , etc...
  • 3. Clases Abstractas (Java) En Java se puede indicar explícitamente que una clase es abstracta y no se pueden crear objetos de ella: abstract class LavadoraMX { //... } abstract class Vehiculo { //... }
  • 4. Métodos Abstractos Las clases abstractas pueden (y suelen) incluir métodos sin implementación, son los llamados métodos abstractos. Métodos abstractos: Métodos que no tienen implementación y que obligan a ser implementados en las clases derivadas. Si una clase posee un método abstracto  es clase abstracta : Si una clase deriva de una clase abstracta y no implementa alguno de los métodos abstractos de la clase base, entonces hereda el método abstracto y se convierte en abstracta: Para poder crear objetos hay que implementar todos los métodos abstractos heredados.
  • 6. Clase Figura abstract class Figura { private String _nombre ; abstract public double area (); abstract public void dibujar (); public Figura (String nombreFigura) { _nombre = nombreFigura; } public boolean menorQue (Figura f) { return ( this.area() < f.area() ); } public String toString () { return ( _nombre + &quot; , &quot; + area() ); } } No es posible crear Objetos de esta clase Método sin implementación
  • 7. Clase Circulo class Circulo extends Figura { private double _radio ; private static final double PI = 3.1415926535879; public Circulo (double r) { super (&quot;Circulo&quot;); _radio = r; } public Circulo () { this (10.0); } public double area () { return ( PI * _radio * _radio ); } public void dibujar () { System.out.println (&quot;Soy un Circulo de radio: &quot; + _radio); } } Los métodos abstractos han sido implementados: Es posible crear objetos Circulo Construye la parte heredada de Figura , NO un objeto específico
  • 8. Clase Rectángulo class Rectangulo extends Figura { private double _base ; private double _altura ; public Rectangulo (double ancho, double alto) { super (&quot;Rectangulo&quot;); _base = ancho; _altura = alto; } public Rectangulo () { this (10.0, 10.0); } public double area () { return ( _base * _altura ); } public void dibujar () { System.out.println (&quot;Soy un Rectangulo de: &quot; + _base + &quot;*&quot; + _altura); } } Los métodos abstractos han sido implementados: Es posible crear objetos Rectangulo Construye la parte heredada de Figura , NO un objeto específico
  • 9. Clase Cuadrado class Cuadrado extends Rectangulo { public Cuadrado (double lado) { super (lado, lado); } public Cuadrado () { super (10.0, 10.0); } } Deriva de Rectangulo que no tiene métodos abstractos: Es posible crear objetos Cuadrado
  • 10. Ejemplo de utilización de la jerarquía de Figuras class testfiguras { public static void main (String[] args) { Figura[] fig = new Figura[3]; int menor; fig[0] = new Circulo(); fig[1] = new Cuadrado(55); fig[2] = new Rectangulo(20,30); for (int i=0; i<fig.length; i++) { System.out.println (fig[i]); System.out.println (&quot;Area: &quot; + fig[i].area()); System.out.println (&quot;Dibujar:&quot;); fig[i].dibujar(); } if ( fig[0].menorQue (fig[1]) ) menor = 0; else menor = 1; if ( fig[2].menorQue (fig[menor]) ) menor = 2; System.out.println (&quot;La figura menor es:&quot;); System.out.println (fig[menor]); } } Array de 3 Figuras ( no crea objetos ) Se crean 3 Figuras concretas y se almacenan en el array fig[i] aplica los métodos de su clase : Circulo , Cuadrado , Rectangulo
  • 11. Métodos finales En ocasiones interesa indicar que un determinado método no se puede redefinir  Método final final public boolean menorQue (Figura f) { return ( this.area() < f.area() ); } Las clases derivadas NO pueden redefinir menorQue Ojo: redefinir implica mantener la signatura del método. Los métodos finales tienen ligadura estática (compilación).
  • 12. Clases finales Se puede prohibir que una clase sea extendida declarándola como final. final class Cuadrado extends Rectangulo { public Cuadrado (double lado) { super (lado, lado); } public Cuadrado () { super (10.0, 10.0); } } No es posible definir una nueva clase que derive de Cuadrado
  • 13. Concepto: Una clase puede derivarse de varias clases base. Un EstudianteQueTrabaja es un Estudiante y es un Empleado Herencia múltiple Herencia Simple Herencia Múltiple 2, 3, 4, ...
  • 16. Herencia múltiple No siempre es problemática, pero se procura evitar, en la medida de los posible. Hay lenguajes O.O. que directamente no la soportan: Java , Smalltalk . Otros lenguajes O.O. sí que la admiten: C++ .
  • 18. Interfaces Una “interface” en Java es una colección de definiciones de métodos (sin implementación) y de valores constantes Una interface es análogo a una clase abstracta con todos sus métodos abstractos y variables “finales y estáticas” con valor inicial. Una clase A puede heredar de una sola clase (extends<<>>herencia simple) y puede “heredar” de varias interfaces (implements <<>>herencia múltiple). Ambigüedades no permitidas en herencia de variables (en general Java no resuelve por sí mismo las ambigüedades en ningún caso) Todas las interfaces descienden de “Object” No se permiten ciclos en el grafo de clases e interfaces
  • 19. Interfaces en Java ¿Cómo definir una interfaz? [ public ] interface nombre_interfaz extends superinterfaces { cuerpo interfaz } - Si el modificador de acceso public no está presente, la interfaz es sólo accesible en el paquete al cual pertenece - El cuerpo de la interfaz puede incluir declaración de constantes y de métodos (sin definición).
  • 20. Interfaces de JAVA - Una interfaz puede derivarse de varias interfaces. En este caso hereda todas las constantes y métodos de sus superinterfaces, excepto aquellos que ella redefina. }
  • 21. import java.util.*; // Interfaz IFecha: métodos y constantes para obtener el día, //mes y año public interface IFecha { public final static int DIA_DEL_MES = Calendar.DAY_OF_MONTH; public final static int MES_DEL_AÑO = Calendar.MONTH; public final static int AÑO = Calendar.YEAR; public abstract int día(); public abstract int mes(); public abstract int año(); } Ejemplo Interface Java
  • 22. public class CCuentaAhorro extends CCuenta implements IFecha { .... public void comisiones() { // Se aplican mensualm.por el mantenimiento de la cuenta if (día() == 1) reintegro(cuotaMantenimiento); } public double intereses() { if (día() != 1) return 0.0; // Acumular los intereses por mes sólo los días 1 de cada mes double intProducidos = 0.0; intProducidos= estado() * obtenerTipoDeInterés()/12; ingreso(intProducidos); // Devolver el interés mensual por si fuera necesario return interesesProducidos; }
  • 23. // Implementación de los métodos de la interfaz //IFecha public int dia() { GregorianCalendar fechaActual = new GregorianCalendar(); return fechaActual.get(DIA_DEL_MES); } public int mes() { return 0;} // no se necesita public int año() { return 0;} // no se necesita } Ejemplo Interface Java
  • 24. Cada clase que implemente una interfaz, debe definir todos los métodos de ésta última. Notar que el acceso a las constantes definidas en la interfaz es directo. Si una clase implementa una interfaz, todas sus subclases heredan los métodos y constantes de aquella. Ejemplo Interface Java
  • 25. Jerarquía de Clases Clase Object Clase CCuenta Clase CcuentaCorriente Clase CcuentaCorrienteConIn Interfaz IFecha Clase CCuentaAhorro
  • 26. Clase abstracta vs interfaz ¿ Es equivalente una interfaz a una clase abstracta? Ejemplo: la interfaz IFecha ¿se podría definir como una clase abstracta? No, pues CCuentaAhorro y CCuentaCorriente ya tienen una superclase. Mas aún, la idea es que la interacción con GregorianCalendar no requiere establecer una relación de clases. Sólo se utiliza la interfaz para implementar uno o dos métodos específicos. Una interfaz es sólo un protocolo que implementa una clase cuando necesita usarlo.
  • 27. ¿Para qué se usa una interfaz? 1º Para captar similitudes entre clases no relacionadas, sin forzar una relación artificial. 2º Para declarar métodos que una o mas clases deben implementar en determinadas situaciones. 3º Publicar la interfaz de programación de una clase, sin descubrir como esta implementada.