SlideShare una empresa de Scribd logo
Programación I
Alexandra Pérez
Lab. E6
20/12/2012
Clases Abstractas
               
 Un método abstracto es un método declarado en una
  clase para el cual esa clase no proporciona la
  implementación (el código).
 Una clase abstracta es una clase que tiene al menos
  un método abstracto.
 Una clase que extiende a una clase abstracta debe
  implementar los métodos abstractos (escribir el
  código) o bien volverlos a declarar como abstractos,
  con lo que ella misma se convierte también en clase
  abstracta.
 Presentan un nivel de "abstracción" tan elevado que no
  sirven para instanciar objetos de ellas.
                            elevados de algunas
 Representan los escalones más
  jerarquías de clases y solo sirven para derivar otras clases,
  en las que se van implementando detalles y concreciones,
  hasta que finalmente presentan un nivel de definición
  suficiente que permita instanciar objetos concretos.
 Se suelen utilizar en aquellos casos en que se quiere que
  una serie de clases mantengan una cierta característica o
  interfaz común. Por esta razón a veces se dice de ellas que
  son pura interfaz.

Declaración e implementación de
       métodos abstractos
                           
abstract class FiguraGeometrica {
  ...
  abstract void dibujar();
  ...
}
class Circulo extends FiguraGeometrica {
  ...
  void dibujar() {
     // codigo para dibujar Circulo
     ...
  }
}
Declaración de clases abstractas
Las clases abstractas se declaran empleando la palabra
reservada abstract como se muestra a continuación:
 public abstract class IdClase . . .
Ejemplo:
                                              
/**
 * Declaracion de la clase abstracta FiguraGeometrica
 * A. Garcia-Beltran - noviembre, 2005
*/
public abstract class FiguraGeometrica {
   // Declaracion de atributos
   private String nombre;
   // Declaracion de metodos
   abstract public double area();
   public figuraGeometrica (String nombreFigura ) {
      nombre = nombreFigura;
   }
   final public boolean mayorQue (FiguraGeometrica otra) {
      return area()>otra.area();
   }
   final public String toString() {
      return nombre + " con area " + area();
   }
}
Reglas de uso:
                         
 Una clase abstracta solo puede ser usada como clase
  base para otras clases, pero no puede ser instanciada
  para crear un objeto.
 Una clase abstracta no puede ser utilizada como
  argumento o como retorno de una función.
 Si puede declararse punteros a clase abstracta .
 Se permiten referencias a clase abstracta, suponiendo
  que el objeto temporal no es necesario en la
  inicialización.
Referencias y objetos abstractos
Se pueden crear referencias a clases abstractas como cualquier otra:


                                 
                        FiguraGeometrica figura;

Sin embargo una clase abstracta no se puede instanciar, es decir, no se
pueden crear objetos de una clase abstracta. El compilador producirá un
error si se intenta:
              FiguraGeometrica figura = new FiguraGeometrica();

Esto es coherente dado que una clase abstracta no tiene completa su
implementación y encaja bien con la idea de que algo abstracto no
puede materializarse.
Sin embargo:
               FiguraGeometrica figura = new Circulo(. . .);
                            figura.dibujar();

La invocación al método dibujarse resolverá en tiempo de ejecución y la
JVM llamará al método de la clase adecuada.
Ejemplo clase abstracta
int x, y;    
public abstract class Figura {

public void mostrarOrigen() {
System.out.println("x= "+x+" y= "+y);}
public abstract double area(); // No tiene implementación
public abstract double mostrarNombre();
}
public class Triangulo extends Figura {
protected int base, altura;
public Triangulo (int ba, int al) { base=ba; altura=al; }
public double area() { return base*altura/2; }
public void mostrarNombre() { System.out.println(“triangulo”); }
}
public class Cuadrado extends Figura {
protected int lado;
public Cuadrado (int lado) { this.lado=lado; }
public double area() { return lado*lado; }
public void mostrarNombre() { System.out.println(“cuadrado”);}}
 Prueba clase abstracta
