Observación de ingeniería de software 10.1 El polimorfismo nos permite tratar con las generalidades y dejar que el entorno en tiempo de ejecución se encargue de los detalles específicos. Podemos ordenar a los objetos que se comporten en formas apropiadas para ellos, sin necesidad de conocer sus tipos específicos, siempre y cuando éstos pertenezcan a la misma jerarquía de herencia. Observación de ingeniería de software 10.2 El polimorfismo promueve la extensibilidad, ya que el software que invoca el comportamiento polimórfico es independiente de los tipos de los objetos a los cuales se envían los mensajes. Es posible incorporar en un sistema nuevos tipos de objetos que puedan responder a las llamadas de los métodos existentes, sin necesidad de modificar el sistema base. Sólo el código cliente que crea instancias de los nuevos objetos debe modificarse para dar cabida a los nuevos tipos. Tip para prevenir errores 10.1 Hemos dicho que no debe llamar a los métodos de instancia de una clase desde sus constructores (puede llamar a los métodos static de la clase y hacer la llamada requerida a uno de los constructores de la superclase). Si sigue este consejo, evitará el problema de llamar a los métodos sobrescritos de la clase, ya sea de manera directa o indirecta, lo cual puede provocar errores en tiempo de ejecución. 10.8 Una explicación más detallada de los problemas con las llamadas a métodos desde los constructores No llame desde los constructores a los métodos que puedan sobrescribirse. Al crear un objeto de una subclase, esto podría provocar que se llamara un método sobrescrito antes de que se inicializara por completo el objeto de la subclase. Recuerde que al construir el objeto de una subclase, su constructor llama primero a uno de los constructores de la superclase directa. Si el constructor de la superclase llama a un método que pueda sobrescribirse, el constructor de la superclase llamará a la versión de la subclase de ese método, antes de que el cuerpo del constructor de la subclase tenga la oportunidad de ejecutarse. Esto podría provocar errores sutiles y difíciles de detectar si el método de la subclase que se llamó depende de una inicialización que aún no se haya realizado en el cuerpo del constructor de la subclase. Es aceptable llamar a un método static desde un constructor. Por ejemplo, un constructor y un método establecer realizan a menudo la misma validación para una variable de instancia específica. Si el código de validación es breve, es aceptable duplicarlo en el constructor y el método establecer. Si se requiere una validación más extensa, defina un método de validación static (por lo general un método ayudante private) y luego llámelo desde el constructor y el método establecer. También es aceptable que un constructor llame a un método de instancia final, siempre y cuando el método no llame de manera directa o indirecta un método de instancia que pueda sobrescribirse. 1 de 1