El documento explica las diferencias entre clases abstractas y concretas. Las clases abstractas definen comportamientos comunes pero no pueden crear objetos, mientras que las clases concretas heredan de las abstractas y proveen implementaciones específicas que permiten la creación de objetos. También describe el uso de métodos y clases abstractas y finales.
1. CLASES ABSTRACTAS Y CONCRETAS
En algunos casos es conveniente declarar clases para las cuales el programador nunca creará instancias de
objetos. Puesto que sólo se utilizan como superclases en jerarquías de herencia, estas son llamadas
superclases abstractas. Las clases abstractas están incompletas, las subclases deben declarar las “piezas
faltantes” para convertirse en clases “concretas”, a partir de las cuales se podrán instanciar objetos.
El propósito 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 superclases abstractas son demasiado
generales como para crear objetos reales; sólo especifican lo que tienen en común las subclases. Se necesita
ser más específicos para poder crear objetos.
Analice la siguiente jerarquía de clases de la figura 1:
Figura 1. Jerarquía de figuras (Deitel).
Todas las figuras tienen un área y perímetro, por lo cual dichos métodos deben ir en la clase abstracta Figura,
además si se quisiera dibujar la figura también se debería manejar desde la misma superclase. Ahora hágase
la siguiente pregunta, ¿si deseara o calcular el perímetro de una figura cual sería la implementación de dicho
método de la clase Figura?
Si se desea obtener el perímetro de la clase abstracta Figura, la clase sabe que las figuras deben poder
obtener el perímetro, pero no sabe a qué́ figura especifica se le debe calcular, por lo que no puede
implementar un verdadero método obtenerPerimetro. Las clases concretas proporcionan los detalles
específicos que hacen razonable la creación de instancias de objetos. No todas las jerarquías de herencia
contienen clases abstractas.
Las clases abstractas dan más facilidades a los programadores. Por ejemplo, un programador puede escribir
un método con un parámetro de un tipo de superclase abstracta. Cuando se llama, ese método puede recibir
un objeto de cualquier clase concreta que extienda en forma directa o indirecta a la superclase especificada
como el tipo del parámetro.
Algunas veces las clases abstractas constituyen varios niveles de una jerarquía, esto se puede evidenciar en
la Figura 1.
Lenguaje de
programación
Técnica profesional en desarrollo de software
Profesor: Andrés Herrera R. Mail: jherrera@eam.edu.co
Laboratorio
Abstract
Nombre:_________________________________________________________________________
2. 2
Declaración de clases y método abstractos
Para hacer una clase abstracta, está se declara con la palabra clave abstract. Por lo general, esta clase
contiene uno o más métodos abstractos, cada uno con la palabra clave abstract en su declaración, como en:
public abstract void obtenerArea(); // método abstracto
Los métodos abstractos no proporcionan implementaciones. Una clase que contiene uno o más métodos
abstractos debe declararse de manera explícita como abstract, aun si esa clase contiene métodos concretos
(no abstractos). Cada subclase concreta de una superclase abstracta también debe proporcionar
implementaciones concretas de cada uno de los métodos abstractos de la superclase. Los constructores y los
métodos static no pueden declararse como abstract.
A tomar en cuenta:
• Una clase abstracta declara los atributos y comportamientos comunes (tanto abstractos como concretos) de las
diversas clases en una jerarquía de clases.
• Tratar de instanciar un objeto de una clase abstracta lanza un error de compilación.
• Si no se implementan los métodos abstractos de una superclase en una subclase, se produce un error de compilación,
a menos que la subclase también se declare como abstract.
Métodos y clases final
Las variables pueden declararse como final para indicar que no pueden modificarse una vez que se inicializan;
dichas variables representan valores constantes. También es posible declarar métodos, parámetros de los
métodos y clases con el modificador final.
Un método final en una superclase no puede sobrescribirse en una subclase; esto garantiza que todas las
subclases directas e indirectas en la jerarquía utilicen la implementación del método final. Los métodos que se
declaran como private o como static son implícitamente final, ya que no se pueden sobrescribir. Las llamadas
a los métodos final se resuelven en tiempo de compilación; a esto se le conoce como vinculación estática.
Una clase que se declara como final no puede ser una superclase (es decir, una clase no puede extender a
una clase final). Todos los métodos en una clase final son implícitamente final. La clase String es un ejemplo
de una clase final. Al hacer la clase final también se evita que los programadores creen subclases que podrían
ignorar las restricciones de seguridad.
PRACTICA
1- Cree un proyecto y nómbrelo <<Figuras Geométricas>>.
2- Cree el paquete <<com.eam.lenguaje>>. Cree dentro del anterior paquete el paquete <<vo>>. Todos los objetos creados
de ahora en adelante tienen que estar dentro del paquete <<vo>>.
3- Cree la clase abstracta Figura con atributos de clase nombre y color. Programe el método constructor usando todos los
atributos y los métodos get y set. Además, cree el método abstracto <<obtenerArea (double)>>. Intente inicializar un objeto
tipo Figura, ¿Qué sucede cuando hace dicha inicialización?
3. 3
4- Cree la clase abstracta Figura2D heredando de Figura. Programe el método constructor de Figura2D y un método
abstracto de nombre <<getPerimetro (double)>>.
5- Cree la clase abstracta Figura3D heredando de Figura. Programe el método constructor de Figura3D y un método
abstracto de nombre <<getVolumen (double)>>.
6- Programe las clases Cuadrado, Esfera, Circulo, Triagulo, Cubo y Tetraedro heredando de las clases que usted considere
pertinente. Implemente de forma específica en la subclase todos los métodos abstractos.
7- Cree una clase ManejadorDeFiguras en el paquete <<com.eam.lenguaje>>. Como atributo de clase cree una ArrayList de
tipo Figura.
8- Programe el método constructor para la clase ManejadorDeFiguras, inicialice el array y agregue dos figuras especificas por
cada clase (subclase de figura) concreta programada anteriormente.
9- Programe en ManejadorDeFiguras un método que retorne el nombre de las dos figuras que tienen un perímetro mayor.
10- Programe en ManejadorDeFiguras un método que retorne el color de la figura que tiene más volumen y la que tiene menos
volumen.
11-Programe en ManejadorDeFiguras un método que retorne cuál tipo de figura tiene la suma superior entre las áreas ¿figuras
2d o 3d?
ENTREGABLE
Enviar al correo jherrera@eam.edu.co el proyecto comprimido en zip la Practica realizada en su totalidad.
BIBLIOGRAFÍA
Deitel, P. J. & Deitel, H. M. (2012). Como Programar en java. Novena edición. México: Prentice Hall.