sábado, 11 de octubre de 2014

Programando en Ceylon ... no. 4

Continuamos con la programación en Ceylon. En esta ocasión veremos un ejemplo de interfaces y clases abstractas.


Ejemplo. Programa que calcule el área de un triángulo, un cuadrado, y un circulo. 

Áreas (fórmulas):

Triángulo => (base*altura)/2 
Cuadrado => lado^2
Circulo => 3.14159*(radio^2)


Crearemos:
  1. Una interface
  2. Una clase base abstracta
  3. Tres clases hijas
 ¿Cómo creo una interface en Ceylon?
 shared interface NombreInterface{ ... }

Llamaremos 'Operaciones' a nuestra interface, escribimos un método 'area', el cual nos servirá más adelante.

shared interface Operaciones{
   shared formal Float area();
}

Es muy similar a Java, aunque es obvio que las anotaciones y palabras reservadas van a cambiar.

La clase base abstracta quedará así:

abstract class Figura() of Triangulo|Cuadrado|Circulo satisfies Operaciones{ }

La parte  "of Triangulo|Cuadrado|Circulo"  nos indica las clases hijas, la parte "satisfies Operaciones" es similar al implements de Java.


Las clases hijas quedarán de la siguiente forma:
shared class Triangulo(base,altura) extends Figura(){
     shared Float base;
    shared Float altura;

    shared actual Float area(){
        return (base*altura)/2.0;
    }

    shared String description = "Triangulo(base: ``base``, altura: ``altura``)"

}
shared class Cuadrado(lado) extends Figura(){
shared Float lado;

    shared actual Float area(){
        return lado^2;
    }

    shared String description = "Cuadrado(lado: ``lado``)";


}
shared class Circulo(radio) extends Figura(){
  shared Float radio;

    shared actual Float area(){
        return 3.14159*(radio^2);
    }

    shared String description = "Circulo(radio:  ``radio``)"


}

Finalmente el método principal del programa.
shared void run(){

    Triangulo triangulo=Triangulo(12.9,20.0);
    Cuadrado cuadrado=Cuadrado(3.7);
    Circulo circulo=Circulo(2.9);
    print(" ``triangulo.description``");
    print(" ``cuadrado.description``");
    print(" ``circulo.description``");
    print(" area triangulo: ``triangulo.area()``");
    print(" area cuadrado: ``cuadrado.area()``");
    print(" area circulo: ``circulo.area()``");
}

Compilamos: ceylon compile source/elefante.ceylon
Ejecutamos: ceylon run default


No hay comentarios:

Publicar un comentario