Sie sind auf Seite 1von 15

Profesor:

Ing. Juan Antonio Caedo Trasvia.


Materia:
POO.
Integrantes:
*Kevin Arnold Pulido Yeo.
*Jos Julin Arroo !uintero
Tra"a#o:
$nidad I% Poli&orfis&o.
'rado 'ru(o:
).*+,-.
Carrera:
Ing. .iste&as Co&(uta/ionales.
0e/1a:
2) de 3ovie&"re de )425.
Polimorfismo
6.2 ,efini/i7n888888888888888888888.8.Pg.2
6.) Clases A"stra/tas
,efini/i7n88888888..888888888888.. Pg.)
Mtodos A"stra/tos8888.888888888888 Pg.)
I&(le&enta/i7n de Clases A"stra/tas888888.... Pg.5
Modelado de Clases A"stra/tas8888888888.. Pg.6
6.5 Interfa/es
,efini/i7n888888888888888888.888 Pg.6
I&(le&enta/i7n de Interfa/es88888888.88.. Pg.9
:eren/ia de Interfa/es8888888888888...8 Pg.;
Interfa/es en C<......................................................... Pg.=
6.6 %aria"les Poli&7rfi/as >(lantillas?
,efini/i7n88888888888888888888... Pg.=
$so A(li/a/iones888888888888888... Pg.@AB
6.9 CeutiliDa/i7n del C7digo8..888888888 Pg.BA24A22A2)
Ei"liografFa..........................................................................Pg.2)
6.2 ,efini/i7n.
El polimorfismo es un concepto de la programacin orientada a objetos que nos
permite programar en forma general, en lugar de hacerlo en forma especfica.
En general nos sirve para programar objetos con caractersticas comunes y
que todos estos compartan la misma superclase en una jerarqua de clases,
como si todas fueran objetos de la superclase. Esto nos simplifica la
programacin.
Recuerde el ejemplo del ecosistema, en donde todos los objetos de las
distintas especies heredaban de una superclase llamada Animal, que brindaba
la informacin general de cualquier animal, independiente de su especie. Sin
embargo, cada especie hace un uso particular de cada uno de los mtodos u
operaciones de la clase Animal. El mtodo comer!" no se ejecutar# de la misma
manera en un $en!" o en un %avo!". $o mismo ocurre para mtodos moverse!"
en objetos de tipo &iburn!" o 'allina!", aunque todas las especies realicen
estos mtodos. A la sobrescritura o implementacin especfica de mtodos es
la clave del polimorfismo.
%#g.(
6.) Clases a"stra/tas:
)efinicin.
* Son clases que no pueden ser instanciadas.
* Se utili+an solamente para heredar de ellas !,or+ar u obligar la herencia".
* Se antepone la palabra -abstract. a la clase.
Mtodos a"stra/tos.
$a clase abstracta se declara simplemente con el modificador a"stra/t en su
declaracin. $os mtodos abstractos se declaran tambin con el mismo
modificador, declarando el mtodo pero sin implementarlo !sin el bloque de
cdigo encerrado entre /0". $a clase derivada se declara e implementa de forma
normal, como cualquier otra. Sin embargo si no declara e implementa los
mtodos abstractos de la clase base el compilador genera un error indicando
que no se han implementado todos los mtodos abstractos y que, o bien, se
implementan, o bien se declara la clase abstracta.
%#g.1
I&(le&enta/i7n de Clases a"stra/tas
* $as clases abstractas pueden definir mtodos y propiedades abstractos, con
lo que su respectiva implementacin en la subclase es obligatoria. !$os
elementos abstractos )E2E3 ser sobreescritos en la subclase".
4 Se utili+a -abstract. para definir elementos abstractos !solo dentro de
clases abstractas".
4 $os elementos abstractos 35 proporcionan implementacin6 solo
declaraciones.
4 En la subclase, se utili+a -override. para reali+ar la implementacin
correspondiente.
%#g.7
Modelado de Clases A"stra/tas
8na clase abstracta se denota con el nombre de la clase y de los mtodos con
letra 9it#lica9. Esto indica que la clase definida no puede ser instanciada pues
posee mtodos abstractos !a:n no han sido definidos, es decir, sin
implementacin". $a :nica forma de utili+arla es definiendo subclases, que
implementan los mtodos abstractos definidos.
6.5 Interfa/es.
)efinicin;
* Son mecanismos para que puedan interactuar varios objetos no relacionados
entre s
* Son protocolos o -contratos. que obligan la herencia
* <ontienen las declaraciones de los mtodos, pero no su implementacin.
* Al igual que las clases abstractas, son plantillas de comportamiento que
deben ser implementados por otras clases.
%#g.=
I&(le&enta/i7n de interfa/es.
%#g.>
:eren/ia de interfa/es.
Interfa/es en C<
* ?<omparable
* ?Equatable
* ?nnumerable
La interfaz IComparable
* <ontiene la declaracin del mtodo <ompare&o!"
interface ?<omparable
/
int <ompare&o!object obj"6
0
* El mtodo <ompare&o!" devuelve un valor entero como resultado de la
comparacin

La interfaz IEquatable
* <ontiene la declaracin del mtodo Equals!"
interface ?Equatable@&A
/
bool Equals!& obj"6
0
%#g.B
* El mtodo Equals!" devuelve un valor booleano como resultado de la
comparacin
I&(le&enta/i7n de las interfa/es de C<.
6.6 %aria"les Poli&7rfi/as.
,efini/i7n.
8na variable polimrfica es aqulla que puede referenciar m#s de un tipo de
objeto.
%uede mantener valores de distintos tipos en distintos momentos de ejecucin
del programa.
En un lenguaje con sistema de tipos din#mico todas las variables son
potencialmente polimrficas.
%odemos indicar que no se pueden crear clases derivadas con
final;
final class <lase3o)erivable / C 0
El efecto es que las referencias de tipo <lase3o)erivable ya no son
polimrficas; slo pueden referenciar objetos de tipo <lase3o)erivable.
%#g.D
$so a(li/a/iones
Variables polimrficas simples
,igura1) img6 EE %untero a clase base polimrfica que en realidad apuntar# a
EE objetos de clases derivadas !<irculos, <uadrados,..."
Fariables receptoras; this y super
En un mtodo, hacen referencia al receptor del mensaje.
En cada clase representan un objeto de un tipo distinto.
Downcasting (polimorfismo inverso):
<onversin de una referencia a clase base a referencia a clase derivada.
?mplica GdeshacerH el ppio. de sustitucin.
&ipos
Est#tico !en tiempo de compilacin"
)in#mico !en tiempo de ejecucin"
Downcasting in!mico
Se comprueba en tiempo de ejecucin que la conversin es posible
Si no es posible se lan+a <lass<astEIception
class 2ase /
public void f!" /0
0
class )erivada eItends 2ase /
public void f!" /0
public void g!" /0
0
EE )oJncasting no seguro
2aseKL I M / neJ 2ase!", neJ )erivada!" 06
)erivada y M !)erivada"IK(L6 EE )oJncasting 5N
y M !)erivada"IKOL6 EE <lass<astEIception throJn
y.g!"6
Downcasting seguro " #$$I
R&&?; Run &ime &ype ?nformation
Pecanismo que proporciona informacin sobre tipos en tiempo de
ejecucin.
%ermite averiguar y utili+ar informacin acerca de los tipos de los
objetos mientras el programa se est# ejecutando.
En particular, podemos identificar subtipos a partir de referencias al
tipo base; doJncasting seguro.
%#g.Q
#$$I: La clase Class
Es una metaclase cuyas instancias representan clases
<ada clase tiene asociado un objeto <lass
class Pi<lase /0
Pi<lase c M neJ Pi<lase!"6
<lass clase M Pi<lase.class6 EE literal de clase
clase M c.get<lass!"6 EE idem
$iteral de clase; es el objeto <lass que representa a Pi<lase
#$$I: instanceof
?nstruccin que devuelve cierto si el objeto referenciado es del tipo indicado.
class Animal /0
class %erro eItends Animal /
public void ladrar!" /0
0
class %astor2elga eItends %erro /0
EE )oJncasting seguro
Animal a M neJ %astor2elga!"6
if !a instanceof %astor2elga" EE cierto
/ %astor2elga pb M !%astor2elga"a6 0
if !a instanceof %erro" EE cierto
/ %erro p M !%erro"a6 0
6.9 CeutiliDa/i7n del /7digo
Ejemplo en C# como prueba de concepto. En este ejemplo, el web service est
implementado como un web service deASP.NET 2. !".asm#$, pero considerad
la posibilidad de implementarlo como un web service %C& !%indows
Communication &oundation$, 'ue es la si(uiente (eneraci)n de web
services de .NET.

