El lenguaje .Net 1 - WordPress.com · 2011. 10. 26. · El lenguaje .Net 1 Este capítulo nos dará...

68
El lenguaje .Net 1 Este capítulo nos dará una introducción a las características del lenguaje .Net, qué es el Framework, cómo se estructura su lógica y qué herramientas y complementos disponemos en el paquete de herramientas de Visual Studio. Una vez comprendido los conceptos básicos del marco de trabajo que nos brinda .Net, haremos una introducción a los lenguajes estrella del producto.Visual Basic .Net y C#, cuáles son las similitudes y diferencias entre ellos y realizaremos algunos ejercicios prácticos.

Transcript of El lenguaje .Net 1 - WordPress.com · 2011. 10. 26. · El lenguaje .Net 1 Este capítulo nos dará...

Page 1: El lenguaje .Net 1 - WordPress.com · 2011. 10. 26. · El lenguaje .Net 1 Este capítulo nos dará una introducción a las características del lenguaje .Net, qué es el Framework,

El lenguaje .Net

1Este capítulo nos dará una introducción a las característicasdel lenguaje .Net, qué es el Framework, cómo se estructurasu lógica y qué herramientas y complementos disponemos enel paquete de herramientas de Visual Studio. Una vezcomprendido los conceptos básicos del marco de trabajo que nos brinda .Net, haremos una introducción a loslenguajes estrella del producto.Visual Basic .Net y C#,cuáles son las similitudes y diferencias entre ellos yrealizaremos algunos ejercicios prácticos.

013a024.qxp 09/07/2008 06:24 p.m. PÆgina 11

Page 2: El lenguaje .Net 1 - WordPress.com · 2011. 10. 26. · El lenguaje .Net 1 Este capítulo nos dará una introducción a las características del lenguaje .Net, qué es el Framework,

El lenguaje .Net

Que es .Net

Los lenguajes

Visual Basic .Net

Visual C#

Ejercicios prácticos

Comenzaremos por entender que es .Net, todos loscomponentes que arman esta plataforma y la arquitectura queéste maneja para desarrollo de software.

Veremos los lenguajes estrella que se incluyen en Visual Studio.Net, como ser Visual Basic .Net y C#, sus diferencias y similitudes.

El lenguaje que le dio un gran salto a Microsoft en el mundo de la programación, se ha renovado, adquiriendo el poder y fuerzade .Net.

C# ha ganando un terreno importante en los lenguajes deprogramación por su potencia y practicidad. Conozcamos quécaracterísticas nos brinda.

Para entender mejor los conceptos explicados hasta aquí de cadalenguaje que componen a Visual Studio, realizaremos ejerciciosprácticos de consola, utilizando la sintaxis vista hasta el momento.

El lenguaje .Net fue ganando lentamente su lugar en el mundode la programación, y la versión 2005 fue un gran para losprogramadores.

013a024.qxp 09/07/2008 06:24 p.m. PÆgina 12

Page 3: El lenguaje .Net 1 - WordPress.com · 2011. 10. 26. · El lenguaje .Net 1 Este capítulo nos dará una introducción a las características del lenguaje .Net, qué es el Framework,

13

Para llegar a convertirnos en profesionales deldesarrollo, no podemos omitir ningún concep-to; por ese motivo comenzaremos conociendocuáles son los componentes que ofrece la tec-nología con la cual vamos a trabajar.Microsoft .NET es una plataforma de desarro-llo y ejecución de aplicaciones; es decir, pro-porciona los elementos necesarios para el desarrollo de aplicaciones de software, y todoslos mecanismos de seguridad y eficiencia paraasegurar su óptima ejecución.Veamos a continuación cuáles son algunas desus principales características:

• Las aplicaciones de .NET se ejecutan en unentorno aislado del sistema operativo deno-minado “runtime”, lo que lo hace flexible,seguro y portable.

• Es 100% orientado a objetos.• Permite desarrollar aplicaciones en más de

un lenguaje de programación.• Está diseñado para posibilitar el desarrollo

de aplicaciones corporativas complejas, ro-bustas y flexibles.

• Proporciona un único modelo de programa-ción consistente para el desarrollo de dife-rentes modelos de aplicaciones (Windows,Web, de consola, móviles, etc.) y para dife-rentes dispositivos de hardware (PC, TabletPC y Pocket PC, entre otros).

• Puede integrarse fácilmente con las aplica-ciones desarrolladas en modelos anteriores,como COM. Es posible utilizar elementosCOM en los desarrollos .NET, y viceversa.

• Integra aplicaciones de otras plataformas ysistemas operativos, al implementar están-dares como XML, SOAP, WSDL, etc.

Los principales elementos que constituyen laplataforma .NET son los siguientes:

• .NET Framework: Es el componentefundamental, que contiene los elementosnecesarios para la creación y ejecución de las aplicaciones. Está formado,básicamente, por dos elementos: el entor-no de ejecución de aplicaciones y las bi-bliotecas base.

• El entorno de ejecución de aplicaciones oruntime es el denominado Common LanguageRuntime (CLR). Entre sus principales fun-ciones, se ocupa de:- Administrar la memoria de forma inteli-

gente: Esto significa liberar y controlarla memoria de manera automática.

- Realizar el aislamiento de aplicaciones:Si una aplicación deja de funcionar, noafecta a otra en ejecución ni al sistema.

- Brindar seguridad en la ejecución de loscomponentes: Basa su ejecución en lainformación proporcionada por ellos(metadata), que indica cómo debe ejecu-tarse, qué versión utilizar y bajo quécontexto de seguridad, entre otras cosas.

¿Qué es .NET?A continuación, haremos una introducción a .NET, y veremoscuáles son las principales características que debemos conocer.

Component Object ModelEs la plataforma para desarrollo de componentesde software introducida por Microsoft antes de.NET. El término COM es usado comúnmente enel desarrollo de software como un término queabarca las tecnologías OLE, OLE Automation,ActiveX, COM+ y DCOM. Podemos decirentonces que .NET es la evolución de COM.

¿Qué es .NET?

013a024.qxp 09/07/2008 06:24 p.m. PÆgina 13

Page 4: El lenguaje .Net 1 - WordPress.com · 2011. 10. 26. · El lenguaje .Net 1 Este capítulo nos dará una introducción a las características del lenguaje .Net, qué es el Framework,

1414

- Generar código nativo: La ejecución delos componentes se realiza con un com-pilador Just In Time (JIT), que traduce loscomponentes al código nativo según laCPU en que se encuentre, y los ejecutaen su entorno.

• Base Class Library (BCL) o biblioteca declase base: Proporciona todos los compo-nentes y clases necesarios para el desarrollode aplicaciones en la plataforma. Éstos in-cluyen la mayoría de las funcionalidadesque los programadores aplican de maneracotidiana y, además, un conjunto de clasesespecíficas de acuerdo con la tecnologíaque se va a utilizar en la creación de lasaplicaciones. Todos estos componentes es-tán divididos en tres grupos principales:

- Windows Forms - ASP.NET y Servicios Web XML - ADO.NET

• Lenguajes de programación y compila-dores: Los lenguajes de programación per-miten el desarrollo de aplicaciones sobre laplataforma .NET. Hacen uso de las especi-ficaciones del CLR y de las BCL para eldesarrollo de las aplicaciones, y siguen unestándar denominado Common Language Specification (CLS), lo que hace que seancompletamente compatibles entre sí.Existen muchos lenguajes para programaren .NET, como Visual Basic .NET, C# (C-Sharp), NET.COBOL, y otros. Dadoque el CLS es una especificación abierta,cualquier lenguaje que cumpla con ella pue-de ser utilizado para desarrollar en .NET.

• Herramientas y documentación: .NETproporciona un conjunto de utilitarios yherramientas de desarrollo que simplifican elproceso de creación de aplicaciones, así comotambién, documentación y guías de arquitectu-ra, que describen las mejores prácticas de dise-ño, prueba e instalación de aplicaciones .NET.

Sistemas operativos

El framework .Net puede instalarse en cualquiersistema operativo de la familia Windows superior a laversión 98.Windows 2003 y 2008 Server, XP Servicepack 2 y Windows Vista ya lo tienen instalado.

FIGURA 001 | Éstos son los principales componentes que integran la plataforma .NET.

• CLR (Common Language Runtime)

• BCL (Base Class Library)

• Lenguaje de programación

• Herramientas y documentación

Tecnología .NET

1. EL LENGUAJE .NET

013a024.qxp 09/07/2008 06:24 p.m. PÆgina 14

Page 5: El lenguaje .Net 1 - WordPress.com · 2011. 10. 26. · El lenguaje .Net 1 Este capítulo nos dará una introducción a las características del lenguaje .Net, qué es el Framework,

1515

.NET FrameworkEl primer elemento que debemos conocer esel .NET Framework o “marco de trabajo”.Como ya mencionamos, es el componentefundamental de la plataforma Microsoft.NET, y es necesario tanto para desarrollaraplicaciones como para ejecutarlas luego.Tiene tres versiones, que pueden conseguirseen forma gratuita:

.NET FRAMEWORK REDISTRIBUTABLE PACKAGEEs el componente de la plataforma .NET nece-sario para ejecutar aplicaciones. Este elementose instala en los entornos de producción o esta-ciones de trabajo de los clientes y en las compu-tadoras de los usuarios que vayan a utilizar apli-caciones .NET. Tiene dos elementos: el entornode ejecución de la plataforma .NET (CLR, másadelante lo veremos en detalle) y las bibliotecasde funcionalidad reutilizable (BCL).

.NET FRAMEWORK SDKEsta versión contiene herramientas de desarro-llo de línea de comandos (compiladores, depura-dores, etc.), documentación de referencia, ejem-plos y manuales para programadores.En general, se instala en los entornos de de-sarrollo de aplicaciones, por lo que resulta másútil para programadores que para usuarios. Parainstalar la versión SDK (Software Development Kit)es necesario instalar previamente el RedistributablePackage (mencionado con anterioridad).

.NET COMPACT FRAMEWORKSe trata de una versión reducida del .NETFramework Redistributable, especialmentepensada para instalar en dispositivos móviles,como Pocket PCs y Smart Phones.En este caso, cuando se trata de las aplicacio-nes de escritorio (WinForms o de Formula-rios) y las de consola (aplicaciones cuya inter-faz de usuario es una consola de comandos

con textos solamente), el framework debe es-tar instalado en la PC del cliente (usuario), yen el servidor sólo si la aplicación será distri-buida y tendrá parte de su funcionalidad cen-tralizada en una única computadora. En el ca-so de las aplicaciones Web, el único requisitodel lado del cliente o usuario es tener un nave-gador (browser) y una conexión de red al ser-vidor, que debe tener instalado el .NET Fra-mework. Finalmente, para las aplicaciones mó-viles, que se ejecutan sobre Windows Mobileen algún dispositivo tipo Pocket PC o SmartPhone, es preciso tener instalado el .NETCompact Framework en el dispositivo.

VersionesExisten varias versiones de los frameworksmencionados:

• Versión 1.0: Liberada a principios del año 2002, uti-lizada en la primer version de Visual Studio .Net,incluia soporte para para los nuevos lenguajesVB.Net y C# .Net.

• Versión 1.1: Liberada en 2003, incluía el compactframework, framework 1.1 y soporte para el len-guaje J# .Net.

• Versión 2.0: Liberada a fines del año 2005, fue elprimer gran cambio en la plataforma, y resultó una“Evolución” en lugar de una revolución. Un gransalto en lo que respecta a la productividad.

• Versión 3.0: Liberada en noviembre de 2006, combi-na las caracteristicas de la versión 2.0 con las nuevastecnologías como Windows Presentation Founda-tion,Windows Communication Foundation,Win-dows Workflow Foundation y Windows CardSpace.

• Versión 3.5: Liberada en noviembre de 2007, inclu-ye nuevas caracteristicas de las versiones 2.0 y 3.0incorporadas en forma incremental más el servicepack 1 correspondientes a los respectivos frame-works.

¿Qué es .NET?

013a024.qxp 09/07/2008 06:24 p.m. PÆgina 15

Page 6: El lenguaje .Net 1 - WordPress.com · 2011. 10. 26. · El lenguaje .Net 1 Este capítulo nos dará una introducción a las características del lenguaje .Net, qué es el Framework,

1616

Entorno de ejecución

El CLR o Common Language Runtime es el en-torno que administra la ejecución de código yproporciona los servicios para el desarrollo delas aplicaciones, así como también todos loselementos requeridos por los lenguajes, VisualBasic .NET, C# y otros de .NET.Los tipos de datos son comunes a todos loslenguajes y son provistos por el Common TypeSystem (CTS o sistema de tipos comunes) delCLR. Cada tipo de dato tiene su propia sintaxisen su lenguaje de programación, pero, al ser to-mados por el CLR, esos tipos son iguales.Esto se debe a que uno de los principales ob-jetivos de la plataforma .NET fue ser indepen-diente del lenguaje de programación elegidopara el desarrollo de aplicaciones. Por eso secreó la Common Language Specification (CLS o es-

pecificación de lenguaje común), que define yestandariza un conjunto de las característicassoportadas por el CLR que son necesarias en lamayoría de las aplicaciones. Todos los compo-nentes desarrollados y compilados de acuerdocon esta especificación pueden interactuar en-tre sí, independientemente del lenguaje en elque fueron escritos.Microsoft proporciona, junto con el .NET Fra-mework, las implementaciones de cuatro lengua-jes compatibles con CLS, y sus compiladores:

• Microsoft Visual Basic .NET• Microsoft Visual C# .NET• Microsoft Visual J# .NET• Microsoft Visual C++ .NET

Esto significa que una aplicación escrita en Vi-sual Basic .NET, por ejemplo, puede incorporar

SERVICIOS DESCRIPCIÓN

Compilación Just In Time El CLR se encarga de compilar las aplicaciones .NET a código de máquina nativo para el(o “justo a tiempo”) sistema operativo y la plataforma de hardware en la que se está ejecutando.

Gestión automática de El CLR abstrae a los desarrolladores de tener que pedir y liberar memoria explícitamente.memoria Para hacerlo, uno de sus componentes, llamado garbage collector (recolector de basura),

se ocupa de liberar periódicamente la memoria que ya no está siendo usada por ningunaaplicación.Además, el CLR también abstrae a los desarrolladores del uso de punteros ydel acceso a memoria de bajo nivel. Si bien estas características pueden ser consideradaspoderosas, suelen hacer que el desarrollo y el mantenimiento de aplicaciones resultenmás propensos a errores y menos productivos.

Gestión de errores Como las aplicaciones .NET no se ejecutan directamente contra el sistema operativo,consistente cualquier error no manejado que ocurra en tiempo de ejecución será atrapado por el

CLR en última instancia, sin afectar a ninguna otra aplicación que se esté ejecutando ni te-ner efecto alguno sobre su estabilidad.

Ejecución basada en Todas las aplicaciones .NET son empaquetadas en componentes reutilizables denominados,componentes genéricamente, assemblies, que el CLR se ocupa de cargar en memoria y ejecutar.

Gestión de seguridad El CLR proporciona una barrera más de contención a la hora de ejecutar aplicaciones ma-nejadas, ya que permite establecer políticas de seguridad muy detalladas, que deberán sercumplidas por las aplicaciones .NET que se ejecuten en una determinada computadora.

Multithreading El CLR brinda un entorno de ejecución multi-hilos por sobre las capacidades del sistemaoperativo, así como también, mecanismos para asegurar su sincronización y acceso con-currente a recursos compartidos.

Tabla 1 | Principales servicios proporcionados por el CLR

1. EL LENGUAJE .NET

013a024.qxp 09/07/2008 06:24 p.m. PÆgina 16

Page 7: El lenguaje .Net 1 - WordPress.com · 2011. 10. 26. · El lenguaje .Net 1 Este capítulo nos dará una introducción a las características del lenguaje .Net, qué es el Framework,

1717

sin problemas nuevas partes escritas en C# oC++.NET.Dado que la especificación CLS es un estándarpúblico, ha permitido que otros diseñadoresde lenguajes y compiladores desarrollen másde 20 lenguajes compatibles con ella y, por lotanto, compatibles entre sí y con los lenguajesdesarrollados por Microsoft. Todos los compo-nentes y las aplicaciones creados bajo estas espe-cificaciones se dice que son de código adminis-trado, o Managed Code. La única excepción esC++.NET, que, además, tiene la capacidad decrear código no manejado, o Unmanaged Code,debido a que muchas aplicaciones de muy bajonivel, como drivers de dispositivos, necesitan te-ner acceso directo a los recursos del sistemaoperativo para tener un mejor rendimiento.

Como cada lenguaje proporciona su propia sin-taxis en la implementación de las directivas delCLS, es necesario que los compiladores “tra-duzcan” su código fuente en “algo” que seaentendible por el CLR. Ese “algo” se denomi-na MSIL o Microsoft Intermediate Language, que esun código intermedio en el que se compilantodos los lenguajes de .NET. Estos componen-tes y aplicaciones resultantes de la compilaciónse conocen como assemblies o ensamblados en.NET. Pueden ser archivos ejecutables (.exe) obibliotecas de clases y componentes (.dll). Losassemblies no son ejecutables directamente, si-no que son compilados al código nativo de laCPU en la que se encuentran corriendo por elcompilador Just In Time (JIT) del CLR y, luego,se ejecutan en su entorno. Para que el CLR

FIGURA 002 | Ejecución de las aplicaciones por medio del CLR. Los lenguajes de programación generan código

administrado en MSIL a través de sus compiladores. Los assemblies generados son tomados por el JIT del CLR,

traducidos a código nativo de la CPU en la que se encuentra y ejecutados en un ambiente aislado dentro del CLR.

VB.NET C// J// C++.NET

CompiladorVB.NET

CompiladorC//

CompiladorJ//

CompiladorC++.NET

Assembly(MSIL)

JIT (Just In Time Compiler)

CLR (Common Language Runtime)

Assembly(MSIL)

Assembly(MSIL)

Assembly(MSIL)

Unmanagedcode

Código Nativo

SIstema Operativo

Lenguajes deprogramación

Compiladores

Managed Code

Esquema de ejecución del CLR

¿Qué es .NET?

013a024.qxp 09/07/2008 06:24 p.m. PÆgina 17

Page 8: El lenguaje .Net 1 - WordPress.com · 2011. 10. 26. · El lenguaje .Net 1 Este capítulo nos dará una introducción a las características del lenguaje .Net, qué es el Framework,

entienda cómo debe ejecutar estas aplicacionesy componentes, los compiladores de los lengua-jes de .NET incluyen en la compilación la me-tadata, que es la información que describe losobjetos que forman parte de la aplicación ocomponente generado.La metadata describe:

• Los tipos de datos y sus dependencias.• Los objetos y sus miembros.• La referencia e información (incluyendo ver-

sión) de los componentes y recursos exter-nos que son utilizados por la aplicación ocomponente y que son necesarios para sufuncionamiento.

Esta metadata de un componente administradoes utilizada por el CLR para proporcionar, en-tre otras, las siguientes funcionalidades:• Administrar la memoria.• Localizar y crear instancias de clases.• Administrar las referencias de los objetos y

realizar el garbage collection.• Resolver las invocaciones de métodos.• Generar código nativo.• Asegurar que la aplicación tiene los recursos

necesarios para funcionar.• Reforzar la seguridad.

1818

La inclusión de esta metadata en el compo-nente compilado hace que éste se autodescri-ba. Esto le indica al CLR todo lo necesariopara preparar y ejecutar una aplicación .NETcorrectamente y permitir que pueda interac-tuar con otros componentes.

• Compilación Just In Time (o “justo atiempo”): El CLR se encarga de compilar lasaplicaciones .NET a código de máquina nati-vo para el sistema operativo y la plataformade hardware en la que se está ejecutando. Es-to lo hace sin intervención alguna del de-sarrollador o el usuario y cuando se necesita.

• Gestión automática de memoria: El CLRabstrae a los desarrolladores de tener que pe-dir y liberar memoria explícitamente. Para lo-grarlo, uno de sus componentes, llamado garbage collector (recolector de basura), se encar-ga de liberar periódicamente la memoria queya no está siendo usada por ninguna aplica-ción. Por otra parte, el CLR también abstraea los desarrolladores del uso de punteros ydel acceso a memoria de bajo nivel. Si bienestas características pueden ser consideradaspoderosas, suelen hacer que el desarrollo y elmantenimiento de aplicaciones resulten máspropensos a errores y menos productivos.

• Gestión de errores consistente: Como lasaplicaciones .NET no se ejecutan directa-mente contra el sistema operativo, cualquiererror no manejado que ocurra en tiempo deejecución será atrapado por el CLR en últi-ma instancia, sin afectar a ninguna otra apli-cación que se esté ejecutando ni tener efec-to alguno sobre su estabilidad.

• Ejecución basada en componentes: To-das las aplicaciones .NET son empaqueta-das en componentes reutilizables denomina-dos, genéricamente, assemblies, que el CLRse ocupa de cargar en memoria y de ejecu-tar. Profundizaremos este tema en los pró-ximos capítulos del libro.

NamespacesEl conocimiento de los namespaces de .NET esde fundamental importancia para aprovechar todala funcionalidad que nos proporciona y, así, notener que escribir código con el que ya contamos.

El CLR administra la ejecuciónde código y permite el

desarrollo de las aplicaciones.

1. EL LENGUAJE .NET

013a024.qxp 09/07/2008 06:24 p.m. PÆgina 18

Page 9: El lenguaje .Net 1 - WordPress.com · 2011. 10. 26. · El lenguaje .Net 1 Este capítulo nos dará una introducción a las características del lenguaje .Net, qué es el Framework,

1919

• Gestión de seguridad: El CLR brinda unabarrera más de contención a la hora de ejecu-tar aplicaciones manejadas, ya que permite es-tablecer políticas de seguridad que deberánser cumplidas por las aplicaciones .NET quese ejecuten en una computadora.

• Multithreading: El CLR provee un entornode ejecución multi-hilos por sobre las capaci-dades del sistema operativo, así como tam-bién, mecanismos para asegurar su sincroni-zación y el acceso a recursos compartidos.

Biblioteca de funcionalidad(Base Class Library)

La funcionalidad principal de la Base Class Li-brary es proporcionar cientos de tipos básicos

