domingo, diciembre 10, 2006

Intuitive C#

Intuitive C#... y ahora, hablemos un poco sobre planes. Estoy de racha como "escritor", y quiero aprovecharlo. Voy a aprovechar el impulso del manual sobre el lenguaje para reorganizarlo, ampliarlo y corregirlo, para convertirlo en un libro "de verdad", que se llamaría Intuitive C#, siguiendo la línea de Intuitive Delphi.
De hecho, ya he comenzado, dividiendo el contenido del manual en capítulos y trasvasando material escrito para la idea original del libro a este nuevo esqueleto. El libro comenzaría por una presentación general del CLR. El segundo capítulo, que sería nuevo, se titularía "Programación orientada a objetos", y describiría las ideas básicas relacionadas con el trío clásico: encapsulamiento, herencia y polimorfismo. Tercer capítulo: clases y objetos, en los que ya se verían detalles concretos de los tipos de clase en C#. Cuarto capítulo: estructuras; probablemente aproveche para presentar los tipos enumerativos en ese capítulo. Quinto: componentes. Esto es: propiedades, delegados y eventos. Habría un capítulo sobre administración de memoria, y de ahí en adelante la línea sería la del manual actual.
Es bastante trabajo, por lo que quiero mantener siempre una "versión estable" del libro, actualizada periódicamente. Quiero decir: una versión legible y coherente. No tiene sentido proponerse grandes metas y después tardar un año en tener resultados presentbles. Esta idea de libro sobre el lenguaje no es la idea "perfecta" que me gustaría poner por escrito, pero me he dado cuenta que hace falta algo en esta línea para motivar a la gente. Lo que sí aprovecharé son las cosas que he aprendido sobre el CLR gracias a Freya, para mostrar detalles de implementación en todo sitio donde sea posible. Si sale con barba, ya sabe...

[12/dic] Para la siguiente entrega ya hay un capítulo completo sobre estructuras, interfaces implementadas por estructuras y boxing. Ya está listo también un pequeño capítulo sobre reflexión, System.Type, y atributos.
Por cierto, ahí van dos detalles poco conocidos sobre el CLR:
  • ¿Sabía usted que el CLR permite definir procedimientos globales? Sí, he dicho bien: procedimientos, sin clases que los encapsulen, como en el viejo Pascal o en C. Claro, esto se utiliza para las extensiones de Visual C++.
  • La otra sorpresa oculta: CLR permite, en teoría, que los argumentos de tipos genéricos se comporten covariante o contravariantemente. Esto es: ahora mismo, no se puede asignar un List<Bulldog> a un List<Perro>, aunque Perro sea un ancestro de Bulldog. En teoría, esta opción que menciono permitiría que un lenguaje hipotético declarase legal esta asignación.
Me temo, sin embargo, que esta última posibilidad vaya acompañada de algún tipo de verificación en tiempo de ejecución, para mantener la integridad del sistema de tipos. Lo menciono porque la covarianza sí se permite con los tipos array, cuando los tipos bases son tipos de referencia. Pero en ese caso, las asignaciones a elementos tienen que verificar el tipo del elemento asignado. Esto se permite para poder ejecutar Java sobre .NET, pues Java ofrece este tipo de compatibilidad.

[13/dic]: ¡Buenas noticias! Trescientas y tantas descargas de Intuitive C# entre el lunes y el martes.

3 Comments:

Blogger PabloNetrix said...

¿Ian? ¿Dormir?

Son términos contrapuestos. Es como decir "Inteligencia militar"... o "Microsoft y Open Source"

O quizás lo que hace es una especie de "hibernación": acumula sueño y luego se tira 2 semanas seguidas durmiendo. Y por eso pasa tanto tiempo sin haber cosas nuevas en el blog.

Vale Ian ya me callo xDDDD

lunes, diciembre 11, 2006 10:45:00 a. m.  
Blogger Ian Marteens said...

Y todavia sigo haciendo las cosas con nuestro viejo amigo Delphi

:) Bueno, eso es normal. Yo seguí haciendo esas aplicaciones pequeñas que abren un fichero y escriben en otro con Delphi hasta hace dos días. Y cuando estuve programando con Borland C++ para comer, antes de Delphi, tres cuartos de lo mismo... aunque lo hacía con Turbo Pascal.

La explicación no está en la sintaxis, sino en las diferencias en las librerías básicas. Por ejemplo, ya con Delphi, estuve usando la E/S de Assign/Reset/Read/Close durante mucho tiempo, hasta que me hice con el manejo de streams. ¿Por qué ocurre? Puede que sea por el tiempo de reacción que se considera aceptable en cada tipo de proyecto. En el proyecto que se espera que se entregue en un año, no hay problemas si no recuerdas para qué se usaba tal o más cual parámetro. Para la aplicación de uno mismo que tiene que transformar un fichero XML en un minuto para buscar un dato que necesita un cliente, uno no se permite ese tipo de retrasos. Mientras más rápido mejor.

La moraleja, que es lo que importa: un libro de este tipo tiene que ir con capítulos sobre librerías básicas. Manejo de entrada/salida, seguro. Siguiendo las modas, manejo básico de XML.

lunes, diciembre 11, 2006 5:37:00 p. m.  
Blogger Ian Marteens said...

acumula sueño y luego se tira 2 semanas seguidas durmiendo

:) Si digo lo que hago en esas dos semanas, la ministra de las hamburguesas manda una ambulancia para encerrarme en un psiquiátrico. Me ha dado ahora por la Física (esto es cíclico, como lo de los hombres lobos). Se me ha metido en la cabeza la idea de que, si puedo explicar informática a la gente, el método docente debería servirme también para explicar a la gente la relatividad general, con la correspondiente matemática. O la mecánica cuántica. Estoy metido en un proyecto personal para ver por qué a veces cuesta tanto aprender algo nuevo, pero es como golpear una pared de ladrillos, porque lo que hay escrito es muy poco y casi inútil. Mucha palabrería pedagógica, pero poca concreción.

lunes, diciembre 11, 2006 5:45:00 p. m.  

Publicar un comentario

<< Home