introducción a la programación orientada a cap2
TRANSCRIPT
Introducción a la Programación Orientada a Objetos noviembre 24, 2010
Posted by arevalomaria in Introduccion a la Programación.
trackback
Introducción
Emprender un proyecto de desarrollo de software, es un reto que nos lleva a pensar
en la elaboración de un producto final que cumpla con las características de un
software exitoso: Solido, robusto, confiable, escalable, interoperable y lo mejor de
todo para quienes estamos desarrollando esgenerar código que pueda ser reutilizado.
Bajo esta premisa surge la necesidad de trabajar con una filosofía de programación
orientada a objetos. Ahora bien, en este momento se preguntaran, ¿una filosofía?, la
respuesta es sencilla, antes de aprender a programar en un lenguaje orientado a
objeto como C# o Vb.net, es importante aprender a pensar, bajo un modelo de
desarrollo, con su teoría y su metodología, como lo es la programación orientada a
objetos, para encontrar una solución a un problema que se plantee.
Conceptos Fundamentales
Clase:
Vamos a iniciar este concepto con un ejemplo: Para construir un modelo de automóvil
se deben haber plasmado una serie de características y funcionalidades que estarán
guiando la construcción del mismo. Cada vez que se procede a crear este mismo
modelo de auto, se deberá cumplir con las características y funcionalidades
predefinidas.
En programación orientada a objeto, una clase define las características y
comportamientos comunes de los objetos, en otras palabras la clase es el molde para
la creación de los mismos. Para nuestro ejemplo,un plano del modelo del auto es el
símil de la clase auto. Aunque la clase especifica las características propias del objeto
cada implementación es única tal como sucede en el mundo real pues el valor de sus
atributos puede variar, por ejemplo el color, kilómetros recorridos, etc.
Objeto:
Los objetos tienen características y comportamientos que están definidas de la clase
de donde se instancian, sin embargo, aunque varios objetos provengan de una clase
pueden tener identidad propia; en otras palabras: La identidad es el valor o estado de
la propiedad que permite a un objeto diferenciarse de otros. En programación
orientada a objetos cada Auto se conocerá como una instancia de la clase Auto.
Pilares de la Programación Orientada a Objetos
Es importante entender los cuatro pilares de la programación orientada a objetos:
abstracción, encapsulación, herencia y polimorfismo.
Abstracción:
Como se explico anteriormente, los objetos tienen atributos o características que
representan los datos asociados al mismo, estos atributos y sus valores en un
momento dado, determinan el estado de un objeto. De igual forma los objetos tienen
funcionalidades o comportamientos llamados métodos en la programación orientada a
objetos. Con estos métodos accedemos a los atributos de una manera predefinida y
se implementan el comportamiento del objeto.
Cuando desarrollemos un software, crearemos muchos objetos, que en algún
momento vamos a requerir para resolver una situación planteada. Es aquí donde
entra el concepto de abstracción. Con la abstracción podremos tomar lo que hace
falta de un objeto del mundo real para el sistema en un momento dado, es captar las
características esenciales de un objeto, así como su comportamiento.
Veamos como lo aplicamos a un ejemplo. En un taller mecánico se desea registrar los
automóviles que ingresan al mismo. Es decir que vamos a tomar para registro de
ingreso Marca, Modelo, Año, Cliente, Rif, Dirección Fiscal, teléfono del cliente. En este
Caso tomamos del objeto automóvil solo los datos que necesitamos Marca, Modelo y
Año. Del Objeto Cliente, el cliente su RIF, dirección fiscal y teléfono.
Encapsulamiento
El objetivo es “meter todo en una capsula”, juntar las piezas que hacen que funcione
como un todo. Ejemplo meto el motor dentro del auto.
Polimorfismo
Lograr que un objeto se comporte como si fuese una implementación de otra clase.
Ejemplo: Un carro comportándose como una grúa.
Herencia
Tomar características y funcionalidades definidas en otras clases. Ejemplo: Auto
hereda de vehículo motorizado. Como grúa también hereda de vehículo automotor.
Las clases no están aisladas, sino que se relacionan entre sí, formando una jerarquía
de clasificación. Los objetos heredan las propiedades y el comportamiento de todas
las clases a las que pertenecen. La herencia organiza y facilita el polimorfismo y el
encapsulamiento permitiendo a los objetos ser definidos y creados como tipos
especializados de objetos preexistentes.
Como había comentado en un post anterior, en programación orientada a objeto, una
clase define las características y comportamientos comunes de los objetos, en otras
palabras la clase es el molde para la creación de los mismos. En las Próximas líneas
les presento un ejemplo de la Clase Alumno en .net
La clase alumno es una abstracción con los atributos, comportamientos bases para
nuestro sistema.
using System;
using Noixno.Common;
namespace MVAEscuela.Core.BE
{
[Serializable]
public partial class Alumno : Persona //Herencia
{
#region Private fields, to hold the state of the ‘Alumno’ entity
private int m_IdAlumno;
private DateTime m_FechaDeNacimiento;
#endregion
#region Public properties, to expose the state of the entity
public int IdAlumno
{
get
{
return m_IdAlumno;
}
set
{
m_IdAlumno = value;
IsModified = true;
}
}
public DateTime FechaDeNacimiento
{
get
{
return m_FechaDeNacimiento;
}
set
{
m_FechaDeNacimiento = value;
IsModified = true;
}
}
#endregion
}
}
En el ejemplo que se muestra para la definición de la Clase Instructor se toman
características y funcionalidades definidas en otra clase denominada Persona. Las
clases no están aisladas, sino que se relacionan entre sí, formando una jerarquía de
clasificación. Esto se conoce como herencia.
using System;
using Noixno.Common;
namespace MVAEscuela.Core.BE
{
[Serializable]
public partial class Instructor : Persona //Herencia
{
#region Private fields, to hold the state of the ‘Instructor’ entity
private int m_IdInstructor;
private DateTime m_FechaIngreso;
#endregion
#region Public properties, to expose the state of the entity
public int IdInstructor
{
get
{
return m_IdInstructor;
}
set
{
m_IdInstructor = value;
IsModified = true;
}
}
public DateTime FechaIngreso
{
get
{
return m_FechaIngreso;
}
set
{
m_FechaIngreso = value;
IsModified = true;
}
}
#endregion
}
}
En los ejemplos anteriores pudimos analizar las Clases Alumno e Instructor. En este
ejemplo veremos que se desarrollo un formulario para enviar notificaciones. En este
caso tanto alumno como instructor se comportaran como persona. Esto es lo que se
conoce como Polimorfismo.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Net.Mail;
using MVAEscuela.Core.BE;
using MVAEscuela.Core.BLL;
public partial class Notificacion : System.Web.UI.Page
{
Alumno_BLL m_Alumno_BLL = new Alumno_BLL();
Instructor_BLL m_Instructor_BLL = new Instructor_BLL();
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Done_Click(object sender, ImageClickEventArgs e)
{
if (chkAlumnos.Checked)
{
Noixno.Common.CommonList<Instructor> Instructores =
m_Instructor_BLL.GetAll(null);
foreach (Instructor instructor in Instructores)
{
Notificar(instructor);
}
}
if (chkInstructor.Checked)
{
Noixno.Common.CommonList<Alumno> Alumnos =
m_Alumno_BLL.GetAll(null);
foreach (Alumno alumno in Alumnos)
{
Notificar(alumno);
}
}
}
//Polimorfismo ya quede recibir un instructor o un alummo ya que ambos heredan
de persona
protected void Notificar(Persona persona)
{
string Cuerpo = @"<HTML><body><table border =’1′><tr><td>Estimado: " +
persona.Nombre + "</td></tr> <tr><td>Estimado: " + Notificacion.Text +
"</td></tr> </table></body></HTML>";
MailMessage mail = new MailMessage();
SmtpClient SmtpServer = new SmtpClient("smtp.gmail.com");
mail.From = new MailAddress("[email protected]");
mail.To.Add(persona.CorreoElectronico);
mail.Subject = " Notificacion :: MVA Escuela";
mail.IsBodyHtml = true;
mail.Priority = MailPriority.High;
mail.Body = Cuerpo;
SmtpServer.Port = 587;
SmtpServer.Credentials = new
System.Net.NetworkCredential("[email protected]", "AmericaA00*");
SmtpServer.EnableSsl = true;
try
{
SmtpServer.Send(mail);
}
catch (SmtpException ex)
{
info.Text = ex.Message;
}
catch (Exception ex)
{
info.Text = ex.Message;
}
}
}
Con la finalidad de entender todos los conceptos explicados en este blog sobre
Introducción a la Programación Orientada a Objetos se les coloca a continuación un
link con el código completo de un programa para hacerle tanto mantenimiento a las
tablas de Alumnos e Instructores, como ejecutar el envío de notificaciones a ambos.
La estructura del programa cumple con el modelo en capas donde se separan
claramente las entidades de negocio, las reglas, las capas de
persistencia, presentación.
Link Codigo Fuente: http://dl.dropbox.com/u/8067930/MVA/MVAEscuela.zip
Link Script BD: http://dl.dropbox.com/u/8067930/MVA/MVAEscuelaDB_Script.zip
Para finalizar la grafica del Diagrama de Componente para este ejemplo: