NET es un framework de Microsoft que hace un nfasis en la transparencia de redes, con
independencia de plataforma dehardware y que permita un rpido desarrollo
de aplicaciones. Basado en ella, la empresa intenta desarrollar una estrategia horizontal que integre todos sus productos, desde el sistema operativo hasta las herramientas de mercado. .N! podr"a considerarse una respuesta de Microsoft al creciente mercado de los negocios en entornos #e$, como competencia a la plataforma %ava de &racle 'orporation y a los diversos framework de desarrollo we$ $asados en ()(. *u propuesta es ofrecer una manera rpida y econ+mica, a la vez que segura y ro$usta, de desarrollar aplicaciones ,o como la misma plataforma las denomina, soluciones, permitiendo una integraci+n ms rpida y gil entre empresas y un acceso ms simple y universal a todo tipo de informaci+n desde cualquier tipo de dispositivo. Consideraciones-editar. /a plataforma .N! de Microsoft es un componente de software que puede ser a0adido al sistema operativo #indows. (rovee un e1tenso con2unto de soluciones predefinidas para necesidades generales de la programaci+n de aplicaciones, y administra la e2ecuci+n de los programas escritos espec"ficamente con la plataforma. sta soluci+n es el producto principal en la oferta de Microsoft, y pretende ser utilizada por la mayor"a de las aplicaciones creadas para la plataforma #indows. .N! 3ramework se incluye en #indows *erver 4556, #indows 7ista y #indows 8. 9e igual manera, la versi+n actual de dicho componente puede ser instalada en #indows :(, y en la familia de sistemas operativos #indows *erver 455;. <na versi+n =reducida= de .N! 3ramework est disponi$le para la plataforma #indows Mo$ile, incluyendo telfonos inteligentes. /a norma >incluido en 'M?@;;A, B*&CB' 4;48DE que define el con2unto de funciones que de$e implementar la $i$lioteca de clases $ase >B'/ por sus siglas en ingls, tal vez el ms importante de los componentes de la plataformaE, define un con2unto funcional m"nimo que de$e implementarse para que el marco de tra$a2o sea soportado por un sistema operativo. ?unque Microsoft implement+ esta norma para su sistema operativo #indows, la pu$licaci+n de la norma a$re la posi$ilidad de que sea implementada para cualquier otro sistema operativo e1istente o futuro, permitiendo que las aplicaciones corran so$re la plataforma independientemente del sistema operativo para el cual haya sido implementada. l (royecto Mono emprendido por :imian pretende realizar la implementaci+n de la norma para varios sistemas operativos adicionales $a2o el marco del c+digo a$ierto. Componentes-editar. /os principales componentes del marco de tra$a2o sonF l con2unto de lengua2es de programaci+n. /a biblioteca de clases base o BCL. l entorno comn de ejecucin para lenguajes, o CLR por sus siglas en ingls. 9e$ido a la pu$licaci+n de la norma para la infraestructura comn de lenguajes >CLI por sus siglas en inglsE, el desarrollo de lengua2es se facilita, por lo que el marco de tra$a2o .N! soporta ya ms de 45 lengua2es de programaci+n y es posi$le desarrollar cualquiera de los tipos de aplicaciones soportados en la plataforma con cualquiera de ellos, lo que elimina las diferencias que e1ist"an entre lo que era posi$le hacer con uno u otro lengua2e. ?lgunos de los lengua2es desarrollados para el marco de tra$a2o .N! sonF 'G, 7isual Basic .N!, 9elphi >&$2ect (ascalE, 'HH, 3G, %G, (erl, (ython, 3ortran, (rolog >e1isten al menos dos implementaciones, el (G D y el (rolog.N! 4 E, 'o$ol y (owerBuilder. Biblioteca de Clases Base de .NET-editar. 9iagrama $sico de la Bi$lioteca de 'lases Base. /a Bi$lioteca de 'lases Base >B'/ por sus siglas en inglsE mane2a la mayor"a de las operaciones $sicas que se encuentran involucradas en el desarrollo de aplicaciones, incluyendo entre otrasF Bnteracci+n con los dispositivos perifricos Mane2o de datos >?9&.N!E ?dministraci+n de memoria 'ifrado de datos !ransmisi+n y recepci+n de datos por distintos medios >:M/, !'(CB(E ?dministraci+n de componentes #e$ que corren tanto en el servidor como en el cliente >?*(.N!E Mane2o y administraci+n de e1cepciones Mane2o del sistema de ventanas )erramientas de despliegue de grficos >I9BHE )erramientas de seguridad e integraci+n con la seguridad del sistema operativo Mane2o de tipos de datos unificado Bnteracci+n con otras aplicaciones Mane2o de cadenas de caracteres y e1presiones regulares &peraciones aritmticas Manipulaci+n de fechas, zonas horarias y periodos de tiempo Mane2o de arreglos de datos y colecciones Manipulaci+n de archivos de imgenes ?leatoriedad Ieneraci+n de c+digo Mane2o de idiomas ?uto descripci+n de c+digo Bnteracci+n con el ?(B #in;4 o #indows ?(B. 'ompilaci+n de c+digo sta funcionalidad se encuentra organizada por medio de espacios de nom$res 2errquicos. /a Bi$lioteca de 'lases Base se clasifica, en cuatro grupos claveF ?*(.N! y *ervicios #e$ :M/ #indows 3orms ?9&.N! .N! Common Language Infrastructure l Common Language Infrastructure > CLI E es un a$ierto especificaci+n desarrollada por Microsoft y estandarizado por B*& - D . y 'M? - 4 . que descri$e el c+digo e2ecuta$le y entorno de e2ecuci+n. /a especificaci+n define un entorno que permite a mJltiples lengua2es de alto nivel que se utilizarn en diferentes plataformas de computaci+n sin ser reescrito para arquitecturas espec"ficas. l . N! 3ramework y la li$re y de c+digo a$ierto Mono y (orta$le.N! son implementaciones de la '/B. BCL
El marco NET. Proporciona un conjunto de bibliotecas de clases base que proporcionan las funciones y caractersticas que se pueden utilizar con cualquier lenguaje de programacin que implementa. NET, como Visual Basic, C # (o curso), Visual C + +, etc
La biblioteca de clases base contiene caractersticas de programacin estndar como las colecciones, XML, definiciones de tipo de datos, IO (para la lectura y escritura a los archivos), la reflexin y la globalizacin para nombrar unos pocos. Todas ellas estn incluidas en el espacio de nombres System. Adems, se contienen algunas caractersticas no estndar tales como LINQ, ADO.NET (por interacciones de bases de datos), dibujo capacidades, formas y soporte web.
La siguiente tabla proporciona toda clase de la biblioteca de clases base y una breve descripcin de lo que ofrecen una lista. Base Class Library Espacio de nombres Breve Descripcin Sistema Contiene los fundamentos de la programacin, como el tipo de datos, consola, juego y matrices, etc System.CodeDom Apoya la creacin de cdigo en tiempo de ejecucin y la capacidad para ejecutarlo. System.Collections Contiene Listas, pilas, tablas hash y diccionarios System.ComponentModel Proporciona licencias, controles y capacidades de conversin de tipo System.Configuration Se utiliza para los datos de configuracin del programa de lectura y escritura System.Data Es el espacio de nombres para ADO.NET System.Deployment Actualizacin de las capacidades a travs de ClickOnce System.Diagnostics Proporciona rastreo, registro de contadores de rendimiento, funcionalidad, etc System.DirectoryServices Es el espacio de nombres utilizado para acceder al Directorio Activo System.Drawing Contiene la funcionalidad de GDI + para soporte de grficos System.EnterpriseServices Se utiliza cuando se trabaja con COM + de. NET System.Globalization Apoya la localizacin de programas personalizados System.IO Proporciona conexin al sistema y de la lectura y la escritura a los flujos de datos, como archivos de presentar System.Linq Interfaz con proveedores LINQ y la ejecucin de consultas LINQ System.Linq.Expressions Espacio de nombres que contiene los delegados y las expresiones lambda System.Management Proporciona acceso a la informacin del sistema, como el uso de CPU, espacio de almacenamiento, etc System.Media Contiene mtodos para reproducir sonidos System.Messaging Se utiliza cuando se requieren las colas de mensajes dentro de una aplicacin, reemplazado por WCF System.Net Proporciona acceso a los protocolos de red, tales como SSL, HTTP, SMTP y FTP System.Reflection Capacidad para leer, crear e invocar la informacin de clase. System.Resources Se utiliza cuando la localizacin de un programa en relacin con el soporte de idiomas en los controles de formulario Web Forms o System.Runtime Contiene la funcionalidad que permite que el manejo del comportamiento en tiempo de ejecucin. System.Security Proporciona hash y la posibilidad de crear sistemas de seguridad personalizados mediante polticas y permisos. System.ServiceProcess Se utiliza cuando se requiere un servicio de Windows System.Text Proporciona la clase StringBuilder, adems de capacidades de expresin regular System.Threading Contiene mtodos para gestionar la creacin, sincronizacin y puesta en comn de temas del programa System.Timers Ofrece la posibilidad de provocar eventos o realizar una accin en un plazo determinado temporizador. System.Transactions Contiene mtodos para la gestin de transacciones System.Web Espacio de nombres para las capacidades de ASP.NET, como los Servicios Web y la comunicacin navegador. System.Windows.Forms Espacio de nombres que contiene el interfaz en el API de Windows para la creacin de programas de Windows Forms. System.Xml Proporciona los mtodos para la lectura, la escritura, la bsqueda y el cambio de los documentos y las entidades XML. MSIL o IL (Lenguaje intermedio de Microsoft) MSIL: (lenguaje intermedio de Microsoft) o IL (Lenguaje intermedio) es cdigo mquina independiente generado por marco NET despus de la compilacin de un programa escrito en cualquier idioma por ti!! MSIL o IL es ahora conocido como CIL (Common Intermediate Language). Vamos a ver algunas otras definiciones: MSIL es el conjunto de instrucciones independiente de la "#$ en la que! #rogramas NET %rame&or' se compilan! "ontiene instrucciones para cargar( almacenar( iniciali)ar * mtodos en o+jetos de llamadas! "om+inado con los metadatos * el sistema de tipo com,n( MSIL permite una -erdadera integracin entre lenguajes! .ntes de la ejecucin( MSIL se con-ierte a cdigo mquina! No se interpreta! (Souce MS/N) .l compilar a cdigo administrado( el compilador traduce el cdigo fuente en lenguaje intermedio de Microsoft (MSIL)( que es un conjunto independiente de la "#$ de las instrucciones que se pueden con-ertir de manera eficiente en cdigo nati-o! (%uente MS/N) "ommon Intermediate Language ("IL( que se pronuncia 0sil0 o 0'il0) (anteriormente llamado Lenguaje intermedio de Microsoft o MSIL) es el lenguaje de programacin legi+le ni-el ms +ajo en el "ommon Language Infrastructure * en el! NET %rame&or'! Idiomas que tienen como destino! NET %rame&or' compilan a "IL( que se monta en +*tecode!"IL es un lenguaje ensam+lador orientado a o+jetos( * se +asa apilar1por completo! Se ejecuta por una mquina -irtual! "IL fue originalmente conocido como lenguaje intermedio de Microsoft (MSIL)( durante las -ersiones +eta de los lenguajes! NET! /e+ido a la estandari)acin de " 2 * el "ommon Language Infrastructure( el +*tecode es a3ora conocido oficialmente como "IL! /e+ido a este legado( "IL toda-4a se conoce con frecuencia como MSIL( so+re todo por los usuarios de larga data de los lenguajes! NET! (%uente 5i'ipedia) VERSI!ES !E" # $E VS Visual Basic .NET (VB.NET) es un lenguaje de programacin orientado a objetos ue se puede considerar una e!olucin de Visual Basic implementada sobre el frame"or# .NET. $u introduccin result mu% contro!ertida& %a ue debido a cambios significati!os en el lenguaje VB.NET no es compatible 'acia atr(s con Visual Basic& pero el manejo de las instrucciones es similar a !ersiones anteriores de Visual Basic& facilitando asi el desarollo de aplicaciones mas a!an)adas con 'erramientas modernas. La gran ma%or*a de programadores de VB.NET utili)an el entorno de desarrollo integrado (I+E) ,icrosoft Visual $tudio en alguna de sus !ersiones (Visual $tudio .NET& Visual $tudio .NET -../& Visual $tudio .NET -..0& Visual $tudio .NET -..1)& aunue e2isten otras alternati!as& como $'arp+e!elop (ue adem(s es libre). 3l igual ue con todos los lenguajes de programacin basados en .NET& los programas escritos en VB .NET reuieren el 4rame"or# .NET para ejecutarse. Namespaces Espacio de nombres Este artculo trata sobre el espacio de nombres en programacin. Para los distintos tipos de pginas de Wiipedia! "#ase $%uda&Espacio de nombres. n programaci+n, un espacio de nombres >del ingls namespaceE, en su acepci+n ms simple, es un con2unto de nom$res en el cual todos los nom$res son Jnicos. <n espacio de nom$res es un contenedor a$stracto en el que un grupo de uno o ms identificadores Jnicos pueden e1istir. <n identificador definido en un espacio de nom$res est asociado con ese espacio de nom$res. l mismo identificador puede independientemente ser definido en mJltiples espacios de nom$res, eso es, el sentido asociado con un identificador definido en un espacio de nom$res es independiente del mismo identificador declarado en otro espacio de nom$res. /os lengua2es que mane2an espacio de nom$res especifican las reglas que determinan a qu espacio de nom$res pertenece una instancia de un identificador. (or e2emplo, (edro tra$a2a para la compa0"a : y su nJmero de empleado es D4;. Mar"a tra$a2a para la compa0"a K y su nJmero de empleada tam$in es D4;. /a raz+n por la cual (edro y Mar"a pueden ser identificados con el mismo nJmero de empleado es porque tra$a2an para compa0"as diferentes. 9iferentes compa0"as sim$olizan en este caso diferentes espacios de nom$res. n programas grandes o en documentos no es infrecuente tener cientos o miles de identificadores. /os espacios de nom$res >o tcnicas similares como la emulaci+n de espacios de nom$resE disponen de un mecanismo para ocultar los identificadores locales. (roporcionan los medios para agrupar l+gicamente los identificadores relacionados en sus correspondientes espacios de nom$res, haciendo as" el sistema ms modular. Muchos lengua2es de programaci+n mane2an espacios de nom$res. n algunos lengua2es, como 'HH, ()( o (ython, estos identificadores nom$rando espacios de nom$res estn asociados con un espacio de nom$res que los agrupa. ?s" pues, en estos lengua2es, los espacios de nom$res se pueden anidar formando un r$ol de espacios de nom$res. n la ra"z de este r$ol se encuentra el espacio de nom$res an+nimo glo$al. CLASES Utilidad 5 Este mecanismo permite reutili)ar el cdigo en forma de bibliotecas& ue de otro modo no podr*a usarse. Es frecuente ue diferentes dise6adores de bibliotecas usen los mismos nombres para cosas diferentes& de modo ue resulta imposible integrar esas bibliotecas en la misma aplicacin. 7or ejemplo un dise6ador crea una biblioteca matem(tica con una clase llamada 8Conjunto8 % otro una biblioteca gr(fica ue tambi9n contenga una clase con ese nombre. $i nuestra aplicacin inclu%e las dos bibliotecas& obtendremos un error al intentar declarar dos clases con el mismo nombre. El nombre del espacio funciona como un prefijo para las !ariables& funciones o clases declaradas en su interior& de modo ue para acceder a una de esas !ariables se tiene ue usar el operador de especificador de (mbito (::)& o acti!ar el espacio con nombre adecuado. 7or ejemplo: #include <iostream> namespace uno { int x; } namespace dos { int x; } using namespace uno; int main() { x = 10; dos::x = 30;
std::cout << x << ", " << dos::x << std::endl; std::cin.get(); return 0; } En este ejemplo 'emos usado tres espacios con nombre diferentes: 8uno8& 8dos8 % 8std8. El espacio 8std8 se usa en todas las bibliotecas est(ndar& de modo ue todas las funciones % clases est(ndar se declaran % definen en ese espacio. ;emos acti!ado el espacio 8uno8& de modo ue para acceder a clases est(ndar como cout& tenemos ue especificar el nombre: std::cout. Tambi9n es posible crear un espacio con nombre a lo largo de !arios fic'eros diferentes& de 'ec'o eso es lo ue se 'ace con el espacio std& ue se define en todos los fic'eros est(ndar. Espacios annimos 5 <Espacios con nombre sin nombre= $i nos fijamos en la sinta2is de la definicin de un espacio con nombre& !emos ue el nombre es opcional& es decir& podemos crear espacios con nombre annimos. 7ero& <para u9 crear un espacio annimo= $u uso es >til para crear identificadores accesibles slo en determinadas )onas del cdigo. 7or ejemplo& si creamos una !ariable en uno de estos espacios en un fic'ero fuente concreto& la !ariable slo ser( accesible desde ese punto 'asta el final del fic'ero. namespace Nomre { int !(); char s; void g(int); } namespace { int x = 10; } "" x s#$o se %uede desde este %unto &asta e$ !ina$ de$ !ic&ero "" 'esu$ta inaccesi$e desde cua$(uier otro %unto o !ic&ero namespace Nomre { int !() { return x; } } Este mecanismo nos permite restringir el (mbito de objetos % funciones a un fic'ero determinado dentro de un pro%ecto con !arios fic'eros fuente. $i recordamos el cap*tulo anterior& esto se pod*a 'acer con el especificador static aplicado a funciones o a objetos globales. +e 'ec'o& la especificacin de C?? aconseja usar espacios con nombre annimos para esto& en lugar del especificador static& con el fin de e!itar la confusin ue puede producir este doble uso del especificador. Espacio global 5 Cualuier declaracin 'ec'a fuera de un espacio con nombre pertenece al espacio global. 7recisamente porue las bibliotecas est(ndar declaran todas sus !ariables& funciones& clases % objetos en el espacio std& es necesario usar las nue!as !ersiones de los fic'eros de cabecera est(ndar: 8iostream8& 8fstream8& etc. @ en lo ue respecta a las procedentes de C& 'a% ue usar las nue!as !ersiones ue comien)an por AcA % no tienen e2tensin: 8cstdio8& 8cstdlib8& 8cstring8& etc...8. Todas esas bibliotecas 'an sido rescritas en el espacio con nombre std. $i decidimos usar los fic'eros de cabecera de C en nuestros programas C??& estaremos declarando las !ariables& estructuras % funciones en el espacio global. Espacios anidados 5 Los espacios con nombre tambi9n se pueden anidar: #include <iostream> namespace uno { int x; namespace dos { int x; namespace tres { int x; } } } using std::cout; using std::endl; using uno::x; int main() { /a sentencia <sing. La directiva using seguido de espacio de nombres sirve para asociar el presente nivel de anidamiento con un cierto espacio de nombres para que los objetos y las funciones de ese espacio de nombres pueden ser accesible directamente como si se definieron en el mbito global. <n modo de ahorrarnos tra$a2o, al tener que anteponer nom$res de namespaces a cada una de las clases que utilicemos, es colocar en la ca$ecera de nuestro archivo de c+digo fuente una sentencia using, escri$iendoF using Lespacio de nom$resMN ?s", el compilador $uscara cada clase referenciada en el espacio de nom$res glo$al y en los espacios de nom$res especificados por sentencias using. (or lo tanto, el c+digo de nuestro primer programa ahora podr"a serF
using )*tem; c$ass +$ase1 { static ,oid -ain(string./ args) { +onso$e.0rite1ine("2o$a -undo"); } } 'onsole es una clase que no e1iste en el espacio de nom$res glo$al, sino en el espacio de nom$res *ystem.Iracias a que le hemos indicado al compilador que estamos usando dicho espacio de nom$re, l sa$r que las clases que utilicemos tam$in podr"an estar all". #rite/ine es un mtodo de la clase 'onsole. Oecordemos que para acceder a informaci+n de referencia la B'/ podemos utilizar la ayuda que provee 7isual *tudio, donde estn todos los mtodos y propiedades de la clase'onsole. Ensamblado (Microsoft .NET) n Microsoft .N! framework, un ensamblado D es principalmente una $i$lioteca de c+digo compilado para ser utilizado en instalaciones, versionamiento y seguridad. 1isten 4 tiposF nsam$lados de procesos >:E y $i$liotecas de ensam$lados >9//E. <n ensam$lado de proceso representa un e2ecuta$le que posi$lemente usar clases definidas en ensam$lados de $i$liotecas, o e2ecutar solo c+digo contenido en si mismo. /os ensam$lados de .N! contienen c+digo en lengua2e 'B/, el cual es usualmente generado desde los lengua2es .N! y luego compilados en un motor de e2ecuci+n '/O'ompilaci+n %usto en 2ecuci+n, en ingls just ' in time compiler. No se puede catalogar a .N! como un lengua2e de programaci+n interpretado, algunos autores tienden a catalogarlo como un lengua2e compilado ya que el 'B/ es le"do y compilado por el '/O, con las venta2as del just ' in time <n ensam$lado puede consistir en uno o ms archivos. /os archivos de c+digo son llamados m+dulos. <n ensam$lado puede contener ms de un m+dulo de c+digo y es posi$le utilizar diferentes lengua2es en los diferentes m+dulos para crear el ensam$lado de .N!. 7isual *tudio sin em$argo no soporta utilizar diferentes lengua2es en un ensam$lado, la compilaci+n de ensam$lados de mJltiples lengua2es es necesaria realizarla desde la consola de comandos. (or $uenas prcticas de desarrollo se acostum$ra u$icar una Jnica clase en cada archivo del ensam$lado, pero ca$e recordar que un m+duloN un archivoN puede contener varias clases dentro de l pero no es recomenda$le. /os ensam$lados pueden tener diferentes decoradores que definen el entorno de e2ecuci+n de los mismos '&MH, 9'&M, Oemoting, etc. *entencia condicional <na sentencia condicional es un con2unto de comandos que se e2ecutan si la condici+n especificada es verdadera. %ava*cript soporta dos sentencias condicionalesF i!...e$se y s3itc&. i(...else <tilice la sentencia i! para e2ecutar una sentencia s" la condici+n l+gica es verdadera. <tilice la clusula opcional e$se para e2ecutar una sentencia s" la condici+n es falsa. <na sentencia i! se parece a lo que sigueF if (condicin) sentencia_1 [else sentencia_2] /a condici#n puede ser cualquier e1presi+n que se evalJa como verdadera o falsa. *" la condici#n se evalJa como verdadera, la sentencia41es e2ecutadaN caso contrario, la sentencia45 es e2ecutada. /a sentencia41 y la sentencia45 pueden ser cualquier sentencia, incluyendo el uso de sentencias i! anidadas. <sted tam$in puede componer sentencias utilizando la clusula e$se i! para tener mJltiples condiciones pro$adas en secuencia, tal como sigueF if (condicin) sentencia_1 [else if (condicin_2) sentencia_2] ... [else if (condicin_n_1) sentencia_n_1] [else sentencia_n] (ara e2ecutar mJltiples sentencias, utilice un $loque de sentencias >{ ... }E para agruparlas. n general, es una $uena prctica que siempre utilice los $loques de sentencias, especialmente en c+digo que involucre sentencias i! anidadasF if (condicin) { sentencia_1 } else { sentencia_2 } s recomenda$le no utilizar asignaciones simples en una e1presi+n condicional , de$ido a que una asignaci+n puede ser confundida con la igualdad cuando se da un vistazo al c+digo. (or e2emplo, no utilice el siguiente c+digoF if (x = y) { /* haga las cosas correctas */ } *i usted necesita utilizar una asignaci+n en una e1presi+n condicional, una prctica comJn es poner parntesis adicionales alrededor de la asignaci+n. (or e2emploF if ((x = y)) { /* haga las cosas correctas */ } No de$en confundirse los valores l+gicos primitivos true y !a$se con los valores verdadero y falso de los o$2etos l+gicos o $ooleanos -Boolean o$2ect.. 'ualquier valor que no esF un valor sin definir -unde!ined., nulo -nu$$., cero 0, =no numrico= -NaN., o una cadena vac"a >""E y cualquier o$2eto, incluyendo un o$2eto l+gico cuyo valor es falso, se evalJa como verdadero cuando es pasado por una sentencia condicional. (or e2emploF ar ! = ne" #oolean(false)$ //asigna %n o!&eto lgico con alor ig%al a falso a la aria!le ! if (!) // esta condicin se eal'a co(o erdadera 2emplo n el siguiente e2emplo, la funci+n c&ec67ata retorna verdadero si el nJmero de caracteres en el o$2eto 8ext es tresN caso contrario, se despliega una alerta y se retorna falso. f%nction chec)*ata() { if (doc%(ent.for(1.three+har.al%e.length == ,) { ret%rn tr%e$ } else { alert(-.ngrese exacta(ente tres caracteres. - / doc%(ent.for(1.three+har.al%e / - no es 0lido.-)$ ret%rn false$ } } l e2emplo asume que la ca2a de te1to llamada three'har pertenece al formulario formD. y se utliza =PP= para verificar el tipo de dato. >N.!.E s)itc* <na sentencia s3itc& permite a un programa evaluar una e1presi+n e intenta cote2arla con el valor de la etiqueta de una e1presi+n por casos. *i la coincidencia es encontrada, el programa e2ecuta la sentencia asociada. <na sentencia s3itc& se parece a lo siguienteF s"itch (ex1resin) { case eti2%eta_13 sentencias_1 [!rea)$] case eti2%eta_23 sentencias_2 [!rea)$] ... defa%lt3 sentencias_1or_defecto //defa%lt [!rea)$] } l programa primero $usca por una clusula case con una etiqueta para asociaci+n con el valor de la e1presi+n y luego transfiere el control a aquella clusula, e2ecutando las sentencias asociadas. *i no encuentra una coincidencia con una etiqueta, el programa mira la clusula opcional de!au$t y si la encuentra, transfiere el control a dicha clusula, e2ecutando las sentencias asociadas. *i no es encontrada la clusulade!au$t, el programa continua la e2ecuci+n de la sentencia encontrando el final del s3itc&. (or convenci+n, la clusula de!au$t es la Jltima clusula, pero no es tampoco necesaria que est. CC /a sentencia opcional rea6 asociada con cada clusula de caso -case. asegura que el programa salte fuera del s3itc& una vez que la sentencia coincidente es e2ecutada y continua la e2ecuci+n a la siguiente sentencia despus del switch. *i la la sentencia rea6 es omitida, el programa continua la e2ecuci+n con la siguiente sentencia dentro del s3itc&. 2emploF n el siguiente e2emplo, s" se evalJa ti%o!ruta como =Bananas=, el programa $usca la coincidencia con el valor del caso =Bananas= y e2ecuta la sentencia asociada. 'uando un rea6 es encontrado, el programa termina la sentencia s3itc& y e2ecuta las siguientes sentencias despus dels3itc&. *i un rea6 fuese omitido, la sentencia para el caso ='erezas= de$er"a tam$in ser e2ecutada y evaluada su coincidencia. s"itch (ti1ofr%ta) { case -4aran&as-3 doc%(ent."rite(-5as naran&as est0n a 67.89 la li!ra.:!r;-)$ !rea)$ case -<an=anas-3 doc%(ent."rite(-5as (an=anas est0n a 67.,2 la li!ra.:!r;-)$ !rea)$ case -#ananas-3 doc%(ent."rite(-5as !ananas est0n a 67.>? la li!ra.:!r;-)$ !rea)$ case -+ere=as-3 doc%(ent."rite(-5as cerer=as est0n a 6,.77 la li!ra.:!r;-)$ !rea)$ case -<angos-3 case -@a1ayas-3 doc%(ent."rite(-5os (angos y las 1a1ayas est0n a 62.A9 la li!ra.:!r;-)$ !rea)$ defa%lt3 doc%(ent."rite(-5o sientoB no tene(os - / ti1ofr%ta / -.:!r;-)$ } doc%(ent."rite(-Cxiste algo (0s 2%e deseeD:!r;-)$ *N!N'B?* '&N9B'B&N?/* MQ/!B(/*F switch Como ya se analiz anteriormente, una sentencia if-else posee slo dos alternativas. ic!a sentencia permite a un pro"rama seleccionar entre dos acciones posibles (casos falso y verdadero). E#iste muc!as veces, sin embar"o, la necesidad de incluir en un pro"rama sentencias $ue permitan la seleccin de varias (m%s de dos) alternativas. &ara ello se pueden utilizar sentencias if-else anidadas o m'ltiples sentencias if-else en secuencia, como ya se !a !ec!o con anterioridad. (na alternativa a esto es el uso de la sentencia switch, sentencia de C)) $ue se dise* especialmente para representar una seleccin condicional m'ltiple. Sentencia switch +a forma m%s simple de estudiar la sentencia s,itc! es comenzar con un e-emplo $ue muestre su estructura b%sica. #include <iostream.h> #include<stdlib.h> int main() { int dia; cout<<Dame un numero entero entre 1 y 7 \n; cin>>dia; cout<<\nEl dia corresondiente es !; s"itch(dia) { case 1# cout<<$unes; brea%; case &# cout<<'artes; brea%; case (# cout<<'iercoles; brea%; case )# cout<<*ue+es; brea%; case ,# cout<<-iernes; brea%; case .# cout<</abado; brea%; case 7# cout<<Domin0o; brea%; de1ault# cout<<Error en el numero; 2 cout<<\n; return 3; system(!456/E); 2 Este e-emplo se discuti con anterioridad. +o $ue el pro"rama realiza es pedir un n'mero entero entre . y / y, dependiendo de ese valor, mostrar% en pantalla el nombre de un d0a de la semana. +o primero $ue se escribe en dic!a sentencia es el identificador switch. Cuando se e-ecuta una sentencia s"itch, uno de varias alternativas se e-ecuta. &ara determinar cual de los casos se debe e-ecutar se utiliza lo $ue se conoce como la expresin de control de la sentencia, $ue se escribe entre parntesis. En el e-emplo la e#presin de control es la variable dia. +a e#presin de control escrita entre par1ntesis deber% siempre ser un valor booleano (23+4E o T5(E), un valor entero o un caracter. urante la e-ecucin de la sentencia s"itch, se analiza la e#presin de control para obtener su valor. Cada una de las alternativas de la seleccin m'ltiple se representa por el identificador case se"uido de un valor constante (entero, caracter o booleano) y dos puntos. +o $ue se !ace a continuacin es $ue se compara el valor de la e#presin de control con los valores constantes de los casos de la sentencia. Cuando encuentra el caso cuya constante sea i"ual al valor de la e#presin de control, se e-ecutan las sentencias correspondientes a dic!o caso (!asta encontrar una sentencia brea6). 4i por al"una razn no se encuentra nin"una constante i"ual a la e#presin de control, entonces se e-ecutan las sentencias $ue corresponden al caso default, $ue "eneralmente se escribe al final de la sentencia s,itc! (si 1ste caso no e#istiera, entonces no se e-ecutar0a nin"una de las alternativas). 7bserve $ue los casos de una sentencia s,itc! se escriben entre llaves. Note $ue despu1s de las sentencias de cada caso se tiene una sentencia break. 4i las sentencias brea6 no se incluyeran, entonces al e-ecutarse uno de los casos, la computadora continuar0a e-ecutando las sentencias de todos los casos colocados por deba-o del caso $ue si debe e-ecutarse. +a sentencia brea6 autom%ticamente !ace $ue termine la e-ecucin de la sentencia s,itc!. e acuerdo a la anterior, la sinta#is de la sentencia s,itc! es la si"uiente8 switch(e#presion9de9control) { case constante9.: sentencias9del9caso9.8 break; case constante9:8 sentencias9del9caso9:8 brea6;
case constante9n8 sentencias9del9caso9n8 brea6; default8 sentencias9del9caso9default8 } Este es otro e-emplo de aplicacin de la sentencia s,itc!8 #include <iostream.h> #include<stdlib.h> int main() { char cali1icacion; cout<<Dame la cali1icacion en escala de caracteres \n; cin>>cali1icacion; cout<<\n$a cali1icacion numerica e7ui+alente es !; s"itch(cali1icacion) { case 859# cout<<133; brea%; case 8:9# cout<<;,; brea%; case 8<9# cout<<73; brea%; case 8D9# case 8=9# cout<<>erobatoria. -e a estudiar; brea%; de1ault# cout<<Error en la cali1icacion roorcionada; 2 cout<<\n; return 3; system(!456/E); 2 ESTRUCTURA DE CNTRL RE!ETITI"AS +as estructuras de control repetitivas son a$uellas en las $ue una sentencia o "rupos de sentencias se repiten muc!as veces. Este con-unto de sentencias se denomina bucle (loop). En este capitulo se introducen las estructuras de control repetitivas disponibles en el len"ua-e turbo pascal; asimismo se describen un con-unto de tecnicas para dise*ar al"oritmos y pro"ramas $ue utilicen bucles. <(C+E (na estructura de control $ue permite la recepcion de una serie determinada de sentencias se denominan bucle (lazo o ciclo). El cuerpo del bucle contiene las sentencias $ue se repiten. &ascal proporciona tres estructuras o sentencias de control para especificar la repeticion8 ,!ile, repeat y for. +3 4ENTENC=3 >?=+E +a estructura repetitiva ,!ile (mientras) es a$uella en la $ue el n'mero de interacciones no se conoce por anticipado y el cuerpo del bucle se repite mientras se cumple una determinada condicin. por esta razn, a estos bucles se les denomina bucles condicionales. +3 4ENTENC=3 5E&E3T (na variable de la sentencia ,!ile es la sentencia repeat. (na de las caracter0sticas de los bucles ,!ile-do es $ue la condicin se val'a al principio de cada iteracin, si la condicin es falsa cuando las sentencia comienza, entonces el bucle no se e-ecuta nunca. Esta sentencia tiene una condicional $ue se repite !asta $ue dic!a condicin se !a"a verdadera esta condicin se denomina repeat-until. +3 4ENTENC=3 275 +a sentencia for nos sirve ya $ue con ella se puede e-ecutar un bucle $ue se repita determinado n'mero de veces. Esta sentencia re$uiere $ue conozcamos el numero de veces $ue se desea e-ecutar la sentencia del interior del bucle. 4i no se conoce de antemano el numero de repeticiones es me-or utilizar la sentencia ,!ile o repeat. #$% Arreglos Unidimensionales <n arreglo unidimensional es un tipo de datos estructurado que est formado de una colecci+n finita y ordenada de datos del mismo tipo. s la estructura natural para modelar listas de elementos iguales. l tipo de acceso a los arreglos unidimensionales es el acceso directo, es decir, podemos acceder a cualquier elemento del arreglo sin tener que consultar a elementos anteriores o posteriores, esto mediante el uso de un "ndice para cada elemento del arreglo que nos da su posici+n relativa. (ara implementar arreglos unidimensionales se de$e reservar espacio en memoria, y se de$e proporcionar la direcci+n $ase del arreglo, la cota superior y la inferior. RE!RESENTACIN EN &E&RIA /os arreglos se representan en memoria de la forma siguienteF ' ( arra)*#$$+, of integer (ara esta$lecer el rango del arreglo >nJmero total de elementosE que componen el arreglo se utiliza la siguiente formulaF RAN- . Ls / 0Li1#2 dondeF ls P /"mite superior del arreglo li P /"mite inferior del arreglo (ara calcular la direcci+n de memoria de un elemento dentro de un arreglo se usa la siguiente formulaF A*i, . base0A2 1 *0i/li2 3 4, donde F ? P Bdentificador Jnico del arreglo i P Bndice del elemento li P /"mite inferior w P NJmero de $ytes tipo componente *i el arreglo en el cual estamos tra$a2ando tiene un "ndice numerativo utilizaremos las siguientes f+rmulasF RAN- . ord 0ls2 / 0ord 0li21#2 A*i, . base 0A2 1 *ord 0i2 / ord 0li2 3 4, #$5 Arreglos 6idimensionales ste tipo de arreglos al igual que los anteriores es un tipo de dato estructurado, finito ordenado y homogneo. l acceso a ellos tam$in es en forma directa por medio de un par de "ndices. /os arreglos $idimensionales se usan para representar datos que pueden verse como una ta$la con filas y columnas. /a primera dimensi+n del arreglo representa las columnas, cada elemento contiene un valor y cada dimensi+n representa una relaci+n /a representaci+n en memoria se realiza de dos formas F almacenamiento por columnas o por renglones. (ara determinar el nJmero total de elementos en un arreglo $idimensional usaremos las siguientes f+rmulasF RAN- DE REN-LNES 0R#2 . Ls# / 0Li#1#2 RAN- DE CLU&NAS 0R%2 . Ls% / 0Li%1#2 No$ TTAL DE C&!NENTES . R# 3 R% RE!RESENTACIN EN &E&RIA !R CLU&NAS ' ( arra) *#$$+7#$$8, of integer (ara calcular la direcci+n de memoria de un elemento se usan la siguiente formulaF A*i7j, . base 0A2 1 *00j / li%2 R# 1 0i 1 li#2234, RE!RESENTACIN EN &E&RIA !R REN-LNES ' ( arra) *#$$+7#$$8, of integer (ara calcular la direcci+n de memoria de un elemento se usan la siguiente formulaF A*i7j, . base 0A2 1 *00i / li#2 R% 1 0j 1 li%2234, dondeF i P Bndice del rengl+n a calcular 2 P Bndice de la columna a calcular liD P /"mite inferior de renglones li4 P /"mite inferior de columnas w P NJmero de $ytes tipo componente parmetros de tipo de valor (Gua de programacin de C#) Una variable de tipo de valor contiene directamente los datos, a diferencia de una variable de tipo de referencia, que contiene una referencia a los datos. asar una variable de tipo de valor a un m!todo por valor significa pasar una copia de la variable al m!todo. Cualquier cambio en el parmetro que tenga lugar dentro del m!todo no tiene ning"n efecto en los datos originales almacenados en la variable de argumento. #i desea que el m!todo denominado para cambiar el valor del parmetro, debe pasarlo por referencia, mediante la palabra clave de referencia o de out . ara simplificar, los siguientes e$emplos utili%an ref. &ipos de referencia ' de valor ((isual C# )*press) + diferencia de algunos lengua$es de programacin con los que puede estar familiari%ado, C# tiene dos variedades de tipos de datos, valor ' referencia. )s importante saber la diferencia si el rendimiento es esencial para la aplicacin o si se est interesado en cmo C# administra los datos ' la memoria. Cuando se declara una variable utili%ando uno de los tipos de datos integrados bsicos o una estructura definida por el usuario, !ste es un tipo de valor. Una e*cepcin es el tipo de datos string, que es un tipo de referencia. Un tipo de valor almacena su contenido en la memoria asignada en la pila. or e$emplo, en este caso el valor -. se almacena en un rea de memoria denominada pila., C# int x = 95; Cuando la variable x queda fuera de mbito, porque en el m!todo en que se defini /a finali%ado la e$ecucin, el valor se descarta de la pila. Utili%ar la pila es efica%, pero el perodo limitado de duracin de los tipos de valores los /ace menos adecuados para compartir los datos entre las diferentes clases. or el contrario, un tipo de referencia, como una instancia de una clase o matri%, se asigna en un rea diferente de memoria llamada 0montn0. )n el e$emplo siguiente, el espacio requerido para los die% enteros que constitu'en la matri% se asigna en el montn. C# int./ numers = ne3 int.10/; )sta memoria no se devuelve al montn cuando finali%a un m!todo1 slo se reclama cuando el sistema de recoleccin de elementos no utili%ados de C# determina que 'a no la necesita. 2a' una sobrecarga ma'or al declarar los tipos de referencia, pero !stos tienen la venta$a de ser accesibles desde otras clases. M%todos con retorno $n mtodo -uel-e al cdigo del que se llam en el momento en el que alguna de estas circunstancias se de: 1 se completan todas las sentencias del mtodo( 1 llega a una sentencia retorno o 1 lan)a una e6cepcin( El tipo de retorno de un mtodo se especifica en la declaracin del mtodo! /entro del cuerpo del mtodo( se utili)a la sentencia return para de-ol-er el -alor! "ualquier mtodo que est declarado como -oid( no de-ol-er ning,n -alor! Si se intenta de-ol-er un -alor desde un mtodo declarado -oid( aparecer un error de compilacin! "ualquier mtodo que no sea declarado -oid( de+er contener una sentencia return con su correspondiente -alor de retorno7 return ,a$or'etorno; El tipo de dato del -alor de retorno de+er coincidir con el tipo de retorno de la declaracin del mtodo! No se puede retornar un -alor integer( a un mtodo en el que en su declaracin aparece como -alor de retorno( un +oolean! %ac6age com.edu9:a,a.8utoria$11; im%ort :a,a.uti$.)canner; %u$ic c$ass 8utoria$11 { %u$ic static ,oid main()tring./ args) { int./ arra* = ne3 int.;/; )canner scanner = ne3 )canner()*stem.in); insertar7atos<rra*(arra*, scanner); sumar<rra*(arra*); int max = max<rra*(arra*); )*stem.out.%rint$n("-ax= " = max); dou$e %romedio = %romedio<rra*(arra*); )*stem.out.%rint$n(">romedio= " = %romedio); } %ri,ate static ,oid insertar7atos<rra*(int./ arra*, )canner scanner) { !or (int i = 0; i < arra*.$engt&; i==) { )*stem.out.%rint("insertar arra*." = i = "/:"); arra*.i/ = scanner.next?nt(); } } %ri,ate static ,oid sumar<rra*(int./ arra*) { )*stem.out.%rint(")uma: "); int acumu$ador = 0; !or (int i = 0; i < arra*.$engt&; i==) { acumu$ador = acumu$ador = arra*.i/; )*stem.out.%rint("=" = arra*.i/); } )*stem.out.%rint$n("= " = acumu$ador); } %ri,ate static int max<rra*(int./ arra*) { int max = 0; !or (int i = 0; i < arra*.$engt&; i==) { i! (arra*.i/ > max) { max = arra*.i/; } } return max; } %ri,ate static dou$e %romedio<rra*(int./ arra*) { dou$e %romedio = 0; !or (int i = 0; i < arra*.$engt&; i==) { %romedio = %romedio = arra*.i/; } %romedio = %romedio " arra*.$engt&; return %romedio; } } Tipos de 5ecursin 5ecursividad simple8 3$uella en cuya definicin slo aparece una llamada recursiva. 4e puede cambiar a una funcin con ciclo iterativo. 5ecursividad m'ltiple8 4e da cuando !ay m%s de una llamada a s0 misma dentro del cuerpo de la funcin 5ecursividad anidada8 En al"unos de los ar"umentos de la llamada recursiva !ay una nueva llamada a s0 misma. 5ecursividad cruzada o indirecta8 4on al"oritmos donde una funcin provoca una llamada a s0 misma de forma indirecta, a trav1s de otras funciones. $obrecarga Sobrecarga es la capacidad de un lengua2e de programaci+n, que permite nom$rar con el mismo identificador diferentes varia$les u operaciones. n programaci+n orientada a o$2etos la so$recarga se refiere a la posi$ilidad de tener dos o ms funciones con el mismo nom$re pero funcionalidad diferente. s decir, dos o ms funciones con el mismo nom$re realizan acciones diferentes. l compilador usar una u otra dependiendo de los parmetros usados. ? esto se llama tam$in so$recarga de funciones. !am$in e1iste la so$recarga de operadores que al igual que con la so$recarga de funciones se le da ms de una implementaci+n a un operador. l mismo mtodo dentro de una clase permite hacer cosas distintas en funci+n de los parmetros. %ava no permite al programador implementar sus propios operadores so$recargados, pero s" utilizar los predefinidos como el H. R 'HH, por el contrario si permite hacerlo. Ejemplo <rticu$o.:a,a-editar. public class <rticu$o { private float %recio; public void set>recio() { %recio = 3.;0; } public void set>recio(float nue,o>recio) { %recio = nue,o>recio; } }