Sei sulla pagina 1di 45

Manual Primer Parcial LP2

ndice general

1 Clase (informtica) 1
1.1 Componentes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.1.1 Campos de datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.1.2 Mtodos en las clases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.1.3 Propiedades . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.2 Vase tambin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2

2 Atributo (informtica) 3
2.1 Vase tambin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3

3 Tipo de dato elemental 4

4 Tipo de dato 5
4.1 Tipos de datos primitivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
4.1.1 Caracteres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
4.1.2 Numricos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
4.1.3 Booleanos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
4.2 Variables en distintos lenguajes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
4.2.1 Pauscal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
4.3 Referencias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
4.4 Vase tambin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

5 Common Language Runtime 7


5.1 Vase tambin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
5.2 Referencias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

6 Infraestructura de lenguaje comn 9


6.1 Vase tambin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

7 Microsoft .NET 11
7.1 Consideraciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
7.2 Componentes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

i
ii NDICE GENERAL

7.3 Common Language Runtime . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12


7.3.1 Caractersticas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
7.4 Estandarizacin y licenciamiento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
7.5 El futuro de .NET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
7.6 Biblioteca de Clases Base de .NET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
7.7 Ensamblados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
7.8 Versiones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
7.9 Vase tambin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
7.10 Referencias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
7.11 Enlaces externos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14

8 ADO.NET 15
8.1 Arquitectura . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
8.1.1 Data provider . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
8.1.2 DataSets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
8.2 ADO.NET y Visual Studio .NET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
8.3 ADO.NET Entity Framework . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
8.4 ADO.NET Data Services . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
8.5 Vase tambin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
8.6 Enlaces externos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

9 Diagrama de clases 18
9.1 Miembros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
9.1.1 Visibilidad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
9.1.2 mbitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
9.2 Relaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
9.2.1 Relaciones a nivel de instancia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
9.3 Diagramas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

10 C Sharp 20
10.1 Historia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
10.2 Tipos de datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
10.3 Literales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
10.4 Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
10.5 Constantes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
10.6 Operadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
10.7 Instrucciones de control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
10.8 Mtodos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
10.9 Matrices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
NDICE GENERAL iii

10.10Clases y objetos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
10.11Cadenas de caracteres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
10.12Ejemplos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
10.13Compiladores e IDEs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
10.14Metas del diseo del lenguaje . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
10.15Referencias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
10.16Enlaces externos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
10.16.1 En castellano . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
10.16.2 En ingls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26

11 Espacio de nombres 27
11.1 Vase tambin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27

12 Microsoft Developer Network 28


12.1 Software Suscripciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
12.2 Servicio de informacin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
12.3 MSDN Magazine . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
12.4 MSDN Blogs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
12.5 Siguiente versin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
12.6 Enlaces externos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

13 MSDN Library 31
13.1 La integracin con Visual Studio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
13.2 Versiones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
13.3 Vase tambin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
13.4 Referencias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
13.5 Enlaces externos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32

14 Programacin orientada a objetos 33


14.1 Introduccin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
14.2 Origen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
14.3 Conceptos fundamentales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
14.4 Caractersticas de la POO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
14.5 Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
14.6 Algunos lenguajes orientados a objetos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
14.7 Vase tambin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
14.8 Notas y referencias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
14.9 Enlaces externos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
14.10Texto e imgenes de origen, colaboradores y licencias . . . . . . . . . . . . . . . . . . . . . . . . . . 38
14.10.1 Texto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
iv NDICE GENERAL

14.10.2 Imgenes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
14.10.3 Licencia de contenido . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
Captulo 1

Clase (informtica)

cas para proporcionar encapsulacin, como especicadores


de acceso.
Una clase tambin puede tener una representacin (metaob-
jeto) en tiempo de ejecucin, que proporciona apoyo en
tiempo de ejecucin para la manipulacin de los metada-
tos relacionados con la clase.

1.1 Componentes
Las clases se componen de elementos, llamados genrica-
mente miembros, de varios tipos:

campos de datos: almacenan el estado de la clase por


medio de variables, estructuras de datos e incluso otras
clases.
mtodos: subrutinas de manipulacin de dichos datos.
ciertos lenguajes permiten un tercer tipo de miembro:
las propiedades, a medio camino entre los campos
y los mtodos.

Utilizando un smil con el lenguaje, si las clases representan


Ejemplos de clases sustantivos, los campos de datos pueden ser sustantivos o
adjetivos, y los mtodos son los verbos.
En informtica, una clase es una plantilla para la creacin La sintaxis tpica de una clase es:
de objetos de datos segn un modelo predenido. Las clases
se utilizan para representar entidades o conceptos, como los class Nombre { // Variables miembro (habitualmente
sustantivos en el lenguaje. Cada clase es un modelo que de- privadas) miembro_1; //lista de miembros miembro_2;
ne un conjunto de variables -el estado, y mtodos apropia- miembro_3; // Funciones o mtodos (habitualmente
dos para operar con dichos datos -el comportamiento. Cada pblicas) funcion_miembro_1( ); // funciones miembro
objeto creado a partir de la clase se denomina instancia de conocidas funcion_miembro_2 ( ); // funciones como
la clase. mtodos // Propiedades (habitualmente pblicas) propie-
dad_1; propiedad_2; propiedad_3; propiedad_4; }
Las clases son un pilar fundamental de la programacin
orientada a objetos. Permiten abstraer los datos y sus ope-
raciones asociadas al modo de una caja negra. Los len-
guajes de programacin que soportan clases dieren sutil- 1.1.1 Campos de datos
mente en su soporte para diversas caractersticas relacio-
nadas con clases. La mayora soportan diversas formas de Los campos de datos se utilizan para contener datos que
herencia. Muchos lenguajes tambin soportan caractersti- reejan el estado de la clase. Los datos pueden estar alma-

1
2 CAPTULO 1. CLASE (INFORMTICA)

cenados en variables, o estructuras ms complejas, como


structs, uniones e incluso otras clases.
Habitualmente, las variables miembro son privadas al ob-
jeto (siguiendo las directrices de diseo del Principio de
ocultacin) y su acceso se realiza mediante propiedades o
mtodos que realizan comprobaciones adicionales.

1.1.2 Mtodos en las clases


Los mtodos implementan la funcionalidad asociada al ob-
jeto. Los mtodos son el equivalente a las funciones en
programacin estructurada. Se diferencian de ellos en que
es posible acceder a las variables de la clase de forma im-
plcita.
Cuando se desea realizar una accin sobre un objeto, se dice
que se le manda un mensaje invocando a un mtodo que
realizar la accin.