(clases e interfaces) orientados a objetos, extensi-bles mediante herencia e independientes del len-guaje de programación que se desee utilizar (en el libro Introducción a la programación, se describe elsignificado de muchos de estos conceptos, queluego profundizaremos con mayor detalle). Esteconjunto de elementos incluye la mayoría de lasfuncionalidades que los programadores aplicande manera cotidiana.Dada la cantidad de clases (unos cuantos miles),es necesario organizarlas de algún modo en quesean fáciles de encontrar y que permita diferen-ciarlas si poseen el mismo nombre. Para lograr es-to, .NET proporciona lo que se denomina name-spaces o espacios de nombres. Se trata de califica-dores de clases, que hacen posible determinar,unívocamente, qué clases utilizar dentro de .NETy, así, evitar ambigüedades. En la Tabla 2 vemosuna breve lista de los principales namespaces.

FIGURA 003 | Principales namespaces de la Base Class Library.

Conocerlos nos permitirá aprovechar todo el potencial de .NET.

ServicesDescriptionDiscoveryProtocols

Caching

System.Web System.Windows.Forms

System.Drawing

System.XmlSystem.Data

System

Security

Configuration SessionState

OleDb Odbc

Common

Colections

Configuration

Diagnostics

Globalization

IO

Net

Reflection

Resources

Security

ServiceProcess

Text

Threading

SqClient

Drawing2D Printing

Imaging Text

XSLT Serialization

XPath

UIHtmlControlsWebControls

Design ComponentModel

RuntimeInteropServicesRemotingSerialization

Namespaces de la librería de clases base

¿Qué es .NET?

013a024.qxp 09/07/2008 06:24 p.m. PÆgina 19

Page 10: El lenguaje .Net 1 - WordPress.com · 2011. 10. 26. · El lenguaje .Net 1 Este capítulo nos dará una introducción a las características del lenguaje .Net, qué es el Framework,

2020

Lenguajes de programación

Los lenguajes de programación de .NET es-tán basados en la Common Language Specifica-tion (CLS), por lo cual, ahora, la elección dellenguaje en el que debe escribirse una aplica-ción .NET prácticamente fue reducida a unacuestión de gustos personales y comodidadcon la sintaxis. No hay motivos tecnológicosque nos lleven a elegir un lenguaje en parti-cular, al menos, entre los ofrecidos por

Microsoft. Todos utilizan el mismo runtime,todos emplean el mismo conjunto de biblio-tecas de la misma manera, no existen dife-rencias de performance, todos tienen la mis-ma potencia, y la misma capacidad de accesoa los recursos y servicios que expone el.NET Framework. De hecho, al cargar y eje-cutar un assembly, el CLR no sabe en quélenguaje de programación de alto nivel fueescrito éste, ya que lo que recibe finalmentees código MSIL.

NAMESPACES FUNCIONALIDAD

System Es el principal namespace y forma la raíz de todos los otros dentro del BCL. Entre losprincipales elementos que encontramos en él están:- Definición de todos los tipos de datos establecidos por el Common Type System del CLR.- Acceso a funciones matemáticas bajo el namespace MATH.- Clases dedicadas al acceso al entorno de ejecución de la aplicación a través del

namespace Environment.- Acceso directo al Garbage Collector a través del namespace GC.

System.Collections Contiene una serie de clases que permiten administrar un conjunto de objetos de maneraordenada. La principal es Collection, pero existen otras, como SortedList,ArrayList,Queue, Stack, etc.

System.Data Contiene todas las clases necesarias para el procesamiento de datos desde bases de datos(ADO.NET). Entre los principales namespaces, podemos encontrar System.Data.SqlClient(exclusivo para bases de datos SQLServer), System.Data.OleDb (orígenes de datosOLEDB) y System.Data.Odbc (para otros tipos de bases de datos), entre otros.

System.Drawing Contiene las clases para proporcionar toda la funcionalidad gráfica en el framework.

System.IO Contiene las clases y los métodos necesarios para leer y escribir todo tipo de archivos,tanto en texto plano como a nivel de bytes.

System.Security Proporciona toda la funcionalidad para realizar los procesos de autenticación y autoriza-ción, manejo de credenciales y criptografía, entre otras tareas.

System.Text Contiene las clases para codificar y decodificar texto de diferentes formatos.También in-cluye las clases necesarias para la búsqueda y el manejo de texto a través de expresionesregulares.

System.Windows.Form Es el namespace base para la creación de aplicaciones Windows con formularios. En él es-tán definidas todas las funcionalidades y los controles necesarios para la creación de inter-faces de usuario en este tipo de aplicaciones: cajas de texto, botones, etiquetas, diálogos, ymucho más.

System.Web Es el namespace base para la creación de aplicaciones Web (ASP.NET). En él están defini-das todas las funcionalidades y los controles necesarios para la creación de interfaces deusuario en este tipo de aplicaciones.También incluye las definiciones para el tratamientode servicios web y muchos aspectos más de este entorno.

System.Xml Encapsula todas las clases necesarias para el procesamiento de documentos XML.

Tabla 2 | Principales namespaces y su funcionalidad

1. EL LENGUAJE .NET

013a024.qxp 09/07/2008 06:25 p.m. PÆgina 20

Page 11: El lenguaje .Net 1 - WordPress.com · 2011. 10. 26. · El lenguaje .Net 1 Este capítulo nos dará una introducción a las características del lenguaje .Net, qué es el Framework,

2121

Principales lenguajes de la plataformaExiste una gran variedad de lenguajes de pro-gramación en la plataforma .NET, aunque sedestacan, principalmente, dos: VB.NET y C#(C Sharp).

• VB.NET es Visual Basic .NET y es la evolu-ción de Visual Basic 6.0. Fue rescrito porcompleto para la plataforma a fin de hacerlototalmente orientado a objetos, y puede haceruso de todos los elementos del framework,como cualquier otro lenguaje. Para quieneshayan programado en Visual Basic 6.0, éste esel lenguaje natural para utilizar en .NET, yaque presenta la misma sintaxis que su prede-cesor, aunque con algunos cambios que per-miten adaptarse a la plataforma.

• C# (pronunciado C Sharp) es un nuevo len-guaje que fue diseñado, específicamente, parala plataforma .NET. Tiene una sintaxis similara las de C y Java, por lo que resulta la elecciónnatural para quienes hayan trabajado con ellos.

Ambos lenguajes son de primer nivel en laplataforma y no presentan diferencias de ren-dimiento en ella.

Herramientas de desarrollo

Para que la creación de aplicaciones en .NETsea lo más productiva posible, Microsoft ofre-ce su propio entorno de desarrollo: Visual Studio. Se trata de un IDE (entorno integradode desarrollo) preparado para aprovechar to-das la características del framework .NET ydarle al programador un entorno único desdedonde realizar todas sus tareas. Dentro de Visual Studio, podemos realizar aplicacionesWindows y Web, servicios Web y bibliotecasde componentes, además de acceder a bases de

datos, y muchas opciones más, con cualquierlenguaje de la plataforma provisto por Micro-soft (VB.NET, C#, C++, etc.). La idea de es-te IDE es que el programador no tenga quecambiar de aplicación para realizar todas lastareas involucradas en el desarrollo de un sis-tema. La familia de Visual Studio 2005 tieneun producto a la medida de las necesidades yposibilidades de cada tipo de desarrollador:parte desde una línea gratuita de versiones de-nominadas Express, hasta llegar a una suitecompleta de productos destinada a grandesequipos de desarrollo: Visual Studio TeamSystem. A continuación, una breve descrip-ción de las diferentes “familias” de productos:

VISUAL STUDIO 2005 EXPRESS EDITIONIncluye herramientas livianas, fáciles de usar yde aprender, destinadas a novatos, estudiantesy quienes programan como hobby. Son lasversiones ideales para los que recién se ini-cian en .NET. Son gratuitas y hay una herra-mienta por cada lenguaje.Para desarrollar aplicaciones Windows, exis-ten las siguientes alternativas:

• Visual Basic 2005 Express Edition• Visual C# 2005 Express Edition• Visual J# 2005 Express Edition• Visual C++ 2005 Express Edition• SQL Server 2005 Express Edition• Visual Web Developer 2005 Express

¿Qué es un IDE?Un IDE (Integrated Development Environment oentorno integrado de desarrollo) es un espacio detrabajo que proporciona un conjunto de menús,toolbars y ventanas para realizar las diferentestareas de programación.

¿Qué es .NET?

013a024.qxp 09/07/2008 06:25 p.m. PÆgina 21

Page 12: El lenguaje .Net 1 - WordPress.com · 2011. 10. 26. · El lenguaje .Net 1 Este capítulo nos dará una introducción a las características del lenguaje .Net, qué es el Framework,

2222

VISUAL STUDIO 2005 STANDARD EDITIONEs un entorno de desarrollo unificado, pensa-do para desarrolladores que construyen aplica-ciones cliente/servidor de Windows y sitiosWeb. En esta edición, todo el IDE se encuen-tra mejorado e integrado, de modo que se pue-den realizar, de manera conjunta, aplicacionesWindows, Web y para dispositivos móviles, endiferentes lenguajes de programación y sincambiar de entorno.

VISUAL STUDIO 2005 PROFESSIONAL EDITIONEs un entorno de desarrollo pensado paraprogramadores individuales que construyenaplicaciones de alto rendimiento. Es posibleaprovechar su entorno para construir una am-plia gama de aplicaciones móviles, Web,Windows y basadas en Office. Presenta mejo-ras en el IDE, además de que proporciona so-porte de depuración remoto, posibilidad degenerar aplicaciones de 64 bits, y acceso com-pleto a los servicios del sistema y a las basesde datos. Incluye Crystal Reports para la gene-ración de reportes y proyectos de instalaciónbasados en Windows Installer.

VISUAL STUDIO 2005 TOOLS FOR OFFICEEsta versión permite que profesionales IT,ISVs e Integradores de Sistemas construyansoluciones Smart Client para Microsoft Office.

VISUAL STUDIO 2005 TEAM SYSTEMSe compone de herramientas para administrartodo el ciclo de vida del desarrollo de software,de manera que sean productivas, integradas yextensibles. Amplía la línea de productos de Visual Studio para que los equipos de trabajomejoren sus capacidades de comunicación y co-laboración. La familia Team System se divide en:

• Visual Studio Team Suite: Es la suite máscompleta, útil tanto para arquitectos comopara desarrolladores y testers.

• Visual Studio 2005 Team Suite Ediciónprofesionales de bases de datos: Es unaedición especial que proporciona herra-mientas para permitir el cambio de la admi-nistración, el testeo y la implementación pa-ra las bases de datos del servidor SQL.

• Visual Studio 2005 Team Suite Ediciónpara arquitectos: Brinda herramientas parael diseño visual de servicios, soluciones orien-tadas a servicios y validación con ambientesoperacionales antes de su implementación.

• Visual Studio 2005 Team Suite Ediciónpara testeadores de software: Introduceun conjunto de herramientas de testeo quese encuentran integradas dentro del ambien-te del Visual Studio y ayudan a construiraplicaciones de alta calidad.

• Visual Studio 2005 Team FoundationServer: Es un servidor integrado que com-bina control de versiones, seguimiento deítem de trabajo y reportes.

Versión de Visual Studio Procesador RAM Disco Rígido

Express Pentium III 600 MHz o similar 256 MB 700 MB

Standard Pentium III 600 MHz o similar 256 MB Entre 2 GB y 3,8 GB

Professional Pentium III 600 MHz o similar 256 MB Entre 2 GB y 3,8 GB

Team System Procesador de 2 GB o más 512 MB 8 GB

Tabla 3 | Requisitos de las versiones

1. EL LENGUAJE .NET

013a024.qxp 09/07/2008 06:25 p.m. PÆgina 22

Page 13: El lenguaje .Net 1 - WordPress.com · 2011. 10. 26. · El lenguaje .Net 1 Este capítulo nos dará una introducción a las características del lenguaje .Net, qué es el Framework,

2323

• Visual Studio 2005 Team Test LoadAgent: Destinada a testeadores de software.Permite que las organizaciones simulen másusuarios y tests más precisos de desempeñoen las aplicaciones desarrolladas.

El IDEEl IDE proporciona herramientas tales comolos compiladores, un depurador o debugger(que asiste en el seguimiento y la correcciónde errores en los programas) y otras destina-das a administrar los proyectos. Proporcionaun menú estándar, numerosas toolbars y ungran número de ventanas. El IDE está com-puesto, básicamente, por cinco secciones:

• Barra de herramientas: Aquí se encuen-tran las barras de herramientas, que dan ac-ceso a los comandos más comunes. De

acuerdo con la tarea que estemos realizan-do, esta sección cambiará según las necesi-dades.

• Lista de errores: Aquí están las ventanas deerrores, la de tareas y la de salida.

• Cuadro de herramientas: Presenta la caja deherramientas, que contiene todos los controles

Guía Visual 001 | Secciones del entorno de desarrollo

Área detrabajo

Barra de herramientas

PacienciaAunque muchos de los conceptos vistos hasta elmomento pueden resultarnos de difícil compren-sión e incluso algo aburridos, debemos saber que esmuy importante tener una base conceptual sólidaantes de comenzar a “tipear código”. Muchos de es-tos conceptos serán comprendidos con mayor clari-dad cuando empecemos a trabajar.

Cuadro de herramientas

Lista de errores

Exploradorde solucionesy ventana dePropiedades

¿Qué es .NET?

013a024.qxp 09/07/2008 06:25 p.m. PÆgina 23

Page 14: El lenguaje .Net 1 - WordPress.com · 2011. 10. 26. · El lenguaje .Net 1 Este capítulo nos dará una introducción a las características del lenguaje .Net, qué es el Framework,

2424

y componentes que podemos utilizar cuandorealizamos aplicaciones. Según el tipo de pro-grama (Windows o Web), se llenará con loscontroles y componentes apropiados para ca-da uno. También está el DataBase Explorer oexplorador de bases de datos, que nos da ac-ceso a los orígenes de datos a utilizar ennuestra aplicación.

• Explorador de soluciones y ventana depropiedades: Ambos son importantes, yaque el primero presenta todos los proyec-tos y archivos con que estamos trabajando;y el segundo, las propiedades de todos loselementos del entorno.

• Área de trabajo: En este espacio aparecentodos los documentos que estemos manejan-do, tanto en vista de código como en vistade diseño. El IDE es un entorno de múlti-ples documentos, y se accede a cada uno deellos a través de las solapas con su nombre.

Debido a la gran cantidad de elementos quecontiene el IDE, se le han agregado otrospara aprovechar al máximo el espacio dispo-nible. Uno de ellos es el AutoDock, que per-mite mover las ventanas por todo el IDEutilizando el mouse para reposicionarlas. Sipor alguna razón cerramos alguna ventana,basta con ir al menú Ver para abrirla otravez.

Menús y barras de herramientas

El IDE presenta un conjunto de menús quedebemos acostumbrarnos a utilizar para sa-carle el máximo provecho. Muchos de ellos si-guen el estándar de cualquier aplicación Win-dows, y otros cuentan con opciones y funcio-namiento similares a los de cualquier aplica-ción. En la Guía Visual 002 se describen losprincipales menús y sus funcionalidades.

Guía Visual 002 | Los menús del entorno

Proporciona lasopciones para la

apertura y grabaciónde proyectos y

soluciones.

Brinda los comandospara la edición detexto, tales comoCut, Copy y Paste.

Permiteacceder a

lasventanasdel IDE.

Destinado ala compilacióndel proyecto.

Configura lasconexiones a

los orígenes dedatos.

Permite la seleccióny organización de

las ventanas dentrodel IDE.

Brinda acceso a laayuda integrada del

sistema.

Permiteagregar

diferenteselementos al

proyecto.

Posibilita elseguimiento delprograma para ladeterminación

de errores.

Contiene un conjuntode opciones para laconfiguración delentorno y de los

proyectos.

Otorga acceso a losrecursos en líneasobre Visual Basic.

1. EL LENGUAJE .NET

013a024.qxp 09/07/2008 06:25 p.m. PÆgina 24

Page 15: El lenguaje .Net 1 - WordPress.com · 2011. 10. 26. · El lenguaje .Net 1 Este capítulo nos dará una introducción a las características del lenguaje .Net, qué es el Framework,

2525

Como mencionamos anteriormente, existendiversas versiones de Visual Studio según lanecesidad de cada corporación o equipo detrabajo. El problema es que cada una es muycostosa, y es difícil que dispongamos de al-gunos miles de dólares para adquirir una ycomenzar a estudiar. Por eso, la empresa Mi-crosoft puso a disposición una versión de suentorno Visual Studio totalmente gratuita,llamada Express. La pregunta es por quéofrece sin costo un entorno que cuesta milesde dólares. La respuesta es sencilla: esta ver-sión Express no contiene todo el potencialde sus hermanas mayores, pero nos permiteaprender usando sus mismas posibilidades.Antes de continuar, es importante que co-nozcamos cuál es la diferencia que existe en-tre esta versión y la versión comercial.La versión Express está dividida por lengua-jes, es decir que si queremos utilizar VisualBasic .NET, deberemos instalar esa versiónde Visual Studio Express; en el caso de C#,deberemos hacer lo mismo, y así podremoscompletar todos los lenguajes disponibles. Yes acá donde tenemos la principal diferencia.Las versiones superiores a las Express utili-zan el mismo entorno para todos los lengua-jes, y permiten instalar una sola vez el pro-ducto, para disponer de todos ellos. Incluso,es posible realizar aplicaciones empleandomás de un lenguaje de programación al mis-mo tiempo (siempre que hayamos instaladoantes todos los entornos). Como nosotrosestamos comenzando a programar y no va-mos a realizar aplicaciones multilenguaje,esta última característica realmente no nosbeneficia.

Cómo obtener las versiones Express

Las versiones de los programas de visual studio con lasque trabajaremos a lo largo del libro, están disponibles enInternet, por lo cual si no disponen de banda ancha, es re-comendable descargarlas desde un cibercafé, o desde la ca-sa de algun conocido que disponga de banda ancha. Elcontenido descargado conviene grabarlo en un CD-ROMpara tenerlo disponible en el momento que lo necesite-mos. Recomendamos, también, una lectura exhaustiva delsitio Web de Microsoft para conocer los respectivos servi-ce packs que han salido con posterioridad al lanzamientode cada una de estas herramientas, y descargarlos e insta-larlos luego de tener el conjunto de aplicaciones instaladas.Esto nos permitirá trabajar con mayor seguridad en nues-tros desarrollos sin preocuparnos por bugs o errores quelas herramientas contenían en sus primeras versiones.Todas las versiones Express que utilizaremos tienen ungran potencial, que nos permitirán efectuar desarrollosde nivel profesional, y el día de mañana cuando estemosdelante de una versión profesional, veremos que su con-formacion es exactamente igual a la de las versiones express, por lo cual no perderemos tiempo en tener queaprender su manejo.

Visual Studio ExpressVeamos y analicemos cuáles son las ventajas, requisitos yposibilidades que nos brinda esta versión de Visual Studio.

Requisitos mínimos para las versiones ExpressProcesador: Pentium III, 600 MHzRAM: 256 MBDisco duro: 700 MB aproximadamente para ca-da lenguajeSistema operativo:Windows XP, 2000 o superior

Visual Studio Express

013a024.qxp 09/07/2008 06:25 p.m. PÆgina 25

Page 16: El lenguaje .Net 1 - WordPress.com · 2011. 10. 26. · El lenguaje .Net 1 Este capítulo nos dará una introducción a las características del lenguaje .Net, qué es el Framework,

Language, o lenguaje intermedio de Microsoft),que se asemeja mucho a un assembler. El códi-go MSIL generado se almacena en un archivodenominado ensamblado (o assembly, en inglés).En Windows los ensamblados ejecutables tienenextensión exe, y los que son bibliotecas de cla-ses o de controles tienen extensión dll. ComoMSIL es independiente de la plataforma, se lo-gra una ventaja fundamental: no dejar atado elprograma compilado a una plataforma dada.Luego, al momento de ejecutar el programa, uncomponente denominado CLR (que veremosluego) se ocupa de leer el código MSIL y deconvertirlo en código propio de la máquina enla que se va a ejecutar. Para compilar, el CRL sevale del JIT-Compiler (JIT es el acrónimo de JustIn Time, que puede traducirse al español como“en el momento”). El JIT, o “jitter”, se encargade hacer la compilación final.

CompiladoresEn nuestra práctica anterior,Visual Studio realizó algunas tareaspara mostrar nuestra aplicación.Analicemos cuáles son.

