lunes, 21 de julio de 2008

Clases herencia y polimorfismo

En el siguiente ejercicio vamos a revisar algunos conceptos sobre esta cosa que llaman programación orientada a objetos.

Definitivamente, la técnica de definir clases y reutilizar esas definciones facilita la programación.

Uno de los aspectos más importantes es la capacidad de hereder propiedades y métodos de manera que se puede lograr la famosa especializacion de una clase redifiniendo lo que debe hacerse al ejecutar un método, esto es lo que llaman polimorfismo.

Veamos el ejemplo que hace las cosas mas fáciles de entender. Se trata de una aplicación de consola realizada con el Visual Studio 2008.



1using System;
2using System.Collections.Generic;
3 
4namespace Polymorphism
5{
6 class Program
7 {
8 static void Main(string[] args)
9 {
10 
11 Perro perro = new Perro("Sultan");
12 Gato gato = new Gato("Garfield");
13 Pato pato = new Pato("Lucas");
14 
15 Console.WriteLine("\nDesde los objetos directamente");
16 perro.Presentarse();
17 gato.Presentarse();
18 pato.Presentarse();
19 
20 List<Animal> bichos = new List<Animal>();
21 bichos.Add(new Perro("Sultan 2") as Animal);
22 bichos.Add(new Perro("Diablo") as Animal);
23 bichos.Add(new Pato("Lucas 2") as Animal);
24 bichos.Add(new Gato("Silvestre") as Animal);
25 bichos.Add(new Gato("Midnight") as Animal);
26 bichos.Add((Animal) perro);
27 bichos.Add((Animal) gato);
28 bichos.Add((Animal) pato);
29 
30 bichos.Sort(delegate(Animal a1, Animal a2) { return String.Compare(a1.Nombre, a2.Nombre); });
31 
32 Console.WriteLine("\nDesde un arreglo de objetos indirectamente");
33 foreach (Animal bicho in bichos)
34 {
35 bicho.Presentarse();
36 }
37 }
38 }
39 


Hasta aquí, lo que tenemos es la clase Program que es la que contiene el método Main, que se ejecuta por defecto en este tipo de aplicaciones.

Como pueden ver se crean unos objetos (más adelante está la declaración de esas clases) y se invoca el método presentarse de cada uno de ellos. Obviamente cada objeto hace lo que tiene que hacer o mejor dicho lo que se ha codificado en el método Presentarse.

Observen que en las líneas 16 a 18 se invoca el método directamente desde cada objeto; a continuación se declara una colección (en este caso una Lista) de objetos tipo Animal (esta es la clase de la cual heredan las otras) y se crean diferentes tipos de objetos agregándolos a la lista. Tengan en cuenta la forma como se hace el "cast" para que el compilador no se queje.

Finalmente se ordena de acuerdo al nombre de cada bicho y se invoca el método Presentarse por cada una de las instancias en la lista.

La salida del ejercicio es la siguiente:

---------------------------------------------------------------------------------
Desde los objetos directamente
Soy un Polymorphism.Perro me llamo Sultan GUAU GUAU
Soy un Polymorphism.Gato me llamo Garfield MIAU MIAU
Soy un Polymorphism.Pato me llamo Lucas CUAC CUAC

Desde un arreglo de objetos indirectamente
Soy un Polymorphism.Perro me llamo Diablo GUAU GUAU
Soy un Polymorphism.Gato me llamo Garfield MIAU MIAU
Soy un Polymorphism.Pato me llamo Lucas CUAC CUAC
Soy un Polymorphism.Pato me llamo Lucas 2 CUAC CUAC
Soy un Polymorphism.Gato me llamo Midnight MIAU MIAU
Soy un Polymorphism.Gato me llamo Silvestre MIAU MIAU
Soy un Polymorphism.Perro me llamo Sultan GUAU GUAU
Soy un Polymorphism.Perro me llamo Sultan 2 GUAU GUAU
---------------------------------------------------------------------------------

Ahora veamos la declaración de las clases; para comenzar se tiene una clase abstraca (no puede tener instancias) que incorpora el miembro _Nombre (privado) y una propiedad pública Nombre la que nos permite acceder a dicho miembro. Observen que se puso dos constructores el que es por defecto y otro que nos permite crear instancias de la clase y a la vez asignar un valor por medio de la propiedad Nombre.

El método Presentarse muestra el tipo de objeto (el nombre de la clase) de la instancia que ejecuta el método.

A continuación se declaran tres clases, Perro, Gato y Pato que son todas derivadas (este es un término de la programación en C++) debería decir que "heredan" de Animal.

Vean cómo se declaran los constructores de manera que invocan al constructor de la clase base, como en este caso no hay nada más que hacer estos constructores están vacíos, pero tranquilamente se podría incorporar más código.

Observen también que el método Presentarse invoca al mismo método de la clase base, de este modo es que logramaos que clases derivadas ejecuten código escrito para la clase báse.



40 public abstract class Animal
41 {
42 public Animal() {}
43 public Animal(string nombre)
44 {
45 Nombre = nombre;
46 }
47 
48 private string _Nombre = string.Empty;
49 public string Nombre
50 {
51 get { return _Nombre; }
52 set { _Nombre = value ?? string.Empty; }
53 }
54 
55 public virtual void Presentarse()
56 {
57 Console.Write("Soy un " + this.GetType() + " ");
58 }
59 }
60 
61 public class Perro : Animal
62 {
63 public Perro()base() {}
64 public Perro(string nombre) : base(nombre) { }
65 
66 public override void Presentarse()
67 {
68 base.Presentarse();
69 Console.WriteLine("me llamo " + this.Nombre + " GUAU GUAU");
70 }
71 }
72 
73 public class Gato : Animal
74 {
75 public Gato() : base() {}
76 public Gato(string nombre) : base(nombre) {}
77 
78 public override void Presentarse()
79 {
80 base.Presentarse();
81 Console.WriteLine("me llamo " + this.Nombre + " MIAU MIAU");
82 }
83 }
84 
85 public class Pato : Animal
86 {
87 public Pato() : base() {}
88 public Pato(string nombre) : base(nombre) {}
89 
90 public override void Presentarse()
91 {
92 base.Presentarse();
93 Console.WriteLine("me llamo " + this.Nombre + " CUAC CUAC");
94 }
95 }
96 
97}


