lunes, 30 de junio de 2008

CH01-02 - Primer programa en C# - Parte I

Como marca la tradición de cada libro y tutorial de cualquier lenguaje de programación, comenzaremos por el programa más simple que se puede escribir y veremos en detalle sus partes constitutivas.

- Código Fuente:
Todo programa consiste básicamente de una cierta cantidad de lineas de código fuente. Este código fuente es el que el desarrollador escribe en un archivo (en nuestro caso, archivos con extensión .cs).
Luego este archivo de código fuente es compilado a IL (Microsoft Intermediate Languaje). Al ejecutar el programa, el CLR convierte el código IL en código nativo para la plataforma sobre la que se esta ejecutando. Una vez compilado este código se guarda en un cache de memoria de tal forma que la próxima vez que es invocado está listo para ejecutarse sin necesidad de volver a compilarse.


namespace Tutorial
{
class HolaMundo
{
static void Main()
{
//Imprimir en pantalla
System.Console.WriteLine("Hola Mundo!");
}
}
}

Aunque es un ejemplo de lo mas simple, es muy útil para ilustrar diferentes conceptos del lenguaje. Veamos en detalle parte por parte.

-Clases:
Lo primero que notamos es la palabra reservada "class" en la tercera linea: **class HolaMundo**
La palabra reservada class crea un nuevo tipo. Un tipo es una cosa y el mundo está lleno de cosas como una mesa, una silla, el telefono, etc. El perro, mi hermano, mis hijos son cosas también. El cielo es una cosa, las ideas del amor y el honor son cosas.
Como podemos ver, somos una especie orientada a cosas (objetos) y C# es un lenguaje orientado a objetos también. Algunas cosas son concretas (mesa, silla) y otras son abstractas (amor, libertad) y C# tiene la habilidad de representar ambos tipos.

Una clase define una nueva cosa o una nueva entidad. Un objeto es una instancia de una clase. Por ejemplo la palabra perro describe la generalidad de la idea y mi perro Snoopy es una instancia de la clase perro, es un perro especifico.
De la misma forma, en una aplicación Windows, la palabra botón describe como son los botones y que capacidades poseen los botnoes de una aplicación y los botones Aceptar, Cancelar o Imprimir son instancias especificas de la clase botón.

Las clases definen nuevos tipos. Desde la perspectiva del lenguaje, un tipo describe el tamaño y las capacidades de los objetos. C# provee un número de tipos propios (built-in) como int, long, double, y al mismo tiempo como desarrolladores podemos crear nuestros propios tipos.


- Metodos:
Si miramos el codigo dentro de la clase, encontramos el metod main:


static void Main()
{
//Imprimir en pantalla
System.Console.WriteLine("Hola Mundo!");
}

Cada clase posee propiedades y comportamiento. De hecho, en C#, todo lo que sucede, sucede dentro de una clase. Por esta razón una clase no es solo una palabra clave del lenguaje sino es un concepto clave sobre el cual se fundamentan muchos otros conceptos.
El comportamiento de una clase está definido por sus métodos (funciones miembros). Los métodos son tipicamente nombres de acciones que un objeto determinado puede realizar, como por ejemplo ListarNombres o WriteLine. Cada programa debe tener un método especial llamado Main(), el cual no tiene un nombre de acción pero tiene un rol especial en cada programa: es el punto de entrada, esto significa que lo primero que se invoca al llamar a un programa es este método.

Otro aspecto de este metodo es que debe ser marcado como estatico, es decir anteponiendo la palabra reservada static. Mas adelante veremos que significa marcar un metodo con esta palabra reservada. Mientras tanto lo que necesitamos saber es que todo metodo Main() debe ser marcado como static.

De forma general, un metodo posee: un nombre, parametros y un tipo retornado. Cuando un métodono devuelve ningún tipo este tipo es void.
Por ejemplo veamos el siguiente codigo:


int SumarNumeros(int num1, int num2)
{
int resultado = 0;
resultado = num1 + num2;
return resultado;
}

El nombre del metodo es SumarNumeros al cual se le pasan dos parametros de tipo entero y retorna otro tipo entero. Las variables que se pasan por parámetro actúan como varibales locales al método y son destruídas al finalizar la invocación al método.

Veremos en mayor detalle los conceptos de variables, su ámbito y alcance, como asi también invocaciones a métodos. Lo que necesitamos concoer a este nivel es la utilidad de los metodos en una clase: manipular los datos de la clase y permitir la interacción con otros objetos.

En la siguiente entrada continuaremos con el análisis de nuestro primer programa en CSharp. Veremos otros conceptos claves: comentartios, el objeto Console y namespaces.

domingo, 22 de junio de 2008

CH01-01 Arquitectura .NET y Lenguaje C#

Con esta entrada vamos a comenzar un tutorial en C# (pronunciado CSharp) y temas relacionados con el .NET Framework 2.0.

