Sunteți pe pagina 1din 42

EI | Ing.

Joffre Cartuche C
Programacin
Visual
P
r
o
g
r
a
m
a
c
i

n
V
i
s
u
a
l

I
I
116
UNIDAD DIDCTICA
2
CLASES Y OBJETOS
Tiempo estimado de estudio:
32 Horas
EI | Ing. Joffre Cartuche C
Programacin
Visual
P
r
o
g
r
a
m
a
c
i

n
V
i
s
u
a
l

I
I
117
INTRODUCCIN
OBJETIVO GENERAL
Disear aplicaciones utilizando adecuadamente los principios de sistemas visuales, clases y
objetos con el propsito de realizar soluciones informticas bajo el paradigma orientado a
objetos.
.
AGENDA
Clase
Definicin clase
Atributos, mtodos y propiedades.
Objetos
Estructura de un objeto
Visibilidad de una clase
Creacin y destruccin de un objeto.
Encapsulamiento
Mtodos get y set.
Herencia
Polimorfismo.
Mtodos virtuales.
Enumeraciones e interfaces
Introduccin a LINQ O.O
ESQUEMA DE CONTENIDOS
Programacion Orientada a Objetos en C#
Clase Objeto Encapsulamiento Herencia Polimorfismo Linq Object
EI | Ing. Joffre Cartuche C
Programacin
Visual
P
r
o
g
r
a
m
a
c
i

n
V
i
s
u
a
l

I
I
118
La programacin orientada a objetos es un paradigma para crear programas que sobreviven a los
cambios inevitables que acompaan a la obsolescencia de cualquier sistema. Se pueden extraer
partes de un sistema antiguo con facilidad, puesto que se entiende la funcin de cada objeto y se
tienen interfaces limpias y fiables entre los mismos. La POO surgi como resultado del caos
producido cuando los lenguajes tradicionales se enfrentaron a los grandes problemas del software.
Los lenguajes de programacin han evolucionado las posibilidades de resolver problemas cada vez
ms complejos gracias a la POO, sta es una nueva forma o tcnica de programacin que utiliza
objetos como bloque esencial de construccin, es decir, los objetos son, en realidad, tipos
abstractos de datos.
Un tipo abstracto de dato es un tipo de dato definido por el programador junto con un conjunto
de operaciones que se pueden realizar sobre ellos. Se denominan abstractos para diferenciarlos de
los datos bsicos definidos. Es decir, un objeto es una coleccin de datos junto con las funciones
asociadas, utilizadas para operar sobre esos datos.
Entonces la POO enfatiza los tipos de datos y las operaciones intrnsecas que pueden desarrollarse
en aquellos tipos de datos, los datos no fluyen libremente por el sistema, ya que estn protegidos de
alguna modificacin accidental; son los mensajes los que pueden mover en el sistema, pues se
enva un mensaje a un objeto para que ejecute una accin.
En esta unidad se realiza una introduccin a la programacin orientada a objetos utilizando el
lenguaje C#, caracterizando previamente sus elementos y la notacin UML, cabe mencionar que en
esta unidad no se pretende que el estudiante aprenda desde cero a programar utilizando esta
tcnica de programacin simplemente recordaremos conceptos fundamentales pero necesarios para
esta unidad. Para que el estudiante aprenda a programar orientado a objetos debe haberse visto
esta asignatura en un semestre anterior.
UNIDAD II
CLASES Y OBJETOS
2.1 PARADIGMA ORIENTADO A OBJETOS
La programacin orientada a objetos es algo ms que el ltimo grito en programacin. No se trata
de una moda, sino de un modo de trabajo ms natural, que te permite centrarte en solucionar el
EI | Ing. Joffre Cartuche C
Programacin
Visual
P
r
o
g
r
a
m
a
c
i

n
V
i
s
u
a
l

I
I
119
problema que tienes que resolver en lugar de tener que andar pensando en cmo le digo al
computador que haga esto o lo otro.
Es importante aclarar desde un principio la diferencia que existe entre programacin orientada a
objetos y un lenguaje orientado a objetos.
La programacin orientada a objetos es una filosofa, un modelo de programacin, con su teora y
su metodologa, que conviene conocer y estudiar antes de nada. Un lenguaje orientado a objetos es
un lenguaje de programacin que permite el diseo de aplicaciones orientadas a objetos. Dicho esto,
lo normal es que toda persona que vaya a desarrollar aplicaciones orientadas a objetos aprenda
primero la filosofa (o adquiera la forma de pensar) y despus el lenguaje, porque filosofa slo
hay una y lenguajes muchos. En este captulo veremos brevemente los conceptos bsicos de la
programacin orientada a objetos desde un punto de vista global, particularizando lenguaje de
programacin c#.
Es muy importante destacar que cuando hacemos referencia a la programacin orientada a objetos
no estamos hablando de unas cuantas caractersticas nuevas aadidas a un lenguaje de
programacin. Estamos hablando de una nueva forma de pensar acerca del proceso de
descomposicin de problemas y de desarrollo de soluciones de programacin.
La programacin orientada a objetos surge en la historia como un intento para dominar la
complejidad que posee el software.
Como podemos ver, descomponamos el problema en acciones, en verbos; por ejemplo el verbo
pedir, el verbo hallar, el verbo comprobar, el verbo calcular.
La programacin orientada a objetos es una nueva forma de pensar, una manera distinta de enfocar
los problemas. Ah radica la dificultad de aprender un lenguaje totalmente orientado a objetos,
como es c#, sin conocer previamente los pilares de la programacin orientada a objetos. Hecha esta
importante aclaracin, conviene destacar que c#, ms que un lenguaje orientado a objetos, es un
lenguaje de objetos. Incorpora el uso de la orientacin a objetos como uno de los pilares bsicos y
fundamentales del lenguaje.
UN EJEMPLO NARRATIVO ORIENTADO A OBJETOS
Si nos detenemos a pensar sobre cmo se nos plantea un problema cualquiera en la realidad
podremos ver que lo que hay en la realidad son entidades (otros nombres que podramos usar para
describir lo que aqu llamo entidades son agentes u objetos).
Estas entidades poseen un conjunto de propiedades o atributos, y un conjunto de mtodos
mediante los cuales muestran su comportamiento. Y no slo eso, tambin podremos descubrir, a
poco que nos fijemos, todo un conjunto de interrelaciones entre las entidades, guiadas por el
intercambio de mensajes; las entidades del problema responden a estos mensajes mediante la
ejecucin de ciertas acciones.
El siguiente ejemplo, aunque pueda parecer un poco extrao, creo que aclarar algunos conceptos y
nos servir como introduccin para desarrollarlos con profundidad.
EI | Ing. Joffre Cartuche C
Programacin
Visual
P
r
o
g
r
a
m
a
c
i

