You are on page 1of 92

n20 noviembre 2005 8,50 (Espaa)

Visual Basic C# Delphi ASP.NET ADO.NET .NET Framework Windows Server System

dotNetMana
www.dotnetmania.com

Dedicada a los profesionales de la plataforma .NET

Novedades en
la seguridad en
Visual Studio 2005
Programando para
64 bits con .NET Framework 2.0 Novedades
para desarrollo Web en ASP.NET 2.0
Optimizacin ASP.NET 2.0 Novedades
en el estndar de C# Reflexionando y
haciendo reflexin sobre la genericidad
de .NET 2.0 Novedades de Visual Basic
2005 Maestro-detalle con Visual Basic
2005? El IDE de V isual Studio 2005
Novedades en la extensibilidad de Visual
Studio 2005 ADO.NET 2.0, ms y mejor
acceso a datos

dnm.editorial

dotNetMana

Visual Studio 2005

Vol. II Nmero 20 Noviembre 2005


Precio: 8,50

Editor
Paco Marn
(paco.marin@dotnetmania.com)
Administracin
Pilar Prez
(pilar.perez@dotnetmania.com)
Asesor Tcnico
Marino Posadas
(marino.posadas@dotnetmania.com)
Redactores
Antonio Quirs, Dino Esposito, Guillermo
'guille' Som, Jorge Serrano, Jos Manuel
Alarcn, Luis Miguel Blanco, Miguel Katrib
(Grupo Weboo).
Colaboradores habituales
ngel Esteban, Braulio Dez, Daniel Mazzini,
Eladio Rincn, Erich Bhler, Fernando
Nogueras, Jorge Crespo Cano, Jos Miguel
Torres, Miguel Egea, Octavio Hernndez,
Pablo Abbate, Pepe Hevia, Rodrigo Corral y
Salvador Ramos.
Adems colaboran en este nmero
Alberto Ruz, Carlos Quintero, Javier
Izquierdo, Jos Murillo, Mario del Valle y
Sergio Vzquez

Edicin y Suscripciones

.netalia
c/ Robledal, 135
28529 Rivas-Vaciamadrid (Madrid)

Tf. (34) 91 666 74 77


Fax (34) 91 499 13 64
Publicidad
Mediadev
Sophie Mancini (sophie@mediadev.es)
Tf. 93 426 22 57 - 670 99 74 64
Fax. 93 423 11 40
Imprime
Grficas Vallehermoso
www.graficasvallehermoso.com
ISSN
1698-5451
Depsito Legal
M-3.075-2004

<<

Bienvenido al nmero 20, de noviembre


de 2005, de dotNetMana, el nmero que
ms horas de sueo nos ha quitado :-).
El da 7 de noviembre se habr presentado oficialmente la nueva versin
Visual Studio 2005, junto con SQL Server
2005 y BizTalk Server 2006. Por este motivo hemos querido hacer un nmero especial dedicado exclusivamente al nuevo
Visual Studio 2005, tal y como hicimos ya
con SQL Server 2005.
Nuestro objetivo es que usted tenga,
despus de leerlo, una idea bastante aproximada de las novedades ms importantes
de Visual Studio 2005 y .NET Framework
2.0. Para lo cual hemos dedicado 32 pginas ms de lo habitual y un buen puado
de horas extraordinarias. An as, han quedado cosas en el tintero pues las novedades
son muchas, ciertamente.
Este mes publicamos las entrevistas a
Brian Keller, Program Manager de Visual
Studio 2005, y a Mike Hernndez y Donald
Drake, del equipo de desarrollo de Visual
Studio Tools for Office 2005, otro de los
grandes cambios en esta versin.
Hemos escrito sobre algunas ediciones
nuevas: Visual Studio Team System y Visual
Studio Web Developer Express Edition.
Procuramos abarcar las novedades de
.NET Framework ms relevantes: la nueva capacidad de generar cdigo nativo de
64 bits, las novedades en cuanto a la seguridad, los nuevos ADO.NET 2.0, .NET
Compact Framework 2.0 y ASP.NET 2.0;
este ltimo con dos artculos, uno genrico y otro ms en detalle enfocado a la optimizacin.

Y tambin, cmo no, algunas novedades que afectan a los lenguajes de programacin, con artculos generales para Visual
Basic y el nuevo estndar ECMA de C#; adems, otro ms especfico de generics con C#
y uno ms explicando la generacin de cdigo para Visual Basic con uno de los asistentes. Microsoft ha puesto especial cuidado en
ahorrarnos lneas de cdigo innecesarias;
segn comenta Jos M. Alarcn en su artculo, hasta un 70% en ASP.ET 2.0 con respecto a ASP.NET 1.x.
No nos hemos olvidado del IDE de
Visual Studio 2005, nuestro banco de trabajo, que sufre cambios significativos.
Enfocado desde un punto de vista general y
tambin ms especficamente con las novedades sobre la extensibilidad.
Seguramente debimos hacer ms hincapi en las nuevas capacidades de despliegue; por supuesto, las cinco pginas dedicadas a Team System son insuficientes; las
dos dedicadas a seguridad slo dan para
apuntar novedades; nos hemos dejado atrs
a J#,... En fin, faltan muchas lneas por
escribir, afortunadamente. Aqu no hace
ms que comenzar nuestro trabajo con esta
nueva versin.
Mi ms sincero agradecimiento a las
personas de Microsoft Ibrica que nos han
apoyado incondicionalmente y, por
supuesto, a todos los redactores que se han
implicado y que han trabajado duro para
que esto fuera un todo y no la suma de sus
individualidades.
Lo mejor es que se ponga cmodo,
pase pgina y deje esta editorial para leer
algo ms interesante.

<<dotNetMana

Dedicada a los profesionales de la plataforma .NET

20

dnm.sumario
Visual Studio 2005, un entorno de desarrollo para todos los gustos

8-10

Presentacin de Javier Izquierdo, gerente de producto de Visual Studio de la nueva versin.

Entrevista a Brian Keller

12-13

Program Manager de Visual Studio 2005

Novedades en la seguridad en Visual Studio 2005

14-15

Programando para 64 bits con .NET Framework 2.0

16-17

Novedades para desarrollo Web en ASP.NET 2.0 y


Visual Web Developer 2005

18-24

Optimizacin ASP.NET 2.0. Como una moto!

25-29

dnm.laboratorio

30-32

Visual Studio 2005 Web Developer Express

dnm.sumario

Entrevista a Mike Hernndez y Donald Drake

34-35

Equipo de desarrollo de Visual Studio Tools for Office 2005

Novedades en el estndar de C#

36-39

Reflexionando y haciendo reflexin sobre


la genericidad de .NET 2.0

40-46

Novedades de Visual Basic 2005

48-55

Maestro-detalle con Visual Basic 2005? Chupado!

56-59

El IDE de Visual Studio 2005

60-63

Novedades en la extensibilidad de Visual Studio 2005

64-68

dnm.laboratorio

70-72

.NET Compact Framework 2.0

ADO.NET 2.0. Ms y mejor acceso a datos

74-80

Visual Studio 2005 Team System

81-84

dnm.todotnet.qa

86-88

Visual Studio 2005 tips & tricks

dnm.biblioteca.net

89

Visual C# 2005: A developer's notebook (Jesse Liberty)


Pro C# 2005 and the .NET 2.0 Platform (Andrew Troelsen)

dnm.desvan

90

noticias.noticias.noticias.noticias.noticias.noticias

<< dotNetMana

<< dnm.noticias
Business Objects presenta BusinessObjects XI Release 2

Business Objects ha anunciado hoy la


disponibilidad de BusinessObjects XI Release
2. Las mejoras y los nuevos productos que
incorpora BusinessObjects XI Release 2 ofrecern a los usuarios una mayor simplicidad
de manejo, informacin ms fiable, as
como la posibilidad de estandarizar toda su
infraestructura en torno a una nica plataforma de BI.

permite a los usuarios realizar consultas y anlisis sobre esas fuentes de una
forma ms sencilla. Ahora los usuarios
pueden integrar informacin procedente de bases de datos OLAP y relacionales y efectuar consultas y anlisis
de manera integrada a partir de esos
datos, como si estos procediesen de una
sola fuente.

BusinessObjects Desktop Intelligence

Business Objects ha presentado tambin BusinessObjects Intelligent Question, un


nuevo producto que proporciona una interfaz ms fcil de utilizar, que resultar atractiva para un nuevo colectivo de usuarios
empresariales. Con Intelligent Question, el
usuario de a pie puede formular fcilmente preguntas acerca de su negocio y recibir
respuestas sin necesidad de ejecutar consultas ni de entender de datos.

El producto BusinessObjects Desktop


Intelligence, antes conocido como cliente
completo (Full Client), permite a todos los
clientes de Business Objects disfrutar de
todas las ventajas de la plataforma
BusinessObjects XI, incluidas las funcionalidades de toma de decisiones colaborativas,
la integracin con Microsoft Live Office,
y la BI Encyclopedia, que ofrece informacin de contexto adicional sobre el negocio. Con Desktop Intelligence, los usuarios
tienen a su disposicin un lugar unificado
desde donde ver todo el contenido de BI y
compartirlo con sus otros colegas.

Mejoras en Web Intelligence

BusinessObjects Composer

BusinessObjects XI Release 2 introduce importantes mejoras en Web


Intelligence La nueva versin de Web
Intelligence sincroniza datos procedentes de varias fuentes distintas, lo que

BusinessObjects Composer es un producto nuevo e innovador que ayuda a los responsables de TI a mejorar su eficiencia y
la calidad de diseo de sus proyectos de
extraccin, transformacin y carga de datos

BusinessObjects Intelligent Question

(ETL). Los proyectos de ETL suelen disearse de forma ad hoc, en un proceso para
el cual escasean las mejores prcticas.
Cuando un responsable de TI empieza a
disear un proyecto de ETL, ha de definir
minuciosamente la correspondencia exacta entre cada fuente de datos y las necesidades empresariales de los usuarios finales.
Con BusinessObjects Composer, los desarrolladores pueden documentar fcilmente
todo el proceso de ETL. Ahora pueden iniciar nuevos proyectos de ETL de mayor
nivel con slo consultar proyectos realizados anteriormente.

Gestin automatizada del ciclo de vida de BI


Las nuevas funcionalidades de BusinessObjects XI Release 2 permiten a los responsables de informtica gestionar con mayor
facilidad las implantaciones de BI de las que
ya disponen. Ahora los responsables de TI
pueden utilizar herramientas de gestin
automatizada del ciclo de vida para mover
cualquier objeto u aplicacin de BI, a travs de los entornos de desarrollo, pruebas
y produccin. Esta nueva caracterstica permite a las organizaciones reducir el coste
de mantenimiento de sus implantaciones
de BI, facilitando al mismo tiempo su
ampliacin gradual.
Para ms informacin: http://www.businessobjects.com.

Borland presenta Delphi 2006,C# Builder 2006 y C++ Builder 2006


Delphi 2006, C#
Builder 2006 y C++
Builder 2006 ofrecen a
partir de ahora Borland
Developer Studio el
entorno de desarrollo
multilenguaje de Borland para las aplicaciones Microsoft Windows y .NET. Se trata del nico entorno de desarrollo integrado que incluye soporte para las aplicaciones Delphi/Delphi .NET, C, C++ y C#.
Los clientes que adquieran cualquiera de
estos productos obtendrn un soporte para
los cuatro lenguajes sin costes adicionales,
con la flexibilidad de personalizar las capacidades especficas del lenguaje.
Las nuevas mejoras de Delphi 2006,
tales como un sistema de plantillas en directo, refactorings avanzados que automatizan

los cambios de cdigo fuente y la integracin perfecta con herramientas ALM de


Borland, ayudan a reducir el tiempo y el
coste de construccin, gestin, mantenimiento y ampliacin de las aplicaciones
Windows y .NET.
Los usuarios de Delphi tambin pueden acelerar el desarrollo con soporte para
ingeniera inversa, prototipaje rpido e
integracin avanzada de IDE con modelado UML, requerimientos, control de versiones, seguimiento de bugs y colaboracin
entre equipos. Con soporte para Microsoft
.NET Framework, ASP.NET, VCL.NET,
VCL y Win32 SDK. Adems, dado que
Delphi soporta tanto Win32 como .NET,
los clientes pueden continuar con el desarrollo y mantenimiento de las aplicaciones
Win32 existentes, a la vez que simplifican
el camino hacia .NET Framework y las aplicaciones Windows de prxima generacin.

ECO III, el marco nico de Borland


para Delphi 2006 y C# Builder, ofrece servicios para aplicaciones como el mapeado
relacional de objetos (ORM) y la persistencia transparente de objetos, lo que evita a los desarrolladores la complejidad de
construir y mantener sus propios servicios
personalizados.
ECO III tambin contribuye a que el
desarrollo basado en el diseo sea una realidad gracias a su Framework basado en
modelos, especialmente til para la creacin de aplicaciones de bases de datos basadas en formularios para servicios Web,
ASP.NET y Windows.
Estas nuevas versiones se presentarn
en Madrid y Barcelona el 15 y 16 de
noviembre respectivamente, con la presencia de Jason Vokes, Director de Producto
de Borland. Para ms informacin e inscripcin: 902 34 45 56 y en www.borland.es.

dnm.noticias

Eventos
Compuware celebr el 6 de octubre en su sede central de Detroit el segundo encuentro tecnolgico
OJ.X y donde se mostraron las ms novedosas tecnologas de desarrollo de aplicaciones
El evento reuni a alrededor de 1.000
desarrolladores para mostrarles las ms avanzadas tecnologas y experiencias en desarrollo de software.
En este segundo ao, Compuware ha
ampliado el alcance del evento incluyendo
las tecnologas de desarrollo Microsoft .NET
y Java, las dos mayores plataformas que estn
usando actualmente las empresas para el
desarrollo y la implantacin de aplicaciones
distribuidas.
El encuentro tuvo como objetivo mostrar
y educar sobre las habilidades y estrategias ms
avanzadas para incrementar la productividad
del desarrollo, el ROI (retorno de inversin) y la
calidad, con independencia de la tecnologa
subyacente. La edicin de este ao cont con
presentaciones relevantes tanto por parte de
Microsoft como de Eclipse.
El evento se desarroll en un ambiente
abierto e incluy sesiones tcnicas, laboratorios de aprendizaje interactivo, estudios reales
de casos de desarrollo y conferencias de expertos. Los desarrolladores, sus jefes y los CIO
pudieron aprender tendencias y tcnicas de la
mano de algunos de los ms brillantes y consumados visionarios de la industria.
Soporte para Visual Studio 2005
Compuware anunci en este evento el
soporte para Microsoft Visual Studio 2005
de sus herramientas para la ayuda al desarrollo, testeo, gestin de aplicaciones.
Compuware es un miembro importante
y valioso del programa Visual Studio Industry
Partner (VSIP) y tiene un rica tradicin en aplicaciones empresariales, dijo Rick LaPlante,
General Manager de Visual Studio 2005 Team
System en Microsoft Corporation (al que tuvimos la ocasin de entrevistar el mes de mayo
pasado). Nosotros estamos muy contentos de

ver la solidez de Compuware y la continuada


inversin en tecnologas .NET y su concentracin en la innovacin sobre aplicaciones del
ciclo de vida.
Compuware participar como gold sponsor
en el prximo Microsoft Visual Studio 2005
Launch Tour en el que se presentar Visual
Studio 2005 a nivel mundial. En l,
Compuware presentar la siguiente versin de
Compuware TestPartner con capacidades de
pruebas funcionales y de regresin, integradas
en Microsoft Visual Studio 2005 Team System.
Adems, Compuware planea introducir
una nueva versin de Compuware
DevPartner Studio con una completa integracin en el IDE de Visual Studio 2005:
DevPartner Studio 8.0 que ofrecer soporte
mejorado para servicios Web, una nueva e innovadora caracterstica llamada Performance Expert
y capacidades para la simulacin de fallos.
Adicionalmente, Compuware introducir una
nueva versin de DevPartner Fault Simulator
que se integra con DevPartner Studio.
A principios de 2006, Compuware tiene
pensado liberar la prxima versin de su herramienta de anlisis de seguridad DevPartner
SecurityChecker, con soporte para Visual
Studio 2005.
Ms informacin sobre este evento en:
http://www.compuwareojx.com

Alhambra-Eidos celebra su 15 cumpleaos


Alhambra-Eidos, empresa especializada
en facilitar soluciones a las necesidades empresariales en el mbito de las TIC, ha celebrado
sus 15 aos de trayectoria en este sector.
A la fiesta asistieron ms de 300 personas
entre empleados, clientes, colaboradores y
medios de comunicacin.
Durante estos 15 aos de experiencia,
Alhambra-Eidos se ha convertido en una de
las empresas punteras del mercado nacional,
con una amplia proyeccin y profesionales altamente cualificados, que se ha reflejado en los

reconocimientos de fabricantes como Cisco


Systems o Microsoft, entre otros. Ms informacin en: http://www.alhambra-eidos.com.

Lanzamiento deVisual Studio


2005 y SQL Server 2005
El 15 y 17 de noviembre, en Barcelona y
Madrid, son las fechas y los lugares elegidos
para la presentacin ms esperada de los dos
ltimos aos.
Para la presentacin en Espaa de
Visual Studio 2005,
SQL Server 2005 y
BizTalk Server 2006,
Microsoft Ibrica tiene previstos dos eventos de carcter introductorio y general:
uno en Barcelona que se celebrar el da 15
de noviembre en el saln La Sagrada Familia
del hotel AC Barcelona, coincidiendo con el
IT Forum; y otra en Madrid que se celebrar el da 17 de noviembre en la Sala Retiro,
entre el pabelln 8 y 10 del recinto ferial IFEMA y coincidiendo con el SIMO.
Ms informacin sobre estos eventos y
registro en: http://www.encuentromicrosoft.com.
Ms adelante para la presentacin de la
versin espaola de estos productos habr
una gira por 14 ciudades espaolas, an por
decidir. Incluiremos detalles de estos eventos el prximo mes.
Como ya informamos el mes pasado, el
7 de noviembre Steve Ballmer ser el
encargado de anunciar este lanzamiento
en un evento de un solo da que se celebrar en San Francisco, en el Moscone
West Convention Center.
Ms informacin en: http://www.microsoft.com/launchtour2005.

HP Integrity Summit 2005


Durante los das 5 y 6 de Octubre en
Madrid, se ha celebrado el HP Integrity
Summit 2005 que este ao se compona del
HP Integrity Developer Forum para desarrolladores y del HP Integrity Forum, dirigido a las grandes empresas espaolas .
La tercera edicin del HP Integrity
Developer Forum se ha celebrado con un gran
despligue tecnolgico, con un rea de trabajo de 4.000m2, un taller de programacin con
ms de 100 puestos de trabajo y 300 conexiones en red, un centro de proceso de datos
con 70 servidores de alta disponibilidad.
Alrededor de 50 desarrolladores tuvieron
la oportunidad de migrar aplicaciones reales
a plataformas de 64 bits con la asistencia de
tcnicos de las diferentes empresas participantes: Intel, Bea, Oracle, Microsoft...
Ms informacin en http://www.hp.es.

dnm.noticias

<< dotNetMana

OJ.X de Compuware

Javier Izquierdo

Visual Studio 2005


Un entorno de desarrollo para todos los gustos
Es realmente una gran satisfaccin para m el presentar la nueva versin deVisual Studio,
que acaba de lanzarse conjuntamente con SQL Server. Juntos, estos productos ofrecen una completa plataforma que permite a las organizaciones satisfacer las nuevas
demandas de sus negocios y con la que las empresas podrn generar soluciones conectadas ms rpida y eficientemente, desarrollar las aplicaciones de misin crtica ms
exigentes y tomar decisiones mejor fundamentadas.

<< Han pasado casi diez aos desde

Javier Izquierdo
Es Ingeniero Tcnico de Obras
Pblicas por la UPM y
Gerente de Producto de Visual
Studio desde julio de 2000

que Microsoft
present la primera versin de Visual Studio, la suite de herramientas de desarrollo para trabajar en
entornos Windows. Por aquel entonces, con Visual
Studio 97, bsicamente se sigui el concepto de otros
paquetes y sencillamente se procedi a incluir los
diferentes productos existentes en un mismo paquete, pero cada uno tena su propio ejecutable y trabajaban por separado, con lo que los desarrolladores habitualmente aprendan a manejar un solo lenguaje de programacin.
An hubo otro producto, Visual Studio 6.0, con
la misma filosofa aunque con sensibles mejoras con
respecto a su antecesor. Pero ya en el 2000 el propio Bill Gates anunci pblicamente el cambio
trascendental que Microsoft planeaba para su futura lnea de productos estamos hablando de .NET,
la plataforma de aplicaciones empresariales de
Microsoft que como buenos lectores de esta revista ya conocen con bastante detalle.
As, en la primavera de 2002 presentamos al mercado el nuevo Visual Studio .NET 2002, y con l la base
de este cambio, el primer .NET Framework, as como
ASP.NET y un nuevo y moderno lenguaje basado en
C, que desde su creacin ha recibido el apoyo de
numerosos acadmicos y desarrolladores profesionales, quienes ya lo han convertido en uno de los ms
utilizados en la actualidad; nos referimos por supuesto a C#. Haba llegado la hora de los servicios Web y
la programabilidad de Internet.

Este primer Visual Studio .NET cambiaba drsticamente el concepto de la suite de desarrollo, al
ofrecer un entorno de trabajo integrado y nico
independientemente del lenguaje de programacin
empleado (existen casi 30 lenguajes .NET ahora
mismo), y permitiendo la utilizacin de diferentes
lenguajes en un mismo proyecto. .NET comenzaba a despertar el inters de la comunidad de desarrollo, y en poco tiempo se converta en una alter-

Visual Studio 2005 es el mejor


entorno de desarrollo creado hasta
el momento y con la amplia
variedad de versiones ofrecidas
estamos seguros de que todos los
desarrolladores encontrarn la
solucin a sus necesidades

dnm.plataforma.net
dnm.plataforma.net

Nuevas ediciones para el nuevo Visual Studio 2005


Con Visual Studio 2005 no solo presentamos una versin actualizada y mejorada del producto, adems ampliamos el
alcance del producto, incorporando nuevas lneas para ofrecer soluciones para
todos los perfiles de usuarios.

Visual Studio 2005 Express


As, aparece Visual Studio 2005
Express, compuesta por cinco productos
(los cuatro lenguajes de programacin
Microsoft Visual Basic 2005 Express,
Visual C++ 2005 Express, Visual C# 2005

Me alegro de tener la ocasin de poder


dirigirme a los lectores de dotNetMana
coincidiendo con un momento tan especial
como es el anuncio de Visual Studio 2005, la
nueva y mejorada versin de nuestro conjunto de herramientas de desarrollo.
Atrs quedaron las primeras versiones
de Visual Studio, una evolucin que se ha
venido realizando sobre un firme y constante propsito, el de ofrecer a los desarrolladores una solucin flexible y dinmica que
les permita potenciar su productividad y eficiencia en las labores de desarrollo y testeo
del software.
Este importante lanzamiento se produce conjuntamente con el anuncio de SQL
Rosa M Garca
Server 2005, la esperada versin de nuestro
Consejera Delegada de
gestor de bases de datos y herramienta de
Microsoft Ibrica
business intelligence, y BizTalk Server 2006,
un completo e integrado ecosistema de productos que marcar, sin duda, un antes y un despus en la forma de trabajo de los
desarrolladores. Esperamos satisfacer las expectativas que, tanto la comunidad tcnica como los fieles lectores de dotNetMana, han puesto en nosotros.

Express y Visual J# 2005 Express ms


Visual Web Developer 2005
Express), orientados a los desarrolladores noveles, estudiantes y aficionados
que desean dar sus primeros pasos en el
mundo de la programacin. Dichos productos Express estarn disponibles para
su descarga de forma gratuita por tiempo indefinido, para hacer ms accesible
la plataforma .NET a los futuros profesionales del sector.

como para los profesionales del desarrollo Web tendremos Visual Studio
2005 Standard, el cual incluye opciones como el desarrollo para dispositivos mviles o el soporte nativo de 64
bits, y que permite adems extender
el entorno de desarrollo con ms de
300 herramientas de otros fabricantes
miembros del programa de Partners
de Visual Studio (VSIP).

Visual Studio 2005 Professional


Visual Studio 2005 Standard
Para aquellos desarrolladores que
an utilizan versiones pre-.NET as

Llegamos as a la versin que como


su nombre indica, Visual Studio 2005
Professional, est dirigida a los profesionales del desarrollo trabajando en
solitario o en pequeos equipos. No
solo ofrece importantes mejoras en
cuanto a sus caractersticas (Editar y
Continuar, empaquetamiento y publicacin automticas con ClickOnce,
apariencia consistente de las aplica-

<<dotNetMana

nativa reconocida como plataforma


de aplicaciones empresariales.
Solo un ao despus estaba disponible una versin actualizada del producto, Visual Studio .NET 2003, la cual
inclua ya J# (la sintaxis Java para
.NET) y sobre todo, aparte de mejoras de rendimiento y resolucin de
bugs, integraba el desarrollo para dispositivos mviles, que hasta el momento requera de la utilizacin de otras
herramientas.
Y as llegamos hasta el presente,
con el esperado lanzamiento de la
nueva versin, Visual Studio 2005 (ya
no es necesaria la inclusin de .NET
en el nombre del producto, pues ha
quedado constatado que es el fundamento de la plataforma Microsoft),
el cual ha sido presentado conjuntamente con SQL Server 2005, con el
que est perfectamente integrado, en
este mes de noviembre (aunque an
deberemos esperar unas semanas hasta disponer de versiones en espaol,
previstas para despus de las
Navidades).

<< dnm.plataforma.net

Con Visual Studio 2005


los desarrolladores podrn
Obtener una mayor productividad mediante herramientas integradas
del ciclo de vida de desarrollo que reducen la complejidad de crear soluciones orientadas a servicios y permiten a las organizaciones comunicarse y colaborar ms eficazmente.
Disponer de un mayor conocimiento de los procesos de desarrollo utilizando Visual Studio 2005 Team System, permitiendo a los
equipos de desarrollo analizar sus procesos software, tomar mejores decisiones de desarrollo y mejorar la previsin del ciclo de vida
de desarrollo del software .
Trabajar sobre una plataforma de aplicaciones segura, de alto rendimiento y fiable con el .NET Framework 2.0 y Visual Studio 2005.

ciones y sitios Web con las plantillas


de Pginas Maestras, etc); adems se
ha mejora sustancialmente el rendimiento. Para los interesados en crear
soluciones sobre Excel, Word e
InfoPath disponemos de Visual Studio
2005 Tools para Office System, un aadido que se instala sobre Visual Studio
y permite trabajar con Visual Basic o
C# beneficindose de IntelliSense y el
resto de sus caractersticas a la vez que
se tiene acceso al modelo de objetos
de los productos Office.

Nuevas Suscripciones MSDN


Todas las ediciones Team System se
ofrecen en conjunto con la nueva
Suscripcin MSDN Premium, que viene
a sustituir a la actual MSDN Universal,
de forma que el usuario siempre est al
da y disponga de todos los recursos que
pueda necesitar. Por otro lado, Visual
Studio Professional adems de en solitario podr adquirirse con Suscripcin
MSDN Premium o con Suscripcin
MSDN Professional; mientras que la
Suscripcin MSDN Enterprise desaparece y deja de comercializarse.

Conclusin

Studio 2005 Team Foundation Server. Y


para las empresas que deseen incrementar la carga de usuarios en las pruebas que realizan sobre sus aplicaciones,
se dispone de Visual Studio 2005 Test
Load Agent.

En definitiva, creemos sinceramente que Visual Studio 2005 es el


mejor entorno de desarrollo creado
hasta el momento y con la amplia
variedad de versiones ofrecidas estamos seguros de que todos los desarrolladores, desde los noveles hasta los
profesionales con amplia experiencia,
encontrarn la solucin a sus necesi-

Y por supuesto, Team System ser


muy competitivo en precio respecto a
soluciones de ciclo de vida de otros
fabricantes, acercando y popularizando de este modo su utilizacin en
organizaciones dedicadas al desarrollo en todos los segmentos de mercado, no solo grandes empresas sino
tambin pequeas y medianas.

dades. Como parte del compromiso


de innovacin y mejora que representa Visual Studio 2005, esperamos que
ayude a todos nuestros clientes y
socios de negocio a mejorar su productividad y competitividad y a alcanzar el xito.
Ms informacin en www.microsoft.com/spanish/msdn/vs2005.

<<dotNetMana

Visual Studio 2005 Team System

10

Y por fin nos encontramos con la


gran novedad en este lanzamiento, la
entrada de Microsoft en el mercado de
las herramientas de ciclo de vida del
software con Visual Studio 2005 Team
System. Diseado para el trabajo en
equipo, y puesto que las funciones dentro de los equipos de desarrollo se han
especializado, se ofrecen diferentes
sabores segn el puesto que se
desempea, disponiendo de una edicin para desarrolladores, otra para
arquitectos y otra para probadores de
software. Tambin es posible disponer
de las caractersticas de las tres ediciones mediante el paquete Team Suite.
Estas ediciones trabajan en conjunto
con el repositorio de versiones y portal de proyecto, en un modelo cliente
servidor de nivel empresarial, Visual

dnm.directo.entrevistas

Marino Posadas

Entrevista a Brian Keller


Program Manager de Visual Studio 2005
Adems de su posicin en el equipo de desarrollo de Visual Studio 2005,Brian Keller
se mostr especialmente hbil en un paquete de demos con las que contribuy a la
keynote inicial deAndrew Lees,en el pasado Tech-Ed 2005 de msterdam.Amablemente,
acept responder a nuestras preguntas para dotNetMana.

<< Lo primero, me gustara que nos hicieras un resumen sobre

Marino Posadas es
asesor tcnico y
redactor de
dotNetMana, MVP de
C# y formador de
Alhambra-Eidos

las distintas versiones de Visual Studio 2005, incluyendo las ediciones Express, en trminos de licencias y
precios, o sea, en cuanto a su disponibilidad.
Visual Studio Express est pensado para estudiantes, aficionados y personas que empiezan con desarrollos, sin experiencia previa. Queramos poner a disposicin de este colectivo una herramienta sencilla, inmediata, con todo lo que se necesita para empezar a hacer
desarrollos reales. Por eso incluye muchos tutoriales,
ejemplos, acceso a recursos comunitarios, etc. En trminos de funcionalidad, no existe ninguna limitacin,
salvo algunas herramientas de alto costo como las pensadas para desarrollo en grupo, plantillas empresariales, aplicaciones para dispositivos mviles, etc. Pero
puede desarrollarse cualquier tipo de aplicacin mediante las ediciones Express, aunque no todas las herramientas de soporte estn presentes.
Respecto a las licencias, tampoco existen limitaciones importantes. Se pueden construir aplicaciones para
cualquiera, distribuirlas como se necesite, comercializarlas, etc. Y respecto a los precios, creemos que son muy
competitivos. Por ejemplo, las versiones Express, estn
valoradas alrededor de los 49$, y SQL Server Express es
gratuito y va a continuar en esa categora, y pensamos
que es un gran valor aadido.
A propsito de estos comentarios, en la revista hemos
tenido ocasin de hablar con otros responsables de Visual
Studio, y hemos observado la presencia comn del trmino entusiasta. Puedes explicarnos exactamente qu
entendis por entusiasta, y sobre todo, cuntos de ellos
tenis censados, como usuarios reales y/o potenciales?
Es curioso que lo comentes, porque recientemente
hemos ponderado el nmero de usuarios que pensamos
que caen dentro de las categoras de aficionados o entusiastas, y la cifra sube hasta aproximadamente los 18

millones, en todo el mundo. Son desarrolladores no profesionales, con distintos perfiles: desde el usuario avanzado, el principiante, el administrador de sistemas que
quiere tener capacidades extendidas de administracin
mediante programas, etc.
Has mencionado un nuevo elemento dentro del
men principal de Visual Studio, que tuve ocasin de
comprobar desde las primeras betas, y que est relacionado con la Comunidad (de hecho, se llama as).
Significa eso una voluntad por parte de Microsoft para
abrir lo ms posible los recursos comunitarios de desarrolladores? Vais a continuar con esa lnea?
Hemos estado pensando cmo potenciar los recursos comunitarios vinculados con las herramientas de
desarrollo, y hemos contactado con un gran nmero de
partners para conseguir que esa idea se pudiera expresar de forma clara en el nuevo Visual Studio 2005. Eso
nos llev a incluir esas nuevas opciones e incluso otras,
como los llamados kits de inicio, que pueden verse en la
pgina principal de todos las ediciones de Visual Studio,
incluyendo las Express.
Tiene eso algo que ver con una iniciativa llamada
Coding for fun?
En efecto. Es una idea con soporte Web, que tiene
por objeto suministrar contenidos interesantes en trminos de artculos, cdigo fuente, etc., para que la gente lo pueda incluir en sus propios proyectos. Ahora (primeros de julio/05) ya tenemos una treintena de artculos disponibles y pensamos ir aumentando a un ritmo de
unos dos o tres por semana. Queremos que se mantenga vivo, aadiendo adems, video webcasts, similares a los
que publica Channel9.
Hablemos acerca de lenguajes. Piensas que el lenguaje J# ha evolucionado en su aceptacin en la forma
esperada por Microsoft? Cules son las estadsticas de
uso actuales?

<< dnm.directo.entrevistas

Marino Posadas y Brian Keller

que es quien est desarrollando esa caracterstica. Es una de las herramientas que
se consideran como recursos aadidos y,
a veces, el canal de distribucin, o los
calendarios pactados no permiten que
ciertos elementos aparezcan en las betas,
aunque luego estn en el producto final.
De hecho tambin va a figurar en todas
las versiones Express de los productos.
Aunque ADO.NET no parece haber
cambiado excesivamente desde la versin
anterior, ASP.NET s que ha sufrido un
montn de cambios, nuevos modelos de
compilacin, edicin, desarrollo y distribucin, ms de 60 controles de servidor
aadidos, etc. Supone eso que ASP.NET
estaba inmaduro respecto a ADO.NET?
Lo que pasa, a veces, es que lleva tiempo averiguar cmo la gente va a utilizar
una tecnologa. El equipo de desarrollo
de ASP.NET es uno de los mejores de
Microsoft en trminos de mirar qu es lo
que estn haciendo los clientes, analizarlo y determinar cules son las necesidades. De esa forma, hemos sido capaces de
reducir el cdigo necesario en alrededor
de un 70% para esta versin. Cada versin nueva es mejor que la anterior, porque aprende de los errores cometidos y ve
las carencias con ms claridad.
Aunque no soy muy aficionado a las
preguntas tpicas, a veces parecen inevitables las comparativas. Podras citar las que
para ti son las 3 mejores caractersticas
de la nueva versin, respecto a cuatro puntos concretos: Windows, ASP.NET,
ADO.NET y aplicaciones para mviles?
Para Windows, la distribucin ClickOnce; en ASP.NET, el nmero de nuevos
controles, junto a los kits de inicio; en

ADO.NET, quizs la capacidad de devolver objetos DataTable como valor de retorno de un servicio Web; y respecto a las
aplicaciones para dispositivos mviles, me
gustan especialmente el nuevo emulador,
que es capaz de funcionar en un Virtual
PC, y el soporte de Platform/Invoke para
soportar mensajes SMS.
Para concluir, puedes decirnos algo
acerca de las implicaciones en la adopcin
por parte de los equipos de desarrollo del
nuevo Visual Studio Team System? Por
ejemplo, no me parece que muchos de
esos entusiastas que citbamos antes vayan
a ir por ese camino inmediatamente, debido a la curva de aprendizaje
Es cierto, yo tampoco lo creo. Pienso
que es una herramienta para equipos de
desarrollo ms experimentados, y mayores en volumen que el programador individual. Entre otras cosas, porque requiere conocimientos del ciclo de vida correcto de las aplicaciones, de las que llamamos
best practices, etc. Somos conscientes de
esto, as como de que existe un enorme
trabajo que hacer todava para las prximas versiones en trminos de facilidad de
uso, de caractersticas de instalacin
(recordemos que en la Beta 1 se requeran 3 mquinas distintas para su instalacin, aunque en esta Beta 2, ya slo hace
falta una), etc.
Pero pienso que para el momento
en que el producto est oficialmente en
la calle, vamos a disponer de una excelente herramienta, muy fcil de usar,
considerando las capacidades que tiene,
y que va a suponer una herramienta de
un valor aadido fantstico para nuestros clientes.

<<dotNetMana

Al principio se trataba de un lenguaje estratgico, en muchas formas, ya que


permita una migracin sencilla para los
usuarios de Java. Ah, pensamos que ha
sido tremendamente exitoso, y ha cumplido sobradamente las expectativas. Otra
fuente muy importante de programadores de J# ha sido la comunidad de ISV,
donde la migracin a .NET se ha visto
muy beneficiada por la existencia de J#.
En mi experiencia docente, he podido comprobar que, mientras muchos
organismos oficiales, pymes, y principiantes prefieren Visual Basic, en el mundo universitario, el lenguaje de adopcin
es claramente C#, debido a sus caractersticas sintcticas, fundamentalmente.
Esa situacin perjudica la promocin de
J# como lenguaje?
Nosotros tenemos claro cul es la
situacin del lenguaje en la comunidad en
este momento. Como dije, ha cumplido
y cumple su funcin y expectativas y seguir estando ah, dentro de esos trminos,
por decirlo as. Aunque entendemos que
para la mayora de la comunidad de desarrolladores los lenguajes ms atractivos
sean Visual Basic y C#, por supuesto.
Y, respecto a estos dos ltimos, piensas que todava Visual Basic es el lenguaje ms popular, o est empezando a cambiar la tendencia?
Eso es interesante de analizar, porque
si piensas en todas las versiones de Visual
Basic, como VBA, VBScript, etc., entonces Visual Basic es, sin duda, el lenguaje
ms popular. Pero si slo consideramos los
lenguajes .NET, creemos que la tendencia est empezando a igualarse entre
ambos. Aunque no era as en un principio.
Respecto a las nuevas caractersticas
de los lenguajes, parece que una de las ms
esperadas por los desarrolladores era la de
Editar y continuar, al estilo de las versiones de VB anteriores a .NET. S que
Visual Basic 2005 y C# 2.0 van a incluir
esa caracterstica, pero hay un temor en
los beta-testers respecto a la presencia de
refactoring en Visual Basic, porque las
betas actuales slo la incluyen para C#.
Qu puedes comentar al respecto?
Pues entonces, tengo un mensaje tranquilizador para vuestros lectores, ya que,
aunque no est presente en la Beta 2, s
que lo va a estar en la versin final. Lo que
sucede es que hemos llegado a un acuerdo con otra compaa (Developer Express),

13

dnm.plataforma.net

Marino Posadas

Novedades en la seguridad en
Visual Studio 2005
.NET es una plataforma que naci con la seguridad en mente, por su propio diseo.
En la ejecucin del cdigo (Code Access Security o CAS), en los metadatos que cada
ensamblado especifica de cara a garantizar restricciones en la ejecucin y en un modelo de especificacin de polticas de ejecucin muy configurable.Esta nueva versin contiene novedades y extiende otros conceptos ya presentes, dando a la plataforma un
tono de solidez nico hasta ahora.

<< Podramos dividir en dos categoras las nuevas caractersticas de seguridad, dependiendo del tipo de cdigo a analizar: nativo o administrado. No vamos a tocar
aqu las propias del cdigo nativo, pero s recordar
que, para programadores de C++, la nueva herramienta de anlisis de cdigo que se incluye en Visual
Studio Team System, posee un montn de atractivas novedades en ese sentido. Por una parte, vamos
a comentar brevemente la seguridad del propio
Framework 2.0. Despus, veremos algunos cambios
en Visual Studio 2005.

Seguridad en .NET Framework 2.0

Marino Posadas es
asesor tcnico y
redactor de
dotNetMana, MVP de
C# y formador de
Alhambra-Eidos

Vamos a resaltar algunas de las novedades en los


espacios de nombres de .NET Framework 2.0. La
primera que nos llam la atencin, es la clase
SecureString. Se dise como parte del espacio de
nombres System.Security , y no se almacena en
memoria, como la clase string, sino mediante Data
Protection API (DPAPI), en un espacio controlado
por el sistema. Similares medidas se han tomado en
el espacio de nombres System.Diagnostics, donde
la clase ProcessStartInfo, dispone de una propiedad Password, del tipo SecureString. Garantizan que
el acceso al contenido de la cadena cifrada slo pueda hacerse a travs de DPAPI sin accesos alternativos.
Otra clase especfica de la seguridad es la potente SecurityContext. Permite capturar el contexto
de seguridad de un subproceso y restaurarlo en otro
proceso. Eso incluye los marcadores de subproceso para CAS, tales como Assert y PermitOnly. Otros

aspectos internos de inters tienen que ver con la


propagacin de los smbolos de impersonation
entre distintas hebras. Ese comportamiento, que
no era asumido por .NET anteriormente, ahora s
lo es, hasta el punto de poner a disposicin del usuario los mtodos SuppressFlow() y SuppressFlow
WindowsIdentity(), con el objeto de poder operar
al estilo anterior.

AccessControl
Dentro del espacio System.Security, el namespace AccessControl suministra acceso mediante cdigo
a las ACL (Access Control List) del sistema, no slo en
lectura, sino permitiendo la creacin de nuevos objetos, la toma de control sobre objetos existentes, y la
posibilidad de convertir cadenas SDDL (Security
Descriptor Description Language) en descriptores binarios y viceversa. De hecho, todos los objetos en los
que la seguridad era importante, disponen desde esta
versin de dos nuevos mtodos: GetAccessControl()
y SetAccessControl().
Muchos otros aspectos que no podemos destacar
por la falta de espacio: la clase NegotiateStream, perteneciente a System.Net.Security, permite ahora crear canales seguros de comunicacin para facilitar la
implementacin de Kerberos o SSL en las aplicaciones. En el apartado de la criptografa, las nuevas clases ProtectedData y ProtectedMemory hacen uso directo de DPAPI, y existen novedades como la no necesidad de CAPICOM (el API de criptografa basado
en un mdulo de Interop), para manejar certificados y
mensajes.

<< dnm.plataforma.net
Otras primicias agradables, las
encontramos en los espacios de nombres System.Diagnostics (donde la clase Process permite una llamada directa a CreateProcessWithLogonW , sin
necesidad de Platform/Invoke), o en
System.DirectoryServices y System.Web,
donde podemos usar DPAPI para cifrar
secciones de ficheros Web.Config, con
cdigo de este tipo:

comprobar hasta qu punto un cdigo cumpla con los principios de diseo recomendados. A partir de ahora,
se integra en las ventanas de configuracin de propiedades del proyecto,
donde, adems, podemos observar una
solapa especial Security, dedicada
fundamentalmente a la distribucin
ClickOnce y la forma de garantizar su
ajuste fino.

mos establecer exactamente qu tipo de


permisos se van a conceder en funcin
de las zonas de ejecucin que establece
la directiva CAS (default, LocalIntranet,
Internet, etc.)

//fichero Web.Config
<configuration>
<appSettings>
<add key='pwd' value='secreto'/>
</appSettings>
</configuration>
// manejo de Web.config
string configFilePath = null;
Configuration config =
Configuration.GetExeConfiguration(path,ConfigurationUserLevel.None);
config.AppSettings.ProtectSection(ProtectedConfiguration.DataProtectionProviderName);
config.Update();

Figura 2

Otra de las mejoras a destacar tiene


que ver con la edicin de cdigo. Si hemos
establecido una restriccin a partir de la
ventana anterior (por ejemplo, si hemos
excluido el permiso FileIOPermission), al
intentar editar incluyendo la clase File del
espacio de nombres System.IO, casi todos
los mtodos de la clase aparecen deshabilitados, de acuerdo con la directiva establecida, si bien esta caracterstica slo est
presente en Visual Basic.
A eso hay que subrayar la capacidad de ejecutar cdigo con mnimos
privilegios (una de las recomendaciones para la escritura de cdigo seguFuente 1
ro que encontramos
en la mayora de
manuales), la informacin extendida de
errores de seguridad,
y las nuevas capacidades de testing de aplicaciones ofrecidas por
Visual Studio Team
System, incluyendo la
creacin de tests unitarios, de stress, y un largo etc.
En suma, el producto ha sido revisado
Figura 1. Solapa de Seguridad en la Ventana de
con la seguridad en la
Propiedades de Proyecto
proa, y, nuevos anlisis,
nos irn descubriendo
cmo esa seguridad aparece por doquier
Como vemos, si la aplicacin slo
en toda la plataforma.
dispone de permiso Partial Trust, pode-

Y adems, se han aadido muchas


nuevas clases y propiedades dentro de
CAS (como una nueva clase de evidencia que nos indica si un ensamblado ha
sido cargado desde GAC), as como
otras novedades para el manejo de la distribucin ClickOnce. En un prximo artculo profundizaremos algo ms en estas
caractersticas.

Seguridad en el IDE
FXCop: Una herramienta de obligado cumplimiento
FxCop se haba estado usando
como herramienta independiente para

<<dotNetMana

//fichero de salida
<configuration>
<protectedData>
<protectedDataSections>
<add name="appSettings" provider="DataProtectionConfigurationProvider" />
</protectedDataSections>
</protectedData>
<appSettings>
<EncryptedData>
<CipherData>
<CipherValue>AQAAA...</CipherValue>
</CipherData>
</EncryptedData>
</appSettings>
</configuration>

15

dnm.plataforma.net

Jos Murillo

Programando para 64 bits con


.NET Framework 2.0
Por primera vez, y con la reciente salida de la versin 2005 de Visual Studio, Microsoft
tiene una bonita historia que contar en torno a los 64 bits. Los compiladores para
el .NET Framework 2.0 son los primeros capaces de generar cdigo MSIL optimizado para plataformas de 64 bits, tanto para procesadores Itanium como los
basados en tecnologa extendida x64.

<< La arquitectura de los 64 bits

Jose Murillo
Es ISV Developer Advisor en la
Divisin de Desarrollo y
Plataforma (DPE) de Microsoft
Ibrica.Su objetivo es ayudar a los
fabricantes de software (ISVs) en
la implementacin de tecnologas
Microsoft,especialmente sobre la
plataforma de desarrollo .NET.

La transicin de 32 a 64 bits es tan inminente e inevitable como fue en su momento la de 16 a 32 bits, aunque afortunadamente ya podemos anticipar que no ser
tan compleja, sobre todo para aplicaciones desarrolladas con cdigo manejado.
Las ventajas de los 64 bits son varias: desde poder
direccionar hasta 8 TB (s, TeraBytes!) frente a los
clsicos 3 GB de los procesadores de 32 bits, incluso permitir escalar verticalmente nuestro servidor
hasta nuevos lmites. Un ejemplo: este incremento
de memoria permite al sistema operativo pasar de
un mximo de 115.000 conexiones TCP/IP simultneas a ms de 1.000.000 en Windows Server 2003.
En un escenario de un servidor Web con ASP.NET,
el cambio a 64 bits no supondra slo ventajas para
nuestra aplicacin en cuanto al uso de memoria,
sino sobre todo en el rendimiento y escalabilidad
de nuestra Web.
Dentro de los sistemas de 64 bits podemos diferenciar dos arquitecturas completamente diferentes,
cada una con sus ventajas e inconvenientes, pero sobre
todo destinadas a dos escenarios claramente diferenciados. Es fundamental conocer cules son nuestros
objetivos y prioridades antes de decantarnos por una u
otra arquitectura.
Por un lado nos podemos encontrar con los sistemas basados en procesadores extendidos, los conocidos
como x64, basados en la tecnologa EM64T (Extended
Memory 64 Technology). Ejemplos de stos son los sistemas basados en Intel Xeon, Pentium 4 x64 o AMD Athlon

Los procesadores Itanium estn


diseados principalmente para ejecutar
cdigo nativo en 64 bits, no de 32 bits
64 entre otros. Son procesadores que mantienen su
ncleo de 32 bits pero incorporan un conjunto de instrucciones extendidas que le permiten ejecutar cdigo
de 64 bits. Estos sistemas nos permiten acceder a las
ventajas de los 64 bits pero manteniendo la habilidad
de ejecutar cdigo 32 bits de forma nativa con el rendimiento habitual.
Por otro lado podremos encontrar procesadores
nativos de 64 bits, los conocidos como IPF (Itanium
Pentium Family) o IA64 y basados en la tecnologa EPIC
(Explicit Parallel Instruction Computing). Son procesadores con arquitectura completamente diferente a los x86
o x64, mucho ms potentes y capaces de ejecutar hasta
6 instrucciones en paralelo. El inconveniente de estos
procesadores es que no pueden ejecutar cdigo de 32
bits de forma nativa, as que esta ejecucin de cdigo
de 32 bits se realiza a nivel del sistema operativo mediante un subsistema de emulacin conocido como WoW64
(Windows 32 on Windows 64). Por desgracia, el impacto de este subsistema de emulacin en el rendimiento
es bastante elevado.

<< dnm.plataforma.net

Tanto en C# como en Visual Basic 2005


podemos generar cdigo manejado
para 64 bits
Generacin de cdigo para 64 bits con
Visual Studio 2005
El IDE de Visual Studio 2005 sigue siendo una aplicacin de 32 bits, aunque por primera vez soportada en
WoW64. Esto quiere decir que ya podemos instalarlo
directamente en mquinas Itanium, aunque mi recomendacin personal es no hacerlo y seguir desarrollando sobre estaciones de trabajo de 32 bits. En este caso,
el modelo de desarrollo recomendado es mediante despliegues y depuracin remota sobre la mquina Itanium.
De todas formas, aunque despleguemos el IDE en la misma mquina, si intentamos depurar cdigo nativo de 64
bits, nos encontraremos con el IDE ejecutando bajo 32
bits y la aplicacin a depurar en 64 bits, con lo cual internamente se utilizar depuracin remota an dentro de
una misma mquina, ya que cdigo de 32 y 64 bits no
pueden convivir en un mismo proceso.
Lo que s cambian son los compiladores. Tanto en
C# como en Visual Basic 2005 podemos generar cdigo manejado para 64 bits. Pero no habamos quedado en que el cdigo MSIL era cdigo intermedio independiente de la plataforma? por qu tenemos entonces que volver a recompilar para 64 bits? Efectivamente
el cdigo MSIL que generamos con la configuracin
por defecto (anyCPU) es agnstico a la plataforma. Este
cdigo puede ser ejecutado en cualquier tipo de procesador, ya que el JITter generar cdigo nativo sobre
la marcha. En el caso de mquinas de 64 bits, se ejecu-

...portar nuestras aplicaciones .NET a 64 bits


consiste simplemente en cambiar el target de la
configuracin de compilacin y recompilar
tar sobre el Framework 2.0 para 64 bits, con lo cual el
rendimiento ser mayor. Sin embargo, esto ya era posible con el cdigo generado mediante Visual Studio
2003, aunque era ejecutado sobre una versin del
Framework 1.0 o 1.1 corriendo en 32 bits bajo WoW64,
con lo cual el rendimiento era incluso inferior que en
mquinas nativas de 32 bits.
La gran novedad es la posibilidad que tenemos ahora con Visual Studio 2005 de especificar como target en
la configuracin de compilacin tanto procesadores
Itanium (IA64) como Extendidos (x64). En este caso, el
cdigo MSIL generado estar optimizado para que el
JITter de dichas plataformas sea capaz de generar cdigo nativo optimizado para ese procesador, por ejemplo
haciendo as uso de las nuevas capacidades de Itanium
para ejecutar instrucciones simultneamente. El incremento del rendimiento de nuestra aplicacin en estos
casos es notable.
As pues y con todo lo visto, podemos decir que en
la mayora de los casos, portar nuestras aplicaciones .NET
a 64 bits consiste simplemente en cambiar el target de la
configuracin de compilacin y recompilar.
Obviamente el escenario se complica si tenemos
dependencias de cdigo de 32 bits, tanto en componentes COM accedidos mediante COM Interop, como en
DLL nativas referenciadas mediante Platform Invoke. En
el caso de que tengamos acceso al cdigo de estos componentes, la recomendacin es recompilarlos tambin
en 64 bits.
En el caso de que no tengamos acceso al cdigo fuente o podamos recompilar los componentes en 64 bits, tendremos que exponerlos a nuestro proceso manejado de
64 bits mediante un proceso wrapper de 32 bits y realizar
la comunicacin mediante mecanismo IPC (InterProcess
Communication). Si nuestro componente es COM, bastar con registrarlo en COM+ como servidor, as ser la
propia plataforma de COM+ quien nos lo exponga a nuestro cdigo manejado mediante un proceso de 32 bits. Si
el componente es una DLL nativa, por ejemplo en C o
C++, tendremos que hacer un wrapper nosotros mismos,
por ejemplo mediante un Server ATL que lo encapsule y
exponga el mismo contrato mapeado.
Animaos! Slo tenis que cambiar una opcin de
la configuracin de Visual Studio y recompilar para 64
bits. Ahora ya slo nos falta una mquina de 64 bits para
poder ejecutarlo :-).

<<dotNetMana

Los procesadores con tecnologa extendida x64 estn


destinados principalmente a estaciones de trabajo con
grandes necesidades de rendimiento, direccionamiento
de memoria, o precisin en operaciones de coma flotante, como por ejemplo aplicaciones de diseo grfico
CAD, de clculos de ingeniera, o simplemente para entusiastas de videojuegos o sistemas multimedia.
En el caso de los procesadores IA64 o Itanium, su
uso est principalmente destinado a servidores de backend como bases de datos (existe una versin de SQL
Server 2000 y 2005 para IA64), servidores de componentes de 64 bits, o servidores de aplicaciones Web para
64 bits. Como vemos, el mensaje es claro. Los procesadores Itanium estn diseados principalmente para ejecutar cdigo nativo en 64 bits, no de 32 bits.

17

dnm.asp.net

Jos M.Alarcn

Novedades para desarrollo Web en


ASP.NET 2.0 y Visual Web Developer 2005
Si bien ASP.NET 1.x era un marco de desarrollo Web excelente, lo cierto es que
la nueva versin 2.0 es todava mucho mejor y viene con gran cantidad de caractersticas nuevas. Slo por alguna de ellas ya merece la pena actualizarse. El entorno de Visual Studio 2005 tambin se ha mejorado notablemente.Vamos a conocer todas estas interesantes mejoras y aadidos.

<< Cuando la primera beta de la plataforma .NET asom la cabe-

Jos Manuel Alarcn


es redactor de dotNetMana.
Es ingeniero industrial y
especialista en consultora de
empresa. Ha escrito varios libros,
y ha publicado ms de
doscientos artculos sobre
informtica e ingeniera en
revistas especializadas.Visita su
blog en www.jasoft.org.

za all por el verano del ao 2000 (ya han pasado ms


de 5 aos, parece mentira!) todos los programadores
contuvimos la respiracin. Aquello era todo tan nuevo
y diferente de lo que conocamos en el mundo Microsoft
que supona una amenaza, pues haba que aprenderlo
todo desde cero de nuevo si realmente la cosa iba en
serio. Por fortuna en cuanto te metas un poquito en
ello veas que las ventajas sobrepasaban con creces a las
dificultades y que .NET iba a hacernos la vida ms fcil.
De todas las reas abarcadas por .NET, la ms espectacular y novedosa era, sin duda, la referida al desarrollo de aplicaciones Web. La diferencia entre ASP.NET
1.x y cualquier otro marco de desarrollo Web conocido por entonces era simplemente abismal: controles,
viewstate, postback, enlace a datos, compilacin, etc, etc.
Combinado con Visual Studio y todas sus herramientas grficas, ASP.NET ofreca un poder sin precedentes para crear aplicaciones HTTP.
Aunque ASP.NET 1.x es espectacular y parece
que las mejoras siempre podrn ser pocas, lo cierto
es que la versin 2.0 del marco de desarrollo vuelve
a sorprendernos gratamente. Los chicos de Microsoft
no se han limitado a aadir unas cuantas cosillas de
compromiso. La 2.0 trae tantas novedades que es
difcil elegir por dnde empezar. De todos modos
conviene destacar un par de hechos importantes respecto a esta nueva versin:
Segn estimaciones de Microsoft la nueva versin de ASP.NET permite reducir las lneas de
cdigo que es necesario escribir en un 70% en
muchos escenarios, sobre todo en los que hacen
uso intensivo de enlazado a datos.

Los nuevos controles Web incrementan la productividad de forma espectacular tanto en tratamiento y visualizacin de datos como en
cuestiones relativas a seguridad.
Dicho esto vamos a conocer las novedades ms
importantes. Empezaremos por las menos obvias
pero an as significativas, e iremos viendo las ms
espectaculares al final para mantener as la tensin
dramtica ;-)

Nuevo modelo de compilacin y menos


cdigo
Si abrimos una pgina ASPX y su correspondiente
archivo de cdigo (.vb o .cs) en ASP.NET 1.x veremos mucho cdigo. Para empezar, todos los controles de la pgina se declaran como miembros de la
clase que la representa y existe una parte de inicializacin con bastante cdigo. Adems el archivo .ASPX
utiliza lo que ha dado en llamar Code-Behind para
relacionar el cdigo con la interfaz de usuario, y
ambas deban estar sincronizadas en cuanto a sus
miembros pblicos (los mismos controles declarados) para funcionar.
La nueva versin utiliza mucho menos cdigo.
Para ello emplea un nuevo modelo de compilacin
y de relacin entre una pgina ASPX y su cdigo asociado, que saca partido a una de las nuevas caractersticas de los lenguajes de la plataforma: las clases
parciales. La caracterstica de clases parciales permite dividir el cdigo que define a una clase en diversos archivos en lugar de obligarnos como hasta aho-

<< dnm.asp.net

Segn estimaciones de Microsoft la nueva versin de


ASP.NET permite reducir las lneas de cdigo que es
necesario escribir en un 70% en muchos escenarios

<% @ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>

Si nos fijamos, ahora ya no se utiliza el atributo CodeBehind que apareca en esta directiva en las pginas de
la versin 1.x. En su lugar se utiliza el
atributo Codefile que indica tambin
en qu archivo est la funcionalidad
asociada a esta interfaz de usuario. Si
indican lo mismo: a qu se debe este
cambio?.
Si examinamos el archivo de cdigo
(.cs o .vb) asociado a la pgina, veremos que tiene muchas menos lneas y
es ms sencillo de leer (ms limpio)
que el de versiones anteriores, tal y
como se observa en la figura 1. En esta
misma figura podemos contemplar que
incluso la versin de Visual Basic es
todava ms limpia que la de C# al no
incluir siquiera sentencias Imports mientras que la de C# lleva varios using.

ye la nueva palabra clave Partial (en


minsculas en C#). Es decir, lo que
vemos es slo una parte de la definicin
de la clase que representa la lgica de la
pgina. Ello se debe a que, cuando
ASP.NET compila la pgina, primero
completa automticamente el cdigo de
la clase _Default con otra implementacin parcial de sta en la que se definen
los controles de la pgina (el cdigo que
ha desaparecido respecto a las versiones
anteriores del entorno). Luego define
una nueva clase especfica para la pgina que hereda de _Default y es en ella
donde inicializa los controles y hace el
nexo entre la interfaz y la lgica. Es por
este motivo que ahora los manejadores
de eventos de la clase se declaran con
accesibilidad protected, para que puedan utilizarse desde la clase derivada.
A esta novedosa
forma de separar (y
al mismo tiempo
unir en tiempo de
ejecucin) la interfaz
de la lgica hay
quien la denomina
code-beside, como
homenaje al hasta
ahora utilizado codebehind de ASP.NET
1.x. Slo este cambio
ya nos hace la vida
mucho ms fcil a los
programadores.
Es muy fcil comFigura 1. Como se puede observar, tanto en Visual Basic como en
probar este funcionaC# el cdigo de nuestras pginas se ha reducido considerablemente
miento si nos vamos a
gracias a la tcnica de clases parciales empleada.
la carpeta temporal de
ASP.NET y abrimos
los archivos de cdigo generados de forSi nos fijamos en la definicin de la
ma automtica que all encontraremos.
clase veremos que su definicin inclu-

Ahora Visual Studio nos permite disponer del cdigo y la interfaz en el mismo archivo si lo deseamos; cosa que
antes no era posible desde el entorno.
Tambin nos deja mezclar cdigo y
pginas escritas en diferentes lenguajes
al mismo tiempo, depurando la aplicacin en todas ellas a la vez.
Se han definido una serie de carpetas en el raz de las aplicaciones que tienen un significado especial. Por ejemplo, si creamos una carpeta llamada
App_code, todo archivo de cdigo fuente que coloquemos en ella se compilar
automticamente y estar disponible
para su uso desde las pginas del sitio
Web. Se pueden mezclar ah archivos
de cdigo escritos en diferentes lenguajes e incluso, slo con dejar en ella
los archivos .wsdl y .xsd que definen un
servicio Web se crea de forma automtica un proxy para poder utilizarlo (aunque no veremos el cdigo auto-generado s podremos hacer uso de l). Aunque
para esto ltimo ya existe una carpeta
especial llamada App_WebReferences que
nos permitir mantener ordenadas nuestras referencias a servicios. Como
vemos todas estas carpetas llevan el
prefijo App_. Existen muchas otras
como App_Data, App_GlobalResources,
App_LocalResources o App_Themes.
Con ASP.NET 2.0 se proporciona
una herramienta de precompilacin de
sitios Web (Aspnet_compiler.exe). Gracias
a ello podemos precompilar nuestras aplicaciones evitando la compilacin dinmica y por tanto reduciendo el tiempo de
inicio de ejecucin de las mismas (no se
generan las pginas bajo demanda).
Adems proporciona un modo de precompilacin especial para distribuir aplicaciones que elimina todo rastro de nuestro cdigo (incluso del HTML de las pgi-

<<dotNetMana

ra a mantener todo lo relativo a una clase dentro del mismo lugar. Esta caracterstica a simple vista puede parecer una
nimiedad, pero realmente tiene gran
inters ya que permite cosas como
repartir el trabajo de una clase entre
varios programadores, o caractersticas
como el nuevo modelo de soporte de
cdigo que mencionamos.
En las pginas ASPX de la versin
2.0 hay una directiva Page anloga a la
siguiente:

19

<< dnm.asp.net
nas ASPX) y nos facilita su despliegue con XCopy protegiendo nuestra propiedad intelectual.
Las nuevas clases de manipulacin de archivos de
configuracin mejoran nuestras capacidades para crear asistentes de configuracin e instaladores de aplicaciones. Ahora existe tambin una zona concreta dentro del archivo de configuracin que se usa para almacenar cadenas de conexin a bases de datos, facilitando su acceso. A esto se une la capacidad de ASP.NET
2.0 para cifrar y descifrar automticamente zonas enteras de web.config usando DPAPI, por lo que se mejora mucho la seguridad ante el robo de estos archivos.

Controles nuevos y mejorados


En general todos los controles Web se han mejorado bastante. Ahora devuelven siempre etiquetas compatibles con el estndar XHTML 1.1. Existe una nueva
caracterstica de los controles Web llamada renderizacin adaptativa. sta permite que dichos controles se
adapten a las caractersticas del navegador que solicite la
pgina de un modo mucho ms flexible que los controles anteriores. Por ejemplo, un mismo control Web se
ver correctamente (aunque de forma diferente) en un
navegador de escritorio como Internet Explorer y en un
navegador WAP desde un telfono mvil si existen directivas de renderizado para ellos. Tambin se pueden usar
filtros dependientes del dispositivo en las propiedades
de los controles indicando valores distintos para diferentes dispositivos.
En tiempo de diseo algunos controles muestran un
panel de tareas adjunto que facilita asistentes y accesos
directos a sus caractersticas ms importantes (figura 2).
Gracias a l se acelera mucho el trabajo.
Existen nuevos controles que mejoran a algunos anteriores, as como controles desconocidos hasta la fecha.
Por ejemplo, el control GridView mejora notablemente
al anterior control de rejilla DataGrid y permite hacer
ms cosas con menos cdigo. De hecho, aunque controles anteriores de este tipo siguen estando soportados
ni siquiera aparecen en el cuadro de herramientas. Existen
controles nuevos como Wizard, ImageMap o Substitution
entre otros que dotan de nuevas capacidades. Por ejem-

plo el primero de ellos (Wizard) permite la creacin visual


de asistentes en mltiples pasos e introduce el JavaScript
y la lgica de servidor necesarios para conseguir su funcionamiento.
Existen categoras enteras de nuevos controles como
los relacionados con la seguridad, los portales personalizables o la navegacin. Estos ltimos ofrecen grandes
facilidades para crear elementos de exploracin de la
estructura de una Web como mens desplegables, rboles o rutas. De los otros hablaremos dentro de un rato.
Los controles de usuario ahora son ms potentes,
fundamentalmente por dos motivos: su aspecto al utilizarlos y la facilidad acceder a ellos. Ahora, al emplearlos
en alguna pgina, ya no se muestra un aburrido rectngulo gris sin pistas de cmo es el control en realidad.
Desde el diseador de la pgina veremos el aspecto real
del control de usuario (figura 3) y podremos redimensionarlo y trabajar mejor con l.
Para usar un control de usuario desde cualquier pgi-

Figura 3.Ahora los controles de usuario se muestran con su


verdadero aspecto en la superficie de diseo de las pginas
por lo que resultan ms intuitivos y fciles de usar.

na ASPX antes haba que emplear una directiva <%@


Register %> en cada una de ellas. No es que se tratase de un gran problema porque al arrastrar un control
sobre una pgina, el entorno de Visual Studio lo haca
automticamente, pero s era un engorro si decidamos cambiar la definicin del control (haba que tocar
todas las pginas) o decidamos sustituirlo por otro
(haba que retocar o borrar manualmente las directivas). En ASP.NET 2.0 se puede definir un control para
su uso directo desde cualquier pgina registrndolo en
web.config dentro del nodo <system.web>:
<pages>
<controls>
<add tagPrefix="miUC"
namespace="MisControles.MiControldeUsuario"/>
</controls>
</pages>

<<dotNetMana

Internacionalizacin

20

Figura 2. Los paneles de tareas disponibles en algunos


controles resultan de gran ayuda para trabajar.

Otra gran novedad de ASP.NET 2.0 es la renovada capacidad de internacionalizacin de aplicaciones que es ms fcil que nunca. Podemos conseguir que los elementos de la interfaz se adapten
automticamente a las preferencias de idioma del
navegador de los usuarios creando archivos de
recursos para cada idioma y colocndolos en una
carpeta especial.

<< dnm.asp.net
Existen recursos locales (para pginas
concretas) y globales (utilizables desde
cualquier lugar). Las carpetas especiales
para ellos son respectivamente App_
LocalResources y App_GlobalResources.
Los archivos de recursos tienen extensin
.resx y poseen un editor propio (figura 4)
que permite aadir no slo cadenas de texto, sino iconos, imgenes y sonidos especficos de cada cultura.

Figura 4. El editor de recursos integrado


de Visual Web Developer.

Por ejemplo, para que una pgina

trata de controles que representan conexiones con diferentes tipos de orgenes de


informacin que van desde bases de datos
a objetos de negocio. No disponen de apariencia visual pero se arrastran igualmente sobre los formularios Web para trabajar con ellos visualmente y poder usar sus
paneles de tareas. Abstraen al programador de las complejidades relacionadas con
el manejo de los datos, permitiendo de
manera automtica seleccionarlos, actualizarlos, ordenarlos, paginarlos, etc. No
hace falta volver a escribir cdigo
ADO.NET de bajo nivel ms que en circunstancias muy concretas.
ASP.NET 2.0 provee de serie con los
siguientes tipos de orgenes de datos:
Control

Descripcin

SqlDataSource

Enlaza con cualquier base de datos para la que exista un proveedor


de ADO.NET.
Est especializado en trabajar con bases de datos Microsoft Access.

mipagina.aspx pueda utilizar recursos loca-

lizados basta con crear un archivo con el


mismo nombre y extensin .resx (sera
mipagina.aspx.resx) e incluir en ella los
distintos recursos del idioma por defecto.
Para enlazarlo a la interfaz se usa una etiqueta especial (resaltada en negrita en este
ejemplo):
<asp:Label ID="Label1" runat="server" Text=" <% $
Resources:Saludo %> "></asp:Label>

Esto har que dinmicamente a la propiedad Text de la etiqueta se le asocie el


valor del recurso de nombre Saludo. Si
ahora creamos otro archivo de recursos
con una extensin adicional para indicar
el idioma (por ejemplo, mipagina.aspx.enus.resx para el ingls americano) se asociar el valor del idioma correspondiente
cuando el usuario lo haya elegido como
preferido en su navegador.
Para que esto funcione de forma
automtica hay que incluir el nodo
siguiente en web.config:

se puede reutilizar la misma pgina para


hacer uso de los datos de cualquier otra
fuente.
El comportamiento de los orgenes
de datos se puede parametrizar a partir
de casi cualquier cosa: desde valores de
propiedades de otros controles hasta cookies o cabeceras HTTP recibidas y por
supuesto directamente por cdigo.
En el caso de aplicaciones empresariales tal vez el origen de datos ms interesante sea el ObjectDataSource. Expone
los mismos mtodos que cualquiera de
los otros pero en lugar de acceder directamente a los datos emplea objetos personalizados de capa de negocio para
hacerlo.

AccessDataSource
ObjectDataSource

Se enlaza con objetos de negocio y capas personalizadas de acceso a


datos.

XmlDataSource

Trata datos contenidos en documentos XML.

SiteMapDataSource

Se enlaza con la jerarqua de clases expuesta por el modelo de


navegacin de sitios de ASP.NET 2.0.

A pesar de su nombre, el primero de


ellos no slo se enlaza a bases de datos
SQL Server sino que lo hace con cualquier sistema gestor de datos para el que
exista un proveedor .NET, como
Oracle, MySQL, o mediante un controlador OLEDB u ODBC.
Cuando hemos definido un control
de tipo DataSource en una pgina basta con asignar su nombre en la propiedad DataSourceID de cualquier control
que se enlace a datos (casi todos) para
que funcione. As de simple. Como
todos los controles DataSource soportan las mismas interfaces, slo con cambiar la asignacin del origen de datos

Plantillas de pginas, temas y


skins
Lo ms habitual cuando se crea una
aplicacin o un sitio Web es que las pginas que lo conforman sean todas bastante
parecidas o al menos que existan varios
grupos de pginas similares que slo varan ciertos contenidos entre ellas. En
ASP.NET 1.x si queramos que nuestras
pginas dispusiesen de zonas comunes para
conseguir un aspecto COHERENTE
debamos recurrir a soluciones caseras
como emplear controles de usuario colocados manualmente en todas las pginas

Mejoras en el uso de caractersticas de datos


El nuevo modelo de enlazado a datos
desde la interfaz de usuario se basa en el
uso de orgenes de datos en lugar de enlazar directamente con objetos DataSet. Se

Los temas de ASP.NET son como hojas de estilo


que se aplican a controles Web y sus elementos tienen
una sintaxis prcticamente idntica a la de los
controles cuyo aspecto definen

<<dotNetMana

<globalization uiCulture="auto"/>

21

<< dnm.asp.net

NOTA
Aunque normalmente soy partidario de utilizar
los trminos en castellano siempre que los haya, en
este caso hago una excepcin y empleo siempre el
trmino anglosajn Master Pages (o MP) para referirme a esta caracterstica. El motivo es que este
trmino es el ms aceptado y el que veremos con
ms frecuencia y adems considero que la traduccin Pginas principales elegida por Microsoft no
ha sido la ms afortunada.

(cabeceras, laterales y pies, por ejemplo) o bien crear una


clase propia heredada de Page que cargase ciertos controles automticamente. Ninguna de estas soluciones era
realmente buena o estaba exenta de problemas.
ASP.NET 2.0 proporciona un modelo nativo y coherente para crear plantillas de pginas que se reutilicen
sin esfuerzo entre las pginas de un sitio Web. A esta
caracterstica se la denomina Master Pages (MP).
Una Master Page proporciona una forma de definir una estructura e interfaz comunes para un grupo
de pginas pertenecientes a un mismo sitio Web. Esta
estructura comn se almacena en un nico archivo
independiente. Ello facilita mucho su mantenimiento puesto que, para actualizar todas las pginas que lo
utilizan, basta con editar dicho archivo.
Una Master Page es en realidad como una pgina
ASPX normal que contiene cdigo, elementos HTML
y controles Web de servidor. Sin embargo, poseen una
extensin diferente (.master) y utilizan una directiva
<% @ master %> en lugar de una directiva <% @ page %>.
Por lo dems se pueden considerar prcticamente equivalentes. Esto es importante porque significa que ya sabemos todo lo necesario para crearlas.
Una pgina ASPX normal puede derivar su estructura a partir de una MP simplemente aadiendo un atributo MasterPageFile a su directiva de pgina, as:

<<dotNetMana

<% @ Page Language="C#" MasterPageFile="~/Articulos.master"...

22

Que indica el archivo de pgina principal que se


utilizar para su estructura.
Para agregar una Master Page a nuestro proyecto
slo hay que elegir el icono Pgina Principal en
el dilogo de agregar nuevo elemento, del mismo
modo que se aade cualquier otro objeto. Al abrir
una MP aparece un diseador idntico al de una
pgina ASPX normal. Podemos arrastrar sobre su
superficie cualquier control as como editar su
HTML de la manera usual. Tambin lleva un archivo de cdigo asociado en el que se puede responder a sus diversos eventos. La nica diferencia apreciable a simple vista respecto a una pgina normal
es que contiene por defecto un control de tipo

ContentPlaceHolder. La sintaxis de este control es


anloga a la siguiente:
<asp:contentplaceholder id="Contenido" runat="server">
</asp:contentplaceholder>

Su nica propiedad interesante es precisamente


su identificador ya que este tipo de control se utiliza
para marcar las posiciones en las que irn los diferentes contenidos de las pginas derivadas dentro de
la plantilla de estructura que es una Master Page.
De este modo, cuando una pgina normal derive
de una MP, slo se podr introducir cdigo dentro de
las zonas definidas por estos comodines de contenido, permaneciendo las dems inalterables.
Al editar una pgina que deriva de una Master Page
aparece el aspecto y estructura de la pgina principal en
el diseador, pero slo se pueden tocar las partes correspondientes a los comodines de contenido (vea figura 5).

Figura 5.Al editar una pgina que hace uso de una Master Page slo podremos modificar aquellas zonas definidas para contenidos en la plantilla.

Adems las MP se pueden anidar de forma que


unas hereden el aspecto y la disposicin de otras, aunque en este caso no se podrn usar directamente desde el diseador de Visual Studio .NET 2005.
Gracias a las Master Pages podemos definir una
estructura comn para las pginas de nuestra aplicacin Web. Sin embargo, an no hemos resuelto todas
las cuestiones sobre el mantenimiento de la interfaz
que se presentan normalmente. Los controles que aadamos a las zonas de contenido de nuestras pginas
todava tendrn el aspecto predeterminado. Podemos
configurar su aspecto estableciendo las propiedades de
apariencia del control (como BackColor, Font, etc...). El
problema que tiene este mtodo es que, si deseamos
cambiar por completo la apariencia de estos controles,
tendramos que tocar una por una todas las pginas.
Esta no es una opcin admisible en cuanto la aplicacin dispone de ms de unas pocas pginas.
Aparte del normal uso de hojas de estilo en cascada (CSS) que proporciona HTML, ASP.NET 2.0
introduce una interesante novedad que se comple-

<< dnm.asp.net

Figura 6. Estructura de ejemplo de la carpeta de temas de


una aplicacin. En este caso hay dos temas diferentes (white
y black) cada uno con sus correspondientes archivos de
definicin.

Un archivo de mscara contiene definiciones de


controles ASP.NET a los que se le establecen valores de propiedades que sern aplicadas de modo automtico cuando aparezcan en una pgina que use el
tema al que pertenece la mscara. Por ejemplo, si un
archivo .skin contiene el siguiente cdigo:
<asp:TextBox runat="server" BackColor="#FFFF80" BorderColor="#C04000"
BorderStyle="Dotted" BorderWidth="1px"></asp:TextBox>

Conseguiremos que las pginas que lo apliquen dispongan de controles TextBox con el fondo gris claro y
el borde punteado de 1 pxel de ancho. Al igual que en
las CSS es posible definir diferentes clases para un mismo tipo de control y aplicarlas selectivamente.
Para que una pgina se adapte automticamente
a un tema definido en la carpeta App_Themes lo nico
que tenemos que hacer es asignar un atributo Theme
en la directiva de la pgina, as:
<% @ Page Theme="MiTema" Language="VB" AutoEventWireup="false"
CodeFile="Default.aspx.vb" Inherits="_Default" %>

El segundo atributo indica el tema que se va a


aplicar. El entorno de desarrollo nos ofrece de manera automtica una lista de temas disponibles al escribir este atributo por lo que es muy fcil usarlo. Nada
ms establecer el atributo, la pgina se personaliza
siguiendo los dictados de los archivos .skin que haya
definidos para el tema. Dado que podemos disponer de varios temas se puede asignar uno diferente
a cada grupo de pginas de una aplicacin segn las
necesidades.
Para no tener que establecer manualmente los
temas y las Master Pages a cada pgina, es posible definirlos de manera global para un sitio o una carpeta
de ste por medio de sendas entradas en el archivo
web.config, por lo que se facilita mucho ms la tarea
en sitios grandes.

Webparts: trocitos de portales


Por si a alguien las nuevas capacidades de personalizacin y adaptacin automtica a plantillas le pareciesen poco, con esta nueva revisin de la plataforma
se incluyen unos nuevos elementos de interfaz de usuario realmente impresionantes: los Webparts.
Si usted ha visto en alguna ocasin en funcionamiento Sharepoint Portal Server ya sabe a qu me
estoy refiriendo. S, en efecto, aadir la capacidad de
personalizar una pgina visualmente, arrastrando y
soltando sus distintos elementos como en Sharepoint
es una capacidad estndar que se ha aadido a
ASP.NET gracias a los Webparts. Y lo mejor es que
podemos crear nuestros propios Webparts y reutilizarlos en otras aplicaciones ASP.NET as como en el
propio Sharepoint. Aunque la tarea se ha facilitado
mucho sigue siendo algo compleja de habilitar y
requiere una buena explicacin que abordaremos en
un prximo artculo. De momento le dejamos, amigo lector, con la miel en los labios.

Seguridad, control de acceso y personalizacin


Hasta ahora, si queramos establecer un sistema
de seguridad propio ajeno a las caractersticas de IIS
o el propio sistema operativo emplebamos autenticacin Forms. En este sistema con ASP.NET 1.x era
el propio programador el que deba construir sus propios sistemas de almacenamiento, validacin y uso de
perfiles de usuario y roles. Ello implicaba normalmente escribir cdigo de consulta contra bases de
datos, el cual validara las credenciales de los usuarios y obtendra los roles de los mismos. Luego se
creaban objetos de seguridad (Principal e Identity) asignndole estos valores y asocindolos al contexto de
la aplicacin.
ASP.NET 2.0 nos libera por fin de todo ello y
ofrece de serie una completa API de gestin de

<<dotNetMana

menta a la perfeccin con las Master Pages para solventar el problema del aspecto: los temas y mscaras
de controles Web.
La funcionalidad ofrecida por los temas de
ASP.NET 2.0 se entiende fcilmente si los asemejamos
con las hojas de estilo. Los temas de ASP.NET son como
hojas de estilo que se aplican a controles Web y sus elementos tienen una sintaxis prcticamente idntica a la
de los controles cuyo aspecto definen.
Un tema de ASP.NET 2.0 est formado por uno
o varios archivos de tipo .skin junto con las imgenes y hojas de estilo CSS que stos utilicen, que se
almacenan dentro de una carpeta con el nombre del
tema y que a su vez est contenida en una carpeta
especial de nombre App_Themes. Por ejemplo, la figura 6 muestra una carpeta App_Themes que contiene dos
temas y cada uno de ellos a su vez contiene un archivo .skin, hojas CSS y grficos especficos del tema.

23

<< dnm.asp.net
usuarios que nos evita tener que reinventar la rueda en cada aplicacin. La
clase Membership proporciona una sencilla interfaz de programacin para
almacenar y recuperar informacin
sobre los usuarios de nuestras aplicaciones. Lo ms interesante de todo es
que, al igual que muchas otras caractersticas nuevas de ASP.NET 2.0, est
basada en un patrn de diseo de proveedores, lo que permite cambiar los
mtodos de trabajo y almacenamiento sin tocar el cdigo de la aplicacin.
Es decir, abstrae la funcionalidad del
soporte fsico utilizado para implementarla. As, por defecto esta API
utiliza SQL Server 2005 para almacenar toda la informacin de seguridad
de una aplicacin. Pero dada su arquitectura basada en proveedores podemos cambiar el modo de gestin con
slo un ajuste en el archivo de configuracin. Incluso, es posible definir
mtodos de gestin de usuarios propios sin modificar el cdigo de nuestras aplicaciones. Esto nos permite
reutilizar infraestructuras de seguridad preexistentes que hubisemos creado para ASP.NET 1.x sin perder el
trabajo.
Membership consta de un conjunto de
mtodos estticos (compartidos) para
poder crear, eliminar y validar usuarios
entre otras cosas. As, por ejemplo, para
crear un usuario escribiramos:
Membership.CreateUser("usuario", "clave")

Y para validarlo slo hay que usar su


mtodo ValidateUser:

<<dotNetMana

Membership.ValidateUser("usuario", "clave")

24

Que devuelve verdadero o falso en


funcin de si las credenciales son o no
vlidas.
El objeto Roles complementa al
anterior para permitir la gestin de los
roles de un usuario y, al igual que aquel,
est basada en el mismo patrn de proveedores. No es necesario utilizar el
mismo proveedor para los roles que
para los usuarios. Por ejemplo, se pueden autenticar usuarios contra una base
de datos SQL Server y obtener los roles
desde el Directorio Activo o las cuentas locales.

Por fin, para la parte de


personalizacin, esto es, mantener las preferencias de los
visitantes de nuestro sitio sin
complicarnos la vida, se provee
de un objeto Profile similar a
los anteriores y tambin basado en proveedores.
Se proporciona una completa interfaz de gestin de
usuarios, roles y configuracin
(figura 7) de la que tenemos el
cdigo fuente y que nos facilita mucho la vida a la hora de
establecer los datos iniciales de un sitio
Web.

Figura 8.Aspecto del nuevo control de autenticacin


tras aplicarle un estilo de los predefinidos que vienen
con Visual Web Developer.

tenemos libertad de aadir nuevos


pasos o modificar los predeterminados a voluntad.
En la figura 8 se ve un
control de autenticacin
en pleno proceso de personalizacin esttica.

En resumen
En este artculo hemos tratado de llamar la
atencin sobre lo ms
sobresaliente que ofrecen
ASP.NET 2.0 y Visual
Figura 7.Aspecto de la herramienta de configuracin de
Web Developer 2005
seguridad que viene con ASP.NET 2.0.
(que es como se llama la
parte de Visual Studio
dedicada a desarrollo
Pero tal vez lo ms espectacular
Web y que est separada de lo dems por
relacionado con la seguridad sean los
completo). An siendo un texto bastante
extenso para lo habitual en una revista slo
nuevos controles de seguridad (bautihemos rascado un poco la superficie, y nos
zados como de inicio de sesin).
hemos dejado en el teclado muchas cosas
Estos controles nos dan ya hechas
por comentar. Si bien la mayora son
multitud de operaciones comunes de
pequeos detalles comparado con todo lo
seguridad relacionadas con la interfaz
visto aqu, todos ellos contribuyen a que
de usuario. Por ejemplo, el control
Login permite disponer de un comel nuevo entorno sea el mejor que hemos
pleto dilogo de autenticacin con
visto nunca, lleno de destellos de calidad
slo arrastrarlo sobre un formulario
por doquier.
Web. El CreateUserWizard es un asisSiga atento a dotNetMana y en los
tente con varios pasos que permite la
prximos nmeros iremos desgranando
creacin automtica de nuevos usuapara usted con mayor detalle cada una de
rios. El control LoginView permite perestas novedades. Esperamos que tras leer
sonalizar lo que ven los usuarios en
este texto, como mnimo, est deseando
funcin de los roles a los que pertedescargar la versin gratuita del entorno
nezcan. Y todava hay unos cuantos
(Visual Web Developer 2005 Express) para
ms. Lo mejor es verlos en funcionaempezar a experimentar algunas de las
miento. Son realmente tiles.
caractersticas comentadas. Puede leer
Todos ellos permiten la personalisobre ella en el artculo de Sergio
zacin, tanto parcial por medio de
Vzquez. Ah podr encontrar tambin
propiedades, como absoluta usando
una tabla comparativa de versiones.
plantillas. En el caso de los asistentes
Siga sintonizndonos.

dnm.asp.net

Braulio Dez

Reyes Garca

Optimizacin ASP.NET 2.0


Como una moto!
Hace un tiempo le un artculo que comparaba ASP.NET con PHP, la conclusin del
autor era que si bien ASP.NET era muy amigable y orientado a objetos, PHP era ms
rpido al no tener artificios.La conclusin que saqu es que si ASP.NET es tan fcil de
manejar, nadie se preocupa en dedicar un tiempo a estudiar la maquinaria de optimizacin que trae incorporada...En este artculo vamos a ver las novedades que nos trae
con Visual Studio 2005 en este rea.

desarrolle y testee en la propia mquina o a la sumo


en un servidor de la red local. Todo funciona rpido
y fluido, con lo que parece que eso de gastar tiempo
y dinero en mejorar el rendimiento de las pginas,
es algo reservado a esos pocos sitios de la red a los
que acudimos todos en masa (peridicos online,
macrotiendas de libros, dotnetmania.com :-)...).
El problema llega cuando subimos nuestra aplicacin al servidor en produccin y vemos que es lentsima, o incluso que cuando lanzamos eventos al servidor se convierte en algo con usabilidad cero (Ojo!
las intranets tampoco se libran de estos males).
Vamos a ver cmo ahorrarnos un capital en superservidores, ampliaciones de ancho de banda usando las novedades que nos trae ASP.NET 2.0.

Llamadas fuera de banda

Reyes Garca
Ha sido consultora todo
terreno. Hoy da se dedica al
gratificante mundo de la
docencia.
Braulio Dez
colabora habitualmente con
dotNetMana. Es MCSD en
programacin distribuida
con Visual C++.
Trabaja como Solutions
Developer de Avanade.

Como viejo desarrollador de aplicaciones desktop


que soy, una de las caractersticas que ms me impact de ASP.NET, era la de asociar una accin de un
control ASPX a un evento en el servidor (por ejemplo: cambio de seleccin en un combo), era cmo
programar una aplicacin Windows!
Con el paso del tiempo, uno se da cuenta que no se
puede abusar de dicha prctica, hay que mover todas
las validaciones posibles a mtodos Javascript, o para
algunos eventos, mostrar algn mensaje para que el
usuario sepa que algo est en marcha, e incluso hacer
una transicin a otra pgina. Si no hacemos esto corremos el riesgo de que la aplicacin deje de ser usable.

Llamadas fuera de banda


Sirve Para

Ejecutar eventos en el servidor y actualizar


la pgina actual, sin tener que enviar la pgina completa.

Mejora
Principal

Round trips: los paquetes que se envan


son ms pequeos.
Ms usabilidad: permite trabajar mientras
la operacin en background se est procesando.

Obervaciones En teora debe funcionar para todos los


exploradores, pero en Beta 2 slo estaba listo para IE.

Todo esto me parece muy bien, pero por qu


es tan lento? Enviar una peticin a un servidor
remoto siempre es lento, comparado con trabajar
directamente en la mquina cliente, y an ms todava si para cada peticin que hacemos enviamos la
pgina entera, el servidor la procesa de nuevo y se
la enva de vuelta al cliente Como!?, pero si yo
quiero leer un simple dato del servidor! No hay
alguna forma de enviar una peticin simple sin tener
que ir enviando y recibiendo la pgina completa?
para eso ASP.NET 2.0 incorpora las llamadas fuera de banda (o como dicen en ingls Out of band calls
o Script callbacks).
Con una llamada fuera de banda, lo que hacemos
es enviar una peticin al servidor, dejar que el usuario siga trabajando con su pgina, y cuando su explorador recibe la respuesta del servidor, actualizar la

<<dotNetMana

<< Lo normal cuando se crea una aplicacin Web es que se

25

<< dnm.asp.net
foto mostramos el seleccionado en ese
momento, el cambio de seleccin y la
carga de la foto lo realizamos usando
llamadas fuera de banda (ver figura 3).

Pginas asncronas

Figura 1. Ciclo de vida evento a servidor - ASPX 1.1

Figura 2. Ciclo de vida llamada asncrona - ASPX 2.0

<<dotNetMana

pgina usando DHTML. Los parmetros de peticin y respuesta, son sendas


cadenas de texto (bueno, un string puede contener XML, as que en el fondo
podemos enviar y recibir lo que queramos). La figura 1 muestra el ciclo de
vida de un evento de servidor de ASPX
1.1, que podemos comparar con el de
una llamada fuera de banda (figura 2).
Como se puede apreciar el segundo consume menos ancho de banda y recursos
del servidor.
En la Web de dotNetMana puede
bajar un ejemplo simple que utiliza esta
tcnica, consiste en una pgina compuesta por un combobox y un control imagen. En el combobox tenemos el nombre
de los autores de dotNetMana, y en la

26

Figura 4.Aplicacin de ejemplo:


Llamadas fuera de banda

Normalmente las pginas ASP.NET


son sncronas, es decir, cuando viene una
peticin, se le asigna una hebra, y dicha
hebra se queda a la espera de que la peticin sea completada. En un principio esto
parece correcto, pero qu pasa si una
de nuestras pginas llama a servicios Web
de otros proveedores, o a procesos de clculo/lectura de BD que pueden tomar un
tiempo considerable en ejecutarse? El
resultado es que la hebra asignada a la peticin se quedara ocupada y, en realidad,
consumira recursos sin estar haciendo
nada (ver figura 4). Dichas hebras son
recursos limitados, de forma que si tuviramos un nmero determinado de peticiones a la pgina en cuestin, podra llegar saturar el servidor! Debido a esto el
resto de pginas normales no podran
ser procesadas, la cola de peticiones pendientes estara llena (ver figura 5).

Figura 4. Tienda web, formalizacin de pedido y peticin de clculo de gastos de envo a


compaa de transportes

Figura 5. Servidor web bloqueado por un nmero limitado de peticiones de pginas con
procesos asncronos

<< dnm.asp.net
Sirve Para

Extraer temporalmente de la cola de pginas a procesar aquella que est esperando respuestas de procesos asncronos (ej. llamada a servicio Web, o proceso pesado de base de datos).

Mejora
Principal

Carga de servidor: al eliminar de la cola de peticiones aquellas que pueden


tardar, el servidor puede responder a ms peticiones simultneamente).

Obervaciones Otra ventaja es la de poder lanzar varias tareas asncronas en paralelo.

Para solucionar este problema usaremos lo siguiente:


Llamadas asncronas a servicios Web
y/o ADO.NET: se dividen en dos
pasos, un primero BeginInvoke y un
segundo EndInvoke.

Pginas asncronas: ejecuta las llamadas asncronas, duerme las hebras


y las incorpora a la cola de hebras,
cuando todas las llamadas asncronas se han ejecutado.

<%@ Page Language="C#" AutoEventWireup="true"


CodeFile="Default.aspx.cs" Inherits="_Default" Async="true" %>

Fuente 1. (ASPX) En la pgina le aadimos la opcin para que sea asncrona.

protected void Page_Load(object sender, EventArgs e)


{
// Vamos a realizar una busqueda de libros
KeywordRequest keyword = new KeywordRequest();
ProductInfo productInformation = null;
// Buscamos todos los libros que tenga que ver con C#
keyword.keyword = "C#";
keyword.mode
= "books";
()
// Iniciamos la busqueda...
PageAsyncTask searchTask;
bool executeInParallel = true; // Si hubieran ms tareas asncronas, ejecutarlas en
paralelo
searchTask = new PageAsyncTask(
delegate(Object Source, EventArgs ea, AsyncCallback callback,
Object State)
{
// Arrancamos la llamada al webService
return search.BeginKeywordSearchRequest(keyword, callback, State);
},
delegate(IAsyncResult Ar)
{
// cuando recibamos respuesta, la procesamos
productInformation = search.EndKeywordSearchRequest(Ar);
// Transformar el resultado a DataSet
DataSet ds = TransformToDataSet(productInformation);
dgLibros.DataSource = ds;
dgLibros.DataBind();
},
null, null, executeInParallel
);
// Registramos la tarea para que se ejcute en paraleo
RegisterAsyncTask(searchTask);
}

Fuente 2. (.CS, code-behind) Registramos la tarea asncrona, le decimos que hacer al arrancar y que hacer al
finalizar la tarea.

Otra ventaja de utilizar pginas asncronas es que podemos lanzar todas las
peticiones asncronas en paralelo, y que
el Framework se encarge de avisarnos
cuando estn todas listas, en vez de ir
lanzndolas una a una.
De la Web de dotNetMana puedes descargar un ejemplo que procesa
de forma asncrona una llamada a un
servicio Web de Amazon (en fuente 1 y
2 puedes ver fragmentos del mismo).

Cach 2.0
Cuando subimos una aplicacin a
produccin, una de los detalles que
debemos tener en cuenta es el asignarle cach a ciertas pginas y ciertos datos,
para que el servidor tarde menos en procesar las respuestas, y minimizar el trfico entre nuestra aplicacin y el servidor de base de datos.
Como funciona la cach en ASPX
1.1? Bsicamente consiste en coger una
pgina, o un segmento de datos (por
ejemplo un DataTable que contuviera la
lista de delegaciones de nuestra empresa), y en vez de hacer que nuestra aplicacin lea de la base de datos cada vez
que se hiciera una peticin, mantenerlo en memoria por un tiempo (por ejemplo 3 minutos). Esta aproximacin hace
que nuestro servidor tarde muy poco en
generar una pgina, ya que lo tiene todo
preparado para montarla o incluso la
tiene ya montada. El problema aqu es
que, al darle un tiempo fijo de validez a
la cach, si el cambio de unos datos es
crtico para el negocio, tenemos o bien
que no usar cach o darle un tiempo de
vida muy corto.
Si mal no recuerdo, en un sitio Web
de visitas masivas, la pgina principal la
tenan en cach por 5 segundos, lo que
haca que se pudieran responder muchas
ms peticiones, pero y si pudiramos
mantener dicha cach hasta que realmente cambiaran los datos? Eso mismo
es lo que incorpora la cach en ASPX
2.0, dialoga con SQL Server e invalida
una cach cuando su fuente de datos a
cambiado, esto nos lo proporciona de
dos formas:
Para SQL Server 7.0 y 2000: El sistema de cach funciona a nivel de tabla,
y ASP.NET pregunta cada <x> segundos si ha habido cambios en la tabla

<<dotNetMana

Pginas asncronas

27

<< dnm.asp.net
Cache 2.0

ASP.NET 2.0 dialoga con SQL Server e invalida una cach


slo cuando la fuente de datos cambia. Con SQL Server
2000 funciona a nivel de tabla, mientras que con 2005 lo
hace a nivel de fila y con mayor optimizacin

en cuestin (para ello primero hay que


preparar nuestra base de datos, utilizaremos la utilidad aspnet_regsql que
podemos lanzar desde la lnea de
comandos, la consola de Visual Studio
2005), ver fuente 3.

Para SQL Server 2005: Se puede afinar a nivel de fila de una tabla, y
SQL Server, mediante Notification
Delivery Services, es el que nos avisa
cuando los datos han cambiado; esto
es mucho ms ptimo que el primer

protected void Page_Load(object sender, EventArgs e)


{
// Ojo, este ejemplo es para SQL Server 2000. Esto slo
// se debe ejecutar una vez, sirve para preparar la base de datos
// para usar cach en una tabla, tambin se puede habilitar usando la
// herramienta aspnet_regsql
//SqlCacheDependencyAdmin.EnableNotifications(@"server=LocalHost;
//database=NorthWind;uid=sa");
//SqlCacheDependencyAdmin.EnableTableForNotifications(@"server=LocalHost;
//database=NorthWind;uid=sa", "Categories");
// Para testeo, hacemos un select de la tabla "Categories" de la base de datos
// "Northwind" (la trae de ejemplo SQL Server) y lo mostramos en un datagrid
SqlConnection conn = new
SqlConnection(@"server=LocalHost;database=NorthWind;uid=sa");
SqlDataAdapter adapter = new SqlDataAdapter("Select * from Categories",conn);
DataSet categories = new DataSet();
adapter.Fill(categories);

Sirve Para

Guardar una cach de


datos/pginas, que slo se
refresquen cuando realmente haya cambios en la base de
datos de la que leemos.

Mejora
Principal

Tiempo de respuesta del servidor: al no tener que ir a


base de datos cada vez que
cargamos una pgina, y no
tener que poner un tiempo
ajustado para el refresco de
la informacin, se aprovechan recursos y se procesan
las peticiones de pginas ms
rpido.

Obervaciones Donde est ms optimizada


es bajo SQL Server 2005, si
bien tambin podemos hacer
uso de ella en 7.0 y 2000.

sistema, pero slo funciona para esta


versin del motor de base de datos.

ViewState
Una de las caractersticas mas valoradas y odiadas de ASP.NET es, sin
duda alguna, el "View State". Por un
lado nos permite guardar informacin
sobre el estado y aspecto de nuestros
controles, as como informacin propia
de la aplicacin a nivel de pgina/estado. Por otro lado, toda est informacin
viaja en un campo escondido de la pgiViewState
Sirve Para

// Creamos una dependencia que se dispare cuando la tabla "categories" cambie.


// "Northwind" es una entrada que hemos creado en el web.config de la aplicacin
// en la entrada system.web/caching/sqlCacheDependency donde el indicamos el
// connection string.
SqlCacheDependency dependency = new SqlCacheDependency("Northwind", "categories");
// "Cacheamos" la pgina, y le decimos que mientras no cambie la tabla "categoras"
// no la recargemos
Response.AddCacheDependency(dependency);
Response.Cache.SetValidUntilExpires(true);
Response.Cache.SetExpires(DateTime.Now.AddMinutes(60));
Response.Cache.SetCacheability(HttpCacheability.Public);
GridCategorias.DataSource = categories;
GridCategorias.DataBind();

<<dotNetMana

// Esto nos sirve para


// Para ver un cambio,
// de la base de datos
Response.Write("Pagina

28

ver que la pgina es la que estaba en cach.


modifica una entrada en la tabla categories
"NorthWind" (base de datos de ejemplo de SQL Server 2000)
creada el : " + DateTime.Now.ToString());

Fuente 3. Ejemplo de uso, cach 2.0

Almacenar informacin del


estado de los controles de una
pgina, as como informacin
propia a nivel de pgina.
El ViewState viaja incrustado
en la pgina que se enva al
cliente.

Mejora
Principal

El formato en que se graba se


ha optimizado, la informacin de ViewState que ahora
se genera ocupa menos.
Round trips: los paquetes que
se envan son ms pequeos.

Obervaciones Para hacer uso de esta mejora slo tenemos que compilar nuestra aplicacin en
VStudio 2005.

<< dnm.asp.net

En la versin 2.0 se ha optimizado la serializacin del ViewState, llegando a


reducirse al 50 % del tamao generado en la versin 1.1. Para hacer uso del
nuevo View State slo tenemos que recompilar nuestra aplicacin

na generada para el usuario, con lo que, si nos descuidamos, el tamao de nuestra pgina en Kb se puede disparar. Un ejemplo de este caso se da al usar controles pesados como el DataGrid.
En la versin 2.0 se ha optimizado la serializacin
del ViewState, llegando a reducirse al 50 % del tamao generado en la versin 1.1.
Lo mejor de todo esto es que, para hacer uso del
nuevo ViewState, lo nico que tenemos que hacer es
recompilar nuestra aplicacin con Visual Studio 2005.

Tenemos la opcin de no distribuir los ASPX, con


lo que ya no se podra modificar nada, ni la presentacin de nuestra aplicacin. Esto es muy til
para productos en caja.
La herramienta que nos permite precompilar
dichas pginas se llama aspnet_compiler , podr
encontrar ejemplos ms detallados en el apartado
de links que sigue.

Precompilacin de pginas

Si quiere ampliar informacin acerca de este tema, aqu


tiene unos enlaces que le pueden ser de inters:

Con ASP.NET 1.1, cuando nuestra aplicacin recibe la primera peticin, las pginas ASPX son parseadas
y precompiladas a cdigo intermedio, con lo que el
tiempo de respuesta de cara al cliente es malsimo. Si
esto slo ocurre la primera vez, por qu preocuparnos.? Bueno seguro que esa primera vez coincide con
una demo que estamos haciendo, o con que uno de los
gerentes de la empresa tiene acceso para probarlo como
un piloto, mejor ponerle remedio.
ASP.NET 2.0 nos da la oportunidad de precompilar los ASPX, con lo que obtenemos las siguientes
ventajas:
La primera peticin que recibamos se ejecuta igual
de rpido que cualquier otra.
Evitamos que aparezcan errores de compilacin
de pginas en el servidor en produccin.

Llamadas fuera
de banda

Para saber ms

Script Callbacks in ASP.NET


2.0 - interesting, but lacking
http://west-wind.com/weblog/
posts/2302.aspx
Pginas asncronas Async Pages in ASP.NET 2.0
http://odetocode.com/Blogs/scott/archive/2005/06/16/1656.aspx
Dimtry Robsman, Tech ed 2005Asynchronous pages in ASP.NET 2.0
http://blogs.msdn.com/dmitryr/archive/2005/07/05/435647.aspx

Precompilacin
Evitar que las pginas se compilen en la primera peticin.

Mejora
Principal

Tiempo de respuesta: Evita el que la primera peticin de una pgina ASPX sea
muy lenta.

Obervaciones

Tambin se puede usar para evitar


exponer el cdigo fuente (ASPX incluidos), as como para evitar que aparezcan errores de compilacin en el servidor en produccin.

View State

ViewState Encoding in ASP.NET


2.0 http://pluralsight.com/blogs/fritz/
archive/2004/06/03/408.aspx
Whidbey will brings us a shorter
viewstate, guaranteed!
http://weblogs.asp.net/vga/archive/2004/05/26/WhidbeyWillBringsUs
AShorterViewstateGuaranteed.aspx

Precompilacin Precompilation in ASP.NET 2.0


de pginas
http://www.codeproject.com/aspnet/Pre
compile.asp

<<dotNetMana

Sirve Para

Script Callbacks in ASP.NET 2.0


(Dino Sposito) http://msdn.microsoft.com/msdnmag/issues/04/08/Cutti
ngEdge

29

dnm.laboratorio.net

Sergio Vzquez

Visual Studio 2005 Web Developer Express


Este artculo describe brevemente la nueva herramienta Visual Web Developer
(VWD) de desarrollo de aplicaciones y servicios Web con ASP.NET 2.0 orientada a estudiantes y a profesionales en fase de aprendizaje.

<< Por fin Microsoft ha sacado una versin de Visual Studio de

Sergio Vzquez
Sergio trabaja de Consultor Ebusiness en Pangeaes.com. Es
Ingeniero Superior en
Informtica, MCP y Webmaster
del sitio Web
http://www.mutisdotnet.com sobre
tecnologas .net.Tambin es
Vicepresidente del GUSE.NET.

bajo coste destinada a la comunidad de desarrolladores


que sin duda va a facilitar su uso y expansin a nivel mundial. Son muchos los programadores que echaban en falta una herramienta de este tipo para iniciarse fcilmente en ASP.NET. Se prev que costar unos 49$, aunque
inicialmente y de forma indefinida podr descargarse de
forma gratuita (es posible que nunca se cobre su coste).
Esta herramienta sustituye y mejora a Web Matrix,
el primer entorno de desarrollo gratuito en ASP.NET
1.1 que public Microsoft y que no tiene soporte aunque s una comunidad de usuarios que la usan. Existen
importantes diferencias entre WebMatrix y Visual Studio
.NET que sern menores entre las versiones Express y
Professional de Visual Studio facilitando as la transicin
entre ambas versiones. Entre ellas cabe destacar que
WebMatrix no tiene Intellisense ni opciones de depuracin paso a paso, cualidades muy deseables en un entorno integrado de desarrollo y que s tienen las versiones
Express de Visual Studio.
Es importante indicar que esta herramienta, VWD
no soporta ASP.NET 1.1 pues est diseada para la
versin 2.0 del Framework y est pensada para desarrollar en Visual Basic, C# y J#.
En la figura 1 podemos ver una imagen general del
nuevo entorno donde se aprecia la similitud con versiones anteriores.
Para poder descargarnos la beta 2 podemos acudir
a: http://msdn.microsoft.com/asp.net/getvwd. En castellano
ya tenemos muchos recursos: http://www.microsoft.com/
spanish/msdn/vstudio/express.
Recordemos que la beta 2 es gratuita y no est soportada por Microsoft aunque s existen foros de discusin
sobre el producto (http://forums.asp.net/175/
ShowForum.aspx).

Figura 1. Vista general del entorno.

Aqu podemos encontrar un tutorial:


http://beta.asp.net/QUICKSTART/aspnet/default.aspx
Y una visita guiada con un ejemplo de un sitio Web
que usa la base de datos pubs con un control GridView
y un ejemplo de Master Pages: http://beta.asp.net/
GuidedTour.

Diferencias con otras versiones


Despus de instalar Visual Web Developer 2005
Express con SQL 2005 Express Edition vemos las
siguientes novedades destacables:
El entorno de desarrollo trae su propio motor de
base de datos gratuito SQL Server 2005.
Tiene Intellisense mejorado tanto en el cdigo
HTML como en el cdigo ASP.NET en el lenguaje elegido (Visual Basic, C#, C++ o J#) facilitando as el desarrollo.

<< dnm.laboratorio.net

Trae su propio servidor Web incorporado por si


no tenemos IIS instalado para ejecutar y probar
las pginas Web desarrolladas.
VWD te fuerza a usar el modelo de programacin
de cdigo subyacente alejndose as ms de la forma de programar con ASP clsico.
Tiene una utilidad FTP para actualizar y navegar
sitios Web de forma remota.
Es una versin de 30 das que requiere registro
gratuito que nos permite descargar libros electrnicos.
Dispone de un asistente para la conversin de proyectos de las versiones anteriores de Visual Studio
2002 y 2003.
Permite crear Starter Kits o soluciones predefinidas que servirn de esqueleto a nuevas aplicaciones pudiendo contener las clases habituales y
componentes con las que trabajamos.
Las Master Pages nos permiten crear una nueva
pgina dentro de nuestro sitio Web que tenga la
misma estructura con los mismos apartados que
las dems como si fueran plantillas.
Los skins o temas permiten dar una apariencia a
nuestro sitio web y cambiarla con hojas de estilo
de forma sencilla.
Tiene ms de una docena de nuevos controles de
servidor muy interesantes como:
o Password Recovery: recupera su clave de un usuario en caso de perderla.
o Login: autentifica a un usuario contra la base de
datos.
Con respecto a versiones superiores se diferencia
en lo siguiente:
Est pensado para estudiantes y desarrolladores
noveles.
Las versiones superiores estn destinadas a equipos de desarrollo grandes para coordinar y dirigir
proyectos.
Pueden verse las diferencias con ms detalle en la
siguiente URL de la Web de Microsoft:
http://lab.msdn.microsoft.com/vs2005/productinfo/productline.

Una vez que instalamos Visual Studio Web Developer


Express notamos que es bastante similar a Visual Studio
NET y las diferencias son ms bien estticas. Cuando
empezamos un nuevo proyecto en el men Archivo >
Nuevo nos pregunta si crear un nuevo sitio Web, un
nuevo servicio Web, un nuevo sitio Web vaco o un sitio
Web a partir de uno de ejemplo.

Figura 2. Creacion de un nuevo proyecto Web.

En la ventana de dilogo del nuevo sitio Web puedes especificar la localizacin del sitio Web que puede ser:
Un directorio local de tu PC.
Un sitio Web remoto conectado con las extensiones de servidor de FrontPage.
Un sitio Web remoto conectado va FTP.
Cuando ejecutas una pgina, Visual Web
Developer lanza el servidor interno de desarrollo que
acepta solo peticiones HTTP del propio equipo pero
se puede configurar para que use este mini servidor
Web o bien IIS.

Figura 3. Ejecucin de una pgina Web.

<<dotNetMana

Este producto es ideal para iniciarse en


la programacion de aplicaciones Web
con ASP.NET 2.0 y desarrollar rapidamente nuestras webs aprovechando los
nuevos componentes que incluye

Creando nuestro primer sitio Web con


ASP.NET 2.0

31

<< dnm.laboratorio.net
EdicionesVisual Studio 2005
Team System1 Professional Standard

Express2

Coloreo de cdigo e
Intellisense

Lenguajes:Visual Basic,C#,
C++,J#

Individualmente.
VWD:VB, C# y J#

Proyectos Windows

Excepto con Visual


Web Dev

Proyectos Web

nicamente con
Visual Web Dev

Proyectos Mobile

Desarrollo con SQL Server

SQL Server
Express Edition

Reporting Services Tools

SQL Server
Express Edition

Acceso a Datos Remotos

Diseadores visuales de
datos

Depuracin Remota

Visual Studio SDK

Proyectos Excel, Word e


InfoPath

VSTMOS
20053

Modelado con Visio

Requerir
MSDN
Premium

Anlisis de Cdigo

Herramientas para arquitectos

Herramientas para testers

Administracin de proyectos

VS 2005 Team Foundation


Server

SQL
Server
Developer Edition

2005

Existen variaciones segn la edicin especfica de Team System.


Existen variaciones entre los distintos productos Express.
3
Visual Studio Tools for MS Office System es un producto independiente.
1
2

Requisitos del Sistema


Hardware

Software

Procesador
Mnimo
Procesador de tipo Pentium a 600 MHz
Recomendado
Procesador de tipo Pentium a 1 GHz

Sistema Operativo
Windows 2000 SP4
Windows 2003 Server
Windows XP SP2
Windows Vista

Espacio en disco
500 Mb
La instalacin completa ocupa 1.3Gb

Microsoft ASP.NET 2.0

<<dotNetMana

RAM
Mnimo 128Mb
Recomendado 256 Mb

32

Pantalla
Mnimo
800 x 600, 256 colores
Recomendado:
1024 x 768, color de alta densidad de 16 bits

Con las versiones superiores de este


producto se puede coordinar un equipo de
desarrollo completo asignando tareas a sus
miembros y trabajando en equipo
Preguntas frecuentes acerca de Visual
Studio Express 2005
1.- Puedo tener a la vez en la misma mquina
Visual Interdev, VS2003 y VS2005 sin problemas?
S.
2- Puedo desarrollar aplicaciones para la versin
1.1 de ASP.NET?
No, pues cada versin de Visual Studio est destinada a una versin diferente del Framework. La version
2005 slo puede ser usada para crear aplicaciones que se
ejecutan en la versin 2.0 del Framework. Si abrimos un
proyecto de la versin 2003 de Visual Studio, se convertir en otro nuevo con la versin 2005 y permite guardar copia de seguridad de la versin anterior.
3.- Donde puedo encontrar una lista de cambios
que hay entre las versiones 1.1 y 2.0 del Framework?
Aqu: http://www.gotdotnet.com/team/changeinfo/
Backwards1.1to2.0.
4.- Donde puedo encontrar ayuda y soporte?
En los foros de ASP.NET en la Web de Microsoft
en castellano y en http://forums.asp.net.
5.- Qu tipo de aplicaciones puedo construir con
la edicin Express?
Aplicaciones Web con formularios y servicios Web.
6.- Qu beneficios obtengo si registro el producto?
Te puedes descargar libros electrnicos gratuitos
en ingls que puedes ver aqu: http://lab.msdn.microsoft.com/express/register.
Podis encontrar ms preguntas frecuentes en
ingls aqu: http://lab.msdn.microsoft.com/express/faq.

Conclusiones
En este artculo hemos visto que con este entorno
integrado que incluye motor de base de datos gratuito,
herramienta de desarrollo Web, servidor Web y ejemplos de pruebas, no necesitamos mucho ms para poder
empezar a desarrollar aplicaciones Web con ASP.NET
2.0 que no requieren equipos de desarrollo con rapidez.
Si queris ms detalles sobre los Skins, Master Pages
y los nuevos controles podis consultar el artculo de
Jos M. Alarcn. Para desarrollar aplicaciones ms grandes y complejas que requieran alta disponibilidad y rendimiento se encuentran las versiones Standard, Professional
y Team System que se describen en el artculo de Javier
Izquierdo, responsable de producto en Microsoft.

dnm.directo.entrevistas

Marino Posadas

Entrevista a Mike Hernndez y Donald Drake


Equipo de desarrollo de Visual Studio Tools for Office 2005
Mike Hernndez, Community Program Manager de VSTO 2005, y Donald D.
Drake, Director del equipo de desarrollo tambin de VSTO 2005, pasaron por Madrid,
con motivo del VSTO Tour 2005, y dotNetMana tuvo la ocasin de entrevistarles, para pulsar sus opiniones acerca de esta nueva versin.

<< La primera cuestin es si Office se est

Marino Posadas es
asesor tcnico y
redactor de
dotNetMana, MVP de
C# y formador de
Alhambra-Eidos

moviendo en el sentido de pasar a


ser una aplicacin a integrarse con
otras, a ser una plataforma propia
con modelos de programacin vinculados con ella.
En un cierto sentido podra
decirse as. En el sentido de que
Office permite hacer la mayor parte de las cosas que pueden hacerse
hoy da en las aplicaciones Windows,
dispone de acceso a datos, de modelos de objetos, de posible conexin
a servicios Web, podra decirse que
es una plataforma de desarrollo.
Sera como una nueva faade de
cara a ciertos desarrollos corporativos. La integracin de los nuevos
diseadores de Visual Studio es un
paso ms en ese sentido.
Al estar basada esta versin en el nuevo CLR 2.0,
en qu forma ha afectado a Visual Studio Tools for
Office (VSTO a partir de ahora) las nuevas caractersticas de lenguajes y las extensiones a las libreras
existentes?
Aprovechamos muchas cosas y ninguna en particular. Existen nuevos tipos y los usamos en general, pero nada en particular. Hay un nuevo tipo de
documento, y tenemos extensiones de las Smart
Tags, pero nada especfico que venga de la versin
2.0 del CLR.
Hay algunos tipos de proyectos nuevos, adems
de los ya existentes de Word y Excel?
S, ahora existen proyectos de tipo InfoPath y
Outlook.

Donald D. Drake y Mike Hernndez

Puedes explicarnos la diferencia entre Proyectos


Orientados a Documentos y Proyectos Orientados a
Aplicaciones?
Podra decirse que depende de si se trata de personalizaciones para un documento dado o de proyectos genricos que van producir nuevos documentos,
o manipular informacin a partir del cdigo fuente
interno y las peticiones del usuario. Por ejemplo, los
proyectos de Outlook, tendran ms que ver con el
nivel de aplicacin.
La tecnologa ClickOnce va a ser una de las grandes innovaciones en el nuevo visual Studio. Existen
cambios en ese sentido para VSTO?
No. Hay diferencias en la forma en que funcionan los proyectos de VSTO y los de Visual Studio.

<< dnm.directo.entrevistas
Los usuarios muchas veces son reticentes hacia las nuevas
versiones debido a
problemas con las
migraciones y las dificultades que surgen de
estos procesos. Podis decir algunas
palabras de esperanza
para aquellos que
quieran realizar miMike Hernndez, Community Program Manager de VSTO
graciones?
Lo mejor que poRespecto a Office 12, qu es lo
demos decir es que no se necesita ningn
que podis aportar de cara al desarrotipo de migracin. Todo el cdigo creallo? Seguir siendo compatible hacia
do para la versin anterior, compilar peratrs?
fectamente en esta nueva versin. Hay
Pensamos sacar una nueva beta de
cosas que han cambiado para aprovechar
VSTO con la beta de Office 12. Y tras
las nuevas caractersticas. Muchas veces,
eso, tendremos la versin final, con
asociadas a novedades del propio Visual
Orcas (o Visual Studio 9). De hecho en
Studio 2005.
el PDC mostramos una versin de
Estarn disponibles todas las caracVisual Studio Orcas que soportaba
tersticas del modelo de objetos de cada
Office 12.
aplicacin para los distintos proyectos,
En conclusin, cules dirais que
de forma sencilla?
son los mejores argumentos para aniS todo lo que se presenta en el
marse a dar el paso a esta nueva vermodelo de objetos estar disponible
sin?
tambin para los desarrolladores de
Supongo que todas las novedades de
aplicaciones VSTO,
cara al desarrollador vinculadas a Visual
sin limitaciones, a
Studio 2005, por un lado, y otras caractravs de los PIA
tersticas como la seguridad, producti(Primary Interop
vidad, nuevos controles y entorno mejoAssemblies). Pero van
rado. Adems del soporte de proyectos
a poderse utilizar
Outlook, que es una de las cosas que los
tambin los nuevos
clientes ms nos haban solicitado.
controles presentaTambin habra que citar el nuevo y
dos por esta versin,
mejorado Modelo de Programacin, las
y tambin hemos
mejoras de los Action Panes, y nuevas
aadido un mejor
caractersticas del los mecanismos de
modelo de prograenlace a datos.
macin vinculado
Digamos que ahora, cualquier proDonald D. Drake, Director del equipo de desarrollo de VSTO con los Action Panes
gramador que sepa hacer algo con
y los Smart Tags.
Windows Forms, ser capaz de escribir
Dispondremos
aplicaciones VSTO con extrema facide facilidades para utilizar las macros
Qu es exactamente el Editor de
lidad. Adems, todos nuestros conde tipo VBA?
Manifiestos de Aplicacin, del que
troles se comportan como controles
Existe un soporte de macros, pero si
hemos odo hablar?
estndar, con sus propiedades, mtola pregunta es en el sentido de si se elimiLa informacin de metadatos de
dos, eventos, etc.
na VBA, te dir que no, que VBA estar
ensamblado no era sencilla de modifiSe espera nuevo soporte para
disponible bastante tiempo todava. Lo
car y con este editor permitimos que el
otras aplicaciones de Office, en el
que no se va a hacer es mejorarlo en ninprogramador la modifique ms fcil y
futuro?
guna forma, eso no tiene sentido. Ser
sencillamente. Es informacin que conS, en el PDC se anunci el futuposible, eso s, utilizar los nuevos objetos
tiene datos como, por ejemplo, a qu
ro soporte para todas las aplicaciones
del modelo desde el VBA existente, pero
ensamblados est vinculada la aplicade Office, dentro de la siguiente vereso es todo. El lenguaje, el entorno, y el
cin, caractersticas de distribucin, versin de VSTO.
runtime no cambian.
siones, etc.

<<dotNetMana

Quiz en la prxima versin, la tecnologa se integre de forma ms clara, pero


no en la actual versin.
La forma de distribucin de las aplicaciones se ha visto extendida de alguna otra forma, para incluir caractersticas de seguridad, por ejemplo utilizando Active Directory, o sigue usndose los
Servidores de Ficheros?
Bsicamente, se siguen usando los
servidores de ficheros para distribuir
documentos y DLL a los clientes. Pero
se integran con la seguridad de los servidores directamente.
Ahora que la seguridad est siendo
un tema prioritario para la mayora de
empresas y desarrolladores, en qu forma se ha mejorado la seguridad en esta
versin?
VSTO utiliza la seguridad vinculada al cdigo (CAS: Code access security) igual que cualquier otro cdigo
de .NET Framework. De forma que,
en ese aspecto, funciona exactamente igual a la versin anterior. La seguridad se encuentra vinculada a los
ensamblados y estos necesitan permisos FullTrust para garantizar los
accesos.

35

dnm.lenguajes.csharp

Octavio Hernndez

Novedades en el estndar de C#
Este artculo presenta de manera concisa las novedades fundamentales que ofrece al desarrollador la nueva versin del lenguaje C#, caractersticas que ya estaban
implementadas casi completamente en las diferentes versiones beta de Visual Studio
2005 que hemos ido probando hasta la fecha, y que ahora reciben el espaldarazo
natural que representa su estandarizacin.

<< Durante su ltima reunin, en el pasado mes de junio, la


Asamblea General de la organizacin estandarizadora ECMA aprob dos documentos que debern convertirse en referencia obligada para todos aquellos que
desarrollamos nuestra actividad profesional alrededor
de .NET: las terceras ediciones de los estndares relativos al lenguaje de programacin C# (ECMA-334) y de
la Infraestructura Comn de .NET (ECMA-335) [1,2]. Estos
documentos, que pueden ser descargados gratuitamente del sitio Web de la organizacin,
http://www.ecma-international.org, constituyen las bases
sobre las que se cimentan las implementaciones de
estas dos tecnologas incluidas en la versin 2.0 de
.NET Framework.

Introduccin

Octavio Hernndez
es colaborador habitual
de dotNetMana,
Ingeniero en Informtica
de Sistemas y MVP de
C#.Actualmente es
Director Tcnico de
Danysoft

La aparicin del lenguaje C# como parte de la


plataforma .NET represent un hito muy significativo en lo relativo a la generalizacin del uso de
las tecnologas de programacin ms avanzadas de
la actualidad, y especialmente de las centradas alrededor del desarrollo rpido basado en objetos-componentes. C# logr integrar de una manera armoniosa los principales conceptos que hicieron tan
importantes a lenguajes anteriores como C++,
Delphi o Java con otros aportes realmente novedosos. Superada con creces la prueba de aceptacin que representa cualquier versin 1, la nueva
versin de C# (que estar implementada al 100%
en Visual Studio 2005) nos presenta un lenguaje
mucho ms maduro, que ha incorporado a su repertorio de caractersticas toda una serie de novedades importantes que harn el desarrollo mucho ms
productivo.

Las nuevas caractersticas incorporadas en C# 2.0


y que se describen en este artculo son:
Genericidad
Iteradores
Tipos valor anulables
Mtodos annimos e inferencia de tipos delegados
Declaraciones parciales
Clases estticas
Distinta visibilidad de mtodos de acceso de
propiedades
Calificacin mediante aliases
Directivas pragma

Genericidad
Sin duda alguna, la ms importante de todas las
novedades presentes en C# 2.0 es la genericidad. Por
ello la tratamos ms en profundidad en este monogrfico con el artculo Reflexionando y haciendo
Reflexin sobre la genericidad de .NET 2.0, de Miguel
Katrib y Mario del Valle.
No es una caracterstica exclusiva de C#; el
hecho de que est implementada a nivel del CLR
ha hecho posible que Visual Basic 2005 la incluya
tambin, al igual que seguramente harn en el futuro otros lenguajes para .NET 2.0.
Se conoce como genericidad (algunas fuentes utilizan el trmino genericidad paramtrica) a la posibilidad de parametrizar clases, estructuras, interfaces o
incluso mtodos en funcin de los tipos de los datos
que estos almacenan y/o manipulan. Por ejemplo, a
continuacin se muestra una posible implementacin
de una lista enlazada de elementos pertenecientes a
un mismo tipo T, el parmetro genrico, que en prin-

<< dnm.lenguajes.csharp

public class Lista<T>


{
private Nodo<T> raz = null;
public bool EstVaca()
{ return raz == null; }
public void AgregarAlInicio(T dato)
{
raz = new Nodo<T>(dato, raz);
}
// otros miembros
}

Fuente 1. Fragmento de definicin de un


tipo genrico.

La potencia de la genericidad radica


en que permite describir de una manera
general estructuras de datos y algoritmos,
dejando sin concretar los tipos de datos
subyacentes para que sean especificados
ms adelante por el usuario del cdigo
genrico. Por ejemplo, a partir de la definicin anterior, es posible crear y manipular una lista de enteros de la siguiente
forma:
{
Lista<int> listaEnteros =
new Lista<int>();
listaEnteros.AgregarAlInicio(4);
listaEnteros.AgregarAlInicio(3);
listaEnteros.AgregarAlInicio(2);
// ms cdigo
}

Fuente 2. Consumo de un tipo genrico.

El cdigo cliente del tipo genrico es


quien indica al compilador en la declaracin que su lista slo contendr elementos de un tipo de datos concreto, enteros
en el ejemplo. Gracias a esto, la seguridad
de la programacin aumenta sensiblemente ya que ahora el compilador es capaz
de detectar cualquier intento de manipulacin incorrecta del tipo genrico. Por
otra parte, el rendimiento mejora tambin, ya que se evitan las verificaciones de
tipos en tiempo de ejecucin y, en el caso
de los tipos valor, se evita completamente la necesidad de realizar operaciones de
boxing y unboxing.

Aunque un anlisis en profundidad de


la implementacin de la genericidad en
C# y el CLR rebasa los lmites de este artculo, hay que destacar que se trata de un
mecanismo diferente de las plantillas (templates) de C++. De hecho, en Visual C++
2005 coexistirn ambas tecnologas.
Por supuesto, no ser necesario
desarrollar desde cero estructuras de
datos como la mostrada anteriormente para empezar a aprovechar las ventajas de la genericidad. La librera de
clases de .NET 2.0 aade a los contenedores tradicionales una amplia
gama de contenedores genricos, todos
ellos dentro del nuevo espacio de nombres System.Collections.Generic.

Iteradores
Un iterador es un mecanismo que
se define para permitir recorrer los elementos de un tipo contenedor, de forma que un cliente del tipo pueda obtener una secuencia ordenada de estos.
No describiremos en detalle las posibilidades que ofrece esta caracterstica, ya
que publicamos recientemente un excelente artculo sobre el tema [6]. A modo
de ejemplo, el fuente 3 muestra la programacin de un iterador para nuestra
lista enlazada genrica. Con una implementacin como sa, una aplicacin
cliente podra recorrer los elementos de
una lista del modo que se muestra en el
fuente 4.

Genericidad restringida
Una caracterstica adicional de la
genericidad que no podemos dejar de
mencionar es la posibilidad de establecer
restricciones sobre los tipos parmetros
de los tipos genricos que definamos. Esto
permite garantizar de forma esttica que
los tipos que se utilicen como argumentos de un tipo genrico satisfagan ciertos
requisitos, o ms concretamente, que
implementen una interfaz determinada.
Por ejemplo, el fragmento de cdigo que
se muestra en el fuente 3 establece que el
tipo de los nodos de nuestra lista enlazada debe implementar IComparable.
class Nodo<T> where T: IComparable
{
// implementacin de la clase
}
public class Lista<T> : IEnumerable<T>
where T : IComparable
{
// implementacin de la clase
// enumerador
public IEnumerator<T> GetEnumerator()
{
Nodo<T> n = raz;
while (n != null)
{
yield return n.Dato;
n = n.Siguiente;
}
}
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
}

Fuente 3. Ejemplo de genericidad restringida


e implementacin de iterador.

Lista<int> listaEnteros =
new Lista<int>();
// Adicin de elementos a la lista
// iterar sobre los elementos de la lista
foreach (int i in listaEnteros)
MessageBox.Show(i.ToString());

Fuente 4. Iteracin sobre los elementos de


una lista.

Tipos valor anulables


Otra de las novedades realmente
importantes de C# 2.0 es la que abre la
posibilidad de utilizar el valor null
(Nothing en Visual Basic, nil en Delphi
.NET, etc.) no slo para los tipos referencia, sino tambin para los tipos valor.
Tradicionalmente, los lenguajes de propsito general no han ofrecido ningn
soporte en ese aspecto, y se ha hecho
necesario utilizar trucos ms o menos
sucios para indicar un valor nulo o
indefinido para los tipos valor, tales
como utilizar un elemento especial
del dominio (por ejemplo, -1 0 para
tipos enteros) o mantener sealizadores
booleanos en variables independientes;
tcnicas todas que adolecen de inconvenientes importantes. Los tipos valor
anulables (la traduccin que hemos dado
al trmino ingls nullable types) resuelven definitivamente este problema tan
antiguo, ofreciendo soporte integrado
en el lenguaje para la utilizacin del
valor null con todos los tipos valor.
Los tipos valor anulables son realmente una aplicacin sutil de la generi-

<<dotNetMana

cipio no se especifica. El cdigo asume


la existencia de otro tipo genrico
Nodo<T>:

37

<< dnm.lenguajes.csharp
cidad: se apoyan en el tipo genrico predefinido
System.Nullable<T>. Internamente, un tipo valor anulable combina un sealizador booleano, al que se accede mediante la propiedad de slo lectura HasValue,
con un campo del tipo valor subyacente, que puede
leerse mediante la propiedad Value. Si HasValue tiene
valor false, se considera que el valor de la variable es
null. Cuando HasValue es true, la propiedad Value
devuelve el valor almacenado.
C# 2.0 incorpora una buena dosis de azcar sintctico para facilitar la utilizacin de estos tipos. Un
tipo valor anulable se declara aadiendo al nombre
del tipo base el modificador ?. Por ejemplo, int ?
es la variante del tipo predefinido int que acepta el
valor nulo. El lenguaje provee conversiones implcitas del literal null y del tipo valor correspondiente a
un tipo valor anulable. Eso hace perfectamente vlidas las instrucciones que conforman el fragmento de
cdigo que se muestra en el fuente 5.
{
int? n = null;
int? m = 275;
if (m.HasValue)
MessageBox.Show("m vale: " + m.Value.ToString());
else
MessageBox.Show("m no tiene valor");
}

Fuente 5. Utilizacin de tipos valor anulables.

De entre las diversas aplicaciones posibles de los


tipos valor anulables, mencionaremos que pueden ser
especialmente tiles a la hora de encapsular los campos de bases de datos SQL que admiten el valor null
durante el desarrollo de la capa de acceso a datos de
las aplicaciones corporativas.

Mtodos annimos e inferencia de tipos


delegados
Los mtodos annimos de C# 2.0 permiten definir delegados en lnea, en el lugar en que se necesitan, eliminando as la necesidad de crear un mtodo o incluso una clase por el simple hecho de que se
desea crear un delegado. El fuente 6 muestra tres instrucciones en las que se agrega un delegado a un evento de tres maneras distintas.
De las tres vas que se utilizan en el fuente 6 para
agregar un delegado al evento Click de un botn, la
primera es la va tradicional (la nica vlida en la
versin 1 de C#). A continuacin, la segunda sentencia muestra otra manera de lograr el mismo efecto,
pero evitando la creacin explcita de un mtodo gracias a un mtodo annimo. Por ltimo, la tercera sentencia de cdigo muestra un ejemplo de la otra novedad que se describe en este epgrafe: la inferencia de
tipos delegados. En principio, ahora ya no es necesario crear explcitamente el delegado, sino que el compilador se encarga de generarlo automticamente
cuando le indicamos el mtodo a invocar.

Declaraciones parciales
En C# 2.0 es posible dividir la implementacin de
una clase, estructura o interfaz a lo largo de varios ficheros de cdigo fuente. Esta caracterstica puede ser til
de cara a la divisin del trabajo de programacin entre
varios miembros de un equipo o a lograr una mejor organizacin del cdigo fuente. El propio Visual Studio 2005
hace uso de esta caracterstica, separando en dos ficheros el cdigo generado automticamente por el diseador del cdigo y el cdigo introducido por el desarrollador, como puede verse en la figura 1.

private void Form1_Load(object sender, EventArgs e)


{
// va "tradicional"
this.button3.Click += new System.EventHandler(this.GestorBotn);
// mediante mtodo annimo
this.button3.Click += delegate
{
MessageBox.Show("Hola!");
};
// va "tradicional", usando la inferencia de tipos delegados
this.button3.Click += this.GestorBotn;

<<dotNetMana

38

private void GestorBotn(object source, EventArgs e)


{
MessageBox.Show("Hola!");
}

Fuente 6. Mtodos annimos.

Figura 1. El diseador de Visual Studio 2005 separa en dos


ficheros el cdigo de los formularios.

Cada parte de un tipo parcial debe incluir el modificador partial; ste indica al compilador simplemente

<< dnm.lenguajes.csharp
que pueden existir otras partes del tipo
que debern ser combinadas. Todas esas
partes debern ser compiladas conjuntamente, de manera que el compilador
genere la implementacin completa del
tipo. De esto se desprende que las clases parciales no permiten extender
tipos que ya estn compilados.

Clases estticas
Las clases estticas son una adicin
pequea pero til al lenguaje C#. Su objetivo es permitir marcar explcitamente
(mediante la palabra reservada static)
aquellas clases cuyo objetivo es contener
nicamente entidades estticas (de clase),
para que el compilador impida que se le
aadan por descuido o error miembros de
instancia. Ejemplos clsicos de clases de
la librera de .NET Framework que slo
ofrecen al programador recursos estticos son Math y Monitor.
El fuente 7 muestra un fragmento
de cdigo en el que se define una clase
esttica.

mente el mtodo get, pero limitar la


visibilidad del mtodo set. La sintaxis
necesaria para lograr esto puede verse
tambin en el fuente 7.

Calificacin mediante aliases


La posibilidad de definir aliases para
espacios de nombres que incorporaba
C# 1.0 adoleca de ciertas limitaciones
a la hora de ayudar a resolver las ambigedades potenciales entre identificadores. C# 2.0 aade ahora un nuevo
mecanismo para permitirnos calificar
los nombres que usamos en nuestro
cdigo e indicar explcitamente en qu
espacio de nombres debe buscar el compilador. La sintaxis, que parece inspirada en C++, es la siguiente:
<alias> :: <nombre>

<alias> puede ser un nombre de alias


o el identificador global, que indica que
el nombre debe ser buscado en el espacio de nombres global. Hay que sea-

Directivas pragma
Por ltimo, #pragma es una nueva
directiva del preprocesador de C# 2.0,
que puede ser utilizada para indicar
informacin contextual al compilador.
Por ejemplo, mediante directivas pragma es posible:
Activar o desactivar la generacin de
diferentes advertencias del compilador para el cdigo fuente que sigue
a la directiva.
Indicar optimizaciones a aplicar al
cdigo fuente que sigue a la directiva.
Suministrar informacin que pueda
ser utilizada por un depurador.

Conclusin
En este artculo hemos descrito las
principales novedades que incluye la
3 Edicin del estndar ECMA del
lenguaje de programacin C#, implementadas completamente en el compilador de este lenguaje integrado en
.NET 2.0.

Agradecimientos

Fuente 7. Clases estticas y visibilidad de mtodos de acceso de propiedades.

Distinta visibilidad de mtodos


de acceso de propiedades
C# 2.0 permite especificar diferentes niveles de visibilidad para los mtodos de acceso de lectura y escritura asociados a una propiedad o indizador (propiedad vectorial). Con esto se satisface
una peticin de muchos desarrolladores, puesto que es relativamente frecuente que se desee exponer pblica-

lar aqu que global no es una nueva palabra reservada del lenguaje, sino un identificador normal, que slo toma un significado especial cuando aparece a la
izquierda de los ::. Lo mismo ocurre con
partial, yield y otros trminos presentados en este artculo, que slo adquieren su significado especial en el contexto adecuado. El objetivo de esta medida es mantener la compatibilidad con
C# 2.0 del cdigo desarrollado para la
versin anterior del lenguaje.

El autor desea expresar su agradecimiento a Richard Blewett, de


DevelopMentor, por sus tiles aclaraciones sobre temas tratados en este
artculo.

Bibliografa

[1]

Estndar ECMA-334, C# Language


Specification, 3ra. Edicin, Junio 2005

[2]

Estndar ECMA-335,Common Language


Infrastructure (CLI) 3ra.Edicin,Junio 2005

[3]

Lowy J.Create elegant code with anonymous methods,iterators and partial classes,
publicado en MSDN Magazine,Mayo de 2004

[4]

Clark, J.Introducing Generics in the CLR,


publicado en MSDN Magazine, Septiembre
de 2003

[5]

Clark, J.More on Generics in the CLR,


publicado en MSDN Magazine, Octubre
de 2003

[6]

Katrib M., Del Valle M., Enumeradores e


iteradores en C# 2.0, publicado en
dotNetMana N 7, Septiembre de 2004

<<dotNetMana

public static class Matematicas


{
private static double epsilon = 0.1E-6;
public static double Epsilon
{
get { return epsilon; } // pblico
private set {
if (value > 0.1E-2 || value < 0.1E-8)
throw new Exception("Value out of range");
epsilon = value;
}
}
public static double Sqrt(double src)
{
// clculo de raz mediante algoritmo de Newton
}
}

39

dnm.plataforma.net

Mario del Valle

Miguel Katrib

Reflexionando y haciendo reflexin


sobre la genericidad de .NET 2.0
La genericidad es un recurso importante de factorizacin y reusabilidad en la programacin y un soporte para estar ms protegidos de cometer errores por inconsistencia en el uso de los tipos. La inclusin de la genericidad es una de las ms atractivas y
clamadas novedades del venidero .NET Framework 2.0.

<< La genericidad estar presente en los lenguajes C# y VB y esta-

Mario del Valle


Es desarrollador del grupo
WEBOO e instructor del
Departamento de Ciencia de la
Computacin de la Universidad
de la Habana
Miguel Katrib
Es Dr.y Catedrtico del Departamento de Ciencia de la
Computacin de la Universidad
de La Habana y jefe del grupo
WEBOO.Es un especialista en
lenguajes de programacin y
entusiasta de la tecnologa .NET y
el lenguaje C#.

r integrada en el CLR en .NET 2.0. A diferencia de la


implementacin de la genericidad en otros lenguajes y
plataformas, el CLR se encargar, durante el proceso de
compilacin JIT, de crear las clases concretas a partir de
clases que han sido parametrizadas con tipos. De este
modo la genericidad no implica ninguna prdida de rendimiento en ejecucin porque el cdigo final ejecutar
segn las especificidades de cada tipo.
Los ensamblados en la versin 2.0 del Framework
han sido enriquecidos con nuevos metadatos para permitir la representacin de los tipos genricos.
Consecuentemente las clases de System.Reflection y
System.Reflection.Emit fueron adaptadas para inspeccionar y generar tales clases.
El tema de la genericidad en los lenguajes de programacin ha sido ya tratado en la literatura (ver muy
buen ejemplo en lenguaje Eiffel [1]): La genericidad
en .NET ya fue abordada en un trabajo previo de
dotNetMana [2]. De modo que no es la intencin
de este trabajo dar una introduccin a la genericidad.
Lo que vamos es a ilustrar cmo usando la reflexin
(reflection) podemos hacer convivir las clases genricas, o las clases concretas resultado de la instanciacin de las clases genricas, con clases ya existentes
que no son genricas, as como reflexionar sobre algunos aspectos de la genericidad que han sido incluidos
en el .NET Framework 2.0.

El comodn object y la genericidad


En las versiones previas a la 2.0 la forma ms
comn de implementar tipos genricos se basaba

en el uso del tipo comodn object. As los mtodos de


clases como Stack eran consumidores de parmetros
de tipo object y/o tenan a object como tipo de retorno (fuente 1).

public class Stack {


public void Push(object x) {}
public object Pop() {}
public object Peek() {}
...
}

Fuente 1

Aunque el tipo object resulta ser una buena alternativa para agrupar y definir estructuras que sirvan
para objetos de diferentes tipos, beneficiado adems
por la capacidad de boxing-unboxing de .NET que permite de manera transparente tratar a los tipos por
valor en la jerarqua de object, lo cierto es que por su
condicin de clase base de toda jerarqua provoca el
uso excesivo de casts con la degradacin de rendimiento
y la aparicin de errores cuando estos casts se hacen
inadecuadamente.
Por ejemplo, en la lnea 4 del fuente 2 se hace un
cast a int del valor que se extrae de la pila para provocar una divisin entera entre 2. Como slo se adicionaron valores enteros (lnea 3) el cast es correcto y
la divisin se efecta correctamente. Sin embargo, en
la lnea 5 ocurre un error de cast invlido con el tipo
float, pues aunque la asignacin de un entero a float es permitida, el fragmento de cdigo ( float)

<< dnm.plataforma.net
stack.Pop() indica al compilador que debe generar
en IL cdigo para hacer unboxing a un supuesto objeto de tipo Single devuelto por el mtodo Pop, pero
como el objeto devuelto no es Single sino Int32, el
cast no se puede efectuar. El principal problema aqu
es que estos errores aparecern durante la ejecucin
de la aplicacin y no son detectables por el compilador de C#.
Stack stack = new Stack();
for (int i = 0; i < 10; i++)
stack.Push(i);
Console.WriteLine("Divisin entera: {0}",(int) stack.Pop() / 2);
Console.WriteLine("Divisin real: {0}", (float) stack.Pop() / 2);

Fuente 2

Stack<int> stack = new Stack<int>();


for (int i = 0; i < 10; i++)
stack.Push(i);
Console.WriteLine("Divisin entera: {0}",(int) stack.Pop() / 2);
Console.WriteLine("Divisin real: {0}", (float) stack.Pop() / 2);

Fuente 3

Por lo que disponer ahora de clases genricas para


toda esta familia de contenedores reduce la aparicin
de errores y mejora el rendimiento de las aplicaciones con la eliminacin de casts innecesarios, adems
de aportar mayor claridad al cdigo.

Replicacin de cdigo por falta de genericidad


Las versiones anteriores del NET Framework
estn plagadas de clases que se han tenido que
implementar slo para cambiar el tipo general
object por tipos especficos. Entre los ejemplos
ms notables podemos mencionar los delegates
manejadores de eventos (*EventHandler) de los controles. Por ejemplo:
Caricatura por Yamil Hernndez

delegate void MouseEventHandler( object sender,


MouseEventArgs args)

o
delegate void KeyEventHandler( object sender,
KeyEventArgs args)

La nica diferencia entre ambos delegates es el tipo


del parmetro args. En el nuevo .NET Framework
2.0 se incluye un nico delegate genrico
EventHandler<T> donde T debe ser un tipo de heredero EventArgs y representa al segundo parmetro (args)
que se usa de manera convencional en los eventos de
los controles. Ahora en vez de definir un evento
MouseUp como:
public event MouseEventHandler MouseUp;

Lo que se hace es:


public event EventHandler<MouseEventArgs> MouseUp;

Sin necesidad de definir un tipo delegate especfico. Como resultado se tendr un evento al que se
le podrn anotar mtodos como el siguiente:
private void MyControl_MouseUp(object sender,
MouseEventArgs args) {...}

Adems de los casos para eventos como el ejemplificado anteriormente, nos encontramos en el .NET
Framework 1.1 clases como ControlCollection herederas de CollectionBase y que han definido sus propios
mtodos Add, Remove, etc., slo para poder lidiar con un

<<dotNetMana

Si por el contrario usramos ahora la nueva clase genrica System.Collection.Generic.Stack del


Framework 2.0 (fuente 3), los resultados seran los
siguientes:
1. El compilador no permitir un cdigo que pase
al mtodo Push del objeto asociado a la variable stack ningn parmetro que no sea int.
2. El mtodo Pop devuelve int, luego el cast de la
lnea 4 es innecesario.
3. El cast a float de la lnea 5 no provoca errores,
pues ahora slo indica que debe efectuarse una
divisin real entre el entero devuelto por Pop y
el valor 2.

41

<< dnm.plataforma.net

Con el nuevo .NET Framework 2.0 tenemos toda la jerarqua


de Collection genrica, de modo que se puede disponer
de la clase deseada con toda la eficiencia de usar el tipo
directo y sin necesidad de replicar la programacin

Sin embargo, en C# 2.0, asignaciones como las de los dos ejemplos anteriores no son permitidas, ni se tienen
herramientas en el Framework que faciliten lograr tal efecto.
Al menos convendra tener una
clase que nos permitiera hacer algo
como:
IList<Control> controls =
Converters.TypeConvert<IList<Control>>
(button.ControlsCollection);

o
tipo especfico que represente al tipo de
contenido (Control en el caso de
ControlsCollection) y de este modo no
tener que basarse en los contendores generales que usan el comodn object. La
implementacin de todos estos mtodos
se basa de manera similar en delegar en
un ArrayList (que s se basa en object)
toda su implementacin y hacer internamente los cast correspondientes.
Con el nuevo .NET Framework 2.0
tenemos toda la jerarqua de Collection
genrica, de modo que se puede disponer de la clase deseada con toda la eficiencia de usar el tipo directo y sin necesidad de replicar la programacin. Sin
embargo, el espacio de nombres
System.Windows.Form no ha sido adaptado a estas nuevas clases genricas y sigue
usando tipos como los delegates antes descritos, y otros como ControlsCollection
y TapPageCollection que representan
colecciones de tipos especficos.

<<dotNetMana

La coexistencia y la transicin

42

Disponer ahora de clases genricas


aporta mucho, sobre todo en claridad,
confiabilidad y productividad porque
reduce considerablemente la cantidad
de clases a implementar. Sin embargo,
la transicin al mundo genrico de las
clases concebidas sin genericidad no
se puede aplicar inmediatamente. Las
aplicaciones desarrolladas en el nuevo
.NET Framework 2.0 tendrn que
poder convivir con la existencia de
cdigo anterior a la genericidad.
Incluso muchas clases no genricas de
los anteriores espacios de nombres,
como el caso ya mencionado de
System.Windows.Form, an no tienen un
nuevo representante genrico en el
Framework. Significa esto que no

podremos usar en contextos no genricos, objetos provenientes de la genericidad y lo contrario usar en contextos genricos objetos provenientes del
mundo no genrico?
Si ahora disponemos de genericidad
entonces sera deseable poder hacer algo
como:
IList<Control> controls =
button.ControlsCollection;

Si realmente conocemos que


ambas clases ofrecen la misma funcionalidad pero que una basa sus
mtodos en el tipo object y la otra en
un tipo genrico.
Por el contrario, tambin podramos
querer usar objetos de tipos genricos
adaptados a contextos no genricos ya
existentes haciendo algo como:
ControlsCollection controls = new
List<Control>();

ControlsCollection controls =
Converters.TypeConvert<ControlsCollection>
(new List<Control>());

Para de este modo tratar en un contexto genrico a los objetos formados


en un contexto no genrico y viceversa.
En la siguiente seccin veremos cmo
implementar tales conversores.

De no genrico a genrico y
viceversa
Una forma de resolver la asignacin de objetos no genricos basados
en el uso de object o de algn tipo
especfico como Control en el caso de
ControlsCollection a variables definidas a partir de un tipo genrico es creando una clase que haga de intermediaria (proxy), como por ejemplo la clase ControlList del fuente 4.

public class ControlList : IList<Control> {


private ControlsCollection collection;
public ControlList(ControlsCollection collection){
Debug.Assert(collection != null, "Parameter collection cannot be null");
this.collection = collection;
}
public void Add(Control control){
collection.Add(control);
}
public void Remove(Control control){
collection.Remove(control);
}
public Control this[int index]{
get {
return collection[index];
}
set {
collection[index] = value;
}
}
...
}

Fuente 4

<< dnm.plataforma.net
Note que los mtodos delegan su implementacin
en un objeto de tipo ControlsCollection. De esta forma la
asignacin puede realizarse de la siguiente manera:
IList<Control> controls = new
ControlList(button.ControlsCollection);

Anlogamente, la asignacin en sentido contrario


(de un genrico a un no genrico) puede resolverse
tambin usando una clase intermediaria como la del
fuente 5.
Figura 1. Conversin de objetos de tipos no genricos a objetos
definidos a partir de tipos genricos.

Fuente 5

Note que la implementacin de los mtodos es


exactamente la misma en ambos fuentes, slo difieren
en el tipo de la variable collection en la que delegan
(ControlsCollection en el fuente 4 y IList<Control> en
el fuente 5).
Siguiendo el patrn de delegacin que aplican
estos dos fuentes se puede implementar una clase
Converters cuyo mtodo TypeConvert cree dinmicamente el tipo que har de intermediario entre
ambos tipos y que herede del tipo indicado en el
parmetro genrico del mtodo TypeConvert. Este
mtodo debe devolver un objeto del tipo intermediario para asignarlo a la variable correspondiente.
El mtodo TypeConvert es genrico y el tipo de lo
que devuelve es el mismo de su parmetro genrico (fuente 6 y figura 1).
En un artculo previo en dotNetMana El Poder
de la Reflexin en .NET [3] ilustramos una forma de
factorizar clases usando intermediarios emitidos dinmicamente. La implementacin de Converters es bastante similar. La diferencia radica en que hay que inspeccionar y emitir tipos basados en la genericidad, lo
cual ser posible gracias a que la reflexin en el

class Converters
{
...
public static T TypeConvert<T>(object source)
{
TypeBuilder proxyBuilder = CreateType(typeof(T));
FieldInfo sourceField = AddSourceField(proxyBuilder, source);
EmitCtor(proxyBuilder, sourceField);
EmitMethods(proxyBuilder, sourceField);
Type proxyType = proxyBuilder.CreateType();
ContructorInfo ctor =
proxyType.GetConstructor(new Type[] {source.GetType()});
return (T) ctor.Invoke(new object[] { source });
}
}

Fuente 6

Framework 2.0 permite la inspeccin y emisin de


tipos genricos. El mtodo TypeConvert de la clase
Converters pudiera quedar entonces como se muestra
en el fuente 6.
Note cmo aqu se aplica el operador typeof al parmetro genrico T para obtener un objeto de tipo Type
que se corresponde con el tipo utilizado estticamente
para instanciar la llamada a TypeConvert (como cuando
se hizo Converters.TypeConvert<IList<Control>>(b); en
la figura 1). Usando reflexin el mtodo CreateType crea
el AssemblyBuider, ModuleBuilder y TypeBuilder correspondiente a dicho tipo (fuente 7).

class Converters
{
...
static TypeBuilder CreateType(Type target)
{
AssemblyBuilder assBuilder = new AssemblyBuilder("");
ModuleBuilder modBuilder = assBuilder.DefineModule();
TypeBuilder result =
modBuilder.DefineType(baseType.Name + "Proxy", target);
return result;
}
}

Fuente 7

<<dotNetMana

public class ControlList : ControlsCollection {


private IList<Control> collection;
public ControlList(IList<Control> collection){
Debug.Assert(collection != null,
"Parameter collection cannot be null");
this.collection = collection;
}
public override void Add(Control control){
collection.Add(control);
}
public override void Remove(Control control){
collection.Remove(control);
}
public override Control this[int index]{
get {
return collection[index];
}
set {
collection[index] = value;
}
}
...
}

43

<< dnm.plataforma.net
La estrategia que se sigue en la implementacin
de EmitMethods para emitir cada mtodo es buscar cada
mtodo abstract o virtual de la clase que se de como
tipo target y por cada uno se busca en la clase que
define al tipo del objeto a convertir, algn mtodo que
coincida en nombre y signatura. Si tal mtodo existe,
entonces se emite en la clase Proxy un mtodo que
redefine al mtodo de la clase target y cuya implementacin delega en el mtodo correspondiente del
objeto a convertir (fuente 8).

class Converters
{
...
static MethodInfo FindImplementation(MethodInfo
method, Type sourceType)
{
foreach (MethodInfo sourceMethod in sourceType)
if (method.ToString() == sourceMethod.ToString())
return sourceMethod;
return null;
}
}

Fuente 9
class Converters
{
...
static void EmitMethods(TypeBuilder proxyBuilder, FieldInfo source)
{
foreach (MethodInfo method in proxyBuilder.BaseType)
{
MethodInfo sourceMethod = FindImplementation(method, source.FieldType);
if (sourceMethod != null)
EmitMethod(sourceMethod, source)
}
}
}

Fuente 8

No hay ningn problema porque los parmetros


genricos son completamente sustituidos por el JITcompiler cuando se instancian con algn tipo especfico. Por ejemplo, el mtodo Add de la interfaz IList<T>
definido como:
void Add(T element);

Al ser inspeccionado aplicando reflexin sobre el


tipo IList<Control> ser como si originalmente se
hubiera sido definido:

El fuente 10 muestra la implementacin del mtodo EmitMethod.


class Converters
{
...
static MethodInfo EmitMethod( MethodInfo mi,
FieldInfo sourceField)
{
Type[] argsTypes = getTypesOf(mi.GetParameters());
MethodBuilder methodBuilder =
proxyTypeBuilder.DefineMethod(sourceMethod.Name,
MethodAttributes.Public |
MethodAttributes.Override, mi.ReturnType,
argsTypes);
ILGenerator generator =
methodBuilder.GetILGenerator();
generator.Emit(OpCodes.Ldarg_0);
generator.Emit(OpCodes.Ldfld, realTarget);
for (int i=0; i < argsTypes.Length; i++)
generator.Emit(OpCodes.Ldarg, i+1);
OpCode callCode = OpCodes.Call;
if (coreMethod.IsVirtual)
callCode = OpCodes.Callvirt;
generator.EmitCall(callCode, mi, null);
generator.Emit(OpCodes.Ret);
}
}

void Add(Control element);

Fuente 10

Es decir, que si por reflexin se le pide al MethodInfo


de este Add su primer parmetro:

<<dotNetMana

Type listType = typeof(IList<Control>);


MethodInfo addMethod = listType.GetMethod("Add");
ParameterInfo[] args = (ParameterInfo[])
addMethod.GetParameters();
Type firstArgType = args[0].ParameterType;

44

Se obtiene como resultado en firstArgType el objeto Type correspondiente a Control.


Note que en las lneas anteriores se ha inspeccionado el mtodo de la misma forma que se hace con
un tipo no genrico. Por todo esto, la implementacin del mtodo FindImplementation del fuente 8 no
tiene que hacer consideraciones especiales respecto
de la genericidad para encontrar los mtodos coincidentes en signatura (fuente 9).

En el artculo El Poder de la Reflexin [3] se


explica detalladamente el algoritmo de emisin utilizado por el mtodo EmitMethod.
Como se puede notar el mecanismo de conversin anterior tambin es aplicable al proceso inverso, es decir, cuando se va a asignar un objeto de un
tipo obtenido por una instanciacin genrica a una
variable de tipo que no se ha basado en la genericidad. Es decir, el mismo mtodo TypeConvert puede
usarse para hacer:
ControlsCollection collection a =
Converters.TypeConvert<ControlsCollection>(b);

En este caso es el tipo del objeto b el que sera


IList<Control>.

<< dnm.plataforma.net

La herencia mltiple es un recurso


ausente en .NET y sus lenguajes. Existen
diferentes mtodos para simular la herencia mltiple. A continuacin mostramos
cmo podemos simular la herencia mltiple con ayuda de la genericidad y las
capacidades de reflexin y emisin de
cdigo.
Supongamos que queremos que una
clase C heredase de dos clases A y B1. Una
forma de simular la herencia mltiple
es que C heredase de A y que simule la
herencia de B delegando internamente
en un objeto de tipo B (fuente 11). La
variable interna b reproduce la funcionalidad de B que C hubiese querido heredar. El operador de conversin implcita nos permite hacer asignaciones de la
forma B unB = new C(); como si C heredase de B.

class C : A
{
protected B b;
public C(...){
this.b = new B(...);
}
...
public static implicit operator B (C c){
return c.b;
}
}

Fuente 11

Con la genericidad podemos generizar el patrn anterior. Podemos definir una clase genrica A<T> que sirva para
todo aquel que quiera heredar de A y de
alguien ms (fuente 12)

class A<T> : A where T : new()


{
protected T t;
public A(){
this.t = new T();
}
public static implicit operator T
(A<T> source){
return source.t;
}
}

Fuente 12

En este caso lo que hay que hacer ahora es heredar de A<T> instanciando el parmetro genrico T con el otro tipo del cual
se quera heredar adems de A.
class C : A<B> {...}

Como A<T> hereda de A podemos


hacer A unA = new C(); y, por el operador de conversin implcito, podemos
hacer B unB = new C();
Pero lamentablemente con esto no
basta como veremos en la seccin
siguiente.

La herencia mltiple es un
recurso ausente en .NET
y sus lenguajes, pero
podemos simularla con la
ayuda de la genericidad

class C : A
{
protected InnerB b;
public C(...){
this.b = new InnerB(this);
}
...
public virtual void F(...){
...
}
public static implicit operator InnerB (C c){
return c.b;
}
class InnerB : B {
C c;
public InnerB(C c){
this.c = c;
}
public override voif F(...){
c.F(...);
}
}
}

Fuente 13

InnerB tenga redefinido el mtodo F de B

delegando su implementacin en el mtodo F que se defina en C.


Lo que ocurre ahora por detrs del
teln cuando se hace:
B unB = new C(...);

Simulando la redefinicin de
mtodos
En una situacin de herencia mltiple real en la que C heredase de A y B, un
mtodo virtual F definido en B puede ser
redefinido en C de forma que al hacer:
B unB = new C();
...
unB.F(...);

se aplique el polimorfismo y se llame al F redefinido en C. Pero como en


el patrn de simulacin seguido en el
fuente 11, la variable en la que se delega es de tipo B, el F al que se seguira llamando es al de B.
Un patrn de solucin es el que se
muestra en el fuente 13. En lugar de delegar en una variable de tipo B lo que se hace
es definir una clase interna InnerB. El
mtodo F de C puede ser llamado a partir
de la llamada al F de B si hacemos que la
variable b refiera a un objeto de otra clase InnerB heredera de B, de modo que

El mismo patrn se podra seguir si quisiramos que heredase de ms de dos clases

es que se aplica el conversor implcito que lo que hace es devolver el objeto interno b que es de tipo InnerB (que
hereda de B) y que por tanto se puede
asignar a unB que es de tipo B.
Si ahora se hace entonces unB.F(...)
lo que ocurre es que se llama al F definido en InnerB que lo que hace a su vez
es llamar al c.F(...) logrndose el efecto del polimorfismo.
Podemos llevar esta solucin al
patrn genrico visto anteriormente?
Note (fuente 13) que al redefinir F en
C es porque sabemos quin es la clase de
la cual queramos simular herencia mltiple (B en este caso) y que sabemos que
esta clase tiene un F. Cmo saber si el
tipo con el que vamos a instanciar al parmetro genrico T tiene un mtodo F? El
recurso de genericidad restringida where
de C# 2.0 parece ayudarnos a acercarnos
a una solucin La idea es no permitir que
cualquier tipo pueda usarse para instanciar a la clase genrica sino slo aquellos
que cumplan con las restricciones indicadas (fuente 14).

<<dotNetMana

Simulando herencia mltiple


mediante la genericidad

45

<< dnm.plataforma.net
interface IHasF
{
void F(...);
}
class A<T> : A where T : IHasF, new()
{
protected T t;
public A(){
this.t = new T();
}
...
}

Fuente 14

De este modo si B implementa IHasF,


y tiene un constructor por defecto, para
que valga hacer el this.t = new T(), se
puede hacer:
class C: A<B>{...}

Se podra ahora intentar completar


el resto del patrn genrico que seguimos en el fuente 13 para hacer algo
como lo que se indica en el fuente 15.
Pero lamentablemente esto no es posible porque en la genericidad del .NET
2.0 no se puede heredar de un tipo que
sea parmetro genrico2.

class A<T> : A
where T : HasF, new()
{
protected T t;
public A(){
this.t=Converters.TypeConvert<T>(this);
}
public virtual void F(...) {}
}

Fuente 16

Emitiendo tipos genricos


Aplicar patrones genricos, como el
que se ha visto en la seccin anterior para
simular la herencia mltiple, nos ilustra
lo que ahora podemos explotar con la
genericidad de .NET 2.0. Sin embargo,
para un desarrollador no avezado esto
puede resultar difcil y propenso a cometer errores.
Podra pensarse entonces en desarrollar alguna herramienta que automatice la labor de generar una clase
genrica permitiendo hacer cosas
como esta de multiplicar nuestra
herencia. Digamos que pudiramos
tener un mtodo:

class A<T> : A
where T : IHasF, new()
{
protected InnerT t;
public A(){
this.t = new InnerT(this);
}
public virtual void F(...) {}
class InnerT : T { // Error: No se puede heredar de T porque es un parmetro genrico
A<T> at;
public InnerT(A<T> at){
this.at = at;
}
public override void F(...){
at.F(...);
}
}
}

<<dotNetMana

Fuente 15

46

Y tanto nadar para ahogarse en la orilla? podr preguntarse con razn el lector.
Lo que nos hace falta es un tipo que herede de T y que delegue la implementacin
de sus mtodos virtuales en los mtodos
correspondientes de A<T>. Esto lo podramos solucionar si podemos convertir un
objeto de tipo A<T> en T, que es precisamente lo que hace el mtodo TypeConvert
de nuestra clase Converters:

class MultipleInheritance
{
...
public static Type EmitGenericSubtype(
Type baseType, Type constrainType)
{...}
}

que genera dinmicamente y devuelve el tipo genrico equivalente a haber


definido estticamente algo como:

class baseType<T>:baseType where T :


constrainType

Es decir, que si ejecutamos:


MultipleInheritance.EmitGenericSubtype(
typeof(A), typeof(HasF))

se generara una clase genrica equivalente a la que se muestra en el fuente 16.


Afortunadamente con la reflexin del
.NET Framework 2.0 podemos emitir
clases genricas a partir de cambios que
se hicieron en algunas clases como
TypeBuilder, que fue enriquecida con
mtodos como:
GenericParameterBuilder[]
DefineGenericParameters(string[] names);

Este mtodo permite indicar los


nombres de los parmetros genricos del
tipo emitido por TypeBuilder. A su vez
el tipo GenericTypeParameterBuilder, que
hereda de TypeBuilder, permite emitir
cada parmetro genrico. Con su mtodo SetBaseTypeConstrains se pueden
especificar los tipos a los que est restringido cada parmetro y con el mtodo SetGenericParameterAttributes se puede indicar que el tipo tiene que tener constructor por defecto explcito.
Por razones de espacio no se puede
dar aqu la implementacin de este generador de tipos genricos (el lector interesado puede descargrselo del sitio de
dotNetMana).

Conclusiones
Invitamos a los lectores de dotNetMana a disfrutar de la genericidad que
viene con Visual Studio 2005 y el .NET
Framework 2.0, a la vez que con ello
puedan potenciar su capacidad de desarrollo. Esperamos con este artculo haber
develado algunos secretos de lo que puede lograrse, otros trabajos deben estar
por venir.

Referencias

[1]

Meyer Bertrand, EIFFEL The Language,


Prentice Hall 1992, ISBN 0-13-247925-7

[2]

Som Guillermo,Generics y Visual Basic,


dotNetmana No 8, Octubre 2004, Ed Netalia,
Espaa M-3.075-2004

[3]

del Valle Mario, Katrib Miguel,El poder de la reflexin en .NET, dotNetmana No 3,Abril 2004, Ed
Netalia, Espaa M-3.075-2004

Realmente no conocemos ningn lenguaje que permita algo como esto y debemos reconocer que es C#2.0 quien ha llegado ms lejos en trminos de genericidad.
Aunque bien que pudiera implementarse permitir algo as ya que a fin de cuentas toda la informacin est disponible en tiempos de compilacin.

Suscrbase y llvese el
CD Volumen 1 GRATIS
AG
OT
AD
O

An est a tiempo

N 7

N8

N9

N13

N14

N15

N16

N10

N11

N12

N18

N19

AG
OT
AD
O

N6

N17

Oferta vlida hasta el 31 de diciembre de 2005 o hasta agotar existencias


Deseo suscribirme a dotNetMana por un ao (11 nmeros) por un precio de 60,00 IVA incluido y recibir el CD
Volumen 1 con los 11 primeros ejemplares en formato PDF de alta calidad de forma gratuita. Si su direccin est fuera de Espaa
el precio es de 60,00 transporte incluido (ms informacin sobre envos internacionales en www.dotnetmania.com)
Deseo que me enven los nmeros atrasados marcados por un precio de 6,00 cada uno. Otros:
DATOS DE ENVO
CIF/NIF. . . . . . . . . . . . . . . . . . . . Empresa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Nombre y apellidos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Direccin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Poblacin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Cdigo Postal . . . . . . . . . . . . . . . . . . . Provincia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Telfono . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Fax . . . . . . . . . . . . . . . . . . . . . . . . . . . email . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
DATOS DE FACTURACIN (slo si son distintos a los datos de envo)
CIF/NIF. . . . . . . . . . . . . . . . . . . . Empresa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Nombre y apellidos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Direccin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Poblacin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Cdigo Postal . . . . . . . . . . . . . . . . . . . Provincia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Telfono . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Fax . . . . . . . . . . . . . . . . . . . . . . . . . . . email . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
FORMA DE PAGO
Taln nominativo a nombre NETALIA, S.L.
Transferencia bancaria a nombre de NETALIA, S.L. a:
La Caixa - Nmero de cuenta 2100 4315 48 2200014696 (Indique su nombre en la transferencia)
Domiciliacin Bancaria (con renovacin automtica, previo aviso)
Indique su nmero de cuenta:
Tarjeta de crdito
VISA
MASTERCARD
Nmero de su tarjeta:
Fecha de caducidad:
/
(imprescindible)
Firma y/o sello
a

de

Puede enviar sus datos por Fax al 91 499 13 64, o por telfono al 91 666 74 77,
o por email a la direccin suscripciones@dotnetmania.com, o tambin puede
enviarlos por correo postal a la siguiente direccin:

de 2005

Usted autoriza a la mecanizacin


de estos datos. El responsable y
destinatario de stos es Netalia,
S.L. Usted tiene derecho a acceder a sus datos, modificarlos y
cancelarlos cuando lo desee. Sus
datos no sern cedidos en ninguna de las formas posibles a terceras partes y no se utilizarn ms
que para el buen funcionamiento de su suscripcin a la revista
dotNetMana y para informarle de las actividades comerciales
que realice la editorial Netalia,
S.L. Si no desea recibir informacin comercial de dotNetMana
marque la casilla siguiente

Netalia, S.L.
C/ Robledal, 135
28529- Rivas Vaciamadrid (Madrid)

dnm.inicio.fundamentos
dnm.lenguajes.vb

Guillermo Guille Som

Novedades de Visual Basic 2005


Visual Basic 2005 es, sin lugar a dudas, el lenguaje de los incluidos en la nueva versin
de Visual Studio que ms novedades presenta, tanto en novedades del propio lenguaje como en las caractersticas ofrecidas por el entorno de desarrollo. En este artculo
comentaremos esas novedades de la forma ms clara posible, con idea de que el lector comprenda por qu Visual Basic 2005 se convierte en la eleccin ms productiva
de todas las ofrecidas por Visual Studio 2005.

<< Las novedades que encontraremos en la nueva versin de

Visual Basic, (que a partir de esta versin deja de llamarse .NET para pasar a usar la versin de Visual
Studio), las podemos dividir en tres partes:
Las novedades ofrecidas por el propio lenguaje.
Las novedades ofrecidas por .NET Framework
2.0.
Las novedades ofrecidas por el entorno de desarrollo (o editor).

men Herramientas>Opciones>Proyectos y
Soluciones> Valores predeterminados de VB, tal como
se muestra en la figura 1.

Veamos cada una de estas novedades, aunque en


algunas no profundizaremos demasiado, entre otras cosas
porque necesitaramos algo ms de las pginas de este
especial, y porque otras se tratan en este mismo nmero o han sido comentadas en nmeros anteriores.
Figura 1.Seleccionar la comprobacin estricta del cdigo.

Consideraciones previas
Antes de comentar las novedades propias del lenguaje y del entorno de desarrollo de Visual Basic 2005,
quisiramos indicar unas recomendaciones que cualquier desarrollador que quiera tomarse en serio la
escritura de cdigo con Visual Basic.

Option Strict On:Ayuda a escribir mejor cdigo

Guillermo Guille Som


es Microsoft MVP de Visual Basic
desde 1997. Es redactor de
dotNetMana, miembro de Ineta
Speakers Bureau Latin America,
mentor de Solid Quality Learning
Iberoamrica y autor del libro
Manual Imprescindible de Visual
Basic .NET.
http://www.elguille.info

La primera de ellas es que seleccione la opcin de


comprobacin estricta del cdigo, (Option Strict On),
ya que esta opcin, a pesar de lo que muchos piensan, nos ayudar a evitar muchos errores antes de
compilar el cdigo, ya que aprovecha una de las caractersticas exclusivas del entorno de desarrollo (o editor) de Visual Basic: la compilacin en segundo plano mientras escribimos.
Para que esta opcin est activada en todos los proyectos que creemos, debemos seleccionarla mediante el

Dnde estn mis ficheros?


La segunda es indicar que, debido a cmo se manejan los proyectos y las configuraciones de los mismos en
Visual Studio 2005, hay ciertos ficheros, que aparentemente han desaparecido, entre ellos el fichero
AssemblyInfo, las declaraciones de los controles aadidos a los formularios y las referencias a los ensamblados
externos: referencias y referencias Web.
Realmente estos ficheros no han desaparecido. En
el caso de la definicin de los controles de los formularios, estos estn en un fichero aparte, de forma
que aprovecha una de las novedades de VB2005: las
clases parciales.
Para poder mostrar todos estos elementos que antes
tenamos en el explorador de soluciones, tendremos que
pulsar en el segundo botn de la barra de herramientas
del explorador de soluciones, (ver figura 2).

<< dnm.lenguajes.vb

Como vemos en la figura 2, ese botn


tiene tambin la misma funcionalidad de
las versiones anteriores de mostrar todos
los ficheros y directorios de la carpeta en
la que tenemos nuestro proyecto. Adems
nos muestra algunos de los ficheros con
un smbolo ms (+) que nos indica que hay
algo ms. Aunque ese algo ms que hay
oculto normalmente est generado por el
propio entorno, por tanto, no deberamos
modificarlos directamente.

Propiedades del proyecto: Mejor organizado y ms asequible


Como hemos comentado, muchas de
las opciones que el IDE de Visual Basic
2005 nos oculta es porque podemos asignarlas mediante ventanas de propiedades, como puede ser la de las propiedades del proyecto, que ahora tiene una
nueva presentacin por fichas que son
ms fciles de manejar y que recopila
otras configuraciones que anteriormente estaban disponibles en otros mens o
en ficheros de configuracin.
Por ejemplo, los valores contenidos
en el fichero AssemblyInfo estn asequibles desde un cuadro de dilogo que
se accede desde la ficha Aplicacin,
tal como podemos ver en la figura 3, en
la que adems podemos ver el resto de
fichas de configuracin, entre ellas la de
referencias.
Para acceder a esta ventana de configuracin, podemos hacerlo de la misma forma que en versiones anteriores,
seleccionando el proyecto y bien usando el botn secundario del ratn o
bien desde el men Proyecto, seleccionaremos la opcin Propiedades,
con Visual Basic 2005 tambin podemos hacer doble clic en el elemento

Novedades en el lenguaje
Para poder ofrecer mayor funcionalidad, el propio lenguaje de Visual
Basic se ha visto mejorado con nuevas
instrucciones, de forma que no sea necesario acudir a la librera de clases de
.NET para poder disfrutar de nuevas
caractersticas. Para ser justos, debemos
decir que muchas de las novedades
incluidas en el propio lenguaje de Visual
Basic 2005 son caractersticas que ya
inclua su compaero de viaje C#; esto
lo pone a un nivel que antes no tena, y
por lo que ha sido muy criticado e incluso etiquetado como lenguaje de juguete. A partir de esta versin de Visual
Basic, si bien an no incluye todas las
caractersticas que muchos hemos solicitado, podemos afirmar que quin no
saque el mximo rendimiento a este lenguaje, no ser un problema propio del
lenguaje, sino una falta de visin de los
desarrolladores de versiones anteriores
que an no acaban de adaptarse.
Confiamos que este artculo motive a
aquellos que no se deciden a dar el salto final.

Compatibilidad con el CLS


Debido a que algunas de las novedades que incluye Visual Basic 2005
son caractersticas que no estn definidas en el CLS (Common Language
Specifications), en esta versin el atributo que indica que el cdigo usado en
nuestra aplicacin es compatible con
esas especificaciones (CLSCompliant)
ya no se incluye por defecto en el fiche-

<Assembly: CLSCompliant(True)>

Esto har que el compilador nos


advierta de esa incompatibilidad en nuestro cdigo. Aunque no debemos asustarnos por ser incompatibles, ya que
esto solamente afectar a los proyectos
de tipo Librera de clases (DLL) que queramos usar con otros lenguajes de .NET,
y si ese lenguaje es C#, podemos tener la
certeza de que nuestra DLL ser compatible, ya que las caractersticas del lenguaje que hacen a VB2005 incompatible
con el CLS son las que han tomado
prestadas de C#.

Tipos numricos sin signo


En toda su historia, el lenguaje
BASIC nunca ha tenido tipos numricos
sin signo, salvo el tipo Byte. En esta versin se incluyen todos los que actualmente existen en la plataforma .NET:
Uint16, UInt32 y UInt64. Lo novedoso es
que se han aadido palabras clave al lenguaje para representar a esos tipos de
datos: UShort, UInteger y ULong respectivamente. Tambin se ha incluido el tipo
SByte que es un tipo de datos entero de
8 bits con signo.
Todos estos tipos de datos no son
compatibles con las especificaciones de
.NET, por tanto, debemos tener cuidado a la hora de usarlos como valor
devuelto por una funcin o propiedad
o como tipo de datos usado como parmetro de cualquier mtodo.
Para mejorar la lectura, sobre todo
cuando trabajamos con constantes

<<dotNetMana

Figura 2. Mostrar todos los archivos


de un proyecto de VB2005.

ro AssemblyInfo, cosa que


antes siempre ocurra,
debido a que el cdigo
generado por todas las versiones anteriores a la 2005
eran totalmente compatibles con las especificaciones comunes del lenguaje,
por la sencilla razn de que
no dispona caractersticas
que lo hicieran incompatiFigura 3. Propiedades del proyecto e informacin
ble. Por tanto, si queremos
del ensamblado.
que el compilador compruebe dicha compatibilidad con el CLS, debemos aadir la
My Project del explorador de solusiguiente lnea de cdigo al mencionaciones (ver figura 2).
do fichero:

49

<< dnm.lenguajes.vb
numricas de estos nuevos tipos de
datos, podemos usar los nuevos sufijos
numricos (o caracteres de tipos) que se
han aadido para dar soporte a estos
nuevos tipos. Estos sufijos empiezan con
la letra U y pueden ser: US para el tipo
UShort, UI para el tipo UInteger y UL para
el tipo ULong.
La forma de usarlo sera como se
muestra a continuacin:
Dim us1 As UShort = 3US
Dim ui1 As UInteger = 4UI
Dim ul1 As ULong = 5UL

Instruccin Continue
Esta instruccin nos permitir
continuar un bucle sin necesidad de
tener que alcanzar el cdigo que hace
que se repita. Y su utilidad est en que
nos evitar usar condiciones para que
en la repeticin del bucle no pase
por una parte del cdigo. Por ejemplo, si tenemos un bucle For y parte
del cdigo contenido en dicho bucle
no siempre debe ejecutarse, lo que
hasta ahora hacemos es algo como
esto:
For...
Cdigo que siempre se ejecuta
If <condicin> Then
Cdigo a ejecutar solo si se
cumple la condicin
End If
Next

Si usamos la instruccin Continue,


el seudo-cdigo quedara de esta forma:
For...
Cdigo
If Not
Cdigo
cumple
Next

que siempre se ejecuta


<condicin> Then Continue For
a ejecutar solo si se
la condicin

[ ]

<<dotNetMana

NOTA

50

Esto mismo, en los viejos


tiempos del GoTo, se solucionaba
dando un salto desde el IF a la
lnea en la que est el Next,pero...
quin usa ya el GoTo? Nadie,pero
an as, en Visual Basic 2005 se
sigue soportando esta instruccin
e incluso utilizando IntelliSense
para mostrar la lnea a la que se
realizar el salto. As nos va!

Visual Basic se ha visto mejorado con nuevas instrucciones, de


forma que no sea necesario acudir a la librera de
clases de .NET para poder disfrutar de nuevas caractersticas

La instruccin Continue se puede


usar con cualquiera de los bucles soportados por Visual Basic: Do/Loop, While y
For/Next, usndose de la misma forma
que la instruccin Exit, es decir, para
continuar un bucle Do/Loop usaremos
Continue Do, y para continuar uno del
tipo While usaremos Continue While.

El operador IsNot
Con este operador las condiciones usadas para comprobar si un tipo por referencia no es de un tipo determinado resultarn ms fciles de escribir y consecuentemente el cdigo resultante ser ms legible. Hasta ahora si, por ejemplo, queramos comprobar si una variable no contena un valor nulo, lo hacamos as:
If Not variable Is Nothing Then ...

Usando este operador, el cdigo


anterior quedara de esta forma:
If variable IsNot Nothing Then...

Como podemos comprobar, resulta


ms legible esta segunda forma.
Este operador slo podemos usarlo
con variables y tipos por referencia. Ya
que para los tipos por valor podemos
usar el operador distinto de (<>), que
sera el equivalente.

to u objetos indicados despus de Using.


Esto nos garantiza que siempre se llamar al mtodo Dispose, con la ventaja aadida de que esa llamada al mtodo que
liberar los recursos se har incluso si se
produce algn error que no tengamos
controlado. Using sera equivalente a usar
un Try/Finally, de forma que en el bloque Finally llamemos al mtodo Dispose
del objeto. Por tanto, los objetos que
podemos usar con esta instruccin deben
implementar la interfaz IDisposable, que
es la que garantiza que dicho objeto tenga ese mtodo.
La forma de usar esta instruccin es:
Using variable As New Recurso
Cdigo a ejecutar
End Using

El mbito de la variable declarada


con la instruccin Using ser el propio
bloque de cdigo.
En caso de que indiquemos ms de
un objeto con la misma instruccin, los
tendremos que separa con comas:
Using variable As Recurso, variable2
As Recurso2, variable3
Cdigo a ejecutar
End Using

En este caso, definimos dos variables


junto a la instruccin Using, adems de usar
otra variable definida anteriormente.

La instruccin Using

Declaracin explcita del ndice inferior de los arrays

Esta es una instruccin de bloque, es


decir, el contenido estar definido por la
instruccin Using y acabar con End Using.
Despus de Using indicaremos uno o
varios objetos que utilizarn algn recurso del sistema. Cuando acabe el cdigo
contenido en el bloque, ese recurso se liberar llamando al mtodo Dispose del obje-

Los arrays de .NET, y por extensin


los arrays de Visual Basic 2005, a diferencia de lo que ocurra en Visual Basic 6,0 y
anteriores, siempre tienen el valor cero
como ndice inferior. Esto en principio no
supone ningn problema, al menos si
hemos cambiado el chip que tenamos
al usar los arrays de VB6, ya que en esa

<< dnm.lenguajes.vb
versin podamos indicar un rango de
ndices de la forma <valor inferior> To
<valor superior>. Pero al igual que ocurra en VB6, tambin podemos declarar
arrays sin indicar ese rango de valores, el
problema es que al usar esa forma de
declarar, en la que slo se indica un valor,
es que dicho valor representa el ndice
superior del array, de forma que si tenemos esta declaracin:
Dim nombres(5) As String

Aparentemente estamos declarando


un array con cinco elementos, pero en
realidad son seis los elementos: desde 0
hasta 5, ambos inclusive.
Para solventar este tipo de declaraciones, que puede ser confusa para los
desarrolladores de C++ o C#, en esta
nueva versin de Visual Basic se ha aadido la instruccin (por llamarla de alguna forma), 0 To, la cual se podr usar en
la declaracin de los arrays para que
quede ms claro que realmente estamos
definiendo un array con elementos desde cero hasta el valor indicado despus
de To, usando el ejemplo anterior, ahora quedara de esta forma:
Dim nombres(0 To 5) As String

Con lo que podemos comprobar que


se consigue mayor claridad.

con la sobrecarga y conversiones, tambin


se indican algunos consejos de buen uso.
Y cmo no tenemos todo el espacio que
sera necesario, veremos slo unos ejemplos de cmo hacer eso mismo desde
Visual Basic 2005.

Definir una sobrecarga


Lo primero que debemos saber es que
los operadores que nosotros podemos
definir en realidad son funciones estticas
o compartidas, es decir, son mtodos que
siempre estn disponibles en el tipo en el
que lo definimos y siempre devuelven un
valor. Pero, en lugar de usar la instruccin
Function para definirlas, usaremos la nueva instruccin Operator seguida del operador que queremos sobrecargar. En el
fuente 1 tenemos la declaracin de una
estructura en la que hemos sobrecargado
el operador de la suma.

La decisin de qu es lo que ocurre


cuando se suman dos valores de este tipo,
la tomamos nosotros y es el cdigo que
utilizaremos dentro de la declaracin del
operador. En este caso, creamos un nuevo objeto a partir del resultado de sumar
los valores de las propiedades X e Y, y es
ese nuevo objeto el que devolvemos.
Con el resto de operadores haramos lo mismo.
Y para usar este operador sobrecargado, lo haramos igual que con cualquier otro tipo de datos definido previamente en las clases de punto NET,
tal como vemos en el fuente 2.
Dim p1 As
Dim p2 As
Dim p3 As
p3 = p1 +

New Punto(10, 15)


New Punto(22, 33)
Punto
p2

Fuente 2. Uso del operador sobrecargado


del tipo Punto

Public Structure Punto


Public X As Integer
Public Y As Integer
Public Sub New(ByVal x As Integer, ByVal y As Integer)
Me.X = x
Me.Y = y
End Sub
' Sobrecarga del operador +
Public Shared Operator +(ByVal p1 As Punto, ByVal p2 As Punto) As Punto
Return New Punto(p1.X + p2.X, p1.Y + p2.Y)
End Operator
End Structure

Fuente 1. Definicin de la estructura Punto con sobrecarga del operador +

Esta es otra de las caractersticas que


Visual Basic ha heredado de los lenguajes
de la familia C. Con la primera podemos
crear nuestras propias versiones de los
operadores aritmticos y lgicos, de forma que podamos definir el comportamiento que tendr, por ejemplo, el operador suma (+) en una clase o estructura
que nosotros definamos; la segunda nos
permite indicar cmo se realizarn las conversiones de nuestros tipos con respecto
a otros tipos de datos, ya sean definidos
en la propia librera de clases de .NET
Framework o con otros tipos. Del tema
de la sobrecarga de operadores y conversiones, desde el punto de vista de un desarrollador de C#, ya lo vimos en el nmero 9 de dotNetMana, en ese artculo,
adems de explicar todo lo relacionado

Como podemos comprobar, la sintaxis usada es:


Public Shared Operator +
(expresin izquierda,
expresin derecha) As Punto

Public Shared es porque los operadores siempre estarn disponibles y deben


pertenecer al propio tipo de datos.
Operator + indica que estamos sobrecargando un operador, en este caso el de
la suma.
Los dos parmetros usados representarn a la expresin izquierda y derecha
respectivamente; dichas expresiones pueden ser de cualquier tipo, pero siempre
deben representar a un valor de tipo Punto.
El valor devuelto es del tipo Punto, de
forma que se genera un nuevo Punto con
el resultado de sumar los dos indicados
como argumentos del operador.

Una cosa importante que debemos


saber es que solamente podremos usar las
sobrecargas que hemos definido, en este
caso solo tenemos creada una sobrecarga
de la suma de dos valores de tipo Punto,
por tanto si pretendemos hacer esto:
p3 = p1 + 15

Se producir un error, por la sencilla razn de que no hemos definido qu


es lo que tenemos que hacer para sumar
un Punto con un entero.
La primera solucin ser definir esa
sobrecarga, es decir, el argumento de la
izquierda de tipo Punto y el de la derecha de tipo Integer:
Public Shared Operator +
(ByVal p1 As Punto,
ByVal i As Integer) As Punto
Return New Punto(p1.X + i, p1.Y)
End Operator

<<dotNetMana

Sobrecarga de operadores aritmticos y conversiones personalizadas

51

<< dnm.lenguajes.vb

Mediante la sobrecarga de operadores podemos definir


el comportamiento de nuestros tipos al usar los
operadores aritmticos y lgicos
El problema es que con esta sobrecarga slo podemos hacer que el cdigo anterior funcione, pero este otro volver a fallar:
p3 = 25 + p1

Porque no hemos definido la sobrecarga de la suma de un entero y un tipo


Punto (en ese orden). Por tanto, la solucin ser crear una nueva sobrecarga del
operador en la que se indiquen los parmetros en ese mismo orden.
Y si quisiramos definir sobrecargas para ms tipos de datos? Pues lo mismo... tendramos que definir dos sobrecargas para cada uno de los tipos de
datos que queramos soportar, cada una
de ellas definiendo el tipo en el lado
correcto de la operacin.
Tedioso verdad? Efectivamente hacer
esto sera muy cansado, pero afortunadamente podemos aprovechar una caracterstica del compilador de Visual Basic
conocida como promocin de tipos. La promocin de tipos no es ni ms ni menos
que la conversin automtica de un tipo
en otro diferente. Por ejemplo, si tenemos una variable de tipo Short (entero de
16 bits) y queremos guardar su valor en
otra de tipo Integer (entero de 32 bits),
no tenemos que hacer ningn tipo de conversin, ya que el compilador sabe cmo
convertir un valor Short en un Integer. Y
esta sabidura la podemos aprovechar
nosotros usando otra de las nuevas caractersticas de Visual Basic 2005: la conversin personalizada de tipos.

<<dotNetMana

Definir conversiones de datos

52

De la misma forma que podemos


sobrecargar un operador, podemos
sobrecargar la conversin de datos, particularmente la instruccin CType, de
forma que podamos indicar cmo actuar el compilador cuando se encuentre
con una conversin de cualquier tipo al

nuestro o del nuestro a otro tipo.


Como sabemos, existen dos tipos de
conversiones: las implcitas, tambin llamadas de expansin o promocin, es decir,
las que usamos sin necesidad de hacer ninguna conversin de datos, por ejemplo,
cuando convertimos un valor Short en uno
de tipo Integer, estamos promocionando el valor entero de 16 bits en otro de
32 bits; el otro tipo de conversin es la llamada de reduccin y es el tipo de conversin que hay que hacer explcitamente, es
decir, debemos indicar que queremos convertir un tipo en otro diferente. Este segundo tipo de conversiones se usan cuando se
puede producir una prdida de informacin, por ejemplo, si queremos guardar en
una variable de 16 bits el contenido de una
de 32 bits, es muy posible que se produzca prdida de informacin, ya que el valor
de 32 bits posiblemente no pueda convertirse en otro de menos capacidad.
Sabiendo esto, podemos afirmar
que las conversiones implcitas se harn
siempre que esa conversin no produzca prdida de informacin y para
realizarla no tenemos que indicar ninguna conversin. Por otra parte, las
conversiones explcitas, que son las que
tenemos que indicar expresamente que
nuestra intencin es hacer una conversin entre dos tipos de datos, las
usaremos cuando se pueda producir
alguna prdida de informacin y/o se
pueda producir alguna excepcin.
En Visual Basic las conversiones
implcitas se definen usando la instruccin Widening en la declaracin del operador CType:

Pero si lo que pretendemos es convertir un tipo Punto a entero, podamos


devolver el contenido de la propiedad X;
en este caso es conveniente definirla como
una conversin explcita, ya que perderemos parte del contenido del punto. La
declaracin quedara de esta forma en el
que usamos la instruccin Narrowing, para
indicar que estamos reduciendo el valor
de un tipo Punto a uno entero:
Public Shared Narrowing Operator CType(
ByVal p1 As Punto) As Integer
Return p1.X '+ p1.Y
End Operator

Y podemos usarla haciendo una conversin explcita:


Dim i As Integer = CType(p3, Integer)
Console.WriteLine(
valor de CType(p3, Integer) = {0}, i)

Como lo que estamos haciendo con


ese CType es convertir la variable p3 en
un entero, podemos usar la funcin de
conversin CInt en su lugar, obteniendo el mismo resultado:
Dim i As Integer = CInt(p3)

[ ]

Public Shared Widening Operator CType(


ByVal x As Integer) As Punto
Return New Punto(x, 0)
End Operator

En este caso estamos declarando una


conversin implcita de Integer a Punto,
con lo cual podemos hacer algo como esto:
Dim p4 As Punto = 15

NOTA

Cuando hacemos sobrecargas de operadores o conversiones en nuestros propios tipos, al menos uno de los parmetros o el tipo devuelto debe ser del mismo que el tipo en el que se declaran,esto
es para que no podamos definir operadores o conversiones de tipos de los que no
tengamos la declaracin.

Conversiones automticas
Como hemos comentado anteriormente, el compilador de Visual Basic ya
sabe cmo hacer ciertas conversiones
implcitas, por tanto, si le enseamos
cmo hacer una conversin del tipo Punto
a un entero de 32 bits, Visual Basic sabr
cmo convertir automticamente un
Punto a un entero de menor capacidad:
Dim s As Short = 12
Dim p5 As Punto = s
Console.WriteLine(valor de p5 = {0}, p5)

<< dnm.lenguajes.vb

Los tipos generics nos permiten crear colecciones


fuertemente tipadas en las que el tipo real es
el indicado en el constructor

Dim l As Long = 12345678901234567890L


Dim p6 As Punto = CType(l, Punto)
Console.WriteLine(valor de p6 = {0}, p6)

El problema surgir, como en este


caso, si el contenido de la variable l es
mayor de la capacidad de un entero de
32 bits, lo que producir un error de
desbordamiento (overflow) en tiempo de
ejecucin. La solucin sera, por un lado
cambiar las opciones de compilacin
para que no se tengan en cuenta las
excepciones causadas por desbordamiento de enteros, o bien, definir la
sobrecarga de conversin para que utilice un valor Long en lugar de uno entero. Por supuesto, el valor Long indicado en la declaracin del operador lo tendramos que convertir en uno entero, y
deberamos hacer nuestras comprobaciones por si se produce un error de desbordamiento. Pero con esta nueva definicin del operador de conversin nos
aseguramos de que podemos indicar
cualquier tipo entero con signo para que
se asigne automticamente a un valor
de tipo Punto. Lo mismo es aplicable a
las conversiones entre tipos Double y
Single, si definimos la conversin de
Double, el compilador de VB se encargar de hacer la otra conversin.

Sobrecarga de operadores lgicos


Adems de los operadores aritmticos, podemos sobrecargar los operadores lgicos, los que utilizamos para hacer
comparaciones y, como veremos, tambin podemos sobrecargar el comportamiento de nuestro tipo en los casos que
tenga que devolver un valor verdadero o
falso. Empecemos con los operadores
lgicos.
Como sabemos, siempre que hacemos una comparacin, sta se puede
hacer de dos formas distintas, por ejemplo, podemos comprobar si dos valores
son iguales, y tambin podemos hacer
la comprobacin de si son distintos.

Debido a esta dualidad de los operadores lgicos, cuando sobrecargamos uno


de ellos, debemos sobrecargar tambin
el complementario, y en el caso del operador igual (y distinto) deberamos crear una sobrecarga del mtodo Equals,
de forma que tambin devuelva un valor
que se ajuste a la forma de comprobar
la igualdad de dos objetos de nuestro
tipo de datos.
La forma de declarar estos operadores es similar a la que ya hemos visto, aunque, en estos casos, el valor
devuelto debe ser un valor de tipo
Boolean, ya que eso es lo que se espera cuando hacemos algn tipo de comparacin.
Por ejemplo, podramos definir los
operadores igual y distinto de nuestro
tipo Punto tal como se muestra en el listado del fuente 3.

[ ]
NOTA

Es recomendable que siempre que


sobrecarguemos los operadores igual y
distinto, sobrecarguemos el mtodo
Equal, aunque, a diferencia de C#,Visual
Basic no nos avisar de que no hemos
realizado esta sobrecarga. En estos
casos, tambin se recomienda sobrecargar el mtodo GetHashCode.

Operadores IsFalse y IsTrue


Estas dos nuevas instrucciones de
Visual Basic 2005 slo se pueden usar
para crear sobrecargas, en este caso para
sobrecargar el comportamiento de nuestro tipo cuando debe devolver un valor

' Sobrecarga de los operadores igual, distinto y sobrecarga de Equals


Public Shared Operator =(ByVal p1 As Punto, ByVal p2 As Punto) As Boolean
Return (p1.X = p2.X AndAlso p1.Y = p2.Y)
End Operator
Public Shared Operator <>(ByVal p1 As Punto, ByVal p2 As Punto) As Boolean
' Podemos llamar a la sobrecarga de la igualdad
Return Not (p1 = p2)
End Operator
' Equals nunca debe producir una excepcin,
' por tanto, si el argumento no es de tipo Punto, devolvemos False
Public Overrides Function Equals(ByVal obj As Object) As Boolean
If TypeOf obj Is Punto Then
Return Me = CType(obj, Punto)
Else
Return False
End If
End Function

Fuente 3. Definicin de los operadores igual y distinto

Como podemos observar en el fuente 3, slo hemos codificado el operador


igual, para el operador distinto, y la
sobrecarga del mtodo Equals utilizamos la definicin de la sobrecarga de
igualdad.

verdadero o falso. Estas dos instrucciones


equivaldran a sobrecargar los valores
True y False para que se adecuen a nuestro tipo. Al igual que ocurre con los operadores de comparaciones, se deben
sobrecargar los dos operadores.

<<dotNetMana

Pero si queremos asignar un valor de


tipo Long, tendremos que indicarlo explcitamente, y el compilador lo que har ser
convertir ese valor de Long a Integer y posteriormente utilizar la sobrecarga que asigna un Integer a un Punto. El cdigo que
tendramos que usar (tal y como tenemos
las sobrecargas) sera el siguiente:

53

<< dnm.lenguajes.vb
' Sobrecarga de IsFalse y IsTrue
Public Shared Operator IsFalse(ByVal p1 As Punto) As Boolean
Return p1.X = 0 AndAlso p1.Y = 0
End Operator
Public Shared Operator IsTrue(ByVal p1 As Punto) As Boolean
Return p1.X <> 0 OrElse p1.Y <> 0
End Operator

Fuente 4. Sobrecarga de los operadores IsTrue y IsFalse, para usar nuestros tipos en comparaciones

En el fuente 4 podemos ver el cdigo


de estas dos sobrecargas en el tipo Punto.

Qu operadores podemos sobrecargar?


En la tabla 1 podemos ver los operadores que podemos sobrecargar en Visual
Basic. Los indicados como unarios significa que el operador slo reciben un argumento, los binarios, por otra parte, reciben dos argumentos, que representan a
las expresiones situadas a la izquierda y a
la derecha del operador.

[ ]
NOTA

El operador de asignacin (=) no


se puede sobrecargar,ni tampoco los
operadores de incremento,pero si los
usamos, el compilador sabr lo que
tiene que hacer con ellos, y si hemos
definido una sobrecarga,la usar.Por
ejemplo, si hacemos esto: p1 += 1, el
compilador usar la sobrecarga de la
suma ya que ese cdigo sera equivalente a este otro: p1 = p1 + 1.

Tipo

Operadores

Unario
Binario

+, -, IsFalse, IsTrue, Not


+, -, *, /, \, &, ^, >>,
<<, =, <>, >, >=, <, <=,
And, Like, Mod, Or, Xor

Conversin (unario) CType

<<dotNetMana

Tabla 1. Los operadores que podemos


sobrecargar en Visual Basic.

54

Novedades de .NET
Framework 2.0
Con total seguridad, las novedades que
ms llaman la atencin, no slo de Visual

Basic, sino tambin de C#, son las incorporadas en el propio .NET Framework.
Quin a estas alturas no ha odo
mencionar los tipos generics? Seguro que
todos los lectores. Y si, por esas casualidades de la vida, el que lee an no sabe
qu son los tipos generics, est de suerte, ya que en este mismo nmero y de
la mano de Mario del Valle y de
Miguel Katrib (ambos del grupo
WEBOO) han escrito un estupendo
artculo que trata en profundidad esta
nueva incorporacin de .NET
Framework 2.0, aunque desde el punto
de vista del desarrollador de C#, pero si
quiere saber cmo usar estos tipos de
datos en Visual Basic 2005, puede descargar gratuitamente el nmero 8 de
dotNetMana en el que tratamos los
generics desde la perspectiva del desarrollador de Visual Basic.
De los tipos generics hablaremos muy
poco, ya que, tal como hemos comentado, est ampliamente tratado en este
mismo nmero y en el nmero 8 de esta
revista, pero desde que se public el artculo para Visual Basic 2005 hasta ahora han pasado unos meses y el artculo
anterior se basaba en la versin beta 1,
y como se ha aadido nueva funcionalidad para los desarrolladores de Visual
Basic, trataremos esas novedades, aunque sea brevemente.
Pero primero veamos cmo podemos
usar los tipos generics, para que nos sirva
como recordatorio y tambin de paso para
comprender cmo utilizarlos en Visual
Basic, por tanto, veamos el cdigo fuente 5 en el que declaramos una coleccin
que slo acepte tipos de datos Cliente.
Dim col As New List(Of Cliente)
Dim c As New Cliente("Juan", 33)
col.Add(c)
col.Add(New Cliente)
col(1).Nombre = "Pepe"

Fuente 5. Ejemplo de coleccin generic con


valores de tipo Cliente

Como ya han explicado nuestros


compaeros, la ventaja de este tipo de
colecciones es que el tipo de datos utilizado por la coleccin col realmente es
de tipo Cliente, con lo cual ganamos en
rendimiento, ya que .NET no se ve obligado a convertir los valores almacenados en Object y tampoco tenemos que
hacer conversiones a la hora de utilizarlos, tal como podemos ver en la figura 4, el compilador sabe cul es el tipo
de datos que almacena la coleccin y,
por tanto, nos permite el uso de
IntelliSense a la hora de acceder a los
valores almacenados.

Figura 4. IntelliSense nos muestra los tipos


almacenados en las colecciones generic.

Los tipos de restricciones que podemos hacer


En Visual Basic 2005, las restricciones que podemos hacer en nuestros tipos
generic pueden ser como en C#, y entre
las diferencias que han surgido desde
que se public el artculo del nmero 8
de dotNetMana, tenemos que ya se
puede indicar si el tipo puede ser un tipo
por valor o un tipo por referencia; para
estos casos, usaremos en la lista de restricciones las instrucciones Structure y
Class respectivamente.
En el cdigo mostrado en el fuente
6, hemos definido una clase que utiliza
generics con restricciones para que el
tipo usado sea por referencia e implemente la interfaz IComparable.
' Tipo Generic con restricciones
' el tipo indicado debe ser un tipo por
' referencia e implementar IComparable
Public Class UnGeneric(Of T As _
{Class, IComparable})

Fuente 6. Definicin de una clase generic


con restricciones

<< dnm.lenguajes.vb

Las restricciones las podemos


usar tanto en las declaraciones de
clases generic como en los mtodos
que reciban parmetros genricos

Tipos por valor con valores indefinidos


(Nullable types)
En este mismo nmero, en el artculo de nuestro compaero Octavio
Hernndez sobre las novedades de C#,
habla sobre estos tipos de datos, y para no
confundir mucho las cosas, utilizar la misma traduccin que l le ha dado al original ingls Nullable types: tipos por valor anulables, ya que el uso de tipos por valor con
valores indefinidos resulta un poco largo.
A diferencia de C#, Visual Basic 2005 no
incluye instrucciones o palabras propias
del lenguaje para tratar estos nuevos tipos
de datos, para ello tendremos que esperar a la nueva versin, en la que se incorpora una sintaxis parecida a la de C#.
Pero como no estamos hablando de
lo que se incluir en VB, sino lo que se
incluye en la versin que este mismo mes
se lanza, veremos cmo usar este tipo de
datos, ya que nos resultarn muy tiles
particularmente en las aplicaciones con
las que accedemos a bases de datos.
La definicin que encontramos en la
documentacin de Visual Studio nos dice:
Los tipos por valor anulables representan un
tipo cuyo valor subyacente es un tipo por valor
al que tambin podemos asignar un valor nulo
como a los tipos por referencia.
Los tipos por valor anulables que utilizaremos en Visual Basic ser el tipo generic
Nullable(Of T), es decir, siempre indicaremos el tipo por valor que queremos que
contenga, de forma que, si el valor contenido es un valor nulo, indicar que dicho
tipo no contiene un valor vlido. Y esa es
la verdadera validez de este tipo de datos.
Como hemos comentado anteriormente esta circunstancia es muy til cuando trabajamos con valores contenidos en
bases de datos, ya que uno de los estados
de esos datos puede ser el indefinido, es
decir, un valor nulo. Dicho valor nulo no
representa un valor real. Por ejemplo, si
tenemos esta declaracin:

Dim nBool As Nullable(Of Boolean)

La variable nBool puede contener tres


valores: Nothing (o nulo, que indica que
no est asignado), True o False (que son
los dos valores vlidos para los tipos
Boolean). Como vemos, esto difiere de una
variable declarada con el tipo Boolean, la
cual, por defecto, tendr un valor False,
mientras que al definir la variable con
Nullable(Of Boolean) tenemos la opcin
de aceptar un valor indefinido (nulo). Pero
aqu no acaba todo, ya que podemos usar
las propiedades y mtodos de esta estructura para averiguar si tiene un valor vlido e incluso para asignar un valor por
defecto en el caso de que an no tenga un
valor vlido.
Para saber si una variable de tipo
Nullable contiene un valor, podemos usar
la propiedad HasValue, esta devolver verdadero si contiene un valor vlido para el
tipo de datos con el que la hemos definido o un falso si no lo tiene.
Tambin podemos usar el mtodo
GetValueOrDefault para obtener el valor
contenido en la variable (si no es nulo) o el
que indiquemos. Y debido a que todos los
tipos por valor siempre tienen un valor predeterminado, al usar este mtodo tenemos
dos sobrecargas, una en la que no se indica ningn argumento, en cuyo caso devolver el valor predeterminado y la otra en
la que indicamos el valor que se utilizar
en el caso de que no est definido el valor.

Si en lugar de asignar un valor (en este


caso el 15), queremos que devuelva el valor
predeterminado para el tipo entero (que
es el 0), la asignacin anterior la tendremos que hacer as:
Dim i As Integer = nInt.GetValueOrDefault()

Debido a que la variable nInt en el


fondo es un tipo entero, podremos usarla en las mismas situaciones que el resto
de variables Integer, incluso podemos asignarle valores resultantes de una expresin
que de cmo resultado un valor entero.
Pero debido a que en realidad no es una
variable Integer sino del tipo Nullable(Of
Integer), tambin podemos asignarle un
valor Nothing con lo que conseguiramos
ponerla en un estado anulable.

Conclusiones
Realmente son muchas las novedades
que incorpora Visual Basic 2005, pero
lamentablemente es imposible explicarlas
todas en el espacio dedicado a un artculo. Afortunadamente en otros artculos de
este monogrfico sobre la nueva versin
de Visual Studio se han tratado otros temas
que de alguna forma tambin son vlidos
para Visual Basic, como son los distintos
niveles de accesibilidad para los bloques
Get y Set de las propiedades o las clases
parciales que se ha tratado en el artculo
de las novedades de C#, o las novedades

Los tipos por valor anulables que utilizaremos en Visual Basic


ser el tipo generic Nullable(Of T), es decir, siempre
indicaremos el tipo por valor que queremos que contenga
Por ejemplo, si declaramos una variable de tipo anulable que sea de tipo entero, y en el caso de que el valor que contiene sea nulo podramos indicar en el
mtodo GetValueIrDefault que devuelva
el valor 15, y si tiene un valor vlido, que
devuelva dicho valor. Esto lo podemos
hacer con el siguiente cdigo:
Dim nInt As Nullable(Of Integer)
...
Dim i As Integer= nInt.GetValueOrDefault(15)

en el acceso a datos, que podemos ver en


el artculo de Jorge Serrano, en el que
nos cuenta las novedades de las aplicaciones Maestro-Detalle, donde podemos
saborear algunas de esas novedades y de
los nuevos asistentes del entorno integrado. Otro de los temas que tampoco hemos
tratado es sobre un objeto especial y
exclusivo para los desarrolladores de Visual
Basic: My, el cual fue tratado en el nmero 8 de esta revista.

En el cdigo de este artculo se incluyen ejemplos de algunas de las novedades que no hemos tenido oportunidad de tratar.

<<dotNetMana

NOTA

55

dnm.lenguajes.vb

Jorge Serrano

Maestro-detalle con Visual Basic 2005?


Chupado!
Los programadores y usuarios de los entornos de desarrollo de Microsoft estn
acostumbrados a que los empleados de Microsoft integren en estos entornos, ciertas funciones que faciliten la tarea del desarrollo a los programadores. Una de esas
funciones es la que tiene que ver con la autogeneracin de cdigo, algo que a
muchos les gusta, y a otros muchos tambin, les asusta.

<< En mi caso, debo levantar la mano cuando se pregunta en


voz alta a quien no le gusta estas formas de autogeneracin de cdigo, ya que yo soy de esos cabezotas a los que le gusta casi de forma enfermiza,
controlar el cdigo que escribe para dotarlo de la
calidad y control que quiero que tenga mi cdigo,
por eso, pienso que no me hace ninguna gracia que
un entorno por muy bueno que sea, como efectivamente lo es Visual Studio 2005, me autogenere
cierta parte de cdigo como que no me da confianza, para qu engaarnos. Pero muchas veces,
nos podemos sorprender, y eso es lo que me ha
pasado a m con el asistente para la generacin de
aplicaciones de tipo maestro-detalle en Visual Basic
2005 Express Edition, motivo por el cul me he
decidido a escribir este artculo.

Maestro qu?

Jorge Serrano
es redactor de dotNetMana. Es
Ingeniero Informtico y MVP de
VB y de .NET. Es Webmaster de
PortalVB.com y autor de
diferentes libros y artculos
tcnicos. Jorge est entre los
mejores profesores y
conferenciantes sobre la
tecnologa .NET de nuestro pas.

Casi todos saben lo que digo cuando hablo de


una aplicacin maestro-detalle. Si hemos programado en versiones anteriores de Visual Basic, ya
sea para la plataforma .NET o no, sabremos que
hacer este tipo de aplicaciones nos consume una
gran parte de tiempo, recursos, y lo que es ms
importante, dinero.
Las aplicaciones maestro-detalle buscan relacionar unos datos maestros con un conjunto de
datos detalle. Algo obvio verdad? Imaginemos por
ejemplo, una tabla de familias de productos y su
correspondiente tabla de productos. Indudablemente, una familia de productos determinada,
tendr 1 ms productos de detalle, y un produc-

to pertenecer slo a 1 familia de productos.


Extendamos pues esto, a una aplicacin genrica
y tendremos la mecnica normal de una aplicacin
de tipo maestro-detalle.
Visual Studio 2005 y en su caso Visual Basic
2005 Express Edition, nos facilita las herramientas a travs de las cuales podemos generar rpidamente una aplicacin completa de gestin maestro-detalle.

Preparando la base de datos


Supongamos que tenemos nuestra base de datos
ya preparada. Para no dar muchas vueltas y a modo
de ejemplo, crearemos dos tablas denominadas
tbl_FAMILIAS y tbl_PRODUCTOS . La estructura de
estas tablas son las que se muestran en la figura 1
y figura 2.

Figura 1. Estructura de la tabla tbl_FAMILIAS.

Figura 2. Estructura de la tabla tbl_PRODUCTOS.

<< dnm.lenguajes.vb
Estas dos tablas, estarn relacionadas como por ejemplo, como se muestra en la figura 3.

Seleccionaremos el origen de los


datos, que para nosotros ser Base de
datos, y pulsaremos a continuacin
el botn Siguiente dentro del asistente. De esta manera, el asistente nos
presentar la informacin relativa a la
conexin de datos, como se muestra
en la figura 5.

Figura 7. Objetos seleccionados de la


base de datos.
Figura 3. Relacin de las tablas de
tbl_FAMILIAS y tbl_PRODUCTOS.

Primer paso, configuracin de


la fuente de datos
La primera tarea que deberemos
realizar en el entorno de desarrollo, es
la de configurar la fuente de datos. Para
ello, he iniciado una nueva aplicacin
Windows con Visual Basic 2005 Express
Edition, y he seleccionado la opcin
Datos > Mostrar orgenes de datos.
De esta manera, iniciaremos la ventana de orgenes de datos del entorno,
que ser el lugar dentro del cul configuraremos la fuente de datos con la que
vamos a trabajar para crear nuestra aplicacin maestro-detalle.
Dentro de esta ventana, haremos clic
con el ratn sobre la opcin Agregar
nuevo origen de datos. De esta forma,
se abrir el asistente de configuracin
del origen de datos como se muestra en
la figura 4.

Figura 5. Opcin de conexin de datos.

Aqu, podremos seleccionar el botn


Nueva conexin para establecer una
nueva conexin en el caso de no tenerla creada. En mi caso, tengo creada ya
una conexin, por lo que la utilizar y
pulsar el botn Siguiente y pondr
un nombre a esa conexin de la aplicacin con la base de datos como se indica en la figura 6.

Nuestra tarea ahora, ser la de preparar las tablas del origen de datos con
el objetivo principal, de que stas se
comporten como datos de tipo maestro-detalle.

Segundo paso, preparacin del


origen de datos

Figura 6. Conexin establecida con la


base de datos.

Figura 4.Asistente para la configuracin


de orgenes de datos.

Figura 8. Origen de datos


aadido al entorno.

En esta ventana, pulsaremos nuevamente el botn Siguiente. De esta


manera, accederemos a la ventana que
contiene los objetos de la base de datos,
y dentro de la cul desplegaremos las
tablas y seleccionaremos las tablas que
hemos creado anteriormente, tal y como
se indica en la figura 7.

Hasta ahora, hemos aadido como


origen de datos, una nueva conexin
con la tabla o tablas que queremos que
formen parte de nuestra aplicacin
maestro-detalle, pero todava no hemos
indicado que tabla actuar como tabla
maestra y que tabla actuar como detalle. Eso es justamente lo que haremos
a continuacin.
La tabla maestra para nosotros,
ser la tabla tbl_FAMILIAS , mientras
que la tabla detalle ser la tabla
tbl_PRODUCTOS.
Inicialmente nos centraremos en la
tabla tbl_FAMILIAS, para ello y acudiendo a la ventana Orgenes de datos,
desplegaremos los campos de esta tabla
como se muestra en la figura 9.

<<dotNetMana

Lo nico que tenemos que hacer ahora, es aadir algunas filas de datos a nuestras tablas, y as, estaremos ya listos de preparar nuestra aplicacin maestro-detalle
con Visual Basic 2005 Express Edition.

En esta ventana, pulsaremos el


botn Finalizar.
Nuestra nueva conexin, aparecer
ahora aadida a la ventana Orgenes de
datos como se muestra en la figura 8.

57

<< dnm.lenguajes.vb

Figura 9.Tabla tbl_FAMILIAS


desplegada en el origen de datos.

Observaremos en nuestro caso, no


slo los campos de la tabla tbl_FAMILIAS, sino los campos que de otra tabla,
que por algn tipo de relacin estn
enlazados con esta tabla.
Haremos clic entonces sobre el
campo FAMILIA_ID primero y sobre el
campo DESCRIPCION despus, para abrir
la lista desplegable y seleccionar la
opcin Label como se indica en la
figura 10.

Representa los datos volcados dentro de un control DataGrid.


Representa los datos volcados dentro de un control estndar como por
ejemplo un control TextBox y que
reflejara los datos detalle de la informacin.
No representa ningn control como
tipo de objeto de volcado de los
datos.
Dentro del men contextual anterior, seleccionaremos la opcin de volcado de datos dentro de controles estndar o Detalles.
De esta manera, tenemos lista nuestra tabla o datos maestros, ahora pasaremos entonces, a preparar los datos de
detalle. Para realizar esta accin, modificaremos en primer lugar y si lo deseamos, el tipo de controles que queremos que se utilicen para mostrar los
campos de las tablas como se indicaba
en la figura 10 y que es el resultado que
puede verse en la figura 11.

Figura 11. Modificacin de los


campos para la tabla de detalle.

<<dotNetMana

Figura 10. Campos de tipo Label.

58

De esta manera, habremos cambiado el tipo de estos campos, de tipo


TextBox a tipo Label . Es decir, sern
campos que no podremos editar. Al ser
la tabla maestra, no nos interesa en principio que se cambien sus valores, por lo
que hemos optado para que se muestren
como tipo Label.
A continuacin, haremos clic sobre
la tabla tbl_FAMILIAS abriendo nuevamente la lista desplegable que aparece
a su costado. Una vez hecho esto, observaremos un men contextual dentro del
cul, encontraremos las siguientes
opciones:

A continuacin prepararemos esta


tabla para que acte como tabla detalle.
Para ello, deberamos seleccionar esta
tabla y seleccionar de la lista desplegable la opcin DataGrid, que es la
opcin que se utiliza en el entorno de
desarrollo por defecto.
Una vez que hemos finalizado esto,
deberemos incrustar o insertar los datos
de las tablas maestro-detalle en nuestra
aplicacin, que es lo que veremos a continuacin.

Windows, la tabla maestra. Para ello,


arrastraremos y soltaremos la tabla
tbl_FAMILIAS en el formulario Windows
como se muestra en la figura 12.

Figura 12. Insertando los datos


maestros en el formulario.

Nuestra tabla maestra quedar


entonces insertada en nuestro formulario como se muestra en la figura 13.

Figura 13.Tabla maestra insertada


en nuestro formulario.

Si observamos el entorno de desarrollo, veremos que no slo se han insertado los campos de la tabla tbl_FAMILIAS, sino que adems, se han aadido
varios componentes y controles a nuestra aplicacin. Lgicamente, podemos
personalizar y manipular los controles
y componentes insertados en el formulario, pero ahora mismo, lo que nos interesa una vez insertada la tabla maestra,
es insertar la tabla detalles.
Para ello, arrastraremos y soltaremos ahora, la tabla tbl_PRODUCTOS al formulario de nuestra aplicacin. De esta
manera, aparecer en nuestro formulario un control DataGrid que corresponde con los datos de detalle de nuestra
aplicacin tal y como se muestra en la
figura 14.

Tercer paso, insertando en


nuestra aplicacin los datos
maestro-detalle
Lo primero que haremos ser insertar en nuestra aplicacin o formulario

Figura 14. Control DataGrid insertado


en el formulario de la aplicacin.

<< dnm.lenguajes.vb
DataSource y dentro de la lista desplega-

Si observamos el cdigo
generado por el asistente,
veremos que se trata de un
cdigo bastante limpio
Lo que Visual Basic 2005 Express
Edition genera en todo esto, es un DataSet
tipado con el cul podremos trabajar en
nuestra aplicacin maestro-detalle. En
nuestro ejemplo, este DataSet tipado lo
encontraremos en la ventana del explorador de soluciones con el nombre PRUEBAS_maestro_detalle.xsd.
De todos los modos, si ejecutamos
nuestra aplicacin ([F5]), observaremos
que los datos maestro-detalle no estn an
relacionados entre s como se muestra en
la figura 15. Qu es lo que falta?

ble que aparecer, deberemos seleccionar


la opcin correspondiente al campo de
relacin entre la tabla maestra y la tabla
detalle, y que en mi caso es el campo
FK_tbl_PRODUCTOS_tbl_FAMILIAS como se
indica en la figura 16.

Figura 16. Seleccionando la


relacin de las tablas maestrodetalle en el control DataGrid.

Una vez asignada la relacin, volveremos a ejecutar la aplicacin ([F5]) y


observaremos que ahora s, nuestras tablas
maestro-detalle estn relacionadas entre
s como se indica en la figura 17.

Ahora bien, el control de navegacin


de datos BindingNavigator uno de los
controles nuevos del .NET 2.0 contiene diferentes opciones que nos permitirn aadir, modificar y actualizar, borrar
y guardar datos. El control DataGrid tambin nos facilitar estas tareas.
Aunque nuestra tarea podra haber
concluido aqu, podemos personalizar
nuestra aplicacin hasta el nivel que
deseemos. Por eso, nuestro trabajo puede continuar desde aqu, sabiendo que
el asistente nos ha ahorrado una gran
cantidad de trabajo.

el control de navegacin de
datos BindingNavigator
contiene diferentes opciones
que nos permitirn aadir,
modificar y actualizar, borrar
y guardar datos

Figura 15.Aplicacin en ejecucin


mostrando que los datos no estn
relacionados.

Evidentemente, relacionar los datos


de ambas tablas. Esto es lo que veremos
en el siguiente punto.

Cuarto paso, creando la relacin de los datos maestrodetalle


Esta es quizs la tarea ms sencilla
de todo el proceso, pero a la vez es la
ms importante, ya que nos permitir
relacionar los datos maestro-detalle para
mostrarlos con cierta lgica.
Accederemos a los datos de detalle
de la tabla PRODUCTOS haciendo clic sobre
el control DataGrid y desplegando la
ventana de Propiedades ([F4]).
Dentro de la ventana de Propiedades, deberemos acudir a la propiedad

Figura 17. Ejecucin final de nuestra


aplicacin maestro-detalle.

Los detalles finales de nuestra


aplicacin maestro-detalle
Ya hemos concluido el trabajo de la
preparacin y programacin de nuestra
aplicacin maestro-detalle, aunque como
hemos podido observar, mucha, mucha
programacin no ha habido que digamos.
Si observamos el cdigo generado
por el asistente, veremos que el cdigo
insertado no contiene instrucciones o
acciones fuera de lugar de lo que sera
una aplicacin maestro-detalle realizada por nosotros mismos. Se trata de un
cdigo bastante limpio.

El asistente de generacin de aplicaciones maestro-detalle nos aporta una


herramienta amiga que nos facilita enormemente el tiempo de desarrollo y puesta en marcha inicial de una aplicacin tipo
maestro-detalle.
Aunque el asistente nos proporciona
la base de este tipo de aplicaciones, no es
menos cierto que a partir de aqu, comienza nuestra tarea real en el desarrollo, pues
es muy comn que queramos personalizar el comportamiento de nuestra aplicacin para realizar diferentes acciones.
Lo que est claro es que hay dos factores a tener en cuenta a la hora de usar
este asistente. El primero es que nos ahorra tiempo, recursos y dinero. El segundo por si no fuera ya importante el primero, es que el cdigo generado por este
asistente es limpio, y los retoques que
habra que hacer no son pesados pues el
cdigo creado por el asistente a mi modo
de ver, es un cdigo muy ordenado, lo cul
se relaciona nuevamente con el primer
factor de tiempo, recursos y dinero.

<<dotNetMana

Conclusiones

59

dnm.plataforma.net

Luis Miguel Blanco

El IDE de Visual Studio 2005


El advenimiento de Visual Studio 2005 trae de la mano, como ya es habitual en este
producto, un notable conjunto de novedades y mejoras, encaminadas como siempre,
a simplificar el desarrollo de aplicaciones y aumentar la productividad del programador. En este artculo hacemos una revisin de las ms destacadas.

<< La renovacin de nuestro banco de trabajo


Y cuando decimos las ms destacadas, adems
hemos de puntualizar que realmente vamos a abordar slo aquellas caractersticas que efectivamente
despuntan como novedad o mejora relevante, ya
que tal es el cmulo de innovaciones, que posiblemente nos haran falta varios artculos para detallarlas todas.
Dado que podemos abordar este tema desde diferentes perspectivas, nos hemos decidido a detallar los
nuevos aspectos del IDE de Visual Studio 2005
(VS2005 en adelante) siguiendo aproximadamente el
ritmo que nos marcara el trabajo con un proyecto
Visual Basic de tipo Windows, es decir: creacin del
proyecto, diseo del interfaz visual, escritura del cdigo y depuracin.
Y ya sin ms dilacin vamos a entrar en materia,
que hay muchas cosas que contar.

Creacin de proyectos, configuracin y


ajustes del IDE

Luis Miguel Blanco


es redactor de dotNetMana. Es
consultor en Alhambra-Eidos. Ha
escrito varios libros y decenas de
artculos sobre la plataforma
.NET (lalibreriadigital.com)

El modo de creacin de un proyecto ha variado


ligeramente en VS2005. Ahora, el cuadro de dilogo
de nuevo proyecto agrupa dentro de cada lenguaje
diversas categoras de plantillas de proyecto en funcin de las aplicaciones que tengamos instaladas en
nuestra mquina, pudiendo elegir desde la clsica aplicacin Windows, hasta la novedosa Windows
Presentation Foundation (ms conocida como Avalon).
Ver la figura 1.
El lector se preguntar a buen seguro dnde han
ido a parar las plantillas para proyectos Web. El moti-

Figura 1

vo reside en que ahora VS2005 separa totalmente


este tipo de proyectos del resto. Si queremos crear
una aplicacin ASP.NET, tendremos que elegir la
opcin de men File > New > Web Site, aparecindonos el dilogo especfico para la creacin de
proyectos Web: ASP.NET Web Site, Web
Service, etc. En este dilogo tambin seleccionaremos el lenguaje de programacin a utilizar, e incluso si queremos que el sitio Web sea creado al modo
clsico, usando IIS, o en una ruta de archivos, con
lo cual se har uso de un servidor Web virtual, lo que
nos libera de la obligacin de tener instalado IIS en
la mquina de desarrollo.
Una vez creado el proyecto, debemos detenernos en su mejorado acceso y manipulacin de propiedades, las cuales se muestran en una completsima ventana que las organiza en una serie de pestaas, desde las que podemos configurar todos los
aspectos necesarios: nombre de ensamblado, formulario inicial y de presentacin, referencias, recursos, etc. Ver la figura 2.

<< dnm.plataforma.net

Una de las novedades importantes a


nivel de configuracin del IDE, consiste
en la capacidad de poder guardar todos
los ajustes establecidos en el entorno de
trabajo dentro de un archivo en formato
XML con extensin .VSSETTINGS.
Empleando el men Tools > Import and
Export Settings realizaremos esta operacin mediante un sencillo asistente, con
lo que podremos llevar nuestra configuracin favorita a otra mquina, evitando
el tedioso trabajo de tener que volver a
configurar todo manualmente. La figura
3 muestra este asistente.

Otro de los aspectos incmodos en el


trabajo con el IDE, resida en el cambio
de posicin y acoplamiento de las diferentes ventanas que lo componen, ya que
en algunos casos era realmente difcil
depositar una ventana en el lugar deseado. A partir de ahora, esta tarea ya no va

Figura 3

Diseadores y ventanas adicionales


Cuando vamos a disear un formulario, la caja de herramientas es el primer elemento al que solemos recurrir
para arrastrar y soltar los controles que
compondrn el interfaz de usuario; en
esta versin, la ventana Toolbox contiene ms categoras de controles, per-

Figura 5

a revestir problema, puesto que al mover


una ventana aparecern los indicadores de
posicionamiento que vemos en la figura
5; simplemente con situar la ventana sobre
uno de ellos, quedar colocada en su nuevo emplazamiento.

Mejoras en el editor de cdigo


Son las ms importantes con diferencia, ya que el trabajo que dedicamos
a la escritura de cdigo, normalmente
representa el porcentaje ms alto de
nuestro tiempo global de desarrollo.
En primer lugar, si abrimos el editor para ver el cdigo de la clase del formulario, notaremos la falta del cdigo
generado por el diseador, el cual se
encuentra ahora dentro de una clase parcial, en un archivo aparte con una denominacin del estilo NombreFormulario.
Designer.VB, lo cual nos
proporciona una mayor
claridad y limpieza de
cdigo. Este archivo se
encuentra oculto en el
explorador de soluciones,
por lo que debemos pulsar el botn para mostrar
todos los archivos de la
solucin.
Una caracterstica
Figura 4
largamente demandada
en Visual Basic ha sido la
posibilidad de incluir comentarios
XML, al estilo de C#, que nos permitan documentar adecuadamente el cdigo. Pues bien, nuestro deseo se ha hecho
realidad, ya que ahora, al escribir tres
comillas simples en la cabecera de una
clase, mtodo o propiedad, se crear el
esqueleto bsico para documentarlo, y
al hacer uso de ese elemento de cdigo,
los comentarios introducidos se visualizarn en el ToolTip correspondiente,
como vemos en la figura 6.
Entre las incorporaciones realizadas
a la tecnologa Intellisense podemos destacar las opciones de auto correccin,
que subrayan una palabra clave mal
escrita, ofrecindonos una lista de posibles correcciones. Igualmente ser
subrayado un identificador que pertenezca a un tipo que se intente utilizar
antes de haber sido instanciado. Por otra
parte, para que de un rpido vistazo
podamos comprobar cules son las nue-

<<dotNetMana

Figura 2

mitindonos tener desplegada ms de


una categora al mismo tiempo.
Por otro lado, a la hora de alinear los
controles en la superficie del formulario,
contamos con unas estupendas guas visuales, que facilitan en gran medida su organizacin, y evitarn en muchos casos el
uso de las opciones del men Format.
Tambin se van a ver reducidos nuestros viajes a la ventana de propiedades
gracias a los Smart Tags (Etiquetas
Inteligentes) que acompaan a muchos de
los controles, y que vienen representados
por un pequeo icono en forma de flecha,
en la parte superior derecha del control.
Al pulsar dicha etiqueta, aparecer un
pequeo dilogo con las operaciones ms
frecuentes que se realizan sobre el control, pudiendo efectuarlas in situ. La
figura 4 muestra un ejemplo del diseador de formularios.

61

<< dnm.plataforma.net
ciones, pero adems, contamos con la posibilidad de
crear nuestros propios recortes personalizados mediante el administrador de snippets.
Para agregar un code snippet hemos de hacer clic
derecho sobre el editor y elegir la opcin Insert
Snippet, que abrir una lista de carpetas conteniendo todos los diferentes bloques de cdigo organizados por categoras, como vemos en la figura 8.
Figura 6

vas lneas de cdigo que hemos escrito, en el margen


del editor se muestran unos indicadores de color verde y amarillo, avisndonos de las lneas grabadas y las
pendientes respectivamente. Veamos unos ejemplos
en la figura 7.
Figura 8

Figura 7

A travs del diagrama de clases, podemos disear


visualmente el esqueleto de una clase, con la particularidad de que el editor de cdigo y el diagrama se
encuentran sincronizados, es decir, cualquier cambio
que hagamos sobre una clase, por ejemplo en el editor,
se propagar inmediatamente al diagrama y viceversa.
La figura 9 nos muestra esta ventana del diagrama.

Existen ciertas operaciones cuyo cdigo normalmente repetimos hasta la saciedad en todas nuestras
sesiones de trabajo. Para ahorrar tiempo en la escritura de dicho cdigo, ahora disponemos de los Code
Snippets (Recortes de Cdigo), que consisten en bloques
de cdigo prefabricados, almacenados en VS2005,
y que pegamos directamente sobre el editor, ahorrando
gran cantidad de tiempo de escritura.
Figura 9

<<dotNetMana

A travs del diagrama de clases,


podemos disear visualmente el
esqueleto de una clase, con la
particularidad de que el editor de
cdigo y el diagrama se
encuentran sincronizados

62

El IDE nos proporciona una enorme cantidad de


estas piezas de cdigo para resolver multitud de situa-

Otro de los mecanismos que nos puede ayudar


a agilizar la escritura es Refactoring, que nos permite reestructurar nuestro cdigo de una manera
rpida y fcil.
Por ejemplo, supongamos que estamos escribiendo un fragmento de cdigo y estimamos que puede ser
candidato a convertirse en un mtodo independiente;
lo que tenemos que hacer es seleccionar dichas lneas
de cdigo, y con un clic derecho sobre las mismas, elegiremos la opcin Refactoring > Extract method, que
abrir un cuadro de dilogo en el que introduciremos
el nombre de un nuevo mtodo para las lneas seleccionadas, y Refactoring nos crear el mtodo con dichas
lneas, situando una llamada al mismo en el emplazamiento original, como vemos en la figura 10.

<< dnm.plataforma.net

Figura 11

En algunas ocasiones, para realizar pruebas,


comenzamos a codificar usando los nombres por defecto que genera el IDE: Form1, Class1, etc., y al terminar, si la prueba es satisfactoria y queremos mantener
el cdigo escrito, nos vemos obligados a recorrerlo
para cambiar dichos nombres por otros ms significativos, lo cual resulta muy tedioso, sobre todo si
hemos escrito bastante cdigo.
Esta operacin podemos realizarla ahora en un
nico paso, seleccionando el nombre a cambiar,
haciendo clic derecho y eligiendo la opcin Rename,
la cual se encargar de propagar los cambios necesarios a lo largo de todo el cdigo.

Novedades del depurador


En primer lugar tenemos que anunciar la vuelta al depurador de una de las caractersticas clsicas de Visual Basic: Editar y Continuar, ahora tambin disponible para C#. S en efecto, volvemos a
contar en el IDE con la posibilidad de modificar el
cdigo al mismo tiempo que lo estamos depurando, lo que supone un importante aumento de productividad, evitando en muchas ocasiones tener que
cancelar la ejecucin, modificar y volver a ejecutar,
con el retraso que ello supone en el tiempo global
de desarrollo.
Respecto a la consulta de informacin en tiempo
de depuracin, tenemos como novedad los Data Tips,
consistentes en una vieta flotante que visualiza los valores contenidos en los miembros de una clase propia o
de la plataforma .NET. Tan slo hemos de situar el
ratn sobre la variable que alberga el objeto, y el data
tip con su contenido ser visualizado. Adicionalmente,
tambin tenemos visualizadores en diferentes formatos para estos valores, dependiendo de cul sea el valor
que estamos consultando; si hay un visualizador disponible lo sabremos porque a su lado aparece un icono de
lupa. Ver la figura 11.

Figura 12

Cerrando el IDE
Y esta ha sido la relacin de primicias ms remarcables con las que desembarca el nuevo y flamante
Visual Studio 2005. Como hemos comentado al
comienzo de este artculo, hay muchas ms, entre
las que podramos mencionar de forma breve, la
capacidad de la ventana Inmediato para evaluar
expresiones en tiempo de diseo; la nueva ventana
Error List, que muestra los errores producidos,
por lo que ya no se usa la ventana Task List para
este menester; los atributos del depurador, que permiten personalizar el modo en el que el depurador
visualiza la informacin; el nuevo sistema de ayuda, con capacidades mejoradas de bsqueda, almacenamiento para entradas favoritas de la documentacin, etc.
En definitiva, una nueva versin de un gran
entorno de desarrollo de aplicaciones, que potencia nuestra capacidad de trabajo al tiempo que la
simplifica.

<<dotNetMana

Figura 10

Cuando se produce un error en tiempo de ejecucin, entra en accin el Asistente de Excepciones,


una estupenda herramienta que muestra un cuadro de
dilogo con la descripcin de la excepcin, una lista
de posibles soluciones, y acceso a un completo detalle del problema, a la documentacin de .NET, etc.
Ver la figura 12.

63

dnm.plataforma.net

Carlos Quintero

Novedades en la extensibilidad de
Visual Studio 2005
Como no poda ser menos,Visual Studio 2005 introduce muchas mejoras en su modelo de extensibilidad que permiten crear complementos de forma mucho ms sencilla,
sin las complicaciones innecesarias de antao.

<< Es evidente que Microsoft ha escuchado a los desarrolladores de complementos (add-ins) que hemos estado quejndonos durante los ltimos tres aos de
las complicaciones, a nuestro juicio innecesarias,
que tenan los complementos de Visual Studio
.NET 2002/2003 y, por fin, en esta nueva versin
de Visual Studio la creacin de complementos se
ha simplificado notablemente y se han introducido
interesantes mejoras. Estas complicaciones eran
consecuencia de la tecnologa COM (ActiveX) que
hereda el IDE de Visual Studio actual de sus versiones 5.0 y 6.0 de finales de los 90 (recordemos
que Visual Studio 2005 sigue sin ser una aplicacin
.NET). No slo eso, sino que los bugs ms indeseables del modelo de extensibilidad han sido corregidos. Para los lectores que no lo sepan, el nuevo
sitio Web MSDN Product Feedback Center
(http://lab.msdn.microsoft.com/productfeedback) permite enviar sugerencias y bugs a los equipos de desarrollo de los productos de Microsoft (no a todos
todava), y funciona realmente bien, con respuestas rpidas (al menos durante las fases beta de los
productos).

Nuevo IDE, nuevos ensamblados


Carlos J. Quintero
es Microsoft MVP de .NET desde
principios del ao 2004. Es autor
del popular complemento MZTools 3.0 para VB6,VB5 y VBA, y
de MZ-Tools 4.0 para Visual
Studio .NET 2002/ 2003, ambos
disponibles en
http://www.mztools.com

Lo primero que llama la atencin del proyecto generado por el asistente para la creacin de complementos (men Nuevo proyecto, nodo Otros tipos de
proyectos, Extensibilidad) es que algunas de las referencias han cambiado de nombre y de versin:
El ensamblado EnvDTE.dll, que contiene la mayor
parte del modelo de extensibilidad de Visual Studio
ahora tiene la versin 8.0.0.0, aunque contiene

idntica funcionalidad al anterior EnvDTE.dll versin 7.0.3300.0.


El ensamblado EnvDTE80.dll, nuevo en esta versin, contiene toda la funcionalidad nueva que
Microsoft ha aadido en Visual Studio 2005.
Han preferido hacerlo as, con dos ensamblados, para no correr riesgos de romper la compatibilidad hace atrs modificando el ensamblado EnvDTE.dll.
El ensamblado Office.dll, que contena la funcionalidad de barras de botones prestada de Microsoft
Office, ha sido reemplazado por el nuevo ensamblado Microsoft.VisualStudio.CommandBars.dll. Han
hecho esto para tener un ensamblado ms pequeo
que contenga slo lo necesario para las barras de
botones de Visual Studio, sin elementos innecesarios que contena la DLL de Microsoft Office.
Aparte de estos ensamblados que el asistente aade como referencias, existen otros dos que, dependiendo de la funcionalidad de nuestro complemento,
necesitaremos aadir:
El ensamblado VSLangProj80.dll, que contiene
la extensibilidad especfica de los proyectos de
Visual Basic .NET y C# (Visual Studio .NET
2002 proporcionaba el ensamblado VSLangProj.dll,
y Visual Studio .NET 2003 proporcionaba
VSLangProj2.dll).
El ensamblado VsWebSite.Interop.dll, nuevo en
esta versin, proporciona la extensibilidad especfica para el nuevo modelo ASP.NET 2.0, que elimina la necesidad de archivos de proyecto para
aplicaciones Web y considera como sitio Web todo
el contenido de un directorio.

<< dnm.plataforma.net
se pueden seguir usando las formas
anteriores de registrar un
complemento, pero la nueva forma
de registro es mucho ms fcil
Nuevo registro de complementos
Entre los archivos generados por el asistente, hay
otro que llamar nuestra atencin: el que tiene la extensin .addin. Como explicamos en el nmero 18 de
dotNetMana, los complementos de Visual Studio .NET
2002 o 2003 tenan que ser registrados de dos maneras:
Como componente ActiveX, usando COM Interop
(regasm.exe o equivalente): por fin, este paso ya no
es necesario, y es que no tena mucho sentido que,
siendo un ensamblado .NET, hubiera que registrar
la DLL del complemento como componente ActiveX
para que Visual Studio la pudiera encontrar y cargar.
Como complemento de Visual Studio, para que aparezca en el Administrador de Complementos: esto se
haca aadiendo unas entradas en el registro de
Windows (HKEY_CURRENT_USER\Software\Microsoft\
VisualStudio\7.1\AddIns para Visual Studio .NET
2003) pero ahora se puede hacer a travs de un archivo XML con extensin .addin ubicado en unas carpetas determinadas. Visual Studio 2005 busca archivos con la extensin .addin en las carpetas que aparecen en el dilogo que se muestra pulsado el men
Herramientas, Opciones, nodo Seguridad de
complementos/macros. La figura 1 muestra dicho
dilogo (tomado de la versin inglesa de Visual Studio
2005). Como podemos observar, hay varias carpetas
donde Visual Studio 2005 buscar los archivos con
la extensin .addin. Unas carpetas son especficas
para el usuario de la sesin de Windows (las que
comienzan por %USERPROFILE% o %VSAPPDATA%), por lo
que un archivo .addin en dicha carpeta har que el
complemento slo est disponible para ese usuario,

y otras son para todos los usuarios (por ejemplo, las


que comienzan con %ALLUSERSPROFILE% o %VSCOMMONAPPDATA%). Habr que tener esto en cuenta a la hora
de crear el setup para nuestro complemento.
<?xml version="1.0" encoding="UTF-16" standalone="no"?>
<Extensibility
xmlns="http://schemas.microsoft.com/AutomationExtensibility">
<HostApplication>
<Name>Microsoft Visual Studio</Name>
<Version>8.0</Version>
</HostApplication>
<Addin>
<FriendlyName>MyAddin</FriendlyName>
<Description>MyAddin</Description>
<Assembly>MyAddin.dll</Assembly>
<FullClassName>MyAddin.Connect</FullClassName>
<LoadBehavior>0</LoadBehavior>
<CommandPreload>0</CommandPreload>
<CommandLineSafe>0</CommandLineSafe>
</Addin>
</Extensibility>

Fuente 1

Por supuesto, se pueden seguir usando las formas


anteriores de registrar un complemento, pero la nueva forma de registro es mucho ms fcil. El archivo
con la extensin .addin es un archivo XML cuyo contenido es como el que se muestra en el fuente 1.
Como podemos ver, las etiquetas XML dentro de la
etiqueta <AddIn> son similares a las entradas que tenamos que aadir al registro de Windows para registrar
nuestra DLL como complemento de Visual Studio,
excepto la etiqueta <Assembly>, que permite especificar
el nombre de la DLL, y la etiqueta <FullClassName>, que
permite especificar la clase del complemento que implementa el interfaz IDTExtensibility2, necesario para cargar un complemento. Esta informacin antes se obtena
registrando el complemento como componente COM.
Las etiquetas dentro de la etiqueta <HostApplication>
son las que permiten saber cul es el host para el que est
pensado el complemento, que en nuestro caso ser
Microsoft Visual Studio, versin 2005 (8.0).
En realidad hay dos archivos con la extensin .addin:
uno reside en la propia carpeta del cdigo fuente, y est
ah para que siempre acompae al cdigo fuente cuando se mueva la carpeta del proyecto a otra ubicacin u
ordenador, o se introduzca el proyecto en un sistema de
control de cdigo fuente como SourceSafe; el otro reside en la carpeta C:\Documents and Settings\<user>\Mis
documentos\Visual Studio 2005\Addins y es el que se
emplea durante el desarrollo para que el Administrador
de Complementos de Visual Studio lo muestre.

Figura 1

Como hemos dicho, toda la nueva funcionalidad de


la extensibilidad de Visual Studio 2005 reside en el ensamblado EnvDTE80.dll. Si examinamos este ensamblado con

<<dotNetMana

Nuevas clases del modelo de objetos

65

<< dnm.plataforma.net
el Examinador de Objetos, veremos que
tiene muchas clases y mtodos que terminan en 2, para diferenciarlos de los
del ensamblado anterior EnvDTE.dll. La
clase ms importante es EnvDTE80.DTE2, y
es que ahora el parmetro application del
mtodo OnConnection del complemento,
del tipo Object, se puede convertir al tipo
EnvDTE80.DTE2 que tiene los mismos mtodos y propiedades del antiguo EnvDTE.DTE,
y otros nuevos que se han aadido en esta
versin. Algunos mtodos han cambiado
de firma (signature), en especial los relacionados con botones y barras de botones. Por ejemplo, la propiedad DTE2.
CommandBars ya no devuelve un objeto del
tipo Microsoft.Office.Core.CommandBars
como ocurra antes, ni siquiera del tipo
Microsoft.VisualStudio.CommandBars.Com
mandBars del nuevo ensamblado para las

barras de comandos como cabra esperar,


sino que devuelve el tipo Object. Segn
Microsoft, esto es necesario para algunas
optimizaciones internas de Visual Studio.
El caso es que deberemos hacer una conversin de tipos que antes no era necesaria.
La lista de nuevas clases y mtodos es
bastante larga, por lo que no la vamos a
detallar aqu. Baste mencionar que otra de
las novedades ms interesante son los nuevos eventos TextDocumentKeyPressEvents.
BeforeKeyPress y TextDocumentKeyPressEvents.
AfterKeyPress, tambin muy demandados,
ya antes slo era posible detectar cambios
en el cdigo fuente al cambiar de lnea,

Otra de las novedades ms interesante son los nuevos


eventos TextDocumentKeyPressEvents.BeforeKeyPress y
TextDocumentKeyPressEvents.AfterKeyPress
pero ahora podemos hacerlo a nivel de pulsacin de tecla. Y por fin parece que el
modelo de cdigo (FileCodeModel) es ms
consistente entre los distintos lenguajes de
programacin (Visual Basic, C#, Visual J#)
y los mtodos para aadir cdigo (funciones, parmetros, etc.) ya funcionan en
todos los lenguajes, tal vez porque los use
el nuevo diseador de clases de algunas
versiones de Visual Studio 2005.

Nuevos tipos de botones


Como se aprecia inmediatamente al
ver Visual Studio 2005 por primera vez,
sus botones son ahora ms bonitos,
como los de Microsoft Office 2003, ya que
usan bitmaps TrueColor y no los bitmaps
de 16 colores de las versiones anteriores.
Esto significa que si no queremos que
nuestro complemento desentone, tendr que usar unos bitmaps que sean igual
de vistosos, usando TrueColor. Aparte de
esta mejora esttica, en Visual Studio 2005
podemos crear nuevos tipos de botones,

mientras que antes estbamos limitados a


los botones de pulsar solamente. Por ejemplo, ahora podemos crear controles del
tipo ComboBox o TextBox en nuestras barras
de botones, o usar botones desplegables
como las listas Most Recently Used (MRU).
Para ello se emplea el nuevo mtodo
EnvDTE80.Commands2.AddNamedCommand2,
que proporciona nuevos parmetros para
especificar el tipo de control que se crear en las barras de botones a partir del
comando.
Por otro lado, la nueva clase
EnvDTE80.Window2 expone una nueva propiedad CommandBars que da acceso a las
barras de botones de las toolwindows de
Visual Studio 2005, algo que antes no era
posible. El fuente 3 muestra el cdigo
fuente de un complemento que aade un
botn a la barra de botones del Explorador
de Soluciones. Este botn podra realizar
alguna funcin til dentro de dicha ventana, por ejemplo, contraer los proyectos
de la solucin (esto se deja como ejercicio
al lector).

Private Const m_NOMBRE_COMANDO As String = "MiComando"


Private m_objDTE2 As DTE2
Private m_objAddIn As AddIn
Private m_objCommandBarControl As CommandBarControl
Public Sub OnConnection(ByVal application As Object, _
ByVal connectMode As ext_ConnectMode, ByVal addInInst As Object, _
ByRef custom As Array) Implements IDTExtensibility2.OnConnection
Dim
Dim
Dim
Dim

objWindow2 As Window2
colCommandBars As CommandBars
objCommandBar As CommandBar
objCommand As Command = Nothing

<<dotNetMana

m_objDTE2 = CType(application, DTE2)


m_objAddIn = CType(addInInst, AddIn)

66

Select Case connectMode


Case ext_ConnectMode.ext_cm_AfterStartup, ext_ConnectMode.ext_cm_Startup
Try
' Intenta recuperar el comando del add-in, por si ya est creado
objCommand = m_objDTE2.Commands.Item(m_objAddIn.ProgID & "." & m_NOMBRE_COMANDO)
Catch

Fuente 2 (Continua...)

<< dnm.plataforma.net

End Try
Try
' Si el comando del add-in no est creado, lo crea
If objCommand Is Nothing Then
objCommand = m_objDTE2.Commands.AddNamedCommand(m_objAddIn, _
m_NOMBRE_COMANDO, "Mi comando", "Mi comando", True, 59)
End If
' Obtiene la ventana del Explorador de soluciones
objWindow2 = CType(m_objDTE2.Windows.Item(EnvDTE.Constants.vsWindowKindSolutionExplorer), Window2)
' Obtiene su barra de comandos
colCommandBars = DirectCast(objWindow2.CommandBars, CommandBars)
objCommandBar = colCommandBars.Item("Explorer")
m_objCommandBarControl = CType(objCommand.AddControl(objCommandBar), CommandBarControl)
Catch ex As Exception
System.Windows.Forms.MessageBox.Show(ex.ToString)
End Try
End Select
End Sub
Public Sub OnDisconnection(ByVal disconnectMode As ext_DisconnectMode, _
ByRef custom As Array) Implements IDTExtensibility2.OnDisconnection
Try
If Not (m_objCommandBarControl Is Nothing) Then
m_objCommandBarControl.Delete()
End If
Catch ex As Exception
MessageBox.Show(ex.ToString)
End Try
End Sub
Public Sub QueryStatus(ByVal CmdName As String, _
ByVal NeededText As EnvDTE.vsCommandStatusTextWanted, _
ByRef StatusOption As EnvDTE.vsCommandStatus, _
ByRef CommandText As Object) Implements EnvDTE.IDTCommandTarget.QueryStatus
Try
If CmdName = m_objAddIn.ProgID & "." & m_NOMBRE_COMANDO Then
StatusOption = vsCommandStatus.vsCommandStatusSupported Or vsCommandStatus.vsCommandStatusEnabled
End If
Catch ex As Exception
MessageBox.Show(ex.ToString)
End Try
End Sub
Public Sub Exec(ByVal CmdName As String, _
ByVal ExecuteOption As EnvDTE.vsCommandExecOption, _
ByRef VariantIn As Object, ByRef VariantOut As Object, _
ByRef handled As Boolean) Implements EnvDTE.IDTCommandTarget.Exec

Catch ex As Exception
MessageBox.Show(ex.ToString)
End Try
End Sub

(...continuacin ) Fuente 2

<<dotNetMana

Try
If CmdName = m_objAddIn.ProgID & "." & m_NOMBRE_COMANDO Then
MessageBox.Show(CmdName & " ejecutado.")
End If

67

<< dnm.plataforma.net
Tambin se ha eliminado la necesidad de tener que usar Visual C++ para
crear la DLL satlite que proporciona
los bitmaps para los comandos de nuestro complemento. Aunque sigue siendo
necesaria una DLL satlite (parece que
no, Microsoft no ha escuchado an la
sugerencia de eliminarla o hacerla
opcional), ahora se puede usar una DLL
manejada (no nativa Win32) creada
usando Visual Basic .NET o C# a la que
aadiremos nuestros recursos de tipo
bitmap.

<<dotNetMana

No ms shim control para toolwindows

68

Aunque habamos hablado en algn


artculo anterior de las toolwindows, esas
ventanas que se adhieren a los bordes de
Visual Studio (como la Lista de Tareas o
el Explorador de Soluciones), no habamos explicado cmo crear nuestras propias toolwindows para nuestro complemento, y por una buena razn: era tremendamente complicado. La forma de
crear toolwindows era usando la funcin
DTE.Windows.CreateToolwindow, que recibe como parmetros la instancia del complemento, el ProgID del control ActiveX
que se alojar en la ventana (el contenido de estas ventanas se proporciona
mediante un control de usuario), un GUID
que identificar la toolwindow, y el caption de la ventana. Haciendo un poco de
historia, en Visual Basic 5.0 o 6.0, donde todo era ActiveX, no haba problema:
nuestro complemento poda tener un
control de usuario que era registrado
como componente ActiveX, y se pasaba
su ProgID a esa funcin. Pero en Visual
Studio .NET 2002 y 2003 surgi el problema: mientras que nuestros complementos eran DLL .NET con controles
de usuario que no eran ActiveX, la funcin CreateToolWindow exiga que se pasara un control ActiveX. La solucin de
Microsoft, un tanto peculiar, fue proporcionar a travs de uno de los ejemplos de su sitio Web (ni siquiera era proporcionado por Visual Studio .NET) un
control ActiveX llamado shim control que
era el que se le pasaba a dicha funcin.
Dicho control, escrito en C++ con tecnologa ATL ininteligible para el desarrollador tpico de Visual Basic, tena una

Otra buena noticia: ahora


crear toolwindows es muy
fcil, ya no hace falta el shim
control ni ActiveX
funcin que haba que llamar para alojar
nuestro control de usuario .NET. Este
shim control ha sido causa de innumerables quebraderos de cabeza para los desarrolladores de complementos, ya que
Microsoft liber 3 versiones del mismo,
algunas no oficiales, que corregan problemas con los aceleradores de teclado
(la tecla [&] en una etiqueta para acceder a un control) y requera que cada
desarrollador cambiase los diversos
ProgID y CLSID que empleaba este control ActiveX para que no entrase en conflicto con los controles shim de otros
complementos. Despus de esta complicada explicacin, otra buena noticia: ahora crear toolwindows es muy fcil: ya no

hace falta el shim control ni ActiveX. Para


ello, se emplea la nueva funcin
EnvDTE80.Windows2.CreateToolwindow2.
Esta funcin, como la antigua, recibe
como parmetros la instancia del complemento, un GUID identificador, el caption de la ventana, y como nuevos parmetros, el ensamblado y la clase del control de usuario .NET que queremos alojar en la ventana. El fuente 4 muestra
cmo crear una toolwindow en nuestro
complemento que aloja un control de
usuario llamado UserControl1.
Con esto finalizamos este artculo
sobre las novedades en la extensibilidad
de Visual Studio 2005. Como siempre,
el Examinador de Objetos nos ayudar a
explorar todas sus posibilidades, aunque
conviene indicar que la documentacin
de Microsoft en MSDN sobre este tema
[1] ha mejorado mucho y ahora es ms
detallada que antes, por lo que conviene
empezar por ah.

Bibliografa

[1]

Automation and Extensibility for Visual


Studio, http://msdn2.microsoft.com/

library/xc52cke4(en-us,vs.80).aspx

Public Sub OnConnection(ByVal application As Object, _


ByVal connectMode As ext_ConnectMode, ByVal addInInst As Object, _
ByRef custom As Array) _
Implements IDTExtensibility2.OnConnection
Dim
Dim
Dim
Dim

colWindows2 As Windows2
objWindow As Window
objUserControl As Object
objAssembly As System.Reflection.Assembly

_applicationObject = CType(application, DTE2)


_addInInstance = CType(addInInst, AddIn)
Select Case connectMode
Case ext_ConnectMode.ext_cm_AfterStartup, ext_ConnectMode.ext_cm_Startup
Try
colWindows2 = DirectCast(_applicationObject.Windows, Windows2)
objAssembly = System.Reflection.Assembly.GetExecutingAssembly()
objWindow = colWindows2.CreateToolWindow2(_addInInstance, _
objAssembly.Location, _
"MiAddin.UserControl1", "Mi ventana", _
"{5FD1A8D8-26B1-4ed2-97D9-9CB8160CD8D3}", objUserControl)
objWindow.Visible = True
Catch ex As Exception
System.Windows.Forms.MessageBox.Show(ex.ToString)
End Try
End Select
End Sub

Fuente 4

Este artculo se ha escrito usando la versin Visual Studio 2005 Community Technology Preview (CTP) de Junio de 2005, que es posterior a la Beta 2. Es posible que algunas
cosas explicadas en el artculo, as como la documentacin, varen en la versin final.

dnm.laboratorio.net

Jos Miguel Torres

.NET Compact Framework 2.0


Con la aparicin de Visual Studio .NET, y con l .NET Compact Framework
surgi un nuevo conjunto de herramientas, bajo cdigo administrado, para el
desarrollo de dispositivos mviles. Si bien es cierto que con la aparicin de
.NET Compact Framework 1.1 SP3 se consigui un marco ms trabajado, ahora con .NET Compact Framework 2.0, adems se amplia.

<< Novedades .NET Compact Framework 2.0

Jos Miguel Torres


colabora habitualmente con
dotNetMana. Es tcnico
superior en desarrollo de
aplicaciones informticas y
trabaja como arquitecto de
software en el departamento de
tecnologas de la
informacin de MRW

.NET Compact Framework (.NET CF a partir


de ahora) forma parte de .NET Framework con lo
que muchas de las mejoras ofrecidas en .NET
Framework tambin estn disponibles para .NET CF.
Obviamente, la limitaciones de este modelo de desarrollo hace que ciertas clases o mtodos, propiedades
o eventos de las mismas no estn disponibles. Pese a
ello, tanto la cantidad de nuevas caractersticas, como
la mejora del rendimiento, son notables.
.NET CF ocupa 1,55 Mb (ROM) en Pocket PC
2002 y anteriores y 1,35 Mb (ROM) en Pocket PC
2003 y superiores. Los requisitos de memoria en el
terminal son de 0,5 Mb RAM, con un tamao de aplicacin que oscila entre los 5Kb y los 100 Kb, en la
mayora de los casos. Es compatible con dispositivos
Pocket PC y Smartphone con Windows Mobile 2003
Second Edition, Windows CE .NET 4.x y 5.0, quedando para prximas versiones la edicin Phone
Edition. La velocidad del motor de ejecucin del CLR
es mayor, as como de las libreras ms utilizadas como
XML o ADO.NET.
En la versin anterior y quien haya desarrollado
sobre la misma lo sabe muchas de las ventajas de
.NET Framework no estaban disponibles y eran muy
frecuentes las llamadas mediante Platform Invoke
(P/Invoke) directamente a las API del sistema operativo. La interoperabilidad COM o COM Interop, que
tan grandes ventajas hemos obtenido desde .NET
Framework, ya sea dentro de un marco de migracin
o de un contexto de interoperabilidad, desde .NET
CF 1.x no estaba disponible. Esto haca que dichos
componentes COM que por un lado o bien tenamos

desarrollados de versiones anteriores o bien utilizbamos de componentes de otro tipo (por ejemplo, el
acceso a Pocket Outlook Object Model), nos veamos obligados a crear una librera de llamada puente o wrapper como se conoce en ingls, que interactuara con
los componentes COM para la llamada desde cdigo
administrado. Pues bien, COM Interop es una de las
novedades de .NET CF 2.0, aunque no estar tan
extendida como en .NET Framework y entre otras
mejoras se han extendido los Type Marshaling, con
nuevos tipos y tipos embebidos.
De la misma forma, el simple acceso al registro
del sistema o a los puertos COM derivaban en una
llamada P/Invoke a la API, ahora, .NET CF 2.0 provee la clase RegistryKey para el acceso al registro, y
puede utilizar las clases de .NET Framework para el
acceso a los puertos serie.
La seriacin es tambin una de las gratas novedades, as como el pleno soporte a las nuevas caractersticas de Microsoft SQL Server 2005 Mobile Edition e
incluso a la seguridad, transaccionalidad y eficacia de
los servicios de mensajera MSQS (Message Queuing).
A nivel de seguridad, tambin remarcar el soporte a la
criptografa y a los certificados X509, la relacin entre
ensamblados a travs del atributo Friend Assembly y
soporte a la autenticacin NTLM e IPv6, la prxima
generacin de protocolos para Internet.
Para las aplicaciones desarrolladas con .NET CF
1.x, podremos ejecutarlas en dispositivos con .NET
CF 2.0 configurndolo de manera explcita, sin necesidad de modificar cdigo. Para migrar las aplicaciones de .NET CF 1.x a .NET CF 2.0, Visual Studio
2005 ofrece una Upgrader, que permite migrar automticamente mediante un asistente.

<< dnm.laboratorio.net
Visual Studio 2005

Figura 1. Plataformas y tipos de aplicacin disponibles.

Al crear un nuevo proyecto, lo que ms llama la


atencin es que los formularios sobre los que se disea son, en cuanto a apariencia y funcionalidad, como
los que se ejecutan en tiempo de ejecucin, as, en un
proyecto Smartphone, podemos saber exactamente la
apariencia y posicin, de un ComboBox (figura 2), en
tiempo de diseo. Esto es lo que con el trmino ingls
conocemos como what you see is what you get. Adems
esta funcionalidad tiene un motivo extra, y es que con
la aparicin de Windows Mobile 5.0, la resolucin de

Figura 2. Las posibilidades en tiempo de diseo de Visual


Studio 2005 son extraordinarias.

las PDAs pueden variar, as, podemos encontrarnos


con terminales con resoluciones de 240x320 hasta
480x640 pasando por 480x480.
De esta manera, la importancia del alineamiento de
los controles para la flexibilidad de aplicaciones que puedan ser utilizadas bajo distintas resoluciones se soluciona con el soporte conocido en .NET Framework como
anchoring y docking. El funcionamiento de estas dos propiedades es exactamente igual que en .NET Framework.
Una de las curiosidades que ms me ha llamado la
atencin, es que en arrastrar un control originario de la
plataforma PocketPC a una proyecto bajo plataforma
Smartphone, Visual Studio 2005, automticamente, ofrece controles apropiados para Smartphone que lo sustituyan (si en Smartphone no existe o no est soportado dicho
control) ajustndolo al tamao de la pantalla.
Existe un nuevo tipo de aplicacin, el Control Library.
Este tipo permite crear un control personalizado, agregarlo a la barra de herramientas y hacer uso de l dentro cualquier proyecto compatible. En versiones
anteriores, la creacin de un control personalizado era posible aunque no era visual.
Otras novedades a remarcar son las que podemos encontrar en proyectos de Windows Forms o
Web. Tanto las herramientas de testeo, conexin
a Team Foundation Server as como al Snippets Code
Manager. Podemos echar mano de los diagramas
de sistemas distribuidos y mantener la documentacin del proyecto al da con los diagramas
UML iniciales.

Novedades en Windows Forms


Entre las novedades, destacar que se ha mejorado significativamente el soporte grfico de los
formularios en cuanto a la seriacin de bitmaps
(como objeto), es decir la posibilidad de grabarlos
en ficheros, soporte para iconos de alta resolucin
o soporte de degradado de color para fondo del
formulario. Se ha aadido la capacidad de que

Figura 3. .NET CF,


ofrece la posibilidad de
creacin de controles de
usuarios.disponibles.

<<dotNetMana

Visual Studio 2005 es tambin la evolucin de


eMbedded Visual C++ 4.0 (eVC++). De esta forma, dentro del entorno de desarrollo de Visual Studio 2005
podremos trabajar tanto con nuestros antiguos proyectos de Visual Studio .NET 2003 como los desarrollados en eVC++ 4.0; adems podremos tenerlos
en una misma solucin.
La principal caracterstica es que el desarrollo de dispositivos mviles es independiente de .NET Framework,
esto es, .NET CF 2.0 tiene su propio SDK y cualquier
proyecto Mobile, puede ser compilado desde la lnea de
comandos de Visual Studio 2005. Incluye tambin, nuevas caractersticas orientadas sobre todo a la productividad. En resumen, aporta lo mejor de Visual Studio .NET
2003 y eVC++ 4.0, todo en un mismo producto.
Con Visual Studio 2005 podemos desarrollar para
tres tipos de plataformas: SmartPhone, Pocket PC,
Windows CE, inicialmente puesto que con la instalacin
del SDK de PocketPC 5.0 y Smartphone 5.0 se aaden
Pocket PC Magneto y Smartphone Magneto respectivamente. En cada una de las plataformas podemos seleccionar el tipo de aplicacin que deseemos, ya sea de
Windows Forms, de librera de clases, aplicacin de consola (o aplicacin no grfica). S, han ledo bien, en esta
versin existe soporte integrado para Smartphone, sin
necesidad de instalar ningn tipo de SDK. Adems, podemos cambiar el tipo de aplicacin ya creada de Consola,
por ejemplo, a Windows Forms, al menos, con mayor
facilidad que antes.

71

<< dnm.laboratorio.net
Clase

Descripcin

hasta cuatro.
Los nuevos emulaMuestra y gestiona documentos o archivos.
DocumentList
dores podrn comparClase especfica de Pocket PC, para la utilizacin de botones de hardtir carpetas. Hasta ahoHardwareButton
ware de dichos dispositivos.
ra el intercambio de
Permite el acceso a todos los tipos de acceso disponibles del dispoficheros se realizaba
InputMethodCollection sitivos (InputPanel, Keyboard)
desde el ordenador
Clase especfica de SmartPhone,para tipo de acceso AlphaABC,T9,etc.
InputMode
escritorio compartienProporciona efectos de texto.
LogFont
do una carpeta y desde
Permite manejar el evento Hibernar.
Mobile Device
el emulador obtenaA partir de Windows Mobile 2003 SE, esta clase permitir la orienmos los ficheros; en
ScreenOrientation
tacin de la pantalla en grados (90-180-270).
esta versin, la comTabla 1. Nuevas clases en Microsoft.WindowsCE.Forms particin de carpetas y
ficheros es bidireccio.NET CF pueda destruir el formulario
nal. Como coment anteriormente, con
principal cuando ste se cierre. Soporte
la introduccin de Windows Mobile 5.0,
para DirectX y Direct3D (aunque slo
la resolucin de los dispositivos podr
estar disponible para versiones posteriocambiar y, por tanto, los emuladores
res de Windows Mobile). Se han aadiharn lo mismo; podremos configurar
do caractersticas especficas para las platanto la resolucin como la orientacin
taformas Pocket PC y Smartphone, en
de la pantalla.
cuanto a controles se refiere (ver tabla 1
Visual Studio 2005 y Windows
y figura 3).
Mobile 5.0 SDK suministrarn 15 emuladores distintos, por lo
que adems se incorporar una nueva herramienta de administracin
de emuladores conocida
como Device Emulator
Manager (DEM). Adems DEM es una pieza
fundamental para la
comunicacin entre
ActiveSync y los emuladores ya que en ella recaeFigura 4. La creacin de nuevos controles se ha orientado a las
r la responsabilidad de
necesidades reales y especficas de cada plataforma.
conexin y desconexin
entre ambos.
Debido al la multi-resolucin que ofrecer Windows Mobile 5.0, y adems de las
Visual Studio 2005 + Windows
propiedades anchoring y docking, comentaMobile 2005 + SQL Mobile
das anteriormente, los formularios sern
2005 = Un nuevo escenario
Auto-Scrollables. Adems tendremos acceso al portapapeles del sistema y a eventos
del teclado de los dispositivos.
.NET Compact Framework sigue
creciendo y amplindose. Cada vez son
ms los controles y clases que resuelven
Emuladores
o facilitan las tareas de su versin anteVisual Studio2005, ofrece una mayor
rior, y eso es de agradecer. Pero el autncantidad de emuladores con unas caractico potencial de .NET CF 2.0 est ligatersticas mejoradas y nuevas. Los emulado tanto a SQL Mobile 2005 como a
dores ofrecern soporte para ActiveSync,
Windows Mobile 2005. .NET CF 2.0,
con lo que ser posible conectarlos al escribajo sistemas operativos Windows
torio y sincronizndolos como si de un
Mobile 2005, adems de todo lo mendispositivo fsico se tratara, la cual cosa
cionado (incluyendo el soporte para
facilitar las aplicaciones RAPI. Asimismo
DirectX y Direct3D), contendr librela cantidad de puertos COM aumentar
ras para el acceso a Pocket Outlook

<<dotNetMana

Notification

72

Muestra y responde a notificaciones de usuario.

Figura 5. Device Emulator Manager


facilitar la configuracin de los
emuladores.

Object Model bajo cdigo administrado, pudiendo acceder a contactos,


correo electrnicos, mensajes SMS, sin
necesidad de COM Interop. Contendr
libreras tambin administradas para
telefona, pudiendo tener el control de
llamadas y tiempos, por ejemplo. Un
administrador de dispositivo (Device
Management) que promete hacer aparcar el cdigo nativo para el acceso a configuraciones del sistema sin tener que
echar mano de las API, mediante el
objeto de configuracin del sistema
(Configuration System Object).

Figura 6. Nuevos Componentes


administrados con Windows Mobile 5.0.

Como ven se nos presenta un gran


abanico de posibilidades, en cuanto al
nuevo motor de acceso a datos, como
de nuevas caractersticas del nuevo sistema operativo, que hace que .NET CF
2.0 no sea ms que un importante marco de desarrollo haca una nueva era
orientada a la programacin administrada en el desarrollo de dispositivos
mviles en plataforma Microsoft.
Ms informacin: http://www.desarrollomobile.net/dotNetMania/dotNETC
F2005

dnm.ado.net

Pepe Hevia

ADO.NET 2.0
Ms y mejor acceso a datos
Ya est a la nueva versin de .NET Framework.Y no es una simple mejora de
la anterior, sino que evoluciona de nuevo aadiendo ms y mejores herramientas
a la par que optimiza las ya existentes.Y es que se ve que ocurre una interaccin perfecta entre comunidad de desarrolladores y Microsoft que nunca antes
se haba visto.

<< Muchas mejoras propuestas, implementadas; muchas

correcciones propuestas y realizadas; y muchas novedades deseadas, e implementadas para dar soporte al futuro de los productos de Microsoft desarrollados sobre esta
plataforma. El resultado, un Framework ms estable si
cabe, robusto que ya lo era mucho y potente ms
clases que nunca que el anterior.
Sincronizando la salida del Framework 2.0 con uno
de los servidores .NET ms esperado Yukon o SQL
Server 2005 vienen de serie con las BCL del sistema:
las nuevas clases de acceso a datos, ya conocidas como
ADO.NET 2.0. Ampliando lo que comentaba en el
prrafo anterior, ADO.NET 2.0 incluye numerosas
mejoras de las clases que ya conocemos del Framework
1.1; pero que tambin nos regala numerosas novedades
que harn las delicias de los ms fanticos. Eso unido a
cambios estructurales que no nos haban cuajado de la
versin anterior, cierran un crculo que perfecciona an
ms esta tecnologa de acceso a datos de Microsoft.
Se amplan an ms las mximas de Sencillez, productividad e integracin. Con esto se quiere decir que
las mejoras no se reducen a clases nuevas, sino a ampliaciones de las existentes. Y se reduce an ms el cdigo

Pepe Hevia
colabora habitualmente con
dotNetMana. Es arquitecto de
software senior en AlhambraEidos.Tiene las certificaciones de
MCAD, MCSD.NET y MCT en
.NET Framework. Ha escrito
varios libros sobre la plataforma
.NET (lalibreriadigital.com)

NOTA
ADO.NET 2.0 lejos de mantener el status quo,ha mejorado sus herramientas a la
par que ofrece multitud de novedades que
simplificarn el desarrollo de los sistemas
de n-capas.Y, como no, proporciona unas
clases que aprovechan al mximo la potencia del nuevo SQL Server 2005

del desarrollador, empaquetando an ms funcionalidad


en los mtodos y propiedades ya conocidos. Pero siempre desde la perspectiva de no cambiar lo que ya funciona. Es por esto que las migraciones a ADO.NET 2.0
muchas veces pasarn por el mero hecho de recompilar
con los nuevos compiladores y las nuevas versiones. Pero
a los que quieran aprovechar el nuevo Framework, eso
s, avisarles de que hay muchas e interesantes herramientas. Vemoslas poco a poco

Proveedores .NET y conexiones a datos


Esto ya os suena a todos. Pero recordemos que en el
Framework 1.1 existan unos pequeos flecos. Flecos
que seguro a ms de uno no os han afectado, pero a los
que nos dedicamos a las arquitecturas de software nos
han supuesto en algunos casos y aunque existan otras
alternativas autnticos dolores de cabeza. Cosas como
informacin de metadatos del sistema, afinidad de las
transacciones, carga dinmica de proveedores, abstraccin de conexiones y pocas cosas ms, que se han
resuelto con xito en esta nueva versin.

Proveedores .NET: Interfaces, abstraccin y factoras de clases


En primer lugar a los proveedores .NET.
Recordad que son el conjunto de drivers que nos
comunican con los sistemas gestores de datos de un
determinado fabricante. De esta forma, SQL Server
cuenta con un proveedor nativo .NET encapsulado en el espacio de nombres System.Data.SqlClient;
los conectores de compatibilidad con OleDb estn
en System.Data.OleDb; en uno de los nmero anteriores de dotNetMana se hablaba de los recien-

<< dnm.ado.net

En esta nueva versin,las factoras de clases permitirn el desarrollo de aplicaciones


independientes del proveedor .NET

tes proveedores de MySQL y as sucesivamente.


Estos proveedores son nativos a .NET y facilitan
su portabilidad. El problema, que para manejarlos
es necesario conocer a priori con qu base de datos
queremos trabajar. Nuestro cdigo depender de
con qu espacio de nombres trabajemos. Esto bien
argumentado no debera ser ningn problema. Pero
qu ocurre si queremos que nuestro cdigo de negocio sea hasta cierto punto independiente del sistema gestor. Alternativas: XML, encapsular objetos en familias de clases ms abstractas, usar interfaces o crear clases proxy pero es un folln de
anlisis y de cdigo que ya no nos hace tan productivos en determinadas situaciones. La solucin
a esto: los interfaces de ADO.NET y las factoras de
clases.
Los interfaces de ADO.NET son aquellas especificaciones que los ingenieros de Microsoft establecen en
el espacio de nombres System.Data y muchas de las
novedades en System.Data.Common para que los fabricantes de sistemas gestores puedan implementar sus
proveedores. De esta forma, cualquiera que sepa cmo
funcionan estos interfaces podr manejar cualquier
proveedor .NET. Asimismo, todo un conjunto de clases implementadas de serie en la BCL podran usar
cdigo de terceros gracias a estos interfaces. De hecho,
estos interfaces son IDbConnection, IDbTransaction,
IDbCommand, IDbParameter, e IDbDataReader as como la
clase adaptadora IDbDataAdapter. Os suenan no? El
problema es que, en muchos casos, estos interfaces son
extendidos por fabricantes que ofrecen ms funcionalidad que la establecida. El problema es que el fabricante entonces puede crear nuevos mtodos o propiedades que difieren de este modelo, y esto es lo que nos
obliga despus a escribir cdigo ms especfico. La
solucin: en el espacio de nombres System.Data.Common
se han ampliado los interfaces para hacerlos ms ricos
y abarcar ms casos del estndar ANSI SQL. Esto claro, sin perder la compatibilidad hacia atrs, ya que los
nuevos requisitos quedan recogidos en las clases abstractas DbConnection, DbCommand etc. Posibilitando
que la sobrecarga de interfaces ofrezcan ms funcionalidad que antes. Y as, esta pequea laguna se resuelve. Pero, y qu pasa con la independencia del
SGBDR?...
Para solucionar esta otra laguna, existen las factoras de clases. El problema que siempre nos hemos

Public IDbConnection DameConexion(string fabricante,mCadConexion)


{
IDbConnection conexion;
if (fabricante.equals("SqlServer"))
conexion=new SqlConnection(mCadConexion);
else if(fabricante.equals("Oracle"))
conexion=new OracleConnection(mCadConexion);
return conexion;
}
Public IdbConnection DameComando(string fabricante,IdbConnexion conex,
string comandoSQL)
{
IDbCommand comando;
if (fabricante.equals("SqlServer"))
comando=new SqlCommand(comandoSQL,conex);
else if(fabricante.equals("Oracle"))
comando=new OracleCommand(comandoSQL,conex);
return comando;
}

//ejemplo de uso de este tipo de codigo...


DbConnection conex=DameConexion("SqlServer");
DbCommand comando=DameComando("SqlServer",conex,
"select * from tabla");
DbDataReader datos=Commando.ExecuteQuery();
...

Fuente 1. Lo que hemos tenido que hacer con ADO.NET 1.1


a grandes rasgos, claro

Toda la funcionalidad de la carga de los proveedores y la complejidad de su inicializacin queda


encapsulada en un mtodo pblico y esttico, de
forma que la podamos usar sin instanciar ninguna
clase. De esta forma, empleando un interfaz de tipo
DbConnection y una llamada al mtodo cargador
nos dara todo el problema resuelto. Esta forma de
trabajar es a lo que se denomina factoras de clases.
Son clases especiales que tienen constructores pblicos y estticos cuya misin es la encapsular la creacin de otras clases. Esto quiere decir que empleando la clase DbProviderFactory y el cargador

<<dotNetMana

NOTA

encontrado en el uso de proveedores .NET es el de


la carga dinmica de proveedores. Por qu? Porque
las clases ADO se almacenan en el GAC y esto impide que podamos trabajar de forma directa con el cargador de clases de .NET. En segundo lugar, las propias cadenas de conexin estn ligadas a sus proveedores, de forma que cada uno escribe estas cadenas
como quiere. Entonces, cmo podemos construir un
objeto proveedor dinmicamente? Pues haciendo que
una clase sea la responsable de ello.

75

<< dnm.ado.net
DbProvidersFactory podremos des-

CreateConnection

preocuparnos de todo esto y reducir


al mximo las lneas de cdigo. La cosa
est en que los nuevos proveedores
ADO.NET debern registrarse en una
pequea base de datos de drivers en
ejecucin y dejar que las factoras hagan
el trabajo por nosotros. El enlace: la
cadena de conexin. Ese sencillo string
que usbamos en VB6 y que gracias al
comando provider= nos daba todo
hecho. En en este caso, el cdigo que
hemos visto antes (fuente 1) quedara
resumido en dos partes: una que afecta al fichero XML de configuracin del
ensamblado principal y una segunda
con el cdigo operativo...

CreateCommand
CreateCommandBuilder

CreateConnectionStringBuilder

CreateDataSourceEnumerator
CreateParameter
CreatePermission

Tabla 1. Nuevos mtodos de los interfaces


para abstraernos de la creacin de
objetos de datos.

// Recogemos la cadena de connexion de un fichero de configuracin


string provstring =
ConfigurationSettings.AppSettings.Get("DbProvider");
string cadConexion=
ConfigurationSettings.AppSettings.Get("ConnectionString");
//La factora de clases nos devuelve el proveedor
DbProviderFactory prov =
DbProviderFactories.GetFactory(provstring);
//Y ya tenemos nuestra connexion disponible.
IDbConnection conexion= fact.CreateConnection();
conexin.ConnectionString=cadConexion;
...

Fuente 2. Las factoras de clases permiten la carga dinmica de proveedores .NET a partir de la
cadena de conexin.

<<dotNetMana

Enumeracin de servidores

CreateDataAdapter

<appSettings>
<add key="DbProvider" value="System.Data.SqlClient"/>
<add key="ConnectionString"
value="Server=localhost;Database=Northwind;
Integrated Security=true;"/>
</appSettings>
</configuration>

76

Fuente 3. Metadatos en una lnea de cdigo

CreateConnection

<?xml version="1.0" encoding="utf-8" ?>


<configuration
xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">

Puesto que el resto de los interfaces


han visto ampliada su funcionalidad, ya
no tendremos que preocuparnos de crear las clases XxxCommand y sucesivas ya
que las mismas clases factora ya nos proporcionarn sus propios mecanismos de
creacin de objetos de datos.
As de simple y as de abstracto.
Siento el trabajo que muchos de nosotros hemos realizado para esto antao,
pero as son las cosas. Mejor!

DataTable t = conexion.GetSchema("Tables");
t.WriteXml("tables.xml");

Ah!, y esperad, que an no acaba


lo bueno relativo a conexiones.
Gracias a las implementaciones de los
ltimos estndares ANSI SQL, las clases de conexin nos ofrecern, en perfecto formato XML, los metadatos
obtenidos de las consultas a las vistas
de esquema de los servidores de datos,
conocidas como INFORMATION_SCHEMA.
Imaginad la comodidad y potencia que
esto nos ofrece.

Esta es una nueva utilidad que nos


permitir poder explotar la deteccin de
servidores a lo largo y ancho de una red.
Debido a su utilidad puede que no todos
los proveedores la soporten (por ejemplo, Oracle que solo cuenta con una base
de datos). En el caso de clientes SQL
Server, esta utilidad nos dotar de la
posibilidad de poder recoger en un objeto DataTable todos los servidores SQL
Server registrados en una red. Sus utilidades, estn claras.
Esta utilidad se encuentra en la clase DbEnumerator. Y ser bueno que le
preguntis a la factora si el proveedor que cargis la soporta o no
Funcionalidades que existen y avisados quedis.

Constructor de cadenas de conexin


De siempre ha existido una utilidad
en OLEDB que permita a los entornos
de desarrollo abrir un cuadro de dilogo
que permita al usuario seleccionar los servidores y sus atributos para abrir una conexin os recomiendo un artculo que escrib del tema y que tenis en mi Web
http://www.heviatec.net en la seccin de
artculos. Este dilogo se puede abrir
empleando interop utilizando las clases de
servicio de OLEDB. Pero para .NET no
contamos con nada parecido, exceptuando una nueva utilidad de ADO:
DbConnectionStringBuilder. Mediante esta
interfaz podremos crear cadenas de conexin personalizadas por el usuario empleando propiedades y mtodos, sin tener
que preocuparnos por la sintaxis especfica de cada proveedor. Esto quiere decir
que cada .NET Provider, heredando de
esta clase, podr proporcionar mecanismos encapsulados de generacin de cadenas de conexin, reduciendo as los errores derivados de la mala gestin de este
pequeo detalle. No llega a ofrecer un
cuadro de dilogo, pero s un potente
mecanismo de creacin de cadenas de
conexin al igual que CommandBuilder

<< dnm.ado.net
genera sentencias SQL DML a partir de una instruccin
SELECT. Otra utilidad es la de parsear una cadena de conexin, y permitir al desarrollador tratar cada elemento de
forma individual. Lo dicho, una utilidad que a ms de
uno le vendr bien.

NOTA
Las utilidades de los proveedores .NET
se han ampliado para acoger las mejoras de
los estndares ANSI SQL como, por ejemplo, la recuperacin de Metadatos.

Mejoras en el pool de objetos


En la versin anterior de ADO.NET, no todos
los proveedores soportan el pool de conexiones.
Unicamente los proveedores de SQL Server y
Oracle admitan esta funcionalidad entre otros
pocos servidores ms particulares. Pero OLEDB
y ODBC no eran capaces de soportar estas caractersticas tan beneficiosas para la optimizacin de
las conexiones. En esta versin se mantiene la misma lnea aumentando la granularidad de la generacin de las conexiones; la posibilidad de especificar
un tiempo de espera personalizado de espera al iniciar la conexin y una valiosa funcionalidad que nos
permitir cerrar todas las conexiones abiertas de un
pool con un solo mtodo del objeto DbConnection:
ClearPool por el cual cerramos las conexiones abiertas de un determinado pool o bien ClearPools, la cual
nos permite cerrar todas las conexiones del pool de
un determinado DomainApp. Sin duda, una solucin
a problemas especficos que seguro ms de uno se
ha encontrado (ya que el cierre no siempre es automtico, depende de otros factores).

ra de trabajar, de forma que podamos trazar y depurar cualquier mnimo problema que se presente con
la informacin adecuada para poder actuar en consecuencia. Todo un esfuerzo por parte de los desarrolladores de esta tecnologa.

Relativo a comandos y a recuperaciones


de datos
No slo los procedimientos de conexin han
tenido cambios. Algunas mejoras en el lanzamiento de comandos han sido introducidas en el interfaz IDbCommand, responsable de que un cliente ejecute instrucciones SQL en el servidor. Estas mejoras se pueden ver examinando el nuevo conjunto de
mtodos que despliega esta clase, que agregan mtodos que afectan a cmo se procesan los comandos
en entornos multi-hilo, gracias a las ejecuciones
asncronas.
Respecto a la ejecucin asncrona seguro que en
ms de una situacin nos hemos visto lanzando
comandos SQL que conllevan un alto tiempo de
ejecucin de servidor o bien un tiempo de espera
superior a la media debido a la carga de la red. Para
evitar que un cliente se quedara cuajado en estas
delicadas situaciones, nos hemos visto en la necesidad de meter estos tipos de operaciones en hilos
de ejecucin, de cuyo control hemos sido responsables nosotros cayendo de nuevo en la falta de
productividad y menor tolerancia a fallos. Ahora,
los mtodos Execute principales cuentan con sus
hermanos BeginExecuteXxx de forma que mediante
delegados, ADO.NET nos avisar de cuando ha terminado una determinada ejecucin sea del tipo que
sea y siendo la causa que sea. Lo cual, s permitir
entornos de alto rendimiento con el mnimo esfuerzo. Eso s, no podemos abusar de estas cosas, puesto que el esfuerzo a nivel de sistema no es gratis en
entornos no preparados para este tipo de situaciones (vase Windows Me, 98etc, si es que an quedan en algn rescoldo de la humanidad).
Pero no podemos dejar de lado las mejoras de
DbDataReader. Aunque luego se comentar, es bueno

Otra gran mejora de las clases ADO.NET es su


capacidad de ser trazadas, esto es, de poder documentar
en todo momento el estado en el que estn y su informacin asociada. Esto nos ser extremadamente til
a la hora de poder investigar problemas relativos a
problemas en las conexiones, problemas en la ejecucin de consultas dando mucha ms informacin
que la que slo podamos recuperar con los mensajes
OLEDB, que quedaban bastante limitados.
Tanto las clases de los proveedores como las utilidades de ADO.NET comunes comparten esta mane-

Otra gran mejora de las clases ADO.NET es su


capacidad de ser trazadas, esto es, de poder
documentar en todo momento el estado en el
que estn y su informacin asociada.

<<dotNetMana

Trazabilidad

77

<< dnm.ado.net

MARS ser el mecanismo por el cual los desarrolladores podrn reducir el


nmero de conexiones abiertas ante el hecho de lanzar mltiples comandos
y recuperar mltiples conjuntos de datos
anticipar que existen nuevos mtodos de acceso a los
datos recuperados del servidor. De hecho, todas las
mejoras estn recogidas en los nuevos tipos de datos,
entre ellos el nuevo tipo XML. S, s poder recuperar
un XML empotrado en una columna empleando una
sencilla funcin GetXxxx(). Y como esto, otros tantos
de tipos ms todo un lujo.

Las mejoras del cliente de SQL Server


2005
Hasta aqu lo que son mejoras que afectan a
todos los .NET providers. Pero hablando de uno en
particular, qu menos que comentar la estrella del
momento: el .NET Provider de SQL Server 2005.
Este nuevo sistema gestor traer consigo lneas y
lneas de artculos por su nuevo look y comportamiento. Es lgico pensar que muchos de los cambios de ADO.NET tienen que pasar por adaptarse
a las mejores de este sistema gestor. Centrndonos
en System.Data.SqlClient, se nos ofrece nuevo:

<<dotNetMana

MARS

78

No es que nos vayamos hasta Marte a descubrir


nuevas cosas, no. Es el nuevo mecanismo de recuperacin de mltiples conjuntos de resultados
empleando una sola conexin. En las versiones anteriores el problema que exista aunque ms bien
oculto al desarrollador era el de lanzar comandos
simultneos sobre la misma conexin activa. Puesto
que la limitacin impuesta es la de tener un cursor
por conexin ya sea por llamada a un procedimiento
almacenado, ya sea por un comando directo, ya que
en los servidores se generan cursores implcitos.
Intentar lanzar dos comandos seguidos falla en
ADO.NET 1.1 si los realizamos sobre el mismo
objeto Connection, llevando a un desarrollador a
abrir ms objetos Connection de los que tena previstos. Pero en ADO.NET eso ya est superado y
podremos hacer a travs de una conexin lo que
nos de la gana en este sentido. MARS ser el mecanismo por el cual los desarrolladores podrn reducir el nmero de conexiones abiertas ante el hecho
de lanzar mltiples comandos y recuperar mltiples conjuntos de datos.

Transacciones
No es que hayan cambiado mucho las cosas en este
sentido, pero lo que s se ha hecho es integrar en el
cliente las funcionalidades del nuevo espacio de nombres System.Transactions por el cual se pueden obtener transacciones promocionadas. Esto va de hacer
posible que se puedan tener varias conexiones a varias
instancias de SQL Server y conseguir que se activen
de forma automtica las transacciones distribuidas
en el caso de participar del mismo objeto Transaction.
Eso es toda una ventaja sobre todo en aplicaciones de
servidor o de grandes sistemas de informacin escalables donde la informacin puede estar distribuida
en mltiples servidores.

Proteccin ante cadas


Hablando de sistemas empresariales, es necesario tambin tener en cuenta la alta disponibilidad
de los servidores. Una cosa es que contemos con
un cluster de SQL Server y eso ya de por s nos
ofrezca una alta seguridad de forma transparente y
otra muy distinta que nos pidan sistemas robustos
en el caso de no disponer de estas tecnologas. Para
eso SQL Server 2005 cuenta con unas herramientas de control de fallos basadas en tecnologas de
mirroring de la base de datos, por los cuales si uno
de los espejos falla puede activarse el otro. Pero es
en este momento cuando el cliente puede llegar a
perder la conexin y necesitar reconectarse, si no
con la misma, con otra fuente. Para minimizar el
impacto de estas caidas, el cliente SQL Server proporciona de forma transparente el control de estas
situaciones, retomando el control al iniciarse subsiguientes operaciones SQL tras la cada. Impresionante. Y todo controlado con un sencillo comando agregado a la cadena de conexin.

Soporte de nuevos tipos de datos


Como parte de las muchas novedades de SQL
Server 2005, estn sus nuevos tipos de datos. Tipos
que van desde refinamientos de los ya existentes
como los nuevos MAX BLOB , del estilo a VARBINARY(MAX), hasta integracin de tipos ya conoci-

<< dnm.ado.net

Herramientas de migracin y copia masiva de


datos.Tareas bulk copy
Otra de las enormes mejoras que se han incluido en este proveedor, es la capacidad de poder
implementar mecanismos de transferencia masiva
de datos, de una forma similar a cmo operan los
conocidos mecanismos DTS de SQL Server. Las
tareas bulk copy permitirn que podamos transferir
informacin por ejemplo, de un DataSet desde un
origen a un destino, como si de una instruccin SQL
se tratase, simplificando, en mucho, este tipo de
procesos a como se hacan anteriormente en
ADO.NET 1.1. Algo similar a lo que podemos en
el cdigo fuente 4:

// Cargar un Dataset con datos y procesarlo


...
// Copiar los datos a SQL Server
string cadConexion = GetCadenaConexion();
SqlBulkCopy bcp = new SqlBulkCopy(cadConexion);
bcp.DestinationTableName = "Empleados";
bcp.WriteToServer(dsEmpleados);

Fuente 4.Transferencias de datos

Entre las posibilidades que nos brinda esta clase


tan particular, estar la capacidad de coger datos tanto de un DataSet como de un objeto de tipo Reader lo
cul nos brindar infinitas posibilidades a la hora de
recoger los datos de origen.

La potencia de los eventos de datos


Una utilidad fantstica que .NET traa de serie,
era la que nos permita capturar eventos del sistema de archivos para poder actuar en consecuencia.
Pues bien, a todos los que trabajamos con objetos
desconectados, cuntas veces nos ha hecho falta
algo similar? Y qu complejo a podido llegar a ser!
Pues bien, gracias a los mecanismos nuevos de SQL
Server 2005, ya es posible estar al loro de estos
tantos para actuar en consecuencia. Para ello se nos
proporciona la interesante clase SqlDependency por
la cual podremos capturar eventos sobre datos por

ejemplo, un cambio de datos en una fila empleando para ello los omnipresentes delegados. Imaginaos
la utilidad de esta clase en entornos Web a la hora
de combinarlo con el objeto Cache o en entornos de
clientes desconectados de cualquier tipo de cliente
.NET. Las posibilidades son muy interesantes, con
el mnimo esfuerzo. Pero cuidado, que os veo, que
esto normalmente conllevar a recargar determinadas partes del DataSet pero no abusis de ello
en entornos de alta transaccionalidad y multitud de
filas. Antes que nada, echadle cabeza

SqlCommand comando =
new SqlCommand("SELECT au_id, au_lname FROM dbo.authors", conexion);
// Registrar el delegado de dependencia
SqlDependency depend = new SqlDependency(comando);
depend.OnChanged += new OnChangedEventHandler(OnDatosCambiados);
conn.Open();
SqlDataReader rdr = cmd.ExecuteReader();
// procesar los datos recuperados
...
void OnDatosCambiados(object caller, SqlNotificationEventArgs e)
{
MessageBox.Show("Los datos origen han cambiado: "+e.Info);
}

Fuente 5.Capturar eventos sobre los orgenes de datos

Otra forma de hacer las cosas, que ya comentaremos con ms detalle en otros artculos, lo proporcionan las nuevas colas de SQL Server 2005. A
travs de conexiones a colas de eventos mediante subscripciones SQL y empleando la clase
SqlNotificationRequest podremos tanto capturar
eventos como reaccionar en consecuencia empleando prototipos de comunicaciones asncronas.
Todo un mundo

Mejoras en las tecnologas desconectadas


de los datos
No podamos terminar este artculo sin hablar de
otro gran segmento del acceso a los datos. Y es el de
las clases desconectadas. Nuestra querida mega-clase, DataSet. En esta clase ms que novedades, hay multitud de mejoras. Todas ellas relacionadas con su optimizacin y flexibilidad.
La mejor de esas modificaciones est en el objeto
DataTable, que podramos decir que ahora es un poco
ms granular que antes. Qu quiero decir?, pues que
ahora es capaz de hacerse persistente y poder vivir
independientemente de un DataSet. Esto que no parece mucho, aporta muchas ventajas a la hora de tratar
tanto los orgenes de datos como la gestin del pro-

<<dotNetMana

dos como el XML; llegando hasta el avanzado UDT o


USer Defined Type que pasa por autnticas clases
.NET. Todos estos nuevos tipos estn recogidos en
el espacio de nombres System.Data.SqlTypes y agrega las nuevas enumeraciones SqlUdt o SqlXml, que
junto con el mtodo GetValue( ) eliminan cualquier
limitacin que se le pudiera achacar a este mecanismo de intercambio de datos (capaz de devolver
clases, streams XMLetc).

79

<< dnm.ado.net
pio DataSet, que poda llegar a manejar volmenes
de informacin considerables.

NOTA

Casi todas las mejoras de los objetos desconectados son transparentes al programador. Pero un DataTable Stand-Alone y un
formato binario nuevo de seriacin har las
delicias de los ms "friquis".

La otra gran mejora, est en la adicin de los


mecanismos de persistencia de los propios objetos
Dataset, que ahora permiten una seriacin binaria,
que seguro muchos notarn que mejora sensiblemente las comunicaciones en muchos casos aplicados al negocio. Es ms, ahora ser posible implementar sistemas muy optimizados pudiendo intercambiar, en procesos de Remoting, datos empleando
DataSet. Una pasada!
Ms cositas que a ms de uno le puede interesar:
a) La posibilidad de trabajar con Datasets de solo
lectura con la nueva clase DataTableReader.
b) La posibilidad de poder crear tablas a partir de
vistas.
c) La posibilidad de indexar campos de un
DataTable que optimizan los procedimientos
DML en tablas.
d) Bsquedas rpidas de filas, empleando mtodos IndexOf().
e) Poder cambiar las columnas de posicin.
f) Mejoras internas del motor de inferencia, de
la seriacin de tipos personalizados.
g) Un largo etctera que ya se vern en futuros
artculos, pero que os prometo que son transparentes al desarrollador, y que optimizarn
an ms la ejecucin del cdigo.

<<dotNetMana

Visual Studio 2005: Ms herramientas


que nunca

80

de datos y los mecanismos de filtro y ordenacin integrados y BindingNavigator que


ofrece un nuevo sistema de navegacin grfico de usuario ms verstil y potente que los
anteriores y, cmo no, el visor de los nuevos Reporting Services de SQL Server 2005.
Todo un lujo.

Para terminar, que no hay casi ms hueco


hablar de otra de las estrellas desde la cual poder
explotar al mximo el acceso a los datos: Visual
Studio 2005. As como las versiones anteriores ya
ofrecan multitud de herramientas muy prcticas
para el acceso a los datos, Visual Studio 2005 no se
queda atrs y nos ofrece:
a) Una nueva paleta ampliada de controles para el
acceso a los datos. De ellos, los ms interesantes son BindingSource encapsula un origen

Figura 1. La paleta y los nuevos controles en accin.

b) Soporte nativo de acceso a SQL Server 2005.


Entre los que se incluye la creacin de un
proyecto SQL, editores para crear objetos
de todo tipo y un potente editor de cdigo
gestionado a nivel de base de datos.
c) Smarttags (etiquetas inteligentes) para la rpida
configuracin de los controles de datos.

Figura 2. SmartTags de datos en accin.

En fin, que podramos hablar de todo ello con


mucha ms profundidad, pero eso lo dejaremos a
futuros artculos ya que, de nuevo, Microsoft ha
conseguido que podamos derramar chorros de tinta con una nueva versin que lejos de haberse quedado estancada, ha ofrecido multitud de mejoras y
multitud de aadiduras que harn que el desarrollo de proyectos de datos sea ms interesante, sencillo y productivo an de la que ya era. De nuevo,
me quito el sombrero.

dnm.arquitectura

Visual Studio 2005 Team System


La diversidad de metodologas existentes, procedimientos y herramientas actuales dificulta en gran medida la ejecucin de proyectos de software. Por otro lado,
la multitud de tecnologas y su complejidad agrava ms esta situacin, y se ve multiplicada tanto en las reas de sistemas como de desarrollo.

<< Como consecuencia, las aplicaciones complejas de


hoy da requieren equipos multidisciplinares para
desarrollar y desplegar estas soluciones. Quizs el
mayor reto con el que se encuentran nuestros profesionales es la comunicacin entre ellos. Visual Studio
Team System facilita esta comunicacin y la extiende a todos los miembros del equipo de desarrollo a
lo largo del ciclo de vida de las aplicaciones.

Qu es Visual Studio Team System?


Visual Studio Team System es un conjunto de
herramientas que integran orientacin de procesos,
arquitecturas prescriptivas, y herramientas de ciclo
de vida para la consecucin de despliegue de soluciones sobre sistemas Windows. Visual Studio Team
System incluye herramientas que proporcionan
soporte a todo el equipo de desarrollo, estas son:

nolgicos disear soluciones orientadas a servicios que pueden ser validadas contra sus propios entornos operacionales.
Visual Studio Edicin para Desarrolladores de
Software. Fundamentalmente incorpora herramientas de desarrollo avanzadas que permiten a los equipos aumentar su productividad
e introducir un alto nivel de calidad desde el
principio y durante todo el ciclo de vida de la
aplicacin.
Visual Studio Edicin para Testeadores de
Software. Herramientas avanzadas de pruebas de carga que permiten a los equipos verificar el rendimiento de aplicaciones antes del
despliegue.
Visual Studio Team Foundation Server. Herramientas de colaboracin de equipos basadas en
servidor que permiten a las organizaciones gestionar y seguir el progreso y estado de los proyectos con menos esfuerzo.

Figura 1. Visual Studio 2005 Team System.

Por Alberto Ruiz

Visual Studio Edicin para Arquitectos de Software.


Las caractersticas ms relevantes de esta edicin se centran en los diseadores visuales que
permiten a los arquitectos y responsables tec-

VSTS 2005 dispone de capacidades para realizar


la captura de requisitos de los proyectos y establece
mecanismos de trazabilidad sobre estos durante todo
el ciclo de vida del proyecto. Adicionalmente es posible realizar la captura de requisitos con herramientas tales como Microsoft Excel o herramientas de terceras compaas como por ejemplo Borland
CaliberRM.
Cualquier elemento planeado o trazado por el
equipo de proyecto es gestionada por la base de
datos de work items. Un work tem es un registro de
base de datos que Visual Studio Team Foundation
utiliza para trazar las asignaciones y estados de un
trabajo determinado. En funcin de la metodolo-

<<dotNetMana

Gestin de proyectos

81

<< dnm.arquitectura
ga aplicada al proyecto pueden variar los tipos de
work items. Por ejemplo, en MSF Agile se definen
cinco tipos diferentes que son: escenarios, requisitos de calidad de servicio, tareas, bugs y riesgos.
VSTS 2005 provee la conversin de datos desde
otros sistemas de tracking incluyendo Rational
ClearQuest, Bugzilla y PVCS.

plantillas metodolgicas (MSF v4 Formal y Agil),


as como terceros frabricantes generarn plantillas
para dicho entorno. La gestin de plantillas se realiza desde el Process Template Manager, haciendo posible la importacin o exportacin manual de
metodologas que son implementadas en forma de
ficheros XML.

Figura 3. Process Template Manager.

<<dotNetMana

Figura 2. Work Items.

82

Microsoft Project Server y Visual Studio 2005


Team System se complementan en la gestin de tareas y recursos. Mientras Project Server est diseado
para una gestin de alto nivel de recursos a travs de
mltiples proyectos, VSTS 2005 esta diseado para
gestionar el ciclo de vida de desarrollo completo. A
travs de procesos de importacin, exportacin y sincronizacin de datos se comparte la informacin de
ambos sistemas de un modo sencillo y fiable. Tanto
Microsoft Excel como Microsoft Project disponen de
un add-in que incorpora Team System y que facilita
la sincronizacin de estos documentos y los work items
relacionados del proyecto.
Otro aspecto a destacar es que no se requiere el
entorno de Visual Studio para gestionar los proyectos; existe una versin independiente con caractersticas para gestin de proyectos que constituye el cliente de Visual Studio Team Foundation.
Las plantillas metodolgicas son una nueva
caracterstica de Team System que permite a los
equipos configurar y personalizar los procesos en
Visual Studio 2005. Las plantillas modifican el servidor de Team Foundation para adecuarlo a los procesos del equipo, tipos de work items, reglas, polticas de proteccin, documentacin de procesos,
etc. Inicialmente Team System incorporar varias

Conviene no confundir las plantillas metodolgicas


con las plantillas empresariales que permiten crear marcos de trabajo con polticas y restricciones personalizadas, complementando a las primeras. Las plantillas
empresariales ya existentes en VS2003 continan siendo soportadas en VS2005.

Anlisis y Diseo
En las fases de anlisis y diseo, Team System
incorpora diseadores de sistemas distribuidos para
reducir la complejidad del desarrollo y despliegue de
aplicaciones orientadas a servicios. El conjunto esta
compuesto por:
Application Connection Designer. Permite a los
arquitectos y desarrolladores definir aplicaciones que sern configuradas en sistemas de despliegue.
Logical Datacenter Designer. Ser utilizado para
crear diagramas que representen la estructura
lgica del centro de datos con objeto de comunicar informacin relevante para el desarrollador acerca del entorno de despliegue.
System Designer. Asistir en la composicin de
aplicaciones dentro de cada sistema final.
Deployment Designer. Enlazar las aplicaciones dentro del sistema lgico de servidores modelado sobre
un diagrama de centro de datos lgico.
Estos diseadores facilitan el diseo a los arquitectos de aplicaciones orientadas a servicios mientras
que los desarrolladores pueden trabajar con el cdigo generado manteniendo los cambios del cdigo sincronizados con el diseo visual.

<< dnm.arquitectura

Los arquitectos de infraestructura


tambin pueden crear abstracciones
lgicas de sus centros de datos y validarlos contra las restricciones de la aplicacin o centro de datos diseado por
el arquitecto de aplicaciones sobre un
despliegue real. Los informes generados desde esta validacin ayudan a documentar el despliegue final.
Los diseadores de sistemas distribuidos, ofrecen restricciones y validaciones contra Web Service Enhancements
(WSE), Seguridad IIS, Seguridad
SQL, y ASP.NET. A modo de ejemplo, esto permite asegurar que un componente que requiere un tipo de seguridad, slo podr ser distribuido sobre
un sistema que soporte ese tipo de
seguridad.

Entre algunas otras caractersticas


sobresalientes en este apartado, cabe
destacar que las configuraciones de los
servidores Web basados en IIS descritas en el modelo pueden ser replicadas
automticamente desde un servidor ya
existente evitando tener que volver a
parametrizar todos los detalles del host
para duplicar el elemento.
Los lenguajes soportados para los
diseadores de sistemas distribuidos
en primera instancia sern Visual C++
(Extensiones Manejadas), Visual Basic
y Visual C#. Sin embargo, el diseador de clases soportar todos los lenguajes .NET suministrados por
Microsoft.
Desde el punto de vista de la extensibilidad se ha creado un modelo para

Herramientas de desarrollo
avanzadas
Las herramientas de anlisis esttico de cdigo que acompaan a Visual
Studio 2005 permiten detectar defectos en el cdigo inspeccionando el
cdigo fuente o los binarios sin necesidad de ejecutarlos. PREFast o FxCop
son herramientas de este estilo. Estas
herramientas se integran con el proceso de compilacin produciendo advertencias o errores en la lista de errores
de Visual Studio y facilitando la navegacin hasta el defecto con un solo clic.

<<dotNetMana

Figura 4. Diagrama de un Datacenter lgico.

la primera release de los diseadores de


sistemas distribuidos que permite obtener acceso a los servicios bsicos o clientes (servicios Web, aplicaciones Web,
aplicaciones Windows, servicios externos o bases de datos externas). Ms adelante se publicar un SDK que ampliar estas funcionalidades.
Dynamic System Initiative (DSI) es
una amplia iniciativa de Microsoft para
unificar hardware, software, y proveedores de servicios alrededor de una nueva arquitectura basada en System
Definition Model (SDM). Este ltimo es
un anteproyecto vivo que cubre el ciclo
de vida y unifica las polticas de operaciones de IT con los requisitos operacionales de las aplicaciones. En tiempo
de diseo permitir a travs de Visual
Studio capturar las polticas de software y describir los requisitos operaciones
de la aplicacin. En tiempo de despliegue, la descripcin de la aplicacin permitir al sistema operativo automatizar
el despliegue completo de la aplicacin
y alojar dinmicamente un conjunto distribuidos de servidores, almacenamiento, y recursos de red que la aplicacin
requiere.
No obstante, no podemos pasar por
alto a Visio, que sigue incorporado
como herramienta de diseo en Visual
Studio 2005. Sin embargo, en la construccin de aplicaciones de un dominio especfico como aplicaciones orientadas a servicios, los diseadores de sistemas distribuidos son ms idneos. Es
posible encontrar ms informacin
sobre diseadores de sistemas distribuidos en http://msdn.microsoft.com/
vstudio/teamsystem.

83

<< dnm.arquitectura
Aunque las herramientas ya disponen
de reglas para el anlisis esttico, es
posible agregar nuevas reglas a travs
de las extensiones.

Figura 5. Anlisis de cdigo.

Application Verifier es una herramienta de Visual Studio que expone instrumentacin ya presente en el sistema
operativo Windows. La instrumentacin
realiza verificaciones en los programas en
ejecucin dentro de reas seleccionadas
como consumo de memoria, utilizacin
de secciones crticas o modo de utilizacin. Permite detectar problemas de solapamiento de memoria, bloques alojados
en el heap, reutilizacin despus de borrado, doble borrado y contaminacin del
heap. En el rea de secciones crticas detecta operaciones que pueden conducir a
deadlocks o prdida de recursos. En la parte de modo de utilizacin detecta intentos de reutilizacin de manejadores que
ya no son vlidos.
Code profiler es un mecanismo de
Visual Studio Team System que peridicamente interrumpe la ejecucin de
una aplicacin para determinar qu funcin se est ejecutando. Mantiene un
conteo para cada funcin que es mostrado sobre una estadstica una vez finalizada la ejecucin del profiler para determinar el rendimiento medio de cada
funcin analizada. Sin embargo, esta
funcionalidad no estar disponible para
aplicaciones 64 bits hasta siguientes versiones de Team System.

<<dotNetMana

Herramientas de testeo

84

Las pruebas en Visual Studio Team


System son gestionadas a travs del Test
Manager, que es un visor de los tipos de
pruebas asociados a un proyecto. Los
tipos que se pueden incluir en el visor
son: pruebas manuales, unitarias y pruebas de carga.

pasar de una base


de datos Visual
Source Safe a Team
System. Por ltimo, cabe destacar
que el nuevo sistema de control de
cdigo fuente exFigura 6. Test Manager.
pone un conjunto
de API que permiLos proyectos de test son proyectos
ten ser consumidas por terceras herrade Visual Studio estndar creados espemientas y que pueden integrarse con
cficamente para contener las pruebas.
Visual Studio facilitando la personalizaEste tipo de proyectos permite a los usuacin de procesos en la gestin de la conrios establecer una lnea clara entre el
figuracin de cada organizacin.
cdigo desarrollado
y el cdigo utilizado
para el aseguramiento de la calidad. Por
otro lado Team
System incluye en el
Framework de Test
un sistema de gestin
que permite distribuir las pruebas en
mquinas locales y
Figura 7. Gestin de cdigo fuente.
remotas.
Realizando una
comparacin rpiConclusin
da entre Visual Studio Team Test y
Application Center Test podramos
decir que las caractersticas que dan
A medida que las aplicaciones cresoporte a las pruebas de carga son
cen en complejidad, los equipos de desacompletamente nuevas, mientras que
rrollo necesitan los mismos principios
el resto de prestaciones soportadas por
RAD de simplicidad y flexibilidad para
ACT han sido ampliamente mejorair escalando con ellos. Reducir la comdas. Entre las caractersticas que
plejidad significa aumentar la productiactualmente no estn incorporadas se
vidad, ahorrando costes mientras se
encuentra el soporte para la automareducen los tiempos de desarrollo. Con
tizacin de pruebas de interfaz de
Visual Studio Team System las organiusuario (GUI), sin embargo, este tipo
zaciones pueden:
de funcionalidades sern suministra Reducir la complejidad de disdas por herramientas de terceros que
tribucin de modernas soluciose integrarn en Visual Studio.
nes orientadas a servicios, optimizndolas para los entornos
operacionales.
Control de cdigo fuente
Facilitar colaboracin entre
Visual Source Safe contina acomtodos los miembros de un equipaando a Visual Studio como una solupo de software, incluyendo anacin individual o para pequeos equilistas de negocio, jefes de propos. Team System incluye un servidor
yecto, arquitectos, desarrollay una gestin de la configuracin susdores, testers, y directores de
tentada sobre base de datos que es capaz
operaciones.
de escalar entre un gran nmero de
Personalizar y extender sus proequipos y proyectos.
pios procesos internos y marcos
En la versin final del producto
de trabajo o elegir entre ms de
existir un proceso de migracin para
450 productos adicionales.

dnm.todotnet.qa

Dino Esposito

Visual Studio 2005 tips & tricks


Visual Studio 2005 es un entorno contenedor que integra la funcionalidad de mltiples
diseadores visuales. Hay diseadores para construccin de aplicaciones Windows
Forms, para sitios Web ASP.NET, para servicios Web, etc.Tiende a ofrecer un montn
de asistentes para facilitar la labor y hacer que la escritura de cdigo sea la menor posible.A algunos les encantan los asistentes, otros los odian.

<< Vamos a comenzar este recorrido por Visual Studio con una
especie de pregunta existencial:
Tengo una pregunta existencial: Hay vida ms all
de los asistentes en Visual Studio 2005? Si los utilizo,
podr seguir escribiendo cdigo manualmente? Es
arrastrar-y-soltar el futuro de la programacin?
La mayora de las cosas que conozco hoy se remontan a hace quince aos, cuando la nica forma de programar aplicaciones Windows era utilizando el SDK. Se
trataba de un API al estilo C, expuesto por el sistema
operativo. Trabajar con el SDK de Windows, te da ese
sentido especial de los sistemas de ventanas, te pone en
contacto con la maquinaria de bajo nivel, y al final, es
difcil, y a menudo, frustrante. Por esa razn se inventaron primero, Visual Basic, y despus, los asistentes.
Empec a jugar con los asistentes en Visual Studio
4.0. En ese momento, un asistente era simplemente
una librera de MFC, que deba registrarse e integrarse con el IDE de Visual Studio. El asistente creaba un
proyecto con un nmero predeterminado de ficheros
para formar una aplicacin con un conjunto de capacidades definidas por el usuario. Estaba dirigiendo un

Dino Esposito
es redactor de dotNetMana.
Formador, consultor y escritor
afincado en Roma. Miembro
del equipo de Wintellect,
Dino est especializado en
ASP.NET y ADO.NET. Puede
enviarle sus consultas a
TodotNet.QA@dotnetmania.com

el nico asistente realmente bueno, es


el que construyes t mismo (o que
consigues conocer al detalle). Utiliza
los asistentes para ahorrar tiempo, no
para aprender programacin

Hay vida ms all de los asistentes en Visual Studio 2005?


Es arrastrar y soltar el futuro
de la programacin?

grupo de desarrollo, y los asistentes me ofrecieron una


excelente herramienta para escribir cdigo ms rpidamente, y de acuerdo con un conjunto de premisas
corporativas. En ese momento, era un fan de los asistentes, aunque, en realidad, era un fan de los asistentes personalizados. Qu es un asistente personalizado? Uno que te escribes t mismo para ayudarte a ti y
a tu equipo a desarrollar con ciertas caractersticas, ms
rpido, con unos pocos "clicks.
Cul es la diferencia, si la hay, entre un asistente y
otro? Es ms o menos la misma diferencia entre los cultivos normales y los biolgicos. Usualmente, no sabemos qu es lo que contienen los vegetales que compramos en un supermercado. Pero si lo cultivas t mismo,
sabes mucho de ellos. La moraleja de esto es que muchos
asistentes de Visual Studio esconden cdigo de la vista
predeterminada y transmiten una sensacin de omnipotencia. Haces clic y el cdigo se despliega ante tus ojos.
Es eso lo que quieres? Sabes realmente lo que hace ese
cdigo? Por ejemplo, el control SQLDataSource, hace que
la paginacin a travs de un origen de datos sea trivial.
Pero si no conoces exactamente cmo funciona, podr-

Lo que no soporto de Visual


Studio 2003, es que plantea
restricciones tales como IIS,
Extensiones de Servidor de
FrontPage y el uso de proyectos. Me va a pasar lo mismo
con Visual Studio 2005

Visual Studio 2005, trae buenas noticias a los programadores. Lo primero y ms importante, IIS ya no
es un requisito estricto. De hecho, el producto incorpora un servidor Web local que hace que IIS sea opcional, al menos para testeo rpido y depuracin. El servidor Web local es una versin ligeramente mejorada
de Cassini, una herramienta que se lanz originalmente con WebMatrix. Es importante tener en cuenta que
el servidor local representa solamente la opcin predeterminada. Si abres un proyecto a partir de un directorio virtual de IIS, Visual Studio utilizar IIS para
depurar la aplicacin.
El servidor Web embebido es solamente un pequeo archivo de cdigo ejecutable, y no puede reemplazar las caractersticas de un servidor completo como
IIS. Funciona slo con pginas individuales, y no inclu-

ye ninguna de las caractersticas adicionales de IIS,


tales como la metabase. En otras palabras, utiliza libremente el servidor local para propsitos de depuracin,
pero no te fes plenamente de l para la distribucin
de la aplicacin.

Qu es un DiffGram? Es la
representacin XML del estado de un
DataSet, incluyendo filas actuales,
cambios realizados, y errores
pendientes en filas de la tabla.

Visual Studio 2005 soporta mltiples formas de abrir


sitios Web. Adems de usar las FPSE (Extensiones de
Servidor de FrontPage), puedes acceder a tus ficheros de
sistema mediante FTP o ubicaciones del sistema de ficheros. Tambin puedes acceder a la instalacin local de IIS,
navegar por la jerarqua de directorios virtuales existente, y acceder a las races virtuales o crear nuevas entradas. Puedes abrir sitios Web existentes mediante el protocolo FTP y luego crear y editar archivos. Sin embargo, debe de tenerse acceso al sitio FTP y permisos sobre
los directorios correspondientes. El directorio debe de
existir, porque Visual Studio no puede crear nuevos sitios
Web va FTP.
Adems, Visual Studio 2005 no compila todo el cdigo del sitio en un nico ensamblado, como la versin
anterior. En su lugar, utiliza el nuevo modelo de compilacin de ASP.NET y reconoce dinmicamente los tipos
de ficheros basndose en el directorio al que pertenecen.
De esa forma no slo se capturan los cambios en los ficheros .ASPX, sino en los de extensiones .CS o .VB e incluso los de recursos. Esto desemboca en una especie de
compilacin dinmica para las clases de soporte codebehind. Sin embargo, hay que ir con cuidado. Evitar la
compilacin explcita de toda la aplicacin tiene un costo que debe ser tenido en cuenta. La distribucin al servidor Web debe de constar obligatoriamente de ficheros .VB o .CS. Y aunque los ficheros de cdigo fuente
no pueden ser solicitados explcitamente al servidor, estn
ah con el riesgo potencial de que un atacante pudiera
acceder a ellos y poner en riesgo la propiedad intelectual. Para evitar esto, dispones de dos opciones: precompilar todo el sitio para distribuir ensamblados ya construidos en el sistema local, o compilar los ficheros de
cdigo a un nico ensamblado. La pre-compilacin del
sitio es otra de las caractersticas ms interesantes de
ASP.NET 2.0 (no de Visual Studio 2005), que permite

<<dotNetMana

as terminar con cdigo ineficiente que nunca seras capaz


de escribir en Visual Studio .NET 2003.
Parafraseando un viejo lema del cine, el nico asistente realmente bueno, es el que construyes t mismo (o
que consigues conocer al detalle). Utiliza los asistentes
para ahorrar tiempo, no para aprender programacin.
Lo que no soporto de Visual Studio 2003, es que
plantea una serie de restricciones a los desarrolladores, tales como IIS, Extensiones de Servidor de
FrontPage, y el uso de proyectos. Me va a pasar lo
mismo con Visual Studio 2005?, a no ser que solucione este tipo de problemas
Por supuesto, estamos hablando de Visual Studio
2005 y aplicaciones ASP.NET. Por supuesto, la versin 2005 suministra una forma mucho ms sencilla y
amigable de construir aplicaciones ASP.NET. Las
mejoras clave, realmente solucionan muchos de los
problemas reportados por los programadores en los
pasados aos: falta de acceso FTP o IIS a mquinas
remotas, IIS como nico entorno de depuracin, necesidad de soluciones .SLN para construir, no ya aplicaciones, sino una simple pgina, o falta de opciones
alternativas al code-behind.

TodotNet.qa@dotnetmania.com TodotNet.qa@dotnetmania.com

<< dnm.todotnet.qa

87

88

TodotNet.qa@dotnetmania.com TodotNet.qa@dotnetmania.com

<<dotNetMana

<< dnm.todotnet.qa

IIS ya no es un requisito estricto. De


hecho, el producto incorpora un
servidor Web local que hace que
IIS sea opcional, al menos para testeo
rpido y depuracin

distribuir aplicaciones Web en un formato listo para usarse, preservando as la propiedad intelectual, y evitando,
adems, ese pequeo retraso inicial en las peticiones,
debido a la compilacin dinmica de recursos.
Por ltimo, pero no menos importante, Visual Studio
2005 soporta la edicin de ficheros individuales, y no
requiere de un proyecto para la edicin simple de un
fichero en disco. De modo que, si hacemos doble-clic
en un fichero .ASPX en el explorador de Windows, se
lanza Visual Studio 2005, permitiendo la edicin independiente. A diferencia la versin precedente, IntelliSense
y el coloreado del cdigo fuente funciona correctamente. La pgina puede verse, adems, directamente en el
navegador Web a travs del servidor Web local.
He estado investigando ltimamente con Visual
Studio 2005. Y tengo razones a favor y en contra del
paradigma de correspondencia 1 a 1 entre los ficheros
en disco y los nodos del Explorador de Soluciones. La
razn por la que no me gusta, es que si tengo directorios con montones de ficheros (por ejemplo, ficheros
grficos) las operaciones de copiar y pegar son muy lentas, por no mencionar las operaciones tipo chek-in y checkout con Visual SourceSafe. Sugerencias?
Parece que esta es una de las preguntas ms frecuentes a las que Scott Guthrie el Manager de proyecto de
ASP.NET ya respondi pblicamente en su sitio Web
http://weblogs.asp.net/scottgu. Es importante tener en cuenta que Visual Studio no muestra todos los ficheros y carpetas en el Explorador de Soluciones, sino que se omi-

tengo razones a favor y en


contra del paradigma de
correspondencia 1 a 1 entre
los ficheros en disco y los
nodos del Explorador de
Soluciones

ten ciertos archivos y carpetas ocultos, y lo mismo sucede con las carpetas virtuales de IIS. De forma que, para
ocultar un directorio demasiado grande de la vista del
explorador, basta con marcar la carpeta como un directorio virtual de IIS. Nada cambia en la aplicacin, pero
se obtienen una serie de beneficios asociados. Por ejemplo, puedes reutilizar tus imgenes ms fcilmente (o
cualquier otro recurso), en otras aplicaciones y almacenarlos en cualquier parte del servidor Web. El contenido de un directorio virtual, es automticamente excluido de cualquier operacin de distribucin y el cdigo
fuente tampoco se incluye en el control de cdigo del
proyecto.
A menudo tengo la necesidad de mover proyectos entre mquinas distintas. Existe finalmente una
forma de transportar la configuracin del IDE de forma fcil y cmoda?
Supongo que eres un tpico adicto al trabajo (como
yo) y no puedes estar en casa unas pocas horas por la
noche sin hacer algo. De ah la necesidad de transvasar la configuracin del IDE de la mquina del trabajo al PC de casa. Estoy en lo cierto? Francamente,
espero que no.

A menudo tengo la necesidad


de mover proyectos entre
mquinas distintas. Existe
finalmente una forma de
transportar la configuracin
del IDE de forma fcil
y cmoda?

Tpicamente, cuando trabajas con Visual Studio,


desarrollas macros, reordenas mens, defines nuevos
valores predeterminados, aades nuevos controles a la
Caja de Herramientas, creas nuevas plantillas de proyecto y defines nuevos colores y tipos de letra. Toda esta
informacin no es fcil de catalogar si tienes que hacerlo manualmente. Por suerte, Visual Studio 2005, suministra una nueva caja de dilogo de
Importacin/Exportacin de configuraciones, desde
el men de Herramientas. Seleccionas el conjunto de
valores de configuracin que quieres almacenar y los
guardas en un fichero. El fichero puede almacenarse en
cualquier parte y recibe una extensin .vssettings. A
pesar de la extensin, es un fichero XML. Basta con
mover el fichero a la mquina de destino e importarla.
No puede ser ms fcil.

Traduccin por Marino Posadas

<< dnm.biblioteca.net

dnm.biblioteca.net

Visual C# 2005:A developer's notebook


Jesse Liberty
Editorial: O'Reilly
ISBN: 059600799X
Pginas: 239
Publicado: Abril, 2005
Idioma: Ingls

No se trata de una obra de iniciacin, no obstante. Se asumen conocimientos suficientes de


la versin anterior del lenguaje, de forma que el libro se centra fundamentalmente en lo que
es nuevo, y lo hace con la profundidad suficiente para no dejar cabos sueltos.

Pro C# 2005 and the .NET 2.0 Platform


Andrew Troelsen
Editorial: APress
ISBN: 1590594193
Pginas: 1.032
Publicado: 2005
Idioma: Ingls
Autor de otras 6 obras relacionadas con la programacin, Troelsen obtuvo su mximo
reconocimiento con la publicacin de COM and .NET interoperability y Visual Basic
.NET and the .NET Platform: an advanced guide, que se situaron en los best sellers de
Amazon dentro de su gnero. Bien, pues, esta obra ya ha vendido ms que las otras dos,
y va en camino de batir todos sus registros anteriores.
Se trata de una obra extensa, en la que se recorren, no solo las novedades lingsticas,
sino (y ms importante en este caso), todas las novedades de las libreras de .NET
Framework 2.0, usando C# como lenguaje base para todos los ejemplos de cdigo. En
fin, una revisin en profundidad de todo lo disponible en esta versin, muy recomendable para programadores que conozcan la versin anterior y quieran actualizar software o pensar en software hecho con la nueva versin a la luz de lo ya conocido.

<<dotNetMana

<<

El lenguaje C# sigue acumulando interesantes cambios estructurales y semnticos para mantenerse como lingua franca y referente de las novedades en lenguajes de desarrollo, como
nos deca el mes pasado Jeff Prosise. Jesse Liberty, que ya nos haba convencido con sus
obras anteriores, y especialmente, con su Programming C#, aborda en esta pequea obra
justamente lo que necesita el desarrollador de C# que quiere actualizar sus conocimientos
a la nueva versin.

89

<< dnm.desvan

noticias.noticias

Marino Posadas

Microsoft y la seguridad
Anti-spyware en Windows Vista y otras novedades
Segn Greg Sullivan, Lead Windows Product Manager
en Microsoft (del que publicaremos una entrevista en
breve), el software de anti-spyware que ahora est siendo distribuido gratuitamente para versiones anteriores
de Windows, formar parte de Windows Vista, en un
esfuerzo por suministrar mejores servicios bsicos de
seguridad para los usuarios no corporativos. La noticia
se inscribe dentro de la poltica iniciada por la compaa acerca de la importancia de la seguridad, y coincide
casi en el tiempo con el anuncio de un nuevo software,
Microsoft Client Protection, cuya disponibilidad en
beta parece prxima. Dentro de esta lnea estara la presencia de Windows OneCare Live, un sistema antivirus y anti-spyware que parece uno de las consecuencias

Documentos y cdigo en la Red


Script para automatizar el asistente de
grabacin de CD en
Windows XP : Fernando Muoz el webmaster de
Fermu's Website (http://www.fermu.com/content/view/
262/2/lang,es) nos trae este interesante ejemplo de cdigo de script, producido por l (que no quiere atribuirse su autora) y que puede adems darnos ideas para
otros usos similares.

<<

de la adquisicin de Sybari Software por Microsoft hace


algn tiempo.
Curiosamente, hace unos das, Microsoft invit a un numeroso grupo de hackers ticos, a investigar vulnerabilidades en su software, en el evento de seguridad Blue Hat.
Y, casi de forma paralela, Tony Chor (Lead Program
Manager para IE7) mostraba en Malasia algunas de las nuevas caractersticas de IE7 Beta 2, enfatizando en el hecho
de que no se trata de un conjunto de nuevos parches, sino
de un cambio profundo a nivel de estructura, con la seguridad en mente en todo momento.

Utilidades del mes


DonationCoders. Este mes
queremos dedicar esta seccin,
no a un producto concreto
sino al sitio especializado
DonationCoders, en el que
participan varios autores, algunos de los cuales han aportado utilidades notables. Uno de
ellos, Skrommel, presenta una
utilidad que recomendamos
(Process Guard), que monitoriza (y avisa, a voluntad) situaciones lmite del sistema (respecto al uso de memoria,
puertos, disco, etc). Pero todo el sitio es realmente til.
http://www.donationcoders.com.

<<dotNetMana

Sitios recomendados

90

VBaccelerator: Sitio con notables


aportaciones de cdigo fuente, especialmente en Visual Basic .NET. Sin
haberlo hecho a propsito, una de las novedades actuales es un
cdigo fuente en VB.NET que permite mediante las API Image
Mastering API (IMAPI) controlar el proceso de grabacin, seleccin de contenidos y produccin de CD (http://www.vbaccelerator.com/home/NET/Code/Libraries/Writing_CDs/Writing_Data_CDs/
article.asp).

WWWCoder: Interesante sitio con artculos y cdigo fuente sobre desarrollo en .NET
de cara a la programacin Web y cliente/servidor. Actualiza con bastante frecuencia.
Disponible en http://www.wwwcoder.com/main/
Default.aspx

You might also like