Mostrando entradas con la etiqueta interfaces. Mostrar todas las entradas
Mostrando entradas con la etiqueta interfaces. 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






jueves, 25 de julio de 2013

Programando en Java ... no. 4

Más ejemplos de programas en Java, son muy sencillos. No hay gran ciencia en ellos.



Hay dos formas de escribir programas sin errores; sólo la tercera funciona. ::Alan J. Perlis::



1. Instancia a una interface, nos imprimirá "prueba"
package codemonkey;

public class Codemonkey{
  public static void main(String[] args) {
    System.out.println(new Servicio(){public String toString(){return "prueba";}});
  }
}

interface Servicio{
  public abstract String toString();
}

2. Modificamos el anterior código para obtener una cadena al revés,  definimos un nuevo método getReverse() dentro de la interface.
package codemonkey;

public class Codemonkey{
  public static void main(String[] args) {
    System.out.println(new Servicio(){public String getReverse(){
// usamos StringBuffer para obtener la cadena al revés
     StringBuffer reversa = new StringBuffer("esto es un ejemplo del uso de interfaces Java");
      reversa = reversa.reverse();
      return reversa.toString();
    }
    });
  }
}

interface Servicio{
  public abstract String getReverse();
}
3. Ejemplo de una clase usando el Patrón Singleton; la clase tendrá un método que nos devolverá un número aleatorio.
package codemonkey;

import java.util.Random;

public class Codemonkey{
  public static void main(String[] args) {
    Aleatorio miNumero=Aleatorio.getAleatorio();
    System.out.println("numero: "+miNumero.aleatorio());
  }
}

//patrón singleton
class Aleatorio{

  private static Aleatorio aleatorio=null;
  private Aleatorio(){}

  public static Aleatorio getAleatorio(){
    if(aleatorio==null){
      aleatorio=new Aleatorio();
    }
    return aleatorio;
  }

  public int aleatorio(){
    int numero=0;
    Random rand=new Random();
    numero=(int)rand.nextInt()*100;
    return numero;
  }

}

4. Uso de subList
package codemonkey;
import java.util.List;
import java.util.ArrayList;

public class Codemonkey{

  public static void main(String[] args) {
    List<Integer> listaPrincipal=new  ArrayList<Integer>();
//llenamos la lista con números enteros
    listaPrincipal.add(1);
    listaPrincipal.add(2);
    listaPrincipal.add(3);
    listaPrincipal.add(4);
    listaPrincipal.add(5);
    listaPrincipal.add(6);
    listaPrincipal.add(7);
    listaPrincipal.add(8);
//definimos 2 listas
    List<Integer> listaA=listaPrincipal.subList(0,4); // iniciara en 0 y finalizara en el índice 4
    List<Integer> listaB=listaPrincipal.subList(4,listaPrincipal.size()); // inicia en 4 y termina hasta el final de la lista
    System.out.println("lista principal: "+listaPrincipal);
    System.out.println("lista A: "+listaA);
    System.out.println("lista B: "+listaB);
  }
}
¿Quieres ver más ejercicios de programación?
http://ejerciciosdeprogramacion.com

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