n
V
i
s
u
a
l

I
I
120
Imaginemos la siguiente escenario:
Un domingo por la tarde estoy en casa viendo en la televisin un partido de futbol, y de repente mi
madre siente un fuerte dolor de cabeza; como es natural, lo primero que hago es tratar de encontrar
una caja de aspirinas.
Lo que acabo de describir es una situacin que probablemente no resulte muy extraa a muchos de
nosotros. Vamos a verla en clave de objetos: el objeto hijo ha recibido un mensaje procedente del
objeto madre. El objeto hijo responde al mensaje o evento ocurrido mediante una accin: buscar
aspirinas. La madre no tiene que decirle al hijo dnde debe buscar, es responsabilidad del hijo
resolver el problema como considere ms oportuno. Al objeto madre le basta con haber emitido un
mensaje.
Continuemos con la historia.
El hijo no encuentra aspirinas en el botiqun y decide acudir a la farmacia de guardia ms cercana
para comprar aspirinas. En la farmacia es atendido por una seorita que le pregunta qu desea, a lo
que el hijo responde: "una caja de aspirinas, por favor". La farmacutica desaparece para regresar al
poco tiempo con una caja de aspirinas en la mano. El hijo paga el importe, se despide y vuelve a su
casa. All le da un comprimido a su madre, la cual al cabo de un rato comienza a experimentar una
notable mejora hasta la completa desaparicin del dolor de cabeza.
El hijo, como objeto responsable de un cometido, sabe lo que debe hacer hasta conseguir una
aspirina. Para ello entra en relacin con un nuevo objeto, la farmacutica, quien responde al
mensaje o evento de peticin del objeto hijo con la bsqueda de la aspirina. El objeto farmacutica
es ahora el responsable de la bsqueda de la aspirina. El objeto farmacutica lanza un mensaje al
objeto hijo solicitando el pago del importe, y el objeto hijo responde a tal evento con la accin de
pagar.
Como hemos podido ver, en esta situacin nos hemos encontrado con objetos que se diferenciaban
de los dems por un conjunto de caractersticas o propiedades, y por un conjunto de acciones que
realizaban en respuesta a unos eventos que se originaban en otros objetos o en el entorno.
Tambin podemos darnos cuenta de que, aunque todos los objetos tienen propiedades distintas,
como el color del cabello, el grado de simpata o el peso, todos tienen un conjunto de atributos en
comn por ser ejemplos de una entidad superior llamada ser humano. A este patrn de objetos
(en nuestro caso ser humano) lo llamaremos clase.
Con este ejemplo espero que se entienda que los objetos son instancias o casos concretos de las
clases, que no son ms que plantillas que definen las variables y los mtodos comunes a todos los
objetos de un cierto tipo. La clase ser humano tendr, entre sus muchas variables miembro o
variables que la componen: color del cabello, color de los ojos, estatura, peso, fecha de nacimiento,
etc. A partir de una clase se podrn generar todos los objetos que se deseen especificando valores
particulares para cada una de las variables definida por la clase. As, encontraremos el objeto
farmacutica, cuyo color de cabello es rubio, color de ojos azul, estatura 175 cm, peso 50 Kg, y as
sucesivamente.
EI | Ing. Joffre Cartuche C
Programacin
Visual
P
r
o
g
r
a
m
a
c
i

n
V
i
s
u
a
l

I
I
121
class Class Model
Auto
- Marca: char
- Model o: char
- NumPl aca: char
class Class Model
MIAuto:Auto
- Toyota
- Yari s
- O76-135
A continuacin veremos con ms detalle qu son las, las clases, objetos, los mensajes y otros
conceptos bsicos de la programacin orientada a objetos.
2.2. Clases
Una clase es la definicin de las caractersticas concretas de un determinado tipo de objetos. Es
decir, de cules son los datos y los mtodos de los que van a disponer todos los objetos de ese tipo.
Para que pueda haber un objeto debe existir previamente una clase, pero no al revs. Me explico: la
clase es la plantilla en la que nos basamos para crear el objeto. Volvamos al ejemplo del auto:
todos ellos tienen una serie de caractersticas comunes: todos tienen un motor, ruedas, un volante,
pedales, chasis, carrocera...; todos funcionan de un modo parecido para acelerar, frenar, cambiar las
marchas, encender las luces; sin embargo, cada uno de ellos es diferente de los dems, puesto que
cada uno es de su marca, modelo, color, nmero de placa, propiedades que lo diferencian de los
dems, aunque una o varias de ellas puedan coincidir en varios autos. Diramos entonces que todos
los autos estn basados en una plantilla, o un tipo de objeto, es decir, pertenecen todos a la misma
clase: la clase auto. Sin embargo, cada uno de los autos es un objeto de esa clase: todos comparten
la interfaz, pero no tienen por qu compartir los datos (marca, modelo, color, etc.). Se dice
entonces que cada uno de los objetos es una instancia de la clase a la que pertenece, es decir, un
objeto. En resumen, la clase es algo genrico (la idea que todos tenemos sobre lo que es un auto) y
el objeto es algo mucho ms concreto (el auto del vecino, el nuestro, el de su papa). Veamos cmo
sera esto en C#. El diseo de la clase Auto sera algo parecido a esto.
2.3 Objeto.
class Auto
{
string Marca;
string Modelo;
string Color;
}
Representacin grafica
de una clase en UML.
Declaracin de una clase
en C#
Auto MiAuto = new Auto("Toyota", "Yaris", "076-135");
//Para la creacin de objetos Se usa new para asignar memoria
Representacin grafica
de un objeto en UML.
Declaracin de un objeto
en C#
EI | Ing. Joffre Cartuche C
Programacin
Visual
P
r
o
g
r
a
m
a
c
i