Objetivos en la creación de C# (CSharp)
Este lenguaje fue diseñado con los siguientes objetivos en mente:
- Simple: C# es un lenguaje simple con 80 palabras reservadas y nua docena de tipos
- Seguro: C# es un lenguaje type-safe (seguro en tipos) lo que significa que el compilador está preparado para asistirnos en la prevención de errores mientras desarrollamos
- Orientado a Objetos: C# fue construido sobre las lecciones aprendidas de C++ y Java en lo que se refiere a orientación a objetos. Los objetos son los elementos fundamentales de toda aplicación y representan entidades reales del dominio de la aplicación que estamos construyendo.
- Centralizado en Internet: Este objetivo está relacionado con la idea de integrar las aplicaciones de escritorio con aplicaciones de Internet aprovechando la gran propagación de entornos conectados.
- De alto rendimiento: Finalmente, C# no sacrifica las características de alto rendimiento de los lenguajes de programación de la familia de C.

El Common Language Runtime (CLR)
El CLR ofrece la plataforma orientada a objetos para el desarrollo de aplicaciones tanto Windows como Web. Es el CLR quien interpreta el código de la aplicación e interactúa con la plataforma subyacente.
El CLR además es el host para el compilador JIT (Just in Time), los tipos intrínsecos y el soporte para el manejo de excepciones.

Arquitectura .NET
El framework de .NET ha sido construido en una capa por encima del CLR, el cual a su vez reside una capa por encima de la plataforma Windows. La siguiente figura nos ayuda a entender su arquitectura.
Vamos a explicar el gráfico comenzando por la capa inferior hasta la superior.
Como ya dijimos, la plataforma Windows es la primera capa por sobre la cual se encuentra el CLR con los elementos que ya explicamos.

Por encima del CLR encontramos las clases del framework propiamente dicho. El Framework es una colección de clases que de otra forma deberíamos escribir nosotros mismos. Estas clases incluyen entre otras, clases para el manejo de hilos, streams, seguridad, trabajo con archivos, etc.

ADO.NET es la capa construida encima del .NET Framework que nos provee una abstracción de alto nivel para trabajar con tablas y sus relaciones en una base de datos. Veremos en mas detalle mas adelante.

Por encima de todas las capas anteriores, encontramos el soporte para la creación de aplicaciones Windows, Web y Web Services. Los Web Services son aplicaciones web sin interfaz de usuario y proveen funcionalidad a otras aplicaciones. Ejemplos de web services son los servicios de clima proveyendo una determinada ubicación.

MSIL
MSIL (Microsot Intermediate Language) o simplemente IL es el código que genera la compilación de nuestro código fuente (nuestros archivos .cs). Se trata de código intermedio tal como su nombre lo indica y este código intermedio es traducido por el CLR a código nativo. Este código intermedio es el que permite utilizar diferentes componentes escritos en diferentes lenguajes que soportados por .NET. Podríamos por ejemplo en una aplicación escrita en C# utilizar un componente escrito en VB.NET ya que el código IL es virtualmente idéntico.

Esto ha sido todo por hoy, en la próxima entrada vamos a comenzar con nuestro primer programa escrito en C#. Como en todo tutorial, tendremos nuestro "Hola Mundo!" y explicaremos sus partes constitutivas.

jueves, 5 de junio de 2008

Clases publicas por defecto en Visual Studio

Hace tiempo publiqué un post acerca de la generacion de clases en Visual Studio.
Por defecto las crea privadas y por lo general no lo tenemos en cuenta sino hasta la hora de la compilación.
Como ya estaba cansado de esto y queria crearlas publicas por defecto, encontré un post muy útil donde explicaba exactamente lo que necesitaba.

El truco es el siguiente:
Vamos a la carpeta donde están instalados los templates de cada item del IDE de Visual Studio. En mi caso uso Visual Studio 2005 y la ruta puede variar dependiendo tambien del idioma que tengamos en el Sistema Operativo.
La ruta en cuestión es C:\Program Files\Microsoft Visual Studio 8\Common7\IDE\ItemTemplates\CSharp\1033
Alli encontraremos un archivo Class.zip que al abrirlo veremos que contiene un archivo .cs que lista lo siguiente:

using System;
using System.Collections.Generic;
using System.Text;

namespace $rootnamespace$
{
class $safeitemrootname$
{
}
}

Lo unico que hay que hacer es modificar este template de acuerdo a nuestras preferencias agregando public.

Tambien podemos agregar los namespaces que son más utilizados en nuestras aplicaciones y por ejemplo podria quedar algo como

using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Reflection;

namespace $rootnamespace$
{
public class $safeitemrootname$
{
}
}

El último paso que necesitamos es recargar el template modificado para que Visual Studio lo use. Esto se logra con el siguiente comando:

devenv /installvstemplates

Esto toma un poco de tiempo, asi que paciencia.
Eso es todo, ahora cada nueva clase se creará con el template que nosotros hemos definido