Mostrando entradas con la etiqueta abstractas. Mostrar todas las entradas
Mostrando entradas con la etiqueta abstractas. Mostrar todas las entradas

jueves, 24 de marzo de 2016

Programando en C# : Interfaces y clases abstractas

Para los programadores que vienen de Java puede parecerles raras algunas cosas del lenguaje C#. Recordemos que C# es un lenguaje "heredero" de Java ysigue la misma filosofía, pero con ciertas variantes y una evolución propia. C# nació como lenguaje competidor y ciertos aspectos permanecen igual.


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






sábado, 30 de noviembre de 2013

Scala ... ejemplos sencillos no. 5

Herencia y clase abstracta en Scala

Herencia: Es la propiedad que permite definir nuevas clases a partir de clases base ya existentes.

Las clases abstractas nos ayudan a representar objetos generales de un objeto,es decir, sus propiedades comunes. Como puede ser el nombre, el tamaño, el tipo, etc.

Las clases abstractas no pueden ser instanciadas. Solo las clases que extienden de ella.


En este ejemplo se define una clase base llamada Vehiculo y una clase hija llamada Moto. La clase Vehiculo tendra las siguientes características:
  • marca
  • tipo y
  • color
A su vez la clase hija tendrá solo una característica: tamaño


[Sintaxis]
class ClaseHija extends ClaseBase{ ... }

Definimos la clase Vehiculo:
abstract class Vehiculo(val _marcax:String=null,val _tipox:String=null,val _colorx:String=null){

  private var _marca:String=_marcax
  private var _tipo:String=_tipox
  private var _color:String=_colorx
 
  //getter 
  def marca = _marca
  //setter 
  def marca_= (value:String):Unit = _marca = value
 
  def tipo=_tipo
  def tipo_=(value:String):Unit=_tipo=value
 
  def color=_color
  def color_=(value:String):Unit=_color=value
 
  def getInfo():String={"marca: "+_marca+" ,tipo: "+_tipo+" , color: "+_color}
 
}


Definimos la clase Moto:

class Moto(override val _marcax:String,override val _tipox:String,override val _colorx:String,val _tamanyox:String=null) extends Vehiculo(_marcax,_colorx,_tipox){

  private var _tamanyo:String=_tamanyox
 
  def tamanyo = _tamanyo
  def tamanyo_= (value:String):Unit = _tamanyo = value
 
  override def getInfo():String={super.getInfo+" ,tamaño: "+_tamanyo}
}

Como se puede ver esto es  similar a Java.  La clase base y la clase hija tendrán código en común. Por último creamos la instancia de la clase Moto:

object Codemonkey extends App{
  val moto=new Moto("Toyota","rojo","sencilla","pequeña")
  println(moto.getInfo)
}

Código: http://www.pasteall.org/47735/java



Jai un lenguaje de programación inspirado en C++

Hoy hablaremos de un nuevo lenguaje de programación llamado Jai . Se trata de un lenguaje de programación que está desarrolland...

Etiquetas

Archivo del blog