n
V
i
s
u
a
l

I
I
122
El uso de objetos puede realizarse atravez de las llamadas a metodos
Un objeto es algo tangible o visible, algo que puede ser entendido intelectualmente, algo sobre lo
que puede ser dirigido un pensamiento o una accin.
Objeto Representado.- Es una entidad del mundo real, que posee determinados atributos e
identidad propia, diferencindose de los dems objetos.
Objeto Representante.- Es un agregado de datos y operaciones que manipulan esos datos.
Un objeto representa un tem, una unidad o una entidad individual e identificable, sea real o
abstracta, con un papel bien definido en el dominio del problema.
2.3.1 Estructura de un Objeto
Un objeto puede considerarse como una especie de cpsula dividida en tres partes:
Relaciones
Propiedades
Mtodos
Cada uno de estos componentes desempea un papel totalmente independiente:
Las relaciones entre objetos son, precisamente, los enlaces que permiten a un objeto relacionarse
con aquellos que forman parte de la misma organizacin.
Las propiedades distinguen un objeto determinado de los restantes que forman parte de la misma
organizacin y tiene valores que dependen de la propiedad de que se trate. Las propiedades de un
objeto pueden ser heredadas a sus descendientes en la organizacin.
Los mtodos son las operaciones que pueden realizarse sobre el objeto, que normalmente estarn
incorporados en forma de programas (cdigo) que el objeto es capaz de ejecutar y que tambin
pone a disposicin de sus descendientes a travs de la herencia.
2.3.2 Visibilidad de una clase
Public: la clase o miembro es visible en todos los mbitos, no solo en el que se ha definido. Las clases
publicas, por ejemplo pueden usarse desde mbitos con nombre extrernos al propio, los miembros
pblicos de una clase son accesibles, al crear un objeto, desde fuera de la propia clase.
Protected: este modificador solo es aplicable a los miembros de una clase, no a la clase en si, la
visibilidad esta reducida la propia clase y las que pudieran derivarse de ella es decir, un miembro
protegido no es accesible externamente
Private: es el mbito mas reducido una clase privada solo puede utilizarse en el interior del mbito
en que se encuentra incluida, ya sea un namespace u otra clase. Los miembros que tienen este
EI | Ing. Joffre Cartuche C
Programacin
Visual
P
r
o
g
r
a
m
a
c
i

n
V
i
s
u
a
l

I
I
123
modificador igualmente solo pueden ser usados desde el interior de la clase donde se han definido
nunca desde fuera ni siquiera en clase derivada
Internal: es similar a la public, si bien la clase o el miembro es visible desde afuera de su mbito
inmediato esta regla solamente se aplica dentro del ensamblado al que pertenece. Una clase public
puede usarse desde otros ensambladores mientras que un ensamblador no.
Protected internal: el resultado es que los identificadores pueden utilizarse en el ensamblador en
que se ha definido as como en clases derivadas a pesar de que se encuentren en otros
ensambladores.
2.3.3 Creacin y destruccin de Objetos.
Para la inicializacin de los objetos se utiliza los constructores, estos constructores pueden estar
sobrecargados cuando tienen mismo mbito, mismo nombre, distintos parmetros.
Por definicin, los constructores son pblicos, ya que son ejecutados al instanciar la clase,
sin importar si sus otros elementos son pblicos o privados. Por ello, siempre se indica
public.
Valor de retorno no se declara. No son void, ni ningn otro tipo de dato, ya que por
definicin conceptual del constructor, slo devuelve una instancia creada del objeto o clase
que representa.
El nombre del constructor es siempre el nombre de la clase respectiva.
Puede recibir los parmetros que se estimen convenientes en cada caso. Es incluso factible
definir ms de un constructor para una misma clase, cambiando slo los parmetros
recibidos. Esto cae en la categora de sobrecarga de mtodos, en este caso sobrecarga de
constructores.
Como cuerpo del constructor, se puede incluir cualquier tipo de instruccin vlida en
cualquier mtodo miembro de la clase. Slo es importante recordar que estas instrucciones,
por definicin conceptual, estn destinadas a la inicializacin de los elementos de la clase.
Sintaxis del constructor
2.3.4 Destructores de un Objeto.
Destruccin de objetos se usa para que
Se vuelve a convertir el objeto en memoria
Se libera la memoria
class Auto
{
public string Marca;
public string Modelo;
public string Color;
public Auto()
{
}
}
//Se usa un constructor para inicializar un objeto
en esa memoria
EI | Ing. Joffre Cartuche C
Programacin
Visual
P
r
o
g
r
a
m
a
c
i

n
V
i
s
u
a
l

I
I
124
2.4 Encapsulamiento y Ocultacin.
Ya hemos visto que la herencia y el polimorfismo eran dos de los pilares fundamentales en los que es
apoya la programacin orientada a objetos. Pues bien, el tercero y ltimo es la encapsulacin, que
es un mecanismo que permite a los diseadores de tipos de datos determinar qu miembros de los
tipos creen pueden ser utilizados por otros programadores y cules no. Las principales ventajas que
ello aporta son:
Se facilita a los programadores que vaya a usar el tipo de dato (programadores clientes) el
aprendizaje de cmo trabajar con l, pues se le pueden ocultar todos los detalles relativos a
su implementacin interna y slo dejarle visibles aquellos que puedan usar con seguridad.
Adems, as se les evita que cometan errores por manipular inadecuadamente miembros
que no deberan tocar.
Se facilita al creador del tipo la posterior modificacin del mismo, pues si los programadores
clientes no pueden acceder a los miembros no visibles, sus aplicaciones no se vern
afectadas si stos cambian o se eliminan. Gracias a esto es posible crear inicialmente tipos
de datos con un diseo sencillo aunque poco eficiente, y si posteriormente es necesario
modificarlos para aumentar su eficiencia, ello puede hacerse sin afectar al cdigo escrito en
base a la no mejorada de tipo.
La encapsulacin se consigue aadiendo modificadores de acceso en las definiciones de miembros y
tipos de datos. Estos modificadores son partculas que se les colocan delante para indicar desde qu
cdigos puede accederse a ellos, entendindose por acceder el hecho de usar su nombre para
cualquier cosa que no sea definirlo, como llamarlo si es una funcin, leer o escribir su valor si es un
campo, crear objetos o heredar de l si es una clase, etc.
class Auto
{
public string Marca;
public string Modelo;
public string Color;
public Auto()
{
}
~public Auto()
{
}
}
//Se usa un destructores para liberar un objeto en
esa memoria
EI | Ing. Joffre Cartuche C
Programacin
Visual
P
r
o
g
r
a
m
a
c
i

