miércoles, 20 de febrero de 2013

Lenguaje C# Parte 4 Objetos y Clases


Lenguaje C# Parte 4 Objetos y Clases

Objetos

Los objetos son construcciones de programación que se componen de datos, comportamiento e identidad.
Los datos del objeto se encuentran en los campos, propiedades y eventos del objeto; los métodos e
interfaces del objeto definen los comportamientos del objeto, pero estos residen en la definición del tipo al
que pertenece el objeto.
Los objetos tienen identidad, es decir, dos objetos con el mismo conjunto de datos no son necesariamente
el mismo objeto.
En C#, los objetos se definen mediante classes y structs, que conforman el plano único a partir del cual
operan todos los objetos de ese tipo.

Los objetos tienen las propiedades siguientes:


  • Todo lo que se utiliza en C# es un objeto, incluidos los formularios Windows Forms y los controles.
  • Se crean instancias de objetos; es decir, éstos se crean a partir de plantillas definidas por clases y estructuras.
  • Los objetos utilizan Propiedades (Guía de programación de C#) para obtener y cambiar la información que contienen.
  • A menudo, los objetos tienen métodos y eventos que les permiten realizar acciones.
  • Visual Studio proporciona herramientas para manipular objetos: la Propiedades (Ventana) permite cambiar los atributos de los objetos, como formularios Windows Forms. El Examinador de objetos permite examinar el contenido de un objeto.
  • Todos los objetos de C# heredan de Object.

Clases

En C#, una clase es un tipo de datos muy eficaz. Como las estructuras, las clases definen los datos y el
comportamiento del tipo de datos. Los programadores pueden crear objetos que son instancias de una
clase. A diferencia de las estructuras, las clases admiten herencia, que es una parte fundamental de la
programación orientada a objetos.

Declarar clases

Las clases se definen mediante la palabra clave class.


El nivel de acceso precede a la palabra clave class. En este caso, se utiliza public, que significa que cualquiera puede crear objetos a partir de esta clase. El nombre de la clase sigue a la palabra clave class.

Tipos 

Todos los tipos y miembros de tipo tienen un nivel de accesibilidad, que controla si pueden utilizarse por
otro código de su ensamblado u otros ensamblados.

  • public: Puede obtener acceso al tipo o miembro cualquier otro código del mismo ensamblado o de otro ensamblado que haga referencia a éste.
  • prívate: Solamente puede obtener acceso al tipo o miembro código de la misma clase o estructura.
  • protected: Solamente puede obtener acceso al tipo o miembro código de la misma clase o estructura o de una clase derivada.
  • internal: Puede obtener acceso al tipo o miembro cualquier código del mismo ensamblado, pero no de un ensamblado distinto.
  • protected internal: Puede obtener acceso al tipo o miembro cualquier código del mismo ensamblado o cualquier clase derivada de otro ensamblado.
La estructura genérica de una clase es:

Crear objetos

Aunque se utilizan a veces de forma intercambiable, una clase y un objeto son cosas diferentes. Una clase
define un tipo de objeto, pero no es propiamente un objeto. Un objeto es una entidad concreta basada en
una clase y, a veces, se denomina instancia de una clase.
Los objetos se pueden crear con la palabra clave new seguida del nombre de la clase en la que se basará el objeto.


Este código crea dos referencias a objeto que se refieren al mismo objeto. Por consiguiente, los cambios
realizados en el objeto a través de object3 se reflejarán en los usos posteriores de object4. El hecho de que
las clases se conozcan como tipos de referencia se debe a que se hace referencia a los objetos basados en clases por referencia.



Las clases tienen las propiedades siguientes:

  1. A diferencia de C++, sólo se admite una herencia única: una clase puede heredar la implementación solamente de una clase base.
  2. Una clase puede implementar más de una interfaz.
  3. Las definiciones de clase se pueden dividir entre archivos de código fuente diferentes. Para ello C# permite la definición de clases parciales.
  4. Las clases estáticas son clases selladas que contienen sólo métodos estáticos.

Enumeraciones

Las enumeraciones son un tipo de dato distinto que corresponde a un conjunto de constantes con nombre
denominado lista de enumeradores. La palabra clave enum se utiliza para declarar una enumeración. Cada 
tipo de enumeración tiene un tipo subyacente, que puede ser cualquier tipo integral excepto char. El tipo 
predeterminado subyacente de los elementos de la enumeración es int. De forma predeterminada, el 
primer enumerador tiene el valor 0 y el valor de cada enumerador sucesivo se incrementa en 1.

A una variable de tipo Dias se le puede asignar cualquier valor en el intervalo del tipo subyacente; los
valores no se limitan a las constantes con nombre

El tipo subyacente especifica el almacenamiento asignado para cada enumerador. No obstante, se necesita una conversión explícita (casting), para convertir un tipo enum al tipo entero subyacente. Por ejemplo, la siguiente instrucción asigna el enumerador Lunea a una variable de tipo int utilizando una conversión explícita para convertir de enum a int.


En este ejemplo, se declara la enumeración Dias. Dos enumeradores se convierten explícitamente en un
número entero y se asignan a variables de número entero.






________________________________________________________________________


miércoles, 13 de febrero de 2013

Lenguaje C# Parte 3 Instrucciones

Lenguaje C# Parte 3

Instrucciones

Una instrucción es una unidad de creación de procedimientos a partir de la cual se construyen todos los
programas de C#. Una instrucción puede declarar una variable o constante local, llamar a un método, crear
un objeto o asignar un valor a una variable, propiedad o campo.
Una serie de instrucciones que aparecen entre llaves forma un bloque de código. El cuerpo de un método es un ejemplo de bloque de código. A menudo, los bloques de código siguen una instrucción de control. Las
variables o constantes declaradas dentro de un bloque de código sólo están disponibles para las
instrucciones dentro del mismo bloque de código.

Las instrucciones de C# a menudo contienen expresiones. Una expresión de C# es un fragmento de código
que contiene un valor literal, un nombre simple o un operador y sus operandos. Las expresiones más
comunes, cuando se evalúan, producen un valor literal, una variable o una propiedad de objeto.
Evalúa como un resultado de valor lógico se asigna a una variable de tipo bool

Instrucciones de selección

Una instrucción de selección hace que el control del programa se transfiera a un determinado punto del
flujo de ejecución dependiendo de si cierta condición es true o no (false/null). Son también conocidas como
instrucciones de bifurcación, ya que determinan un camino definido a seguir en la ejecución del programa.

if-else

La instrucción if selecciona una instrucción para ejecución en base al valor de una expresión lógica.

Para poder evaluar la igualdad de dos operandos se utiliza el operador “==”

También es posible extender la instrucción if de modo que puedan controlarse varias condiciones, mediante la construcción else-if.

switch

La instrucción switch es una instrucción de control que controla múltiples selecciones y enumeraciones.

Si ninguna expresión case coincide con el valor de la instrucción switch, entonces el control se transfiere a las instrucciones que siguen la etiqueta default opcional. Si no existe ninguna etiqueta default, el control se transfiere fuera de la instrucción switch.

Instrucciones de iteración

Las instrucciones de iteración permiten crear bucles. En un bucle, las instrucciones internas se ejecutan un
determinado número de veces, según el criterio de terminación del bucle.

do

La instrucción do ejecuta una instrucción o un bloque de instrucciones entre {} repetidamente hasta que una expresión especificada se evalúe como false.

El Resultado del bloque anterior será una impresión secuencial: 0, 1, 2 … 5.

A diferencia de la instrucción while, un bucle do-while se ejecuta una vez antes de que se evalúe la expresión 
condicional.


for

El bucle for ejecuta una instrucción o un bloque de instrucciones repetidamente hasta que una determinada
expresión se evalúa como false. El bucle for es útil para recorrer en iteración matrices y para procesar
secuencialmente.

La instrucción for ejecuta la instrucción o instrucciones internas repetidamente del siguiente modo:
  • Primero, se evalúa el valor inicial de la variable i.
  • A continuación, mientras el valor de i sea menor o igual que 5, la condición se evalúa como true, se ejecuta la instrucción Console.WriteLine y se vuelve a evaluar i.
  • Cuando i es mayor que 5, la condición se convierte en false y el control se transfiere fuera del bucle.
Todas las expresiones de la instrucción for son opcionales; por ejemplo para crear un bucle infinito:

foreach

La instrucción foreach repite un grupo de instrucciones incluidas en el bucle para cada elemento de una
matriz o de un objeto collection. La instrucción foreach se utiliza para recorrer en iteración una colección de
elementos y obtener la información deseada, pero no se recomienda para cambiar el contenido de la
colección.
Esencialmente lo que se debe especificar en el bucle foreach es una “variable de paso” del tipo que
colecciona la matriz o colección, este elemento tomará la identidad del ítem que se recorre de manera
secuencial en la matriz o acorde al iterador de la colección.


Una de las ventajas que proporciona en bloque foreach, es que no se debe trabajar con una variable de paso 
interna cuando es requerida una conversión explícita para un tipo definido por el usuario al recorrer 

colecciones. Si bien for nos permitiría realizar este recorrido, es necesario definir una variable de paso para 

realizar el casting, acción que es realiza de manera automática en foreach.




while

La instrucción while ejecuta una instrucción o un bloque de instrucciones repetidamente hasta que una
expresión especificada se evalúa como false.


Como la comprobación de la expresión while tiene lugar antes de la ejecución del bucle, las instrucciones 
internas de un bucle while pueden no llegar a ejecutarse.

Instrucciones para el control de excepciones

C# incorpora mecanismos para el tratamiento de las situaciones anómalas, denominadas excepciones, que pueden producirse durante la ejecución de un programa.

Para el manejo de las excepciones, C# nos provee de un bloque try…catch, la clausula throw y el bloque finally.

try .... catch


Este ejemplo muestra un bloque try…catch en acción. Antes del bloque, se declara un arreglo de enteros con
tres elementos, dentro del bloque hay un bucle for el cual poblará el arreglo con números enteros, 
considerando 4 elementos. El bucle for imprime el elemento y posteriormente lo asigna a su posición. 
Todo trabaja bien hasta que se llega a la cuarta iteración del bucle for. Debido a que el arreglo solo puede 
contener tres elementos, se produce una excepción al intentar acceder al cuarto elemento (índice 3). Esto 
genera una excepción, ocasionando que el flujo de control del programa salte al bloque catch.

finally

Una importante consideración es que el bloque finally, se ejecutará si o si, se ha generado una excepción,
por lo tanto debemos ser cautos en su utilización. Por ello se debe tener presente que este bloque es para
garantizar la ejecución de un set de instrucciones, se produzca o no una excepción.

throw

Este nos
permitirá pasar la excepción generada al bloque try…catch padre o a la línea de programa desde donde se 
llamó el método, si es que no podemos o no debemos manejar la excepción en el lugar donde se produce.

Otro uso que podemos dar a la clausula throw, es para enmascarar o cambiar el tipo de excepción. En tal
caso controlamos la excepción original y luego generamos la excepción que deseamos.







________________________________________________________________________

martes, 12 de febrero de 2013

Lenguaje C# Parte 2. 2 Matrices

Lenguaje C# Parte 2. 2



Matrices (arreglos)

Un arreglo o matriz es una estructura de datos que contiene una serie de variables del mismo tipo. Las
matrices se declaran con un tipo:

Los ejemplos siguientes crean matrices unidimensionales, multidimensionales y escalonadas:

Propiedades de una matriz:



  • Una matriz puede ser unidimensional, multidimensional o escalonada.
  • El valor predeterminado de los elementos numéricos de matriz se establece en cero y el de los elementos de referencia se establece en null.
  • Una matriz escalonada es una matriz de matrices y por consiguiente sus elementos son tipos de referencia y se inicializan en null.
  • Las matrices se indizan basadas en cero: una matriz con n elementos se indiza desde 0 hasta n-1.
  • Los elementos de una matriz pueden ser de cualquier tipo, incluido el tipo matriz.
  • Los tipos de matriz son tipos de referencia derivados del tipo base abstracto Array. Puesto que este tipo implementa IEnumerable e IEnumerable, puede utilizar la iteración foreach en todas las matrices de C#.


Utilizar matrices como objetos

En C#, las matrices son de hecho objetos, y no simplemente regiones direccionables de memoria contigua
como ocurre en C y C++. Array es el tipo base abstracto de todos los tipos de matriz. Las propiedades y otros miembros de la clase Array se pueden utilizar cuando sea necesario.

Matrices unidimensionales

Una matriz de cinco elementos enteros se puede declarar como se muestra en el ejemplo siguiente:
Esta matriz contiene elementos desde array[0] hasta array[4]. El operador new se utiliza para crear la matriz e inicializar sus elementos con valores predeterminados. En este ejemplo, todos los elementos de la matriz se inicializan con cero.

Inicialización de matrices

Es posible inicializar una matriz en el momento de su declaración, en cuyo caso, no es necesario el
especificador de rango ya que éste viene dado por el número de elementos de la lista de inicialización

Matrices de tipo de valor y tipo de referencia

El resultado de esta instrucción depende de si ClaseType es un tipo de valor o un tipo de referencia. Si es un tipo de valor, la instrucción genera una matriz de 10 instancias del tipo ClaseType . Si  ClaseType es un tipo de referencia, la instrucción crea una matriz de 10 elementos, cada uno de los cuales se inicializa con una referencia nula.

Matrices multidimensionales

Las matrices pueden tener varias dimensiones:

Inicialización de matrices

La matriz se puede inicializar en la declaración.

Matrices escalonadas

Una matriz escalonada es una matriz cuyos elementos son matrices. Los elementos de una matriz
escalonada pueden ser de diferentes dimensiones y tamaños.

Cada elemento es una matriz unidimensional de enteros. El primer elemento es una matriz de 5 enteros, el segundo es una matriz de 4 enteros y el tercero es una matriz de 2 enteros.

También se pueden utilizar inicializadores para rellenar los elementos de la matriz con valores, en cuyo caso no es necesario especificar el tamaño de la matriz:




________________________________________________________________________



lunes, 11 de febrero de 2013

Lenguaje C# Parte 2. 1 Conversiones


Lenguaje C# Parte 2. 1

Conversiones de Tipos 

La conversión se refiere a la capacidad de cambiar un objeto de un tipo a otro. Se trata de una característica relativa al tiempo de ejecución, en lugar de al tiempo de compilación. Las conversiones pueden ser implícitas o explícitas; las conversiones implícitas tienen lugar cuando es posible una conversión automática, mientras que las conversiones explícitas se invocan cuando existe la posibilidad de un error ó pérdida de datos.

Conversión boxing y unboxing 

La unificación del sistema de tipos define también técnicas denominadas boxing y unboxing . Aquí es donde los tipos primarios y los tipos de referencia pueden utilizarse indiferentemente. Las conversiones boxing y unboxing permiten tratar los tipos de valor como objetos. La aplicación de la conversión boxing a un tipo de valor, empaqueta el tipo en una instancia del tipo de referencia Object. Esto permite almacenar el tipo de valor en la pila del recolector de elementos no utilizados (garbage collector). La conversión unboxing extrae el tipo de valor del objeto.

Boxing 

Es el proceso usado para convertir un tipo primitivo en un tipo de referencia. Para implementar esto, lo único que hace falta es asignar el tipo primitivo a un objeto.

Unboxing 

Es el proceso contrario al boxing, ya conocemos el tipo subyacente de un objeto que ha sido convertido (boxed), por lo tanto, lo único que debemos hacer es devolver al objeto a su tipo primitivo original, asignándolo de nuevo a un campo de su tipo primario original.

Conversiones Implícitas 

Las conversiones implícitas tienen lugar de forma automática, sin necesidad de ninguna sintaxis ni ensayo adicional. Por ejemplo, la conversión de int a long.


DeA
shortintlongfloatdouble o decimal
shortushortintuintlongulongfloatdouble o decimal
intlongfloatdouble o decimal
intuintlongulongfloatdouble o decimal
longfloatdouble o decimal
longulongfloatdouble o decimal
floatdouble o decimal
ushortint, uint, longulong, float, double o decimal
double
floatdouble o decimal


Conversiones Explícitas 

Este tipo de conversión es requerida cuando existe la posibilidad de una pérdida de datos o la aparición de un error. Para implementar este tipo de conversión, se ha de insertar un operador cast delante de la expresión de origen. Un operador cast no es más que el nombre del tipo que va a ser convertido, encerrado entre paréntesis.

Conversiones con Parsing 

El parseo de información, se trata de otro mecanismo para poder llevar información desde un string a un tipo de dato. Esta acción es facilitada por el método Parse() que implementan los tipos numéricos y de fecha.
A diferencia del proceso de casting de la conversión explícita, si el valor a convertir excede la capacidad del tipo de dato se producirá una excepción del tipo OverflowException , dando aviso del desbordamiento. Otra consideración de excepción se da cuando el valor literal no puede ser traducido al tipo destino como en el siguiente ejemplo: 
Para evitar que se pueda producir una excepción al momento de realizar el parsing, C# provee de un método para evaluar el parsing antes de realizarlo mediante el método TryParse(), este realizará una evaluación y retornará un valor del verdad indicando el éxito del proceso y adicionalmente el valor convertido en una variable de salida (out). 

DESCARGAR DEMO






________________________________________________________________________

Lenguaje C# Parte 1 Introducción


Lenguaje C# Parte 1

Introducción al Lenguaje C#

C# es un lenguaje orientado a objetos elegante y con seguridad de tipos que permite a los desarrolladores
crear una amplia gama de aplicaciones sólidas y seguras que se ejecutan en .NET Framework. Se puede
utilizar este lenguaje para crear aplicaciones cliente para Windows tradicionales, servicios Web XML,
componentes distribuidos, aplicaciones cliente-servidor, aplicaciones de base de datos, y muchas tareas
más.


Lenguaje C#

La sintaxis de C# es muy expresiva, aunque cuenta con menos de 90 palabras clave; también es sencilla y
fácil de aprender. La sintaxis de C# basada en signos de llave podrá ser reconocida inmediatamente por
cualquier persona familiarizada con C, C++ o Java. Los desarrolladores que conocen cualquiera de estos
lenguajes pueden empezar a trabajar de forma productiva en C# en un plazo muy breve.
Como lenguaje orientado a objetos, C# admite los conceptos de encapsulación, herencia y polimorfismo.


Arquitectura de la plataforma .NET Framework

Los programas de C# se ejecutan en .NET Framework, un componente que forma parte de Windows y que
incluye un sistema de ejecución virtual denominado Common Language Runtime (CLR) y un conjunto
unificado de bibliotecas de clases. CLR es la implementación comercial de Microsoft de Common Language
Infrastructure (CLI), norma internacional que constituye la base para crear entornos de ejecución y
desarrollo en los que los lenguajes y las bibliotecas trabajan juntos sin problemas.
El código fuente escrito en C# se compila en un lenguaje intermedio (IL) conforme con la especificación CLI.
El código de lenguaje intermedio, junto con recursos tales como mapas de bits y cadenas, se almacena en
disco en un archivo ejecutable denominado ensamblado, cuya extensión es .exe o .dll generalmente. Un
ensamblado contiene un manifiesto que ofrece información sobre los tipos, la versión, la referencia cultural
y los requisitos de seguridad del ensamblado.


Estructura general de un programa de C#

Los programas en C# pueden constar de uno o varios archivos. Cada archivo puede contener cero o varios
espacios de nombres (namespace). Un espacio de nombres puede contener tipos como clases, estructuras,
interfaces, enumeraciones y delegados, además de otros espacios de nombres. A continuación, se muestra
el esqueleto de un programa en C#

Main() y argumentos de línea de comandos

El método Main es el punto de entrada del programa o EntryPoint, donde crea objetos e invoca otros
métodos. En un programa de C#, sólo puede haber un punto de entrada.

Tipos de Datos

C# es un lenguaje con establecimiento inflexible de tipos; por lo tanto, cada variable y objeto debe tener un
tipo declarado.
Un tipo de datos se puede describir como:

  • Un tipo de datos integrado, como int o char, o bien
  • Un tipo de datos definidos por el usuario, como class o interface.

Cada tipo de dato es considerado como una organización y con un formato definido. Cada variable que se
define en un programa debe responder a uno de los tipos definidos en el lenguaje. La forma de declarar una
variable de un tipo definido se da de la siguiente forma:
tipo_dato nombre_variable [= valor_incial];

Tabla de Tipos Integrales

TipoIntervaloTamaño
-128 a 127
Entero de 8 bits con signo
0 a 255
Entero de 8 bits sin signo
U+0000 a U+ffff
Carácter Unicode de 16 bits
-32.768 a 32.767
Entero de 16 bits con signo
0 a 65.535
Entero de 16 bits sin signo
-2.147.483.648 a 2.147.483.647
Entero de 32 bits con signo
0 a 4.294.967.295
Entero de 32 bits sin signo
-9.223.372.036.854.775.808 a 9.223.372.036.854.775.807
Entero de 64 bits con signo
0 a 18.446.744.073.709.551.615
Entero de 64 bits sin signo

Tabla de Tipos de Punto Flotante

TipoIntervalo aproximadoPrecisión
±1,5e−45 a ±3,4e38
7 dígitos
±5,0e−324 a ±1,7e308
15-16 dígitos

DESCARGAR DEMO







________________________________________________________________________