public class PruebaClaseAbstracta {
public static void main(String args[]) {
Figura fig;
Triangulo tri;
Cuadrado cua;                    
fig = new Figura(); // error no se puede
//instanciar una clase abstracta
tri = new Triangulo(4,3);
tri.mostrarOrigen();
tri.mostrarNombre();
fig = tri;
fig.mostrarNombre();
System.out.println("Area triangulo: "+fig.area());
cua = new Cuadrado(5);
fig = cua;
System.out.println("Area cuadrado: "+fig.area());
}
}
Interfaces
                    
 Una interfaz en java es un conjunto de métodos
  abstractos y propiedades. En ellas se especifica qué
  se debe hacer pero no su implementación. Serán las
  clases que implementen estas interfaces las que
  describan la lógica del comportamiento de los
  métodos.
Ventajas al utilizar interfaces
                         
 Se organiza la programación.
 Obligar a que ciertas clases utilicen los mismos
  métodos (nombres y parámetros).
 Establecer relaciones entre clases que no estén
  relacionadas.
Declaración de interfaces
                              
interface NombreInterfaz {
tipo static final NOMBRECONSTANTE1 = valor;
…….….….
public tipoDevuelto nombreMetodo1(listaParámetros);
…….….….
}

class NombreClase implements NombreInterfaz1
[, NombreInterfaz2 ..] {
// declaración atributos y métodos de la clase
…….….….
}

Extensión de interfaces
            
 Se puede definir un interface que especialice a otro
  interface mediante extends similar a herencia.
 Un interface puede extender a varios interfaces a la vez.

interface ElementoOrdenado extends
Comparable, Cloneable, java.io.Serializable {
// miembros y métodos propios del interfaz
//ElementoOrdenado
.....
}
Ejemplo:
                                
public interface Nombrable {
static final boolean CIERTO = true;
public void mostrarNombre();
}
public class Elemento implements Nombrable {
String nombre;
public Elemento(String nom) {
nombre = nom; }
// obligatorio implementar método mostrarNombre
public void mostrarNombre(){
System.out.println("Nombre: "+nombre);
if (CIERTO)
System.out.println("Constante CIERTO ");
}}
Net grafía:
                           
 http://gl-epn-programacion-
  ii.blogspot.com/2010/04/interfaces-en-java.html
 http://www.fdi.ucm.es/profesor/lgarmend/arcgisjava/temas
  /Tema%209%20Clases%20abstractas
 http://ocw.upm.es/lenguajes-y-sistemas-
  informaticos/programacion-en-java-
  i/Contenidos/LecturaObligatoria/16-herencia.pdf
  %20e%20interfaces.pdf
 http://www.slideshare.net/networksens/09-clases-abstractas-
  e-interfaces
 http://www.zator.com/Cpp/E4_11_8c.htm
 http://www.arrakis.es/~abelp/ApuntesJava/ClasesAbstractas
  .htm

Más contenido relacionado

DOCX
Recursividad en POO - Java
PPT
Pilas En C++
PPTX
Programación Orientada a Objetos - Otras relaciones entre clases
PPTX
Simulación - Unidad 2 numeros pseudoaleatorios
PPTX
Programacion orientada a objetos Java
PPTX
Arreglos c++
DOCX
ESTRUCTURAS ANIDADAS
PDF
PROGRAMACIÓN ORIENTADA A OBJETOS
Recursividad en POO - Java
Pilas En C++
Programación Orientada a Objetos - Otras relaciones entre clases
Simulación - Unidad 2 numeros pseudoaleatorios
Programacion orientada a objetos Java
Arreglos c++
ESTRUCTURAS ANIDADAS
PROGRAMACIÓN ORIENTADA A OBJETOS

La actualidad más candente (20)

PPTX
Tipos de listas en estructura de datos
PPT
Herencia - Programación Orientada a Objetos
PDF
Recursividad
PPT
Manejo de memoria
PDF
Diagrama de clases
PPTX
Memoria Estatica
 
PPTX
Programacion orientada a objetos - unidad 3 herencia
PDF
Tipos de datos abstractos
PPT
Estructura datos pilas y colas
PPTX
Implementación de clases
PPTX
UML - Casos de Uso y Diagramas de Clase
PDF
Estructura de Datos: Lista
PDF
Programación Orientada a Objetos en Java - Parte I 2015
DOCX
Metodologia de checkland para sistemas suaves
PPTX
1.3 uso de tipos de datos abstractos
KEY
Clases y Objetos
PPTX
Pilas, colas, y listas estructura de datos
PPTX
DIAGRAMAS DE CLASE
PPTX
Java pilas (Stacks) y colas (Queues)
Tipos de listas en estructura de datos
Herencia - Programación Orientada a Objetos
Recursividad
Manejo de memoria
Diagrama de clases
Memoria Estatica
 
