Clases y metodos abstractos

Solo disponible en BuenasTareas
  • Páginas : 5 (1088 palabras )
  • Descarga(s) : 4
  • Publicado : 30 de mayo de 2010
Leer documento completo
Vista previa del texto
Clases y métodos abstractos

Cuando pensamos en un tipo de clase, asumimos que las aplicaciones crearán objetos de ese tipo. No obstante, en algunos casos es conveniente declarar clases para las cuales el programador nunca creará instancias de objetos. A dichas clases se las conoce como clases abstractas. Como se utilizan sólo como clases base en jerarquías de herencia, nos referimos aellas como clases base abstractas. Estas clases no pueden utilizarse para instancias de objetos, ya que como veremos pronto, las clases abstractas están incompletas; las clases derivadas deben declarar las “piezas faltantes”.

El propósito principal de una clase abstracta es proporcionar una clase base apropiada, a partir de la cual puedan heredar otras clases y, por ende, compartir un diseñocomún. Por ejemplo, en la jerarquía de Figura de la figura 10.3, las clases derivadas heredan la noción de lo que significa ser Figura; los atributos comunes tales como posición, color y grosorBorde, y los comportamientos tales como Dibujar, Mover, CambiarTamanio. Las clases que pueden utilizarse para instanciar objetos se llaman clases concretas. Dichas clases proporcionan implementaciones decada método que declaran (algunas de las implementaciones pueden heredarse). Por ejemplo, podríamos derivar las concretas Circulo, Cuadrado y Triangulo de la clase abstracta Figura Bidimensional. De manera similar, podríamos derivar las clases concretas Esfera, Cubo y Tetraedro de la clase abstracta FiguraTridimensional. Las clases abstractas son demasiado generales como para poder crear objetos.Por ejemplo, si envía el mensaje Dibujar a la clase abstracta FiguraBidimensional, la clase sabe que las figuras bidimensionales deben poder dibujarse, pero no sabe qué figura específica dibujar, por lo que no puede implementar un verdadero método Dibujar. Las clases concretas proporcionan los detalles específicos que hacen razonable la creación de instancias de objetos.

No todas lasjerarquías de herencia contienen clases abstractas. Sin embargo, a menudo los programadores escriben código cliente que utiliza sólo tipos de clases bases abstractas para reducir las dependencias del código cliente en un rango de tipos de clases derivadas específicas. Por ejemplo, un programador puede escribir un método con un parámetro de un tipo de clases abstractas. Cuando se llama, ese método puederecibir un objeto de cualquier clase concreta que extienda en forma directa o indirecta la clase base especificada como el tipo del parámetro.

Algunas veces las clases abstractas constituyen varios niveles de la jerarquía. Por ejemplo, la jerarquía de Figura de la figura 10.3 empieza con la clase abstracta Figura. En el siguiente nivel de jerarquía hay dos clases abstractas más,FiguraBidimensional y FiguraTridimensional. El siguiente nivel de la jerarquía declara clases concretas para objetos de FiguraBidimensional (Circulo, Cuadrado, Triangulo) y para objetos de FiguraTridimensional (Esfera, Cubo y Tetraedro).

[pic]

Figura 10.3 | Diagrama de clases que muestra una jerarquía de herencia para objetos Figura.

Para hacer una clase abstracta, ésta se declara con lapalabra clave abstract. Por lo general, una clase base abstracta contiene uno o más métodos abstractos. Un método abstracto tiene la palabra clave abstract en su declaración, como en

public abstract void Dibujar (); // método abstracto

Los métodos abstractos no proporcionan implementaciones. Una clase que contiene métodos abstractos debe declararse como clase abstracta, aún si esaclase contiene métodos concretos (no abstractos). Cada clase derivada concreta de una clase base abstracta también debe proporcionar implementaciones concretas de los métodos de la clase base. En la figura 11.4 mostramos un ejemplo de una clase abstracta con un método abstracto.

// Fig. 11.4: Empleado.cs
// La clase base abstracta Empleado.
public abstract class Empleado
{
private...
tracking img