Anda di halaman 1dari 45

Manual Primer Parcial LP2

ndice general
1

Clase (informtica)

1.1

Componentes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

1.1.1

Campos de datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

1.1.2

Mtodos en las clases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

1.1.3

Propiedades

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

1.2
2

Vase tambin

Atributo (informtica)

2.1

Vase tambin

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Tipo de dato elemental

Tipo de dato

4.1

Tipos de datos primitivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

4.1.1

Caracteres

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

4.1.2

Numricos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

4.1.3

Booleanos

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Variables en distintos lenguajes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

4.2.1

Pauscal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

4.3

Referencias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

4.4

Vase tambin

4.2

Common Language Runtime

5.1

Vase tambin

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

5.2

Referencias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Infraestructura de lenguaje comn


6.1

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Vase tambin

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

10

Microsoft .NET

11

7.1

Consideraciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

11

7.2

Componentes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

11

ii

NDICE GENERAL
7.3

Common Language Runtime

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

12

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

7.3.1

ADO.NET
8.1

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

15

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

Diagrama de clases

18

9.1

Miembros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

18

9.1.1

Visibilidad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

18

9.1.2

mbitos

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

18

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

18

Relaciones a nivel de instancia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

18

9.2

Relaciones
9.2.1

9.3

Diagramas

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

10 C Sharp

19
20

10.1 Historia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

20

10.2 Tipos de datos

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

20

10.3 Literales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

20

10.4 Variables

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

21

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

21

10.6 Operadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

22

10.7 Instrucciones de control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

22

10.8 Mtodos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

22

10.9 Matrices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

23

10.5 Constantes

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

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

12 Microsoft Developer Network

27
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


14.1 Introduccin

33

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

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 (metaobjeto) en tiempo de ejecucin, que proporciona apoyo en
tiempo de ejecucin para la manipulacin de los metadatos relacionados con la clase.

1.1

Componentes

Las clases se componen de elementos, llamados genricamente 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
sustantivos, los campos de datos pueden ser sustantivos o
adjetivos, y los mtodos son los verbos.

Ejemplos de clases

En informtica, una clase es una plantilla para la creacin


de objetos de datos segn un modelo predenido. Las clases
se utilizan para representar entidades o conceptos, como los
sustantivos en el lenguaje. Cada clase es un modelo que dene un conjunto de variables -el estado, y mtodos apropiados para operar con dichos datos -el comportamiento. Cada
objeto creado a partir de la clase se denomina instancia de
la clase.

La sintaxis tpica de una clase es:


