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
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