11.05.2013 Views

La Cara Oculta de Delphi 6

La Cara Oculta de Delphi 6

La Cara Oculta de Delphi 6

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

36 <strong>La</strong> <strong>Cara</strong> <strong>Oculta</strong> <strong>de</strong> <strong>Delphi</strong> 6<br />

type<br />

// ¡¡¡Siguen faltando métodos importantes!!!<br />

TTostadora = class(TObject, IAparatoElectrico, IProducto)<br />

// …<br />

protected // Métodos <strong>de</strong>finidos por IProducto<br />

function PrecioProducto: Currency;<br />

function TiempoGarantia: Integer;<br />

function IProducto.Precio = PrecioProducto;<br />

function IProducto.Garantia = TiempoGarantia;<br />

// … etcétera …<br />

end;<br />

<strong>La</strong> clase TTostadora ya no <strong>de</strong>fine los métodos Precio y Garantia que necesitaba IProducto,<br />

pero sí <strong>de</strong>fine PrecioProducto y TiempoGarantia, con los prototipos a<strong>de</strong>cuados.<br />

Entonces le echamos una mano a la interfaz, para que sepa que PrecioProducto correspon<strong>de</strong><br />

a su método Precio, y TiempoGarantia a su Garantia.<br />

Usted podría preguntarse para qué complicarnos, aparentemente, la vida <strong>de</strong> esta<br />

forma: si sabíamos que TTostadora iba a implementar IProducto, <strong>de</strong>beríamos haber<br />

dado nombres correctos a los métodos <strong>de</strong>s<strong>de</strong> el primer momento. Pero es ahí don<strong>de</strong><br />

está el fallo <strong>de</strong> razonamiento. En la programación “real” es muy posible que un método<br />

<strong>de</strong> implementación <strong>de</strong> interfaces haya sido <strong>de</strong>finido tiempo atrás en una clase<br />

ancestro. En aquel momento recibió un nombre diferente, pero ahora reconocemos<br />

que es un buen candidato para asociarse a un método <strong>de</strong> cierta interfaz.<br />

De todos modos, el motivo más importante para contar con una cláusula <strong>de</strong> resolución<br />

<strong>de</strong> métodos es la posibilidad <strong>de</strong> que una clase implemente simultáneamente dos<br />

interfaces, y que existan métodos comunes a ambas con el mismo nombre. Veamos<br />

dos casos concretos, muy sencillos, pero que ilustran dos estrategias diferentes:<br />

1 Alguien ha <strong>de</strong>finido la interfaz IVela, no para las velas <strong>de</strong> los barcos, sino para las<br />

fuentes <strong>de</strong> luz utilizadas en las cenas románticas. <strong>La</strong> interfaz IVela <strong>de</strong>clara el<br />

método SetEncendido. Más tar<strong>de</strong>, algún genio taiwanés concibe la i<strong>de</strong>a kitsch <strong>de</strong> la<br />

clase TVelaElectrica, que <strong>de</strong>be implementar las interfaces IAparatoElectrico e IVela.<br />

Naturalmente, encen<strong>de</strong>r la vela correspon<strong>de</strong> al mismo acto físico que encen<strong>de</strong>r el<br />

aparato. Po<strong>de</strong>mos entonces crear un único método SetEncendido en TVelaElectrica;<br />

no necesitaremos entonces cláusula <strong>de</strong> resolución alguna. <strong>La</strong> “esencia” <strong>de</strong> la vela<br />

se ha fundido con la “esencia” <strong>de</strong>l aparato eléctrico, y por ese motivo comparten<br />

la implementación <strong>de</strong> varios <strong>de</strong> sus métodos.<br />

2 En el segundo caso, las “esencias” no se mezclan. Tomemos las interfaces IConductor<br />

e IPoliciaTrafico: ambas <strong>de</strong>finen una propiedad Multas; en realidad, <strong>de</strong>finen<br />

los dos métodos <strong>de</strong> acceso correspondiente, pero me referiré a la propiedad para<br />

simplificar. Paco es un objeto <strong>de</strong> la clase TPoliciaTrafico, que implementa las dos<br />

interfaces mencionadas, porque un policía <strong>de</strong> carreteras <strong>de</strong>be también conducir.<br />

<strong>La</strong>s multas <strong>de</strong> IConductor se refieren a las que sufre el propio policía cuando está<br />

fuera <strong>de</strong> servicio, mientras que las <strong>de</strong> IPoliciaTrafico hacen referencia a las que él<br />

inflige a los <strong>de</strong>más. Por lo tanto, los métodos <strong>de</strong> implementación <strong>de</strong>ben ser<br />

completamente in<strong>de</strong>pendientes. <strong>La</strong> clase podría <strong>de</strong>finir, por ejemplo, GetMultas-

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!