Ejemplo. Calcular el área y el perímetro de tres figuras geométricas: Circulo, Rectángulo, y Triángulo.
Crearemos una clase abstracta (la cual no podrá ser instanciada) que nos servirá como Padre de las demás clases que la extienden.
- Clase abstracta: Figura
- Clases hijas: Triangulo, Rectangulo, y Circulo
Además una interface, una clase también abstracta que nos permitirá definir métodos comunes entre las tres clases creadas.
//tenemos la clase abstracta (y Padre)
abstract class Figura{ ... }
//la interface
interface Funciones { ... }
//las clases hijas y que además implementan la interface Funciones
class Triangulo : Figura , Funciones{ ... }
class Circulo: Figura, Funciones{ ... }
class Rectangulo: Figura, Funciones{ ... }
Código completo:
using System;
public class Codemonkey{
public static void Main(string[] args){
Triangulo t;
Rectangulo r;
Circulo c;
try{
t=new Triangulo();
c=new Circulo();
r=new Rectangulo();
t.setLados(new int[]{3,3,3});
t.Bases=26;
t.Altura=23;
c.Radio=2.4;
c.Diametro=4.9;
r.Bases=6;
r.Altura=4;
Console.WriteLine("Triangulo\nPerimetro: {0} , Area: {1}",t.getPerimetro(),t.getArea());
Console.WriteLine("Circulo\nPerimetro: {0} , Area: {1}",c.getPerimetro(),c.getArea());
Console.WriteLine("Rectangulo\nPerimetro: {0} , Area: {1}",r.getPerimetro(),r.getArea());
}catch(Exception ex){
Console.Error.WriteLine("Error {0}",ex.Message);
Environment.Exit(0);
}finally{
t=null;r=null;c=null;
}
}
}
abstract class Figura{
private int[] lados;
private int altura;
private int bases;
public void setLados(int[] lados){
this.lados=lados;
}
public int[] getLados(){
return lados;
}
public int Bases{get;set;}
public int Altura{get;set;}
}
interface Funciones{
int getArea();
int getPerimetro();
}
class Triangulo : Figura , Funciones{
public int getPerimetro(){
return (int)this.getLados()[0] * 3;
}
public int getArea(){
return (this.Bases*this.Altura) / 2;
}
}
class Rectangulo : Figura, Funciones{
public int getPerimetro(){
return 2*(this.Bases*this.Altura) + (2* this.Bases);
}
public int getArea(){
return this.Bases*this.Altura;
}
}
class Circulo : Figura, Funciones{
private double radio;
private double diametro;
public double Radio{get;set;}
public double Diametro{get;set;}
public int getPerimetro(){
return (int)(3.14159*this.Diametro);
}
public int getArea(){
return (int)(3.14159*(this.Radio*2));
}
}
Compilar: gmcs Codemonkey.cs
Ejecutar: mono Codemonkey.exe