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






domingo, 31 de mayo de 2015

Programando en C# no. 5 ... System.Windows.Forms en Mono

En este post tan solo veremos como crear una ventanita usando System.Windows.Forms desde una aplicación C# (usando el compilador mono).

¿Por qué mono?
Porque me parece adecuado para quienes quieren aprender .Net sin necesidad de instalar Windows. 

¿Por qué no usar Wine para instalar Visual Studio .Net?
Porque siempre hay algún error al instalar dependencias en Linux, al menos así los he tenido. Creo que la mejor opción es siempre usar  Visual Studio desde Windows.

Hola.cs
using System;
using System.Windows.Forms;

public class Hola{
    public static void Main(string[] args){
       
        try{
           MessageBox.Show("Hola, estoy usando windows forms desde Linux");
        }
        catch(Exception ex){
            Console.Error.WriteLine("Error: ["+ex.Message+"]");
            Environment.Exit(0);
        }
    }
}


Compilar: mcs Hola.cs -r:System.Drawing.dll -r:System.Windows.Forms.dll

Ejecutar: mono Hola.exe

Salida:

sábado, 29 de marzo de 2014

Comparativa de lenguajes: C# y Java

Esta no es una comparación entre C# y Java para ver cual es el mejor. Solo son ejercicios básicos de programación para entender algunos aspectos de ambos lenguajes.




¿Qué herramientas (IDEs) existen para programar en estos lenguajes?

Para Java:
  • Netbeans
  • Eclipse
  • IntelliJ Idea
  •  JDeveloper
  • entre otros más
Para C#:
  • Visual Studio .NET
  •  Sharpdevelop
  • Monodevelop 
Para programar en C# es preferible usar la plataforma Visual Studio .Net, existe una alternativa "gratuita" para C# llamada Visual C# express para quienes desean aprender el lenguaje.
1. Imprimir un mensaje
//en C#
Console.WriteLine("Esto es un simple mensaje");

//en Java
System.out.println("En java también se puede hacer");

2. using vs import
//en C#
using System;

//en Java
import java.lang.System;

En C# la palabra using  se emplea para importar "namespaces", definir alias y liberar y agregar recursos. En Java la palabra import nos sirve para importar librerías y/o clases.

3. Uso de "foreach"
//en C#
string[] nombres={"Yezmin","Diana","Tomas","Eduardo"};
foreach(string n in nombres){
  Console.WriteLine("hola "+n);
}

//en Java
String[] nombres={"Horacio","Alberto","Miguel","Karla"};
for(String n: nombres){
  System.out.println("hola "+n);
}

4. if-else
//en C#
string str_cadena="Miguel Cardenas";

if(str_cadena == "Miguel Cardenas"){
 Console.WriteLine("Es el mismo nombre");
}else{
  Console.WriteLine("Bienvenido "+str_cadena);
}

//en Java
String str_cadena="Humberto Campos";

if(str_cadena.equals("Humberto Campos")){
  System.out.println("Es el mismo nombre");
}else{
  System.out.println("Bienvenido "+str_cadena);
}

5. Introducir datos desde consola
//en C#
string nombre=null;
Console.WriteLine("Introduce nombre:");
nombre=Console.ReadLine();

//en Java, existen varias alternativas, por ejemplo, usando java.util.Scanner
import java.util.Scanner;

Scanner teclado=new Scanner(System.in);
String nombre=null;
System.out.println("Introduce nombre: ");
nombre=teclado.readLine();

6. Crear una clase
//en C#
class Televisor{
  private string marca;

  public Televisor(){}

  public Televisor(string marca){
          this.marca=marca;
   }

  public string Marca{
       get{ return this.marca; }
       set{  this.marca=value; }
  }

}
 
//en Java
class Televisor{
  private String marca;

  public Televisor(){}

  public Televisor(String marca){
          this.marca=marca;
   }

  public String getMarca(){
         return this.marca;
  }

 public void setMarca(String marca){
        this.marca=marca;
  }

}

Como se puede ver ambos lenguajes se parecen bastante. Ambos lenguajes de programación son orientados a objetos. Permiten crear aplicaciones por consola, aplicaciones gráficas y web.

Links
http://blog.desdelinux.net/mono-para-principiantes-1ra-parte/

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