Luego de escribir el código fuente de nuestroprograma, falta un paso más para poder ejecu-tarlo y ver nuestro trabajo funcionando: la com-pilación. Éste es el proceso por el cual el códigofuente (C#, Visual Basic .NET, etc.) se transfor-ma en código que pueda ser entendido por lamáquina. En .NET el resultado de la compila-ción es un poco diferente. Supongamos que he-mos escrito el código para una primer aplica-cion. Luego de haber realizado esto y guardadolos archivos correspondientes al proyecto y mó-dulos que lo componen, nos faltaría un pasomás para poder ejecutarlo y verlo en funciona-miento. Este paso es la compilación. Por esteproceso debe pasar el código fuente de nuestroprograma, haya sido desarrollado en VB.Net,C# u otro. El código es transformado en unlenguaje intermedio que interpretará la máquina,denominado MSIL (Microsoft Intermediate

FIGURA 004 | En los lenguajes tradicionales, el compilador toma el código

fuente y produce un archivo con código en lenguaje de máquina.

Compilación estándar y .NET

int a - b + c;.entr ypointmaxstack 8L_0000; idstr “Hola Mundo”L_0005; net

Código fuente Código MSILCompilador

int a - b + c; 1021211102021001202011120110

Código fuente Código máquinaCompilador

2626

1. EL LENGUAJE .NET

026a037.qxp 06/07/2008 10:45 p.m. PÆgina 26

Page 17: El lenguaje .Net 1 - WordPress.com · 2011. 10. 26. · El lenguaje .Net 1 Este capítulo nos dará una introducción a las características del lenguaje .Net, qué es el Framework,

2727

Como pudimos ver, la compilación es una delas etapas fundamentales. Cualquier inconve-niente que detecte el compilador puede conver-tirse en un dolor de cabeza si no contamos conherramientas que nos asistan para manejar loserrores. La mejor ayuda que tendremos para es-to es, sin dudas, el IDE, del cual ya conocimosalgunas herramientas y funciones. Éste ofreceun potente editor con coloreo de sintaxis y tec-nología IntelliSense (que muestra menús conopciones sensibles al contexto a medida que seescribe). Esto es lo que nos permitirá minimi-zar muchos de los errores que más frecuente-mente se cometen al escribir el código.

Además, Visual Studio ofrece opciones paradepurar el código y dejarlo libre de errores, quepermiten seguir la ejecución paso a paso, moni-torizar los valores de las variables e, incluso, al-terar el orden de ejecución para probar deter-minada parte del código fuente. Otra opcióninteresante que provee Visual Studio es la de-puración remota, consistente en seguir paso apaso la ejecución de un programa que no seencuentra en la misma computadora donde es-tá el IDE, como un servicio en un servidor ouna aplicación en un dispositivo móvil conecta-do a la PC. Todas estas funciones las iremosdesarrollando a lo largo del libro.Además de Visual Studio, la plataforma .NETcuenta con otras herramientas interesantes,algunas desarrolladas por Microsoft y otras,por terceros. Una muy útil es ILDasm.exe,que permite tomar un ensamblado ya compi-lado y obtener el código MSIL que contiene.Con ella, podemos estudiar código ya compi-lado, para revisar cómo queda. Ahora bien,como se puede ver el código MSIL tan fácil-mente, surge de inmediato una cuestión im-portante: la de la propiedad del código. Esdecir, alguien que tome un ensamblado crea-do originalmente por nosotros puede usar ILDasm para ver su contenido. Si bien el có-digo MSIL no es comprensible para cualquierpersona, es fácil ver de qué manera está im-plementado un algoritmo. Y no es necesarioaclarar que esto puede ser muy perjudicialcuando en el ensamblado interviene informa-ción sensible involucrada, por ejemplo, con elnegocio de una empresa. Más adelante, anali-zaremos algunas alternativas que permitiránbrindar seguridad al código programado.

Herramientas de desarrolloLa plataforma .NET incluye, además de los compiladores, unconjunto de herramientas para facilitar la tarea del desarrollador.

Las herramientas de edición delIDE permiten evitar los errores

más frecuentes que se cometen al escribir código.

FIGURA 005 | Visual Studio proporciona herramientas para ayudar

al programador en la tarea de desarrollar y depurar los programas.

Herramientas de desarrollo

026a037.qxp 06/07/2008 10:45 p.m. PÆgina 27

Page 18: El lenguaje .Net 1 - WordPress.com · 2011. 10. 26. · El lenguaje .Net 1 Este capítulo nos dará una introducción a las características del lenguaje .Net, qué es el Framework,

2828

A continuación, dedicaremos algunas páginas acomprender más en detalle el funcionamientodel framework .NET, y así saber cuál es,específicamente, la función que cumple.Primero, conozcamos un poco más acerca desu evolución en el tiempo.La primera versión del framework .NET vio laluz a principios del año 2002, junto con la nuevaversión de Visual Studio, que en ese momentose llamaba Visual Studio .NET. Como entornode desarrollo, este Visual Studio fue el sucesordel popular Visual Studio 6, aunque con unanovedad muy atractiva: era el mismo IDE paratodos los lenguajes del paquete, a diferencia desu predecesor, que tenía un IDE distinto (muydistinto) para cada uno. Esta primera versión yatenía implementados los lenguajes C# y VisualBasic .NET, además de una versión para .NETde C++ (conocida como Manager C++). Estaprimera versión ya contemplaba la creación deaplicaciones de escritorio, aplicaciones Web yservicios Web. Aproximadamente un año mástarde, en 2003, se liberó la siguiente versión, la1.1. Su novedad más interesante fue el CompactFramework, una versión reducida para usar endispositivos móviles que tuvieran Windows CEo Pocket PC. Con respecto a los lenguajes, seincorporó uno nuevo llamado J#, un derivadode Java para .NET.

El presente

A fines de 2005 apareció la versión 2.0 delframework .NET. Acompañando a varias no-vedades en los lenguajes, llegó la versión 2005de Visual Studio, que trajo muchos cambios,tanto en los aspectos estéticos como en los

funcionales. Además, incluyó un conjunto nu-meroso de controles y componentes para usaren aplicaciones tanto Web como Windows. Elframework .NET va por la versión 3.0, libera-da en 2007. Es una extensión de la versión

2.0, que incluye cuatro nuevas tecnologías:Windows Presentation Foundation (para lainterfaz de usuario), Windows CommunicationFoundation (para la comunicación entre apli-caciones), Windows Workflow Foundation(para diseñar e implementar workflows) yCardSpace (para identidades electrónicas).

Versiones del frameworkPara que el compilador funcione como corresponde,necesitamos un framework.Veamos de qué se trata.

Sin dudas, la principal novedad deVisual Studio es utilizar el mismo

IDE para todos los lenguajes.

FIGURA 006 | El framework 3.0 se presenta como un conjunto de

“componentes agregados” sobre el framework 2.

1. EL LENGUAJE .NET

026a037.qxp 06/07/2008 10:45 p.m. PÆgina 28

Page 19: El lenguaje .Net 1 - WordPress.com · 2011. 10. 26. · El lenguaje .Net 1 Este capítulo nos dará una introducción a las características del lenguaje .Net, qué es el Framework,

2929

Éste es un concepto fundamental que debere-mos conocer antes de adentrarnos en el mundode la programación. ¿A qué nos referimos preci-samente cuando hablamos de arquitectura desoftware? La arquitectura define cómo se organi-zarán los distintos componentes del software, demanera que, juntos, puedan resolver el problema.Los objetivos de las distintas arquitecturas sonfavorecer la mayor cantidad de características delsoftware, desde el alto rendimiento hasta la facili-dad de mantenimiento, la extensibilidad (concuánta facilidad pueden agregarse nuevos ele-mentos) y la escalabilidad (cuánto puede crecer elsoftware en cantidad de usuarios y datos).Vea-mos algunos ejemplos de arquitectura.

MONOLÍTICAEn esta arquitectura, el software se estructura co-mo un único bloque. El resultado es un softwaredifícil de mantener y con baja escalabilidad.

CLIENTE-SERVIDORHace referencia a la arquitectura física más quea la lógica. El software se divide en dos com-ponentes, sin embargo, no queda claro qué par-tes se colocan en cada uno.

EN CAPAS O NIVELESEn este caso, el software se divide en tres omás niveles, cada uno de los cuales se comu-nica sólo con el que tiene debajo.

Arquitectura de softwareLa arquitectura nos permite desarrollar aplicaciones máscomplejas, sin tener que empezar desde cero.

FIGURA 007 | En este diagrama podemos ver los niveles

o etapas de una arquitectura Cliente-Servidor.

Arquitectura Cliente-Servidor

Interfaz de usuario

Capa de Interfaz de Usuario}Procesos de

NegociosCapa de Reglas de Negocios}

Acceso a Datos Capa de Acceso a Datos}

Arquitectura de software

026a037.qxp 06/07/2008 10:45 p.m. PÆgina 29

Page 20: El lenguaje .Net 1 - WordPress.com · 2011. 10. 26. · El lenguaje .Net 1 Este capítulo nos dará una introducción a las características del lenguaje .Net, qué es el Framework,

El framework .NET es una plataforma dedesarrollo y ejecución de aplicaciones, queprecisa apoyarse sobre un sistema operativoque le dé el soporte necesario para llevar ade-lante las tareas propias, como el manejo dearchivos y de dispositivos.Concentrándonos en el framework propiamen-te dicho, podemos hacer una primera separa-ción en dos grandes partes. Por un lado, tene-mos la parte distribuible, es decir, el conjuntode elementos que deben ser distribuidos juntocon nuestra aplicación para que ésta pueda serejecutada en cualquier equipo. Las primeras

versiones del framework debían instalarse enWindows para poder correr aplicaciones.NET, no obstante, desde Windows Server2003, los componentes necesarios ya vienenpreinstalados junto con el sistema operativo, locual es una ayuda muy importante.

30

Componentes del framework El framework .NET está compuesto por un gran número deelementos.Veremos cuáles son y qué función cumplen.

Las últimas versiones deWindows ya tienen el

framework .NET preinstalado.

FIGURA 008 | El framework .NET está formado por varios componentes,

cada uno de los cuales es responsable de un conjunto bien definido de tareas.

Componentes del framework .NET

VB

Common Language Specification

ASP.NET

ADO.NET y XML

Base Class Library

Windows Forms

C++ C# J# ...

Common Language Runtime

Windows COM + Services

Fram

ewor

k .N

ETD

istr

ibui

ble

Fram

ewor

k .N

ET S

DK

1. EL LENGUAJE .NET

026a037.qxp 06/07/2008 10:45 p.m. PÆgina 30

Page 21: El lenguaje .Net 1 - WordPress.com · 2011. 10. 26. · El lenguaje .Net 1 Este capítulo nos dará una introducción a las características del lenguaje .Net, qué es el Framework,

3131

GARBAGE COLLECTOREn .NET, el programador no necesita preocu-parse por pedir memoria para los datos ni por li-berarla cuando ya no la necesita. El CLR proveeservicios de administración automática de me-moria. El garbage collector (recolector de basu-ra) es el responsable de liberar la memoria cuan-do ya no queda espacio, al desechar aquellos ob-jetos que no se utilizan. Cada vez que la aplica-ción necesita más memoria y ya se llenó el espa-cio que le fue asignado, el CLR invoca al garbagecollector para liberar espacio y, así, poder seguirsatisfaciendo los requerimientos de la aplicación.

SECURITY ENGINEUna de las premisas de diseño más importantesde .NET como tecnología es la seguridad. Cuan-do ejecutamos aplicaciones .NET, podemos es-pecificar niveles de confianza, que dependen delorigen de la aplicación o del lugar donde se en-cuentren los archivos al momento de la ejecu-ción. También, al escribir la aplicación, podemosexigir que se cumplan ciertos requisitos en loque respecta a la seguridad para ejecutar unaporción de código. El security engine, entonces,es el responsable de asegurar que se cumplan lascondiciones de seguridad necesarias.

DEBUG ENGINEEste componente permite depurar las aplica-ciones y hacer el seguimiento del código duran-te la ejecución. Si bien una aplicación puesta enproducción puede no contener información dedebug, este componente es uno de los más úti-les durante su desarrollo.

TYPE CHECKEREl lenguaje MSIL fue diseñado para asegurar laseguridad de tipos. Esto significa que el MSIL,por diseño, ya nos asegura que no podremosasignar por error un valor de otro tipo a una va-riable (por ejemplo, asignar un texto a una varia-ble de tipo numérico). Si bien muchos errores

Common Language RuntimeLa parte distribuible del framework está forma-da por varios componentes. El más importantees el CLR. Como vimos antes, el modelo deejecución de .NET está dentro de los denomi-nados “de máquina virtual”, es decir que el có-digo no se compila a instrucciones nativas de lamáquina física, sino que se genera en un len-guaje intermedio. Veamos en detalle los com-ponentes más importantes del CLR, para en-tender mejor sus incumbencias.Tengamos en cuenta que para desarrollar apli-caciones, no es necesario saber al pie de la letratodos estos conceptos teóricos. Aunque al igualque sucede en un automóvil, más allá de sabermanejarlo, hay que saber por dónde cargarlecombustible y cuáles son los componentes ne-cesarios para su correcto funcionamiento (acei-te, refrigerante, frenos, etc.).

CLASS LOADEREl class loader es el responsable de cargar enmemoria el código necesario para ser ejecutadoy de analizar la metadata de cada ensambladocon el objetivo de proveer la información re-querida para la ejecución.

IL TO NATIVE COMPILERSComo ya vimos, al momento de ejecutar laaplicación, el código MSIL se traduce en códi-go nativo de la máquina. Esta tarea es llevada acabo por el CLR a través de los compiladoresde código intermedio a código nativo.

El debug engine permite depurarlas aplicaciones y hacer el

seguimiento durante la ejecución.

Componentes del framework

026a037.qxp 06/07/2008 10:45 p.m. PÆgina 31

Page 22: El lenguaje .Net 1 - WordPress.com · 2011. 10. 26. · El lenguaje .Net 1 Este capítulo nos dará una introducción a las características del lenguaje .Net, qué es el Framework,

por incompatibilidad de tipos pueden detectarsedurante la compilación, otros deben dejarse parael momento de la ejecución, proveyendo servi-cios que hagan la conversión automática siempreque sea posible. El type checker es el componen-te del CLR que se asegura de que cada conver-sión automática que deba realizarse durante laejecución sea válida y esté permitida.

EXCEPTION MANAGERUna excepción es una situación anormal queocurre durante la ejecución de una aplicación.Por ejemplo, si queremos escribir un archivo endisco pero éste se encuentra lleno, obtendremosuna excepción. El exception manager (o admi-nistrador de excepciones) es el encargado de ges-tionar y provocar las excepciones. Al momentode provocar una excepción, este componente re-colecta bastante información del contexto de laexcepción (como el nombre de la máquina o lapila de ejecución) para facilitar su manejo o, in-cluso, la depuración de la aplicación.

THREAD SUPPORTEn .NET, es relativamente sencillo ejecutar códi-go en hilos independientes; es decir, que se eje-cutan al mismo tiempo entre ellos y al mismotiempo que la aplicación principal. Este compo-nente del CLR provee los servicios necesariospara iniciar los hilos independientes, como asítambién para coordinarlos, detenerlos, etc.

COM MARSHALERBrinda soporte para interactuar con componen-tes COM (Component Object Model). Con él, es po-sible intercambiar datos y comunicarse con apli-caciones que tengan soporte para COM.

SOPORTE PARA LAS LIBRERÍAS DE CLASES BASEEste componente permite integrar la aplicacióncon cualquier otra que soporte la librería de cla-ses base (BCL, del inglés Base Class Library).

ASSEMBLIESLos assemblies o ensamblados son la unidadbásica de ejecución y despliegue en las aplica-ciones .NET. Se diferencian de otras unidadesde código (como los archivos dll ActiveX) enque son autodescriptivos; esto es que tienenen sí mismos toda la información que el CLRnecesita para ejecutar su código.El ensamblado se almacena en un archivocon extensión exe o dll, eso depende del tipo.En su interior, un ensamblado contiene códi-go MSIL junto con una sección denominadamanifiesto. Éste puede verse como un enca-bezado que incluye información sobre el en-samblado, además de recursos adicionales alcódigo (como mensajes de error o imágenes).La información referida al ensamblado se lla-ma metadata (o metadatos) y, como dijimos,es utilizada por el CLR para dar soporte a losservicios en tiempo de ejecución. Entre la in-formación que contiene la metadata, pode-mos mencionar la versión del assembly, elidioma por defecto, información de firma di-gital para proteger la identidad del código(para asegurar que no fue modificado por al-guien no autorizado), los ensamblados quenecesita para funcionar, etc.En este punto, debemos tener en cuenta quees muy importante la información de la ver-sión, ya que en una misma computadora po-demos tener más de una versión de un en-samblado, y el CLR es capaz de utilizar la quesea apropiada para cada aplicación que lo ne-cesite. Una característica muy interesante delos ensamblados es que no requieren ser regis-trados en ningún lugar para estar disponibles,

3232

Es importante tener en cuentaque los espacios de nombres

son una división lógica, no física.

1. EL LENGUAJE .NET

026a037.qxp 06/07/2008 10:45 p.m. PÆgina 32

Page 23: El lenguaje .Net 1 - WordPress.com · 2011. 10. 26. · El lenguaje .Net 1 Este capítulo nos dará una introducción a las características del lenguaje .Net, qué es el Framework,

3333

tal como sucedía con los componentes COM.Esto, junto con la característica de autodes-cripción, facilita rotundamente la instalación yla actualización de aplicaciones, ya que parainstalar una aplicación basta con copiar enuna carpeta todos los ensamblados que laconforman.

La biblioteca de clases del framework

El framework .NET incluye un gran númerode clases y de componentes que ayudan al pro-gramador en su tarea diaria. Estas clases inte-gran la denominada biblioteca de clases delframework, o FCL por sus siglas en inglés(.NET Framework Class Library). La FCL contie-ne los bloques básicos para construir aplicacio-nes, y provee clases para realizar la mayoría delas tareas comunes en cualquier programa, co-mo acceso a archivos, manejo de textos, lecturay navegación de archivos XML, conexión a ba-ses de datos, etc. Dada la cantidad de clasesque componen la FCL, los creadores del fra-mework decidieron organizarlas en una estruc-tura jerárquica que permita encontrar fácilmen-te la que se está buscando. Esta estructura denombres se denomina namespace (espacio denombres). Los namespaces, además, permitenevitar conflictos de nombres, ya que podemostener dos clases que se llamen de la misma ma-nera, pero en namespaces diferentes.

Common Language Specification

Una de las premisas de diseño de .NET fue serindependiente del lenguaje utilizado para de-sarrollar, y el hecho de que, desde un lenguaje, sepueda acceder fácilmente a librerías y clases es-critas en otros. Para eso se creó la especifica-ción de lenguaje común, o CLS por sus siglasen inglés (Common Language Specification). La CLSdefine ciertas características que debe tener unlenguaje para ser compatible con el CLR. Si bienMicrosoft provee algunos lenguajes para .NET,la CLS hace posible que otras compañías creennuevos lenguajes que permitan escribir aplicacio-nes que corran sobre el framework .NET.

FIGURA 009 | La GAC contiene una lista de los assemblies públicos

que están en la computadora. Los ensamblados se colocan en la

GAC para no tener que copiarlos a las carpetas de cada aplicación.

Assemblies públicos y privadosUna aplicación .NET depende de variosensamblados. Para encontrar aquellos que sonnecesarios, el CLR busca en la carpeta donde estáel assembly principal y, si no lo encuentra, lo buscaen un repositorio global denominado GlobalAssembly Cache (GAC), que es una especie dedirectorio de ensamblados compartidos. Unensamblado que se encuentra en la GAC puedeser utilizado por más de una aplicación, sinnecesidad de copiarlo a su carpeta. Los assembliesque están en la GAC se denominan assembliespúblicos, en tanto que los que están en la mismacarpeta se llaman privados.

Componentes del framework

026a037.qxp 06/07/2008 10:46 p.m. PÆgina 33

Page 24: El lenguaje .Net 1 - WordPress.com · 2011. 10. 26. · El lenguaje .Net 1 Este capítulo nos dará una introducción a las características del lenguaje .Net, qué es el Framework,

3434

Como vimos antes, las aplicaciones .NETson compiladas a un lenguaje intermedio, conel objetivo de independizarlas de la plataformafinal donde serán ejecutadas. Esto se denominaCLI (Common Language Infrastructure, o infraes-tructura de lenguaje común). No debemos con-fundir el CLI con el CLR: el CLI es una espe-cificación, no una implementación; y elCLR, si bien cumple con esta especificación,tiene aspectos que van más allá de ella. Hayque tener presente que el CLI es independientede .NET; es una especificación que puede usar-se para desarrollar otras plataformas y tecnolo-gías. El .NET de Microsoft, de hecho, es un

Funcionamiento del CLREn esta etapa veremos cómo .NET realiza la conversión del códigofuente a un lenguaje intermedio para que funcione en el sistema.

superconjunto del CLI, ya que está implemen-tado de manera de cumplir con todas las espe-cificaciones del estándar.

El modelo de ejecuciónEl modelo de desarrollo y ejecución de .NET esde los denominados “en dos etapas” o de “com-pilación diferida”. El desarrollo comienza con laescritura del código fuente de la aplicación en al-guno de los lenguajes con soporte para el frame-work .NET. Una vez escrito el código fuente, de-be ser compilado utilizando el compilador apro-piado para el lenguaje en cuestión.

FIGURA 010 | Microsoft .NET es un superconjunto del CLI que implementa

las especificaciones del estándar, y agrega un conjunto de librerías y herramientas muy útiles.

Especificaciones y librerías en .NET

Lenguajes de Alto Nivel

.NET Framework

Common Language Specification

Common Type System

Base Class Library

Common Language Runtime

WPF,WF,WCF

WinForms

ASP.NET

ADO.NET

Herramientas de Depuración

Common Language Infrastructure

1. EL LENGUAJE .NET

026a037.qxp 06/07/2008 10:46 p.m. PÆgina 34

Page 25: El lenguaje .Net 1 - WordPress.com · 2011. 10. 26. · El lenguaje .Net 1 Este capítulo nos dará una introducción a las características del lenguaje .Net, qué es el Framework,

3535

El resultado de la compilación es uno o más en-samblados, de los cuales uno debe tener exten-sión “exe” (a menos que sea una aplicación Web)y será el punto de entrada para la ejecución de laaplicación. Como ya hemos explicado, cada assembly contiene código intermedio (MSIL)además de los recursos y metadatos. Al mo-mento de ejecutar la aplicación, el sistema ope-rativo detecta que se trata de un ensamblado.NET y deriva la ejecución al CLR. Entonces,éste toma el código MSIL y lo traduce a códigonativo de la máquina para poder ejecutarlo, yaque las computadoras actuales no son capacesde reconocer instrucciones MSIL.La compilación a código máquina no se efectúacompleta al momento de ejecutar, sino que serealiza a medida que se la necesita. Si una por-ción de código nunca se ejecuta, nunca serácompilada a código nativo. Para lograr la com-pilación por demanda, el CLR lee cada clase y,antes de comenzar la ejecución, agrega porcio-nes de código a cada método, de manera talque cuando un método sea ejecutado, se puedahacer la invocación al compilador JIT (Just InTime). Éste traduce las instrucciones del méto-do a código nativo, y reemplaza el código queagregó el CLR por la dirección en memoria delcódigo nativo que acaba de generar. De estemodo, en las subsecuentes llamadas al método,se ejecutará directamente código nativo, y elJIT no intervendrá.El modelo de ejecución de .NET prevé contro-les de seguridad del código ejecutado, para evi-tar código malintencionado. Para lograrlo, antesde ordenar la compilación a código nativo, elCLR analiza la metadata del assembly y le apli-ca las políticas de seguridad que fueron confi-guradas en la computadora. Si el assembly violaalguna de ellas (por ejemplo, está firmado poruna empresa en la que no se confía), se abortala ejecución de la aplicación.Además de los controles antes de la compila-ción a código nativo, el CLR verifica el código

Características del CLIHubo muchas premisas que se tuvieron encuenta a la hora de crear la especificación deCLI. Según ésta, la arquitectura de CLI, entreotras cosas, debe tener las siguientescaracterísticas:• Permitir la escritura de componentes

reutilizables e interoperables independientesde la plataforma y del lenguaje deprogramación utilizado.

• Para facilitar la operación entre lenguajes, sedebe proveer un sistema de tipos único ycompleto, común a todos ellos.

• Cada unidad de código o componente debeser totalmente autodescriptiva, para facilitarsu independencia y su portabilidad.