Bueno, seguramente hay preguntas sobre algunos aspectos del ejemplo pero lo más importante es que tienen un pequeño punto de arranque para desarrollar su propio esquema de clases.

En general un sistema tiene un esquema bastante complejo respecto de las clases de negocio, con todas estas alternativas de clases Abstracas, Virtuales, Interfaces, etc. es cómo hoy en día se construyen modelos que representan con mayor y mejor exactitud el comportamiento de las entidades del mundo real.

Espero que sirva.

miércoles, 9 de julio de 2008

Video Ejemplo

Hola a todos, me hice un videito para aquellos que recien estan empezando... no me salio como lo esperaba pero sirve... espero que lo disfruten SALUDOS!!!

http://www.4shared.com/dir/8167139/a50afb08/sharing.html

Tipos de Datos

Cada variable debe tener un tipo de datos. El tipo de datos de una variable determina los valores que la variable puede contener y las operaciones que pueden llevarse a cabo en ellas.

Tipos de Datos Primitivos

Números Enteros

int numeroEntero; //Entero de 32 Bits
short numeroCorto; //Entero de 16 Bits

long numeroLargo; //Entero de 64 Bits


Números Enteros sin signo

uint numeroEnteroSinSigno; //Entero de 32 Bits sin signo
ushort numeroCortoSinSigno; //Entero de 16 Bits sin signo
ulong numeroLargoSinSigno; //Entero de 64 Bits sin signo


Fraccionarios

float numeroFraccionario; //Números Reales de 32 bits
double numeroFraccionario; //Número Reales de 64 bits


Caracteres

byte nByte; //Caracteres Numéricos sin signo
sbyte nByteConSigno; //Caracteres Numéricos con signo
char caracter; //Caracter Simple
string cadenaTexto; //Cadena de Texto


Booleanos

bool tipoBooleano; //Los valores que permite son True o False.

Tipos por Valor

Los tipos por valor son tipos de datos cuyo valor se almacena en la pila, y cualquier cambio que hagamos lo haremos directamente sobre dicho valor, de igual forma cuando copiamos valores de un tipo por valor a otro, estaremos haciendo copias independientes.

Ejemplo de Tipo por Valor:

Defino una variable del tipo entero:

int numeroEntero;

Le asigno un valor:

numeroEntero = 10;

Es un tipo por valor por que le estoy asignado un valor a la variable numeroEntero, en este caso 10.

