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:
- Una interface
- Una clase base abstracta
- 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