Ir al contenido principal

Principios de Herencia

Como todos sabemos (supongo :D) Java es un lenguaje de programación orientado a objetos, lo que hace de la herencia el santo grial del desarrollo en java.

La herencia en su definición mas simple aqui nos referiremos a la creada con el modificador (super) se resume en dos palabras (es un "is-a")  sonde el (es "is") es la clase Hija o la que Hereda  y  la  (un "a") es la clase padre o la que es heredada. Lo que permite decir por ejemplo que si de Animal hereda Mamífero entonces un Mamífero es un Animal, lo que a su vez crea una relación interesante entre clases que permite afirmar cosas como estas; si un SerHumano es un Mamífero y un Mamífero es un Animal entonces un SerHumano es un Animal lo que transforma al lector en un completo animal (por definición de herencia).

Ahora algo hiper-mega-super importante y que no debes olvidar si algún día quieres llegar a certificarte en JAVA y es lo siguiente como puedes ver en las afirmaciones de (es-un) vistas de abajo (clase-hija)hacia arriba (clase-padre) siempre se pueden afirmar como verdaderas, es decir en un Animal puede guardar cualquier cosa que herede de animal o de sus sub-clases(clases que heredan de animal en este caso Mamifero) así que cualquiera de estas asignaciones es cierta;
(el operador de asignación es = es decir A=4 asigna el valor de cuatro a A)

Animal= Animal;
Animal = Mamifero;
Animal = SerHumano;
Mamifero=Mamifero;
Mamifero = SerHumano;
SerHumano=SerHumano;

Piénsalo así de abajo hacia arriba cualquier objeto cabe en su objeto padre.

Ahora lo crucial; ningún Objeto padre cabe en su Objeto hijo.
- ¿y como por qué?
dirán algunos.
- pues por qué si y se calla
responderán otros, pero este no es el caso aquí si decimos el porque. Primero que todo para evitar problemas como (herencia de diamante) java permite a una clase heredar solo de una clase (aquí no tenemos en cuenta las interfaces que ya veremos como son) pero si permite abiertamente que una clase sea heredada por múltiples clases es decir que (ojo que estoy hablando de herencia directa el tipo de relación entre Animal y Mamífero  o entre Mamifero y SerHumano ) por ejemplo de animal hereda Mamífero, pero también Hereda Ovíparo  y a su vez de Oviparo hereda Pato. Lo que convierte esto en un enredo enfermizo de herencia sin control que puede confundir pero lo mas simple es pensar en la regla "de abajo hacia arriba cualquier objeto cabe en su objeto padre." (esta regla no es oficial ni es reconocida por organización alguna solo se me ocurrió en un día de iluminación después de haber rodado de cabeza por las escaleras ) dicho esto las siguientes asignaciones NO SON POSIBLES:

Mamifero= Oviparo; NOOOOOOOOOOOOOOOOO!!!!!!!
Mamifero=Pato;NOOOOOOOOOOOOOOOOOOO!!!!!
Oviparo=SerHumano;NOOOOOOOOOOOOOOOOOOOO!!!!!!
Oviparo=Mamifero; NOOOOOOOOOOOOOOOOOOOOO!!!!!!

Ahora lo mas complejo las asignaciones no se puede hacer de arriba hacia abajo es decir (ningún Objeto padre cabe en su Objeto hijo) si recuerdas de las asignaciones correctas hachas mas arriba era correcto decir esto:


Animal = SerHumano; es decir que todo SerHumano es un animal (incluyendo)


ahora agregando las relaciones de herencia relacionadas con Ovíparo y Pato también podemos decir que

Animal = Pato; es decir que todo Pato es un animal.

Resumiendo en un Animal puedo esconder un SerHumano, Cualquier Mamifero, un Pato o cualquier Oviparo. por lo tanto no puedo decir bajo ninguna circunstancia que