Ahora defino una variable del tipo entero:

int numeroEnteroB;

Y si le asigno el contenido de numeroEntero, a esta nueva variable:

numeroEnteroB = numeroEntero;

Entonces el contenido de la nueva variable tambien sera 10

Tipo por Referencia

Se almacenan en el heap o memoria lejana, lo único que almacenan es una referencia al valor asignado. Si hacemos copias de tipos por referencia relamente lo que copiamos es la referencia propiamente dicha, pero no el contenido.

Ejemplo de tipo por referencia

Mas adelante veremos como crear nuestros propios tipos de datos por referencia, por el momento utilizaremos un tipo por referencia existente:

Object tipoRef;
tipoRef = numeroEntero;

Por lo tanto a la variable tipoRef no le estoy asignando el contenido, sino la referencia de memoria, es decir la dirección de memoria donde puedo encontrar el contenido.

Por lo tanto los Tipos de datos por Valor son todos los Tipo de datos Primitivos, y por Referencia son los restantes.

lunes, 7 de julio de 2008

Nuestro primer programa en C#!!!!!!

Como primer paso abrimos el Visual C# y nos aparecerá la siguiente pantalla:


En el menú File elegiremos la opción New Proyect y crearemos un Proyecto en modo consola eligiendo la opción como se muestra en la pantalla que sigue:


Luego le ponemos un nombre al proyecto, para este caso le pondremos "MiPrimerPrograma" y le damos OK. Nos aparecerá una pantalla que contiene el siguiente código:



Por defecto se crea la clase Program y un método estático denominado Main, dentro del cual escribiremos el siguiente código explicado linea por linea para realizar nuestra primera aplicación:

//Nuestra Primera Aplicación!!!

//Defino una cadena y asigno un valor
string valor1 = "Este es el valor 1";

//Defino un entero y asigno un valor

int valor2 = 5;

//Defino una cadena y Asigno a la variable
//valor3 una dirección de memoria,

//en este caso la de valor1
string valor3 = valor1;

//Imprime por pantalla el valor de la
//variable correspondiente

Console
.WriteLine(valor1);
Console.WriteLine(valor2);
Console
.WriteLine(valor3);
Console
.WriteLine();

//Imprime por pantalla la cadena que

//encuentra como parámetro

Console
.WriteLine("Presione una tecla para continuar");

//Lee una tecla presionada por el usuario
Console.ReadKey();

Ahora podemos ejecutarlo presionando sobre el Botón Verde que se encuentra en la Barra ubicada en la parte superior, que se muestra a continuación:


La Salida será la siguiente:



Bueno eso es todo por ahora, espero que puedan hacerlo.

Herramientas

Las herramientas que utilizaremos son las siguientes:

-Microsoft Visual C# 2005 Express Editions
-Microsoft Visual Web Developer 2005 Express Editions
-Microsoft SQLServer 2005 Express Editions


Lo podes bajar desde el siguiente link:

http://msdn.microsoft.com/es-es/express/default.aspx

domingo, 6 de julio de 2008

Empezamos de Cero!!!

Antes que nada vamos a elegir cual es el tema que vamos estudiar, en principio yo propongo que comenzemos con el Lenguaje C#, de modo que estaré preparando algo para postear sobre este tema, espero que publiquen sus preguntas, ideas y propuestas.

Páginas Recomendadas

Antes de Empezar les recomiendo visitar las siguientes páginas:

http://www.illasaron.com/, donde encontrarán videos introductorios de ASP.NET y videos de C#.

http://www.mslatam.com/latam/msdn/comunidad/dce2005/default.aspx, en esta página es posible participar en el programa Desarrollador Cinco Estrellas 2005 el cual consiste en un programa de capacitación online gratuita en tecnologías .NET de Microsoft.

http://www.asp.net/, donde podrán encontrar Videos, Tutoriales, Libros en ASP.NET y algunos Starter Kit (aplicaciones Web de muestra).

sábado, 5 de julio de 2008

Nuestro Logo!!!

Les Presento nuestro Logo!!!

Saludos

Saludos a todos y espero que les sean venideros estos tiempos. Exitos!!!

Bienvenida

Bienvenidos al Blog de la Célula TeamDJ.Net !!!!, aqui publicaremos todos los avances, dudas, comentarios, y temas de interés que irán surgiendo durante el desarrollo de nuestras actividades.