• Proveer un entorno de ejecución quepermita supervisar el código para controlary hacer cumplir políticas de seguridad.

• Diseñar toda la infraestructura basándoseen metadatos, de manera tal que toda laarquitectura pueda acomodarse fácilmente alos cambios e incorporaciones y, así, sefacilite la extensibilidad del modelo.

• Realizar tareas de bajo nivel, como carga de tipos en memoria o compilación acódigo nativo sólo cuando sea necesario(Just In Time).

• Proveer un conjunto de funcionalidadescomunes que los programadores puedanutilizar para desarrollar las aplicaciones. Paraestar acorde con el CLI, estasfuncionalidades deben estar construidas detal manera que su uso no deje unaaplicación atada a una determinadaplataforma (por ejemplo, .NET brindamétodos para conocer el carácter de fin delínea o el carácter usado para separardirectorios en el disco, que varían según elsistema operativo).

Funcionamiento del CLR

026a037.qxp 06/07/2008 10:46 p.m. PÆgina 35

Page 26: El lenguaje .Net 1 - WordPress.com · 2011. 10. 26. · El lenguaje .Net 1 Este capítulo nos dará una introducción a las características del lenguaje .Net, qué es el Framework,

también durante la ejecución e interviene endistintos aspectos, entre los que podemosmencionar:

• Administración automática de memoriaDurante la ejecución, el CLR administra cadapedido de espacio de memoria y se encarga deliberar la memoria que ya no se está utilizando.

• Verificación de tipos de datosSi bien gran parte de la consistencia de tiposde datos puede realizarse durante la compila-ción, hay características de .NET que hacennecesario relegar otras verificaciones. Cada vezque se hace una conversión de tipos en tiem-po de ejecución, el CLR controla si es válida.

3636

Hay recursos que el CLR no administra porque son

del sistema operativo.

• Manejo y coordinación de hilosCiertas aplicaciones necesitan hacer procesa-mientos en segundo plano para poder conti-nuar atendiendo al usuario o a otros siste-mas de manera eficiente. El CLR proporcio-na mecanismos para facilitar la ejecución enhilos independientes, y se encarga tanto de lacoordinación entre ellos como de la finaliza-ción y del control de cada hilo en particular.

FIGURA 011 | En .NET, las aplicaciones se compilan a un lenguaje intermedio

para, luego, compilarlas al código nativo de la plataforma donde se ejecutan.

Generación de código MSIL

Common Language Infrastructure

MSIL

Código de Máquina

MSIL

C#

Compilador Compilador Compilador

VB.NET J#

1. EL LENGUAJE .NET

026a037.qxp 06/07/2008 10:46 p.m. PÆgina 36

Page 27: El lenguaje .Net 1 - WordPress.com · 2011. 10. 26. · El lenguaje .Net 1 Este capítulo nos dará una introducción a las características del lenguaje .Net, qué es el Framework,

3737

Por un lado, al estar aisladas, si una aplicaciónfalla, no afecta a las demás. Por el otro, unaaplicación puede ser detenida sin necesidad defrenar todo el proceso y las demás aplicaciones.

El Common Type SystemEl sistema de tipos común (CTS) define todoslos tipos básicos del framework .NET. Su obje-tivo es especificar las reglas que rigen a cada ti-po de datos en cualquier aplicación .NET.Si bien cada lenguaje puede tener su propia sin-taxis para definir los tipos de datos, el códigoMSIL resultante debe cumplir las reglas delCTS. Esto es fundamental para permitir la in-teroperabilidad de lenguajes exigida por la CLI.El CTS define dos grandes familias de tipos dedatos: los tipos por valor y los tipos por refe-rencia. Los tipos por valor heredan de un tipobásico llamado ValueType y conforman los lla-mados tipos básicos o tipos primitivos. Las va-riables definidas con tipos por valor se almace-nan directamente en la pila y, por lo tanto, sonliberadas cuando se cierra el bloque de códigoque las definió. Por otro lado, los tipos por re-ferencia heredan de una clase base llamada Object y se almacenan en el heap. La memoriaocupada por variables de tipos por referenciaes liberada por el garbage collector.

Application domains

Tanto los sistemas operativos como los entor-nos de ejecución suelen proveer algún mecanis-mo para el aislamiento de las aplicaciones, ne-cesario para asegurar que el código que correen una aplicación no afecte al de otras. Los application domains, o fronteras de aplicación,brindan una unidad de procesamiento seguraque el CLR puede usar para generar aislamien-to entre aplicaciones.Los application domains son creados por unproceso denominado CLR Host, que se ejecutaantes que el CLR y cuya función es cargar elCLR en un proceso del sistema operativo, crearlos application domains necesarios dentro deese proceso y ejecutar las aplicaciones dentrode los application domains. Esta forma de tra-bajo permite ejecutar varios application domains en un mismo proceso, pero con el ni-vel de aislamiento que existe entre procesos se-parados, sin incurrir en el costo que significacambiar la ejecución de uno a otro o de hacerllamadas entre ellos. Además, la capacidad decorrer varias aplicaciones dentro de un mismoproceso incrementa considerablemente la esca-labilidad en los servidores.El aislamiento deaplicaciones provisto por los application domains tiene algunos beneficios interesantes.

FIGURA 012 | Cada lenguaje le da distintos nombres a cada tipo de dato, pero al momento

de compilar, se traducen en los mismos tipos de datos, según lo especifica el CTS.

Interpretación del CTS

intC# CompiladorC#

Integer

System.Int32

VB.NET CompiladorVB.NET

MSIL

Funcionamiento del CLR

026a037.qxp 06/07/2008 10:46 p.m. PÆgina 37

Page 28: El lenguaje .Net 1 - WordPress.com · 2011. 10. 26. · El lenguaje .Net 1 Este capítulo nos dará una introducción a las características del lenguaje .Net, qué es el Framework,

Las clases están ordenadas de manera jerárquicaen espacios de nombres o namespaces, para queestén mejor organizadas y que resulte sencilloencontrar la que se busca. A continuación, vere-mos algunos de los namespaces más importan-tes, junto con una descripción de su contenido.

SystemEl espacio de nombres System es la raíz de to-do el árbol de nombres. Toda clase provistapor el framework está en el namespace Systemo en alguna de las ramas que parten de él. Ade-más, en él se encuentran los tipos por valor bá-sicos (como Int32, Char, String, Boolean, etc.).

System.CollectionsContiene clases que definen diversas coleccionesde objetos, como listas, tablas Hash, pilas, colas ylistas ordenadas. También provee interfaces queestablecen las bases para la creación de nuevasclases de tipo colección y listas de objetos sobrelas que se puede iterar elemento a elemento.Desde la versión 2.0 del framework, hay una ra-ma muy interesante de este namespace llamadaSystem.Collections.Generic, que contiene clasesque representan colecciones fuertemente tipadas.

System.ConfigurationProporciona clases e interfaces para acceder ymanipular por código los archivos de configu-ración de las aplicaciones (archivos .config).

System.DiagnosticsProporciona clases que posibilitan interactuarcon procesos del sistema, registros de eventos

y contadores de rendimiento. Este espacio denombres también provee clases que permitendepurar la aplicación y realizar un seguimientode la ejecución del código. Por ejemplo, conclases de este namespace, podemos conocer lacarga de trabajo de la CPU, o agregar códigode depuración con las clases Debug y Trace.

System.GlobalizationContiene clases útiles para escribir aplicacionescon soporte para más de una cultura e idioma,lo que se conoce como internacionalización oglobalización. Las clases que incluye permitenmanipular formatos de fecha, de número y demonedas, como así también manejar los crite-rios para ordenar cadenas de textos con el finde adecuar la lógica de la aplicación a la culturadel país donde se la está usando.

System.IOProporciona clases para trabajar con archivosy secuencias de datos. Mediante las clases deeste namespace, no sólo podemos leer y es-cribir archivos, sino que también podemosmanipular directorios (por ejemplo, obtenerla lista de archivos). Contiene, además, unconjunto de clases que permite abstraer elmedio físico con el que se trabaja, para lograrmayor flexibilidad (por ejemplo, podemosmanipular una secuencia de datos sin impor-tar si se trata de un archivo o de los datos re-cibidos por la red).

System.NetProporciona clases para acceder a recursos de re-des, sobre todo, de Internet. Las clases están di-señadas de tal manera que logran independizar al

Librerías de clases baseComo vimos anteriormente, el framework .NET brinda unconjunto de clases que podemos utilizar.Veamos cuáles son.

3838

1. EL LENGUAJE .NET

038a047.qxp 06/07/2008 10:52 p.m. PÆgina 38

Page 29: El lenguaje .Net 1 - WordPress.com · 2011. 10. 26. · El lenguaje .Net 1 Este capítulo nos dará una introducción a las características del lenguaje .Net, qué es el Framework,

3939

programador de los protocolos subyacentes (porejemplo, se pueden hacer invocaciones HTTPsin conocer los detalles del protocolo).

System.RelectionEste interesante espacio de nombres contieneclases que permiten recuperar información so-bre los ensamblados, módulos, parámetros ycualquier otro tipo de dato de código adminis-trado, leyendo los metadatos de los ensambla-dos. También provee clases para manipular ycargar tipos de datos en tiempo de ejecución yhacer invocaciones a métodos. La ramaSystem.Reflection.Emit permite generar códigoen tiempo de ejecución.

System.ResourcesContiene clases e interfaces que permiten mani-pular recursos asociados a la referencia culturalde la aplicación, tales como cadenas de texto oimágenes almacenadas dentro de un ensamblado.

System.SecurityContiene clases relacionadas al subsistema deseguridad del CLR, que permiten conocer in-formación del contexto de seguridad, comoasí también especificar requerimientos de se-guridad para la ejecución del código.

System.ServiceProcessProporciona clases que permiten a los desarrolla-dores crear e instalar servicios. Los servicios sonaplicaciones de larga duración que corren en se-gundo plano y sin interfaz de usuario.

System.TextIncluye clases para la manipulación de cade-nas de texto en distintas codificaciones

El espacio de nombres System es la raíz de todo

el árbol de nombres.

FIGURA 013 | En el sitio

de MSDN hay una

descripción detallada

de cada uno de los

espacios de nombres

del framework .NET.

Librerías de clases base

038a047.qxp 06/07/2008 10:52 p.m. PÆgina 39

Page 30: El lenguaje .Net 1 - WordPress.com · 2011. 10. 26. · El lenguaje .Net 1 Este capítulo nos dará una introducción a las características del lenguaje .Net, qué es el Framework,

(ASCII, Unicode, UTF-7 y UTF-8). Proveetambién clases para convertir bloques debytes en cadenas de texto, y viceversa.

System.ThreadingEste espacio de nombres contiene las clasesnecesarias para crear aplicaciones con soportemultihilo, como así también para su manipula-ción y coordinación. Incluye también una claseque permite ejecutar código en intervalos detiempo determinados (la clase Timer).

System.Runtime.InteropServicesProporciona clases para desarrollar aplicacionesque interactúen con componentes COM y có-digo no administrado.

System.Runtime.RemotingContiene clases e interfaces que permiten laconstrucción de aplicaciones distribuidas. Conellas se pueden crear objetos que se comuni-quen con otros objetos que no están en el mis-mo application domain; incluso, que no esténen la misma computadora.

System.Runtime.SerializationContiene clases para serializar y deserializar obje-tos. La serialización es el proceso mediante elcual un objeto o un conjunto de objetos relacio-nados se convierten en una secuencia lineal debytes para su almacenamiento o transmisión aotra ubicación. Por su parte, la deserializaciónimplica recoger la información almacenada y vol-ver a crear objetos a partir de ella. La serializa-ción es muy utilizada en ambientes distribuidos,ya que para transmitir un objeto hacia otro application domain, es necesario serializarlo.

ADO.NETADO.NET es la evolución de la tecnologíaADO (ActiveX Data Objects), tan popular en la

época de Visual Basic 6. Las clases deADO.NET brindan todo lo necesario para ac-ceder a datos desde las aplicaciones .NET. Elmodelo de acceso a datos de ADO.NET per-mite manipular datos independientemente de lafuente original y de manera desconectada. Estosignifica que podemos trabajar con los datossin necesidad de estar conectados a la base dedatos, lo cual es muy útil en ambientes distri-buidos y desconectados (como el caso de servi-cios Web). Además, ADO.NET fue diseñadode manera tal de independizar las formas deacceso del tipo de fuente de datos. Por ejem-plo, una vez que aprendemos a trabajar conADO.NET contra un SQL Server, podremosempezar otra base de datos, como Oracle, sinningún problema. Cada conjunto de clases paraacceder a un motor de base de datos en parti-cular se denomina proveedor, y por eso se diceque ADO.NET es un modelo de acceso a da-tos basado en proveedores. El espacio de nom-bres System.Data conforma la raíz de todos losespacios de nombres de las clases deADO.NET. Veamos qué contiene cada uno:

System.DataEn este espacio de nombres se encuentran lasclases fundamentales de la arquitecturaADO.NET. Sin duda, la clase más importante esDataSet, que puede contener información de di-ferentes orígenes, mediante una colección de ob-jetos DataTable. Cada DataTable contiene datosde un único origen, y está formado por una

4040

De memoriaObviamente, no será necesario conocer cada unade estas librerías, sus características y funciones.Podemos tener este material como una guía deconsulta permanente, hasta que nos vayamos fami-liarizando con cada uno de los componentes.

1. EL LENGUAJE .NET

038a047.qxp 06/07/2008 10:53 p.m. PÆgina 40

Page 31: El lenguaje .Net 1 - WordPress.com · 2011. 10. 26. · El lenguaje .Net 1 Este capítulo nos dará una introducción a las características del lenguaje .Net, qué es el Framework,

4141

colección de objetos DataColumn y una colec-ción de objetos Constrain (UniqueConstrain yForeignKeyConstrain), que permiten definir unesquema en memoria tal como si fuera una basede datos. El DataSet también puede tener unacolección de objetos DataRelation para crear re-laciones entre columnas de distintas tablas.

System.Data.CommonEste espacio de nombres contiene clases, en sumayoría, abstractas, compartidas y heredadaspor todos los proveedores de acceso a datos. Laclase que más se destaca es DataAdapter, que in-cluye un conjunto de comandos SQL para acce-der a la base de datos, tanto para recuperar co-mo para actualizar datos. Cada proveedor debeluego heredar de esta clase para implementar lasparticularidades del motor de base de datos.

System.Data.SqlClientEste espacio de nombres contiene las clasesque componen el proveedor de acceso a da-tos utilizado por ADO.NET (el cual veremosmás adelante con mayor detalle) para SQLServer de Microsoft.

System.Data.OracleClientContiene las clases que implementan el provee-dor de acceso a datos de ADO.NET para tra-bajar con bases de datos Oracle. Así como elproveedor para SQL Server implementa unSqlDataAdapter, éste implementa el Oracle-Adapter, también lo hereda de DataAdapter.

System.Data.OleDbBrinda las clases necesarias para acceder a datosmediante el proveedor OLE DB, con el cual esposible conectarse a cualquier fuente de datos.

System.Data.OdbcEste espacio de nombres otorga un proveedorde acceso a datos que permite trabajar práctica-mente con fuentes de datos que implementen undriver ODBC (Open DataBase Connection).

System.Data.SqlTypesProporciona clases para los tipos de datos na-tivos de SQL Server. Estas clases ofrecen unaalternativa más rápida y segura a otros tipos dedatos. Las clases de este espacio de nombressirven para evitar los errores de conversión

FIGURA 014 | El modelo de acceso a datos de ADO.NET proporciona una forma desconectada

de trabajar, lo cual permite manipular la información sin estar conectado a la base de datos.

Modelo de acceso a datos ADO.NET

Aplicación

Sin conexión

1

2

3

Datos

1. La aplicación se conecta a labase y pide un conjunto dedatos.

2. La base de datos devuelvelos datos y la aplicación sedesconecta.

3. Después de manipular losdatos, la aplicación se vuelvea conectar a la base para vol-car las actualizaciones.

Aplicación

Librerías de clases base

038a047.qxp 06/07/2008 10:53 p.m. PÆgina 41

Page 32: El lenguaje .Net 1 - WordPress.com · 2011. 10. 26. · El lenguaje .Net 1 Este capítulo nos dará una introducción a las características del lenguaje .Net, qué es el Framework,

de tipos que pueden ocasionar una pérdidade precisión al recuperar información de labase de datos.

System.XmlEl framework .NET tiene un extenso soportepara trabajar con documentos XML comofuente de información. Mediante las clases delespacio de nombres System.Xml y sus deriva-dos, es posible leer documentos XML, guar-darlos, hacer transformaciones complejas, na-vegarlos de manera orientada a objetos e, in-cluso, acceder a partes específicas del docu-mento a través de consultas XPath.

Windows FormsLas aplicaciones .NET que corren en ventanas tradicionales de Windows se deno-minan aplicaciones WinForms, y el frame-work .NET brinda un gran soporte para sucreación. El namespace más importante eneste aspecto es System.Windows.Forms, quecontiene clases para facilitar la creación de

ventanas y de controles; en resumen, incluyetodo lo necesario para la creación de interfa-ces de usuario basadas en ventanas.

System.Windows.FormsComo decíamos, este espacio de nombrescontiene las clases básicas para la creación deaplicaciones basadas en ventanas. Sin dudas,la clase más importante de este grupo esForm, que representa una ventana. Otra cla-se muy importante es Control, de la que he-redan todos los controles visuales que pode-mos colocar en un Form (botones, listas deselección, casillas de verificación, etc.). Ésta,además, sienta las bases para crear controlespropios. También hay clases que permitenimprimir textos y documentos, y manipularlas propiedades de impresión (márgenes uorientación, por ejemplo).Además, este namespace contiene clases úti-les para la comunicación con el usuario a tra-vés de cuadros de diálogo. Por ejemplo, laclase OpenFileDialog permite mostrar unaventana para que el usuario seleccione el ar-chivo que desea abrir.

4242

FIGURA 015 |

El namespace

System.Windows.Forms

contiene las clases

necesarias para escribir

aplicaciones basadas

en ventanas.

1. EL LENGUAJE .NET

038a047.qxp 06/07/2008 10:53 p.m. PÆgina 42

Page 33: El lenguaje .Net 1 - WordPress.com · 2011. 10. 26. · El lenguaje .Net 1 Este capítulo nos dará una introducción a las características del lenguaje .Net, qué es el Framework,

4343

te utilizar controles de usuario que, en cierta me-dida, abstraen al programador del códigoHTML, que se genera automáticamente cuandola página se ejecuta en el servidor.

System.Web.UIEste espacio de nombres proporciona clases einterfaces que permiten crear los controles y laspáginas que aparecerán en las aplicaciones Webcomo elementos de interfaz de usuario. Incluyela clase Control, que proporciona todos loscontroles de servidor –ya sean de servidorHTML, de servidor Web y de usuario–, con unconjunto común de funciones. Además, se uti-liza como clase base para la creación de nuevoscontroles de ASP.NET. Incluye también la cla-se Page, que representa la unidad básica deconstrucción de páginas Web dinámicas.

System.Web.ServicesASP.NET no sólo permite crear aplicacionesinteractivas basadas en un navegador, sino quetambién da la posibilidad de crear serviciosWeb. Básicamente, un servicio Web es un con-junto de funcionalidades (sin interfaz de usua-rio) a las que se puede acceder mediante losprotocolos normalmente utilizados para ingre-sar en la Web (HTTP y XML). Los serviciosWeb permiten conectar aplicaciones distribui-das de manera segura y sencilla, ya que al usarprotocolos estándar, pueden colocarse detrásde un firewall que sólo permita acceso por elpuerto 80 (el usado por los servidores Web).Los servicios Web no son una tecnología propie-taria de .NET ni de Microsoft, sino que son unestándar aprobado y regulado por organismos in-ternacionales. Esto es fundamental, porque gra-cias a esta característica, representan una formade integración de aplicaciones construidas conlas más diversas herramientas. El espacio denombres System.Web.Services contiene las clasesbase que se pueden utilizar para crear serviciosWeb. La más importante es WebService.

System.DrawingEste namespace contiene clases que permitenacceder desde código manejado a las APIs delsistema gráfico de Windows (GDI+). Mediantelas clases de System.Drawing podemos dibujarfiguras y textos sobre las ventanas, pintar condistintas tramas y colores degradados, como asítambién manipular imágenes.

ASP.NETAdemás de las aplicaciones basadas en ventanas,.NET permite construir otras basadas en explo-radores de Internet, denominadas aplicacionesWeb. El subconjunto de componentes del frame-work destinado a hacerlo se denomina ASP.NETy representa una evolución con respecto a su an-tecesor ASP (Active Server Pages). MedianteADO.NET, es posible crear aplicaciones y sitiosWeb dinámicos (en el sentido de que el conteni-do puede cambiar en respuesta a las necesidadesy acciones del usuario).Un detalle interesante es que ASP.NET proveeun modelo de desarrollo similar al modelo decreación de aplicaciones Windows, ya que brindaun conjunto de clases y controles tendientes a es-cribir las aplicaciones Web de una manera senci-lla y muy parecida a como se escriben las aplica-ciones para ventanas, aunque su funcionamientoen tiempo de ejecución sea radicalmente diferen-te. Cuando desarrollamos una aplicación Web, elobjetivo es siempre producir código HTML paraque sea interpretado por el navegador del usua-rio. Sin embargo, el modelo de ASP.NET permi-

Los servicios Web no son unatecnología propietaria de

Microsoft, sino un estándaraprobado internacionalmente.

Librerías de clases base

038a047.qxp 06/07/2008 10:53 p.m. PÆgina 43

Page 34: El lenguaje .Net 1 - WordPress.com · 2011. 10. 26. · El lenguaje .Net 1 Este capítulo nos dará una introducción a las características del lenguaje .Net, qué es el Framework,

A lo largo de esta sección, estudiaremos la sin-taxis de Visual Basic .NET, desde los cons-tructores fundamentales para cualquier progra-ma, hasta la creación de clases para programasorientados a objetos.

Sintaxis básica

Siempre que escribimos código, nos encontra-mos ante la necesidad de dejar algún comenta-rio explicando alguna porción o cualquier otracosa que debamos documentar. El compiladorno debe tener en cuenta estos textos, que sedenominan comentarios. En Visual Basic.NET, los comentarios se escriben comenzan-do con una comilla simple (‘), y se los puedecolocar tanto en una línea independiente comoal final de una línea de código.Veamos algunos ejemplos:

' Este es un comentario de una línea

Console.WriteLine(“Hola Mundo”) 'Este es un

comentario al final

En la primera línea del ejemplo, tenemos uncomentario que ocupa toda la línea, mientrasque en la segunda, se ve una sentencia normal(que se ejecutará) seguida de un comentario.Hay que tener en cuenta que, luego de un co-mentario, en la misma línea no se puede escri-bir una sentencia ejecutable.

OperadoresLos operadores son elementos que nos permi-ten combinar variables, constantes o instruc-ciones para obtener un valor como resultado;es decir, nos permiten construir y evaluar ex-

presiones. Una expresión está compuesta poroperadores y operandos. Por ejemplo, en“2+3”, 2 y 3 son los operandos, y “+” es eloperador. Visual Basic .NET provee un grannúmero de operadores para construir expre-siones de distintos tipos. En la Tabla 4 vere-mos los más importantes, y a lo largo del cur-so, iremos aprendiendo otros.

VariablesEn Visual Basic .NET, las variables se declaranusando la palabra reservada Dim.Veamos un ejemplo:

Dim variable1 As String

En este caso, estamos declarando una varia-ble llamada variable1 de tipo String.Tanto la palabra clave Dim como la palabraclave As son obligatorias. Ésta es la mínimaexpresión para declarar una variable. Sin em-bargo, si queremos declarar más de una va-riable del mismo tipo en una sola línea, po-demos hacerlo separando los nombres concoma, antes de la palabra clave As. Del mis-mo modo, también podemos declarar varia-bles de otros tipos de datos usando la mismalínea de sentencia Dim, colocando el nombrey el tipo separados por coma, luego de cadatipo de dato.

Visual Basic .NETEste lenguaje continúa con la tradición de su predecesor encuanto a su facilidad de uso. Veamos cómo utilizarlo.

VB.NET no diferencia entremayúsculas y minúsculas; esdecir, no es case sensitive.

4444

1. EL LENGUAJE .NET

038a047.qxp 06/07/2008 10:53 p.m. PÆgina 44

Page 35: El lenguaje .Net 1 - WordPress.com · 2011. 10. 26. · El lenguaje .Net 1 Este capítulo nos dará una introducción a las características del lenguaje .Net, qué es el Framework,

4545

Veamos ambos casos en un ejemplo:

' Declaro dos variables del mismo tipo en

la misma línea

Dim variable1, Variable2 As String

' Declaro dos variables de distinto tipo en

la misma línea

Dim variable1 As String, Variable2 as Integer

Para asignar valor a una variable, se utiliza eloperador de asignación, representado por elsigno “=”. La sintaxis es la siguiente:

Variable1 = 5

En este caso, la variable con nombre Variable1queda asignada con el valor 5.

Sentencia IfLa sentencia If representa la estructura de selec-ción más simple en Visual Basic .NET, y permiteejecutar una porción de código sólo si se cumpleuna determinada condición. Se escribe comen-zando la línea con la palabra clave If, seguida de

la condición por evaluar y, luego, la palabra claveThen. Después debe ir la instrucción o grupo deinstrucciones que se van a ejecutar si la condi-ción es verdadera. Opcionalmente, podemos uti-lizar la palabra clave Else luego del bloque decódigo, para especificar una instrucción que seejecutará si la condición es falsa.

If a > 0 Then

c = b / a

a = 1

Else

c = 0

End If

En este caso, si el valor de la variable a es mayorque 0, a la variable c se le asignará el resultado dedividir el valor de la variable b por el de la varia-ble a; en caso contrario, se le asignará el valor 0.Si necesitamos ejecutar más de una instrucciónen cualquiera de las dos partes del If, deberemoscomenzar una nueva línea luego de la palabraThen y, también, luego de Else en caso de queexista. Además, en este caso, debemos cerrar laestructura con las palabras End If .

OPERADOR NOMBRE DESCRIPCIÓN

+ Suma Suma dos números.

- Resta / Negación Como operador binario, resta dos números. Como operador unario, representa la negación aritmética.

* Multiplicación Multiplica dos números.

/ División real Divide dos números reales y devuelve un número real (por ejemplo, 10/4 es 2,5).

\ División entera Divide dos números enteros y devuelve un entero (por ejemplo, 10\4 es 2).

Mod Resto Devuelve el resto de una división entera (por ejemplo, 10 Mod 4 es 2).

^ Potenciación Devuelve un número elevado a otro como potencia (por ejemplo, 2^3 es 8).

& Concatenación Concatena dos cadenas de texto (“Hola” & “Mundo” devuelve “Hola Mundo”).

> Mayor Devuelve verdadero si el valor de la izquierda es mayor que el de la derecha.

< Menor Devuelve verdadero si el valor de la izquierda es menor que el de la derecha.

<> Distinto Devuelve verdadero si los dos operandos son distintos.

= Igualdad Devuelve verdadero si los dos operandos son iguales.

Tabla 4 | Operadores utilizados por Visual Basic .NET

Visual Basic .NET

038a047.qxp 06/07/2008 10:53 p.m. PÆgina 45

Page 36: El lenguaje .Net 1 - WordPress.com · 2011. 10. 26. · El lenguaje .Net 1 Este capítulo nos dará una introducción a las características del lenguaje .Net, qué es el Framework,

Observemos que en la parte de Else, si bien te-nemos una sola instrucción, no podemos escri-birla en la misma línea que la palabra Else, yaque con Then iniciamos un bloque If comple-jo. Si no tenemos un bloque Else, igualmentedebemos cerrar con End If.

Sentencia Select CaseLa sentencia Select Case puede verse como uncaso generalizado de If, aunque en vez de eje-cutar una porción de código dependiendo deuna condición lógica, divide la ejecución en ungrupo de casos disjuntos (es decir que sólo seejecutará uno de ellos).Su sintaxis puede resumirse de esta manera:

Select Case Expresión

Case Caso1

' código si se cumple el Caso1

' .....

Case Caso2, Caso3, Caso4

' código si se cumple el Caso2 el Caso3 o

el Caso4

' .....

Case Else

' código si no se cumple ningún caso

' .....

End Select

Cuando se alcanza una sentencia Select Case,se evalúa la expresión y se obtiene un valor.Luego, se compara el valor obtenido con el ca-so1; si son iguales, se ejecuta el código com-prendido entre la línea siguiente a la que con-tiene el caso1, y la próxima línea que contengauna palabra case o end select. Si los valoresno coinciden, se evalúa el caso2 y se procedede la misma manera que para el caso1. Si nin-guno de los casos coincide con el valor de laexpresión, y existe una línea con Case Else, seejecuta el bloque de código correspondiente. Sino hay un Case Else, se continúa con la líneasiguiente a la línea End Select. Veamos un pe-

queño ejemplo para entender mejor el funcio-namiento de Select Case. Supongamos que te-nemos una variable que contiene un número demes, y queremos mostrar en pantalla la canti-dad de días de ese mes (para simplificar, no va-mos a considerar años bisiestos). El código ne-cesario es el siguiente:

Select Case Numerotes

Case 1,3,5,7,8,10,12

Console.WriteLine(31)

Case 2

Console.WriteLine(28)

Case Else

Console.WriteLine(30)

End Select

Sentencia ForLa sentencia For permite ejecutar un bloque decódigo una cantidad determinada y fija de ve-ces. La sintaxis básica del constructor For es lasiguiente:

For i=0 To 10

'Sentencias a ejecutar

Next

Analicemos cada elemento de esta estructura.El constructor siempre comienza con la pala-bra clave For seguida de la variable contadora ysu valor inicial (i=0). Sigue la palabra clave Toy, por último, el valor final de la variable conta-dora (en el ejemplo es el valor 10). Después, enuna nueva línea escribimos el bloque de códigoque queremos repetir (una o más líneas de có-digo) y cerramos la estructura con la palabraclave Next, que también es obligatoria y marcael fin del bloque de repetición. Si queremos co-nocer la cantidad de veces que se ejecutará elbloque de código, debemos restar el valor finalde la variable al valor inicial y sumarle 1, ya quela iteración comienza con el valor inicial. Si rea-lizamos este ejercicio con el código del ejemplo

4646

1. EL LENGUAJE .NET

038a047.qxp 06/07/2008 10:53 p.m. PÆgina 46

Page 37: El lenguaje .Net 1 - WordPress.com · 2011. 10. 26. · El lenguaje .Net 1 Este capítulo nos dará una introducción a las características del lenguaje .Net, qué es el Framework,

4747

anterior, debemos hacer 10 (el valor final) me-nos 0 (el valor inicial) más 1, que nos da el va-lor 11; es decir, el código que esté dentro delFor se ejecutará 11 veces.En condiciones normales como las del ejemploanterior, la variable contadora se incrementa en 1en cada iteración. Hay situaciones en las que ne-cesitamos que los pasos sean mayores; es decir,que en cada iteración la variable contadora se in-cremente en una cantidad distinta de 1. Para lo-grarlo, podemos usar la palabra clave Step, quepermite indicar el paso o valor en que se incre-menta el contador en cada iteración. Por ejem-plo, si queremos mostrar los números pares del 2al 10, podemos escribir lo siguiente:

For i=2 To 10 Step 2

Console.WriteLine(i)

Next

Aquí, la porción de código Step 2 indica queen cada iteración se sume 2 al valor actual dela variable contadora. Al poder modificar elvalor que se le suma a la variable contadoraen cada iteración, podemos hacer que el cicloFor cuente hacia atrás, usando un valor nega-tivo como paso.

Sentencia WhileMuchas veces necesitamos repetir un bloque decódigo, pero no sabemos de antemano la canti-dad de iteraciones que debemos hacer, porqueesto dependerá de alguna condición relaciona-da con el bloque mismo que se ejecuta comoparte de la iteración. En estos casos, el cons-tructor For no nos sirve, ya que dentro del blo-que por iterar no se puede alterar el valor de lavariable contadora. Para esta situación, conta-mos con un constructor llamado comúnmenteWhile, que permite la ejecución de un bloquede código repetidas veces mientras se cumplauna condición lógica. La sintaxis básica de lasentencia While es la siguiente:

While Condición

'Hacer algo

Loop

Como se aprecia en el ejemplo, el bloque se de-be cerrar con la palabra clave Loop. En ejecu-ción, cuando el código alcanza una sentenciaWhile, se evalúa la condición, y si es verdadera,se ejecuta el código que sigue hasta alcanzar lapalabra clave Loop. Ahí se vuelve a evaluar laexpresión de While, y si es verdadera, se vuelve aejecutar el bloque de código; en caso contrario, laejecución continúa en la línea siguiente a la pala-bra clave Loop.Veamos un breve ejemplo en elque se le pide al usuario que ingrese un númeroy se imprima en pantalla el cuadrado de éste. Laacción se repite hasta que el usuario ingresa elnúmero 0. Para hacer esto, debemos abrir VisualStudio e ir a Archivo/Nuevo Proyecto. En laparte central seleccionamos Aplicación de Con-sola. Luego de aceptar, dentro del Sub Main quese creó, escribimos el siguiente código:

Dim Numero As Integer

Numero = -1

While Numero <> 0

Console.Write (“Ingrese un número. Cero

para terminar:”)

Numero = Integer.Parse(Console.ReadLine())

Console.WriteLine(Numero ^ 2)

Loop

Console.WriteLine(“Hemos terminado. Presione

una tecla para salir”)

Console.ReadKey()

No nos preocupemos por ahora por las instruc-ciones que no conocemos (en el futuro trabajare-mos con aplicaciones Windows y no de consola).Presionando <F5>, podremos ejecutar la aplica-ción. Veremos que mientras ingresemos valoresdistintos de 0, el programa imprimirá el cuadra-do del número escrito y nos pedirá otro; así su-cesivamente hasta que ingresemos un 0.

Visual Basic .NET

038a047.qxp 06/07/2008 10:53 p.m. PÆgina 47

Page 38: El lenguaje .Net 1 - WordPress.com · 2011. 10. 26. · El lenguaje .Net 1 Este capítulo nos dará una introducción a las características del lenguaje .Net, qué es el Framework,

Cuando escribimos programas, normalmentenos encontramos con porciones de códigoque se repiten. En estos casos, resulta unabuena práctica escribirlas una sola vez y, lue-go, referenciarlas en cada ocasión en que seannecesarias. En el mundo de la programaciónestructurada, estas porciones de código se de-nominan procedimientos o funciones. Sibien la motivación de ambos es la misma, tie-nen entre sí semánticas diferentes. Los proce-dimientos están destinados a realizar tareasque no necesiten devolver nada a quien lasindicó (por ejemplo, el resultado es imprimiralgo en pantalla), en tanto que las funcionesdevuelven un valor a quien las llama (porejemplo, realizar un cálculo sobre la base dedatos proporcionados y brindar el resultado).

Procedimientos

En Visual Basic .NET, los procedimientos seimplementan usando la palabra clave Sub.Cada uno posee un nombre y un bloque decódigo que será el código por ejecutar cuan-do éste sea invocado. El bloque de código sedelimita por las palabras Sub y End Sub.Dentro del procedimiento podemos escribircualquier sentencia que necesitemos, incluso,llamar a otros procedimientos. Un procedi-miento se llama, simplemente, escribiendo sunombre. De manera opcional, se puede utili-zar la palabra clave Call más el Nombre-DelMetodo, pero no es obligatorio hacerlo

(esto se mantiene así por compatibilidad conversiones anteriores del lenguaje). Veamosun ejemplo de procedimiento. Supongamosque estamos trabajando en una aplicación deconsola con varias salidas por pantalla y quequeremos dividir las distintas salidas conuna secuencia de 80 guiones.Para lograrlo, escribimos un procedimientoque imprima los guiones y, luego, lo invoca-mos cada vez que sea necesario:

Sub ImprimirGuiones()

For i as Integer=1 To 80

Console.Write(“-“)

Next

End Sub

Luego, en el código de la aplicación, podemosusar este procedimiento cuantas veces preci-semos, escribiendo las siguientes líneas:

ImprimirGuiones()

Console.WriteLine(debe)

Console.WriteLine(haber)

ImprimirGuiones()

Console.WriteLine(saldo)

ImprimirGuiones()

Procedimientos y funciones Aprenderemos a utilizar herramientas que nos permitiránagilizar práctica de programador.

Cada procedimiento posee unnombre y un bloque de código

que será el que se deba ejecutarcuando éste sea invocado.

4848

1. EL LENGUAJE .NET

048a063.qxp 09/07/2008 06:32 p.m. PÆgina 48

Page 39: El lenguaje .Net 1 - WordPress.com · 2011. 10. 26. · El lenguaje .Net 1 Este capítulo nos dará una introducción a las características del lenguaje .Net, qué es el Framework,

4949

tro es un valor que podemos pasarle al proce-dimiento, y que éste recibe como si fuese unavariable. Al ver el parámetro como una varia-ble, el procedimiento puede utilizarlo para alte-rar su comportamiento.Modifiquemos el procedimiento ImprimirGuio-nes para que acepte un parámetro que le indiquela cantidad de guiones que se deben imprimir:

Sub ImprimirGuiones(ByVal cantidad As Integer)

For i As Integer=1 To cantidad

Console.Write(“-“)

Next

End Sub

En este ejemplo, el procedimiento recibe un pa-rámetro que representa la cantidad de caracterespor imprimir, y lo utiliza como límite superiordel ciclo For. Modifiquemos el ejemplo de usopara imprimir separadores de distinta longitud:

ImprimirGuiones(80)

Console.WriteLine(debe)

Console.WriteLine(haber)

ImprimirGuiones(40)

Console.WriteLine(saldo)

ImprimirGuiones(80)

Parámetros por valor y por referenciaVisual Basic .NET brinda dos formas de pasajede parámetros a un procedimiento o función:por valor o por referencia. Cuando se pasa unparámetro por valor, lo que se le pasa al proce-dimiento es una copia del valor original. Si elprocedimiento modifica el valor del parámetro,sólo afectará a la copia. Cuando se pasa un va-lor por referencia, lo que en realidad se está pa-sando es la dirección de memoria donde se al-macena el valor. Si se pasa un parámetro porreferencia, cualquier modificación que el proce-dimiento o función haga, se hará sobre el valororiginal, ya que se tiene la dirección de memoria

ParámetrosLos procedimientos como el visto anterior-mente son útiles, sin embargo muchas vecesnecesitamos que uno de ellos haga distintascosas de acuerdo al contexto donde se lo estéutilizando. Por ejemplo, siguiendo con el pro-cedimiento ImprimirGuiones, quizás haya si-tuaciones en las que tengamos que imprimirlos guiones, pero no exactamente 80. Enton-ces surge un planteo interesante: ¿escribimosun nuevo procedimiento que imprima la canti-dad de guiones necesaria?, ¿o modificamos elque ya tenemos para indicar cuántos guionesqueremos imprimir? Obviamente, la primeraalternativa no es la mejor, ya que estaríamosduplicando código y, además, solucionando uncaso particular, que luego quizá no nos sirvaotra vez y tengamos que escribir otro métodomás. La segunda alternativa, en cambio, espracticable y nos permitirá ahorrar código.La herramienta con la que contamos para indi-carle al procedimiento cuántos guiones quere-mos imprimir son los parámetros. Un paráme-

Los parámetros permiten que unprocedimiento se comporte cada

vez de manera diferente.

FIGURA 016 | Mediante el uso de parámetros, podemos variar el

comportamiento de los procedimientos.

Procedimientos y funciones

048a063.qxp 09/07/2008 06:32 p.m. PÆgina 49

Page 40: El lenguaje .Net 1 - WordPress.com · 2011. 10. 26. · El lenguaje .Net 1 Este capítulo nos dará una introducción a las características del lenguaje .Net, qué es el Framework,

donde está. Los parámetros por referencia sonuna herramienta para hacer que un procedi-miento se comunique con quien lo invocó, da-do que puede devolver valores mediante los pa-rámetros por referencia (también conocidos co-mo parámetros de salida).En Visual Basic .NET los parámetros por va-lor se especifican mediante el modificadorByVal, mientras que aquellos por referenciason especificados a través del modificadorByRef. Podemos ilustrar este concepto conun ejemplo simple. Supongamos que quere-mos escribir un procedimiento al que le pase-mos un nombre de persona, y nos devuelva,en un parámetro, un saludo para ella. Esto sehace de la siguiente manera:

Sub Saludar(ByVal nombre As String, ByRef

saludo As String)

Saludo = “Hola “ & nombre

End Sub

En este caso, como el parámetro “saludo” espor referencia, al ser modificado dentro del pro-cedimiento, también cambiará su valor original.

Funciones

Las funciones son bloques de código quesiempre devuelven un valor a quien las lla-ma. En Visual Basic .NET las funciones sedefinen mediante la palabra clave Function.Además, luego de la lista de parámetros (si

5050

Los parámetros permitendevolver valores a quien llama a un procedimiento o función,

aunque no se recomienda su uso.

FIGURA 017 | Cuando se pasa un parámetro por valor, en la pila se coloca una copia,

en tanto que si es por referencia, se coloca la dirección de memoria del valor original.

Tipos de parámetros

Procedimiento

Llamador

Sub A (ByVal A1, ByRef A2)

End Sub 004

003

002

001Dim C, D as StringC = “Hola”

D = “Mundo”

A (C, D)

Pila

002

Hola

Mundo

Hola

1. EL LENGUAJE .NET

048a063.qxp 09/07/2008 06:32 p.m. PÆgina 50

Page 41: El lenguaje .Net 1 - WordPress.com · 2011. 10. 26. · El lenguaje .Net 1 Este capítulo nos dará una introducción a las características del lenguaje .Net, qué es el Framework,

5151

y devuelve un valor del mismo tipo. Tam-bién podemos ver que hay dos instruccionesReturn. Es importante saber que podemosusar todas las instrucciones Return que que-ramos o necesitemos, aunque debemos tenersiempre, por lo menos, una.

Parámetros opcionalesA veces ocurre que ya tenemos un procedi-miento escrito y se nos presenta una situa-ción en la que puede servirnos, pero necesi-taríamos pasarle un parámetro más para re-solver ese caso en particular. El problema esque deberemos buscar todos los lugaresdonde utilizamos el procedimiento paraagregar el parámetro en la llamada. Además,como el nuevo parámetro se usa para resol-ver un problema que antes no teníamos, nosabremos qué valor pasarle. Para resolver es-to, Visual Basic .NET nos da la posibilidadde crear parámetros opcionales, que no esnecesario pasar.Para declarar un parámetro como opcional,recurrimos a la palabra clave Optional, perohay que tener en cuenta que los parámetrosopcionales deben estar siempre al final de lalista de parámetros. Esto es importante, por-que si queremos agregar un parámetro más,éste deberá ser también opcional o insertar-se antes del primero de este tipo. Para termi-nar de comprender bien cómo hay que utili-zarlo, veamos un breve ejemplo referido aluso de parámetros opcionales:

Sub Procedimiento(ByVal a As Integer, Optional

ByVal b as Integer)

‘ Hacer algo con los parámetros

End Sub

‘ . . . . .

‘Ejemplo de uso:

Procedimiento(3,5)

Procedimiento(3)

es que tiene), se debe indicar el tipo de datodel valor devuelto, mediante la palabra Asseguida de un nombre de tipo. Otra diferen-cia importante con los procedimientos esque las funciones deben incluir la instruc-ción Return al menos una vez. Ésta se en-carga, básicamente, de devolver el valor dela función al llamador. Veamos un ejemplopara ilustrar el uso y la escritura de las fun-ciones. Supongamos que queremos escribiruna función que reciba dos valores y devuel-va la diferencia entre el mayor y el menor deellos. El código será el siguiente:

Function SumaEjemplo(ByVal a As Integer,

ByVal b as Integer) As Integer

If a > b Then

Return a – b

Else

Return b – a

End Function

Como podemos ver, en este ejemplo la fun-ción recibe dos parámetros de tipo Integer

La instrucción Return

Esta instrucción corta la ejecución y sale de lafunción. Es importante recordar esto, porque encaso de que haya que hacer alguna otra tareadentro de la función, deberemos hacerla antesdel Return; de lo contrario, nunca se ejecutará.

Hay que tener en cuenta quelos parámetros opcionalesdeben estar siempre al final de la lista de parámetros.

Procedimientos y funciones

048a063.qxp 09/07/2008 06:32 p.m. PÆgina 51

Page 42: El lenguaje .Net 1 - WordPress.com · 2011. 10. 26. · El lenguaje .Net 1 Este capítulo nos dará una introducción a las características del lenguaje .Net, qué es el Framework,