1.1.3 Propiedades
Las propiedades son un tipo especial de mtodos. Debido
a que suele ser comn que las variables miembro sean pri-
vadas para controlar el acceso y mantener la coherencia,
surge la necesidad de permitir consultar o modicar su valor
mediante pares de mtodos: GetVariable y SetVariable.
Los lenguajes orientados a objetos ms modernos (por
ejemplo Java o C#) aaden la construccin de propiedad,
que es una sintaxis simplicada para dichos mtodos:
tipo Propiedad { get { } set { } }

1.2 Vase tambin


Estructura de datos.

Union (programacin).
Captulo 2

Atributo (informtica)

En computacin, un atributo es una especicacin que de- las mismas operaciones (por muy similares que sean,
ne una propiedad de un Objeto, elemento o archivo. Tam- estos son todos formatos de datos de grcos) como
bin puede referirse o establecer el valor especco para una un archivo BMP o PNG, ni es un nmero de coma o-
instancia determinada de los mismos. tante operado por las normas aplicadas al los enteros
Sin embargo, actualmente, el trmino atributo puede y con largos.
frecuencia se considera como si fuera una propiedad depen-
diendo de la tecnologa que se use. Por ejemplo, en computacin grca los objetos de pla-
nos pueden tener atributos tales como espesor (con valo-
Para mayor claridad, los atributos deben ser considerados res reales), color (con valores descriptivos como el marrn
ms correctamente como metadatos. Un atributo es con fre- o verde o los valores denidos en un cierto modelo de co-
cuencia y en general una caracterstica de una propiedad. lor, como RGB), etc Un objeto crculo se puede denir con
Un buen ejemplo es el proceso de asignacin de valores atributos similares, como un origen y radio.
XML a las propiedades (elementos). Tenga en cuenta que el Lenguajes de marca, como HTML y XML, utilizan los atri-
valor del elemento se encuentra antes de la etiqueta de cierre butos para describir los datos y el formato de los datos.
(por separado), no en el propio elemento. El mismo elemen-
to puede tener una serie de atributos establecidos (Nombre
= estoesunapropiedad).
2.1 Vase tambin
Si el elemento en cuestin puede ser considerado una pro-
piedad (Nombre_Cliente) de otra entidad (digamos clien-
Campo (informtica)
te), el elemento puede tener cero o ms atributos (propie-
dades) de su propio (Nombre_Cliente es de Tipo = tipo- HTML
texto).
Un atributo de un objeto por lo general consiste de un nom-
bre y un valor; de un elemento, un tipo o nombre de clase;
de un archivo, un nombre y extensin.

Cada atributo nombrado tiene asociado un conjunto


de reglas denominadas operaciones: uno no agrega ca-
racteres o manipula y procesa una matriz de enteros
como una imagen ni procesa texto como tipo de coma
otante (nmeros decimales).

Por tanto, una denicin de objeto se puede ampliar


mediante la imposicin de tipos de datos: un forma-
to de representacin, un valor por defecto, y las ope-
raciones legales (normas) y restricciones ("Divisin
por cero no est permitida!") Son todos los que po-
dran participar en la denicin un atributo, o por el
contrario, se puede decir que son atributos de ese tipo
de objeto. Un archivo JPEG no es decodicado por

3
Captulo 3

Tipo de dato elemental

Se llama tipo primitivo o tipo elemental a los tipos de


datos originales de un lenguaje de programacin, esto es,
aquellos que nos proporciona el lenguaje y con los que po-
demos (en ocasiones) construir tipos de datos abstractos y
estructuras de datos.
Generalmente ejemplos de tipos primitivos son:

Char (Carcter)
Int (Entero)

Float (Real - Coma otante)

Otros tipos de datos que pueden ser considerados primiti-


vos ya que la mayora de lenguajes de programacin as los
proporcionan (aunque no todos) son:

Booleano (Lgico: Verdadero, Falso)


String (Cadena de caracteres)

Puntero (Direccin de memoria - Int)

4
Captulo 4

Tipo de dato

Tipo de dato informtico es un atributo de una parte de usa informacin de los tipos de datos para comprobar la
los datos que indica al ordenador (y/o al programador) al- vericacin de los programas que acceden o manipulan los
go sobre la clase de datos sobre los que se va a procesar. datos.
Esto incluye imponer restricciones en los datos, como qu
valores pueden tomar y qu operaciones se pueden realizar.
Los tipos de datos comunes son: enteros, nmeros de coma
otante (decimales), cadenas alfanumricas, fechas, horas, 4.1 Tipos de datos primitivos
colores, etc.
Por ejemplo, por lo general el tipo int representa un Los tipos de datos hacen referencia al tipo de informacin
conjunto de enteros de 32 bits cuyo rango va desde el que se trabaja, donde la unidad mnima de almacenamiento
2.147.483.648 al 2.147.483.647, as como las operacio- es el dato, tambin se puede considerar como el rango de
nes que se pueden realizar con los enteros, como son la su- valores que puede tomar una variable durante la ejecucin
ma, la resta, y la multiplicacin. Los colores, por su parte, del programa.
se representan como tres bytes denotando la cantidad de ro-
jo, verde y azul, y una cadena de caracteres representando
el nombre del color; las operaciones permitidas en este caso 4.1.1 Caracteres
incluyen la adicin y la sustraccin, pero no la multiplica-
cin. El tipo de dato carcter es un dgito individual el cual se
ste es un concepto propio de la informtica, ms espec- puede representar como numricos (0 al 9), letras (a-z) y
camente de los lenguajes de programacin, aunque tam- smbolos (!"$&/\).
bin se encuentra relacionado con nociones similares de la Nota: En el lenguaje java la codicacin Unicode permite
matemtica y la lgica. trabajar con todos los caracteres de distintos idiomas.

En un sentido amplio, un tipo de datos dene un conjunto Tipo de dato Rango Tamao de bits char 0 a 6553516 bits
de valores y las operaciones sobre estos valores. Casi to-
dos los lenguajes de programacin explcitamente incluyen
la notacin del tipo de datos, aunque lenguajes diferentes 4.1.2 Numricos
pueden usar terminologas diferentes. La mayor parte de
los lenguajes de programacin permiten al programador de- Este tipo de dato puede ser real o entero, dependiendo del
nir tipos de datos adicionales, normalmente combinando tipo de dato que se vaya a utilizar.
mltiples elementos de otros tipos y deniendo las opera-
Enteros: son los valores que no tienen punto decimal, pue-
ciones del nuevo tipo de dato. Por ejemplo, un programador
den ser positivos o negativos y el cero.
puede crear un nuevo tipo de dato llamado Persona que
especca que el dato interpretado como Persona incluir, Tipo de dato: byte tamao = 8 bits Tipo de dato: short ta-
por ejemplo, un nombre y una fecha de nacimiento. mao = 16 bits Tipo de dato: int tamao = 32 bits Tipo de
dato: long tamao = 64 bits
Un tipo de dato puede ser tambin visto como una limita-
cin impuesta en la interpretacin de los datos en un sistema Reales: estos caracteres almacenan nmeros muy grandes
de tipicacin, describiendo la representacin, la interpre- que poseen parte entera y parte decimal.
tacin y la estructura de los valores u objetos almacena- Tipo de dato: oat tamao = 32 bits Tipo de dato: double
dos en la memoria del ordenador. El sistema de tipicacin tamao = 64 bits

5
6 CAPTULO 4. TIPO DE DATO

4.1.3 Booleanos
Este tipo de dato se emplea para valores lgicos, los pode-
mos denir como datos comparativos dicha comparacin
devuelve resultados lgicos (Verdadero o Falso).
Tipo de dato: boolean tamao = 8 bits

4.2 Variables en distintos lenguajes

4.2.1 Pauscal
El lenguaje de programacin Pauscal permite declarar va-
riables de tipo caracter (Cadena) y numrica. Como se
puede apreciar, todas las variables excepto la de tipo Ca-
dena son de tipo numricas (incluyendo Booleano).

4.3 Referencias
Luca Cardelli, Peter Wegner. On Understanding Ty-
pes, Data Abstraction, and Polymorphism, from Com-
puting Surveys, (December, 1985)

4.4 Vase tambin


Diccionario de datos
Sistema de tipicacin para las diferentes formas de
tipos de datos en lenguajes de programacin
Representacin de datos
Captulo 5

Common Language Runtime


Source code Bytecode Native code
La manera en que la maquina virtual se relaciona con el
C#
C# compiler CLR permite a los programadores ignorar muchos deta-
lles especcos del microprocesador que estar ejecutando
VB.NET compiler CLR el programa. El CLR tambin permite otros servicios im-
VB.NET MSIL code Native code
portantes, incluyendo los siguientes:
Other .NET Other compiler
language
Administracin de la memoria

Administracin de hilos
Compile time Runtime

Manejo de excepciones

Recoleccin de basura
El Common Language Runtime o CLR [1] (entorno en
tiempo de ejecucin de lenguaje comn) es un entorno de Seguridad
ejecucin para los cdigos de los programas que corren so-
bre la plataforma Microsoft .NET. El CLR es el encarga-
do de compilar una forma de cdigo intermedio llamada
Common Intermediate Language (CIL, anteriormente co- 5.1 Vase tambin
nocido como MSIL, por Microsoft Intermediate Langua-
ge), al cdigo de maquina nativo, mediante un compilador Microsoft .NET
en tiempo de ejecucin.[2] No debe confundirse el CLR con
una mquina virtual, ya que una vez que el cdigo est com- Common Language Infrastructure
pilado, corre nativamente sin intervencin de una capa de
abstraccin sobre el hardware subyacente. Es una imple- Common Intermediate Language
mentacin del estndar Common Language Infrastructure
Mquina virtual Parrot
(CLI).
Los desarrolladores que usan CLR escriben el cdigo fuente Java virtual machine
en un lenguaje compatible con .NET, como C# o Visual Ba-
sic .NET. En tiempo de compilacin, un compilador .NET Portable.NET
convierte el cdigo a CIL. En tiempo de ejecucin, el com- Mono
pilador del CLR convierte el cdigo CIL en cdigo nativo
para el sistema operativo. Alternativamente, el cdigo CIL Metadato
es compilado a cdigo nativo en un proceso separado ante-
rior a la ejecucin. Esto acelera las posteriores ejecuciones Tiempo de ejecucin
del software debido a que la compilacin de MSIL a nativo
ya no es necesaria. Common Type System
A pesar de que algunas implementaciones del Common Mquina virtual
Language Infrastructure se ejecutan en sistemas operativos
que no sean Windows, el CLR se ejecuta solo en Microsoft Conceptos de programacin en CLR Disponible tra-
Windows. duccin automtica en espaol.

7
8 CAPTULO 5. COMMON LANGUAGE RUNTIME

5.2 Referencias
[1] Barillas, Oscar. [www.wikipedia.org/wiki/Oscar_barillas
Common Language Runtime] |url= incorrecta (ayuda).

[2] Managed Execution Process (en ingls). Consultado el 18


de marzo de 2011.

Visin general, en ingls (Microsoft MSDN)

Standard ECMA-335, Common Language Infras-


tructure (CLI). ECMA International. Consultado
el 17 Ago|fechaacceso= y |Aoacceso= redundantes
(ayuda).
Captulo 6

Infraestructura de lenguaje comn

en el ao 2000. Luego de un ao de trabajo conjunto entre


ECMA, Microsoft y otras empresas que co-patrocinaron el
proceso (Intel, HP, IBM y Fujitsu entre otras), el estndar
ECMA-335 que dene el entorno CLI nalmente vio la luz
en diciembre de 2001. En abril del ao 2003 ISO ratic
este estndar con el denominacin ISO/IEC 23271:2003 .
Para comprender mejor la inclusin de cada una de las par-
tes principales de la arquitectura de CLI es interesante ana-
lizar los objetivos de diseo que se plantearon desde su con-
cepcin. Segn su especicacin, la arquitectura de CLI de-
be:

Permitir escribir componentes nteroperables inde-


pendientemente de la plataforma subyacente y del
lenguaje de programacin utilizado.

Exponer todas las entidades programticas a travs de


un nico sistema unicado de tipos (en la especica-
cin, este sistema es conocido como CTS, o Common
Type System).

Representacin visual, en ingls, de la infraestructura de lenguaje Empaquetar todos los tipos en unidades completamen-
comn. te auto descriptivas y portables.

Cargar los tipos de forma tal que se encuentren ais-


La infraestructura de lenguaje comn (en ingls Com- lados unos de otros en tiempo de ejecucin, pero que
mon Language Infrastructure o CLI) es una especicacin puedan a su vez compartir recursos.
estandarizada que describe un entorno virtual para la eje-
cucin de aplicaciones, cuya principal caracterstica es la Resolver dependencias entre tipos en tiempo de eje-
de permitir que aplicaciones escritas en distintos lenguajes cucin usando una poltica exible que pueda tener en
de alto nivel puedan luego ejecutarse en mltiples platafor- cuenta la versin, atributos de localizacin y polticas
mas tanto de hardware como de software sin necesidad de administrativas.
reescribir o recompilar su cdigo fuente.
Ejecutar aplicaciones bajo la supervisin de un en-
Si bien el CLI tuvo sus orgenes en Microsoft (en principio torno privilegiado que permita controlar y hacer cum-
se pensaba desarrollar un entorno de ejecucin comparti- plir polticas en tiempo de ejecucin.
do para COM con el nombre de Common Object Runtime,
que luego se extendi y generaliz para dar lugar a CLI), Disear toda la infraestructura y servicios basndose
sus especicaciones fueron llevadas ante ECMA (European en metadatos extensibles, de manera tal que toda la
Computer Manufacturers Association), una importante or- arquitectura pueda acomodarse con poco impacto a
ganizacin europea de estndares, para su estandarizacin nuevas incorporaciones y cambios.

9
10 CAPTULO 6. INFRAESTRUCTURA DE LENGUAJE COMN

Poder realizar tareas de bajo nivel, como carga de ti-


pos en memoria, enlace con libreras y compilacin a
cdigo nativo slo cuando sea necesario (este enfoque
se conoce tpicamente como on demand, o just in
time).

Proveer una serie de funcionalidades comunes me-


diante un grupo de libreras de programacin que los
desarrolladores puedan utilizar para construir sus apli-
caciones.

Microsoft .NET de hecho es un sper conjunto de esta espe-


cicacin, es decir, provee todo lo necesario para cumplir
con la misma y adems agrega una serie de herramientas,
libreras y funcionalidades no contempladas por ella origi-
nalmente y que proveen una enorme utilidad y exibilidad
a los desarrolladores (por ejemplo, libreras para la crea-
cin de aplicaciones y servicios web, acceso a motores de
bases de datos, controles grcos, herramientas para des-
ensamblar assemblies, debuggers, etc.). Si bien es gratuito,
su cdigo fuente no es abierto, y es distribuido por Micro-
soft en versiones para sistemas operativos Windows 98 y
sus sucesores nicamente.
La especicacin del CLI est formada por cuatro partes:

Sistema comn de tipos, en ingls Common Type Sys-


tem (CTS).

Metadatos.
Especicaciones de lenguaje comn, en ingls Com-
mon Language Specication (CLS).
Sistema de ejecucin virtual, del ingls Virtual Execu-
tion System (VES).

6.1 Vase tambin


Microsoft .NET

ECMA
Captulo 7

Microsoft .NET

.NET es un framework de Microsoft que hace un nfasis biblioteca de clases base (BCL por sus siglas en ingls, tal
en la transparencia de redes, con independencia de plata- vez el ms importante de los componentes de la platafor-
forma de hardware y que permita un rpido desarrollo de ma), dene un conjunto funcional mnimo que debe imple-
aplicaciones. Basado en ella, la empresa intenta desarrollar mentarse para que el marco de trabajo sea soportado por un
una estrategia horizontal que integre todos sus productos, sistema operativo. Aunque Microsoft implement esta nor-
desde el sistema operativo hasta las herramientas de mer- ma para su sistema operativo Windows, la publicacin de
cado. la norma abre la posibilidad de que sea implementada para
cualquier otro sistema operativo existente o futuro, permi-
.NET podra considerarse una respuesta de Microsoft al
creciente mercado de los negocios en entornos Web, como tiendo que las aplicaciones corran sobre la plataforma inde-
pendientemente del sistema operativo para el cual haya sido
competencia a la plataforma Java de Oracle Corporation y a
los diversos framework de desarrollo web basados en PHP. implementada. El Proyecto Mono emprendido por Ximian
pretende realizar la implementacin de la norma para varios
Su propuesta es ofrecer una manera rpida y econmica, a
la vez que segura y robusta, de desarrollar aplicaciones o sistemas operativos adicionales bajo el marco del cdigo
como la misma plataforma las denomina, soluciones per- abierto.
mitiendo una integracin ms rpida y gil entre empresas
y un acceso ms simple y universal a todo tipo de informa-
cin desde cualquier tipo de dispositivo. 7.2 Componentes
Los principales componentes del marco de trabajo son:
7.1 Consideraciones
El conjunto de lenguajes de programacin.
La plataforma .NET de Microsoft es un componente La biblioteca de clases base o BCL.
de software que puede ser aadido al sistema operativo
Windows. Provee un extenso conjunto de soluciones pre- El entorno comn de ejecucin para lenguajes, o CLR
denidas para necesidades generales de la programacin de por sus siglas en ingls.
aplicaciones, y administra la ejecucin de los programas es-
critos especcamente con la plataforma. Esta solucin es Debido a la publicacin de la norma para la infraestruc-
el producto principal en la oferta de Microsoft, y pretende tura comn de lenguajes (CLI por sus siglas en ingls),
ser utilizada por la mayora de las aplicaciones creadas para el desarrollo de lenguajes se facilita, por lo que el marco
la plataforma Windows. de trabajo .NET soporta ya ms de 20 lenguajes de progra-
.NET Framework se incluye en Windows Server 2008, macin y es posible desarrollar cualquiera de los tipos de
Windows Vista y Windows 7. De igual manera, la ver- aplicaciones soportados en la plataforma con cualquiera de
sin actual de dicho componente puede ser instalada en ellos, lo que elimina las diferencias que existan entre lo que
Windows XP, y en la familia de sistemas operativos era posible hacer con uno u otro lenguaje.
Windows Server 2003. Una versin reducida de .NET Algunos de los lenguajes desarrollados para el marco de tra-
Framework est disponible para la plataforma Windows bajo .NET son: C#, Visual Basic .NET, Delphi (Object Pas-
Mobile, incluyendo telfonos inteligentes. cal), C++, F#, J#, Perl, Python, Fortran, Prolog (existen al
La norma (incluido en ECMA-335, ISO/IEC 23271) que menos dos implementaciones, el P#[1] y el Prolog.NET[2] ),
dene el conjunto de funciones que debe implementar la Cobol y PowerBuilder.

11
12 CAPTULO 7. MICROSOFT .NET

7.3 Common Language Runtime Compilador MSIL a nativo: transforma cdigo inter-
medio de alto nivel independiente del hardware que lo
ejecuta a cdigo de mquina propio del dispositivo que
lo ejecuta.
Administrador de cdigo: coordina toda la operacin
de los distintos subsistemas del Common Language
Runtime.
Recolector de basura: elimina de memoria objetos no
utilizados automticamente.
Motor de seguridad: administra la seguridad del cdi-
go que se ejecuta.
Motor de depuracin: permite hacer un seguimiento
de la ejecucin del cdigo an cuando se utilicen len-
guajes distintos.
Vericador de tipos: controla que las variables de la
Estructura interna del entorno de ejecucin en lenguaje comn.
aplicacin usen el rea de memoria que tienen asigna-
El CLR es el verdadero ncleo del framework de .NET, do.
entorno de ejecucin en el que se cargan las aplicaciones Administrador de excepciones: maneja los errores que
desarrolladas en los distintos lenguajes, ampliando el con- se producen durante la ejecucin del cdigo.
junto de servicios del sistema operativo (W2k y W2003).
Permite integrar proyectos en distintos lenguajes soporta- Soporte de multiproceso (hilos): permite desarrollar
dos por la plataforma .Net, como C++, Visual Basic, C#, aplicaciones que ejecuten cdigo en forma paralela.
entre otros.
Empaquetador de COM: coordina la comunicacin
La herramienta de desarrollo compila el cdigo fuente de con los componentes COM para que puedan ser usa-
cualquiera de los lenguajes soportados por .NET en un c- dos por el .NET Framework.
digo intermedio, el CIL (Common Intermediate Language)
antes conocido como MSIL (Microsoft Intermediate Lan- Biblioteca de Clases Base que incluye soporte para
guage), similar al BYTECODE de Java. Para generarlo, muchas funcionalidades comunes en las aplicaciones.
el compilador se basa en la especicacin CLS (Common
Language Specication) que determina las reglas necesarias
para crear el cdigo MSIL compatible con el CLR. 7.4 Estandarizacin y licenciamien-
Para ejecutarse se necesita un segundo paso, un compila- to
dor JIT (Just-In-Time) es el que genera el cdigo mquina
real que se ejecuta en la plataforma del cliente. De esta for-
En agosto de 2000, Microsoft, Hewlett-Packard e Intel tra-
ma se consigue con .NET independencia de la plataforma
bajaron conjuntamente para estandarizar el lenguaje de
de hardware. La compilacin JIT la realiza el CLR a me-
programacin C# y una Infraestructura de Lenguaje Co-
dida que el programa invoca mtodos. El cdigo ejecutable
mn (CLI por sus siglas en ingls). Para Diciembre de 2001,
obtenido se almacena en la memoria cach del ordenador,
ambos fueron raticados por los estndares Internaciona-
siendo recompilado de nuevo slo en el caso de producirse
les ECMA.[3][4] ISO tambin sigui los pasos para abril de
algn cambio en el cdigo fuente.
2003.
Mientras Microsoft y sus socios de negocios ganaban paten-
7.3.1 Caractersticas tes para los lenguajes CLI y C#, ECMA e ISO solicitaron
que era esencial que la implementacin estuviera disponi-
Es el encargado de proveer lo que se llama cdigo adminis- ble bajo trminos no discriminatorios. Adems de alcan-
trado, es decir, un entorno que provee servicios automticos zar estos trminos, las compaas tambin accedan a dejar
al cdigo que se ejecuta. Los servicios son variados: estas patentes disponibles. Sin embargo, esto no aplic pa-
ra la parte del .NET Framework, que no est cubierto por
Cargador de clases: permite cargar en memoria las cla- los estndares ECMA/ISO. Esto incluye Windows Forms,
ses. ADO.NET y ASP.NET.
7.6. BIBLIOTECA DE CLASES BASE DE .NET 13

7.5 El futuro de .NET


A largo plazo Microsoft pretende reemplazar el API Win32
o Windows API con la plataforma .NET. Esto debido a que
el API Win32 o Windows API fue desarrollada sobre la
marcha, careciendo de documentacin detallada, uniformi-
dad y cohesin entre sus distintos componentes, provocan-
do mltiples problemas en el desarrollo de aplicaciones para
el sistema operativo Windows. La plataforma .NET preten-
de solventar la mayora de estos problemas proveyendo un
conjunto nico y expandible con facilidad, de bloques in-
terconectados, diseados de forma uniforme y bien docu-
mentados, que permitan a los desarrolladores tener a mano
todo lo que necesitan para producir aplicaciones slidas.
Diagrama bsico de la Biblioteca de Clases Base.
Debido a las ventajas que la disponibilidad de una platafor-
ma de este tipo puede darle a las empresas de tecnologa y
al pblico en general, muchas otras empresas e instituciones Administracin de componentes Web que corren tanto
se han unido a Microsoft en el desarrollo y fortalecimien- en el servidor como en el cliente (ASP.NET)
to de la plataforma .NET, ya sea por medio de la imple-
Manejo y administracin de excepciones
mentacin de la plataforma para otros sistemas operativos
aparte de Windows (Proyecto Mono de Ximian/Novell pa- Manejo del sistema de ventanas
ra GNU/Linux/Mac OS X/BSD/Solaris), el desarrollo de
lenguajes de programacin adicionales para la plataforma Herramientas de despliegue de grcos (GDI+)
(Lexico para hispanoparlantes, ANSI C de la Universidad Herramientas de seguridad e integracin con la segu-
de Princeton, NetCOBOL de Fujitsu, Delphi de Borland, ridad del sistema operativo
PowerBuilder de Sybase entre otros) o la creacin de blo-
ques adicionales para la plataforma (como controles, com- Manejo de tipos de datos unicado
ponentes y bibliotecas de clases adicionales); siendo algunas
Interaccin con otras aplicaciones
de ellas software libre, distribuibles bajo la licencia GPL.
Con esta plataforma, Microsoft incursiona de lleno en el Manejo de cadenas de caracteres y expresiones regu-
campo de los Servicios Web y establece el XML como nor- lares
ma en el transporte de informacin en sus productos y lo Operaciones aritmticas
promociona como tal en los sistemas desarrollados utilizan-
do sus herramientas. Manipulacin de fechas, zonas horarias y periodos de
tiempo
Manejo de arreglos de datos y colecciones
7.6 Biblioteca de Clases Base de
Manipulacin de archivos de imgenes
.NET
Aleatoriedad
La Biblioteca de Clases Base (BCL por sus siglas en ingls) Generacin de cdigo
maneja la mayora de las operaciones bsicas que se en-
cuentran involucradas en el desarrollo de aplicaciones, in- Manejo de idiomas
cluyendo entre otras:
Auto descripcin de cdigo
Interaccin con los dispositivos perifricos Interaccin con el API Win32 o Windows API.
Manejo de datos (ADO.NET) Compilacin de cdigo
Administracin de memoria
Esta funcionalidad se encuentra organizada por medio de
Cifrado de datos espacios de nombres jerrquicos.
Transmisin y recepcin de datos por distintos medios La Biblioteca de Clases Base se clasica, en cuatro grupos
(XML, TCP/IP) clave:
14 CAPTULO 7. MICROSOFT .NET

ASP.NET y Servicios Web XML .NET Compact Framework

Windows Forms

ADO.NET 7.10 Referencias


.NET [1] P#: A concurrent Prolog for .NET

[2] Prolog.NET - Logic programming for .NET


7.7 Ensamblados [3] Norma ECMA para C# (en ingls)

[4] Norma ECMA para CLI (en ingls)

[5] Understanding and Using Assemblies and Namespaces in


.NET

7.11 Enlaces externos

Wikimedia Commons alberga contenido multime-


dia sobre Microsoft .NET. Commons
Centro de desarrollo de .NET Framework

Diagrama interno de un Ensamble .NET.

Un ensamblado es un compilado EXE o DLL que contie-


ne cdigo CIL que se genera desde los diferentes lenguajes
.NET, y que es ejecutado por el CLR. Puede contener una
o varias clases al igual que uno o varios namespaces.[5]
Los ensamblados pueden tener diferentes decoradores que
denen el entorno de ejecucin de los mismos COM+,
DCOM, Remoting, etc.

7.8 Versiones

7.9 Vase tambin


Microsoft Visual Studio .NET

.NET Show
Captulo 8

ADO.NET

8.1 Arquitectura
.NET 3.0 Stack
ADO.NET consiste en dos partes primarias:
.NET Development
.NET 3.0 Applications
Tools
8.1.1 Data provider

.NET 3.0 Estas clases proporcionan el acceso a una fuente de datos,


como Microsoft SQL Server y Oracle. Cada fuente de datos
WCF WPF CardSpace WF tiene su propio conjunto de objetos del proveedor, pero cada
(Indigo) (Avalon) (InfoCard) (Workflow) uno tienen un conjunto comn de clases de utilidad:

.NET 2.0 CLR, .NET 2.0 Base Class Libraries Connection: Proporciona una conexin usada para co-
ASP .NET 2.0, ADO.NET 2.0, WinForms 2.0 municarse con la fuente de datos. Tambin acta como
Abstract Factory para los objetos command.
Command: Usado para realizar alguna accin en la
Windows fuente de datos, como lectura, actualizacin, o borra-
(Windows XP, Windows Server 2003/R2 do de datos relacionales.
Vista/Longhorn)
Parameter: Describe un simple parmetro para un
PC Hardware command. Un ejemplo comn es un parmetro para
ser usado en un procedimiento almacenado.
DataAdapter: Puente utilizado para transferir data
Esta tecnologa es una parte del .NET Framework 3.0 (habiendo entre una fuente de datos y un objeto DataSet (ver aba-
sido parte del framework desde la versin 1.0).
jo).
DataReader: Es una clase usada para procesar ecien-
temente una lista grande de resultados, un registro a la
vez.
ADO.NET es un conjunto de componentes del software
que pueden ser usados por los programadores para acce- 8.1.2 DataSets
der a datos y a servicios de datos. Es una parte de la bi-
blioteca de clases base que estn incluidas en el Microsoft Los objetos DataSets, son un grupo de clases que describen
.NET Framework. Es comnmente usado por los progra- una simple base de datos relacional en memoria, fueron la
madores para acceder y para modicar los datos almacena- estrella del show en el lanzamiento inicial (1.0) del Micro-
dos en un Sistema Gestor de Bases de Datos Relacionales, soft .NET Framework. Las clases forman una jerarqua de
aunque tambin puede ser usado para acceder a datos en contencin:
fuentes no relacionales. ADO.NET es a veces considerado
como una evolucin de la tecnologa ActiveX Data Objects Un objeto DataSet representa un esquema (o una ba-
(ADO), pero fue cambiado tan extensivamente que puede se de datos entera o un subconjunto de una). Puede
ser concebido como un producto enteramente nuevo. contener las tablas y las relaciones entre esas tablas.

15
16 CAPTULO 8. ADO.NET

Un objeto DataTable representa una sola tabla 8.2 ADO.NET y Visual Studio .NET
en la base de datos. Tiene un nombre, las, y co-
lumnas. En el IDE Visual Studio .NET existe la funcionalidad para
crear las subclases especializadas de las clases del DataSet
Un objeto DataView se sienta sobre un
para un esquema particular de base de datos, permitiendo
DataTable y ordena los datos (como una
el acceso conveniente a cada campo a travs de propiedades
clusula order by de SQL) y, si se acti-
fuertemente tipadas. Esto ayuda a capturar ms errores de
va un ltro, ltra los registros (como una
programacin en tiempo de compilacin y hace ms til la
clusula where del SQL). Para facilitar es-
caracterstica Intellisense del IDE.
tas operaciones se usa un ndice en memo-
ria. Todas las DataTables tienen un ltro por
defecto, mientras que pueden ser denidos
cualquier nmero de DataViews adiciona- 8.3 ADO.NET Entity Framework
les, reduciendo la interaccin con la base de
datos subyacente y mejorando as el desem-
El ADO.NET Entity Framework es un conjunto de APIs
peo.
de acceso a datos para el Microsoft .NET Framework,
Un DataColumn representa una co- apuntando a la versin de ADO.NET que se incluye con
lumna de la tabla, incluyendo su nom- el .NET Framework 3.5. Fue lanzado como actualizacin
bre y tipo. separada junto con el Service Pack 1 para el .NET Fra-
Un objeto DataRow representa una so- mework, despus del lanzamiento de tanto el .NET Frame-
la la en la tabla, y permite leer y actua- work 3.5 y el Visual Studio 2008. Una nueva versin del
lizar los valores en esa la, as como la Entity Framework (v 4.0) ser liberada junto al Visual Stu-
recuperacin de cualquier la que est dio 2010 y el .NET Framework 4.0.
relacionada con ella a travs de una re- Una entidad del Entity Framework es un objeto que tiene
lacin de clave primaria - clave extran- una clave representando la clave primaria de una entidad
jera. lgica de datastore. Un modelo conceptual Entity Data Mo-
Un DataRowView representa una sola del (modelo Entidad-Relacin) es mapeado a un modelo de
la de un DataView, la diferencia entre esquema de datastore. Usando el Entity Data Model, el Fra-
un DataRow y el DataRowView es im- mework permite que los datos sean tratados como entidades
portante cuando se est interactuando independientemente de sus representaciones del datastore
sobre un resultset. subyacente.
El Entity SQL es un lenguaje similar al SQL para consultar
Un DataRelation es una relacin entre las ta- el Entity Data Model (en vez del datastore subyacente). Si-
blas, tales como una relacin de clave primaria -
milarmente, las extensiones del Linq, Linq-to-Entities, pro-
clave ajena. Esto es til para permitir la funcio-
porcionan consultas tipeadas en el Entity Data Model. Las
nalidad del DataRow de recuperar las relacio- consultas Entity SQL y Linq-to-Entities son convertidas in-
nadas. ternamente en un Canonical Query Tree que entonces es
Un Constraint describe una propiedad de la ba- convertido en una consulta comprensible al datastore sub-
se de datos que se debe cumplir, como que los yacente (ej. en SQL en el caso de una base de datos rela-
valores en una columna de clave primaria deben cional). Las entidades pueden utilizar sus relaciones, y sus
ser nicos. A medida que los datos son modica- cambios enviados de regreso al datastore.
dos cualquier violacin que se presente causar
excepciones.
8.4 ADO.NET Data Services
Un DataSet es llenado desde una base de datos por un Da-
taAdapter cuyas propiedades Connection y Command que Tambin conocido como WCF Data Services, su nombre
han sido iniciados. Sin embargo, un DataSet puede guar- clave es Astoria.
dar su contenido a XML (opcionalmente con un esquema Es una plataforma para que Microsoft llame a los servicios
XSD), o llenarse a s mismo desde un XML, haciendo esto de datos, es una combinacin del tiempo de ejecucin y un
excepcionalmente til para los servicios web, computacin servicio web a travs del cual los servicios se exponen. Ade-
distribuida, y aplicaciones ocasionalmente conectadas des- ms, tambin incluye el Data Services Toolkit que permite a
conectados. Astoria Data Services crearse desde dentro de ASP.NET. El
8.6. ENLACES EXTERNOS 17

proyecto fue anunciado en Astoria MIX 2007, y la primera


vista previa para desarrolladores se puso a disposicin el 30
de abril de 2007. El CTP primero se hizo disponible como
parte de la ASP.NET 3.5 Vista previa de extensiones. El
cambio de nombre de ADO.NET Data Services para WCF
Data Services se anunci en el 2009.

8.5 Vase tambin

8.6 Enlaces externos


Captulo 9

Diagrama de clases

Diagrama de Clases
9.1.2 mbitos
Persona
+Nombre
+C.I
UML especica dos tipos de mbitos para los miembros:
instancias y clasicadores y estos ltimos se representan con
Trabajador Universidad Estudiante
+Fecha Inicio
1 *
+Nombre
+Ciudad
1
+Nombre
*
+C.I
nombres subrayados.

Los miembros clasicadores se denotan comnmente


PAS PDI Departamento Est. Grado Est. Doctorado
como estticos en muchos lenguajes de programa-
+Puesto +Categoria
+administrar() +investigar()
+ensear()
+Nombre +Titulacion
+colaborar()
+Programa
+Realizar Tesis()
cin. Su mbito es la propia clase.
Los valores de los atributos son los mismos en
todas las instancias
0..1
Doctor La invocacin de mtodos no afecta al estado de
las instancias
Los miembros instancias tienen como mbito una
Ejemplo de diagrama de clases de una Universidad. instancia especca.
Los valores de los atributos pueden variar entre
En ingeniera de software, un diagrama de clases en instancias
Lenguaje Unicado de Modelado (UML) es un tipo de dia- La invocacin de mtodos puede afectar al esta-
grama de estructura esttica que describe la estructura de do de las instancias(es decir, cambiar el valor de
un sistema mostrando las clases del sistema, sus atributos, sus atributos)
operaciones (o mtodos), y las relaciones entre los objetos.
Para indicar que un miembro posee un mbito de clasica-
dor, hay que subrayar su nombre. De lo contrario, se asume
por defecto que tendr mbito de instancia.

9.1 Miembros
9.2 Relaciones
UML proporciona mecanismos para representar los miem-
bros de la clase, como atributos y mtodos, as como infor- Una relacin es un trmino general que abarca los tipos es-
macin adicional sobre ellos. peccos de conexiones lgicas que se pueden encontrar
en los diagramas de clases y objetos. UML presenta las si-
guientes relaciones:

9.1.1 Visibilidad 9.2.1 Relaciones a nivel de instancia


Para especicar la visibilidad de un miembro de la clase (es Enlace
decir, cualquier atributo o mtodo), se coloca uno de los
siguientes signos delante de ese miembro: Un enlace es la relacin ms bsica entre objetos.

18
9.3. DIAGRAMAS 19

Asociacin En UML, se representa grcamente con un rombo hueco


junto a la clase contenedora con una lnea que lo conecta a
la clase contenida. Todo este conjunto es, semnticamente,
un objeto extendido que es tratado como una nica unidad
en muchas operaciones, aunque fsicamente est hecho de
varios objetos ms pequeos.
Ejemplo de diagrama de clases con una asociacin de dos clases
(en ingls)

9.3 Diagramas
Una asociacin representa a una familia de enlaces. Una
asociacin binaria (entre dos clases) normalmente se repre-
El diagrama de clases puede tener como ejemplo: una
senta con una lnea contnua. Una misma asociacin puede
clase que seria un objeto o persona misma en la cual
relacionar cualquier nmero de clases. Una asociacin que
se especica cada accin y especicacin.
relacione tres clases se llama asociacin ternaria.
A una asociacin se le puede asignar un nombre, y en sus ex-
tremos se puede hacer indicaciones, como el rol que desem- Propiedades de objetos que tienen propiedades y/u
pea la asociacin, los nombres de las clases relacionadas, operaciones que contienen un contexto y un dominio,
su multiplicidad, su visibilidad, y otras propiedades. los primeros dos ejemplos son clases de datos y el ter-
Hay cuatro tipos diferentes de asociacin: bidireccional, cero clase de lgica de negocio, dependiendo de quin
unidireccional, agregacin (en la que se incluye la compo- disee el sistema se pueden unir los datos con las ope-
sicin) y reexiva. Las asociaciones unidireccional y bidi- raciones.
reccional son las ms comunes.
Por ejemplo, una clase vuelo se asocia con una clase avin El diagrama de clases incluye mucha ms informacin
de forma bidireccional. La asociacin representa la relacin como la relacin entre un objeto y otro, la herencia
esttica que comparten los objetos de ambas clases. de propiedades de otro objeto, conjuntos de operacio-
nes/propiedades que son implementadas para una in-
terfaz grca.
Agregacin
Presenta las clases del sistema con sus relaciones es-
tructurales y de herencia.
Professor 1 1..* Class
+ listOfStudents : list + Students : list
El diagrama de clases es la base para elaborar una ar-
quitectura MVC o MVP.
Ejemplo de diagrama de clases con una agregacin entre dos clases
(en ingls)

La agregacin es una variante de la relacin de asociacin


tiene un: la agregacin es ms especca que la asociacin.
Se trata de una asociacin que representa una relacin de
tipo parte-todo o parte-de.
Como se puede ver en la imagen del ejemplo (en ingls), un
Profesor 'tiene una' clase a la que ensea.
Al ser un tipo de asociacin, una agregacin puede tener
un nombre y las mismas indicaciones en los extremos de la
lnea. Sin embargo, una agregacin no puede incluir ms de
dos clases; debe ser una asociacin binaria.
Una agregacin se puede dar cuando una clase es una co-
leccin o un contenedor de otras clases, pero a su vez, el
tiempo de vida de las clases contenidas no tienen una de-
pendencia fuerte del tiempo de vida de la clase contenedora
(de el todo). Es decir, el contenido de la clase contenedora
no se destruye automticamente cuando desaparece dicha
clase.
Captulo 10

C Sharp

El ttulo de este artculo se muestra incorrectamen- Hejlsberg lider el proyecto de desarrollo de C#. Anterior-
te debido a limitaciones tcnicas. El ttulo correcto mente, ya haba participado en el desarrollo de otros len-
es C#. guajes como Turbo Pascal, Delphi y J++.

C#[1] (pronunciado si sharp en ingls) es un lenguaje de


programacin orientado a objetos desarrollado y estanda- 10.2 Tipos de datos
rizado por Microsoft como parte de su plataforma .NET,
que despus fue aprobado como un estndar por la ECMA
C# contiene veinte categoras generales de tipos de datos
(ECMA-334) e ISO (ISO/IEC 23270). C# es uno de los len-
integrados: tipos de valor y tipos de referencia. El trmino
guajes de programacin diseados para la infraestructura
tipo de valor indica que esos tipos contienen directamente
de lenguaje comn.
sus valores.
Su sintaxis bsica deriva de C/C++ y utiliza el modelo de
Tipos para denir nmeros enteros:
objetos de la plataforma .NET, similar al de Java, aunque
incluye mejoras derivadas de otros lenguajes. Los tipos de coma otante pueden representar nmeros con
componentes fraccionales. Existen dos clases de tipos de
El nombre C Sharp fue inspirado por la notacin musical,
coma otante: oat y double. El tipo double es el ms uti-
donde '#' (sostenido, en ingls sharp) indica que la nota (C
lizado porque muchas funciones matemticas de la biblio-
es la nota do en ingls) es un semitono ms alta, sugiriendo
teca de clases de C# usan valores double. Quiz, el tipo de
que C# es superior a C/C++. Adems, el signo '#' se com-
coma otante ms interesante de C# es decimal, dirigido al
pone de cuatro signos '+' pegados.[2]
uso de clculos monetarios. La aritmtica de coma otan-
Aunque C# forma parte de la plataforma .NET, sta es te normal est sujeta a una variedad de errores de redon-
una API, mientras que C# es un lenguaje de programacin deo cuando se aplica a valores decimales. El tipo decimal
independiente diseado para generar programas sobre di- elimina estos errores y puede representar hasta 28 lugares
cha plataforma. Ya existe un compilador implementado que decimales.
provee el marco Mono - DotGNU, el cual genera programas
Los caracteres en C# no tienen un tamao de 8 bits como en
para distintas plataformas como Windows, Unix, Android,
muchos otros lenguajes de programacin, sino que usan un
iOS, Windows Phone, Mac OS y GNU/Linux.
tamao de 16 bits. Este tipo de dato se llama char y utiliza la
codicacin Unicode. No existen conversiones automticas
de tipo entero a char.
10.1 Historia Para los tipos de datos lgicos no existen conversiones au-
tomticas de tipo entero a bool.
Durante el desarrollo de la plataforma .NET, las bibliotecas
de clases fueron escritas originalmente usando un sistema
de cdigo gestionado llamado Simple Managed C (SMC).
En enero de 1999, Anders Hejlsberg form un equipo con 10.3 Literales
la misin de desarrollar un nuevo lenguaje de programa-
cin llamado Cool (Lenguaje C orientado a objetos). Este En ocasiones, resulta ms sencillo usar un sistema num-
nombre tuvo que ser cambiado debido a problemas de mar- rico en base 16 en lugar de 10, para tal caso C# permite
ca, pasando a llamarse C#.[3] La biblioteca de clases de la especicar nmeros enteros en formato hexadecimal, y se
plataforma .NET fue migrada entonces al nuevo lenguaje. dene anteponiendo 0x, por ejemplo: 0xFF, que equivale a

20
10.5. CONSTANTES 21

255 en decimal. Toda conversin implcita no ocasiona prdida de in-


C# tiene caracteres denominados secuencias de escape para formacin, truncamientos o redondeos.
facilitar la escritura con el teclado de smbolos que carecen Es posible (pero no siempre ocurre) que en una con-
de representacin visual. versin explcita haya prdida de informacin, trunca-
C#, al igual que C++, dene un tipo de cadena de caracteres. mientos o redondeos.
Dentro de la cadena de caracteres se pueden usar secuencias En toda conversin implcita el tipo de dato destino es
de escape. Una cadena de caracteres puede iniciarse con el mayor que el tipo de dato origen.
smbolo @ seguido por una cadena entre comillas ("), en tal
caso, las secuencias de escape no tienen efecto, y adems la La conversin explcita se realiza indicando el tipo de
cadena puede ocupar dos o ms lneas. dato al que se quiere convertir entre parntesis, seguido
del valor:

10.4 Variables long valor = 123; // Conversin implcita long valor =


(long)123; // Conversin explcita
Las variables son identicadores asociados a valores. Se de-
claran indicando el tipo de dato que almacenar y su iden- Adems de realizarse dentro de una asignacin, las conver-
ticador. siones de tipos tambin tienen lugar dentro de una expre-
sin, pues en cada operacin ambos operandos deben de
Un identicador puede: ser del mismo tipo. Si la conversin es del tipo implcito se
efecta el siguiente algoritmo en dicho orden:
empezar por "_.
1. Si un operando es decimal, el otro operando se trans-
contener caracteres Unicode en maysculas y mins- forma a decimal.
culas (sensible a maysculas y minsculas).
2. Si un operando es double, el otro operando se trans-
Un identicador no puede: forma a double.
3. Si un operando es oat, el otro operando se transforma
empezar por un nmero. a oat.

empezar por un smbolo, ni aunque sea una palabra 4. Si un operando es ulong, el otro operando se transfor-
clave. ma a ulong.

contener ms de 511 caracteres. 5. Si un operando es long, el otro operando se transforma


a long.
Declarar una variable: 6. Si un operando es uint, y si el otro operando es de tipo
int miNumero; // Declaramos la variable, pero no la sbyte, short o int, los dos se transforman a long.
inicializamos con ningn valor. 7. Si un operando es uint, el otro operando se transforma
a uint.
Para asignar un valor a una variable, se indica el identica- 8. Si no es ninguno de los casos anteriores, los dos ope-
dor de la misma, seguido del smbolo igual (=) y el valor randos se transforman a int.
que queremos que almacene:
miNumero = 5; // Asignamos el valor '5'.
10.5 Constantes
Tambin se puede declarar y asignar un valor al mismo
tiempo: Las constantes son valores inmutables, y por tanto no se
int miNumero = 5; // Declaramos la variable, y asignamos pueden cambiar.
el valor '5'. const
Cuando se declara una constante con la palabra clave const,
Las conversiones de tipo de variables en C# se representan tambin se debe asignar el valor. Tras esto, la constante que-
en la siguiente tabla en donde la la es el origen y la columna da bloqueada y no se puede cambiar. Son implcitamente
el destino. estticas (static).
22 CAPTULO 10. C SHARP

const double PI = 3.1415; Las instrucciones if-else, for, while, do-while, switch,
return, break, continue son, bsicamente, iguales que
readonly en C, C++ y Java.

A diferencia de const, no requiere que se asigne el valor al La instruccin foreach, al igual que en Java, realiza un
mismo tiempo que se declara. Pueden ser miembros de la ciclo a travs de los elementos de una matriz o colec-
instancia o miembros estticos de la clase (static). cin. En este ciclo se recorre la coleccin y la variable
recibe un elemento de dicha coleccin en cada itera-
readonly double E; E = 2.71828;
cin.

La instruccin goto se sigue utilizando en C# a pesar


de la polmica sobre su uso.
10.6 Operadores

Los operadores aritmticos funcionan igual que en C


10.8 Mtodos
y C++.
Todo mtodo debe ser parte de una clase, no existen
El resultado de los operadores relacionales y lgicos es mtodos globales (funciones).
un valor de tipo bool.
Por defecto, los parmetros se pasan por valor. (Nte-
se que las listas y otras colecciones son variables por
Los operadores de cortocircuito evalan el segundo referencia (referencias al espacio reservado para esa
operando solo cuando es necesario. lista en la pila) y que se pasa por valor al mtodo la
referencia, pero el espacio reservado para la lista es
Los operadores a nivel de bits no se pueden aplicar a comn, por lo que si elimina un elemento lo hace tam-
tipos bool, oat, double o decimal. bin de la original).

El modicador ref fuerza a pasar los parmetros por


referencia en vez de pasarlos por valor y obliga a ini-
10.7 Instrucciones de control cializar la variable antes de pasar el parmetro.

if-else El modicador out es similar al modicador ref, con la


diferencia de que no se obliga a inicializar la variable
if (i == 2) { // ... } else if (i == 3) { // ... } else { // ... } antes de pasar el parmetro.

switch Cuando ref y out modican un parmetro de referen-


cia, la propia referencia se pasa por referencia.
switch (i) { case 1: ... break; case 2: case 3: ... break;
default: ... break; } El modicador params sirve para denir un nmero
variable de argumentos los cuales se implementan co-
for mo una matriz.

for (int i = 0; i < 10; i++) { // ... } Un mtodo debe tener como mximo un nico par-
metro params y ste debe ser el ltimo.
while
Un mtodo puede devolver cualquier tipo de dato, in-
while (i < 10) { // ... } cluyendo tipos de clase.

Ya que en C# las matrices se implementan como ob-


do-while
jetos, un mtodo tambin puede devolver una matriz
do { // ... } while (true); (algo que se diferencia de C++ en que las matrices no
son vlidas como tipos de valores devueltos).
foreach C# implementa sobrecarga de mtodos, dos o ms m-
foreach (char c in charList) { // ... } todos pueden tener el mismo nombre siempre y cuan-
do se diferencien por sus parmetros.
10.10. CLASES Y OBJETOS 23

El mtodo Main es un mtodo especial al cual se reere int[,] intMultiArray = new int[3, 2]; // 3 las y 2 columnas
el punto de partida del programa.
Declarar e inicializar una matriz multidimensional (el ta-
ref mao de la matriz se puede omitir):
void PassRef(ref int x) { if (x == 2) { x = 10; } } int z = 0; int[,] intMultiArray = new int[,] { {1, 2}, {3, 4}, {5, 6} };
PassRef(ref z);
Acceder a un elemento de una matriz multidimensional:
out
intMultiArray[2, 0]; // Retornar el valor '5'
void PassOut(out int x) { x = 2; } int z; PassOut(out z);
Ms informacin en: Tutorial de matrices (C#) (en ingls).
params
int MaxVal(char c, params int[] nums) { // ... } int a =
1; MaxVal('a', 23, 3, a, 12); // El primer parmetro es 10.10 Clases y objetos
obligatorio, seguidamente se pueden poner tantos nmeros
enteros como se quiera Una variable de objeto de cierta clase no almacena los
valores del objeto sino su referencia (al igual que Java).
Sobrecarga de mtodos
El operador de asignacin no copia los valores de un
int Suma(int x, int y) { return x + y; } int Suma(int x, int y, objeto, sino la referencia al mismo (al igual que Java).
int z) { return x + y + z; } Suma(1, 2); // Llamar al primer
mtodo. Suma(1, 2, 3); // Llamar al segundo mtodo. Un constructor tiene el mismo nombre que su clase y
es sintcticamente similar a un mtodo.

Main Un constructor no devuelve ningn valor (ni siquiera


void).
public static void Main(string[] args) { // ... }
Al igual que los mtodos, los constructores tambin
pueden ser sobrecargados.

10.9 Matrices Si no se especica un constructor en una clase, se usa


uno por defecto que consiste en asignar a todas las va-
riables el valor 0, null o false segn corresponda.
En C# las matrices se implementan como objetos.
Cuando un objeto no es referenciado por ninguna va-
Los ndices de las matrices comienzan en 0.
riable, el recolector de basura ejecuta el destructor de
Ya que C# implementa las matrices como objetos, ca- dicha clase y libera la memoria utilizada.
da matriz tiene una propiedad Length que contiene el
El destructor de una clase no se llama cuando un objeto
nmero de elementos que puede alojar o tiene aloja-
sale del mbito.
dos.
Todos los destructores se llamarn antes de que nalice
Declarar una matriz: un programa.
int[] intArray = new int[5]; La palabra clave this es una referencia al mismo objeto
en el cual se usa.
Declarar e inicializar una matriz (el tamao de la matriz se La palabra clave base es una referencia a la clase padre
puede omitir): del objeto en la que se usa (por defecto, Object).
int[] intArray = new int[] {1, 2, 3, 4, 5};
La palabra clave static hace que un miembro perte-
nezca a una clase en vez de pertenecer a objetos de
Acceder a un elemento: dicha clase. Se puede tener acceso a dicho miembro
intArray[2]; // Retornar el valor '3' antes de que se cree cualquier objeto de su clase y sin
referencias a un objeto.
Declarar una matriz multidimensional: Un mtodo static no tiene una referencia this.
24 CAPTULO 10. C SHARP

Un mtodo static puede llamar slo a otros mtodos class Clase { } Clase c1 = new Clase(); Clase c2 = new
static. Clase(); bool b = c1 == c2; // Retornar 'false', ya que son
dos objetos distintos
Un mtodo static slo debe tener acceso directamente
a datos static.

Un constructor static se usa para inicializar atributos


que se aplican a una clase en lugar de aplicarse a una 10.11 Cadenas de caracteres
instancia.
El tipo de dato para las cadenas de caracteres es string.
C# permite la sobrecarga de operadores (+, -, *, etc.)
con la palabra clave operator. Realmente la palabra clave string es un alias de la clase
System.String de la plataforma .NET.
Al comparar objetos (==, !=, <, >, <=, >=) se com-
En C# las cadenas son objetos y no una matriz de ca-
prueba si hacen referencia al mismo objeto.
racteres; aun as, se puede obtener un carcter arbi-
trario de una cadena por medio de su ndice (pero no
Declarar una clase: modicarlo).
class Clase { } Las cadenas son inmutables, una vez creadas no se
pueden modicar, solo se pueden copiar total o par-
Iniciar una clase (tambin llamado crear un objeto de la cla- cialmente.
se o instanciar una clase):
El operador == determina si dos referencias hacen re-
Clase c = new Clase(); ferencia al mismo objeto, pero al usar dicho operador
con dos variables tipo string se prueba la igualdad del
Constructor (como si fuera un mtodo, pero con el nombre contenido de las cadenas y no su referencia. Sin em-
de su clase): bargo, con el resto de los operadores relacionales, co-
mo < y >=, s se comparan las referencias.
class Clase { Clase() { // ... } }
Se pueden concatenar (unir) dos cadenas mediante el
operador +.
Destructor (como si fuera un mtodo, precedido del smbo-
lo '~'): Las cadenas se pueden usar en las instrucciones switch.
class Clase { ~Clase() { // ... } }
Declarar una cadena de caracteres (como si fuera una va-
this: riable de un tipo de dato como int o double):

class Clase { int i = 1; Clase() { this.Arrancar(); // Llamar string texto = Cadena de caracteres"; string texto = new
System.String(Cadena de caracteres); // Equivalente al
al mtodo 'Arrancar' del objeto } void Arrancar() { // ... }
} anterior

static: Longitud de una cadena:

class Clase { static int i = 1; } Clase.i; // Retornar el valor string texto = Cadena de caracteres"; int i = texto.Length;
'1'. No hace falta crear un objeto, ya que al ser 'static', // Retornar '20'
pertenece a la clase.
Comparar dos cadenas:
operator: bool b = texto == texto"; // Retornar 'true', ya que
class Clase { static int operator +(int x, int y) { // Sobre- ambas cadenas contienen texto
carga el operador '+' // ... } static int operator -(int x, int
y) { // Sobrecarga el operador '-' // ... } static int operator Concatenar cadenas:
int(byte x) { // Sobrecarga la conversin de tipo 'byte' a string texto = Cadena de + " caracteres"; // Ntese el
'int' // ... } } espacio antes de caracteres, si no se pusiera, aparecera
junto: decaracteres
Comparacin de objetos:
10.12. EJEMPLOS 25

La clase System.String, y una instancia de la misma, string, LINQ (Language-Integrated Query)


poseen algunos mtodos para trabajar con cadenas, como:
static string Copy(string str): devuelve una copia de str. 10.12 Ejemplos
string texto1 = abc"; string texto2 = xyz"; string texto2
= System.String.Copy(texto1); // 'texto2' ahora contiene Ejemplo bsico "Hola mundo":
abc using System; public class Ejemplo { public static void
Main(string[] args) { Console.WriteLine(Hola mundo);
int CompareTo(string str): devuelve menor que cero si la } }
cadena que llama es menor que str, mayor que cero si la
cadena que llama es mayor que str, y cero si las cadenas son Suma y concatenacin:
iguales.
using System; public class Ejemplo { public static void
string texto = abc"; int i = texto.CompareTo(abc); // Main(string[] args) { int x = 10; int y = 20; Conso-
Retornar '0' le.WriteLine(El resultado es: " + (x + y)); // Imprimir en
pantalla: El resultado es: 30 } }
int IndexOf(string str): devuelve el ndice de la primera
coincidencia de la subcadena especicada en str, o 1 en Uso de clases, mtodos, propiedades y sobrecarga:
caso de error.
using System; public class Coche { private int numPuertas;
string texto = abcdefabcdef"; int i = texto.IndexOf(e); public int NumPuertas { get { return this.numPuertas; }
// Retornar '4' int j = texto.IndexOf(def); // Retornar set { this.numPuertas = value; // 'value' es una variable
'3', que es donde se encuentra el carcter 'd', seguido de 'e' que se asigna automticamente al asignar un valor a la
y 'f' propiedad, // para poder trabajar con dicho valor. } } public
Coche(int numPuertas) { this.NumPuertas = numPuertas;
int LastIndexOf(string str): devuelve el ndice de la ltima } // Sobrecarga: si se instancia la clase sin indicar ningn
coincidencia de la subcadena especicada en str, o 1 en parmetro, se inicializa 'numPuertas con el valor '2' public
caso de error. Coche() : this(2) { } } public class Ejemplo { public static
void Main(string[] args) { Coche coche = new Coche();
string texto = abcdefabcdef"; int i = tex-
// Se usa el segundo constructor coche.NumPuertas =
to.LastIndexOf(e); // Retornar '10' int j = tex-
4; Console.WriteLine(El nmero de puertas es: " +
to.LastIndexOf(def); // Retornar '9', que es donde se
coche.NumPuertas);// Imprimir en pantalla: El nmero
encuentra el ltimo carcter 'd', seguido de 'e' y 'f'
de puertas es: 4 } }

string ToLower: devuelve una copia de la cadena en mins-


culas.
string texto = ABC"; string texto = texto.ToLower(); // 10.13 Compiladores e IDEs
Retornar abc
En la actualidad existen los siguientes compiladores o IDE
string ToUpper: devuelve una copia de la cadena en mays- para el lenguaje C#:
culas.
Microsoft .NET Framework 2.0 (SDK) incluye un
string texto = abc"; string texto = texto.ToUpper(); //
compilador de C#, pero no un IDE.
Retornar ABC
Microsoft Visual Studio, IDE por excelencia de este
string Substring: devuelve una subcadena, indicando la po- lenguaje.
sicin de inicio y la longitud que se desea. SharpDevelop, IDE libre para C# bajo licencia GNU
string texto = Cadena de caracteres"; string texto = LGPL, con una interfaz muy similar a Microsoft Vi-
texto.Substring(10, 8); // Retornar caracter sual Studio.
Mono, es una implementacin con licencia GNU GPL
Ms informacin en: String (Clase) (System) (en ingls). de todo el entorno .NET desarrollado por Novell. Co-
mo parte de esta implementacin se incluye un com-
pilador de C#.
26 CAPTULO 10. C SHARP

Delphi 2006, de Borland Software Corporation. Wikilibros alberga un libro o manual sobre C
sharp NET.
DotGNU Portable.NET, de la Free Software Founda-
tion. Gua de programacin de C#

Mtodos numricos en C#
10.14 Metas del diseo del lenguaje Programacin con C#

Centro de desarrolladores de Visual C#


El estndar ECMA-334 lista las siguientes metas en el di-
seo para C#: Desarrollo de Software en C# Comunidad virtual para
profesionales y/o estudiantes de habla castellana.
Lenguaje de programacin orientado a objetos simple,
moderno y de propsito general. Blog de programacin, C#

Inclusin de principios de ingeniera de software tales Geeks.ms Blogs sobre desarrolladores de la plataforma
como revisin estricta de los tipos de datos, revisin .NET y C#
de lmites de vectores, deteccin de intentos de usar Kit de desarrollo de software (SDK) de Microsoft
variables no inicializadas, y recoleccin de basura au- .NET Framework 2.0 (x86), (x64) e (IA64)
tomtica.
C# | WebProgramacin Artculos, ejemplos, fragmen-
Capacidad para desarrollar componentes de software tos de cdigo, etc.
que se puedan usar en ambientes distribuidos.

Portabilidad del cdigo fuente. 10.16.2 En ingls


Fcil migracin del programador al nuevo lenguaje,
Microsoft .NET Framework
especialmente para programadores familiarizados con
C, C++ y Java. Standard ECMA-334 (Especicacin del lenguaje C#).
Soporte para internacionalizacin. Especicacin de C# 3.0
Adecuacin para escribir aplicaciones de cualquier C# Tutorial
tamao: desde las ms grandes y sosticadas como
sistemas operativos hasta las ms pequeas funciones. Programmers Heaven C# School Book

Aplicaciones econmicas en cuanto a memoria y pro-


cesado. Wikimedia Commons alberga contenido multime-
dia sobre C Sharp. Commons

10.15 Referencias
[1] En ocasiones representado como 'C', donde el segundo ca-
rcter es un sostenido (sharp en ingls)

[2] James Kovacs (7 de septiembre de 2007). C#/.NET History


Lesson (en ingls). Consultado el 5 de agosto de 2011.

[3] Visual C# Developer Center, Frequently Asked Questions


About Visual C# .NET 2003 (en ingls)

10.16 Enlaces externos

10.16.1 En castellano
Wikilibros
Captulo 11

Espacio de nombres

En programacin, un espacio de nombres (del ingls na- 11.1 Vase tambin


mespace), en su acepcin ms simple, es un conjunto de
nombres en el cual todos los nombres son nicos. Nomenclatura binomial
Un espacio de nombres es un contenedor abstracto en el
Nomenclatura qumica
que un grupo de uno o ms identicadores nicos pueden
existir. Un identicador denido en un espacio de nombres Sistema Dewey de clasicacin
est asociado con ese espacio de nombres. El mismo iden-
ticador puede independientemente ser denido en mlti- Digital object identier
ples espacios de nombres, eso es, el sentido asociado con un
Domain Name System
identicador denido en un espacio de nombres es indepen-
diente del mismo identicador declarado en otro espacio de Direccin IP
nombres. Los lenguajes que manejan espacio de nombres
especican las reglas que determinan a qu espacio de nom- Clasicacin de la Biblioteca del Congreso
bres pertenece una instancia de un identicador.
Anexo:Catlogo de estrellas
Por ejemplo, Pedro trabaja para la compaa X y su nme-
ro de empleado es 123. Mara trabaja para la compaa Y Espacio de nombres XML
y su nmero de empleada tambin es 123. La razn por la
cual Pedro y Mara pueden ser identicados con el mismo
nmero de empleado es porque trabajan para compaas
diferentes. Diferentes compaas simbolizan en este caso
diferentes espacios de nombres.
En programas grandes o en documentos no es infrecuen-
te tener cientos o miles de identicadores. Los espacios de
nombres (o tcnicas similares como la emulacin de espa-
cios de nombres) disponen de un mecanismo para ocultar
los identicadores locales. Proporcionan los medios para
agrupar lgicamente los identicadores relacionados en sus
correspondientes espacios de nombres, haciendo as el sis-
tema ms modular.
Muchos lenguajes de programacin manejan espacios de
nombres. En algunos lenguajes, como C++, PHP o Python,
estos identicadores nombrando espacios de nombres es-
tn asociados con un espacio de nombres que los agrupa.
As pues, en estos lenguajes, los espacios de nombres se
pueden anidar formando un rbol de espacios de nombres.
En la raz de este rbol se encuentra el espacio de nombres
annimo global.

27
Captulo 12

Microsoft Developer Network

12.1 Software Suscripciones

MSDN histricamente ha ofrecido un paquete de suscrip-


cin segn el cual los desarrolladores tienen acceso y licen-
cias de uso de casi todo el software de Microsoft que jams
se haya puesto a disposicin del pblico. Las suscripciones
son vendidos sobre una base anual, y el costo de hasta $
10939 USD por ao y por suscripcin, ya que se ofrece en
varios niveles. Los titulares de esas cuotas (excepto los ms
bajos de la biblioteca slo los niveles) recibir un nuevo
Logotipo de MSDN (2001-2009). software de Microsoft en DVD o a travs de descargas ca-
da pocas semanas o meses. El software generalmente viene
especialmente marcado en MSDN discos, pero contiene la
identidad o el volumen de venta de licencia de software a
medida que se libera al pblico.
Aunque en la mayora de los casos el software en s las
funciones exactamente igual que el producto completo, el
MSDN (del ingls: Microsoft Developer Network ) puede MSDN de licencia de usuario nal prohbe el uso de soft-
referirse tanto a los servicios web (basado en plataformas ware en un negocio entorno de produccin. Se trata de
Microsoft) orientados a desarrolladores de software como una restriccin legal, no un tcnico. A modo de ejemplo,
al conjunto de software que se adjunta con sus compiladores MSDN regularmente incluye los ltimos sistemas opera-
(Visual Studio) y ciertos SDK. Tiene como objeto la reso- tivos Windows (como Windows XP y Windows Vista),
lucin de dudas y problemas que le puedan surgir al desa- software de servidor como SQL Server 2005, herramien-
rrollador; segn la propia corporacin "Contiene una gran tas de desarrollo como Visual Studio, y aplicaciones como
cantidad de informacin tcnica de programacin, inclui- Microsoft Oce y MapPoint. Para que el software requiere
dos cdigo de ejemplo, documentacin, artculos tcnicos y una clave de producto, un sitio web de Microsoft en estos
guas de referencia", en este ltimo caso la denominacin genera la demanda. Este paquete ofrece un nico equipo
correcta sera "API o biblioteca MSDN", de la cual tambin entusiasta con el acceso a casi todo lo que ofrece Micro-
se encuentra una versin en lnea. soft. Sin embargo, una empresa capturado con una ocina
El Microsoft Developer Network (MSDN) es la parte de llena de PC y servidores ejecutando el software incluido en
Microsoft responsable de gestin en la relacin de la em- una suscripcin MSDN sin la adecuada no MSDN licen-
presa con los desarrolladores de hardware interesados en el cias para aquellas mquinas que no sean tratados en forma
sistema operativo (OS), basados en las diversas plataformas diferente de cumplimiento de auditora que si el software
de sistema operativo, que aprovechan la API y lenguajes pirateado se fuera de la Internet.
de script de las muchos aplicaciones de Microsoft. La ges- Microsoft MSDN del acuerdo de licencia hace una excep-
tin de relacin se puede encontrar en una variedad de me- cin especca para Microsoft Oce, permitiendo que el
dios de comunicacin: sitios web, boletines, conferencias titular de suscripcin personalmente a utilizarlo con nes
de desarrolladores, medios de comunicacin dedicados al comerciales sin necesidad de una licencia, pero slo con la
comercio, los blogs y DVD de distribucin. suscripcin MSDN Premium y aun as slo directamente

28
12.3. MSDN MAGAZINE 29

relacionados con la diseo, desarrollo y prueba y/o la docu- den recibir las ediciones de principios de sistemas operati-
mentacin de proyectos de software como se indica en el vos de Microsoft u otros productos de Microsoft (las apli-
faq de licencia de MSDN. Como era de esperar, cualquier caciones Microsoft Oce, Visual Studio, etc.)
software creado con las herramientas de desarrollo (como Microsoft tambin ha acogido una serie de desarrolladores
Visual Studio), junto con los componentes en tiempo de eje- centrados en conferencias en su campus de Redmond, que
cucin necesarios para el aprovechamiento de ella, no se los suscriptores de MSDN el privilegio de. Dependiendo del
limita en modo alguno, ya sea por Microsoft, dicho softwa- tamao de la empresa y sus productos, estas conferencias
re pueden y regularmente se utiliza para la produccin de puede ser uno-a-uno y tener un solo foco.
negocios. El acuerdo de licencia se reere a varios otros te-
mas en la suscripcin y subvenciones adicionales similares Las universidades y escuelas secundarias pueden inscribir-
excepciones, segn corresponda. se en la MSDN Academic Alliance programa, que propor-
ciona acceso a algunos desarrolladores de software de Mi-
Un MSDN abonado tiene derecho a activar tantos ejem- crosoft para su ciencias de la computacin y estudiantes de
plares como sea necesario para su propio desarrollo. Por lo ingeniera (y posiblemente otros estudiantes o profesores
tanto, si un equipo entusiasta de alguna manera tiene 20 or- tambin). A MSDNAA cuenta no es una cuenta de MSDN
denadores en casa que utiliza el propio para el desarrollo y no puede utilizarse para el acceso del abonado la seccin
de software (y no estn actuando como parte de una em- de la pgina web de MSDN o de sus descargas.
presa, por ejemplo, una granja de servidores), una suscrip-
cin permite a todos los 20 de estos ordenadores a estar
ejecutndose su propia copia de Windows, Oce, y cual-
quier otro producto de Microsoft. Despus de unas pocas 12.3 MSDN Magazine
instalaciones, las claves de activacin se detendr permite
la activacin automtica del producto a travs de Internet, Microsoft proporciona el contenido editorial de MSDN
pero despus de una llamada telefnica a la Activacin de Magazine, una publicacin mensual. La revista fue creada
productos de lnea telefnica para conrmar que las instala- como una fusin entre el Microsoft Systems Journal (MSJ)
ciones son realmente legtimo y coherente con el acuerdo de y Microsoft Internet Developer (MIND) en revistas de mar-
licencia, las activaciones se conceden a travs del telfono.zo de 2000. MSJ los nmeros anteriores estn disponibles
en lnea. MSDN Magazine est disponible como una revista
A pesar de una suscripcin MSDN es sobre una base anual,
impresa en los Estados Unidos, y en lnea en 11 idiomas.
la licencia para el uso del software, segn el acuerdo, no
pongan n. El individuo solo no tiene derecho a cualquier
actualizacin despus de que el software ha caducado. Una
suscripcin MSDN tambin permite el acceso a programas 12.4 MSDN Blogs
informticos obsoletos de Microsoft en el pasado. Si bien
no estn incluidos en el ordinario de CD / DVD envos, los Adems de editar su contenido tcnico, el sitio web de
suscriptores pueden descargar el software de edad, como MSDN tambin contiene una serie de empleado blogs.
MS-DOS 5.0 y Windows 3.1 de MSDN Subscriber Down-
loads. Este software generalmente viene en forma de ISO,
o un disquete, los archivos de imagen que permiten que el 12.5 Siguiente versin
abonado pueda reproducir el original medios de instalacin
tras la descarga.
MSDN2 se abri en noviembre de 2004 como fuente pa-
ra Visual Studio 2005 API informacin, con notables dife-
rencias estn actualizando cdigo del sitio web, mejor se
12.2 Servicio de informacin ajusten a estndares web y, por tanto, dar una larga espe-
ra de una mejor alternativa de apoyo para los navegadores
web para Internet Explorer en la API navegador. En 2008,
La divisin se ejecuta un servicio de informacin proporcio- el grupo original de MSDN fue retirado y se convirti en
nada por Microsoft para los desarrolladores de software. Su MSDN2 msdn.microsoft.com
objetivo principal es de Microsoft.NET, sin embargo que
adems incluye artculos sobre aspectos tales como prcti-
cas de programacin y los patrones de diseo. Muchos re-
cursos estn disponibles gratuitamente en lnea, mientras 12.6 Enlaces externos
que otros estn disponibles por correo a travs de una sus-
cripcin. MSDN Home page
Dependiendo de nivel de suscripcin, los suscriptores pue- MSDN Blogs
30 CAPTULO 12. MICROSOFT DEVELOPER NETWORK

MSDN Ocial Forums

MSDN Events
MSDN Beta search

MSDN Magazine
MSDN Wiki beta (Visual Studio, .NET -related docu-
mentation and software drop site. No talk pages yet -
Comments are meant to go elsewhere, such as Channel
9.)
Captulo 13

MSDN Library

MSDN Library (Biblioteca de desarrollo de Microsoft, en vigente en ese momento o, a veces dos versiones de Visual
Espaol) es la biblioteca ocial de Microsoft con la docu- Studio. Adems, cada nueva versin de Visual Studio no se
mentacin tcnica dirigida a los desarrolladores de la pla- integra con una versin anterior de MSDN. Una Bibliote-
taforma Microsoft Windows. MSDN representa la red de ca compatibles MSDN se libera con cada nueva versin de
desarrolladores de Microsoft. Visual Studio e incluido en el DVD de Visual Studio. Medi-
La biblioteca contiene documentacin sobre el API utili- da que se lanzan nuevas versiones de Visual Studio, nuevas
ediciones de MSDN Library no se integran con las versio-
zado con los productos de Microsoft as como cdigo de
ejemplo, artculos tcnicos, y sugerencias de programacin. nes anteriores de Visual Studio y ni siquiera son de edad
y / o documentacin obsoleta para los productos obsoletos
MSDN Library est disponible en la web y en CD y DVD
para suscriptores de pago. Inicialmente, la versin fsica o suspender. MSDN Library versiones se puede instalar de
lado a lado, es decir, tanto los de ms edad, as como la
slo estaba disponible como parte de una suscripcin a
MSDN y actualizada de forma trimestral. Sin embargo, a versin ms reciente de MSDN Library, pueden co-existir.
partir del ao 2006 puede ser descargada gratuitamente des-
de el Centro de descarga de Microsoft en formato de imagen
ISO[1][2][3] y el CD/DVD ya no se publica trimestralmente. 13.2 Versiones
En su lugar, su publicacin coincide con las actualizaciones
de las versiones de software ms importantes (como Visual
Studio y la publicacin de Service Packs de Windows).[4] De octubre de 2001 MSDN Library es la ltima ver-
sin que incluye la documentacin y la integracin con
Desde mayo de 2006, Microsoft tambin ha empezado a
Visual Studio 6.0.[6]
producir gratuitamente una versin en CD de la comuni-
dad de MSDN Library disponible para su descarga como
imagen ISO tambin en su Centro de descargas, que slo La de enero de 2003 MSDN Library es la ltima ver-
contiene las actualizaciones de contenido. El formato fsi- sin que incluye la documentacin y la integracin con
co de la biblioteca de la comunidad de MSDN est dirigida Visual Studio. NET (2002).[6][7]
mayormente a desarrolladores de pases donde las conexio-
nes de banda ancha a Internet no estn disponibles.[5] La de enero de 2006 MSDN Library es la ltima ver-
sin que incluye la documentacin y la integracin con
La edicin de Visual Studio Express se distribuye slo con Visual Studio. NET 2003.[7]
la biblioteca de MSDN Express, que forma parte de la bi-
blioteca completa, aunque pueden ser descargada libremen-
De abril de 2007 MSDN Library fue la ltima versin
te e instalada independiente.
que incluye la documentacin y la integracin con Vi-
sual Studio 2005 (Service Pack 1).

13.1 La integracin con Visual Stu- La versin 2008 de enero y ms tarde para incluir
la documentacin y la integracin con Visual Studio
dio 2008.

Cada edicin de MSDN Library slo se puede acceder con La versin de noviembre de 2008 y ms tarde para
un visor de ayuda (Microsoft Document Explorer o el visor incluir la documentacin y la integracin con Visual
de ayudar a otros), que est integrado con la nica versin Studio 2008 SP1.[8]

31
32 CAPTULO 13. MSDN LIBRARY

13.3 Vase tambin


MSDN
TechNet

SDK de Windows (antes SDK de la plataforma)

13.4 Referencias
[1] Edicin de disco de MSDN Library ahora tambin libre

[2] MSDN Library para Visual Studio 2005 Service Pack 1

[3] MSDN Library para Visual Studio 2008

[4] Documentacin y Sistema de Ayuda Microsoft Developer

[5] Distribucin de la Comunidad MSDN

[6] ltima versin de MSDN Library para Visual Studio 6.0

[7] ltima versin de MSDN Library para Visual Studio. NET

[8] MSDN Library para Visual Studio 2008 SP1

13.5 Enlaces externos


Diario de MSDN Library website
Captulo 14

Programacin orientada a objetos

La programacin orientada a objetos o POO (OOP se- Los mtodos (comportamiento) y atributos (estado) es-
gn sus siglas en ingls) es un paradigma de programa- tn estrechamente relacionados por la propiedad de conjun-
cin que usa objetos en sus interacciones, para disear to. Esta propiedad destaca que una clase requiere de mto-
aplicaciones y programas informticos. Est basado en va- dos para poder tratar los atributos con los que cuenta. El
rias tcnicas, incluyendo herencia, cohesin, abstraccin, programador debe pensar indistintamente en ambos con-
polimorsmo, acoplamiento y encapsulamiento. Su uso se ceptos, sin separar ni darle mayor importancia a alguno de
populariz a principios de la dcada de los aos 1990. En ellos. Hacerlo podra producir el hbito errneo de crear
la actualidad, existe una gran variedad de lenguajes de pro- clases contenedoras de informacin por un lado y clases con
gramacin que soportan la orientacin a objeto. mtodos que manejen a las primeras por el otro. De esta
manera se estara realizando una programacin estructu-
rada camuada en un lenguaje de programacin orientado
a objetos.
14.1 Introduccin
La POO diere de la programacin estructurada tradicio-
nal, en la que los datos y los procedimientos estn separados
Los objetos son entidades que tienen un determinado esta-
y sin relacin, ya que lo nico que se busca es el procesa-
do, comportamiento (mtodo) e identidad:
miento de unos datos de entrada para obtener otros de sali-
da. La programacin estructurada anima al programador a
El estado est compuesto de datos o informaciones; se- pensar sobre todo en trminos de procedimientos o funcio-
rn uno o varios atributos a los que se habrn asignado nes, y en segundo lugar en las estructuras de datos que esos
unos valores concretos (datos). procedimientos manejan. En la programacin estructurada
solo se escriben funciones que procesan datos. Los progra-
El comportamiento est denido por los mtodos o madores que emplean programacin orientada a objetos, en
mensajes a los que sabe responder dicho objeto, es de- cambio, primero denen objetos para luego enviarles men-
cir, qu operaciones se pueden realizar con l. sajes solicitndoles que realicen sus mtodos por s mismos.

La identidad es una propiedad de un objeto que lo di-


ferencia del resto; dicho con otras palabras, es su iden- 14.2 Origen
ticador (concepto anlogo al de identicador de una
variable o una constante).
Los conceptos de la programacin orientada a objetos tie-
nen origen en Simula 67, un lenguaje diseado para ha-
Un objeto contiene toda la informacin que permite de- cer simulaciones, creado por Ole-Johan Dahl y Kristen Ny-
nirlo e identicarlo frente a otros objetos pertenecientes a gaard, del Centro de Cmputo Noruego en Oslo. En este
otras clases e incluso frente a objetos de una misma clase, al centro se trabajaba en simulaciones de naves, que fueron
poder tener valores bien diferenciados en sus atributos. A su confundidas por la explosin combinatoria de cmo las di-
vez, los objetos disponen de mecanismos de interaccin lla- versas cualidades de diferentes naves podan afectar unas a
mados mtodos, que favorecen la comunicacin entre ellos. las otras. La idea surgi al agrupar los diversos tipos de na-
Esta comunicacin favorece a su vez el cambio de estado en ves en diversas clases de objetos, siendo responsable cada
los propios objetos. Esta caracterstica lleva a tratarlos co- clase de objetos de denir sus propios datos y comporta-
mo unidades indivisibles, en las que no se separa el estado mientos. Fueron renados ms tarde en Smalltalk, desarro-
y el comportamiento. llado en Simula en Xerox PARC (cuya primera versin fue

33
34 CAPTULO 14. PROGRAMACIN ORIENTADA A OBJETOS

escrita sobre Basic) pero diseado para ser un sistema com- Los componentes registrados como privados (priva-
pletamente dinmico en el cual los objetos se podran crear te) tambin se heredan, pero como no pertenecen a la
y modicar sobre la marcha (en tiempo de ejecucin) en clase, se mantienen escondidos al programador y slo
lugar de tener un sistema basado en programas estticos. pueden ser accedidos a travs de otros mtodos pbli-
La programacin orientada a objetos se fue convirtiendo en cos. Esto es as para mantener hegemnico el ideal de
el estilo de programacin dominante a mediados de los aos POO.
ochenta, en gran parte debido a la inuencia de C++, una Objeto Instancia de una clase. Entidad provista de un con-
extensin del lenguaje de programacin C. Su dominacin junto de propiedades o atributos (datos) y de com-
fue consolidada gracias al auge de las Interfaces grcas de portamiento o funcionalidad (mtodos), los mismos
usuario, para las cuales la programacin orientada a objetos que consecuentemente reaccionan a eventos. Se co-
est particularmente bien adaptada. En este caso, se habla rresponden con los objetos reales del mundo que nos
tambin de programacin dirigida por eventos. rodea, o con objetos internos del sistema (del progra-
Las caractersticas de orientacin a objetos fueron agrega- ma). Es una instancia a una clase.
das a muchos lenguajes existentes durante ese tiempo, in-
cluyendo Ada, BASIC, Lisp ms Pascal, entre otros. La adi- Mtodo Algoritmo asociado a un objeto (o a una clase de
cin de estas caractersticas a los lenguajes que no fueron objetos), cuya ejecucin se desencadena tras la recep-
diseados inicialmente para ellas condujo a menudo a pro- cin de un mensaje. Desde el punto de vista del com-
blemas de compatibilidad y en la capacidad de manteni- portamiento, es lo que el objeto puede hacer. Un m-
miento del cdigo. Los lenguajes orientados a objetos pu- todo puede producir un cambio en las propiedades del
ros, por su parte, carecan de las caractersticas de las cua- objeto, o la generacin de un evento con un nuevo
les muchos programadores haban venido a depender. Pa- mensaje para otro objeto del sistema.
ra saltar este obstculo, se hicieron muchas tentativas para
crear nuevos lenguajes basados en mtodos orientados a ob- Evento Es un suceso en el sistema (tal como una interac-
jetos, pero permitiendo algunas caractersticas imperativas cin del usuario con la mquina, o un mensaje enviado
de maneras seguras. El Eiel de Bertrand Meyer fue un por un objeto). El sistema maneja el evento enviando
temprano y moderadamente acertado lenguaje con esos ob- el mensaje adecuado al objeto pertinente. Tambin se
jetivos, pero ahora ha sido esencialmente reemplazado por puede denir como evento la reaccin que puede des-
Java, en gran parte debido a la aparicin de Internet y a la encadenar un objeto; es decir, la accin que genera.
implementacin de la mquina virtual de Java en la mayora
Atributos Caractersticas que tiene la clase.
de navegadores. PHP en su versin 5 se ha modicado; so-
porta una orientacin completa a objetos, cumpliendo todas Mensaje Una comunicacin dirigida a un objeto, que le
las caractersticas propias de la orientacin a objetos. ordena que ejecute uno de sus mtodos con ciertos pa-
rmetros asociados al evento que lo gener.

14.3 Conceptos fundamentales Propiedad o atributo Contenedor de un tipo de datos


asociados a un objeto (o a una clase de objetos), que
La programacin orientada a objetos es una forma de pro- hace los datos visibles desde fuera del objeto y esto
gramar que trata de encontrar una solucin a estos proble- se dene como sus caractersticas predeterminadas, y
mas. Introduce nuevos conceptos, que superan y amplan cuyo valor puede ser alterado por la ejecucin de algn
conceptos antiguos ya conocidos. Entre ellos destacan los mtodo.
siguientes:
Estado interno Es una variable que se declara privada,
que puede ser nicamente accedida y alterada por un
Clase Deniciones de las propiedades y comportamiento mtodo del objeto, y que se utiliza para indicar distin-
de un tipo de objeto concreto. La instanciacin es la tas situaciones posibles para el objeto (o clase de ob-
lectura de estas deniciones y la creacin de un objeto jetos). No es visible al programador que maneja una
a partir de ella. instancia de la clase.
Herencia (Por ejemplo, herencia de la clase C a la clase Componentes de un objeto Atributos, identidad, relacio-
D) es la facilidad mediante la cual la clase D here- nes y mtodos.
da en ella cada uno de los atributos y operaciones de
C, como si esos atributos y operaciones hubiesen sido Identicacin de un objeto Un objeto se representa por
denidos por la misma D. Por lo tanto, puede usar los medio de una tabla o entidad que est compuesta por
mismos mtodos y variables pblicas declaradas en C. sus atributos y funciones correspondientes.
14.4. CARACTERSTICAS DE LA POO 35

En comparacin con un lenguaje imperativo, una varia- objeto pueden acceder a su estado. Esto asegura que
ble no es ms que un contenedor interno del atributo del otros objetos no puedan cambiar el estado interno de
objeto o de un estado interno, as como la funcin es un un objeto de manera inesperada, eliminando efectos
procedimiento interno del mtodo del objeto. secundarios e interacciones inesperadas. Algunos len-
guajes relajan esto, permitiendo un acceso directo a
los datos internos del objeto de una manera controla-
14.4 Caractersticas de la POO da y limitando el grado de abstraccin. La aplicacin
entera se reduce a un agregado o rompecabezas de ob-
jetos.
Existe un acuerdo acerca de qu caractersticas contempla
la orientacin a objetos. Las caractersticas siguientes son Polimorsmo Comportamientos diferentes, asociados a
las ms importantes: objetos distintos, pueden compartir el mismo nombre;
al llamarlos por ese nombre se utilizar el comporta-
Abstraccin Denota las caractersticas esenciales de un miento correspondiente al objeto que se est usando.
objeto, donde se capturan sus comportamientos. Cada O, dicho de otro modo, las referencias y las coleccio-
objeto en el sistema sirve como modelo de un agente nes de objetos pueden contener objetos de diferentes
abstracto que puede realizar trabajo, informar y cam- tipos, y la invocacin de un comportamiento en una
biar su estado, y comunicarse con otros objetos en el referencia producir el comportamiento correcto para
sistema sin revelar cmo se implementan estas carac- el tipo real del objeto referenciado. Cuando esto ocu-
tersticas. Los procesos, las funciones o los mtodos rre en tiempo de ejecucin, esta ltima caractersti-
pueden tambin ser abstrados, y, cuando lo estn, una ca se llama asignacin tarda o asignacin dinmica.
variedad de tcnicas son requeridas para ampliar una Algunos lenguajes proporcionan medios ms estticos
abstraccin. El proceso de abstraccin permite selec- (en tiempo de compilacin) de polimorsmo, tales
cionar las caractersticas relevantes dentro de un con- como las plantillas y la sobrecarga de operadores de
junto e identicar comportamientos comunes para de- C++.
nir nuevos tipos de entidades en el mundo real. La
Herencia Las clases no se encuentran aisladas, sino que
abstraccin es clave en el proceso de anlisis y dise-
se relacionan entre s, formando una jerarqua de cla-
o orientado a objetos, ya que mediante ella podemos
sicacin. Los objetos heredan las propiedades y el
llegar a armar un conjunto de clases que permitan mo-
comportamiento de todas las clases a las que pertene-
delar la realidad o el problema que se quiere atacar.
cen. La herencia organiza y facilita el polimorsmo y
Encapsulamiento Signica reunir todos los elementos que el encapsulamiento, permitiendo a los objetos ser de-
pueden considerarse pertenecientes a una misma enti- nidos y creados como tipos especializados de objetos
dad, al mismo nivel de abstraccin. Esto permite au- preexistentes. Estos pueden compartir (y extender) su
mentar la cohesin de los componentes del sistema. comportamiento sin tener que volver a implementarlo.
Algunos autores confunden este concepto con el prin- Esto suele hacerse habitualmente agrupando los obje-
cipio de ocultacin, principalmente porque se suelen tos en clases y estas en rboles o enrejados que reejan
emplear conjuntamente. un comportamiento comn. Cuando un objeto hereda
de ms de una clase se dice que hay herencia mltiple;
Modularidad Se denomina modularidad a la propiedad siendo de alta complejidad tcnica por lo cual suele re-
que permite subdividir una aplicacin en partes ms currirse a la herencia virtual para evitar la duplicacin
pequeas (llamadas mdulos), cada una de las cuales de datos.
debe ser tan independiente como sea posible de la apli-
cacin en s y de las restantes partes. Estos mdulos se Recoleccin de basura La recoleccin de basura o garba-
pueden compilar por separado, pero tienen conexiones ge collection es la tcnica por la cual el entorno de ob-
con otros mdulos. Al igual que la encapsulacin, los jetos se encarga de destruir automticamente, y por
lenguajes soportan la modularidad de diversas formas. tanto desvincular la memoria asociada, los objetos que
hayan quedado sin ninguna referencia a ellos. Esto sig-
Principio de ocultacin Cada objeto est aislado del ex- nica que el programador no debe preocuparse por la
terior, es un mdulo natural, y cada tipo de objeto ex- asignacin o liberacin de memoria, ya que el entorno
pone una interfaz a otros objetos que especica cmo la asignar al crear un nuevo objeto y la liberar cuan-
pueden interactuar con los objetos de la clase. El aisla- do nadie lo est usando. En la mayora de los lenguajes
miento protege a las propiedades de un objeto contra hbridos que se extendieron para soportar el Paradig-
su modicacin por quien no tenga derecho a acce- ma de Programacin Orientada a Objetos como C++
der a ellas; solamente los propios mtodos internos del u Object Pascal, esta caracterstica no existe y la me-
36 CAPTULO 14. PROGRAMACIN ORIENTADA A OBJETOS

moria debe desasignarse expresamente. Genie

Harbour
14.5 Resumen Eiel

La programacin orientada a objetos es un paradigma sur- Fortran 90/95


gido en los aos 70, que utiliza objetos como elementos fun-
damentales en la construccin de la solucin. Un objeto es Java
una abstraccin de algn hecho o ente del mundo real, con
atributos que representan sus caractersticas o propiedades, JavaScript[2]
y mtodos que emulan su comportamiento o actividad. To-
das las propiedades y mtodos comunes a los objetos se en- Lexico[3]
capsulan o agrupan en clases. Una clase es una plantilla, un
prototipo para crear objetos; en general, se dice que cada Objective-C
objeto es una instancia o ejemplar de una clase.
Ocaml

Oz
14.6 Algunos lenguajes orientados a
objetos R

Pauscal [En espaol]


Simula (1967) es aceptado como el primer lenguaje que po-
see las caractersticas principales de un lenguaje orientado a Perl[4]
objetos. Fue creado para hacer programas de simulacin, en
donde los objetos son la representacin de la informacin PHP[5]
ms importante. Smalltalk (1972 a 1980) es posiblemente
el ejemplo cannico, y con el que gran parte de la teora de PowerBuilder
la programacin orientada a objetos se ha desarrollado.
Entre los lenguajes orientados a objetos se destacan los si- Python
guientes:
Ruby

ABAP -> SAP Lenguaje orientado a eventos Self


ABL Lenguaje de programacin de OpenEdge de Pro- Smalltalk[6]
gress Software

ActionScript Magik (SmallWorld)

ActionScript 3 Vala

Ada VB.NET
C++ Visual FoxPro[7]
C#
Visual Basic 6.0
Clarion
Visual DataFlex
Clipper[1]
Visual Objects
D
XBase++
Object Pascal (Embarcadero Delphi)

Gambas Lenguaje DRP

GObject Scala[8]
14.9. ENLACES EXTERNOS 37

Muchos de estos lenguajes de programacin no son pura-


mente orientados a objetos, sino que son hbridos que com-
binan la POO con otros paradigmas.
Al igual que C++, otros lenguajes, como OOCOBOL,
OOLISP, OOPROLOG y Object REXX, han sido creados
aadiendo extensiones orientadas a objetos a un lenguaje
de programacin clsico.
Un nuevo paso en la abstraccin de paradigmas de progra-
macin es la Programacin Orientada a Aspectos (POA).
Aunque es todava una metodologa en estado de madura-
cin, cada vez atrae a ms investigadores e incluso proyec-
tos comerciales en todo el mundo.

14.7 Vase tambin


Ingeniera de software basada en componentes
Base de datos orientada a objetos

14.8 Notas y referencias


[1] Versin 5.x con librera de objetos Class(y)

[2] la herencia se realiza por medio de la programacin basada


en prototipos.

[3] en castellano

[4] soporta herencia mltiple. La resolucin se realiza en


preorden, pero puede modicarse al algoritmo linearization
C3 por medio del mdulo Class::C3 en CPAN)

[5] a partir de su versin 5

[6] Entorno de objetos puro

[7] en su versin 6

[8] lenguaje usado por Twitter

14.9 Enlaces externos


Qu es la programacin orientada a objetos
38 CAPTULO 14. PROGRAMACIN ORIENTADA A OBJETOS

14.10 Texto e imgenes de origen, colaboradores y licencias


14.10.1 Texto
Clase (informtica) Fuente: https://es.wikipedia.org/wiki/Clase_(inform%C3%A1tica)?oldid=80450283 Colaboradores: JorgeGG, Pilaf, Pa-
cohc, Dodo, Opinador, El Moska, JavierCantero, Fmariluis, Airunp, Yrithinnd, Orgullobot~eswiki, RobotQuistnix, Varano, Echani, GermanX,
The Photographer, Jesuja, Otermin, Jstitch, BOTpolicia, CEM-bot, Sippel2707, Thijs!bot, Bot que revierte, JAnDbot, TXiKiBoT, Rei-bot,
Biasoli, Cinevoro, VolkovBot, Snakeyes, Technopat, Matdrodes, Muro Bot, BotMultichill, SieBot, Loveless, Tirithel, Practiko, Botito777, Alex-
bot, Aipni-Lovrij, BotSottile, AVBOT, Diegusjaimes, Luckas-bot, SuperBraulio13, Xqbot, Jkbw, Modulolunar, Adryitan, Botarel, TobeBot,
EmausBot, HRoestBot, Waka Waka, MerlIwBot, Elvisor, Helmy oved, RosenJax, Addbot, Coins, Fvalenzuela061 y Annimos: 63
Atributo (informtica) Fuente: https://es.wikipedia.org/wiki/Atributo_(inform%C3%A1tica)?oldid=83064370 Colaboradores: Sabbut, CEM-
bot, Technopat, Handradec, Practiko, Leonpolanco, LordT, Arjuno3, SuperBraulio13, Jkbw, Ganmedes, Tarawa1943, Grillitus, MerlIwBot,
JABO, Addbot, Matiia, HALOU, Sfr570 y Annimos: 13
Tipo de dato elemental Fuente: https://es.wikipedia.org/wiki/Tipo_de_dato_elemental?oldid=77059484 Colaboradores: Emijrp, Jesuja, Aso-
call, Loveless, Juan Mayordomo, Waeswaes, Grillitus, MerlIwBot, Addbot y DarkBlueZV
Tipo de dato Fuente: https://es.wikipedia.org/wiki/Tipo_de_dato?oldid=83221384 Colaboradores: Moriel, Sauron, Zwobot, Triku, Sms, Rsg,
Elwikipedista, Jsanchezes, Almorca, Renabot, Emijrp, Magister Mathematicae, Orgullobot~eswiki, RobotQuistnix, Superzerocool, Vitamine,
YurikBot, GermanX, KnightRider, The Photographer, Jesuja, Tomatejc, BOTpolicia, CEM-bot, Jorgelrm, Zsimo, Eamezaga, Fsd141, Al-
varo qc, Srengel, JoaquinFerrero, JAnDbot, Nioger, Plux, Biasoli, Dusan, Cinevoro, Snakeyes, Technopat, Erl, Matdrodes, Elabra sanchez,
NudoMarinero, Muro Bot, Mel 23, Manw, Mafores, Tirithel, Leonpolanco, Juan Mayordomo, Kroji, UA31, AVBOT, David0811, MastiBot,
NicolasAlejandro, Diegusjaimes, Arjuno3, Luckas-bot, Ptbotgourou, Dangelin5, Barteik, Mcapdevila, SuperBraulio13, PAULOGARCIA2005,
Kender00, Manuelt15, Jkbw, Ricardogpn, BOTirithel, AnselmiJuan, PatruBOT, Ganmedes, EmausBot, AVIADOR, HRoestBot, PabloXeven,
Writkas, Rudygt, Waka Waka, WikitanvirBot, Mjbmrbot, Fernandoxxx, Antonorsi, Sebrev, Vichock, Vetranio, Ralgisbot, Syum90, Addbot,
Danieldu321, ConnieGB, Marjes99, Ignacio cervantes, DarkBlueZV, Jarould, Egis57, Fearinghealer y Annimos: 143
Common Language Runtime Fuente: https://es.wikipedia.org/wiki/Common_Language_Runtime?oldid=83347139 Colaboradores: Robot-
Quistnix, Paradoja, CEM-bot, HJPL, Thijs!bot, Gustronico, Biasoli, VolkovBot, Botito777, LucienBOT, MastiBot, Luckas-bot, DixonDBot,
Dinamik-bot, TjBot, GrouchoBot, EmausBot, ALobpreis, Addbot y Annimos: 9
Infraestructura de lenguaje comn Fuente: https://es.wikipedia.org/wiki/Infraestructura_de_lenguaje_com%C3%BAn?oldid=70047167 Co-
laboradores: Pino, Wikier~eswiki, Yrbot, BOTijo, Dangertn, Biasoli, Muro Bot, Bcnbits.com, XalD, Leonpolanco, Luckas-bot, SuperBraulio13,
Canyq, Waeswaes, EmausBot, Javiermarinros, MerlIwBot, KLBot2, Dexbot y Annimos: 6
Microsoft .NET Fuente: https://es.wikipedia.org/wiki/Microsoft_.NET?oldid=83012185 Colaboradores: Robbot, Drjackzon, Dodo, Rsg, Do-
maniom, Cinabrium, Almorca, Digigalos, Guille.hoardings, Airunp, Edub, Wornaki, Hari Seldon, Rembiapo pohyiete (bot), Murven, Alhen,
Superzerocool, Chobot, Paradoja, Luisdans, Baito, BOT-Superzerocool, FlaBot, BOTijo, YurikBot, GermanX, LoquBot, KnightRider, Rmar-
co, C-3POrao, FedericoMP, Eskimbot, Monta990, Chlewbot, Jago84, BOTpolicia, CEM-bot, Gabriel Acquistapace, Gafotas, Montgomery,
FrancoGG, Thijs!bot, Airwolf, Piculo, Un Mercenario, VARGUX, Locovich, Alex LE, Fjpatonnoblejas, Gngora, Mpeinadopa, JAnDbot,
Jugones55, Mauer uk07, Kved, Mansoncc, Muro de Aguas, TXiKiBoT, Xosema, Gustronico, Humberto, Netito777, Ale ashero, Bedwyr,
Biasoli, AlnoktaBOT, Cinevoro, Drever, Galandil, Matdrodes, Fernando Estel, Muro Bot, Edmenb, DevilishFreak, SieBot, Loveless, Macarro-
nes, Daniel dj, BOTarate, Bot ashero, Ken123BOT, Mister Crujiente, Mafores, Yonseca, Xqno, Tirithel, Jarisleif, Artistadelpecado, Msucre,
Botelln, Pablo323, Grt, Furti, Hercule, Alexbot, Nerika, TrebleChaser, Btyner, AVBOT, David0811, LucienBOT, Poshista~eswiki, Diegusjai-
mes, Linfocito B, CarsracBot, HerculeBot, MVG MVG, Luckas-bot, Ratasxy, Riad.Bot~eswiki, Lucaseto, Rodrigo.guevara, LordboT, S3b4s5,
DSisyphBot, ArthurBot, Locobot, Xqbot, Jkbw, Rubinbot, Pedrovicenterosero, Surfaz, BOTirithel, TiriBOT, Gusbelluwiki, Linux65, Daniel-
kolombia, Omerta-ve, Baac830911, Rro4785, PatruBOT, Calxami, Anabelix, Juaminen, Filipchu, Lucesilo, Ripchip Bot, Pamel3, Anabe2x,
Elim1v, Anam3, Blaz77, Nachosan, Jorge c2010, Savh, J. A. Glvez, Grillitus, JackieBot, ChuispastonBot, Walter.atg, GM83, Ruos, MerlIw-
Bot, KLBot2, ChayitaBOT, Sebrev, MetroBot, Ninrouter, Rodpedja, Santga, Aleix 1379, Tarod, Jarould y Annimos: 176
ADO.NET Fuente: https://es.wikipedia.org/wiki/ADO.NET?oldid=82754145 Colaboradores: Pipepupo, GermanX, CEM-bot, HJPL, SkG, Lo-
covich, Gsrdzl, Muro Bot, Rrrafa, Jkarretero, SieBot, Jarisleif, David.rgh, Nicop, Pablo323, AVBOT, LucienBOT, Luckas-bot, DSisyphBot,
ArthurBot, SuperBraulio13, D'ohBot, Halfdrag, Rro4785, PatruBOT, GustavoFischer, FaleBot, Gabrielm38, ChuispastonBot, EdoBot, Edc.Edc,
KLBot2, Elvisor, YFdyh-bot y Annimos: 25
Diagrama de clases Fuente: https://es.wikipedia.org/wiki/Diagrama_de_clases?oldid=83180014 Colaboradores: Airunp, Taichi, Gerkijel, Jl-
chavez, GermanX, Equi, The Photographer, Baneld, Jarke, CEM-bot, Cantero, Ignacio Icke, Isha, JAnDbot, JulGor, Aalvarez12, Rometern2,
Anthemfor182, Fixertool, Dusan, VolkovBot, Matdrodes, Keres, Muro Bot, SieBot, Jareyes, Leonpolanco, Ucevista, AVBOT, Vgrunberg, Die-
gusjaimes, Lautaro2k, Ezarate73, SuperBraulio13, Xqbot, Jkbw, Cvielma, Botarel, RedBot, PatruBOT, Victoriano Romn, Edslov, EmausBot,
Allforrous, Rubpe19, Jota.millan.bcn, WikitanvirBot, Rezabot, 5truenos, Jr JL, LlamaAl, Helmy oved, Legobot, Andres324070, OssKr, Nanocv
y Annimos: 122
C Sharp Fuente: https://es.wikipedia.org/wiki/C_Sharp?oldid=83158044 Colaboradores: Juancri, Sabbut, Moriel, Pablo.cl, ManuelGR, San-
bec, Bigsus, Interwiki, Dodo, Ascnder, Sms, Tostadora, Renacimiento, Krous~eswiki, Robotito, Slady, Suruena, Renabot, ZackBsAs, Cami-
loAndres, Emijrp, Rembiapo pohyiete (bot), Orgullobot~eswiki, Murven, RobotQuistnix, Superzerocool, Yrbot, BOT-Superzerocool, Oscar .,
BOTijo, YurikBot, GermanX, KnightRider, Gothmog, Jesuja, Eskimbot, Baneld, Gnovaro, Tomatejc, Kuanto, JorSol, Faelomx, Ivan romero,
Cad, Kn, DarK AnImA, CEM-bot, Tripy, Anonimato1990, Ranagha, CF, Montgomery, Thijs!bot, PabloCastellano, JoaquinFerrero, Locovich,
Chien, Yamaneko, Scmbg, TXiKiBoT, Netito777, Rei-bot, Vrrivaro, Chabbot, Plux, Developer, Biasoli, AlnoktaBOT, Cinevoro, VolkovBot,
Eber.irigoyen, Technopat, Jotego, Matdrodes, Elabra sanchez, Gorpik, Shooke, AlleborgoBot, Muro Bot, BotMultichill, SieBot, Loveless, Obe-
lix83, Cobalttempest, Drinibot, Tirithel, Locos epraix, XalD, Javierito92, Krlo, DragonBot, Rizziac, Pablo323, Botito777, AngelDrup, Poco a
poco, Darkicebot, Nerika, Kadellar, SilvonenBot, UA31, AVBOT, Fefudito, LucienBOT, MastiBot, Diegusjaimes, DumZiBoT, Ferto, Cars-
racBot, Luckas-bot, Danmol10, Bifus, Ptbotgourou, FariBOT, Rafael1193, Rindokenzaki, SuperBraulio13, Manuelt15, Xqbot, Jkbw, Dreitmen,
14.10. TEXTO E IMGENES DE ORIGEN, COLABORADORES Y LICENCIAS 39

Pedrovicenterosero, Damosu, Adryitan, Amgc56, RedBot, Neres, Abece, Patriciocs, PatruBOT, KamikazeBot, Dinamik-bot, TjBot, Edslov,
EmausBot, Savh, ZroBot, ChessBOT, Eldavan, UnRar, Jcaraballo, Ruos, Xerox 5B, Rezabot, MerlIwBot, KLBot2, AbelNightroad26, Avic-
Bot, MetroBot, Invadibot, Sergiohs, Vetranio, Sophihurtado, TheDonWea, Flashlack, Addbot, Giliofelix, Yantime y Annimos: 197
Espacio de nombres Fuente: https://es.wikipedia.org/wiki/Espacio_de_nombres?oldid=77347696 Colaboradores: Chobot, Escarbot, Jorgeola-
ya, Caliver, Idioma-bot, Pavelancka, Biasoli, Muro Bot, Bigsus-bot, Fanattiq, AVBOT, EmausBot, Sergio Andres Segovia, MerlIwBot, Zerabat,
Addbot y Annimos: 8
Microsoft Developer Network Fuente: https://es.wikipedia.org/wiki/Microsoft_Developer_Network?oldid=79950353 Colaboradores: Cho-
bot, Oscar ., BOTijo, The Photographer, CEM-bot, Roberpl, Thijs!bot, Locovich, TXiKiBoT, Marvelshine, Biasoli, Shooke, Muro Bot, Ga-
briellocutor, Pan con queso, Ssigfrrido, Rge, LucienBOT, Luckas-bot, Boto a Boto, Ptbotgourou, DiegoFb, ArthurBot, Rubinbot, Hprmedina,
Misamisa1, EmausBot, Allforrous, MerlIwBot, KLBot2, Jarould y Annimos: 9
MSDN Library Fuente: https://es.wikipedia.org/wiki/MSDN_Library?oldid=66864358 Colaboradores: Cidfadon, Aungari, LucienBOT,
Luckas-bot, Nachosan, EmausBot y KLBot2
Programacin orientada a objetos Fuente: https://es.wikipedia.org/wiki/Programaci%C3%B3n_orientada_a_objetos?oldid=83206425 Cola-
boradores: AstroNomo, Andre Engels, Moriel, Sauron, Pieter, Hashar, ManuelGR, Robbot, Raul2010~eswiki, Angus, Caravena, Vivero, Co-
mae, Rosarino, Dodo, Crescent Moon, Ascnder, Sms, Elwikipedista, Tano4595, Barcex, JavierCantero, Jecanre, Ivan.Romero, MatiasBellone,
Identy, Niqueco, SergioVares, Soulreaper, Joji, Airunp, Nulain, Alejolp, JMPerez, Taichi, Rembiapo pohyiete (bot), El Padrino, Dem, Fun-
in, Josuemb, Murven, Byj2000, Alhen, Superzerocool, Yrbot, Vitamine, BOTijo, YurikBot, Icvav, GermanX, ZeruGiran, KnightRider, The
Photographer, Edwardcetera, Jesuja, Txo, Otermin, Lasneyx, Spc, Tomatejc, Aleator, Jstitch, BOTpolicia, l, Manawo, Chguer, CEM-bot,
Jorgelrm, Tute, Laura Fiorucci, Mariano12 1989, X.Cyclop, Anonimato1990, Antur, Montgomery, Alvaro qc, PabloCastellano, Mahadeva,
Yeza, JoaquinFerrero, IrwinSantos, Kavanagh, Cratn, Isha, Egaida, Mpeinadopa, JAnDbot, Kved, Mansoncc, Muro de Aguas, TXiKiBoT, Su-
perJoe, Anthemfor182, Bot-Schafter, Humberto, Netito777, Xsm34, Sirpuppet, Idioma-bot, Plux, Jmvkrecords, Developer, Biasoli, Cinevoro,
VolkovBot, Technopat, Queninosta, Nesita02, Erl, Penguino, Matdrodes, FJJW, Etnas, Carocbax, DJ Nietzsche, Muro Bot, Edmenb, Othe-
rox, Dj Merlin, Soynatan, SieBot, ESTEBAN ESPINOZA, Carmin, Mel 23, Manw, Pascow, Pedro Felipe, Aleposta, Tirithel, Locos epraix,
Ing moi, Javierito92, Marcecoro, HUB, Nicop, DragonBot, Lentucky, Farisori, Estirabot, Tosin2627, Eduardosalg, Leonpolanco, Pan con que-
so, Pablo323, Cosmox, Furti, Poco a poco, Tonchizerodos, Alexbot, Darkicebot, Serser, Prision3ro, BodhisattvaBot, Raulshc, Aipni-Lovrij,
SilvonenBot, Camilo, UA31, Abajo estaba el pez, AVBOT, David0811, Angel GN, MarcoAurelio, Carok, Diegusjaimes, DumZiBoT, Cars-
racBot, HerculeBot, Arjuno3, Juvalen, Andreasmperu, Luckas-bot, Spirit-Black-Wikipedista, Yonidebot, ArthurBot, Milyka, SuperBraulio13,
Xqbot, Jkbw, Dreitmen, Leonardo Tadei, Pedrovicenterosero, FrescoBot, Ricardogpn, Metronomo, Botarel, BOTirithel, Hprmedina, Halfdrag,
Bitman28, Marsal20, Vubo, Maaksz2, El mago de la Wiki, PatruBOT, Dinamik-bot, LilyKitty, TjBot, Akira 999, Foundling, EmausBot, Sergio
Andres Segovia, Africanus, Superbenja, J053d, Minirobots, Wrdhat, Emiduronte, MadriCR, Waka Waka, Penavarro09, Tokvo, MerlIwBot,
Raymonddoyle, MetroBot, Bibliolotranstornado, DLeandroc, Helmy oved, Syum90, Lautaro 97, Josefergui, Lamauro, Jean70000, Addbot,
Balles2601, Jmas131, Machado Ortiz, DarkBlueZV, Jlopezsilva, Jarould, Matiia, DavidBorjaM, Vivi bos y Annimos: 617

14.10.2 Imgenes
Archivo:Common_Language_Runtime_diagram.svg Fuente: https://upload.wikimedia.org/wikipedia/commons/a/af/Common_Language_
Runtime_diagram.svg Licencia: CC-BY-SA-3.0 Colaboradores: Trabajo propio, based on ASCII diagram found at Wikipedia:en:Common Lan-
guage Runtime Artista original: Leif Arne Storset
Archivo:Commons-emblem-question_book_orange.svg Fuente: https://upload.wikimedia.org/wikipedia/commons/1/1f/
Commons-emblem-question_book_orange.svg Licencia: CC BY-SA 3.0 Colaboradores: <a href='//commons.wikimedia.
org/wiki/File:Commons-emblem-issue.svg' class='image'><img alt='Commons-emblem-issue.svg' src='//upload.wikimedia.org/
wikipedia/commons/thumb/b/bc/Commons-emblem-issue.svg/25px-Commons-emblem-issue.svg.png' width='25' height='25'
srcset='//upload.wikimedia.org/wikipedia/commons/thumb/b/bc/Commons-emblem-issue.svg/38px-Commons-emblem-issue.svg.png
1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/b/bc/Commons-emblem-issue.svg/50px-Commons-emblem-issue.svg.png 2x'
data-le-width='48' data-le-height='48' /></a> + <a href='//commons.wikimedia.org/wiki/File:Question_book.svg' class='image'><img
alt='Question book.svg' src='//upload.wikimedia.org/wikipedia/commons/thumb/9/97/Question_book.svg/25px-Question_book.svg.png'
width='25' height='20' srcset='//upload.wikimedia.org/wikipedia/commons/thumb/9/97/Question_book.svg/38px-Question_book.svg.png
1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/9/97/Question_book.svg/50px-Question_book.svg.png 2x' data-le-width='252'
data-le-height='199' /></a> Artista original: GNOME icon artists, Jorge 2701
Archivo:Commons-logo.svg Fuente: https://upload.wikimedia.org/wikipedia/commons/4/4a/Commons-logo.svg Licencia: Public domain Co-
laboradores: This version created by Pumbaa, using a proper partial circle and SVG geometry features. (Former versions used to be slightly
warped.) Artista original: SVG version was created by User:Grunt and cleaned up by 3247, based on the earlier PNG version, created by Reidab.
Archivo:Diagrama_CLR.jpg Fuente: https://upload.wikimedia.org/wikipedia/commons/9/99/Diagrama_CLR.jpg Licencia: CC BY-SA 2.5-
2.0-1.0 Colaboradores: ? Artista original: ?
Archivo:Diagrama_Interno_CLR.jpg Fuente: https://upload.wikimedia.org/wikipedia/commons/d/df/Diagrama_Interno_CLR.jpg Licencia:
CC BY-SA 2.5-2.0-1.0 Colaboradores: ? Artista original: ?
Archivo:Diagrama_de_Clases.png Fuente: https://upload.wikimedia.org/wikipedia/commons/6/6d/Diagrama_de_Clases.png Licencia: CC0
Colaboradores: Trabajo propio Artista original: The Photographer
Archivo:Diagrama_de_clases.svg Fuente: https://upload.wikimedia.org/wikipedia/commons/2/24/Diagrama_de_clases.svg Licencia: CC BY-
SA 3.0 Colaboradores: Trabajo propio Artista original: The Photographer
Archivo:DotNet3.0.svg Fuente: https://upload.wikimedia.org/wikipedia/commons/4/49/DotNet3.0.svg Licencia: CC-BY-SA-3.0 Colaborado-
res: Transferred from en.wikipedia Artista original: Original uploader was Surachit at en.wikipedia Later version(s) were uploaded by Soumyasch
at en.wikipedia.
40 CAPTULO 14. PROGRAMACIN ORIENTADA A OBJETOS

Archivo:Ensamble_NET.jpg Fuente: https://upload.wikimedia.org/wikipedia/commons/1/11/Ensamble_NET.jpg Licencia: CC BY-SA 2.5-


2.0-1.0 Colaboradores: ? Artista original: ?
Archivo:KP-UML-Aggregation-20060420.svg Fuente: https://upload.wikimedia.org/wikipedia/commons/2/2a/
KP-UML-Aggregation-20060420.svg Licencia: Public domain Colaboradores: ? Artista original: ?
Archivo:MSDN_LOGO.png Fuente: https://upload.wikimedia.org/wikipedia/commons/6/69/MSDN_LOGO.png Licencia: Public domain
Colaboradores: http://www.msdn.com/ Artista original: Joel Common
Archivo:NETFrameworkEsquemaJoanNE.png Fuente: https://upload.wikimedia.org/wikipedia/commons/b/b2/
NETFrameworkEsquemaJoanNE.png Licencia: CC BY 3.0 Colaboradores: Trabajo propio Artista original: Je cat (Discusin contribuciones)
Archivo:Overview_of_the_Common_Language_Infrastructure.svg Fuente: https://upload.wikimedia.org/wikipedia/commons/8/85/
Overview_of_the_Common_Language_Infrastructure.svg Licencia: Public domain Colaboradores: Trabajo propio Artista original: Jarkko
Piiroinen
Archivo:Spanish_Language_Wiki.svg Fuente: https://upload.wikimedia.org/wikipedia/commons/2/2a/Spanish_Language_Wiki.svg Licen-
cia: CC BY-SA 3.0 Colaboradores: Derived from Wiki puzzle.svg by user:Kimbar Artista original: James.mcd.nz
Archivo:Translation_arrow.svg Fuente: https://upload.wikimedia.org/wikipedia/commons/2/2a/Translation_arrow.svg Licencia: CC-BY-
SA-3.0 Colaboradores: Este grco vectorial fue creado con Inkscape. Artista original: Jesse Burgheimer
Archivo:UML_role_example.gif Fuente: https://upload.wikimedia.org/wikipedia/commons/4/4d/UML_role_example.gif Licencia: CC-BY-
SA-3.0 Colaboradores: Transferred from en.wikipedia by SreeBot Artista original: Esap at en.wikipedia
Archivo:Wikibooks-logo.svg Fuente: https://upload.wikimedia.org/wikipedia/commons/f/fa/Wikibooks-logo.svg Licencia: CC BY-SA 3.0
Colaboradores: Trabajo propio Artista original: User:Bastique, User:Ramac et al.

14.10.3 Licencia de contenido


Creative Commons Attribution-Share Alike 3.0

Potrebbero piacerti anche