12
ESCUELA POLITÉCNICA DEL EJÉRCITO CIENCIAS DE LA ENERGÍA Y MECÁNICA INGENIERÍA MECÁNICA PROGRAMACIÓN I CLASES ABSTRACTAS E INTERFACES Rodrigo Salinas V.

Clases abs e interfaces

Embed Size (px)

Citation preview

Page 1: Clases abs e interfaces

ESCUELA POLITÉCNICA DEL EJÉRCITOCIENCIAS DE LA ENERGÍA Y MECÁNICA

INGENIERÍA MECÁNICA

PROGRAMACIÓN I

CLASES ABSTRACTAS E

INTERFACES

Rodrigo Salinas V.

Page 2: Clases abs e interfaces

CLASES ABSTRACTAS

abstract class Dibujar

{

abstract void miMetodo(int var1, int var2);

String otroMetodo()

{

//instrucciones del metodo

}

}

Una clase que declara la existencia de métodos pero no la implementación de dichos métodos (o sea, estos métodos no hacen nada, solo son declarados), se considera una clase abstracta.Una clase abstracta puede contener métodos no abstractos pero al menos uno de los métodos debe ser abstracto.Para declarar una clase o método como abstractos, se utiliza la palabra reservada abstract.

Una clase abstracta no se puede instanciar (es decir no se pueden volver en objetos) pero si se puede heredar y las clases hijas serán las encargadas de agregar la funcionalidad a los métodos abstractos.

Page 3: Clases abs e interfaces

EJEMPLO

Como ejemplo tomaremos dos figuras geométricas, el Rectángulo y el Triangulo rectángulo, para el

ejemplo sólo consideraremos dos características similares: el ancho y el alto, por lo que podemos crear una súper clase Figura geométrica con estas dos características y sus métodos correspondientes,

además del métodos getArea() que devolverá el área de la Figura. Pero, se presenta un problema, el

cálculo del área del Rectángulo es diferente al cálculo del área del Triangulo.

Área del Rectángulo = ancho X alto

Área del Triangulo = (ancho X alto)/2

Por lo tanto, el método getArea() deberá ser abstracto, por lo cual, la clase Figura también deberá ser abstracta.

Page 4: Clases abs e interfaces

abstract class Figura {

protected int ancho,alto;

void setDatos(int x,int y) //método no abstracto

{

ancho=x;

alto=y;

}

void mostrarDatos() //método no abstracto

{

System.out.println(ancho);

System.out.println(alto);

}

abstract float getArea(); //método abstracto

}

class Rectangulo extends Figura{

float getArea() //implementación (desarrollo del método)

{

return (ancho*alto);

}

}

Page 5: Clases abs e interfaces

public class prueba {

public static void main(String[] args) {

Rectangulo r=new Rectangulo();

r.setDatos(4,3);

System.out.println(r.getArea());

Triangulo t=new Triangulo();

t.setDatos(4,3);

System.out.print(t.getArea());

}

}

class Triangulo extends Figura{

float getArea() //implementación (desarrollo del método)

{

return ((ancho*alto)/2);

}

Tipo de dato ProtectedEste tipo de datos es privado para todas aquellas clases que no son derivadas, pero público para una clase derivada de la clase en la que se ha definido la variable como protected.

Page 6: Clases abs e interfaces

INTERFACES

Una interface es una variante de una clase abstracta con la condición de que todos sus métodos deben ser abstractos. Si la interface va a tener atributos, éstos deben llevar las palabras reservadas static final y con un valor inicial ya que funcionan como constantes por lo que, por convención, su nombre va en mayúsculas.

interface Nomina

{

public static final String EMPRESA = "Patito,

S. A.";

public void detalleDeEmpleado(Nomina obj);

}

Page 7: Clases abs e interfaces

Una clase implementa una o más interfaces

(separadas por comas) con la palabra reservada

implements con el uso de interfaces se puede

“simular” la herencia múltiple que Java no soporta

class Empleado implements Nomina

{

...

}

Page 8: Clases abs e interfaces

En Java, las interfaces se declaran con la palabra reservadainterface de manera similar a como se declaran las clasesabstractas.

public interface Figura

{

public double area ();

}

En la declaración de una interfaz, lo único que puedeaparecer son declaraciones de métodos (su nombre ysignatura, sin su implementación) y definiciones deconstantes simbólicas

Una interfaz no encapsula datos, sólo define cuáles son losmétodosque han de implementar los objetos de aquellas clases que

implementen la interfaz.

Page 9: Clases abs e interfaces

public class Circulo implements Figura

{

private double radio;

public Circulo (double radio)

{

this.radio = radio;

}

public double area ()

{

Return Math.PI*radio*radio;

}

}

public class Cuadrado implements Figura

{

private double lado;

public Cuadrado (double lado)

{

this.lado = lado;

}

public double area ()

{

return lado*lado;

}

}

Page 10: Clases abs e interfaces

EJEMPLO DE INTERFACES

En el siguiente ejemplo, tomaremos de ejemplo a los animales, se sabe que todos los animales hablan (literalmente), por ejemplo el perro ladra, el gato maúlla, etc.

Entonces se puede crear una interfaz Animal con el método hablar()

interface Animal {

public void hablar();

}

Ahora crearemos una clase Perro que implemente la interfaz Animal, por lo que obligatoriamente tendremos que implementar el método hablar().

public class Perro implements Animal{

public void hablar()

{

System.out.print("guauuu");

}

}

Page 11: Clases abs e interfaces

Ahora crearemos una clase Gato que implemente la interfaz Animal, por lo que obligatoriamente tendremos que implementar el método hablar().

public class Gato implements Animal{

public void hablar()

{

System.out.print("miauuu");

}

}

class prueba {

public static void main(String[]

args) {

Perro p=new Perro();

p.hablar();

Gato g=new Gato();

g.hablar();

}

}

Page 12: Clases abs e interfaces

CONCLUSIONES

Las clases abstractas se usa únicamente para definirsubclases, es una clase que no se puede instanciar.

Usamos una clase abstracta Cuando deseamos definiruna abstracción que englobe objetos de distintos tipos yqueremos hacer uso del polimorfismo.

Una interfaz es una clase completamente abstracta (unaclase sin implementación)