Una de las grandes diferencias sintácticas y se-mánticas entre Visual Basic .NET y su predecesores que VB.NET brinda soporte completo paraprogramación orientada a objetos. Si bien en suversión 6 intentó incluir soporte de orientación aobjetos, recién con la llegada de .NET ésta se hi-zo más sólida y formal. A continuación, veremoslos constructores que ofrece Visual Basic .NETpara escribir aplicaciones orientadas a objetos.

Creación de clases

Los dos conceptos más importantes y usadosen la programación orientada a objetos son lasclases y los objetos:

• Las clases son abstracciones de objetos de larealidad que se quieren modelar.

• Los objetos son instancias particulares de lasclases; cada uno pertenece a una clase (agru-pados por propiedades comunes) pero tieneidentidad propia.

La definición de una clase está comprendida porla asignación de un nombre de clase utilizado pa-ra agrupar sus métodos y propiedades. En VisualBasic .NET, la forma de definir una clase es a tra-vés de las palabras clave Class y End Class:

Class NombreDeLaClase

‘Aquí van los métodos y propiedades

‘ . . .

End Class

Todo el código (métodos o propiedades condiferentes modificadores de alcance) será par-

te de la clase y estará disponible para ser usa-do por sus instancias. Las clases son conside-radas como tipos de datos, en el sentido deque desde el punto de vista sintáctico, las ins-tancias son variables cuyo tipo de dato es laclase a la que pertenecen.Para crear una instancia de una clase, debe-mos definir el objeto como si fuese una varia-ble, utilizando la palabra clave Dim. Sin embar-go, a diferencia de los tipos básicos, para usarun objeto, además de declararlo, es preciso

5252

Sintaxis de clasesLos siguientes constructores nos permitirán escribiraplicaciones orientadas a objetos desde Visual Basic.

Modificadores de alcance

Los modificadores de alcance definen el alcance ovisibilidad de cada elemento de una clase. En VisualBasic .NET hay varios modificadores de este tipo,de los cuales los más conocidos son:

• Public:Todo lo definido como Public será acce-sible para cualquiera que use la clase, y dentrode la clase misma también.

• Private: Los definidos como Private sólo seránvisibles dentro de la clase; nadie más tendrá ac-ceso a ellos.

• Protected: Un elemento definido de este modoserá visible dentro de la clase y dentro de lasclases que hereden de ella.

Visual Basic .NET tiene soportecompleto para programación

orientada a objetos.

1. EL LENGUAJE .NET

048a063.qxp 09/07/2008 06:33 p.m. PÆgina 52

Page 43: El lenguaje .Net 1 - WordPress.com · 2011. 10. 26. · El lenguaje .Net 1 Este capítulo nos dará una introducción a las características del lenguaje .Net, qué es el Framework,

5353

crear la instancia, utilizando la palabra reservada New, de esta manera:

Dim objeto As Clase ‘Definimos el objeto

objeto = New Clase() ‘Creamos la instancia

Semánticamente, el operador New reserva unespacio en memoria para guardar el nuevo obje-to y llamar a un método especial de la clase, de-nominado Constructor.Toda clase hereda automáticamente de una clasedel framework .NET llamada Object, que tiene unconstructor utilizado en la mayoría de los casos.Sin embargo, cuando definimos una clase, tal veznecesitemos realizar alguna acción interna a ella almomento de crear una instancia. Para hacerlo, de-finimos un constructor propio, usando la palabraclave New como nombre de método, y cuandocreemos una nueva instancia de un objeto de cla-se Ejemplo, se invocará el método New creado:

Class Ejemplo

Sub New()

‘ Aquí podemos hacer alguna acción

End Sub

End Class

Variables de instanciaUn objeto puede contener variables que deter-minen su estado. En Visual Basic .NET pode-mos crear variables de instancia tal como si fue-sen variables comunes, con la diferencia de que

podemos reemplazar la palabra clave Dimpor un modificador de alcance. Si utilizamosDim, la variable tendrá un alcance privado.Supongamos que estamos modelando cuentasbancarias. Una cuenta bancaria tiene un saldo,que podemos mantener como variable de ins-tancia, de la siguiente forma:

Class CuentaBancaria

Private saldo As Double

End Class

En el ejemplo, saldo es una variable de instan-cia y, en este caso, es privada a la clase.

PropiedadesLos objetos tienen propiedades. Por ejemplo, siestamos modelando figuras geométricas, pode-mos identificar propiedades tales como la canti-dad de lados y la longitud de cada uno de ellos.En una clase, debemos modelar las propieda-des. Al hacerlo, estamos diciendo que las ins-tancias de la clase contarán con esas propieda-des, no obstante, aún no les damos valor. Lue-go, cuando creamos instancias, cada una tendrásus propios valores para las propiedades.En Visual Basic .NET, las propiedades delas clases se definen utilizando la palabraclave Property. A esta altura, el lector pue-de pensar que las propiedades y las variablesde instancia son lo mismo, pero no es así.La diferencia está en que, al escribir unapropiedad, podemos escribir código paracuando ésta recibe el valor y para cuando al-guien consulta el valor, con lo cual podre-mos hacer validaciones o cálculos. Además,uno de los fines de la programación orienta-da a objetos es lograr un alto grado de en-capsulamiento para facilitar el mantenimien-to del código. Se entiende por encapsula-miento el hecho de ocultar la implementa-ción real de partes de la clase a quien la usa.

En Visual Basic .NET podemoscrear variables de instancia tal

como si fuesen variables comunes.

Sintaxis de clases

048a063.qxp 09/07/2008 06:33 p.m. PÆgina 53

Page 44: El lenguaje .Net 1 - WordPress.com · 2011. 10. 26. · El lenguaje .Net 1 Este capítulo nos dará una introducción a las características del lenguaje .Net, qué es el Framework,

5454

Para ilustrar el uso de propiedades, suponga-mos que queremos que quien usa la claseCuentaBancaria pueda conocer y modificar elsaldo, que actualmente está como una variableprivada de instancia. Para esto, debemos escri-bir una propiedad con alcance público que de-vuelve y asigne valor a la variable de instancia.El código, entonces, quedará así:

Class CuentaBancaria

Private _saldo As Double

Public Property Saldo As Double

Get

Return _saldo

End Get

Set(ByVal value As Double)

_saldo = value

End Set

End Property

End Class

Analicemos un poco este código de ejemplo.Las palabras Public Property Saldo AsDouble indican que se está definiendo unapropiedad pública llamada en este caso “Sal-do”, de tipo Double. A continuación, vienelo que se denomina getter, que es la porciónde código que se ejecutará cuando alguien leael valor de la propiedad.

En Visual Basic .NET, laspropiedades de las clases sedefinen utilizando la palabra

clave Property.

FIGURA 018 | Cuando alguien lee el valor de la propiedad, se invoca el getter;

y cuando se asigna un valor, se invoca el setter.

Invocar el setter y el getter

Cuando creamos una instancia de clase, se ejecuta el método New, lla-mado Constructor.

Cuando asignamos valor a la propiedad se invoca el setter de la clase.El parámetro del setter recibe automáticamente el valor que seencuentra a la derecha del operador de asignación.

Cuando consultamos el valor de la propiedad, se invoca el getter, queactúa como una función devolviendo el valor de la propiedad.

1

2

3

1

2

3

Dim cuenta As CuentaBancaria

cuenta = New CuentaBancaria()

cuenta.Saldo = 1000

Double s = cuenta.Saldo

Class CuentaBancariaPublic Sub New()End Sub

Private_saldo As DoublePublic Property Saldo As Double

Set (ByVal value As Double)_saldo = value

End Set

GetReturn _saldo

End GetEnd Property

End Class

1. EL LENGUAJE .NET

048a063.qxp 09/07/2008 06:33 p.m. PÆgina 54

Page 45: El lenguaje .Net 1 - WordPress.com · 2011. 10. 26. · El lenguaje .Net 1 Este capítulo nos dará una introducción a las características del lenguaje .Net, qué es el Framework,

5555

Esta porción de código se comporta comouna función, que debe tener, al menos, unainstrucción Return para devolver el valor de lapropiedad.De manera similar, sigue una porción de códi-go llamada setter, que indica el código porejecutar cuando alguien asigne valor a la pro-piedad. El setter debe tener un parámetro delmismo tipo de la propiedad.Desde el lado del cliente de la clase, el accesoa la propiedad es totalmente transparente y sepuede ver como si fuese una variable de ins-tancia normal:

Dim cuenta As CuentaBancaria

cuenta = New CuentaBancaria()

cuenta.Saldo = 1000

Console.WriteLine(cuenta.Saldo)

Las propiedades no siempre deben tener ungetter y un setter. Si queremos que los clien-tes de la clase sólo conozcan el valor de lapropiedad pero no puedan modificarlo, po-demos hacerla de sólo lectura. Para lograrlo,agregamos el modificador Readonly antesde la palabra Property y, además, omitimosel setter. Para ilustrar este caso, modificamosla clase CuentaBancaria para no guardar elsaldo en una variable de instancia, sino quequeremos calcularlo como la diferencia entreel haber y el debe de la cuenta, que son va-riables de instancia. Además, no queremosque el saldo sea modificado.

Nuestra clase quedará así:

Class CuentaBancaria

Private _debe, _haber As Double

Public Readonly Property Saldo As Double

Get

Return _haber - _debe

End Get

End Property

End Class

En el ejemplo, el getter se ocupa de hacer elcálculo del saldo y de devolverlo como valorde la propiedad. Como una propiedad puedeser de sólo lectura, también puede ser desólo escritura, mediante el modificador Wri-teonly y omitiendo el getter. Así, el clientede la clase podrá asignarle valores a la pro-piedad, pero no podrá consultarla.

MétodosLos objetos se caracterizan por su estado ypor su comportamiento. El estado está da-do por las propiedades y variables de ins-tancia, mientras que el comportamiento es-tá dado por los métodos. Los métodos sonlos procedimientos y funciones que un ob-jeto puede realizar y que pueden modificarsu estado. En Visual Basic .NET los méto-dos se escriben como cualquier procedi-miento o función, y su visibilidad dependede los modificadores de alcance empleados.Continuando con la clase CuentaBancariaque hemos definido, ya que el saldo nos haquedado como una propiedad de sólo lectu-ra, la única forma de modificarlo es me-diante depósitos y extracciones, que seránsendos métodos de la clase y que cambiaránel valor de las variables de instancia (_debey _haber). El código es el siguiente:

Los métodos se escriben comocualquier procedimiento

o función, y su visibilidad dependede los modificadores de alcance.

Sintaxis de clases

048a063.qxp 09/07/2008 06:33 p.m. PÆgina 55

Page 46: El lenguaje .Net 1 - WordPress.com · 2011. 10. 26. · El lenguaje .Net 1 Este capítulo nos dará una introducción a las características del lenguaje .Net, qué es el Framework,

La herencia permite especificar una relaciónentre dos clases, mediante la cual la clase he-redera recibe los atributos y el comportamien-to de su clase padre. La herencia puede servista como una relación “es un”. Por ejemplo,un triángulo es una figura, un cuadrado es unafigura; por lo tanto, podemos decir que eltriángulo y el cuadrado heredan de figura. EnVisual Basic .NET la herencia se especificautilizando la palabra clave Inherits, seguidadel nombre de la clase de la que se hereda.Para continuar con el ejemplo de la figura geo-métrica, podemos escribir el siguiente código.En este ejemplo, estamos especificando que laclase Triángulo hereda de la clase Figura.

Public Class Figura

Public Lados As Integer

End Class

Public Class Triangulo

Inherits Figura

‘Código de la clase triángulo

End Class

5656

Class CuentaBancaria

Private _debe, _haber As Double

Public Readonly Property Saldo As Double

Get

Return _haber - _debe

End Get

End Property

Public Sub Depositar(monto As Double)

_haber = _haber + monto

End Sub

Public Sub Extraer(monto As Double)

_debe = _debe + monto

End Sub

End Class

HerenciaUna de las características más útiles e interesan-tes de la programación orientada a objetos es lareutilización de código mediante la herencia.

FIGURA 019 | Mediante la herencia se establecen jerarquías de objetos,

que pueden verse gráficamente mediante un árbol similar a los árboles genealógicos.

Jerarquía de objetosObject

Figura

Triángulo CírculoCuadrilátero

Cuadrado RomboTrapecio

1. EL LENGUAJE .NET

048a063.qxp 09/07/2008 06:33 p.m. PÆgina 56

Page 47: El lenguaje .Net 1 - WordPress.com · 2011. 10. 26. · El lenguaje .Net 1 Este capítulo nos dará una introducción a las características del lenguaje .Net, qué es el Framework,

5757

llamado EmitirSonido. Como el sonido quese emita dependerá de cada tipo de mamíferoen particular, podemos hacer que cada clasederivada tenga su propia implementación delmétodo, imprimiendo en pantalla la onomato-peya del sonido. Vamos a verlo en código:

Public Class Mamifero

Public Overridable Sub EmitirSonido()

End Sub

End Class

Public Class Perro

Inherits Mamifero

Public Overrides Sub EmitirSonido()

Console.WriteLine(“Guau…”)

End Sub

End Class

Public Class Gato

Inherits Mamifero

Public Overrides Sub EmitirSonido()

Console.WriteLine(“Miau…”)

End Sub

End Class

EjerciciosAntes de pasar a algunos ejercicios resueltospara afirmar los conceptos estudiados, veamosuna serie de instrucciones y herramientas quevamos a necesitar.

También podemos decir que la clase Trián-gulo es una “subclase” de Figura. ComoTriángulo hereda de Figura, contiene tam-bién el atributo Lados, con lo cual ya hemoslogrado reutilizar parte del código.Si creamos una instancia de la clase Triángu-lo, podremos escribir lo siguiente:

Dim miTriangulo As New Triangulo()

miTriangulo.Lados = 3

Redefinición de métodosLa herencia no sería muy valiosa si cada cla-se derivada quedara atada al comportamien-to de la clase padre. En cualquier lenguajeorientado a objetos, una clase hija debe po-der redefinir el comportamiento de su pa-dre, para adaptarlo a sus propias necesidadesy características. En Visual Basic .NET laforma de redefinir y rescribir métodos esmediante la palabra clave Overrides, peropara que un método pueda ser redefinido,en la clase base debe contener la palabraOverridable (que se puede rescribir).La técnica consiste en identificar aquellosmétodos que será necesario rescribir en lasclases hijas y colocarles la palabra claveOverridable. Luego, cada clase hija puederedefinir estos métodos (no es obligatoriohacerlo), proveyendo el código necesario pa-ra actuar de acuerdo con sus necesidades.Para ilustrar este concepto, imaginemos quetenemos una clase Mamifero con un método

LA HERENCIA PUEDE SER VISTA COMO UNA RELACIÓN “ES UN”.POR EJEMPLO, UN TRIÁNGULO ES UNA FIGURA, UN CUADRADO

ES UNA FIGURA; POR LO TANTO, PODEMOS DECIR QUE ELTRIÁNGULO Y EL CUADRADO HEREDAN DE FIGURAS.

Sintaxis de clases

048a063.qxp 09/07/2008 06:33 p.m. PÆgina 57

Page 48: El lenguaje .Net 1 - WordPress.com · 2011. 10. 26. · El lenguaje .Net 1 Este capítulo nos dará una introducción a las características del lenguaje .Net, qué es el Framework,

5858

Aplicaciones de consolaPara los ejercicios, vamos a hacer unas senci-llas aplicaciones de consola. Éstas son peque-ños programas con una interfaz muy simple(sin ventanas), muy similar a un programa deDOS, pero basadas en la consola del sistemaoperativo Windows 2000 o superior.Para crear una aplicación de consola con Visual Studio 2005, debemos ir al menú Ar-chivo/Nuevo/Proyecto. Al hacerlo, se desple-gará una ventana donde tenemos que elegir el ti-po de proyecto que queremos hacer, que será“Aplicación de Consola”. Por último, en la parteinferior de esta ventana, ingresamos el nombreque le queremos dar a nuestro proyecto.

La clase ConsoleEl framework .NET nos provee de una clasellamada Console, con métodos para acceder ala consola en este tipo de aplicaciones. Losdos métodos que más vamos a usar son WriteLine y ReadLine. El primero nos per-mite escribir mensajes en la consola, mientrasque el segundo sirve para leer una cadena detexto que el usuario ingresó en ella.En algunos ejercicios, necesitaremos interpretarel texto leído con el método ReadLine como unnúmero entero, para lo cual utilizaremos el mé-todo Parse del tipo de dato Integer, haciendo

Integer.Parse. Este método recibe una cadenade texto y devuelve el valor numérico adecuado,o dispara una excepción si el texto no corres-ponde a un entero válido.

El método MainToda aplicación de consola debe tener unmétodo llamado Main, que es el punto deentrada de la aplicación. Al momento de eje-cutar una aplicación de consola, el primermétodo que se ejecuta es Main; es decir queahí debemos colocar todo el código y las lla-madas que necesitemos hacer al comienzo dela aplicación. Al crear una nueva aplicaciónde consola con Visual Studio 2005, automáti-camente se crea un método Main vacío, paraque podamos empezar a trabajar.

Una buena práctica

A medida que avanzamos en la lectura de todosestos nuevos conceptos, es conveniente ir realizan-do los diferentes ejemplos en la consola, y probarlas distintas variantes para comprender, realmente,cuál es el efecto que se obtiene en cada caso. Éstaes una práctica imprescindible para internalizar ca-da uno de los temas tratados.

FIGURA 020 | Para crear

un nuevo proyecto

de consola, elegimos

la plantilla correspondiente

cuando Visual Studio

lo solicite.

1. EL LENGUAJE .NET

048a063.qxp 09/07/2008 06:33 p.m. PÆgina 58

Page 49: El lenguaje .Net 1 - WordPress.com · 2011. 10. 26. · El lenguaje .Net 1 Este capítulo nos dará una introducción a las características del lenguaje .Net, qué es el Framework,

5959

Veamos nuestro primer ejemplo utilizando elentorno de Visual Basic. En este caso, vamos aescribir una aplicación que muestre por panta-lla los números impares entre el 1 y el 20,usando un ciclo For pero sin usar Step. Pararealizar este ejercicio, vamos a escribir un cicloFor que cuente desde 1 hasta 20, y como nopodemos usar el Step para ir de dos en dos so-bre los números impares, vamos a usar un Ifpara determinar si el valor de la variable conta-dora del For es par o impar. Como todos losnúmeros pares son divisibles por 2, para sabersi un número es impar, podemos preguntar sino es divisible por 2; es decir, si el resto de di-vidirlo por 2 es 1.Vayamos entonces al código. Dentro del méto-do Main creado cuando generamos el proyectocon Visual Studio, escribimos el código:

Dim i As Integer

For i = 1 To 20

If i Mod 2 = 1 Then

Console.WriteLine(i)

End If

Next

Recordemos que el operador Mod devuelveel resto de dividir el primer operando por el

segundo (con división entera, por supuesto).Al ejecutar la aplicación (presionando <F5>),veremos que se ejecuta pero se cierra inme-diatamente, sin que alcancemos a ver los re-sultados. Esto es así porque el IDE crea laconsola para ejecutar la aplicación, y cuandoésta termina, la consola se cierra en formaautomática. Para evitarlo, y poder ver la salidade nuestro programa, agregamos una llamadaa Console.ReadKey() luego de la palabraNext. Esto hará que el programa se quedeesperando la presión de una tecla.Si presionamos cualquiera, la aplicación ter-minará, pero si ejecutamos la aplicación, vere-mos la consola con los números impares en-tre el 1 y el 19.

El mes correspondiente

Veamos otro ejemplo. En este caso, vamos a es-cribir una aplicación que pida un número de mesy muestre el nombre correspondiente. Repetimosla operación hasta que el usuario ingrese un cerocomo número de mes.

Ejercicios prácticosA continuación, desarrollaremos algunos ejemplos prácticosen los que aplicaremos los conceptos ya aprendidos.

FIGURA 021 | Vemos cómo la aplicación de consola se

queda en espera, mostrando los resultados obtenidos.

Console.ReadKey() hará que elprograma se quede esperando

la presión de una tecla.

048a063.qxp 09/07/2008 06:33 p.m. PÆgina 59

Page 50: El lenguaje .Net 1 - WordPress.com · 2011. 10. 26. · El lenguaje .Net 1 Este capítulo nos dará una introducción a las características del lenguaje .Net, qué es el Framework,

6060

Para concretar este ejercicio, debemos utilizardos de las estructuras de control que hemosaprendido: While para repetir hasta que elusuario ingrese un cero, y Select Case paraseleccionar el nombre del mes según el núme-ro ingresado. En este ejercicio necesitamosusar el método ReadLine de la clase Console,para leer el valor ingresado por el usuario yasignarlo a una variable de tipo entero. En unanueva aplicación de consola, agregamos el si-guiente código dentro del método Main:

Dim mes As Integer = 1

Dim nombreMes As String = “”

While mes <> 0

Console.Write(“Ingrese el número de mes: “)

mes = Console.ReadLine()

If mes <> 0 Then

Select Case mes

Case 1

nombreMes = “Enero”

Case 2

nombreMes = “Febrero”

Case 3

nombreMes = “Marzo”

Case 4

nombreMes = “Abril”

Case 5

nombreMes = “Mayo”

Case 6

nombreMes = “Junio”

Case 7

nombreMes = “Julio”

Case 8

nombreMes = “Agosto”

Case 9

nombreMes = “Septiembre”

Case 10

nombreMes = “Octubre”

Case 11

nombreMes = “Noviembre”

Case 12

nombreMes = “Diciembre”

End Select

Console.WriteLine(“El mes ingresado

es {0}”, nombreMes)

End If

End While

Al final, se usa el método WriteLine, que nohabíamos empleado aún, con un parámetroadicional al texto que queremos imprimir. Es-ta sintaxis implica que el texto {0} se reem-plazará por el valor del segundo parámetrodentro de la cadena por imprimir. Si tenemosotro valor que queremos imprimir, podemosagregar el parámetro y referenciarlo como{1} dentro de la cadena.Ahora veamos una variante del ejercicio ante-rior, escribiendo una función que devuelva elnombre del mes que se le pasa como paráme-tro. Simplemente, debemos crear una funciónde tipo String, con un parámetro por valor yde tipo Integer, colocar dentro de ella el Se-lect Case que escribimos en el ejercicio ante-rior y reemplazar el Select Case por el llama-do a la función. El encabezado de la funciónpuede ser éste:

