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