class Nombre { // Variables miembro (habitualmente
privadas) miembro_1; //lista de miembros miembro_2;
miembro_3; // Funciones o mtodos (habitualmente
pblicas) funcion_miembro_1( ); // funciones miembro
conocidas funcion_miembro_2 ( ); // funciones como
mtodos // Propiedades (habitualmente pblicas) propiedad_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 operaciones asociadas al modo de una caja negra. Los lenguajes de programacin que soportan clases dieren sutil- 1.1.1 Campos de datos
mente en su soporte para diversas caractersticas relacionadas 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 alma1

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 objeto (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 objeto. 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 implcita.
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 privadas 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 dene una propiedad de un Objeto, elemento o archivo. Tambin puede referirse o establecer el valor especco para una
instancia determinada de los mismos.

las mismas operaciones (por muy similares que sean,


estos son todos formatos de datos de grcos) como
un archivo BMP o PNG, ni es un nmero de coma otante operado por las normas aplicadas al los enteros
largos.

Sin embargo, actualmente, el trmino atributo puede y con


frecuencia se considera como si fuera una propiedad depenPor ejemplo, en computacin grca los objetos de pladiendo de la tecnologa que se use.
nos pueden tener atributos tales como espesor (con valoPara 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 cocuencia 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 atrivalor 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 elemento puede tener una serie de atributos establecidos (Nombre
= estoesunapropiedad).

2.1

Si el elemento en cuestin puede ser considerado una propiedad (Nombre_Cliente) de otra entidad (digamos cliente), el elemento puede tener cero o ms atributos (propiedades) de su propio (Nombre_Cliente es de Tipo = tipotexto).

Vase tambin

Campo (informtica)
HTML

Un atributo de un objeto por lo general consiste de un nombre 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 caracteres 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 formato de representacin, un valor por defecto, y las operaciones legales (normas) y restricciones ("Divisin
por cero no est permitida!") Son todos los que podran 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 podemos (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 primitivos 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)

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 rojo, 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 multiplicacin.
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
trabajar con todos los caracteres de distintos idiomas.
matemtica y la lgica.
Tipo de dato Rango Tamao de bits char 0 a 6553516 bits

En un sentido amplio, un tipo de datos dene un conjunto


de valores y las operaciones sobre estos valores. Casi todos los lenguajes de programacin explcitamente incluyen
la notacin del tipo de datos, aunque lenguajes diferentes
pueden usar terminologas diferentes. La mayor parte de
los lenguajes de programacin permiten al programador denir tipos de datos adicionales, normalmente combinando
mltiples elementos de otros tipos y deniendo las operaciones del nuevo tipo de dato. Por ejemplo, un programador
puede crear un nuevo tipo de dato llamado Persona que
especca que el dato interpretado como Persona incluir,
por ejemplo, un nombre y una fecha de nacimiento.

4.1.2

Numricos

Este tipo de dato puede ser real o entero, dependiendo del


tipo de dato que se vaya a utilizar.
Enteros: son los valores que no tienen punto decimal, pueden ser positivos o negativos y el cero.
Tipo de dato: byte tamao = 8 bits Tipo de dato: short tamao = 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 limitacin impuesta en la interpretacin de los datos en un sistema
de tipicacin, describiendo la representacin, la interpretacin y la estructura de los valores u objetos almacenados en la memoria del ordenador. El sistema de tipicacin

Reales: estos caracteres almacenan nmeros muy grandes


que poseen parte entera y parte decimal.
Tipo de dato: oat tamao = 32 bits Tipo de dato: double
tamao = 64 bits
5

CAPTULO 4. TIPO DE DATO

4.1.3

Booleanos

Este tipo de dato se emplea para valores lgicos, los podemos 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 variables de tipo caracter (Cadena) y numrica. Como se
puede apreciar, todas las variables excepto la de tipo Cadena son de tipo numricas (incluyendo Booleano).

4.3 Referencias
Luca Cardelli, Peter Wegner. On Understanding Types, Data Abstraction, and Polymorphism, from Computing 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


CLR permite a los programadores ignorar muchos detalles especcos del microprocesador que estar ejecutando
el programa. El CLR tambin permite otros servicios importantes, incluyendo los siguientes:

C# compiler
C#

VB.NET compiler
VB.NET

Other .NET
language

MSIL code

CLR

Native code

Other compiler

Administracin de la memoria
Compile time

Administracin de hilos

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
ejecucin para los cdigos de los programas que corren sobre la plataforma Microsoft .NET. El CLR es el encargado de compilar una forma de cdigo intermedio llamada
Common Intermediate Language (CIL, anteriormente conocido como MSIL, por Microsoft Intermediate Language), al cdigo de maquina nativo, mediante un compilador
en tiempo de ejecucin.[2] No debe confundirse el CLR con
una mquina virtual, ya que una vez que el cdigo est compilado, corre nativamente sin intervencin de una capa de
abstraccin sobre el hardware subyacente. Es una implementacin del estndar Common Language Infrastructure
(CLI).

Seguridad

5.1

Vase tambin

Microsoft .NET
Common Language Infrastructure
Common Intermediate Language
Mquina virtual Parrot

Los desarrolladores que usan CLR escriben el cdigo fuente


en un lenguaje compatible con .NET, como C# o Visual Basic .NET. En tiempo de compilacin, un compilador .NET
convierte el cdigo a CIL. En tiempo de ejecucin, el compilador del CLR convierte el cdigo CIL en cdigo nativo
para el sistema operativo. Alternativamente, el cdigo CIL
es compilado a cdigo nativo en un proceso separado anterior a la ejecucin. Esto acelera las posteriores ejecuciones
del software debido a que la compilacin de MSIL a nativo
ya no es necesaria.

Java virtual machine

A pesar de que algunas implementaciones del Common


Language Infrastructure se ejecutan en sistemas operativos
que no sean Windows, el CLR se ejecuta solo en Microsoft
Windows.

Mquina virtual

Portable.NET
Mono
Metadato
Tiempo de ejecucin
Common Type System

Conceptos de programacin en CLR Disponible traduccin automtica en espaol.


7

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 Infrastructure (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 partes principales de la arquitectura de CLI es interesante analizar los objetivos de diseo que se plantearon desde su concepcin. Segn su especicacin, la arquitectura de CLI debe:
Permitir escribir componentes nteroperables independientemente 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 especicacin, este sistema es conocido como CTS, o Common
Type System).
Empaquetar todos los tipos en unidades completamente auto descriptivas y portables.

Representacin visual, en ingls, de la infraestructura de lenguaje


comn.

Cargar los tipos de forma tal que se encuentren aislados unos de otros en tiempo de ejecucin, pero que
puedan a su vez compartir recursos.

La infraestructura de lenguaje comn (en ingls Common Language Infrastructure o CLI) es una especicacin
estandarizada que describe un entorno virtual para la ejecucin de aplicaciones, cuya principal caracterstica es la
de permitir que aplicaciones escritas en distintos lenguajes
de alto nivel puedan luego ejecutarse en mltiples plataformas tanto de hardware como de software sin necesidad de
reescribir o recompilar su cdigo fuente.

Resolver dependencias entre tipos en tiempo de ejecucin usando una poltica exible que pueda tener en
cuenta la versin, atributos de localizacin y polticas
administrativas.
Ejecutar aplicaciones bajo la supervisin de un entorno privilegiado que permita controlar y hacer cumplir polticas en tiempo de ejecucin.

Si bien el CLI tuvo sus orgenes en Microsoft (en principio


se pensaba desarrollar un entorno de ejecucin compartido para COM con el nombre de Common Object Runtime,
que luego se extendi y generaliz para dar lugar a CLI),
sus especicaciones fueron llevadas ante ECMA (European
Computer Manufacturers Association), una importante organizacin europea de estndares, para su estandarizacin

Disear toda la infraestructura y servicios basndose


en metadatos extensibles, de manera tal que toda la
arquitectura pueda acomodarse con poco impacto a
nuevas incorporaciones y cambios.
9

10

CAPTULO 6. INFRAESTRUCTURA DE LENGUAJE COMN

Poder realizar tareas de bajo nivel, como carga de tipos 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 mediante un grupo de libreras de programacin que los
desarrolladores puedan utilizar para construir sus aplicaciones.
Microsoft .NET de hecho es un sper conjunto de esta especicacin, 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 originalmente y que proveen una enorme utilidad y exibilidad
a los desarrolladores (por ejemplo, libreras para la creacin de aplicaciones y servicios web, acceso a motores de
bases de datos, controles grcos, herramientas para desensamblar assemblies, debuggers, etc.). Si bien es gratuito,
su cdigo fuente no es abierto, y es distribuido por Microsoft 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 System (CTS).
Metadatos.
Especicaciones de lenguaje comn, en ingls Common Language Specication (CLS).
Sistema de ejecucin virtual, del ingls Virtual Execution System (VES).

6.1 Vase tambin


Microsoft .NET
ECMA

Captulo 7

Microsoft .NET
.NET es un framework de Microsoft que hace un nfasis
en la transparencia de redes, con independencia de plataforma de hardware y que permita un rpido desarrollo de
aplicaciones. Basado en ella, la empresa intenta desarrollar
una estrategia horizontal que integre todos sus productos,
desde el sistema operativo hasta las herramientas de mercado.
.NET podra considerarse una respuesta de Microsoft al
creciente mercado de los negocios en entornos Web, como
competencia a la plataforma Java de Oracle Corporation y a
los diversos framework de desarrollo web basados en PHP.
Su propuesta es ofrecer una manera rpida y econmica, a
la vez que segura y robusta, de desarrollar aplicaciones o
como la misma plataforma las denomina, soluciones permitiendo una integracin ms rpida y gil entre empresas
y un acceso ms simple y universal a todo tipo de informacin desde cualquier tipo de dispositivo.

biblioteca de clases base (BCL por sus siglas en ingls, tal


vez el ms importante de los componentes de la plataforma), dene un conjunto funcional mnimo que debe implementarse para que el marco de trabajo sea soportado por un
sistema operativo. Aunque Microsoft implement esta norma para su sistema operativo Windows, la publicacin de
la norma abre la posibilidad de que sea implementada para
cualquier otro sistema operativo existente o futuro, permitiendo que las aplicaciones corran sobre la plataforma independientemente del sistema operativo para el cual haya sido
implementada. El Proyecto Mono emprendido por Ximian
pretende realizar la implementacin de la norma para varios
sistemas operativos adicionales bajo el marco del cdigo
abierto.

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


de software que puede ser aadido al sistema operativo
Windows. Provee un extenso conjunto de soluciones predenidas para necesidades generales de la programacin de
aplicaciones, y administra la ejecucin de los programas escritos especcamente con la plataforma. Esta solucin es
el producto principal en la oferta de Microsoft, y pretende
ser utilizada por la mayora de las aplicaciones creadas para
la plataforma Windows.

La biblioteca de clases base o BCL.


El entorno comn de ejecucin para lenguajes, o CLR
por sus siglas en ingls.
Debido a la publicacin de la norma para la infraestructura comn de lenguajes (CLI por sus siglas en ingls),
el desarrollo de lenguajes se facilita, por lo que el marco
de trabajo .NET soporta ya ms de 20 lenguajes de programacin y es posible desarrollar cualquiera de los tipos de
aplicaciones soportados en la plataforma con cualquiera de
ellos, lo que elimina las diferencias que existan entre lo que
era posible hacer con uno u otro lenguaje.

.NET Framework se incluye en Windows Server 2008,


Windows Vista y Windows 7. De igual manera, la versin actual de dicho componente puede ser instalada en
Windows XP, y en la familia de sistemas operativos
Windows Server 2003. Una versin reducida de .NET Algunos de los lenguajes desarrollados para el marco de traFramework est disponible para la plataforma Windows bajo .NET son: C#, Visual Basic .NET, Delphi (Object PasMobile, 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

7.3

CAPTULO 7. MICROSOFT .NET

Common Language Runtime

Compilador MSIL a nativo: transforma cdigo intermedio 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 cdigo que se ejecuta.
Motor de depuracin: permite hacer un seguimiento
de la ejecucin del cdigo an cuando se utilicen lenguajes distintos.

Estructura interna del entorno de ejecucin en lenguaje comn.

El CLR es el verdadero ncleo del framework de .NET,


entorno de ejecucin en el que se cargan las aplicaciones
desarrolladas en los distintos lenguajes, ampliando el conjunto de servicios del sistema operativo (W2k y W2003).
Permite integrar proyectos en distintos lenguajes soportados por la plataforma .Net, como C++, Visual Basic, C#,
entre otros.
La herramienta de desarrollo compila el cdigo fuente de
cualquiera de los lenguajes soportados por .NET en un cdigo intermedio, el CIL (Common Intermediate Language)
antes conocido como MSIL (Microsoft Intermediate Language), similar al BYTECODE de Java. Para generarlo,
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.
Para ejecutarse se necesita un segundo paso, un compilador JIT (Just-In-Time) es el que genera el cdigo mquina
real que se ejecuta en la plataforma del cliente. De esta forma se consigue con .NET independencia de la plataforma
de hardware. La compilacin JIT la realiza el CLR a medida que el programa invoca mtodos. El cdigo ejecutable
obtenido se almacena en la memoria cach del ordenador,
siendo recompilado de nuevo slo en el caso de producirse
algn cambio en el cdigo fuente.

Vericador de tipos: controla que las variables de la


aplicacin usen el rea de memoria que tienen asignado.
Administrador de excepciones: maneja los errores que
se producen durante la ejecucin del cdigo.
Soporte de multiproceso (hilos): permite desarrollar
aplicaciones que ejecuten cdigo en forma paralela.
Empaquetador de COM: coordina la comunicacin
con los componentes COM para que puedan ser usados por el .NET Framework.
Biblioteca de Clases Base que incluye soporte para
muchas funcionalidades comunes en las aplicaciones.

7.4

Estandarizacin y licenciamiento

En agosto de 2000, Microsoft, Hewlett-Packard e Intel trabajaron conjuntamente para estandarizar el lenguaje de
programacin C# y una Infraestructura de Lenguaje Comn (CLI por sus siglas en ingls). Para Diciembre de 2001,
ambos fueron raticados por los estndares Internacionales ECMA.[3][4] ISO tambin sigui los pasos para abril de
2003.

Mientras Microsoft y sus socios de negocios ganaban patentes para los lenguajes CLI y C#, ECMA e ISO solicitaron
que era esencial que la implementacin estuviera disponiEs el encargado de proveer lo que se llama cdigo adminis- ble bajo trminos no discriminatorios. Adems de alcantrado, 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 para 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.3.1

Caractersticas

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, uniformidad y cohesin entre sus distintos componentes, provocando mltiples problemas en el desarrollo de aplicaciones para
el sistema operativo Windows. La plataforma .NET pretende solventar la mayora de estos problemas proveyendo un
conjunto nico y expandible con facilidad, de bloques interconectados, diseados de forma uniforme y bien documentados, que permitan a los desarrolladores tener a mano
todo lo que necesitan para producir aplicaciones slidas.
Debido a las ventajas que la disponibilidad de una plataforma de este tipo puede darle a las empresas de tecnologa y
al pblico en general, muchas otras empresas e instituciones
se han unido a Microsoft en el desarrollo y fortalecimiento de la plataforma .NET, ya sea por medio de la implementacin de la plataforma para otros sistemas operativos
aparte de Windows (Proyecto Mono de Ximian/Novell para GNU/Linux/Mac OS X/BSD/Solaris), el desarrollo de
lenguajes de programacin adicionales para la plataforma
(Lexico para hispanoparlantes, ANSI C de la Universidad
de Princeton, NetCOBOL de Fujitsu, Delphi de Borland,
PowerBuilder de Sybase entre otros) o la creacin de bloques adicionales para la plataforma (como controles, componentes y bibliotecas de clases adicionales); siendo algunas
de ellas software libre, distribuibles bajo la licencia GPL.
Con esta plataforma, Microsoft incursiona de lleno en el
campo de los Servicios Web y establece el XML como norma en el transporte de informacin en sus productos y lo
promociona como tal en los sistemas desarrollados utilizando sus herramientas.

7.6 Biblioteca de Clases Base de


.NET

Diagrama bsico de la Biblioteca de Clases Base.

Administracin de componentes Web que corren tanto


en el servidor como en el cliente (ASP.NET)
Manejo y administracin de excepciones
Manejo del sistema de ventanas
Herramientas de despliegue de grcos (GDI+)
Herramientas de seguridad e integracin con la seguridad del sistema operativo
Manejo de tipos de datos unicado
Interaccin con otras aplicaciones
Manejo de cadenas de caracteres y expresiones regulares
Operaciones aritmticas
Manipulacin de fechas, zonas horarias y periodos de
tiempo
Manejo de arreglos de datos y colecciones
Manipulacin de archivos de imgenes
Aleatoriedad

La Biblioteca de Clases Base (BCL por sus siglas en ingls)


maneja la mayora de las operaciones bsicas que se encuentran involucradas en el desarrollo de aplicaciones, incluyendo entre otras:

Generacin de cdigo
Manejo de idiomas
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
Cifrado de datos

Esta funcionalidad se encuentra organizada por medio de


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
ASP.NET y Servicios Web XML

CAPTULO 7. MICROSOFT .NET


.NET Compact Framework

Windows Forms
ADO.NET
.NET

7.10

Referencias

[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 multimedia 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 contiene 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

.NET 3.0 Stack

Arquitectura

ADO.NET consiste en dos partes primarias:


.NET Development
Tools

.NET 3.0 Applications

8.1.1

Estas clases proporcionan el acceso a una fuente de datos,


como Microsoft SQL Server y Oracle. Cada fuente de datos
tiene su propio conjunto de objetos del proveedor, pero cada
uno tienen un conjunto comn de clases de utilidad:

.NET 3.0
WCF
(Indigo)

WPF
(Avalon)

CardSpace

(InfoCard)

Data provider

WF
(Workflow)

Connection: Proporciona una conexin usada para comunicarse con la fuente de datos. Tambin acta como
Abstract Factory para los objetos command.

.NET 2.0 CLR, .NET 2.0 Base Class Libraries


ASP .NET 2.0, ADO.NET 2.0, WinForms 2.0

Command: Usado para realizar alguna accin en la


fuente de datos, como lectura, actualizacin, o borrado de datos relacionales.

Windows
(Windows XP, Windows Server 2003/R2
Vista/Longhorn)
PC Hardware

Parameter: Describe un simple parmetro para un


command. Un ejemplo comn es un parmetro para
ser usado en un procedimiento almacenado.

Esta tecnologa es una parte del .NET Framework 3.0 (habiendo


sido parte del framework desde la versin 1.0).

DataAdapter: Puente utilizado para transferir data


entre una fuente de datos y un objeto DataSet (ver abajo).
DataReader: Es una clase usada para procesar ecientemente 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 acceder a datos y a servicios de datos. Es una parte de la biblioteca de clases base que estn incluidas en el Microsoft
.NET Framework. Es comnmente usado por los programadores para acceder y para modicar los datos almacenados en un Sistema Gestor de Bases de Datos Relacionales,
aunque tambin puede ser usado para acceder a datos en
fuentes no relacionales. ADO.NET es a veces considerado
como una evolucin de la tecnologa ActiveX Data Objects
(ADO), pero fue cambiado tan extensivamente que puede
ser concebido como un producto enteramente nuevo.

8.1.2

DataSets

Los objetos DataSets, son un grupo de clases que describen


una simple base de datos relacional en memoria, fueron la
estrella del show en el lanzamiento inicial (1.0) del Microsoft .NET Framework. Las clases forman una jerarqua de
contencin:

15

Un objeto DataSet representa un esquema (o una base de datos entera o un subconjunto de una). Puede
contener las tablas y las relaciones entre esas tablas.

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 columnas.
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 actifuertemente 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 escaracterstica Intellisense del IDE.
tas operaciones se usa un ndice en memoria. 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 desemEl 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 Framela 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 Sturecuperacin 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 Fraun 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
subyacente.
sobre un resultset.
El Entity SQL es un lenguaje similar al SQL para consultar
el Entity Data Model (en vez del datastore subyacente). Similarmente, las extensiones del Linq, Linq-to-Entities, proporcionan consultas tipeadas en el Entity Data Model. Las
consultas Entity SQL y Linq-to-Entities son convertidas internamente en un Canonical Query Tree que entonces es
Un Constraint describe una propiedad de la ba- convertido en una consulta comprensible al datastore subse de datos que se debe cumplir, como que los yacente (ej. en SQL en el caso de una base de datos relavalores 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.
Un DataRelation es una relacin entre las tablas, tales como una relacin de clave primaria clave ajena. Esto es til para permitir la funcionalidad del DataRow de recuperar las relacionadas.

8.4
Un DataSet es llenado desde una base de datos por un DataAdapter cuyas propiedades Connection y Command que
han sido iniciados. Sin embargo, un DataSet puede guardar su contenido a XML (opcionalmente con un esquema
XSD), o llenarse a s mismo desde un XML, haciendo esto
excepcionalmente til para los servicios web, computacin
distribuida, y aplicaciones ocasionalmente conectadas desconectados.

ADO.NET Data Services

Tambin conocido como WCF Data Services, su nombre


clave es Astoria.
Es una plataforma para que Microsoft llame a los servicios
de datos, es una combinacin del tiempo de ejecucin y un
servicio web a travs del cual los servicios se exponen. Adems, tambin incluye el Data Services Toolkit que permite a
Astoria Data Services crearse desde dentro de ASP.NET. El

8.6. ENLACES EXTERNOS


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

17

Captulo 9

Diagrama de clases
Diagrama de Clases

9.1.2

mbitos

Persona
+Nombre
+C.I

Trabajador

PAS

Universidad
+Nombre
+Ciudad

+Fecha Inicio

PDI

+Puesto

+Categoria

+administrar()

+investigar()
+ensear()

UML especica dos tipos de mbitos para los miembros:


instancias y clasicadores y estos ltimos se representan con
nombres subrayados.

Estudiante

+Nombre
*
+C.I

Departamento

Est. Grado

Est. Doctorado

+Nombre

+Titulacion

+Programa

+colaborar()

+Realizar Tesis()

Los miembros clasicadores se denotan comnmente


como estticos en muchos lenguajes de programacin. Su mbito es la propia clase.
Los valores de los atributos son los mismos en
todas las instancias
La invocacin de mtodos no afecta al estado de
las instancias

0..1

Doctor

Los miembros instancias tienen como mbito una


instancia especca.

Ejemplo de diagrama de clases de una Universidad.

Los valores de los atributos pueden variar entre


instancias
La invocacin de mtodos puede afectar al estado de las instancias(es decir, cambiar el valor de
sus atributos)

En ingeniera de software, un diagrama de clases en


Lenguaje Unicado de Modelado (UML) es un tipo de diagrama de estructura esttica que describe la estructura de
un sistema mostrando las clases del sistema, sus atributos,
operaciones (o mtodos), y las relaciones entre los objetos.

Para indicar que un miembro posee un mbito de clasicador, 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 miembros de la clase, como atributos y mtodos, as como infor- Una relacin es un trmino general que abarca los tipos especcos de conexiones lgicas que se pueden encontrar
macin adicional sobre ellos.
en los diagramas de clases y objetos. UML presenta las siguientes 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
Un enlace es la relacin ms bsica entre objetos.
siguientes signos delante de ese miembro:
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)

Una asociacin representa a una familia de enlaces. Una


asociacin binaria (entre dos clases) normalmente se representa con una lnea contnua. Una misma asociacin puede
relacionar cualquier nmero de clases. Una asociacin que
relacione tres clases se llama asociacin ternaria.
A una asociacin se le puede asignar un nombre, y en sus extremos se puede hacer indicaciones, como el rol que desempea la asociacin, los nombres de las clases relacionadas,
su multiplicidad, su visibilidad, y otras propiedades.
Hay cuatro tipos diferentes de asociacin: bidireccional,
unidireccional, agregacin (en la que se incluye la composicin) y reexiva. Las asociaciones unidireccional y bidireccional son las ms comunes.
Por ejemplo, una clase vuelo se asocia con una clase avin
de forma bidireccional. La asociacin representa la relacin
esttica que comparten los objetos de ambas clases.

9.3

Diagramas

El diagrama de clases puede tener como ejemplo: una


clase que seria un objeto o persona misma en la cual
se especica cada accin y especicacin.
Propiedades de objetos que tienen propiedades y/u
operaciones que contienen un contexto y un dominio,
los primeros dos ejemplos son clases de datos y el tercero clase de lgica de negocio, dependiendo de quin
disee el sistema se pueden unir los datos con las operaciones.
El diagrama de clases incluye mucha ms informacin
como la relacin entre un objeto y otro, la herencia
de propiedades de otro objeto, conjuntos de operaciones/propiedades que son implementadas para una interfaz grca.

Agregacin
Presenta las clases del sistema con sus relaciones estructurales y de herencia.
Professor
+ listOfStudents : list

1..*

Class
+ Students : list

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 coleccin o un contenedor de otras clases, pero a su vez, el
tiempo de vida de las clases contenidas no tienen una dependencia 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.

El diagrama de clases es la base para elaborar una arquitectura MVC o MVP.

Captulo 10

C Sharp
El ttulo de este artculo se muestra incorrectamente debido a limitaciones tcnicas. El ttulo correcto
es C#.

Hejlsberg lider el proyecto de desarrollo de C#. Anteriormente, ya haba participado en el desarrollo de otros lenguajes 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 lenintegrados: 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
Los tipos de coma otante pueden representar nmeros con
incluye mejoras derivadas de otros lenguajes.
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 utidonde '#' (sostenido, en ingls sharp) indica que la nota (C
lizado porque muchas funciones matemticas de la biblioes 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 comcoma otante ms interesante de C# es decimal, dirigido al
pone de cuatro signos '+' pegados.[2]
uso de clculos monetarios. La aritmtica de coma otanAunque C# forma parte de la plataforma .NET, sta es te normal est sujeta a una variedad de errores de redonuna 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

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
la misin de desarrollar un nuevo lenguaje de programacin llamado Cool (Lenguaje C orientado a objetos). Este
nombre tuvo que ser cambiado debido a problemas de marca, pasando a llamarse C#.[3] La biblioteca de clases de la
plataforma .NET fue migrada entonces al nuevo lenguaje.

Para los tipos de datos lgicos no existen conversiones automticas de tipo entero a bool.

10.3

Literales

En ocasiones, resulta ms sencillo usar un sistema numrico en base 16 en lugar de 10, para tal caso C# permite
especicar nmeros enteros en formato hexadecimal, y se
dene anteponiendo 0x, por ejemplo: 0xFF, que equivale a

20

10.5. CONSTANTES
255 en decimal.
C# tiene caracteres denominados secuencias de escape para
facilitar la escritura con el teclado de smbolos que carecen
de representacin visual.
C#, al igual que C++, dene un tipo de cadena de caracteres.
Dentro de la cadena de caracteres se pueden usar secuencias
de escape. Una cadena de caracteres puede iniciarse con el
smbolo @ seguido por una cadena entre comillas ("), en tal
caso, las secuencias de escape no tienen efecto, y adems la
cadena puede ocupar dos o ms lneas.

10.4 Variables

21
Toda conversin implcita no ocasiona prdida de informacin, truncamientos o redondeos.
Es posible (pero no siempre ocurre) que en una conversin explcita haya prdida de informacin, truncamientos o redondeos.
En toda conversin implcita el tipo de dato destino es
mayor que el tipo de dato origen.
La conversin explcita se realiza indicando el tipo de
dato al que se quiere convertir entre parntesis, seguido
del valor:
long valor = 123; // Conversin implcita long valor =
(long)123; // Conversin explcita

Las variables son identicadores asociados a valores. Se declaran indicando el tipo de dato que almacenar y su iden- Adems de realizarse dentro de una asignacin, las conversiones de tipos tambin tienen lugar dentro de una expreticador.
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 minsforma a decimal.
culas (sensible a maysculas y minsculas).
2. Si un operando es double, el otro operando se transforma a double.
Un identicador no puede:
empezar por un nmero.

3. Si un operando es oat, el otro operando se transforma


a oat.

empezar por un smbolo, ni aunque sea una palabra


clave.

4. Si un operando es ulong, el otro operando se transforma a ulong.

contener ms de 511 caracteres.

5. Si un operando es long, el otro operando se transforma


a long.

Declarar una variable:


int miNumero; // Declaramos la variable, pero no la
inicializamos con ningn valor.
Para asignar un valor a una variable, se indica el identicador de la misma, seguido del smbolo igual (=) y el valor
que queremos que almacene:

6. Si un operando es uint, y si el otro operando es de tipo


sbyte, short o int, los dos se transforman a long.
7. Si un operando es uint, el otro operando se transforma
a uint.
8. Si no es ninguno de los casos anteriores, los dos operandos se transforman a int.

miNumero = 5; // Asignamos el valor '5'.

10.5

Constantes

Tambin se puede declarar y asignar un valor al mismo


Las constantes son valores inmutables, y por tanto no se
tiempo:
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 queen 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
const double PI = 3.1415;
readonly
A diferencia de const, no requiere que se asigne el valor al
mismo tiempo que se declara. Pueden ser miembros de la
instancia o miembros estticos de la clase (static).
readonly double E; E = 2.71828;

CAPTULO 10. C SHARP


Las instrucciones if-else, for, while, do-while, switch,
return, break, continue son, bsicamente, iguales que
en C, C++ y Java.
La instruccin foreach, al igual que en Java, realiza un
ciclo a travs de los elementos de una matriz o coleccin. En este ciclo se recorre la coleccin y la variable
recibe un elemento de dicha coleccin en cada iteracin.
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
y C++.
El resultado de los operadores relacionales y lgicos es
un valor de tipo bool.
Los operadores de cortocircuito evalan el segundo
operando solo cuando es necesario.
Los operadores a nivel de bits no se pueden aplicar a
tipos bool, oat, double o decimal.

10.7 Instrucciones de control


if-else
if (i == 2) { // ... } else if (i == 3) { // ... } else { // ... }
switch
switch (i) { case 1: ... break; case 2: case 3: ... break;
default: ... break; }
for

10.8

Mtodos

Todo mtodo debe ser parte de una clase, no existen


mtodos globales (funciones).
Por defecto, los parmetros se pasan por valor. (Ntese que las listas y otras colecciones son variables por
referencia (referencias al espacio reservado para esa
lista en la pila) y que se pasa por valor al mtodo la
referencia, pero el espacio reservado para la lista es
comn, por lo que si elimina un elemento lo hace tambin de la original).
El modicador ref fuerza a pasar los parmetros por
referencia en vez de pasarlos por valor y obliga a inicializar la variable antes de pasar el parmetro.
El modicador out es similar al modicador ref, con la
diferencia de que no se obliga a inicializar la variable
antes de pasar el parmetro.
Cuando ref y out modican un parmetro de referencia, la propia referencia se pasa por referencia.
El modicador params sirve para denir un nmero
variable de argumentos los cuales se implementan como una matriz.

for (int i = 0; i < 10; i++) { // ... }

Un mtodo debe tener como mximo un nico parmetro params y ste debe ser el ltimo.

while

Un mtodo puede devolver cualquier tipo de dato, incluyendo tipos de clase.

while (i < 10) { // ... }


do-while
do { // ... } while (true);
foreach
foreach (char c in charList) { // ... }

Ya que en C# las matrices se implementan como objetos, un mtodo tambin puede devolver una matriz
(algo que se diferencia de C++ en que las matrices no
son vlidas como tipos de valores devueltos).
C# implementa sobrecarga de mtodos, dos o ms mtodos pueden tener el mismo nombre siempre y cuando 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.
ref

Declarar e inicializar una matriz multidimensional (el tamao 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);
out
void PassOut(out int x) { x = 2; } int z; PassOut(out z);
params
int MaxVal(char c, params int[] nums) { // ... } int a =
1; MaxVal('a', 23, 3, a, 12); // El primer parmetro es
obligatorio, seguidamente se pueden poner tantos nmeros
enteros como se quiera
Sobrecarga de mtodos
int Suma(int x, int y) { return x + y; } int Suma(int x, int y,
int z) { return x + y + z; } Suma(1, 2); // Llamar al primer
mtodo. Suma(1, 2, 3); // Llamar al segundo mtodo.
Main
public static void Main(string[] args) { // ... }

Acceder a un elemento de una matriz multidimensional:


intMultiArray[2, 0]; // Retornar el valor '5'
Ms informacin en: Tutorial de matrices (C#) (en ingls).

10.10

Clases y objetos

Una variable de objeto de cierta clase no almacena los


valores del objeto sino su referencia (al igual que Java).
El operador de asignacin no copia los valores de un
objeto, sino la referencia al mismo (al igual que Java).
Un constructor tiene el mismo nombre que su clase y
es sintcticamente similar a un mtodo.
Un constructor no devuelve ningn valor (ni siquiera
void).
Al igual que los mtodos, los constructores tambin
pueden ser sobrecargados.

10.9 Matrices
En C# las matrices se implementan como objetos.
Los ndices de las matrices comienzan en 0.
Ya que C# implementa las matrices como objetos, cada matriz tiene una propiedad Length que contiene el
nmero de elementos que puede alojar o tiene alojados.
Declarar una matriz:

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


uno por defecto que consiste en asignar a todas las variables el valor 0, null o false segn corresponda.
Cuando un objeto no es referenciado por ninguna variable, el recolector de basura ejecuta el destructor de
dicha clase y libera la memoria utilizada.
El destructor de una clase no se llama cuando un objeto
sale del mbito.
Todos los destructores se llamarn antes de que nalice
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


puede omitir):

La palabra clave base es una referencia a la clase padre


del objeto en la que se usa (por defecto, Object).

int[] intArray = new int[] {1, 2, 3, 4, 5};


Acceder a un elemento:
intArray[2]; // Retornar el valor '3'
Declarar una matriz multidimensional:

La palabra clave static hace que un miembro pertenezca a una clase en vez de pertenecer a objetos de
dicha clase. Se puede tener acceso a dicho miembro
antes de que se cree cualquier objeto de su clase y sin
referencias a un objeto.
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
instancia.
C# permite la sobrecarga de operadores (+, -, *, etc.)
con la palabra clave operator.
Al comparar objetos (==, !=, <, >, <=, >=) se comprueba si hacen referencia al mismo objeto.
Declarar una clase:
class Clase { }
Iniciar una clase (tambin llamado crear un objeto de la clase o instanciar una clase):
Clase c = new Clase();
Constructor (como si fuera un mtodo, pero con el nombre
de su clase):
class Clase { Clase() { // ... } }
Destructor (como si fuera un mtodo, precedido del smbolo '~'):

10.11

Cadenas de caracteres

El tipo de dato para las cadenas de caracteres es string.


Realmente la palabra clave string es un alias de la clase
System.String de la plataforma .NET.
En C# las cadenas son objetos y no una matriz de caracteres; aun as, se puede obtener un carcter arbitrario de una cadena por medio de su ndice (pero no
modicarlo).
Las cadenas son inmutables, una vez creadas no se
pueden modicar, solo se pueden copiar total o parcialmente.
El operador == determina si dos referencias hacen referencia al mismo objeto, pero al usar dicho operador
con dos variables tipo string se prueba la igualdad del
contenido de las cadenas y no su referencia. Sin embargo, con el resto de los operadores relacionales, como < y >=, s se comparan las referencias.
Se pueden concatenar (unir) dos cadenas mediante el
operador +.
Las cadenas se pueden usar en las instrucciones switch.

class Clase { ~Clase() { // ... } }


this:

Declarar una cadena de caracteres (como si fuera una variable 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; ConsoRetornar '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
Coche() : this(2) { } } public class Ejemplo { public static
caso de error.
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 = tex4; 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 minsculas.
string texto = ABC"; string texto = texto.ToLower(); //
Retornar abc

10.13

Compiladores e IDEs

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
lenguaje.
string Substring: devuelve una subcadena, indicando la posicin de inicio y la longitud que se desea.
string texto = Cadena de caracteres"; string texto =
texto.Substring(10, 8); // Retornar caracter
Ms informacin en: String (Clase) (System) (en ingls).

SharpDevelop, IDE libre para C# bajo licencia GNU


LGPL, con una interfaz muy similar a Microsoft Visual Studio.
Mono, es una implementacin con licencia GNU GPL
de todo el entorno .NET desarrollado por Novell. Como parte de esta implementacin se incluye un compilador de C#.

26

CAPTULO 10. C SHARP

Delphi 2006, de Borland Software Corporation.

DotGNU Portable.NET, de la Free Software Foundation.

Gua de programacin de C#

Wikilibros alberga un libro o manual sobre C


sharp NET.

Mtodos numricos en C#

10.14 Metas del diseo del lenguaje


El estndar ECMA-334 lista las siguientes metas en el diseo para C#:
Lenguaje de programacin orientado a objetos simple,
moderno y de propsito general.
Inclusin de principios de ingeniera de software tales
como revisin estricta de los tipos de datos, revisin
de lmites de vectores, deteccin de intentos de usar
variables no inicializadas, y recoleccin de basura automtica.
Capacidad para desarrollar componentes de software
que se puedan usar en ambientes distribuidos.
Portabilidad del cdigo fuente.

Programacin con C#
Centro de desarrolladores de Visual C#
Desarrollo de Software en C# Comunidad virtual para
profesionales y/o estudiantes de habla castellana.
Blog de programacin, C#
Geeks.ms Blogs sobre desarrolladores de la plataforma
.NET y C#
Kit de desarrollo de software (SDK) de Microsoft
.NET Framework 2.0 (x86), (x64) e (IA64)
C# | WebProgramacin Artculos, ejemplos, fragmentos de cdigo, etc.

10.16.2

En ingls

Fcil migracin del programador al nuevo lenguaje,


especialmente para programadores familiarizados con
C, C++ y Java.

Microsoft .NET Framework

Soporte para internacionalizacin.

Especicacin de C# 3.0

Adecuacin para escribir aplicaciones de cualquier


tamao: desde las ms grandes y sosticadas como
sistemas operativos hasta las ms pequeas funciones.

C# Tutorial

Aplicaciones econmicas en cuanto a memoria y procesado.

10.15 Referencias
[1] En ocasiones representado como 'C', donde el segundo carcter 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
Wikilibros

En castellano

Standard ECMA-334 (Especicacin del lenguaje C#).

Programmers Heaven C# School Book

Wikimedia Commons alberga contenido multimedia sobre C Sharp. Commons

Captulo 11

Espacio de nombres
En programacin, un espacio de nombres (del ingls namespace), en su acepcin ms simple, es un conjunto de
nombres en el cual todos los nombres son nicos.

11.1

Un espacio de nombres es un contenedor abstracto en el


que un grupo de uno o ms identicadores nicos pueden
existir. Un identicador denido en un espacio de nombres
est asociado con ese espacio de nombres. El mismo identicador puede independientemente ser denido en mltiples espacios de nombres, eso es, el sentido asociado con un
identicador denido en un espacio de nombres es independiente del mismo identicador declarado en otro espacio de
nombres. Los lenguajes que manejan espacio de nombres
especican las reglas que determinan a qu espacio de nombres pertenece una instancia de un identicador.
Por ejemplo, Pedro trabaja para la compaa X y su nmero de empleado es 123. Mara trabaja para la compaa Y
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 infrecuente tener cientos o miles de identicadores. Los espacios de
nombres (o tcnicas similares como la emulacin de espacios 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 sistema ms modular.
Muchos lenguajes de programacin manejan espacios de
nombres. En algunos lenguajes, como C++, PHP o Python,
estos identicadores nombrando espacios de nombres estn 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

Vase tambin

Nomenclatura binomial
Nomenclatura qumica
Sistema Dewey de clasicacin
Digital object identier
Domain Name System
Direccin IP
Clasicacin de la Biblioteca del Congreso
Anexo:Catlogo de estrellas
Espacio de nombres XML

Captulo 12

Microsoft Developer Network


12.1

Software Suscripciones

MSDN histricamente ha ofrecido un paquete de suscripcin segn el cual los desarrolladores tienen acceso y licencias 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
software de Microsoft en DVD o a travs de descargas cada 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.

Logotipo de MSDN (2001-2009).

MSDN (del ingls: Microsoft Developer Network ) puede


referirse tanto a los servicios web (basado en plataformas
Microsoft) orientados a desarrolladores de software como
al conjunto de software que se adjunta con sus compiladores
(Visual Studio) y ciertos SDK. Tiene como objeto la resolucin de dudas y problemas que le puedan surgir al desarrollador; segn la propia corporacin "Contiene una gran
cantidad de informacin tcnica de programacin, incluidos cdigo de ejemplo, documentacin, artculos tcnicos y
guas de referencia", en este ltimo caso la denominacin
correcta sera "API o biblioteca MSDN", de la cual tambin
se encuentra una versin en lnea.
El Microsoft Developer Network (MSDN) es la parte de
Microsoft responsable de gestin en la relacin de la empresa con los desarrolladores de hardware interesados en el
sistema operativo (OS), basados en las diversas plataformas
de sistema operativo, que aprovechan la API y lenguajes
de script de las muchos aplicaciones de Microsoft. La gestin de relacin se puede encontrar en una variedad de medios de comunicacin: sitios web, boletines, conferencias
de desarrolladores, medios de comunicacin dedicados al
comercio, los blogs y DVD de distribucin.

Aunque en la mayora de los casos el software en s las


funciones exactamente igual que el producto completo, el
MSDN de licencia de usuario nal prohbe el uso de software en un negocio entorno de produccin. Se trata de
una restriccin legal, no un tcnico. A modo de ejemplo,
MSDN regularmente incluye los ltimos sistemas operativos Windows (como Windows XP y Windows Vista),
software de servidor como SQL Server 2005, herramientas de desarrollo como Visual Studio, y aplicaciones como
Microsoft Oce y MapPoint. Para que el software requiere
una clave de producto, un sitio web de Microsoft en estos
genera la demanda. Este paquete ofrece un nico equipo
entusiasta con el acceso a casi todo lo que ofrece Microsoft. Sin embargo, una empresa capturado con una ocina
llena de PC y servidores ejecutando el software incluido en
una suscripcin MSDN sin la adecuada no MSDN licencias para aquellas mquinas que no sean tratados en forma
diferente de cumplimiento de auditora que si el software
pirateado se fuera de la Internet.
Microsoft MSDN del acuerdo de licencia hace una excepcin especca para Microsoft Oce, permitiendo que el
titular de suscripcin personalmente a utilizarlo con nes
comerciales sin necesidad de una licencia, pero slo con la
suscripcin MSDN Premium y aun as slo directamente

28

12.3. MSDN MAGAZINE


relacionados con la diseo, desarrollo y prueba y/o la documentacin de proyectos de software como se indica en el
faq de licencia de MSDN. Como era de esperar, cualquier
software creado con las herramientas de desarrollo (como
Visual Studio), junto con los componentes en tiempo de ejecucin necesarios para el aprovechamiento de ella, no se
limita en modo alguno, ya sea por Microsoft, dicho software pueden y regularmente se utiliza para la produccin de
negocios. El acuerdo de licencia se reere a varios otros temas en la suscripcin y subvenciones adicionales similares
excepciones, segn corresponda.
Un MSDN abonado tiene derecho a activar tantos ejemplares como sea necesario para su propio desarrollo. Por lo
tanto, si un equipo entusiasta de alguna manera tiene 20 ordenadores en casa que utiliza el propio para el desarrollo
de software (y no estn actuando como parte de una empresa, por ejemplo, una granja de servidores), una suscripcin permite a todos los 20 de estos ordenadores a estar
ejecutndose su propia copia de Windows, Oce, y cualquier otro producto de Microsoft. Despus de unas pocas
instalaciones, las claves de activacin se detendr permite
la activacin automtica del producto a travs de Internet,
pero despus de una llamada telefnica a la Activacin de
productos de lnea telefnica para conrmar que las instalaciones son realmente legtimo y coherente con el acuerdo de
licencia, las activaciones se conceden a travs del telfono.

29
den recibir las ediciones de principios de sistemas operativos de Microsoft u otros productos de Microsoft (las aplicaciones Microsoft Oce, Visual Studio, etc.)
Microsoft tambin ha acogido una serie de desarrolladores
centrados en conferencias en su campus de Redmond, que
los suscriptores de MSDN el privilegio de. Dependiendo del
tamao de la empresa y sus productos, estas conferencias
puede ser uno-a-uno y tener un solo foco.
Las universidades y escuelas secundarias pueden inscribirse en la MSDN Academic Alliance programa, que proporciona acceso a algunos desarrolladores de software de Microsoft para su ciencias de la computacin y estudiantes de
ingeniera (y posiblemente otros estudiantes o profesores
tambin). A MSDNAA cuenta no es una cuenta de MSDN
y no puede utilizarse para el acceso del abonado la seccin
de la pgina web de MSDN o de sus descargas.

12.3

MSDN Magazine

Microsoft proporciona el contenido editorial de MSDN


Magazine, una publicacin mensual. La revista fue creada
como una fusin entre el Microsoft Systems Journal (MSJ)
y Microsoft Internet Developer (MIND) en revistas de marzo 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 Downloads. 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 para Visual Studio 2005 API informacin, con notables diferencias estn actualizando cdigo del sitio web, mejor se
ajusten a estndares web y, por tanto, dar una larga espe12.2 Servicio de informacin
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 prcticas de programacin y los patrones de diseo. Muchos recursos estn disponibles gratuitamente en lnea, mientras 12.6 Enlaces externos
que otros estn disponibles por correo a travs de una sus MSDN Home page
cripcin.
Dependiendo de nivel de suscripcin, los suscriptores pue-

MSDN Blogs

30
MSDN Ocial Forums
MSDN Events
MSDN Beta search
MSDN Magazine
MSDN Wiki beta (Visual Studio, .NET -related documentation and software drop site. No talk pages yet Comments are meant to go elsewhere, such as Channel
9.)

CAPTULO 12. MICROSOFT DEVELOPER NETWORK

Captulo 13

MSDN Library
MSDN Library (Biblioteca de desarrollo de Microsoft, en
Espaol) es la biblioteca ocial de Microsoft con la documentacin tcnica dirigida a los desarrolladores de la plataforma Microsoft Windows. MSDN representa la red de
desarrolladores de Microsoft.
La biblioteca contiene documentacin sobre el API utilizado con los productos de Microsoft as como cdigo de
ejemplo, artculos tcnicos, y sugerencias de programacin.
MSDN Library est disponible en la web y en CD y DVD
para suscriptores de pago. Inicialmente, la versin fsica
slo estaba disponible como parte de una suscripcin a
MSDN y actualizada de forma trimestral. Sin embargo, a
partir del ao 2006 puede ser descargada gratuitamente desde el Centro de descarga de Microsoft en formato de imagen
ISO[1][2][3] y el CD/DVD ya no se publica trimestralmente.
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]

vigente en ese momento o, a veces dos versiones de Visual


Studio. Adems, cada nueva versin de Visual Studio no se
integra con una versin anterior de MSDN. Una Biblioteca compatibles MSDN se libera con cada nueva versin de
Visual Studio e incluido en el DVD de Visual Studio. Medida que se lanzan nuevas versiones de Visual Studio, nuevas
ediciones de MSDN Library no se integran con las versiones anteriores de Visual Studio y ni siquiera son de edad
y / o documentacin obsoleta para los productos obsoletos
o suspender. MSDN Library versiones se puede instalar de
lado a lado, es decir, tanto los de ms edad, as como la
versin ms reciente de MSDN Library, pueden co-existir.

13.2

Desde mayo de 2006, Microsoft tambin ha empezado a


producir gratuitamente una versin en CD de la comunidad de MSDN Library disponible para su descarga como
imagen ISO tambin en su Centro de descargas, que slo
contiene las actualizaciones de contenido. El formato fsico de la biblioteca de la comunidad de MSDN est dirigida
mayormente a desarrolladores de pases donde las conexiones de banda ancha a Internet no estn disponibles.[5]
La edicin de Visual Studio Express se distribuye slo con
la biblioteca de MSDN Express, que forma parte de la biblioteca completa, aunque pueden ser descargada libremente e instalada independiente.

Versiones

De octubre de 2001 MSDN Library es la ltima versin que incluye la documentacin y la integracin con
Visual Studio 6.0.[6]
La de enero de 2003 MSDN Library es la ltima versin que incluye la documentacin y la integracin con
Visual Studio. NET (2002).[6][7]
La de enero de 2006 MSDN Library es la ltima versin que incluye la documentacin y la integracin con
Visual Studio. NET 2003.[7]
De abril de 2007 MSDN Library fue la ltima versin
que incluye la documentacin y la integracin con Visual Studio 2005 (Service Pack 1).

13.1 La integracin con Visual Studio

La versin 2008 de enero y ms tarde para incluir


la documentacin y la integracin con Visual Studio
2008.

Cada edicin de MSDN Library slo se puede acceder con


un visor de ayuda (Microsoft Document Explorer o el visor
de ayudar a otros), que est integrado con la nica versin

La versin de noviembre de 2008 y ms tarde para


incluir la documentacin y la integracin con Visual
Studio 2008 SP1.[8]

31

32

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 13. MSDN LIBRARY

Captulo 14

Programacin orientada a objetos


La programacin orientada a objetos o POO (OOP segn sus siglas en ingls) es un paradigma de programacin que usa objetos en sus interacciones, para disear
aplicaciones y programas informticos. Est basado en varias tcnicas, incluyendo herencia, cohesin, abstraccin,
polimorsmo, acoplamiento y encapsulamiento. Su uso se
populariz a principios de la dcada de los aos 1990. En
la actualidad, existe una gran variedad de lenguajes de programacin que soportan la orientacin a objeto.

14.1 Introduccin
Los objetos son entidades que tienen un determinado estado, comportamiento (mtodo) e identidad:
El estado est compuesto de datos o informaciones; sern uno o varios atributos a los que se habrn asignado
unos valores concretos (datos).
El comportamiento est denido por los mtodos o
mensajes a los que sabe responder dicho objeto, es decir, qu operaciones se pueden realizar con l.
La identidad es una propiedad de un objeto que lo diferencia del resto; dicho con otras palabras, es su identicador (concepto anlogo al de identicador de una
variable o una constante).
Un objeto contiene toda la informacin que permite denirlo e identicarlo frente a otros objetos pertenecientes a
otras clases e incluso frente a objetos de una misma clase, al
poder tener valores bien diferenciados en sus atributos. A su
vez, los objetos disponen de mecanismos de interaccin llamados mtodos, que favorecen la comunicacin entre ellos.
Esta comunicacin favorece a su vez el cambio de estado en
los propios objetos. Esta caracterstica lleva a tratarlos como unidades indivisibles, en las que no se separa el estado
y el comportamiento.

Los mtodos (comportamiento) y atributos (estado) estn estrechamente relacionados por la propiedad de conjunto. Esta propiedad destaca que una clase requiere de mtodos para poder tratar los atributos con los que cuenta. El
programador debe pensar indistintamente en ambos conceptos, sin separar ni darle mayor importancia a alguno de
ellos. Hacerlo podra producir el hbito errneo de crear
clases contenedoras de informacin por un lado y clases con
mtodos que manejen a las primeras por el otro. De esta
manera se estara realizando una programacin estructurada camuada en un lenguaje de programacin orientado
a objetos.
La POO diere de la programacin estructurada tradicional, en la que los datos y los procedimientos estn separados
y sin relacin, ya que lo nico que se busca es el procesamiento de unos datos de entrada para obtener otros de salida. La programacin estructurada anima al programador a
pensar sobre todo en trminos de procedimientos o funciones, y en segundo lugar en las estructuras de datos que esos
procedimientos manejan. En la programacin estructurada
solo se escriben funciones que procesan datos. Los programadores que emplean programacin orientada a objetos, en
cambio, primero denen objetos para luego enviarles mensajes solicitndoles que realicen sus mtodos por s mismos.

14.2

Origen

Los conceptos de la programacin orientada a objetos tienen origen en Simula 67, un lenguaje diseado para hacer simulaciones, creado por Ole-Johan Dahl y Kristen Nygaard, del Centro de Cmputo Noruego en Oslo. En este
centro se trabajaba en simulaciones de naves, que fueron
confundidas por la explosin combinatoria de cmo las diversas cualidades de diferentes naves podan afectar unas a
las otras. La idea surgi al agrupar los diversos tipos de naves en diversas clases de objetos, siendo responsable cada
clase de objetos de denir sus propios datos y comportamientos. Fueron renados ms tarde en Smalltalk, desarrollado 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 completamente dinmico en el cual los objetos se podran crear
y modicar sobre la marcha (en tiempo de ejecucin) en
lugar de tener un sistema basado en programas estticos.

Los componentes registrados como privados (private) tambin se heredan, pero como no pertenecen a la
clase, se mantienen escondidos al programador y slo
pueden ser accedidos a travs de otros mtodos pblicos. Esto es as para mantener hegemnico el ideal de
POO.

La programacin orientada a objetos se fue convirtiendo en


el estilo de programacin dominante a mediados de los aos
ochenta, en gran parte debido a la inuencia de C++, una Objeto Instancia de una clase. Entidad provista de un conextensin del lenguaje de programacin C. Su dominacin
junto de propiedades o atributos (datos) y de comfue 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 coest 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 programa). Es una instancia a una clase.
Las caractersticas de orientacin a objetos fueron agregadas a muchos lenguajes existentes durante ese tiempo, incluyendo Ada, BASIC, Lisp ms Pascal, entre otros. La adi- Mtodo Algoritmo asociado a un objeto (o a una clase de
objetos), cuya ejecucin se desencadena tras la recepcin de estas caractersticas a los lenguajes que no fueron
cin de un mensaje. Desde el punto de vista del comdiseados inicialmente para ellas condujo a menudo a proportamiento, es lo que el objeto puede hacer. Un mblemas de compatibilidad y en la capacidad de mantenitodo puede producir un cambio en las propiedades del
miento del cdigo. Los lenguajes orientados a objetos puobjeto, o la generacin de un evento con un nuevo
ros, por su parte, carecan de las caractersticas de las cuamensaje para otro objeto del sistema.
les muchos programadores haban venido a depender. Para 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 interaccin del usuario con la mquina, o un mensaje enviado
jetos, pero permitiendo algunas caractersticas imperativas
por un objeto). El sistema maneja el evento enviando
de maneras seguras. El Eiel de Bertrand Meyer fue un
el mensaje adecuado al objeto pertinente. Tambin se
temprano y moderadamente acertado lenguaje con esos obpuede denir como evento la reaccin que puede desjetivos, pero ahora ha sido esencialmente reemplazado por
encadenar un objeto; es decir, la accin que genera.
Java, en gran parte debido a la aparicin de Internet y a la
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; soporta 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 parmetros asociados al evento que lo gener.

14.3 Conceptos fundamentales


La programacin orientada a objetos es una forma de programar que trata de encontrar una solucin a estos problemas. Introduce nuevos conceptos, que superan y amplan
conceptos antiguos ya conocidos. Entre ellos destacan los
siguientes:

Propiedad o atributo Contenedor de un tipo de datos


asociados a un objeto (o a una clase de objetos), que
hace los datos visibles desde fuera del objeto y esto
se dene como sus caractersticas predeterminadas, y
cuyo valor puede ser alterado por la ejecucin de algn
mtodo.

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 distinde un tipo de objeto concreto. La instanciacin es la
tas situaciones posibles para el objeto (o clase de oblectura 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, relacioD) es la facilidad mediante la cual la clase D herenes 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
medio de una tabla o entidad que est compuesta por
denidos por la misma D. Por lo tanto, puede usar los
sus atributos y funciones correspondientes.
mismos mtodos y variables pblicas declaradas en C.

14.4. CARACTERSTICAS DE LA POO


En comparacin con un lenguaje imperativo, una variable no es ms que un contenedor interno del atributo del
objeto o de un estado interno, as como la funcin es un
procedimiento interno del mtodo del objeto.

14.4 Caractersticas de la POO

35
objeto pueden acceder a su estado. Esto asegura que
otros objetos no puedan cambiar el estado interno de
un objeto de manera inesperada, eliminando efectos
secundarios e interacciones inesperadas. Algunos lenguajes relajan esto, permitiendo un acceso directo a
los datos internos del objeto de una manera controlada y limitando el grado de abstraccin. La aplicacin
entera se reduce a un agregado o rompecabezas de objetos.

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 comportamiento correspondiente al objeto que se est usando.
Abstraccin Denota las caractersticas esenciales de un
O, dicho de otro modo, las referencias y las coleccioobjeto, donde se capturan sus comportamientos. Cada
nes de objetos pueden contener objetos de diferentes
objeto en el sistema sirve como modelo de un agente
tipos, y la invocacin de un comportamiento en una
abstracto que puede realizar trabajo, informar y camreferencia producir el comportamiento correcto para
biar su estado, y comunicarse con otros objetos en el
el tipo real del objeto referenciado. Cuando esto ocusistema sin revelar cmo se implementan estas caracrre en tiempo de ejecucin, esta ltima caracterstitersticas. Los procesos, las funciones o los mtodos
ca se llama asignacin tarda o asignacin dinmica.
pueden tambin ser abstrados, y, cuando lo estn, una
Algunos lenguajes proporcionan medios ms estticos
variedad de tcnicas son requeridas para ampliar una
(en tiempo de compilacin) de polimorsmo, tales
abstraccin. El proceso de abstraccin permite seleccomo las plantillas y la sobrecarga de operadores de
cionar las caractersticas relevantes dentro de un conC++.
junto e identicar comportamientos comunes para denir 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 disese relacionan entre s, formando una jerarqua de clao 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 mocomportamiento de todas las clases a las que pertenedelar la realidad o el problema que se quiere atacar.
cen. La herencia organiza y facilita el polimorsmo y
el encapsulamiento, permitiendo a los objetos ser deEncapsulamiento Signica reunir todos los elementos que
nidos y creados como tipos especializados de objetos
pueden considerarse pertenecientes a una misma entipreexistentes. Estos pueden compartir (y extender) su
dad, al mismo nivel de abstraccin. Esto permite aucomportamiento sin tener que volver a implementarlo.
mentar la cohesin de los componentes del sistema.
Esto suele hacerse habitualmente agrupando los objeAlgunos autores confunden este concepto con el printos en clases y estas en rboles o enrejados que reejan
cipio de ocultacin, principalmente porque se suelen
un
comportamiento comn. Cuando un objeto hereda
emplear conjuntamente.
de ms de una clase se dice que hay herencia mltiple;
siendo de alta complejidad tcnica por lo cual suele reModularidad Se denomina modularidad a la propiedad
currirse a la herencia virtual para evitar la duplicacin
que permite subdividir una aplicacin en partes ms
de datos.
pequeas (llamadas mdulos), cada una de las cuales
debe ser tan independiente como sea posible de la aplicacin en s y de las restantes partes. Estos mdulos se Recoleccin de basura La recoleccin de basura o garbage collection es la tcnica por la cual el entorno de obpueden compilar por separado, pero tienen conexiones
jetos se encarga de destruir automticamente, y por
con otros mdulos. Al igual que la encapsulacin, los
tanto desvincular la memoria asociada, los objetos que
lenguajes soportan la modularidad de diversas formas.
hayan quedado sin ninguna referencia a ellos. Esto sigPrincipio de ocultacin Cada objeto est aislado del exnica que el programador no debe preocuparse por la
terior, es un mdulo natural, y cada tipo de objeto exasignacin 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 cuanpueden interactuar con los objetos de la clase. El aislado 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 Paradigsu modicacin por quien no tenga derecho a accema 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
La programacin orientada a objetos es un paradigma surgido en los aos 70, que utiliza objetos como elementos fundamentales en la construccin de la solucin. Un objeto es
una abstraccin de algn hecho o ente del mundo real, con
atributos que representan sus caractersticas o propiedades,
y mtodos que emulan su comportamiento o actividad. Todas las propiedades y mtodos comunes a los objetos se encapsulan o agrupan en clases. Una clase es una plantilla, un
prototipo para crear objetos; en general, se dice que cada
objeto es una instancia o ejemplar de una clase.

14.6 Algunos lenguajes orientados a


objetos
Simula (1967) es aceptado como el primer lenguaje que posee las caractersticas principales de un lenguaje orientado a
objetos. Fue creado para hacer programas de simulacin, en
donde los objetos son la representacin de la informacin
ms importante. Smalltalk (1972 a 1980) es posiblemente
el ejemplo cannico, y con el que gran parte de la teora de
la programacin orientada a objetos se ha desarrollado.
Entre los lenguajes orientados a objetos se destacan los siguientes:

Eiel
Fortran 90/95
Java
JavaScript[2]
Lexico[3]
Objective-C
Ocaml
Oz
R
Pauscal [En espaol]
Perl[4]
PHP[5]
PowerBuilder
Python
Ruby

ABAP -> SAP Lenguaje orientado a eventos

Self

ABL Lenguaje de programacin de OpenEdge de Progress Software

Smalltalk[6]

ActionScript

Magik (SmallWorld)

ActionScript 3

Vala

Ada

VB.NET

C++

Visual FoxPro[7]

C#
Clarion
Clipper[1]
D
Object Pascal (Embarcadero Delphi)

Visual Basic 6.0


Visual DataFlex
Visual Objects
XBase++

Gambas

Lenguaje DRP

GObject

Scala[8]

14.9. ENLACES EXTERNOS


Muchos de estos lenguajes de programacin no son puramente orientados a objetos, sino que son hbridos que combinan 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 programacin es la Programacin Orientada a Aspectos (POA).
Aunque es todava una metodologa en estado de maduracin, cada vez atrae a ms investigadores e incluso proyectos 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

37

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, Pacohc, 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, Alexbot, 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, CEMbot, 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, Asocall, 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, Alvaro 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: RobotQuistnix, 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 Colaboradores: 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, Domaniom, 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, Rmarco, 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, Macarrones, 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, Diegusjaimes, 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, Danielkolombia, 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, MerlIwBot, 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, Locovich, 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, Jlchavez, 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, Diegusjaimes, 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, Sanbec, Bigsus, Interwiki, Dodo, Ascnder, Sms, Tostadora, Renacimiento, Krous~eswiki, Robotito, Slady, Suruena, Renabot, ZackBsAs, CamiloAndres, 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, Obelix83, 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, CarsracBot, 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, AvicBot, 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, Jorgeolaya, 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: Chobot, Oscar ., BOTijo, The Photographer, CEM-bot, Roberpl, Thijs!bot, Locovich, TXiKiBoT, Marvelshine, Biasoli, Shooke, Muro Bot, Gabriellocutor, 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 Colaboradores: AstroNomo, Andre Engels, Moriel, Sauron, Pieter, Hashar, ManuelGR, Robbot, Raul2010~eswiki, Angus, Caravena, Vivero, Comae, 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, Funin, 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, SuperJoe, 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, Otherox, 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 queso, 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, CarsracBot, 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 Language 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 Colaboradores: 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.52.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 BYSA 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 Colaboradores: 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.52.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 Licencia: 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-BYSA-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-BYSA-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

Anda mungkin juga menyukai