Function ObtenerNombreMes(ByVal mes As

Integer) As String

No debemos olvidarnos de colocar la instrucciónReturn al final de la función, porque, de no ha-cerlo, la función devolverá una cadena vacía.

Podemos asignar un valor o una variable a otra, sin hacerla conversión explícita de tipos.

048a063.qxp 09/07/2008 06:33 p.m. PÆgina 60

Page 51: El lenguaje .Net 1 - WordPress.com · 2011. 10. 26. · El lenguaje .Net 1 Este capítulo nos dará una introducción a las características del lenguaje .Net, qué es el Framework,

6161

Reemplazando el Select por la llamada a la fun-ción, el código del procedimiento Main queda:

Sub Main()

Dim mes As Integer = 1

Dim nombreMes As String = “”

While mes <> 0

Console.Write(“Ingrese el número de mes: “)

mes = Console.ReadLine()

If mes <> 0 Then

nombreMes = ObtenerNombreMes(mes)

Console.WriteLine(“El mes ingresado

es {0}”, nombreMes)

End If

End While

Console.ReadKey()

End Sub

Números fraccionariosEn este caso, veremos cómo crear una clasepara representar números fraccionarios. Éstadeberá tener dos variables de instancia (priva-das) para mantener el valor del numerador ydel denominador de la fracción, además desendas propiedades para hacer públicas las va-riables de instancia.

La forma más sencilla de agregar una nuevaclase es utilizando la plantilla que nos brindaVisual Studio. Para esto, basta con hacer cliccon el botón derecho sobre el ícono de pro-yecto en el Explorador de Soluciones, seleccio-nar la opción Agregar y, luego, Clase. VisualStudio nos pedirá que escribamos el nombrede la clase, y después de aceptar, agregará unnuevo archivo al proyecto, con la definición(aunque vacía por ahora) de la nueva clase:

Public Class Fraccion

End Class

Si repasamos los conceptos aprendidos sobrecreación de clases, recordaremos que la pala-bra clave fundamental aquí es Class.A continuación, debemos agregar las variables de instancia para el numerador y el denominador,

FIGURA 022 | Reemplazando el Select Case por

una función, nuestro programa se sigue comportando

como debe y el código es más claro.

FIGURA 023 | Visual Studio nos brinda

una plantilla para agregar una nueva clase.

La forma más sencilla de agregar una nueva clase es utilizando la plantilla que

nos brinda Visual Studio.

048a063.qxp 09/07/2008 06:33 p.m. PÆgina 61

Page 52: El lenguaje .Net 1 - WordPress.com · 2011. 10. 26. · El lenguaje .Net 1 Este capítulo nos dará una introducción a las características del lenguaje .Net, qué es el Framework,

6262

además de las propiedades para exponerlas pú-blicamente. En este caso, sólo mostraremoscómo escribir el código para el numerador, yel lector deberá completar el ejercicio agregan-do el denominador. Hasta ahora, el código dela clase queda de este modo:

Public Class Fraccion

Private _numerador As Integer

Public Property Numerador() As Integer

Get

Return _numerador

End Get

Set(ByVal value As Integer)

_numerador = value

End Set

End Property

End Class

Ahora bien, tratemos de crear una nueva clasepara representar números fraccionarios, comola del ejercicio anterior, y que tenga un cons-tructor que pida al usuario que ingrese en laconsola los valores para el numerador y el de-nominador. Para cumplir con este objetivo, va-mos a escribir realmente muy poco código, yaque usaremos la herencia para aprovechar laclase escrita en el Ejercicio 4. Con Visual Stu-dio creamos una nueva clase llamada Fraccion-ConConsola y la hacemos heredar de la claseFraccion, mediante la palabra clave Inherits:

Public Class FraccionConConsola

Inherits Fraccion

End Class

Con esto, como vimos antes, estamos heredan-do las características (propiedades y comporta-miento) de la clase Fraccion, es decir que la cla-

se FraccionConConsola tiene una propiedad lla-mada Numerador y otra llamada Denominador.Lo que nos queda por hacer, entonces, escrear el constructor como pide el enunciadodel ejercicio. Recordemos que el constructores un método especial llamado New.

Ejercicios para seguirpracticando

Ejercicio 1: Modificar la clase Fraccion del últimoejercicio para agregar una propiedad de sólo lectu-ra que devuelva el valor real de la fracción (la divi-sión real entre el numerador y el denominador).Ejercicio 2: Modificar la clase Fraccion para validarque el denominador no sea 0 y, así, evitar erroresde división por 0 al usar la propiedad definida en elEjercicio 1. Si el valor que se le asigna es 0, deberámostrar un mensaje de error en la consola, asig-narle 1 al denominador y 0 al numerador. Comoayuda, el setter de la propiedad puede contenertodo el código que se desee.Ejercicio 3: Modificar la clase Fraccion otra vez,agregando un método (Función) llamado Multipli-car, que reciba como parámetro una instancia de laclase Fraccion y devuelva como resultado un nue-vo número fraccionario que sea el resultado demultiplicar la instancia actual por la que se recibecomo parámetro. Para multiplicar dos fracciones,hay que multiplicar los numeradores y los denomi-nadores (por ejemplo, ½ * ¾ es 3/8).

Para asociar variables con propiedades podemos

nombrarlas igual, colocando unguión al nombre de la variable.

048a063.qxp 09/07/2008 06:33 p.m. PÆgina 62

Page 53: El lenguaje .Net 1 - WordPress.com · 2011. 10. 26. · El lenguaje .Net 1 Este capítulo nos dará una introducción a las características del lenguaje .Net, qué es el Framework,

6363

Escribamos el código del constructor pa-ra pedir los valores:

Sub New()

Console.Write(“Ingrese el numerador: “)

Numerador = Console.ReadLine()

Console.Write(“Ingrese el denominador: “)

Denominador = Console.ReadLine()

End Sub

Lo que estamos haciendo en el construc-tor es mostrar un par de carteles al usuariopara que ingrese los valores y asignarlos alas variables privadas, pero haciendo usode las propiedades de la clase Fraccion.Esto es todo lo que necesitamos hacer paraeste ejercicio. Mediante este ejemplo, pode-mos ver algo de la potencia que nos ofrecela herencia. Si no hubiésemos heredado dela clase Fraccion, deberíamos haber escritootra vez el código de las propiedades y delas variables de instancia.Es conveniente a esta altura del curso re-pasar los conceptos desarrollados en el li-bro Introducción a la programación, para refor-zar los temas más complejos.

Ejercicios para seguirpracticando

Ejercicio 4: Escribir una clase Empleado con unapropiedad llamada Nombre y un método “rede-finible” llamado HacerTarea. Escribir dos clasesderivadas de Empleado, llamadas Obrero y Ge-rente. Redefinir el método HacerTarea de la cla-se Obrero para que muestre en la consola eltexto “Trabajar”. Redefinir el método HacerTa-rea de la clase Gerente para que muestre porpantalla el texto “Mandar”.Ejercicio 5: Siguiendo con el Ejercicio 4, en elmódulo donde está el método Main, escribir unmétodo llamado MostrarTrabajo, que reciba co-mo parámetro una instancia de la clase Emplea-do e invoque el método HacerTarea del objetoque recibe. Por último, en el método Main, crearuna instancia de la clase Obrero y otra de laclase Gerente, e invocar el método MostrarTra-bajo con ambas. Se puede consultar el libro In-troducción a la programación para repasar con-ceptos de herencia y polimorfismo.Ejercicio 6: Redefinir el método ToString de laclase Empleado para que muestre el nombrepor pantalla. Cabe recordar que este métodopertenece a la clase Object, de la que todaslas demás clases heredan por defecto (aun-que no se haga explícitamente mediante lapalabra Inherits). Dentro del método Main,crear una nueva instancia de la clase Obrerollamada obrero1, asignar valor a la propiedadNombre y escribir la siguiente línea:

Console.WriteLine(obrero1)

Ejecutar la aplicación y analizar los resulta-dos. ¿Qué se mostró en la consola?

Asignamos valor a lasvariables de instancia

mediante laspropiedades porque lasvariables de instanciaestán como privadas,

y con ese alcance sólola clase que las contienepuede acceder a ellas.

048a063.qxp 09/07/2008 06:33 p.m. PÆgina 63

Page 54: El lenguaje .Net 1 - WordPress.com · 2011. 10. 26. · El lenguaje .Net 1 Este capítulo nos dará una introducción a las características del lenguaje .Net, qué es el Framework,

Hasta ahora conocimos el entorno de VisualStudio .NET 2005, sus principales caracterís-ticas, componentes y modo de funcionamien-to. Ahora llega el turno de C# 2005.

El lenguaje C#

C# fue creado por Microsoft con el propó-sito de ser el mejor lenguaje de programa-ción que exista para escribir aplicacionesdestinadas a la plataforma .NET. Combinala facilidad de desarrollo propia de VisualBasic con el poderío del lenguaje C++, unlenguaje con el cual se ha escrito la mayorparte de la historia del software y de los sis-temas operativos de todos los tiempos. Enlíneas generales, podemos decir que es unlenguaje de programación orientado a obje-tos simple y poderoso. Una muestra de estoes que las aplicaciones desarrolladas en élpodrán funcionar tanto en Windows comoen dispositivos móviles, ya sea un teléfonocelular o una PDA.

Características fundamentalesLo primero que debemos saber es que po-dremos crear una gran diversidad de progra-mas utilizando este lenguaje: desde aplica-ciones de consola, aplicaciones para Win-dows o aplicaciones Web, hasta software pa-ra dispositivos móviles, drivers y libreríaspara Windows. C# ha evolucionado notable-mente desde sus primeras versiones, al in-corporar funcionalidades que mejoran y fa-cilitan la escritura de código, la seguridad detipos y el manejo automático de memoria.

Microsoft Visual C# 2005C# se está perfilando como “el lenguaje” de desarrollo de Microsoft .NET. Conozcamos el poder que nos ofrece.

C# es un lenguaje de programación orientado

a objetos simple y poderoso.

Sintaxis básica del lenguaje

La sintaxis de C# es muy parecida a la de C,C++ y Java. Para el diseño de este lenguaje,Microsoft decidió modificar o añadir única-mente aquellas cosas que en C no tienen unarelativa equivalencia. Por ejemplo, un datopara tener en cuenta es que en C# todas lasinstrucciones y declaraciones deben terminarcon “;” (punto y coma), salvo cuando seabra un bloque de código. A diferencia de loque sucede en Visual Basic, una instrucciónque sea muy larga puede ponerse en varias lí-neas, sin ingresar ningún tipo de signo espe-cial al final de cada una.El compilador comprende que todo formaparte de la misma instrucción, hasta que en-cuentra el punto y coma:

A = Metodo(argumento1, argumento2, argumento3

, argumento4, argumento5, argumento6

, argumento7, argumento8);

Diferencias de sintaxis con Visual BasicEn el siguiente fragmento de código, veremoslas diferencias de una misma función escritaen Visual Basic y en C#:

6464

1. EL LENGUAJE .NET

064a071.qxp 06/07/2008 10:56 p.m. PÆgina 64

Page 55: El lenguaje .Net 1 - WordPress.com · 2011. 10. 26. · El lenguaje .Net 1 Este capítulo nos dará una introducción a las características del lenguaje .Net, qué es el Framework,

6565

yorQueCinco), la línea donde termina esafunción (End Function). El otro bloque co-rresponde al contexto If, compuesto por laúnica línea que hay entre el principio de esecontexto (If numer > 5 then) y la que indi-ca su final (End If). Este tipo de bloque enVisual Basic que marca el principio y el finde la función y el código contenido hace quela legibilidad sea clara y sencilla.La misma función escrita en C# marca que losbloques están claramente delimitados por llaves,{ y }, ambos del mismo modo. Detrás de la lí-nea en la que se declara el método, no está elpunto y coma, igual que en la línea del If, lo cualindica que la llave de apertura del bloque corres-pondiente se podría haber escrito a continua-ción, y no en la línea siguiente.Para comentar el código utilizamos //, a di-ferencia de Visual Basic .NET, donde se usauna comilla simple.

Operadores

C# proporciona un conjunto de operadores,símbolos que especifican las operaciones quedeben realizarse en una expresión. Por lo ge-neral, en las enumeraciones se permiten lasoperaciones de tipos integrales, como ==, !=,<, >, <=, >=, binary +, binary -, ^, &, |,~, ++, — y sizeof().

Veamos algunos ejemplos de los operadoresmás comunes:

Console.WriteLine(6 + 9); // operador de suma

// concatenación de cadenas

Console.WriteLine(“2” + “7”);

// concatenación de cadenas

Console.WriteLine(2.0 + “9”);

// operador de comparación

Console.WriteLine(8 > 12);

// operador de división

¿Qué es una DLL?

Una DLL (Dynamic Link Library) es un conjuntode funciones o clases que pueden ser accedidasy utilizadas por otros programas en tiempo deejecución. Estas librerías pueden crearse desdeC# o desde otros lenguajes.

FUNCIÓN ESCRITA EN VISUAL BASICPublic Function NumeroMayorQueCinco(numer

as integer) as boolean

‘Comparo si el parámetro numer contiene

un valor mayor a 5

if numer > 5 then

NumeroMayorQueCinco = true

end if

End Function

FUNCIÓN ESCRITA EN C#public bool NumeroMayorQueCinco(int numer)

{

//Comparo si el parámetro numer contiene

un valor mayor a 5

if (numer > 5)

{

return true;

}

return false;

}

En la función escrita en Visual Basic .NET.encontramos dos bloques de código. El pri-mero es el contexto que crea la función, esdecir, la línea donde se declara la función deltipo public (Public Function NumeroMa-

Microsoft Visual C# 2005

064a071.qxp 06/07/2008 10:56 p.m. PÆgina 65

Page 56: El lenguaje .Net 1 - WordPress.com · 2011. 10. 26. · El lenguaje .Net 1 Este capítulo nos dará una introducción a las características del lenguaje .Net, qué es el Framework,

Console.WriteLine(14 / 2);

// operador de multiplicación

Console.WriteLine(5 * 6);

Éstos son los resultados obtenidos a partir deluso de los operadores:15

27

29

False

7

30

Variables

Muchos de los lenguajes orientados a objetosproporcionan los tipos agrupándolos de dosformas: los tipos primitivos del lenguaje, comonúmeros o cadenas, y el resto de tipos creados

a partir de clases. C# cuenta con un sistemade tipos unificado, el CTS (Common TypeSystem), que proporciona todos los tipos de da-tos como clases derivadas de la clase de baseSystem.Object. El framework .NET divide lostipos en dos grandes grupos: los tipos valor ylos tipos referencia. Cuando se declara una va-riable que es de un tipo valor, se está reservan-do un espacio de memoria en la pila para quealmacene los datos reales que contiene esa va-riable. Por ejemplo, en la declaración:

int num =10;

6666

Alias C# Descripción Valores aceptados

object Clase base de todos los tipos del CTS Cualquier objeto

string Cadenas de caracteres Cualquier cadena

sbyte Byte con signo Desde -128 hasta 127

byte Byte sin signo Desde 0 hasta 255

short Enteros de 2 bytes con signo Desde -32.768 hasta 32.767

ushort Enteros de 2 bytes sin signo Desde 0 hasta 65.535

int Enteros de 4 bytes con signo Desde -2.147.483.648 hasta 2.147.483.647

uint Enteros de 4 bytes sin signo Desde 0 hasta 4.294.967.295

long Enteros de 8 bytes con signo Desde -9.223.372.036.854.775.808 hasta 9.223.372.036.854.775.807

ulong Enteros de 8 bytes sin signo Desde 0 hasta 18.446.744.073.709.551.615

char Caracteres Unicode de 2 bytes Desde 0 hasta 65.535

float Valor de coma flotante de 4 bytes Desde 1,5E-45 hasta 3,4E+38

double Valor de coma flotante de 8 bytes Desde 5E-324 hasta 1,7E+308

bool Verdadero/falso true o false

decimal Valor de coma flotante de 16 bytes (tiene 28-29 dígitos de precisión) Desde 1E-28 hasta 7,9E+28

Tabla 5 | Resumen del sistema de tipos

En C# todas las instrucciones y declaraciones deben terminar

con “;” (punto y coma).

1. EL LENGUAJE .NET

064a071.qxp 06/07/2008 10:56 p.m. PÆgina 66

Page 57: El lenguaje .Net 1 - WordPress.com · 2011. 10. 26. · El lenguaje .Net 1 Este capítulo nos dará una introducción a las características del lenguaje .Net, qué es el Framework,

6767

Cuando queremos declarar una variable deuno de estos tipos en C#, tenemos que colo-car el alias que le corresponde; luego, el nom-bre de la variable y, por último, opcionalmen-te, le asignamos su valor.C# distingue entre mayúsculas y minúsculas,lo que se conoce como case sensitive. Esto sig-nifica que PERSONA, Persona y personaconstituyen tres tipos de datos distintos. Untipo que admite valores de coma flotante ad-mite valores con un número de decimales queno está fijado previamente; es decir, númerosenteros o con un decimal, o con dos, o condiez. Decimos que la coma es flotante porqueno está siempre en la misma posición con res-pecto al número de decimales (el separadordecimal en el código siempre es el punto).

double num=10.75;

double num=10.7508;

Las cadenas son una consecución de caracteres–ya sean numéricos, alfabéticos o alfanuméricos–y son definidas de la siguiente manera:

string palabra1 = “05/08/2007: Buenos”;

string palabra2 = “ Días:”;

string palabra3 = “ 09:38”;

string saludo = (palabra1 + palabra2

+ palabra3);

Console.WriteLine(saludo);

Console.ReadKey();

ArraysUn array es una estructura de datos que con-tiene variables del mismo tipo. Se declara de lasiguiente manera:

TipoDeDato [] NombreDelArray;

El siguiente ejemplo muestra cómo declarardiferentes tipos de arrays:

static void Main(string[] args)

{

// Declara un array de una dimension

con lugar para 3 elementos

int [] arrayDeNumeros = new int[3];

arrayDeNumeros[0] = 6;

arrayDeNumeros[1] = 35;

arrayDeNumeros[2] = 37;

// El mismo array, se puede llenar durante

su declaracion

int[] array2DeNumeros = { 6, 35, 37 };

// o de esta manera

int[] array3DeNumeros = new int[] { 6,

35, 37 };

// mostrar los elementos del array

for (int i = 0; i < arrayDeNumeros.Length;

i++) {

Console.WriteLine(i);

}

// Es posible utilizar foreach para iterar

Cuando se declara una variableque es de tipo valor, se estáreservando un espacio de

memoria en la pila para quealmacene los datos que contiene.

FIGURA 024 | Ejemplo con variables.

Microsoft Visual C# 2005

064a071.qxp 06/07/2008 10:56 p.m. PÆgina 67

Page 58: El lenguaje .Net 1 - WordPress.com · 2011. 10. 26. · El lenguaje .Net 1 Este capítulo nos dará una introducción a las características del lenguaje .Net, qué es el Framework,

6868

// sobre los elementos de un array

foreach (int a in array2DeNumeros) {

Console.WriteLine ( a );

}

Console.Read ();

}

Sentencias de controlEn C# disponemos de dos tipos de sentenciasde control: de bifurcación condicional y de itera-ción. La primera consiste en evaluar una expre-sión ejecutando un bloque de código si la expre-sión es verdadera; de lo contrario, un segundobloque de código puede ser ejecutado. Tenemos,entonces, dos elementos para manejar la bifur-cación condicional en C#: if y switch.

Sentencia if

// utilizacion de if

if (a > b)

{

// bloque de código que se ejecuta cuando a es

MAYOR que b

}

else

{

// bloque para a MENOR que b

}

Es posible utilizar los siguientes operadores:>, <, >=, <=, != y ==.El fragmento de código que se muestra a con-tinuación ejemplifica cómo hacerlo:

if (a > b)

{

// si a es mayor que b

}

FIGURA 025 | Podemos notar que else if es una construcción que se utiliza para realizar múltiples evaluaciones.

Construcción else if

C# distingue entre mayúsculas y minúsculas, lo que se conoce

como case sensitive.

Flujo 1<Expresión Booleana> ) <sentencia>if

Flujo 2

