Ver Mensaje Individual
  #9  
Antiguo 11-04-2015
Avatar de mamcx
mamcx mamcx is offline
Moderador
 
Registrado: sep 2004
Ubicación: Medellín - Colombia
Posts: 3.941
Reputación: 27
mamcx Tiene un aura espectacularmamcx Tiene un aura espectacularmamcx Tiene un aura espectacular
La explicación de AL es la forma normal cuando se tiene una jerarquia de clases, pero viendo este punto:

Cita:
Empezado por oscjae Ver Mensaje
de ese modo puedo hacer que en un aplicación ese procedimiento tenga un implementación diferente a otra aplicación.
Puede que te deje corto. El problema de la OO es que la herencia es "vertical" y no "horizontal". Osea, la OO es un "arbol" con un "raiz" y es facil compartir código al caminar rama y sub-ramas, de arriba a abajo, pero no al saltar de una rama a la siguiente (de lado a lado) sin obligar "subir" mas arriba hasta un ancestro comun a todas ellas... y aun así puede que eso no sea suficiente o posible.

Hay un principio de la OO que es muy util: Composición en vez de herencia. 9 de 10 veces, es MEJOR:

https://en.wikipedia.org/wiki/Compos...er_inheritance

http://stackoverflow.com/questions/4...er-inheritance

http://programmers.stackexchange.com...ance-come-from

Este comentario creo que explica de forma simple el punto:

Cita:
Inheritance is primarily a polymorphic tool, but some people, much to their later peril, attempt to use it as a way of reusing/sharing code
Composición permite compartir tanto "vertical" como "horizontal" e incluso, a travez de multiples arboles con diferentes "raices" o que saltan de árbol a árbol, aplicación a aplicación, e incluso, de lenguaje a lenguaje!

Un ejemplo puede ser:

Código Delphi [-]
type
    IPrivilegios = Interface(IInterface)
     // Retornar una lista de privilegios, con nombre= Acceso si/no
      function ListarPrivilegios(para:TForm):TDictionary<string, Boolean>;
    end;

De alli puede hacer 2 cosas:

1- Puedes implementar la interface en formularios, y NO IMPORTAN SI HEREDAN DEL MISMO BASE

o

2- Puedes usar una simple funcion, sin amarrar a formularios:

Porque pasas a la intefaces el formulario de forma explicita, en vez de de depender que estas dentro de la clases. Asi incluso se lo puedes aplicar a formularios externos a tu codigo.

3- E incluso, si en vez de forzar que privilegios tiene que ver con formularios, cambias el parametro "para" con una clase "Generics" u otra interface, puedes aplicarselo a cualquier objeto (ej: Obtener los privilegios para un usuario, un archivo, etc)
__________________
El malabarista.
Responder Con Cita