1. Para
programadores Java (muy resumido)
2.
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)
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 namespace adictoswindows { // declaracion parcial de la clase (concepto interesante) public partial class VentanaRoberto : { public VentanaRoberto() { InitializeComponent(); } // funcion asistente para no meter depuraciones void depura(String cadena) { System.Console.WriteLine(cadena); } // respondemos al evento de carga completa de private void { // recogemos el objeto que envia el WebBrowser x = (WebBrowser)sender; // actualizamos la lista de la listBox1.BeginUpdate(); listBox1.Items.Add(x.Url); listBox1.EndUpdate(); // depuramos para asegurarnos que la cosa va depura("Escribimos: " + x.Url); } // cuando el usuario selecciona una URL de la private void { string cadena = webBrowser1.Url = new Uri(cadena); } } } |
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