jun 27 2009

POO: EVENTOS

Category: Artículosdwaks @ 10:40

POO (Programación Orientada a Objetos)
Definición
http://es.wikipedia.org/wiki/Programación_orientada_a_objetos

Creo que mejor define el termino wikipedia antes que yo, pero lo que si quiero es seguir propagando el término y acercarlos más a este modo de programación que en .net es la base de todo. El grupo de objetos que el Framework.NET brinda es muy variado y no deja margen a limitaciones, y el único límite que existe es el que uno mismo se ponga al frente.

Entre abstracción, encapsulamiento, ocultación, polimorfismo, herencia y recolección de basura la programación orientada a objetos brinda un ambiente de trabajo a mi punto de vista entretenido, preciso, organizado, fácil de mantener, fácil de usar, fácil de entender y lo más importante es crear proyectos con un equipo de trabajo grande permitiendo una organización y distribución muy buena.

En esta primera entrega escribiré sobre los eventos de una clase tanto en el uso de ellos como la adaptación de eventos a una clase mostrando escenarios.

 

EVENTOS

Trataré en este y todos los demás artículos de poder definir las cosas de una manera que sea fácil de entender. En el caso de los eventos de una clase la mejor manera de definirlo a mi modo, aclaro a mi modo es la siguiente:

"Un evento es un canal paralelo a cualquier proceso donde puedes comunicar desde la clase cualquier suceso importante"

Pongamos un ejemplo:
Tienes una clase simple que representa una persona, esta clase tiene propiedades como nombre, apellido, edad y país de residencia.Tu agregas un evento para representar un canal que comunique si la edad de la persona cambia y si el país cambia. Imaginate que tienes un monton de personas sin saber ni estar pendiente si se mudó. Pero como ya le tienes el evento que nos comunicará eso abierto solo quedará esperar.

Una clase que defina una persona se vería de forma simple sin evento adaptado así:

001public class Persona
002{
003    public string Nombre { get; set; }
004    public string Apellido { get; set; }
005
006    private int _edad = 0;
007    private string _residencia = "";
008
009    public int Edad
010    {
011        get { return this._edad; }
012        set { this._edad = value; }
013    }
014
015    public string Residencia
016    {
017        get { return this._residencia; }
018        set { this._residencia = value; }
019    }
020}

Para el evento usaré el INotifyPropertyChanged definido en System.ComponentModel, es un delegado y un EventArg ya definido en el Framework. También aclaró que en el nuevo framework 3.5 el INotifyPropertyChanged en conjunto con el ObservableCollection hacen maravillas en los DataGridView, pero eso es otro tema que merece un artículo propio.

Veamos como queda la clase implementando el INotifyPropertyChanged:

001public class Persona : INotifyPropertyChanged
002{
003    public string Nombre { get; set; }
004    public string Apellido { get; set; }
005
006    private int _edad = 0;
007    private string _residencia = "";
008
009    public int Edad
010    {
011        get { return this._edad; }
012        set
013        {
014            this._edad = value;
015            OnPropertyChanged("Edad");
016        }
017    }
018
019    public string Residencia
020    {
021        get { return this._residencia; }
022        set
023        {
024            this._residencia = value;
025            OnPropertyChanged("Residencia");
026        }
027    }
028
029    public event PropertyChangedEventHandler PropertyChanged;
030
031    private void OnPropertyChanged(string Name)
032    {
033        if (this.PropertyChanged != null)
034        {
035            this.PropertyChanged(this, new PropertyChangedEventArgs(Name));
036        }
037    }
038}

Ahora esta todo en su lugar y se pueden fijar que primero se define el evento PropertyChanged y luego creo un método privado que es el que uso como intermediario para activar el evento validando que el evento no sea null porque si es null significa que nadie que este usando la clase Persona esta esperando que el evento comunique algo. Si el evento PropertyChange es null y uno lo utiliza entonces inevitablemente dara error.

Ahora veamos en un programa consola como registrarnos al evento para que nos comunique si la edad ó la residencia de alguno de las personas que defina cambia, esto quedaría de la siguiente manera y los invito a probar el ejemplo para que sientan que bueno es usar eventos.

001class Program
002{
003    static void Main(string[] args)
004    {
005        // Agregar a las Personas
006        List Personas = new List();
007
008        for (int i = 1; i < 21; i++)
009        {
010            Persona p = new Persona();
011            p.Nombre = "Persona" + i.ToString();
012            p.Apellido = "dotnetPanama";
013            p.Residencia = "Panamá";
014            p.Edad = i;
015
016            // Agregar Evento
017            p.PropertyChanged += new PropertyChangedEventHandler(OnPropertyChanged);
018
019            Personas.Add(p);
020        }
021
022        // Editar a cualquier persona de la lista
023        Personas[11].Edad = 54;
024        Personas[5].Residencia = "Colombia";
025
026        Console.Read();
027    }
028
029    private static void OnPropertyChanged(object sender, PropertyChangedEventArgs e)
030    {
031        Persona p = (Persona)sender;
032        Console.WriteLine("Propiedad que cambio: {0}", e.PropertyName);
033        Console.WriteLine("{0} {1}", p.Nombre, p.Apellido);
034        Console.WriteLine("Edad: {0}", p.Edad);
035        Console.WriteLine("Residencia: {0}", p.Residencia);
036        Console.WriteLine("");
037    }
038}

 Ahy muchas otras cosas que espero tengan clara y de las cuales no hablo en este artículo ni un poquito asumiendo que ya lo saben, cosas como son Interfaces, Delegados, Propiedades de una clase y Métodos de una clase. Si algunos de estos terminos no los tienen claro solo me avisan dejando su comentario que yo escribiré un artículo sobre eso para que no quede nada sin entender.

Lo que quiero es que todo lo entiendan a profundidad sin dejar ningun termino sin conocer bien. El conocer todas los elementos que nos brinda la programación orientada a objetos nos da una gran ventaja en el desarrollo y uso de las librerias que nos brinda el framework de microsoft.

Bueno me despido por el momento y espero haber brindado un granito de arena al conocimiento y no enrredado más los términos. El archivo que aparece a continuación POO-EVNTOS.txt contieneel código que solo copias y pegas en un Program.cs de un proyecto de consola.

POO-EVENTOS.txt (2,38 kb)

Tags:

Sea el primero en calificar este post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5