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 '%;
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( ;
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;
/ / / / 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