Está en la página 1de 8

“Ingeniería de sistemas”

Alumno: Cutin Zapata Alipio

Docente: García Córdova Edy

Curso: Técnicas de programación

Tema: Investigación Formativa

2018
Clases Abstractas

En la entrada sobre conceptos básicos hablamos un poco sobre el


termino de Abstracción y en general del como se aplica en el campo de
la programación.

En esta ocasión vamos a trabajar un poco mas en detalle sobre este


concepto de forma rápida y sencilla, veremos la importancia del mismo
y su aplicación.

Como se ha mencionado, la abstracción permite resaltar lo mas


representativo de algo sin importar los detalles.

Bueno, continuando Básicamente una clase Abstracta es similar a una


clase normal (como la vimos en la entrada anterior), la estructura
es prácticamente igual, ya que poseen nombre, atributos y métodos
pero para que una clase sea abstracta la condición es que al menos uno
de sus métodos sea abstracto (se le agrega la
palabra reservada abstract y no se especifica el cuerpo del
método).................su uso depende de la aplicación del concepto
de Herencia y adicionaremos a la estructura básica de clase la palabra
reservada abstract.
Veamos como se implementa en Java.

1
2 public abstract class Principal{
3
4 /**Método concreto con implementación*/
5 public void metodoConcreto(){
...............
6 ...............
7 }
8
9 /**Método Abstracto sin implementación*/
10 public abstract void metodoAbstracto();
11
12 }
13
class subClase extends Principal{
14
15 @Override
16 public void metodoAbstracto() {
17 /**Implementación 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 método de la clase es abstract, esto obliga a
que la clase completa sea definida abstract, sin embargo la clase
puede tener el resto de métodos no abstractos.
• Los métodos abstract no llevan cuerpo (no llevan los
caracteres {}).
• La primer subclase concreta que herede de una
clase abstract debe implementar todos los métodos de
la superclase.

¿Cuando Utilizarlas?.

Al trabajar clases y métodos abstractos, no solo mantenemos


nuestra aplicación mas organizada y fácil de entender sino que
también al no poder instanciar una clase abstracta nos aseguramos
de que las propiedades especificas de esta, solo estén 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 código, todos los métodos abstractos de la clase padre,
pero esta vez serán métodos concretos y su funcionalidad o cuerpo
sera definido dependiendo de para que la necesite, de esa manera
si tengo otra clase que también hereda del mismo padre,
implementaré el mismo método pero con un comportamiento
distinto..........Veamos un Ejemplo.
En el diagrama vemos una clase Abstracta Instrumento, la cual
posee una propiedad tipo y un método abstracto tocar(), vemos
también 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 método abstracto, ya que es un proceso común 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 saxofón, así al heredar de la clase Instrumento, todas sus clases
hijas están obligadas a implementar este método y darle la
funcionalidad que le corresponda...

veamos esto en Java.


1 /**
2 * Clase Abstracta Instrumento
*/
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 public class Principal {
47
48 public static void main(String arg[]){
/**Objeto miGuitarra de tipo Instrumento */
49 Instrumento miGuitarra= new Guitarra();
50 System.out.println("Instrumento : "+miGuitarra.tipo);
51 miGuitarra.tocar();
52 System.out.println();
/**Objeto miSaxofon de tipo Instrumento */
53
Instrumento miSaxofon= new Saxofon();
54 System.out.println("Instrumento : "+miSaxofon.tipo);
55 miSaxofon.tocar();
56 System.out.println();
57 /**Objeto miViolin de tipo Instrumento */
Instrumento miViolin= new Violin();
58 System.out.println("Instrumento : "+miViolin.tipo);
59 miViolin.tocar();
60
61 }
62
63 }
64
65
66
67
68
69
70
71
72
73
Como vemos cada una de las clases concretas implementan el
método tocar() y le dan la funcionalidad dependiendo de como se
toque el instrumento, también 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 lógica para ejecutar


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

Y listo, ya aplicamos de manera simple el concepto de Abstracción,


en la próxima entrada veremos que son las Interfaces y mas
adelante veremos como funciona el Polimorfismo mediante otro
ejemplo de programación.(1)
Clases Abstractas
Una de las características más útiles de cualquier lenguaje orientado a objetos es la
posibilidad de declarar clases que definen como se utiliza solamente, sin tener que
implementar métodos, son las clases abstractas. Mediante una clase abstracta se
intenta fijar un conjunto mínimo de métodos (el comportamiento) y de atributos, que
permitan modelar un cierto concepto, que será refinado y especializado mediante el
mecanismo de la herencia. Como consecuencia, la implementación de la mayoría de
los métodos de una clase abstracta podría no tener significado. Para resolver esto,
Java proporciona los métodos abstractos. Estos métodos se encuentran incompletos,
sólo cuentan con la declaración y no poseen cuerpo de definición. Esto es muy útil
cuando la implementación es específica para cada usuario, pero todos los usuarios
tienen que utilizar los mismos métodos. Un ejemplo de clase abstracta en Java es la
clase Graphics:
public abstract class Graphics {
public abstract void drawLine( int x1,int y1,int x2,int y2 );
public abstract void drawOval( int x,int y,int width,int height
);
public abstract void drawArc( int x,int y,int width,
int height,int startAngle,int arcAngle );
. . .
}

Los métodos se declaran en la clase Graphics, pero el código que ejecutará el


método está en algún otro sitio:

public class MiClase extends Graphics {


public void drawLine( int x1,int y1,int x2,int y2 ) {
<código para pintar líneas -específico de la arquitectura-
>
}
}

Cuando una clase contiene un método abstracto tiene que declararse abstracta. No
obstante, no todos los métodos de una clase abstracta tienen que ser abstractos. Las
clases abstractas no pueden tener métodos privados (no se podrían implementar) ni
tampoco estáticos. Una clase abstracta tiene que derivarse obligatoriamente, no se
puede hacer un new de una clase abstracta.

Una clase abstracta en Java es lo mismo que en C++

virtual func() = 0;
lo que obliga a que al derivar de la clase haya que implementar forzosamente los
métodos de esa clase abstracta.(2)
REFERENCIAS BIBLIOGRAFICAS VANCOUVER

1 Henao C. CLASES ABSTRACTAS;: Universidad del Quindío –


Colombia; Blogger.

http://codejavu.blogspot.com/2013/05/clases-abstractas.html
2 Zapata A. CLASES ABSTRACTAS EN JAVA;: BIPODE 2001; DIS.UM
http://dis.um.es/~bmoros/Tutorial/parte5/cap5-11.html