Programacion orientada a objetos - unidad 3 herencia
Tipos de datos abstractos
Estructura datos pilas y colas
Implementación de clases
UML - Casos de Uso y Diagramas de Clase
Estructura de Datos: Lista
Programación Orientada a Objetos en Java - Parte I 2015
Metodologia de checkland para sistemas suaves
1.3 uso de tipos de datos abstractos
Clases y Objetos
Pilas, colas, y listas estructura de datos
DIAGRAMAS DE CLASE
Java pilas (Stacks) y colas (Queues)
Publicidad

Similar a Clases abstractas e interfaces (AlexandraPerez) (20)

PPTX
Clasesabstractaseinterfacesalexandraperez 121220190613-phpapp02
PPT
PPTX
Clases abs e interfaces
PPTX
Clases abstractas
PPTX
Clases abstractas e interfaces
PDF
Laboratorio clase abstract
PPTX
Clases abstractas e interfaces en java
PPT
Clases abstractas interfaces
PDF
03 java poo_parte_2
PPT
Net1 oop vbnet
PDF
Tema 10 clase abstractas e interfaz
PPTX
Programación 3: clases derivadas y polimorfismo
PPT
programacion orientada a objetos
PDF
U8.- Programacion Orientada a objetos II (2).pdf
PPTX
Polimorfismo ppt
DOCX
Manual c# 2
DOCX
Manual de c#
DOCX
manual de C#
PDF
2introduccionallenguajejava 141109171757-conversion-gate02
Clasesabstractaseinterfacesalexandraperez 121220190613-phpapp02
Clases abs e interfaces
Clases abstractas
Clases abstractas e interfaces
Laboratorio clase abstract
Clases abstractas e interfaces en java
Clases abstractas interfaces
03 java poo_parte_2
Net1 oop vbnet
Tema 10 clase abstractas e interfaz
Programación 3: clases derivadas y polimorfismo
programacion orientada a objetos
U8.- Programacion Orientada a objetos II (2).pdf
Polimorfismo ppt
Manual c# 2
Manual de c#
manual de C#
2introduccionallenguajejava 141109171757-conversion-gate02
Publicidad