(

<ExpresiónBooleana>

) <sentencia>if (

<sentencia>else

1. EL LENGUAJE .NET

064a071.qxp 06/07/2008 10:56 p.m. PÆgina 68

Page 59: El lenguaje .Net 1 - WordPress.com · 2011. 10. 26. · El lenguaje .Net 1 Este capítulo nos dará una introducción a las características del lenguaje .Net, qué es el Framework,

6969

else if (a < b)

{

// si a es menor que b

}

else if (a<=b)

{

// si a es menor o igual a b

}

else if (a >= b)

{

// si a es mayor o igual a b

}

else if (a == b)

{

// si a es igual a b

}

else if (a != b)

{

// a es distinto que b

}

else

{

// alguna opción no contemplada :)

}

Sentencia switchEn ocasiones, necesitaremos comparar una va-riable con una cantidad de valores posibles, afin de determinar el rumbo por seguir. Parahacerlo, utilizamos el switch:

switch (a)

{

case 1:

// código si a == 1

break;

case 2:

// código si a == 2

break;

case 3: case 4: case 5:

// código si a == 3 o 4 o 5

break;

default:

// código si a tiene un valor distinto a

1,2,3,4 o 5.

break;

}

Con esto podemos decir que switch es compa-rable con la sentencia Select Case, vista ante-riormente en Visual Basic .NET.La bifurcación ocurre en el switch sin evaluartodas las opciones, mientras que en un blo-que if-else if todas las opciones son evalua-das. Por este motivo, si sabemos que la varia-ble que vamos a evaluar tomará sólo uno delos valores posibles (en forma excluyente), yque la cantidad de valores por evaluar es másgrande que tres (regla de dedo), utilizarswitch en vez de bloques if-else if es más efi-ciente en términos de procesamiento.

Sentencia de bucle

En algunas oportunidades, necesitaremos quedeterminada porción de código de un progra-ma se repita una cierta cantidad de veces o

SI LA VARIABLE QUE VAMOS A EVALUAR TOMARÁ SÓLO UNO DE LOS

VALORES POSIBLES (EN FORMA EXCLUYENTE),Y LA CANTIDAD DE

VALORES POR EVALUAR ES MÁS GRANDE QUE TRES, ES ACONSEJABLE

UTILIZAR SWITCH EN VEZ DE BLOQUES IF ELSE.

Microsoft Visual C# 2005

064a071.qxp 06/07/2008 10:56 p.m. PÆgina 69

Page 60: El lenguaje .Net 1 - WordPress.com · 2011. 10. 26. · El lenguaje .Net 1 Este capítulo nos dará una introducción a las características del lenguaje .Net, qué es el Framework,

condición del texto que hayamos ingresado décomo resultado Falso, el sistema finalizará.

La sentencia doCon la sentencia while vimos que el bloquede código que se debe repetir no será ejecu-tado nunca si la expresión es falsa la primeravez. En algunas ocasiones, seguramente ne-cesitaremos que se ejecute ese código al me-nos una vez, para luego hacer una evalua-ción de la expresión.Para estos casos existe la sentencia do.

String Palabra;

do

{

Console.Write(“Ingrese la palabra\n”);

Palabra = Console.In.ReadLine();

} while (Palabra != “terminar”);

Console.Write (“Es la palabra correcta”);

A diferencia de la instrucción while, un bucledo-while se ejecuta una vez antes de que seevalúe la expresión condicional.En cualquier punto dentro del bloque do-while, se puede salir del bucle utilizando lainstrucción break. Se puede pasar directa-mente a la instrucción de evaluación de laexpresión while utilizando la instruccióncontinue; si la expresión se evalúa comotrue, la ejecución continúa en la primera ins-trucción del bucle. Si se evalúa como false,la ejecución continúa en la primera instruc-ción detrás del bucle do-while.

7070

hasta que ocurra una condición determinada.C# cuenta con varias sentencias para que estose cumpla.

La sentencia whileEsta sentencia, que significa mientras, indi-ca que una sentencia o grupo de sentenciasse repetirá en tanto una condición asociadaa ella sea verdadera.A continuación, veamos un ejemplo de códi-go en el cual, mientras no se ingrese un textodeterminado, el programa no terminará:

string Palabra = “”;

while (Palabra != “terminar”)

{

Console.WriteLine(“Ingrese una palabra:”);

Palabra = Console.In.ReadLine();

}

Console.WriteLine(“Palabra correcta para

finalizar”);

Analizando el código, vemos en la primera lí-nea que declaramos una variable del tipo ca-dena, y la inicializamos. En esta variable se al-macenará el texto que ingresemos por tecladocuando probemos el sistema.Luego, iniciamos la sentencia while, y eva-luamos la expresión encerrada entre parén-tesis en esa sentencia, que en este caso sería:“mientras la variable Palabra sea distinta de“terminar”... Si al evaluar la expresión ob-tenemos como resultado Verdadero, enton-ces entra en el cuerpo del bucle while; deotra manera, saltaremos a la línea siguientedespués del cuerpo.Dentro del while enviamos a la salida de laconsola el texto “Ingrese una palabra:”, y elprograma vuelve a capturar en la variable Pa-labra el texto que se ingresa en el teclado.Así, cada vez que ingresemos un texto en la sa-lida de la consola, éste será analizado, evaluan-do la expresión Palabra != salir. Cuando la

La sentencia while, que significamientras, indica que una sentenciao grupo de sentencias se repetirámientras una condición asociada

a ella sea verdadera.

1. EL LENGUAJE .NET

064a071.qxp 06/07/2008 10:56 p.m. PÆgina 70

Page 61: El lenguaje .Net 1 - WordPress.com · 2011. 10. 26. · El lenguaje .Net 1 Este capítulo nos dará una introducción a las características del lenguaje .Net, qué es el Framework,

7171

La condición de terminación del bucle

La expresión booleana del bucle “mientras”(while) debería ser verdadera en ciertas circunstancias y luego, en algún momento,tornarse falsa. Si la expresión NUNCA fueseverdadera, jamás se ingresaría en el cuerpo delbucle. Si la expresión SIEMPRE fuese verdadera,nuestro programa jamás se terminaría, ya quenunca saldríamos del bucle.

en iteración y para procesar de manera se-cuencial. En el ejemplo siguiente el valor de ise imprimirá en pantalla mientras se incre-menta de a uno:

{

for (int i = 0; i < 5; i++)

Console.WriteLine(i);

Console.ReadKey();

}

Analizando el código, vemos que se evalúa elvalor inicial de la variable i. A continuación,mientras el valor de i es menor o igual que 5,la condición se evalúa como true, se ejecuta lainstrucción Console.WriteLine y se vuelve aevaluar i. Cuando i es mayor que 5, la condi-ción se convierte en false, y el control setransfiere fuera del bucle.

La sentencia foreachCiertas colecciones de objetos utilizan una for-ma de estructurar la colección que permite laextracción de cada uno de los elementos demanera controlada desde la clase contenedora.Esto permite mantener el encapsulamientodentro de la clase para evitar que el cliente co-nozca los detalles internos a la implementación.Por ejemplo, el siguiente fragmento de códigoconsulta un array utilizando foreach:

string[] nombres = { “Gabriel”, “Rafael”,

“Marcelo”, “Pablo” };

foreach (string s in nombres) {

Console.WriteLine ( “{0}”, s );

}

Es posible construir colecciones que puedanser recorridas con la sentencia foreach. És-tas podrían entregar la lista ordenada alfabé-ticamente, por ejemplo.

La sentencia forEl bucle for ejecuta una instrucción o un blo-que de instrucciones repetidamente hasta queuna determinada expresión se evalúa como fal-se. El bucle for es útil para recorrer matrices

FIGURA 026 | El resultado de la sentencia for.

FIGURA 027 | El resultado de la sentencia foreach.

Microsoft Visual C# 2005

064a071.qxp 06/07/2008 10:56 p.m. PÆgina 71

Page 62: El lenguaje .Net 1 - WordPress.com · 2011. 10. 26. · El lenguaje .Net 1 Este capítulo nos dará una introducción a las características del lenguaje .Net, qué es el Framework,

FuncionesHasta el momento, estuvimos viendo los opera-dores, las variables y las sentencias más impor-tantes que tiene el lenguaje C#. A continua-ción, abordaremos las funciones, más conoci-das como métodos, que nos permitirán estruc-turar mejor el código de las aplicaciones. De es-ta manera, podremos programar de una formamucho más clara, evitando repetir código al in-vocar esta función en el lugar de la aplicacióndonde la necesitemos, con lo cual optimizare-mos su funcionamiento.

Uso de métodos o funciones en C#Los métodos o funciones son porciones de códi-go que realizan determinadas acciones. Tomanciertos argumentos y devuelven un valor.En C#, las funciones se deben declarar dentro deun objeto. Por lo general, llevan un nombre quelas identifica para definir la tarea que cumplen.Un ejemplo claro de función es WriteLine(),perteneciente a la clase Console, que permite es-cribir una línea con un valor, pregunta o resulta-do de operación, en la consola de aplicación.

{

Console.WriteLine(“Función que muestra este

texto en la consola:”);

}

Las funciones o métodos poseen un tipo de da-to, un identificador y parámetros:• Tipo de dato: Es un valor que la función

devuelve al terminar.• Identificador: Es el nombre por el cual lla-

maremos a la función en nuestra aplicación.Será utilizado para invocarla.

• Parámetros: Son las variables que recibirá elmétodo para realizar las operaciones necesa-rias para las cuales fue creado. El listado devariables puede estar vacío o tener todos loselementos que queramos o precisemos; estose entiende como opcional.

Métodos estáticosExisten métodos estáticos que son conside-rados como métodos de clase. Éstos debentener un tipo de dato como prefijo de retor-no, y llevar la palabra reservada Static. Elmétodo estático se llama por medio de unidentificador de la clase, en vez del identifi-cador del objeto, como sucede con las varia-bles estáticas. Muchas clases de la libreríaBCL definen métodos estáticos, como elque vinimos utilizando hasta ahora en losejemplos de código, el método WriteLine,perteneciente a la clase Console.

Retorno de valoresComo ya dijimos, los métodos pueden retor-nar valores o no. Si no devuelven ninguno,se especifica que el tipo de dato de retornosea void.

Uso de parámetrosEn la Figura 013 vemos de qué forma se de-claran los parámetros en las funciones. Losparámetros son, básicamente, declaracionesde variables, separadas por una coma (en casode que tengamos que utilizar más de uno).

Función Main

Cada programa en C# debe tener una funciónMain(), en donde escribiremos el código princi-pal para que nuestro programa se inicie.

Las funciones son porciones de código que realizan acciones.

Toman ciertos argumentos y devuelven un valor.

7272

1. EL LENGUAJE .NET

072a078.qxp 06/07/2008 10:59 p.m. PÆgina 72

Page 63: El lenguaje .Net 1 - WordPress.com · 2011. 10. 26. · El lenguaje .Net 1 Este capítulo nos dará una introducción a las características del lenguaje .Net, qué es el Framework,

7373

Parámetros de salidaEs probable que en el desarrollo de un siste-ma, necesitemos que una función retornemás de un valor. En ese caso, podemos re-currir a los parámetros de salida. Existe unmodificador llamado out, que nos permitirárealizar esta operación dentro de la función.Veamos un ejemplo para comprenderlo unpoco mejor:

{

public Static void CalculoInteres(double

deposito, out double 30dias, out double

60dias)

{

//A 30 días 5% de interés

30dias = (deposito * 1.05);

//A 60 días 12% de interés

60dias = (deposito * 1.12);

}

{

//Declaro las variables que recibirán los

valores de retorno de la función

double A30, A60;

CalculoInteres(5500, out A30, out A60);

Console.WriteLine(“$ 5500 a 30 días me dará: $

“ A30);

Console.WriteLine(“$ 5500 a 60 días me dará: $

“ A60);

}

}

Y el resultado obtenido en la consola de laaplicación será el siguiente:

$ 5500 a 30 días me dará: $ 5775

$ 5500 a 30 días me dará: $ 6160

FIGURA 028 | Aquí podemos ver el código de un programa que contiene una función, y su composición.

Componentes de una función1 static void main ()2 {3 Console.WriteLine("Viendo en acción nuestra función"}4 int Resultado = SumarNumeros(32 + 35) ;5 Console.WriteLine(Resultado):6 }7 static int SumarNumeros(int Valor1, int Valor2)8 {9 return Valor1+Valor2;10 }

El tipo de dato que devolverácomo resultado la función

es Integer (Entero).

El nombre asignado a la funciónpor el cual la invocaremos en el

momento de necesitarla.

Los parámetros que acepta lafunción, en este caso, son 2.

Son del tipo Integer (Entero) yestán separados por una coma.

1 - Tipo de dato

2 - Identificador

3 - Parámetros

1 3

2

SumarNumeros (int Valor1, int Valor2)int

Microsoft Visual C# 2005

072a078.qxp 06/07/2008 10:59 p.m. PÆgina 73

Page 64: El lenguaje .Net 1 - WordPress.com · 2011. 10. 26. · El lenguaje .Net 1 Este capítulo nos dará una introducción a las características del lenguaje .Net, qué es el Framework,

7474

Clases en C#A continuación, veremos lo que se conoce como la estructurade datos más importante de este lenguaje: las clases.

Qué es una claseSe conoce como clase a una estructura de datosutilizada para crear y definir nuestros propios ti-pos de datos, que nos ayudará a ampliar los pro-pios del lenguaje.En general, las clases se utilizan por medio de loque llamamos instancias, que denominan obje-tos. Los objetos del mismo tipo pueden compar-tir una estructura común entre ellos, pero posee-rán valores distintos en las variables que los com-ponen (llamadas miembros).Dentro de un programa, podemos crear objetospartiendo de una clase, y la única limitación quetenemos es la memoria que posea la computado-ra en la que se ejecute el software.

Una clase es una estructura dedatos utilizada para crear y definirnuestros propios tipos de datos.

Declarar una clase

Para declarar clases en C# utilizaremos archivoscon extensión .CS, que compondrán nuestroproyecto o solución. Dentro de ellos podremosdefinir todas las clases que nos parezcan conve-nientes, pero siempre es recomendable utilizarun archivo por cada una que definamos paranuestro programa. Esto nos facilitará la lectura y

FIGURA 029 | Una misma clase, graficada según cómo sería su código.

Estructura de una clase

Estructura gráfica de una clase Estructura en código de una clase

{

clase

identificador

declaración ydefinición de losmiembros que la

componen

}

Archivo nombredelaclase.CS

clase <identificador>

{// Cuerpo de la clase donde// definimos los miembros// que la compondrán

tipo miembro1tipo miembro2tipo miembro3tipo miembro4

}

1. EL LENGUAJE .NET

072a078.qxp 06/07/2008 10:59 p.m. PÆgina 74

Page 65: El lenguaje .Net 1 - WordPress.com · 2011. 10. 26. · El lenguaje .Net 1 Este capítulo nos dará una introducción a las características del lenguaje .Net, qué es el Framework,

7575

modificación o corrección de cualquiera de ellas,en caso de que lo necesitemos.Para crear una clase, en primer lugar debemosescribir la palabra reservada class y, luego, elidentificador, que será el nombre con el cual laclase será identificada en el momento de usarla.Es preciso respetar que ese nombre no coincidacon ninguna palabra reservada propia del len-guaje C#. El nombre otorgado tiene que serbien claro y fácil de recordar. Generalmente, losnombres de las clases se eligen sobre la base deluso que vayamos a darles dentro del programa.A continuación, veremos una clase graficada paramejorar su comprensión y, luego, la misma claseen código fuente. Dentro del “cuerpo” de la cla-se declaramos y definimos los miembros que lacompondrán: Datos y Métodos.

Modificadores de acceso

Las variables o miembros de una clase se declarande la misma manera que las variables convencio-nales en C#, aunque pueden poseer algunos mo-dificadores particulares o especiales. Es posibleutilizar lo que se conoce como modificador deacceso, que regulará la manera de interactuar conuna variable o el método desde otros objetos.Siempre podremos acceder a las variables de unaclase desde los métodos declarados en ella. Paraotros métodos de otras clases, éstos nos impon-drán limitaciones. Éstas son:

• internal: La variable es declarada como in-terna. Podemos acceder a su contenido desdemétodos de clases que se encuentran dentrodel mismo assembly o ejecutable de nuestroproyecto.

• private: La variable es declarada como pri-vada. Sólo podemos acceder a su contenidodesde métodos de la clase, pero no desdemétodos de clases derivadas. Si cuando de-

claramos la variable no especificamos locontrario, será del tipo private.

• protected: La variable es declarada como pro-tegida. No podemos acceder a su contenidodesde objetos externos, pero sí, desde métodosde la clase y clases derivadas de ella.

• protected internal: La variable es declarada co-mo protegida interna. Podemos acceder a sucontenido desde métodos de clases que se en-cuentren dentro del mismo assembly o ejecuta-ble, desde métodos que estén ubicados dentro dela misma clase y desde clases derivadas de ella.

• public: La variable es declarada como pública,de modo que podemos acceder a su contenidodesde cualquier objeto de cualquier tipo.

Veamos cómo declarar una clase sencilla con susmiembros en el siguiente ejemplo:

class Persona

{

public string nombre;

public string apellido;

public string DNI;

public int edad;

public Persona() {}

}

De acuerdo con el fragmento de código anterior,hemos definido la clase Persona. Ésta constituyeun tipo de dato nuevo, que estará disponible paraser utilizado en nuestra aplicación.Ahora, vamos a agregar los valores correspon-dientes a los miembros de la clase:

static void Main(string[] args)

{

Persona p = new Persona();

p.nombre = “Julián”;

p.apellido = “Luna”;

p.DNI = “46.850.185”;

p.edad = 2;

Clases en C#

072a078.qxp 06/07/2008 10:59 p.m. PÆgina 75

Page 66: El lenguaje .Net 1 - WordPress.com · 2011. 10. 26. · El lenguaje .Net 1 Este capítulo nos dará una introducción a las características del lenguaje .Net, qué es el Framework,

7676

Console.WriteLine(“Descripción de persona :

{0},{1}”, p.nombre, p.apellido);

Console.WriteLine(“Otros datos : {0},{1}”,

p.DNI, p.edad + “ años”);

Console.Read();

}

Instanciación

Para poder usar un tipo de dato referenciado,debemos crearlo, mediante un proceso llama-do instanciación. Ésta invoca el método quetiene el mismo nombre que la clase, denomi-nado constructor de la clase.Para definir una clase derivada de Persona,utilizaremos el operador new. Luego, las va-riables internas de la clase, llamadas Nombre,Apellido, DNI y edad, son modificadas desdefuera de la clase. Esto es posible ya que todasellas están definidas como públicas en la claseoriginal Persona.Veamos la forma de hacerlo:

Persona p = new Persona();

p.nombre = “Julián”;

p.apellido = “Luna”;

p.DNI = “46.850.185”;

p.edad = 2;

Por último, las variables internas de la claseson leídas y mostradas en la consola en dosrenglones diferentes: en el primero, el nom-bre y el apellido; en el segundo, su documen-to y edad actual:

Console.WriteLine(“Descripción de persona :

{0},{1}”, p.nombre, p.apellido);

Console.WriteLine(“Otros datos : {0},{1}”,

p.DNI, p.edad + “ años”);

Console.Read();

Veamos cómo instanciar objetos, que posean lamisma variable con valores distintos:

static void Main(string[] args)

{

Persona pers1 = new Persona();

Persona pers2 = new Persona();

pers1.nombre = “Nicolás”;

pers2.nombre = “Julián”;

Console.WriteLine(“El valor de la variable

nombre del objeto pers1 es:

{0}”, pers1.nombre);

Console.WriteLine(“El valor de la variable

nombre del objeto pers2 es:

{0}”, pers2.nombre);

Console.Read();

}

En el ejemplo anterior, hemos utilizado la clasePersona, de la cual instanciamos las clasespers1 y pers2. Ambos objetos son indepen-dientes entre sí. A pers1 le asignamos el valor“Nicolás”, y a pers2, “Julián”.

Constantes de una clase

Cuando declaramos variables temporales del tipoconstante, éstas tienen un valor asignado que nose puede modificar. Podemos declarar de la mis-ma forma una variable del tipo constante dentrodel cuerpo de una clase, que actuará de la mismamanera que si fuese una variable temporal.

Las variables o miembros de una clase se declaran

de la misma manera que lasvariables convencionales en C#.

1. EL LENGUAJE .NET

072a078.qxp 06/07/2008 10:59 p.m. PÆgina 76

Page 67: El lenguaje .Net 1 - WordPress.com · 2011. 10. 26. · El lenguaje .Net 1 Este capítulo nos dará una introducción a las características del lenguaje .Net, qué es el Framework,

7777

Las constantes declaradas dentro de clases pue-den poseer los mismos modificadores de accesoque las variables (public, private, protected, etc.).

public class Persona

{

public const string ciudadano = “Argentino”;

//…

}

A nuestra clase Persona le agregamos una cons-tante llamada ciudadano, cuyo valor es “Argen-tino”. Esta constante tendrá este valor previa-mente asignado, que no puede ser modificado,por lo cual será el mismo para todas las instan-cias que creemos sobre la base de la clase Perso-na. Notemos también que cuando declaramos laconstante, también la inicializamos, es decir, leasignamos su valor. Esto es obligatorio cuandoutilizamos este tipo de dato en las clases.En las constantes dentro de una clase encontra-mos también una característica adicional: puedenser accedidas o consultadas sin necesidad de ins-

tanciarlas, de modo que no necesitaremos crearun objeto de la clase Persona.

static void Main(string[] args)

{

Persona pers1 = new Persona();

Persona pers2 = new Persona();

pers1.nombre = “ Nicolás”;

pers2.nombre = “ Julián”;

string origen = Persona.ciudadano;

Console.WriteLine(“El valor de la variable

nombre del objeto pers1 es:

{0}”, pers1.nombre);

Console.WriteLine(“El valor de la variable

nombre del objeto pers2 es:

{0}”, pers2.nombre);

Console.WriteLine(“El país de origen para los

objetos pers1 y pers2 es:

{0}”, origen);

Console.Read();

}

FIGURA 030 | La asignación de valores a variables de una clase se realiza prácticamente

de la misma forma en que se le asigna valor a cualquier variable declarada fuera de ella.

Asignación de valoresoperador de selección

operador de asignación

fin de sentencia

clase variable valor

Persona . nombre = "Nico" ;

Clases en C#

072a078.qxp 06/07/2008 10:59 p.m. PÆgina 77

Page 68: El lenguaje .Net 1 - WordPress.com · 2011. 10. 26. · El lenguaje .Net 1 Este capítulo nos dará una introducción a las características del lenguaje .Net, qué es el Framework,

7878

int muestroAnio= Persona.anioActual;

Console.WriteLine(“El valor de la variable

nombre del objeto pers1 es:

{0}”, pers1.nombre);

Console.WriteLine(“El valor de la variable

nombre del objeto pers2 es:

{0}”, pers2.nombre);

Console.WriteLine(“El valor de la variable

estática añoActual es:

{0}”, muestroAnio);

Console.WriteLine(“El país de origen

para los objetos pers1 y pers2 es:

{0}”, origen);

Console.Read();

}

}

En el ejemplo, luego de haber agregado a la Cla-se Persona la constante ciudadano, modificamosel código del programa, creando una variableorigen, la cual obtendrá el valor de la constanteciudadano, directamente de la clase Persona.

Variables estáticas de una clase

Las variables estáticas, al igual que las constantes,pueden ser accedidas sin necesidad de instanciarun objeto, pero con la ventaja de que podemosmodificar su valor como si fuese cualquier otravariable. Este tipo de variables, tal como sucedecon las constantes o las variables convencionales,pueden tener los mismos modificadores de acce-so (public, private, protected, etc.). Ahora agrega-remos a la clase Persona una variable Static:

public class Persona

{

public static int añoactual = 2006;

public const string ciudadano = “Argentino”;

//…

}

Luego, cambiamos su valor desde nuestro pro-grama, antes de mostrarla en pantalla:

class Program

{

static void Main(string[] args)

{

Persona pers1 = new Persona();

Persona pers2 = new Persona();

Persona.anioActual = 2007;

pers1.nombre = “Nicolás”;

pers2.nombre = “Julián”;

string origen = Persona.ciudadano;

Las constantes declaradasdentro de clases pueden poseer

los mismos modificadores deacceso que las variables (public,

private, protected, etc.).

FIGURA 031 | Podemos observar en la aplicación

de consola la clase Persona funcionando, con todo

lo referente a clases que aplicamos en ella.

1. EL LENGUAJE .NET

072a078.qxp 06/07/2008 10:59 p.m. PÆgina 78