Está en la página 1de 6

Clases Abstractas

En la entrada sobre conceptos bsicos hablamos


un poco sobre el termino de Abstraccin y en general del
como se aplica en el campo de la programacin.

En esta ocasin vamos a trabajar un poco mas en detalle


sobre este concepto de forma rpida y sencilla, veremos la
importancia del mismo y su aplicacin.

Como se ha mencionado, la abstraccin permite resaltar lo


mas representativo de algo sin importar los detalles.

Bueno, continuando Bsicamente una clase Abstracta es


similar a una clase normal (como la vimos en la
entrada anterior), la estructura es prcticamente igual, ya
que poseen nombre, atributos y mtodos pero para que una
clase sea abstracta la condicin es que al menos uno de sus
mtodos sea abstracto (se le agrega la
palabra reservada abstract y no se especifica el cuerpo del
mtodo).................su uso depende de la aplicacin del
concepto de Herencia y adicionaremos a la estructura bsica
de clase la palabra reservada abstract.

Veamos como se implementa en Java.

1 public abstract class Principal{


2
/**Mtodo concreto con implementacin*/
3 public void metodoConcreto(){
4 ...............
5 ...............
6 }
7
8 /**Mtodo Abstracto sin implementacin*/
public abstract void metodoAbstracto();
9
10
11 }
12
13 class subClase extends Principal{
14
15 @Override
16 public void metodoAbstracto() {
17 /**Implementacin definida por la clase concreta*/
}
18
19 }
20
21

Caracteristicas de una Clase Abstracta.

Esto es lo que debemos conocer sobre de Clases Abstractas.

Una clase Abstracta No puede ser instanciada (no se


pueden crear objetos directamente - new ), solo puede ser
heredada.
Si al menos un mtodo de la clase es abstract, esto
obliga a que la clase completa sea definida abstract, sin
embargo la clase puede tener el resto de mtodos no
abstractos.
Los mtodos abstract no llevan cuerpo (no llevan los
caracteres {}).
La primer subclase concreta que herede de una
clase abstract debe implementar todos los mtodos de
la superclase.

Cuando Utilizarlas?.

Al trabajar clases y mtodos abstractos, no solo mantenemos


nuestra aplicacin mas organizada y fcil de entender sino
que tambin al no poder instanciar una clase abstracta nos
aseguramos de que las propiedades especificas de esta, solo
estn disponibles para sus clases hijas....
Con las Clases Abstractas lo que hacemos es definir un
proceso general que luego sera implementado por las clases
concretas que hereden dichas funcionalidades..........
Que?........... es decir, si tengo una clase que hereda de otra
Abstracta, estoy obligado a poner en el cdigo, todos los
mtodos abstractos de la clase padre, pero esta vez sern
mtodos concretos y su funcionalidad o cuerpo sera definido
dependiendo de para que la necesite, de esa manera si tengo
otra clase que tambin hereda del mismo padre,
implementar el mismo mtodo pero con un comportamiento
distinto..........Veamos un Ejemplo.

En el diagrama vemos una clase Abstracta Instrumento, la


cual posee una propiedad tipo y un mtodo abstracto tocar(),
vemos tambin las clases
hijas Guitarra, Saxofon y Violin que para este ejemplo solo
utilizaremos (mediante la herencia) las propiedades de la
clase Padre.

Todos los instrumentos musicales se pueden tocar, por ello


creamos este mtodo abstracto, ya que es un proceso comn
en todos los instrumentos sin importar el detalle de como se
tocan, pues sabemos que una guitarra no se toca de la misma
manera que el saxofn, as al heredar de la clase
Instrumento, todas sus clases hijas estn obligadas a
implementar este mtodo y darle la funcionalidad que le
corresponda...
veamos esto en Java.
1 /**
* Clase Abstracta Instrumento
2 */
3 abstract class Instrumento{
4
5 public String tipo;
6
7 public abstract void tocar();
8 }
9
/**
10 * Clase Concreta Guitarra, hija de Instrumento
11 */
12 class Guitarra extends Instrumento {
13
14 public Guitarra(){
15 tipo="Guitarra";
}
16
17 public void tocar() {
18 System.out.println("Tocar La Guitarra");
19 }
20 }
21
22 /**
* Clase Concreta Violin, hija de Instrumento
23 */
24 class Violin extends Instrumento {
25
26 public Violin(){
27 tipo="Violin";
}
28
29
public void tocar() {
30 System.out.println("Tocar El violin");
31 }
32 }
33
34 /**
* Clase Concreta Saxofon, hija de Instrumento
35 */
36 class Saxofon extends Instrumento {
37
38 public Saxofon(){
39 tipo="Saxofon";
40 }
41
public void tocar() {
42 System.out.println("Tocar el Saxofon");
43 }
44 }
45
46
47
48
49
50
51 public class Principal {
52
53 public static void main(String arg[]){
/**Objeto miGuitarra de tipo Instrumento */
54 Instrumento miGuitarra= new Guitarra();
55 System.out.println("Instrumento : "+miGuitarra.tipo);
56 miGuitarra.tocar();
57 System.out.println();
58 /**Objeto miSaxofon de tipo Instrumento */
Instrumento miSaxofon= new Saxofon();
59 System.out.println("Instrumento : "+miSaxofon.tipo);
60 miSaxofon.tocar();
61 System.out.println();
62 /**Objeto miViolin de tipo Instrumento */
Instrumento miViolin= new Violin();
63 System.out.println("Instrumento : "+miViolin.tipo);
64 miViolin.tocar();
65
66 }
67
68 }
69
70
71
72
73
Como vemos cada una de las clases concretas implementan el
mtodo tocar() y le dan la funcionalidad dependiendo de
como se toque el instrumento, tambin en cada constructor
de las clases definimos el tipo, pero si nos fijamos bien en las
clases concretas no tenemos la variable tipo declarada, pues
estamos usando la variable heredada de la
clase Instrumento.
Hay que tener en cuenta que cuando trabajamos con clases
Abstractas, estas solo pueden ser heredadas mas no
instanciadas, esto quiere decir que no podemos crear objetos
directamente de estas clases.

Como vemos en la clase Principal tenemos la lgica para


ejecutar nuestra aplicacin y usamos el concepto de
Polimorfismo para crear los objetos de tipo Instrumento por
medio de sus clases Hijas, pero en ningn momento creamos
un objeto como instancia directa de la clase abstracta......

Y listo, ya aplicamos de manera simple el concepto de


Abstraccin, en la prxima entrada veremos que son las
Interfaces y mas adelante veremos como funciona el
Polimorfismo mediante otro ejemplo de programacin........

Tambin les comparto este video con la explicacin teorica del


concepto..

También podría gustarte