458
Capítulo 10 Programación orientada a objetos: polimorfi smo
métodos sobrescritos para llevar a cabo el comportamiento polimórfi co. Presentamos la noción de las clases abs-
tractas, las cuales permiten a los programadores proporcionar una superclase apropiada, a partir de la cual otras
clases pueden heredar. Aprendió que una clase abstracta puede declarar métodos abstractos que cada una de sus
subclases debe implementar para convertirse en clase concreta, y que un programa puede utilizar variables de una
clase abstracta para invocar implementaciones en las subclases de los métodos abstractos en forma polimórfi ca.
También aprendió a determinar el tipo de un objeto en tiempo de ejecución. Por último, hablamos también sobre
la declaración e implementación de una interfaz, como otra manera de obtener el comportamiento polimórfi co.
Ahora deberá estar familiarizado con las clases, los objetos, el encapsulamiento, la herencia, las interfaces
y el polimorfi smo: los aspectos más esenciales de la programación orientada a objetos. En el siguiente capítulo
analizaremos con más detalle las interfaces gráfi cas de usuario (GUIs).
Resumen
Sección 10.1 Introducción
• El
polimorfi smo nos permite escribir programas para procesar objetos que compartan la misma superclase en una
jerarquía de clases, como si todos fueran objetos de la superclase; esto puede simplifi car la programación.
• Con el polimorfi smo, podemos diseñar e implementar sistemas que puedan extenderse con facilidad; pueden agre-
garse nuevas clases con sólo modifi car un poco (o nada) las porciones generales del programa, siempre y cuando las
nuevas clases sean parte de la jerarquía de herencia que el programa procesa en forma genérica. Las únicas partes de
un programa que deben alterarse para dar cabida a las nuevas clases son las que requieren un conocimiento directo
de las nuevas clases que el programador agregará a la jerarquía.
Sección 10.3 Demostración del comportamiento polimórfi co
•Cuando el compilador encuentra una llamada a un método que se realiza a través de una variable, determina si el
método puede llamarse verifi cando el tipo de clase de la variable. Si esa clase contiene la declaración del método
apropiada (o hereda una), se compila la llamada. En tiempo de ejecución, el tipo del objeto al cual se refi ere la varia-
ble es el que determina el método que se utilizará.
Sección 10.4 Clases y métodos abstractos
• En algunos casos es conveniente declarar clases para las cuales no tenemos la intención de crear instancias de objetos.
A dichas clases se les conoce como clases abstractas. Como se utilizan sólo como superclases en jerarquías de heren-
cia, nos referimos a ellas como superclases abstractas. Estas clases no pueden utilizarse para instanciar objetos, ya que
están incompletas.
• El propósito principal de una clase abstracta es proporcionar una superclase apropiada, a partir de la cual puedan
heredar otras clases y, por ende, compartir un diseño común.
• Las clases que pueden utilizarse para instanciar objetos se llaman clases concretas. Dichas clases proporcionan imple-
mentaciones de cadamétodo que declaran (algunas de las implementaciones pueden heredarse).
• No todas las jerarquías de herencia contienen clases abstractas. Sin embargo, a menudo los programadores escriben
código cliente que utiliza sólo tipos de superclases abstractas para reducir las dependencias del código cliente en un
rango de tipos de subclases específi cas.
• Algunas veces las clases abstractas constituyen varios niveles de la jerarquía.
• Para hacer una clase abstracta, ésta se declara con la palabra clave abstract. Por lo general, una clase abstracta contiene
uno o más métodos abstractos.
• Los métodos abstractos no proporcionan implementaciones.
• Una clase que contiene métodos abstractos debe declararse como clase abstracta, aun si esa clase contiene métodos
concretos (no abstractos). Cada subclase concreta de una superclase abstracta también debe proporcionar imple-
mentaciones concretas de los métodos abstractos de la superclase.
• Los constructores y los métodos
static
no pueden declararse como
abstract
.
• Aunque no podemos instanciar objetos de superclases abstractas, sí
podemosusar superclases abstractas para declarar
variables que puedan guardar referencias a objetos de cualquier clase concreta que se derive de esas superclases abs-
tractas. Por lo general, los programas utilizan dichas variables para manipular los objetos de las subclases mediante
el polimorfi smo.
• En especial, el polimorfi smo es efectivo para implementar los sistemas de software en capas.
10_MAQ_CAP_10.indd458
4/19/081:25:30AM