n
V
i
s
u
a
l

I
I
125
Cada objeto es una estructura compleja en cuyo interior hay datos y programas, todos ellos
relacionados entre s, como si estuvieran encerrados conjuntamente en una cpsula. Esta propiedad
(encapsulamiento), es una de las caractersticas fundamentales en la OO.
Los objetos son inaccesibles, e impiden que otros objetos, los usuarios, o incluso los programadores
conozcan cmo est distribuida la informacin o qu informacin hay disponible. Esta propiedad de
los objetos se denomina ocultacin de la informacin.
Esto no quiere decir, sin embargo, que sea imposible conocer lo necesario respecto a un objeto y a lo
que contiene. Si as fuera no se podra hacer gran cosa con l. Lo que sucede es que las peticiones de
informacin a un objeto, deben realizarse a travs de mensajes dirigidos a l, con la orden de realizar
la operacin pertinente. La respuesta a estas ordenes ser la informacin requerida, siempre que el
objeto considere que quien enva el mensaje est autorizado para obtenerla.
Los niveles de encapsulamiento son los siguientes:
(-)Privado.- este nivel es el ms fuerte, los atributos y mtodos de una clase definidos con este nivel
de ocultacin son totalmente invisibles frente a otras clases.
(#)Protegidos.- los atributos y operaciones estn visibles para las clases derivadas (clases hijas).
(+)Pblicos.- los atributos y operaciones son visibles por otras clases u objetos.
REPRESENTACIN GRFICA DEL ENCAPSULAMIENTO Y OCULTACIN
2.4.1 Propiedades Get y Set.
Tomando en cuenta la caracterstica privada de casi todos los atributos que se definen para una clase
las buenas prcticas de programacin fomentan declarar como private todos los atributos de las
clases se hace necesario ofrecer cierta visibilidad controlada sobre los valores de estos atributos.
Esta visibilidad se describe como la obtencin del valor de cada uno de los atributos, como la
eventual facultad de modificar dicho valor. Reiterando, si los atributos son privados, ninguna de
stas dos funcionalidades est disponible desde otras clases.
Una manera clsica en la programacin orientada a objeto de resolver esta visibilidad, an
manteniendo el control sobre lo que se puede ver o modificar de un atributo, se utilizan mtodos
que definen una u otra de estas funcionalidades.
Tal sera el caso en el siguiente ejemplo.
EI | Ing. Joffre Cartuche C
Programacin
Visual
P
r
o
g
r
a
m
a
c
i

n
V
i
s
u
a
l

I
I
126
class Persona {
private int edad;
public int getEdad()
{
Return edad;
}
public void setEdad(int e)
{
if(e>0) edad = e; }
}
En esta clase Persona se distingue el nico atributo privado edad, que evidentemente no es visible
fuera de la clase. Por otro lado, dos mtodos ofrecen la visibilidad sobre dicho atributo,
denominados getEdad() y setEdad(). El primero de ellos es un ejemplo muy simple de un mtodo que
al ser declarado pblico es visible fuera de la clase, y como esencial funcionamiento, retorna el valor
del atributo cuando es invocado. A su vez, el segundo de ellos modifica el valor del atributo privado,
siempre y cuando el nuevo valor cumpla cierta condicin (en este caso sea nmero mayor que cero).
La combinacin de las tres declaraciones permite establecer un atributo privado, pero accesible bajo
control por medio de sus mtodos.
Esta problemtica fue enfrentada por los diseadores del lenguaje C#, lo que ofrecieron una solucin
ms eficiente, siempre manteniendo el objetivo presente: dar visibilidad controlada sobre atributos
privados. Esta solucin se basa en la denominadas Propiedades, que si bien no tienen la misma
declaracin de un mtodo, semnticamente ofrecen lo mismo que los mtodos: ejecucin de
instrucciones relacionadas con los atributos.
Su declaracin se basa en tres aspectos: su declaracin (identificador), que no lleva parntesis, su
declaracin de funcionalidad de visibilidad (get) y la de modificacin (set).
En este caso, el mismo ejemplo anterior quedara.
class Persona
{
private int edad;
public Persona()
{
}
public int Edad
{
get{
return edad;
}
set
{
if(value>0)
edad = value;
}
}
~public Persona()
{
EI | Ing. Joffre Cartuche C
Programacin
Visual
P
r
o
g
r
a
m
a
c
i

n
V
i
s
u
a
l

I
I
127
}
}
Persona pepe= New Persona();
Pepe.Edad=25; // Pone la edad en el objeto persona travs del mtodo set
Int e= Pepe.Edad; //Coge el valor de edad atreves del mtodo get
En esta segunda versin del mismo ejemplo, utilizando la sintaxis de propiedades de C#, se identifica
la declaracin de dos elementos solamente: el atributo privado, y la propiedad pblica. Esta
declaracin tiene las siguientes caractersticas:
El identificador para la propiedad es distinto al del atributo, pero por convencin se
utiliza uno muy similar (por ejemplo diferenciando slo por la primera letra mayscula)
y no lleva parntesis como los mtodos.
Se puede declarar el bloque get o el set, slo uno de ellos o ambos. Es decir, al
declarar una propiedad slo con bloque get, implcitamente se est indicando que la
propiedad no acepta modificacin de valor por asignacin.
En el bloque set, la manera de identificar el valor que se quiere asignar al respectivo
atributo es por el uso de la palabra clave value, que en este contexto se toma como
el valor (sea cual sea su tipo de dato correspondiente) que se asigna a la propiedad y
por ende, al atributo.
4.5.2. Creacin de una clase Auto.
EI | Ing. Joffre Cartuche C
Programacin
Visual
P
r
o
g
r
a
m
a
c
i

n
V
i
s
u
a
l

I
I
128
Agregar una clase al proyecto ponerle el
nombre de Auto, luego realice la siguiente
codificacion.
using System;
EI | Ing. Joffre Cartuche C
Programacin
Visual
P
r
o
g
r
a
m
a
c
i

n
V
i
s
u
a
l

I
I
129
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace WinAppAuto
{
class Auto
{
protected double vel = 0;
public string Marca;
public string Modelo;
public string Color;
public string NumBastidor;
//constructor con parametros al momento de instanciar el
objeto necesariamente
//debera tener valores
public Auto(string marca, string modelo, string color,
string numbastidor)
{
this.Marca = marca;
this.Modelo = modelo;
this.Color = color;
this.NumBastidor = numbastidor;
}
//constructor sin parametro al momento de instanciar el
objeto no necesita
// tener valores
public Auto()
{
}
EI | Ing. Joffre Cartuche C
Programacin
Visual
P
r
o
g
r
a
m
a
c
i

n
V
i
s
u
a
l

I
I
130
public double Velocidad
{
get
{
return this.vel;
}
}
public void Acelerar(double cantidad)
{
// Aqu se le dice al motor que aumente las revoluciones
MessageBox.Show(cantidad.ToString()+ "Incrementando la
velocidad en km/h");
this.vel += cantidad;
}
public void Girar(double cantidad)
{
// Aqu ira el cdigo para girar
MessageBox.Show(cantidad.ToString()+ "Girando el auto
grados");
}
public void Frenar(double cantidad)
{
// Aqu se le dice a los frenos que acten, y...
if (vel >= 0)
{
this.vel -= cantidad;
MessageBox.Show(cantidad.ToString() + "Reduciendo la
velocidad en {0} km/h");
EI | Ing. Joffre Cartuche C
Programacin
Visual
P
r
o
g
r
a
m
a
c
i

n
V
i
s
u
a
l

I
I
131
}
else
MessageBox.Show("ya esta en cero la velocidad del
auto");
}
}
}
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace WinAppAuto
{
public partial class Form1 : Form
{
Auto MiAuto = new Auto();
EI | Ing. Joffre Cartuche C
Programacin
Visual
P
r
o
g
r
a
m
a
c
i

n
V
i
s
u
a
l

I
I
132
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
try
{
MiAuto.Marca=textBox1.Text;
MiAuto.Modelo=textBox2.Text;
MiAuto.Color=textBox3.Text;
MiAuto.NumBastidor=textBox4.Text;
}catch(Exception mes)
{
MessageBox.Show(mes.Message);
}
}
private void button2_Click(object sender, EventArgs e)
{
MiAuto.Acelerar(20);
}
private void button3_Click(object sender, EventArgs e)
{
MiAuto.Frenar(10);
}
EI | Ing. Joffre Cartuche C
Programacin
Visual
P
r
o
g
r
a
m
a
c
i

n
V
i
s
u
a
l

I
I
133
}
}
2.5. Herencia y mtodos virtuales.
2.5.1. Concepto de Herencia.
Herencia es uno de los pilares fundamentales en los que se basa la programacin orientada a
objetos. Es un mecanismo que permite definir nuevas clases a partir de otras ya definidas de modo
que si en la definicin de una clase indicamos que sta deriva de otra, entonces la primera -a la que
se le suele llamar clase hija- ser tratada por el compilador automticamente como si su definicin
incluyese la definicin de la segunda a la que se le suele llamar clase padre o clase base. Las clases
que derivan de otras se definen usando la siguiente sintaxis:
class <nombreHija>:<nombrePadre>
{
<miembrosHija>
}
A los miembros definidos en <trabajador> se le aadirn los que hubisemos definido en la clase
padre. Por ejemplo, a partir de la clase Persona puede crearse una clase Trabajador as:
Los objetos de esta clase Trabajador contarn con los mismos miembros que los objetos Persona y
adems incorporarn un nuevo campo llamado Sueldo que almacenar el dinero que cada
trabajador gane. Ntese adems que a la hora de escribir el constructor de esta clase ha sido
necesario escribirlo con una sintaxis especial consistente en preceder la llave de apertura del cuerpo
del mtodo de una estructura de la forma:
: base(<parametrosBase>)
A esta estructura se le llama inicializador base y se utiliza para indicar cmo deseamos inicializar los
campos heredados de la clase padre. No es ms que una llamada al constructor de la misma con los
parmetros adecuados
class persona
{
private string Cedula;
private string Nombre;
private string Direccion;
EI | Ing. Joffre Cartuche C
Programacin
Visual
P
r
o
g
r
a
m
a
c
i

n
V
i
s
u
a
l

I
I
134
private long Telefono;
///// Creamos el constructor
public persona(string ced, string nom, string dir, long tel)
{
this.Cedula = ced;
this.Nombre = nom;
this.Direccion = dir;
this.Telefono = tel;
}
public string cedula
{
get
{
return this.Cedula;
}
set
{
this.Cedula = value;
}
}
public string nombre
{
get
{
return this.Nombre;
}
EI | Ing. Joffre Cartuche C
Programacin
Visual
P
r
o
g
r
a
m
a
c
i

n
V
i
s
u
a
l

I
I
135
set
{
this.Nombre = value;
}
}
public string direccion
{
get
{
return this.Direccion;
}
set
{
this.Direccion = value;
}
}
public long telefono
{
get
{
return this.Telefono;
}
set
{
this.Telefono = value;
}
EI | Ing. Joffre Cartuche C
Programacin
Visual
P
r
o
g
r
a
m
a
c
i

n
V
i
s
u
a
l

I
I
136
}
}
Creamos la clase trabajador que herede de persona.
class trabajador : persona
{
public int Sueldo;
public trabajador(string ced, string nom, string dir, long tel,int sul)
:base(ced,nom,dir,tel)
{
sueldo = sul;
}
}
private void button1_Click(object sender, EventArgs e)
{
trabajador t = new trabajador("07037441","joffre","pasaje",914259,400);
MessageBox.Show(t.sueldo.ToString());
}
Si al atributo sueldo de la clase trabajador en lugar de que sea pblica deseamos que sea privada
debemos realizar el siguiente procedimiento en la clase trabajador.
EI | Ing. Joffre Cartuche C
Programacin
Visual
P
r
o
g
r
a
m
a
c
i

n
V
i
s
u
a
l

I
I
137
public int sueldo
{
get
{
return this.Sueldo;
}
set
{
this.Sueldo = value;
}
}
2.5.2. Mtodos Virtuales.
Ya hemos visto que es posible definir tipos cuyos mtodos se hereden de definiciones de otros tipos.
Lo que ahora vamos a ver es que adems es posible cambiar dicha definicin en la clase hija, para lo
que habra que haber precedido con la palabra reservada virtual la definicin de dicho mtodo en la
clase padre. A este tipo de mtodos se les llama mtodos virtuales, y la sintaxis que se usa para
definirlos es la siguiente:
virtual <tipoDevuelto> <nombreMtodo>(<parmetros>)
{
<cdigo>
}
Si en alguna clase hija quisisemos dar una nueva definicin del <cdigo> del mtodo, simplemente
lo volveramos a definir en la misma pero sustituyendo en su definicin la palabra reservada virtual
por override. Es decir, usaramos esta sintaxis:
override <tipoDevuelto> <nombreMtodo>(<parmetros>)
{
<nuevoCdigo>
}
Ntese que esta posibilidad de cambiar el cdigo de un mtodo en su clase hija slo se da si en la
clase padre el mtodo fue definido como virtual. En caso contrario, el compilador considerar un
error intentar redefinirlo.
EI | Ing. Joffre Cartuche C
Programacin
Visual
P
r
o
g
r
a
m
a
c
i

n
V
i
s
u
a
l

I
I
138
El lenguaje C# impone la restriccin de que toda redefinicin de mtodo que queramos realizar
incorpore la partcula override para forzar a que el programador est seguro de que
verdaderamente lo que quiere hacer es cambiar el significado de un mtodo heredado. As se evita
que por accidente defina un mtodo del que ya exista una definicin en una clase padre. Adems, C#
no permite definir un mtodo como override y virtual a la vez, ya que ello tendra un significado
absurdo: estaramos dando una redefinicin de un mtodo que vamos a definir.
Por otro lado, cuando definamos un mtodo como override ha de cumplirse que en alguna clase
antecesora (su clase padre, su clase abuela, etc.) de la clase en la que se ha realizado la definicin del
mismo exista un mtodo virtual con el mismo nombre que el redefinido. Si no, el compilador
informar de error por intento de redefinicin de mtodo no existente o no virtual. As se evita que
por accidente un programador crea que est redefiniendo un mtodo del que no exista definicin
previa o que redefina un mtodo que el creador de la clase base no desee que se pueda redefinir.
Para aclarar mejor el concepto de mtodo virtual, vamos a mostrar un ejemplo en el que
cambiaremos la definicin del mtodo Cumpleaos() en los objetos Persona por una nueva versin
en la que se muestre un mensaje cada vez que se ejecute, y redefiniremos dicha nueva versin para
los objetos Trabajador de modo que el mensaje mostrado sea otro. El cdigo de este ejemplo es el
que se muestra a continuacin:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace POO
{
public partial class frm_cuenta : Form
{
public frm_cuenta()
{
InitializeComponent();
EI | Ing. Joffre Cartuche C
Programacin
Visual
P
r
o
g
r
a
m
a
c
i

n
V
i
s
u
a
l

I
I
139
}
// persona p = new persona("0703744193", "jcc", "quito", 123456);
class persona
{
private string Cedula;
private string Nombre;
private string Direccion;
private long Telefono;
private int Edad;
public persona(string ced, string nom, string dir, long tel,int ed)
{
this.Cedula = ced;
this.Nombre = nom;
this.Direccion = dir;
this.Telefono = tel;
this.Edad = ed;
}
public string cedula
{
get
{
return this.Cedula;
}
set
{
this.Cedula = value;
EI | Ing. Joffre Cartuche C
Programacin
Visual
P
r
o
g
r
a
m
a
c
i

n
V
i
s
u
a
l

I
I
140
}
}
public string nombre
{
get
{
return this.Nombre;
}
set
{
this.Nombre = value;
}
}
public string direccion
{
get
{
return this.Direccion;
}
set
{
this.Direccion = value;
}
}
public long telefono
EI | Ing. Joffre Cartuche C
Programacin
Visual
P
r
o
g
r
a
m
a
c
i

n
V
i
s
u
a
l

I
I
141
{
get
{
return this.Telefono;
}
set
{
this.Telefono = value;
}
}
public int edad
{
get
{
return this.Edad;
}
set
{
this.Edad = value;
}
}
/* Declaracion de un metodo virtual la misma funcion tendra la
La clase trabajador */
public virtual void cumpleanos()
{
EI | Ing. Joffre Cartuche C
Programacin
Visual
P
r
o
g
r
a
m
a
c
i

n
V
i
s
u
a
l

I
I
142
Edad ++;
}
}
class trabajador : persona
{
private int Sueldo;
public trabajador(string ced, string nom, string dir, long tel,int sul,int ed)
:base(ced,nom,dir,tel,ed)
{
sueldo = sul;
}
public int sueldo
{
get
{
return this.Sueldo;
}
set
{
this.Sueldo = value;
}
}
/* Declaracion de un metodo override la misma funcion tendra la
La clase personal */
public override void cumpleanos()
EI | Ing. Joffre Cartuche C
Programacin
Visual
P
r
o
g
r
a
m
a
c
i

n
V
i
s
u
a
l

I
I
143
{
edad++;
}
}
private void button1_Click(object sender, EventArgs e)
{
persona p = new persona("123456","luis","quito",946477,30);
p.cumpleanos();
MessageBox.Show(p.edad.ToString());
trabajador t = new trabajador("07037441","joffre","pasaje",914259,400,29);
MessageBox.Show(t.edad.ToString());
t.cumpleanos();
MessageBox.Show(t.edad.ToString());
}
}
}
2.6. Polimorfismo.
Una de las caractersticas fundamentales de la OO es el polimorfismo, que no es otra cosa que la
posibilidad de construir varios mtodos con el mismo nombre, pero con relacin a la clase a la que
pertenece cada uno, con comportamientos diferentes.
Esto conlleva la habilidad de enviar un mismo mensaje a objetos de clases diferentes. Estos objetos
recibiran el mismo mensaje global pero responderan a el de formas diferentes; por ejemplo, un
mensaje "+" a un objeto ENTERO significara suma, mientras que para un objeto STRING significara
concatenacin.
EI | Ing. Joffre Cartuche C
Programacin
Visual
P
r
o
g
r
a
m
a
c
i

n
V
i
s
u
a
l

I
I
144
2.7. Clases y mtodos sellados.
Una clase sellada es una clase que no puede tener clases hijas, y para definirla basta anteponer el
modificador sealed a la definicin de una clase normal. Por ejemplo:
sealed class ClaseSellada
{
}
sealed class persona
{
private string Cedula;
private string Nombre;
private string Direccion;
private long Telefono;
private int Edad;
}
Una utilidad de definir una clase como sellada es que permite que las llamadas a sus mtodos
virtuales heredados se realicen tan eficientemente como si fuesen no virtuales, pues al no poder
existir clases hijas que los redefinan no puede haber polimorfismo y no hay que determinar cul es la
versin correcta del mtodo a la que se ha de llamar. Ntese que se ha dicho mtodos virtuales
EI | Ing. Joffre Cartuche C
Programacin
Visual
P
r
o
g
r
a
m
a
c
i

n
V
i
s
u
a
l

I
I
145
heredados, pues lo que no se permite es definir miembros virtuales dentro de este tipo de clases, ya
que al no poderse heredarse de ellas es algo sin sentido en tanto que nunca podran redefinirse.
Ahora bien, hay que tener en cuenta que sellar reduce enormemente su capacidad de reutilizacin, y
eso es algo que el aumento de eficiencia obtenido en las llamadas a sus mtodos virtuales no suele
compensar. En realidad la principal causa de la inclusin de estas clases en C# es que permiten
asegurar que ciertas clases crticas nunca podrn tener clases hijas. Por ejemplo, para simplificar el
funcionamiento del CLR y los compiladores se ha optado porque todos los tipos de datos bsicos
excepto System.Object estn sellados, pues as las operaciones con ellos siempre se realizarn de la
misma forma al no influirles el polimorfismo.
2.8. LIST.
Es importante aclarar desde un principio la diferencia que existe entre programacin orientada a
objetos y un lenguaje orientado a objetos.
La programacin orientada a objetos es una filosofa, un modelo de programacin, con su teora y
su metodologa, que conviene conocer y estudiar antes de nada.
Un lenguaje orientado a objetos es un lenguaje de programacin que permite el diseo de
aplicaciones orientadas a objetos. Dicho esto, lo normal es que toda persona que vaya a desarrollar
aplicaciones orientadas a objetos aprenda primero la filosofa (o adquiera la forma de pensar) y
despus el lenguaje, porque filosofa slo hay una y lenguajes muchos. En esta unidad veremos
brevemente los conceptos bsicos de la programacin orientada a objetos desde un punto de vista
global, particularizando el lenguaje C# .Net.
EI | Ing. Joffre Cartuche C
Programacin
Visual
P
r
o
g
r
a
m
a
c
i

n
V
i
s
u
a
l

I
I
146
En el siguiente subtema analizamos brevemente la programacin orientada a objetos en C#
.NET, en el MODULO GUA, en la UNIDAD IV encontraras la informacin de dicho subtema.
EI | Ing. Joffre Cartuche C
Programacin
Visual
P
r
o
g
r
a
m
a
c
i

n
V
i
s
u
a
l

I
I
147
Basndote en la lectura que realizaste a este subtema responde:
PROGRAMACIN ORIENTADA A OBJETOS
Con sus propias palabras conceptualice la programacin orientada a objetos.

Describa cada uno de los siguientes conceptos de la programacin orientada a objetos.


CLASES.-

OBJETO.-

ENCAPSULAMIENTO.-
..

EI | Ing. Joffre Cartuche C


Programacin
Visual
P
r
o
g
r
a
m
a
c
i

n
V
i
s
u
a
l

I
I
148

HERENCIA.-..

POLIMORFISMO.-
..

Cul es la diferencia entre un objeto representado y objeto representante?

Por qu utilizamos un constructor y destructor en la declaracin de una clase?

Cundo debemos utilizar los mtodos virtuales?

Para que utilizamos la palabra sealed en la declaracin de una clase normal?


EI | Ing. Joffre Cartuche C
Programacin
Visual
P
r
o
g
r
a
m
a
c
i

n
V
i
s
u
a
l

I
I
149

Realice un ejemplo narrativo orientado a objetos con 3 entidades luego identifique los objetos,
mensajes entre ellos, eventos, acciones, propiedades y tributos.

LINQ TO OBJECTS
Dada la siguiente clase de una persona y la lista de personas, realice las siguientes consultas
utilizando el lenguaje integrado de consultas.
List<Personal> ListaPersona = new Personal();
// para el siguiente ejercicio asuma que la lista de personas
esta con datos ingresados.
EI | Ing. Joffre Cartuche C
Programacin
Visual
P
r
o
g
r
a
m
a
c
i

n
V
i
s
u
a
l

I
I
150
Cundo debemos utilizar los mtodos virtuales?

EI | Ing. Joffre Cartuche C


Programacin
Visual
P
r
o
g
r
a
m
a
c
i

n
V
i
s
u
a
l

I
I
151
AUTO EVALUACIN
EJERCICIOS:
Desarrolla la solucin a los siguientes problemas creando en un solo proyecto utilizando la tcnica de
programacin orientado a objetos.
1. Seleccione la respuesta correcta de los siguientes literales respecto a los constructores.
EI | Ing. Joffre Cartuche C
Programacin
Visual
P
r
o
g
r
a
m
a
c
i

n
V
i
s
u
a
l

I
I
152
a. Los constructores son pblicos, ya que son ejecutados al instanciar la clase, sin importar si
sus otros elementos son pblicos o privados.
b. Los constructores son un tipo particular de mtodos pertenecientes a una clase que son
nicamente invocado al instanciar una clase para inicializar la instancia en particular.
c. Todas las anteriores.
d. Ninguna de las anteriores.
2. Escriba verdadero ( V ) o falso ( F ) de los siguientes conceptos.
a. .. Los mtodos virtuales son polimorficos es decir deben ser declarados mtodos
virtuales estticos o mtodos virtuales privados.
b. .. Los mtodos virtuales pertenecen a una de las caractersticas fundamentales de la
P.O.O que es el polimorfismo y la herencia.
3 Qu es una clase explique y realice un ejemplo?.

4 Qu es un polimorfismo realice un ejemplo?

5. Complete la siguiente definicin con respecto a un Objeto.


EI | Ing. Joffre Cartuche C
Programacin
Visual
P
r
o
g
r
a
m
a
c
i

n
V
i
s
u
a
l

I
I
153
Un objeto puede considerarse como una especie de cpsula dividida en partes
Cuales son estas partes?:

6 Qu es la herencia explique y realice un ejemplo usando herencia compuesta?..

7 Seleccione la respuesta correcta de los siguientes literales acerca de lo Qu es un objeto?.


a. Es una clase que posee mtodos y atributos.
b. Algo sobre el cual puede ser dirigido un pensamiento o una accin
c. Es una plantilla en la que nos basamos para crear clases.
d. Todas las anteriores.
e. Ninguna de las anteriores.
8. Explique cules son los miembros de acceso a una clase y explique

9. Escriba verdadero ( V ) o falso ( F ) de los siguientes conceptos respecto a los mtodos set y get.
a. . Los mtodos get son procedimientos que permiten obtener valores de los atributos
privados o protegidos de una clase.
EI | Ing. Joffre Cartuche C
Programacin
Visual
P
r
o
g
r
a
m
a
c
i

n
V
i
s
u
a
l

I
I
154
AUTO EVALUACIN PRCTICA
b. .. Los mtodos set son funciones que permiten poner valores a los atributos privados o
protegidos de una clase..
10. Cules son las caractersticas de los objetos explique cada uno de ellos:

SIMULACIN DE UNA AGENCIA BANCARIA.


1. El presente ejercicio consiste en realizar la simulacin de un banco es decir se puede
realizar lo siguiente:
Realizar la aplicacin en una arquitectura tres capas.
Apertura de cuenta.
Depsitos / retiro de dinero.
Obtener el mayor cliente (Quien tiene mayor saldo entre ctas ahorro / corriente).
Pago de inters a los clientes.
2. Se deber usar la clase persona realizada anteriormente y luego crear la clase cuenta
heredando la clase persona el atributo Numero no deber ingresar el usuario deber el
sistema crear automticamente luego crear los siguientes mtodos, si estos mtodos
necesitan parmetros selos.
class cuenta:persona
{
protected int Numero;///Num cuenta debera crearse automaticamente
private double Saldo; /// Saldo de la cuenta bancaria
private string Tipo; /// Tipo de cuenta corriente / ahorros
}
3. Cree un formulario MDI con las siguientes opciones.
EI | Ing. Joffre Cartuche C
Programacin
Visual
P
r
o
g
r
a
m
a
c
i

n
V
i
s
u
a
l

I
I
155
4. Realice las siguientes opciones:
4.1 Apertura Cuenta
Cuando realice la apertura de cuenta deber aparecer el siguiente formulario
Permitir el ingreso de un nuevo cliente, si el cliente desea abrir una cuenta corriente
deber abrir con un monto mayor o igual 800 dlares, caso contrario no podr realizar
la apertura de cuenta corriente, para cuenta de ahorro el monto mnimo es de 200
dlares.
4.2 Dep / Ret (Depositos o Retiros)
El cliente podr realizar depsitos (para este ejercicio solo se considera dinero en
efectivo), para empezar el deposito se deber ingresar el numero de cuenta para
comprobar que el cliente exista en la lista de arrays(en vector objetos AC). Si el cliente
existe deber mostrarse los datos respectivos del groupBox Nombre( Num Cuenta,
Nombres, Tipo Cuenta, Saldo ojo: estos datos no se podrn modificar), caso contrario
deber mostrarse un mensaje que el cliente no existe.
EI | Ing. Joffre Cartuche C
Programacin
Visual
P
r
o
g
r
a
m
a
c
i

n
V
i
s
u
a
l

I
I
156
Luego se elige el tipo de transaccin sea para depsito o para retiro y la cantidad
respectiva.
Si es retiro en cta ahorros debe comprobarse que la cantidad a retirarse no deba ser
mayor al saldo disponible.
Si es retiro en cta cte debe comprobarse que la cantidad a retirarse no deba ser mayor
al saldo disponible y que el saldo no sea menor a 200 dlares.
Al presionar el botn realizar transaccin esta deber realizarse, mostrando un
mensaje con el nuevo saldo, y que la transaccin a sido realizada satisfactoriamente.
El botn salir cierre el formulario de depsitos. Para cada transaccin realizar la
respectiva imprimir.
4.3 Mejor Cliente.
Debern aparecer los clientes con mayor saldo en la cuenta bancaria tanto para cuenta
de ahorros y corriente.
4.4 Pago Inters
EI | Ing. Joffre Cartuche C
Programacin
Visual
P
r
o
g
r
a
m
a
c
i

n
V
i
s
u
a
l

I
I
157
Para el pago de inters de los clientes se realizar de la siguiente forma:
Cuentas de ahorros que tenga como saldo mnimo de 200 dlares se le pagara un inters del
0.05 % es decir si tena 200 dlares de saldo, ahora tendr 210 dlares de saldo, los clientes
que no tengan el saldo con esta mnima cantidad no se les pagaran inters.
Cuentas corrientes que tenga como saldo mnimo de 800 dlares se le pagara un inters del
0.09 % es decir si tenia 800 dlares de saldo, ahora tendr 872 dlares de saldo, los clientes
que no tengan el saldo con esta mnima cantidad no se les pagaran inters.
Luego deber mostrar todos los clientes que se les apagado inters en las respectivas
cuentas tanto para ahorros como de corriente.
Nota: puede adicionar nuevos atributo en la clase cuentas.
UNIDAD
DIDCTICA
3
PROGRAMACIN
CON ACCESO A
DATOS

S-ar putea să vă placă și