Clases abstractas e interfaces (AlexandraPerez)

  • 2. Clases Abstractas   Un método abstracto es un método declarado en una clase para el cual esa clase no proporciona la implementación (el código).  Una clase abstracta es una clase que tiene al menos un método abstracto.  Una clase que extiende a una clase abstracta debe implementar los métodos abstractos (escribir el código) o bien volverlos a declarar como abstractos, con lo que ella misma se convierte también en clase abstracta.
  • 3.  Presentan un nivel de "abstracción" tan elevado que no sirven para instanciar objetos de ellas.  elevados de algunas  Representan los escalones más jerarquías de clases y solo sirven para derivar otras clases, en las que se van implementando detalles y concreciones, hasta que finalmente presentan un nivel de definición suficiente que permita instanciar objetos concretos.  Se suelen utilizar en aquellos casos en que se quiere que una serie de clases mantengan una cierta característica o interfaz común. Por esta razón a veces se dice de ellas que son pura interfaz.
  • 4.
  • 5. Declaración e implementación de métodos abstractos  abstract class FiguraGeometrica { ... abstract void dibujar(); ... } class Circulo extends FiguraGeometrica { ... void dibujar() { // codigo para dibujar Circulo ... } }
  • 6. Declaración de clases abstractas Las clases abstractas se declaran empleando la palabra reservada abstract como se muestra a continuación:  public abstract class IdClase . . . Ejemplo:  /** * Declaracion de la clase abstracta FiguraGeometrica * A. Garcia-Beltran - noviembre, 2005 */ public abstract class FiguraGeometrica { // Declaracion de atributos private String nombre; // Declaracion de metodos abstract public double area(); public figuraGeometrica (String nombreFigura ) { nombre = nombreFigura; } final public boolean mayorQue (FiguraGeometrica otra) { return area()>otra.area(); } final public String toString() { return nombre + " con area " + area(); } }
  • 7. Reglas de uso:   Una clase abstracta solo puede ser usada como clase base para otras clases, pero no puede ser instanciada para crear un objeto.  Una clase abstracta no puede ser utilizada como argumento o como retorno de una función.  Si puede declararse punteros a clase abstracta .  Se permiten referencias a clase abstracta, suponiendo que el objeto temporal no es necesario en la inicialización.
  • 8. Referencias y objetos abstractos Se pueden crear referencias a clases abstractas como cualquier otra:  FiguraGeometrica figura; Sin embargo una clase abstracta no se puede instanciar, es decir, no se pueden crear objetos de una clase abstracta. El compilador producirá un error si se intenta: FiguraGeometrica figura = new FiguraGeometrica(); Esto es coherente dado que una clase abstracta no tiene completa su implementación y encaja bien con la idea de que algo abstracto no puede materializarse. Sin embargo: FiguraGeometrica figura = new Circulo(. . .); figura.dibujar(); La invocación al método dibujarse resolverá en tiempo de ejecución y la JVM llamará al método de la clase adecuada.
  • 9. Ejemplo clase abstracta int x, y;  public abstract class Figura { public void mostrarOrigen() { System.out.println("x= "+x+" y= "+y);} public abstract double area(); // No tiene implementación public abstract double mostrarNombre(); } public class Triangulo extends Figura { protected int base, altura; public Triangulo (int ba, int al) { base=ba; altura=al; } public double area() { return base*altura/2; } public void mostrarNombre() { System.out.println(“triangulo”); } } public class Cuadrado extends Figura { protected int lado; public Cuadrado (int lado) { this.lado=lado; } public double area() { return lado*lado; } public void mostrarNombre() { System.out.println(“cuadrado”);}}
  • 10.  Prueba clase abstracta public class PruebaClaseAbstracta { public static void main(String args[]) { Figura fig; Triangulo tri; Cuadrado cua;  fig = new Figura(); // error no se puede //instanciar una clase abstracta tri = new Triangulo(4,3); tri.mostrarOrigen(); tri.mostrarNombre(); fig = tri; fig.mostrarNombre(); System.out.println("Area triangulo: "+fig.area()); cua = new Cuadrado(5); fig = cua; System.out.println("Area cuadrado: "+fig.area()); } }
  • 11. Interfaces   Una interfaz en java es un conjunto de métodos abstractos y propiedades. En ellas se especifica qué se debe hacer pero no su implementación. Serán las clases que implementen estas interfaces las que describan la lógica del comportamiento de los métodos.
  • 12. Ventajas al utilizar interfaces   Se organiza la programación.  Obligar a que ciertas clases utilicen los mismos métodos (nombres y parámetros).  Establecer relaciones entre clases que no estén relacionadas.
  • 13. Declaración de interfaces  interface NombreInterfaz { tipo static final NOMBRECONSTANTE1 = valor; …….….…. public tipoDevuelto nombreMetodo1(listaParámetros); …….….…. } class NombreClase implements NombreInterfaz1 [, NombreInterfaz2 ..] { // declaración atributos y métodos de la clase …….….…. }
  • 14.
  • 15. Extensión de interfaces   Se puede definir un interface que especialice a otro interface mediante extends similar a herencia.  Un interface puede extender a varios interfaces a la vez. interface ElementoOrdenado extends Comparable, Cloneable, java.io.Serializable { // miembros y métodos propios del interfaz //ElementoOrdenado ..... }
  • 16. Ejemplo:  public interface Nombrable { static final boolean CIERTO = true; public void mostrarNombre(); } public class Elemento implements Nombrable { String nombre; public Elemento(String nom) { nombre = nom; } // obligatorio implementar método mostrarNombre public void mostrarNombre(){ System.out.println("Nombre: "+nombre); if (CIERTO) System.out.println("Constante CIERTO "); }}
  • 17. Net grafía:   http://gl-epn-programacion- ii.blogspot.com/2010/04/interfaces-en-java.html  http://www.fdi.ucm.es/profesor/lgarmend/arcgisjava/temas /Tema%209%20Clases%20abstractas  http://ocw.upm.es/lenguajes-y-sistemas- informaticos/programacion-en-java- i/Contenidos/LecturaObligatoria/16-herencia.pdf %20e%20interfaces.pdf  http://www.slideshare.net/networksens/09-clases-abstractas- e-interfaces  http://www.zator.com/Cpp/E4_11_8c.htm  http://www.arrakis.es/~abelp/ApuntesJava/ClasesAbstractas .htm