Supon(amos 'ue tenemos la si(uiente clase en nuestra biblioteca de l)(ica de
ne(ocio. Esta es la clase cu*o c)di(o nos (ustar+a reutili,ar en Silverli(-t, pero
dado 'ue -ace uso de System.Data no podemos recompilar el c)di(o sin
ms.

using System;
using System.Data;

namespace SilverlightTest.Web
{
public class BusinessLogic
{
public DataSet getCustomerData(int customerID
{
DataSet !ataSet " ne# DataSet(;
DataTable !ataTable " ne# DataTable(;
%#g.R
!ataTable.Columns.$!!(%Columna &%;
!ataTable.Columns.$!!(%Columna '%;

!ataTable.(o#s.$!!(ne# ob)ect*+ { %cel!a ,-
,%. %cel!a ,-&% /;
!ataTable.(o#s.$!!(ne# ob)ect*+ { %cel!a &-
,%. %cel!a &-&% /;
!ataTable.(o#s.$!!(ne# ob)ect*+ { %cel!a '-
,%. %cel!a '-&% /;
!ataTable.(o#s.$!!(ne# ob)ect*+ { %cel!a 0-
,%. %cel!a 0-&% /;

!ataSet.Tables.$!!(!ataTable;

return !ataSet;
/
/
/
Para solventar este problema, podemos crear un web service 'ue e#pon(a el
m.todo getCustomerData. En este caso, para -acerlo compatible con
Silverli(-t, convertiremos el objeto DataSet en uno o
varios arrays bidimensionales !uno por cada DataTable del DataSet$ antes de
enviar la respuesta al cliente Silverli(-t/

using System;
using System.Data;
using System.Web;
using System.Web.Services;
using SilverlightTest.Web;

*WebService+
public class SilverlightInter1ace 2
System.Web.Services.WebService
{

*Web3etho!+
public ob)ect*+*+ getCustomerData(int customerID
{
445tili6amos la l7gica !e la biblioteca !e clases !e
.89T !e escritorio
BusinessLogic businessLogic " ne# BusinessLogic(;
DataSet !ataSet "
businessLogic.getCustomerData(customerID;

int : " !ataSet.Tables*,+.(o#s.Count;
int y " !ataSet.Tables*,+.Columns.Count;

44Declaramos y !emensionamos el $rray
ob)ect*+*+ !ata$rray " ne# ob)ect*:+*+;

%#g.(O
1or (int i " ,; i ; :; i<<
{
!ata$rray*i+ " ne# ob)ect*y+;
/

44(ellenamos el $rray con los !atos !el DataSet
1or (int i " ,; i ; :; i<<
{
1or (int ) " ,; ) ; y; )<<
{
!ata$rray*i+*)+ " !ataSet.Tables*,+.(o#s*i+*)+;
/
/

return !ata$rray;
/
/
Por 0ltimo, desde el cliente Silverli(-t consumimos el web service de la
si(uiente manera tras -aber incluido la re1erencia web !'ue -emos
llamado BusinessLogicWS$/
public partial class Silverlight=age 2 5serControl
{
public Silverlight=age(
{
Initiali6eComponent(;

44Creamos el ob)eto pro:y para interactuar con el #eb
service
BusinessLogicWS.SilverlightInter1aceSoapClient #s=ro:y "
ne# BusinessLogicWS.SilverlightInter1aceSoapClient(
;

#s=ro:y.getCustomerDataComplete!
<" ne# 9vent>an!ler
;BusinessLogicWS.getCustomerDataComplete!9vent$r
gs?
(getCustomerDataComplete!>an!ler;

int CustomerID " &'0@;

44(eali6amos la llama!a asAncrona al #eb service
#s=ro:y.getCustomerData$sync(CustomerID;
/

voi! getCustomerDataComplete!>an!ler(ob)ect sen!er.
BusinessLogicWS.getCustomerDataComplete!9vent$rgs e
{
44Bbtenemos los !atos !e la respuesta !el #eb service
BbservableCollection;SilverlightTest.BusinessLogicWS.$rr
ayB1$nyType?
!ata " e.(esult;

%#g.((
44>acemos algo con esos !atos
1or (int i",; i;!ata.Count; i<<
{
1or (int ) " ,; ) ; !ata*i+.Count; )<<
{
Debug.WriteLine(!ata*i+*)+.ToString(;

/
/
/
/
2e esta 1orma, -emos construido una inter1a, entre la aplicaci)n Silverli(-t *
nuestra biblioteca de clases .NET, pudiendo reutili,ar el c)di(o de las
bibliotecas de clases .NET * solventando los problemas de incompatibilidades
entre tipos de datos
Ei"liografFas.
http://fjglez90.blogspot.mx/2012/06/unidad-4-polimorfismo.html
http://msdn.microsoft.com/es-es/librar/ms1!"1#2$%&%s.90'.aspx
http://(((.unirioja.es/cu/jearansa/0910/archi%os/)*+,-.ema04.pdf
http://blogs.msdn.com/b/daniem/archi%e/2010/04/1"/como-reutilizar-el-codigo-de-una-
biblioteca-de-clases-dotnet-desde-una-aplicacion-sil%erlight.aspx
%#g.(1

Das könnte Ihnen auch gefallen