Home » Flash » Currently Reading:

POO: Dependencia de clases y Polimorfismo

abril 8, 2009 Flash 3 Comments
POO: Dependencia de clases y Polimorfismo

La dependencia de clases es un concepto de la programación orientada a objetos que nos indica la relación existente entre dos clases. Como su nombre indica nos está diciendo que una clase depende de otra ara realizar su funcionamiento.

Cuando trabajamos con clases es una buena práctica que una clase realice una única función. De manera que las clases que deban realizar funciones complejas estarán formadas a partir de una asociación de diversas pequeñas clases en las que delegará cada funcionalidad en concreto.

Este sería un ejemplo simple de una relación de asociación y de delegación entre clases:

  1. package
  2. {
  3.     public class Foro
  4.     {
  5.         private var _moderador:Zguillez;
  6.  
  7.         public function Foro()
  8.         {
  9.             _moderador = new Zguillez();
  10.         }
  11.         public function moderar():void
  12.         {
  13.             _moderador.moderar();
  14.         }
  15.     }
  16. }

Aqui vemos como la clase “Foro” está delegando toda la funcionalidad del método “moderar” al objeto de clase “Zguillez”, haciendo de esta manera que toda la implementación esté en esa clase dejando la clase principal más limpia y ordenada. Esto nos permite una mayor reutilización de nuestras clases.

El problema que nos encontramos aquí es que se ha creado una relación de dependencia muy grande entre estas dos clases. La clase “Foro” tiene una referencia directa a la clase “Zguillez” y necesita estrictamente de esa clase para funcionar.

De manera que si tuviésemos (por requisitos de la aplicación o por reutilización del código) que cambiar la implementación de la función “moderar” tendríamos que reescribir la la clase “Zguillez” para cambiar su implementación concreta o resescribir la clase “Foro” para delegar esa función a la clase “Zah” (por ejemplo). Con lo que hace estas clases poco reutilizables…

Esta dependencia la podemos romper gracias al Polimorfismo de las clases. El polimorfismo es la propiedad que tienen las clases de ocultar la estructura interna en una jerarquía de clases, implementando de manera diferente un mismo método. El polimorfismo nos permite que una identificación se refiera a diferentes entidades.

En este caso haremos que “moderador” se pueda referir tanto a “Zguillez” como a “Zah”. Este polimorfismo lo podemos conseguir gracias a la =http://www.codigoactionscript.org/category/POOherencia de clases[/url] o a la implementación de una Interface.

Definiremos una Interface que contendrá las funciones que estamos delegando a la clase asociada. En este caso sería así:

  1. package
  2. {
  3.     public interface IModerador
  4.     {
  5.         function moderar():void;
  6.     }
  7. }

Ahora asociaremos el objeto a la Interface en lugar de a una clase en concreto:

  1. private var _moderador:IModerador;

Tendremos que hacer que tanto la clase “Zguillez” como la clase “Zah” implementen la Interface “IModerador”.

  1. public class Zguillez implements IModerador
  1. public class Zah implements IModerador

De manera que ahora podemos asociar cualquiera de las dos clases a la propiedad “moderador”.

  1. _moderador = new Zguillez();
  2. // o _moderador = new Zah();

Gracias al polimorfismo hemos ganado en dinamismo y reutilizabilidad, ya que podemos hacer que nuestra aplicación la “modere” Zguillez o Zah según nos interese.

Pero en este punto aun no nos hemos liberado de la dependencia de clases, ya que la clase que realiza la delegación está escrita en la implementación de la clase. Con lo que si quisiésemos cambiar la clase en la que delegamos tendríamos que rescribir la clase para colocar la otra.

Esto lo solucionamos con lo que se llama “Inyección de dependencias“, que consiste en insertar los objetos a la clase en lugar de que sea la clase la que cree el objeto.

Haremos que la clase “Foro” no genere directamente el objeto que realizará la delegación sino que ese objeto le venga inyectado.

  1. package
  2. {
  3.     public class Foro
  4.     {
  5.         private var _moderador:IModerador;
  6.  
  7.         public function Foro()
  8.         {
  9.         }
  10.         public function set moderador(m:IModerador):void
  11.         {
  12.             _moderador = m;
  13.         }
  14.         public function moderar():void
  15.         {
  16.             _moderador.moderar();
  17.         }
  18.     }
  19. }

Para inyectarle la dependencia utilizaremos el setter.

  1. var foro:Foro = new Foro();
  2. foro.moderador = new Zguillez();
  3. foro.moderar();

De esta manera hemos conseguido que la clase “Foro” sea totalmente independiente de las clases que vayan a realizar la delegación haciendo el sistema totalmente reutilizable sin tener que realizar cambios en las clases existentes.

Compártelo:

POO: Dependencia de clases y Polimorfismo
Visto 17.958 veces

Currently there are "3 comments" on this Article:

  1. Duilio dice:

    Saludos! Está bastante bien el tutorial, claro, como siempre imagino que hay que tener cuidado de utilizar el patrón cuando de verdad sea necesario y no duplicar innecesariamente las clases, para no crear “icebergs” en nuestros sistemas…

    Casualmente ayer encontré mencionado este patrón de DI en un artículo y luego lo vi en el framework para php flow3, ahora con esto me ha quedado ya más claro

    Thanx.

  2. Hola.
    de interes por la web me encontré con este articulo sobre POO: POLIMORFISMO Y HERENCIA.

    y es que considero cierto enigma a utilizar clases y a la hora de usar funciones me quedo en blanco,me complace utilizar flash, rindiendo homenaje a la elite de tan buenos desarrolladorez como lo son ustedes,gracias por la observacion del entorno de poo. bien por ti… busque tu firma y no la encontre. Saludos

Comment on this Article:








Twitter: zguillez

AdvertisementAdvertisementAdvertisementAdvertisement

Recibe las novedades por email

Post destacado

Cómo conectar una aplicación Flash con una base de datos a través de PHP

27 dic 2013

En este post mostraré como comunicar una aplicación Flash/AIR con una base de datos MySQL a través de un fichero PHP en el servidor. Para realizar acciones como, por ejemplo, enviar puntuaciones de juegos, visializar rankings o enviar registros. En la parte de Flash crearemos una clase de Actionscript 3 que realizará el envío de variables a través de las clases URLLoader y URLVariables. package org.codigoactionscript.data { import flash.net.URLRequestMethod; import flash.net.URLVariables; import flash.events.Event; import flash.events.EventDispatcher; import flash.net.URLLoader; import flash.net.URLRequest; //—————————————————— public class PHPVarsData extends EventDispatcher { public static var CARGADO:String = "DATA_CARGADA"; public static var ERROR:String = "DATA_ERROR"; protected var …



Map

Ranking

Codigoactionscript.org: 4.65 sobre 5 (106 valoraciones)

twitter-widget.com