Descargar

Primer vistazo a C# en Visual Studio 2005 Beta2

Enviado por [email protected]


     

    1. Para programadores Java (muy resumido)

    2.

    3. Nuestro proyecto

    4. Conclusiones

    Ya me ha llegado el CD con la Beta 2 de Visual Studio 2005 y me he puesto a probarlo…  y como siempre … aprovecho para compartirlo con vosotros (por cierto … que también os podéis animar)

    Aunque antes de empezar voy a hacer unas reflexiones en voz alta (que podéis no compartir y criticar):

    Los que vivimos de la informática de modo profesional creo que tenemos que ser objetivos. Si hacemos la pregunta ¿que es mejor C# o JAVA? yo respondería "y a quién le importa … ". Si son nuestros clientes y el mercado los que deciden las tecnologías. Nosotros tenemos que adaptarnos a las dinámicas del mercado (aunque siempre hay una pequeña capacidad de aconsejar y marcarlas).. Lo mejor y peor normalmente es subjetivo… la prueba está que en España hay clientes pro Microsoft y pro software libre y Java … es igual que cuando preguntas si es mejor una marca de coches que otra (del mismo segmento) ….. si las dos sobreviven… es que gustarán a suficientes personas ambas.

    Yo personalmente pienso que los extremos son siempre malos …  y hay que tener criterio:

    • Si miráis la aplicación demo del CD de la Beta y comprobáis lo que cuesta hacer una automatización de extracción de datos dinámicos de Excel …. te quedas flipao…. yo usaría el Wizard de Microsoft para hacer esto ….
    • Lo mismo si quisiera hacer un interfaz intuitivo para usuarios finales tradicionales  … pues usaría entornos Microsoft donde la productividad, rendimiento y aspecto son buenísimos.
    • Pero si quieres hacer una aplicación Web que corra distribuida entre una máquinas ….. pues casi que ha haría en Java. O si quisiera que mis aplicaciones tuvieran  alta escalabilidad vertical …
    • …. ahora…. también te digo que a mis clientes (de grandes empresas) les sigo proponiendo que no tiren su código COBOL/NATURAL simplemente porque no está de moda y un iluminado les ha dicho que hay que rehacerlo todo en Java …… Me da que hacer lo mismo en otro lenguaje carece un pelín de sentido (siempre y cuando tengas en el mercado gente que lo soporte) …..

    También me pregunto ¿hace cuantos años que tu editor de textos hacía mas cosas de las que tu usas?… y cada n meses sale otra versión (con más opciones a desconocer …). Me da que con esto de los lenguajes nos está pasando lo mismo …..  se da más importancia al lenguaje que a la técnica de construcción de software …. que se sigue realizando, en la mayoría de los sitios (al menos que yo conozca), de un modo artesanal. Os invito ha haceros una preguntas:

    • ¿Pintas (diagramas) lo que vas a hacer antes de hacerlo?
    • ¿Hablas de patrones de software?
    • ¿Preguntas a tus compañeros si han resuelto ese problema antes?
    • ¿Tratas de resolver un problema ya conocido con otra técnica por la satisfacción del conocimiento?
    • ¿Se comparte código en la organización? ¿Y conocimientos?
    • ¿Has construido algún componente como tal y que se use después de algunos años?
    • ¿Has introducido en tu ciclo de trabajo las pruebas unitarias?¿Y el repositorio de código?
    • ¿Sabes para que valen todas las opciones de los menús de tu entorno de trabajo? ¿Incluidas las de depuración?
    • ¿Te has planteado construir extensiones a tus herramientas de desarrollo?
    • ¿Cuantos desarrollos que has realizado todavía están en uso?

    Si ya hacéis estas cosas, no se os olvide que tengo una empresa y busco gente www.autentia.com (no es broma y no os cortéis)

    Bueno dejando el plano metafísico, lo mejor, cuando se va a probar una herramienta es plantearse hacer una aplicación real y ver lo que tardas … pero …. ante de nada, como usaré C#, me he parado a repasar un poco las diferencias respecto a otros lenguajes que tengo más calientes como  Java y C++.

    Un consejo para navegantes …. en vez de tirarte n horas navegando por Internet buscando manuales ….. suele ser mas barato (el tiempo vale dinero) comprarte un libro (y más barato si tu jefe es el que lo paga)

    Un enlace:

    http://msdn.microsoft.com/library/spa/default.asp?url=/library/SPA/dncscol/html/csharp01182001.asp

    1. Para programadores Java (muy resumido)

    Básicamente, las diferencias que me he apuntado:

    • package por namespace, poniendo la clase entre llaves
    • import por using
    • Campos de solo lectura con readonly
    • Paso de parámetros por referencia con palabra ref (inicializados) y out
    • palabra base para hace referencia al constructor de la clase base
    • final en clases por sealed (sellada)
    • Número de parámetros variables utilizando la palabra reservada params y pasando un array. Aunque la notación de un array es como en C++, se llama a la clase System.Array
    • El polimorfismo es a estilo C++ y requiere de la declaración del método en la clase base como virtual y en la sobrecargada override (ojo con esto los programadores Java)
    • Cast de objetos como en Java y palabra clave as (no falla nunca porque devolvería null)
    • Determinación del tipo original de un objeto con is
    • Modificadores de miembros: public, protected, private e internal (algo como protected y private para la unidad de compilación actual)
    • Existencia de métodos de acceso para acceder a propiedades sin conocer la existencia de getters y setters, con bloques get y set (con palabra clave value para parámetro pasado). Además se pueden crear atributos de solo lectura solamente ignorando el set.
    • Existencia de enumeraciones
    • La declaración de arrays multidimensionales se realiza utilizando comas: Ejemplo de dos dimensiones: array[,]. Tambien se pueden crear arrays irregulares como en Java.
    • Para mostrar mensajes con parámetros tipo printf podemos usar System.WriteLine("{0}", valor);
    • Para imprimir el número de dimensiones de un array usar la propiedad Rank
    • Posibilidad de crear arrays inteligentes, o mejor dicho, acceder a un objeto a través de un índice como si fuera un array

    public object this(int indice) {}

    get{ // operar con indice

    }

    set{ // operar con indice y value

    }

    }

    • Mecanismo de anotaciones (a atributos y métodos) a través de clases heredadas de System.Attribute y uso de corchetes.
    • Para reflexión utilizaremos el operador typeof y la clase System.Type
    • Se pueden construir conversiones definidas por usuario (cast) con static implicit/explicit operator
    • Determinar el espacio que ocupa una variable con sizeof (al estilo c)
    • Modificador unsafe para código tipo heredado (aritmética de punteros)
    • Sentencia foreach para iterar entre colecciones
    • Se incluye la sobrecarga de operadores, tan echados de menos en Java (al menos para mi). Aunque no se puede sobrecargar el operador new ni =.
    • Existencia de delegados ( similares a punteros a funciones )

    Enlace de Interés

    https://www.monohispano.org/varios/comp_csharp/index.html

     

    2. Instalación de Visual Studio 2005 Beta 2

    Buen, una vez solicitado (de modo gratuito) el paquete a Microsoft (4 DVDs), nos ponemos a instalar el entorno

    La verdad es que hasta el instalador esta muy cuidado

    No me ha fallado nada y después de un rato … ya podemos arrancar la aplicación.

    Tiene un montón de asistentes que nos permiten hacer cosas más que interesantes desde el primer momento (os recomiendo que miréis el salva-pantallas RSS y las pocas líneas de código que tiene)

    3. Nuestro proyecto

    En la mayoría de los sistemas, la gente reniega de la pruebas unitarias porque dicen que lo que importa es el comportamiento de la aplicación cuando ésta está desplegada.

    Bueno, pues vamos a construir una aplicación para automatizar las secuencias de navegación simulando el comportamiento real del usuario.

    La gracia es, que el usuario navegue e ir grabando lo que hace (registrando información) y luego comparar las secuencias antiguas con las modernas (pruebas de regresión funcional, velocidad e incluso capacidad). Nota: Ya hay un montón de software que hace esto pero me hace ilusión construir el mío propio.

    Voy a crear un proyecto con aplicación Windows típica

    Nos aparece el editor de formularios

    Y a la izquierda podemos ve los controles que podemos incorporar

    Voy a contaros solo el primer paso (el tiempo es limitado y hay que dejar cosas para los cursos)

    Elegimos un panel divisible y situamos un ListBox a la izquierda y un WebBrowser a la derecha, estableciendo como home www.adictosaltrabajo.com  (uno 10 clicks)

     

    Hacemos doble click en el navegador y en el ListBox y añadimos el código deseado:

    • Cuando se cargue una página, guardamos su URL
    • Cuando se pinche el ListBox, cogemos la URL y la cargamos en el navegador (anda, si hemos construido un navegador limitado con un history)

    using System;

    using System.Collections.Generic;

    using System.ComponentModel;

    using System.Data;

    using System.Drawing;

    using System.Text;

    using System.Windows.Forms;

    using System.Collections;

    // declaración del espacio de nombres

    namespace adictoswindows

    {

    // declaracion parcial de la clase (concepto interesante)

    public partial class VentanaRoberto : Form

    {

    public VentanaRoberto()

    {

    InitializeComponent();

    }

    // funcion asistente para no meter depuraciones descontroladas

    void depura(String cadena)

    {

    System.Console.WriteLine(cadena);

    }

    // respondemos al evento de carga completa de documento

    private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)

    {

    // recogemos el objeto que envia el evento

    WebBrowser x = (WebBrowser)sender;

    // actualizamos la lista de la izquierda

    listBox1.BeginUpdate();

    listBox1.Items.Add(x.Url);

    listBox1.EndUpdate();

    // depuramos para asegurarnos que la cosa va bien

    depura("Escribimos: " + x.Url);

    }

    // cuando el usuario selecciona una URL de la lista, la mostramos en el navegador

    private void listBox1_SelectedIndexChanged(object sender, EventArgs e)

    {

    string cadena = listBox1.SelectedItem.ToString();

    webBrowser1.Url = new Uri(cadena);

    }

    }

    }

    4. Conclusiones

    La verdad es que es impresionante … rápido, elegante y potente ……

    La única lástima es que nos tenemos que aprender otra inmensa librería de clases para ser productivos en este entorno …. aunque si tienes la dinámica Java y has programado un poco en Windows …. las cosas aparecen delante de tus ojos.

    • ¿Os parece C# un Java++–++ ? Pues entonces solo tenéis que mirar el J# … (en otro tutorial)

    De todos modos, supongo que pasará como siempre…. nadie se comerá a nadie y coexistirán durante unos añitos, cada uno con su cuota de mercado.

    Roberto Canales Mora

    www.adictosaltrabajo.com