La explicación de AL es la forma normal cuando se tiene una jerarquia de clases, pero viendo este punto:
Cita:
Empezado por oscjae
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)
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)