Pato= Animal; es decir que un Animal (cualquier Animal) es un Pato (puede que si pero puede que no) porque ese animal puede ser un serHumano o un Mamifero o cualquier Ovíparo que no sea un Pato como un Avestruz.

tampoco puede decir

SerHumano= Animal; es decir que un Animal(cualquier animal) es un SerHumano (puede que si pero puede que no) porque ese animal puede ser un Pato un Ovíparo o cualquier Mamífero que no sea un SerHumano como una Vaca.

Dicho esto los principios de herencia ya han quedado incrustados en tu pequeño cerebro y estas listo para el siguiente paso que son los modificadores de acceso (Access control) que no son mas que las restricciones de la herencia y de uso de las clases es decir que puedo heredar y que puedo usar de cierta clase.

Comentarios

Entradas populares de este blog

Conectarse al LDAP (directorio activo) utilizando JAVA

Un LDAP es un sistema de autenticación estándar utilizado por muchas compañías para controlar el acceso a aplicaciones y recursos. Por lo general se espera que cualquier nueva aplicación haga uso del LDAP para realizar la autenticación y controlar los permisos en forma unificada, la seguridad es transversal a todos los procesos que realiza una organización. Una vez regado el cuento a lo que vinimos, como conectarse a un LDAP. Lo primero que debes saber es que no se requieren librerías adicionales, JAVA en su distribución estandar ya cuenta con todo lo que necesitas. primero tres siglas que tienes que tener en cuanta. CN  = Common Name OU  = Organizational Unit DC  = Domain Component Para conectarse primero necesitas es instanciar un Objeto de la clase LdapContext, este se encargara de manejar la conexión al LDAP y las peticiones que se hagan al mismo. por consiguiente necesitara que le entregues una serie de propiedades de conexión. Esto lo haras con un Map de la siguiente

Clases anónimas JAVA (Anonymous Classes)

Código fuente articulo: https://www.dropbox.com/s/pzw44ot0ji2metl/Lambda.zip?dl=0 Las Clases anónimas en JAVA son una solución rápida para implementar una clase que se va utilizar una vez y de forma inmediata. Por ejemplo el  EventHandler  para un botón se puede implementar en la misma asignación valiendonos de la interfaz  EventHandler  que ya esta definida. Pero mejor vamos con un ejemplo mas simple. De la definición anterior concluimos dos cosas la primera es que para crear una clase anónima es necesario haber definido una interfaz, una clase o una clase abstracta. La clase anónima lo que hará sera implementar la interfaz definida o sobre escribir los métodos definidos. Para ilustrar esto utilizaremos el ejemplo del JAVA Tutorial https://docs.oracle.com/javase/tutorial/java/javaOO/anonymousclasses.html . en este ejemplo tenemos que implementar clases que cumpliendo con la interfaz Saludo sean capaces de saludar en diferentes idiomas. El paso uno sera definir la int

Paralelismo en JAVA Executors (ExecutorService, Callables y Futures).

Código fuente articulo: https://www.dropbox.com/s/jci67120hmd0uce/Paralelismo.zip?dl=0 Para manejo de concurrencia Java desde la versión 5 presento el Concurrency API  este presento una mejora substancial en el manejo de hilos y procesos en paralelo, antes solo contabas con Thread y Runnable. lo que te obligaba a controlar la creación y el numero de hilos de ejecución, no te entregaba un resultado del procesamiento y no te dejaba controlar las Excepciones que lanzara un hilo...un hilo se lanzaba y amenos que le enviaras un un CallBack perdías todo contacto con el. Para solucionar este problema se crearon dos tipos de objetos Callables y Futures. estos dos te permiten encapsular una tarea asignándole un tipo de Objeto que sera el valor de retorno y hacer seguimiento a las tareas que ejecuto en paralelo pudiendo preguntar si ya termino, que resultado lanzo y que excepciones ocurrieron. Arranquemos con la implementación de Callable, Callable es una interfaz que te permite defini