Primer vistazo a C# en Visual Studio 2005 Beta 2

1
27275

Primer vistazo a C# en Visual Studio 2005 Beta2

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

 

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

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

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)

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);
		}
	}
}

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.

1 COMENTARIO

DEJA UNA RESPUESTA

Por favor ingrese su comentario!

He leído y acepto la política de privacidad

Por favor ingrese su nombre aquí

Información básica acerca de la protección de datos

  • Responsable:
  • Finalidad:
  • Legitimación:
  • Destinatarios:
  • Derechos:
  • Más información: Puedes ampliar información acerca de la protección de datos en el siguiente enlace:política de privacidad