Foros del Web

Foros del Web (http://www.forosdelweb.com/)
-   Java (http://www.forosdelweb.com/f45/)
-   -   Que es una clase astracta?? (http://www.forosdelweb.com/f45/que-clase-astracta-534258/)

jair20x 19/11/2007 09:52

Que es una clase astracta??
 
Hola a todos estoy estudiando java pero no llego a enteder bien lo que es una clase astracta :borracho: y cual seria su uso practico
alguien me podria ayudar con algun ejemplo practico
se lo agradeceria mucho.
Saludos

CheBoy 19/11/2007 15:20

Re: Que es una clase astracta??
 
Hola! Voy a ponerte el ejemplo que me pusieron a mi cuando me explicaron esto. Espero que te sirva de ayuda.

Antes que nada debes saber que no se pueden instanciar objetos de una clase abstracta, es decir, no puedes hacer
Código PHP:

Figura fig = new Figura(); 

Aunque si puedes definir variables, osea,
Código PHP:

Figura fig

Otra cosa que debes saber es que las clases abstractas tienen que ver con el Polimorfismo asi que deberias informarte sobre esto. Yo no lo tengo muy claro pero te comento lo que se.

Tenemos la clase abstracta Figura que tiene un metodo llamado pintar(). Y tambien tenemos las clases Cuadrado, Triangulo y Circulo que heredan de la clase abstracta Figura y que tiene que implementar el metodo pintar(). Cada una implementara el metodo para que dibuje la figura correspondiente. La idea es que con la clase abstracta podemos hacer lo siguiente:

Código PHP:

Fugra fig;
fig = new Cuadrado;
fig.pintar();
fig = new Triangulo;
fig.pintar();
fig = new Circulo;
fig.pintar(); 

Dado que las 3 clases heredan de Figura la variable fig puede apuntar a un Cuadrado, a un Triangulo o a un Circulo. Y lo mas importante es que sin saber la figura a la que apunta, al hacer la llamada al metodo pintar() dibuja la figura adecuada. Nosotros tenemos una figura y sabemos que se puede pintar pero no tenemos orque saber que se trata de un Cuadro o un Triangulo para poder dibujarlo. Esta es la ventaja de las clases abstractas. El ejemplo es un poco tonto pero puedes aplicar la idea a muchas otras cosas.

Espero que te sirva y tengas una idea mas clara de lo que son las clases abstractas.

Un saludo!

Faur 20/11/2007 01:50

Re: Que es una clase astracta??
 
Aunque CheBoy lo ha dejado bastante claro, me sumo a su respuesta y te digo que las clases abstractas sirven como una plantilla, es decir, siguiendo el ejemplo de CheBoy, tu sabes que sólo vas a trabajar con figuras, pero no puedes pintar una figura sin saber de que tipo es, por esto no puedes instanciar objetos de tipo figura. Pero en la clase figura puedes defirnir una serie de métodos que Circulo, Cuadrado y Triangulo heredaran y podrán implementar cada uno de una forma distinta (de ahí lo de polimrfismo, un método implementado de varias formas).

De esta forma te abstraes de como se pinta un Circulo, o un Cuadrado te basta con saber que son un tipo de figura y que tienen un metodo pintar() que los pinta.

Espero no haberte liado más.

GreenEyed 20/11/2007 07:11

Re: Que es una clase astracta??
 
Con lo que habeis explicado, lo mismo da una clase abstracta que una interfaz, falta el detalle que diferencia una de otra, y es que una clase abstracta, aparte de servir de plantilla puede definir variables y código que son heredados por las clases que la extienden.

Más que nada por que la gente suele encontrarse despues con el concepto de Interfaz y piensa "¿pero no es lo mismo?" :-)

S!

-zidboy- 17/04/2008 20:47

Re: Que es una clase astracta??
 
Cita:

Iniciado por jair20x (Mensaje 2191079)
no llego a enteder bien lo que es una clase astracta

Primero que todo, hola a todos! los segundo, GreenEyed tienes que o aprender a leer o aprender a escribir, por que es Clase ABSTRACTA y no astracta.

CheBoy tiene razon en cuanto que una clase abstracta no puede o no tiene la capacidad de poder instanciarse, por el echo de que es abstracta.

CheBoy no se si este codigo esta bien en php, por lo menos en java no se lleba

Fugra fig;
fig = new Cuadrado;
fig.pintar();
fig = new Triangulo;
fig.pintar();
fig = new Circulo;
fig.pintar();

Lo que sé es que en java eso esta malo, no puede instanciar distintos objetos con el mismo nombre, en este caso seria de esta forma, se instancia o un Cuadrado o un Triangulo o un Circulo y al momento de instanciarse ellos toman al instante los metodos y atributos de la clase padre, el problema se ocaciona cuando tienes que crear una instacia de un objeto pero no sabes cual es, ese problema lo solucionas con patron de diseño que se llama factory.

EJ:

Cuadrado cuadrado = new Cuadrado();
cuadrado.pintar();

Abstracta viene de ABSTRACCION, abstraerse, llegar los mas arriba posible, escalabilidad, todos esos conceptos tienen que estar claros al momento de estudiar JAVA.

Saludos a todos y espero que les ayude.


OJO, la clase abstracta no tiene nada, pero nada que ver con la interface, asi que no confundir abstraccion con interface.....ok.

Payin 17/04/2008 21:09

Re: Que es una clase astracta??
 
No está bien decir que la clase abstracta y la interfaz no tienen NADA que ver. Las dos se usan para dar herencia y comportamiento a clases subordinadas. Solo que las clases Abstractas poseen métodos y variables que serán parte de la herencia que reciba cada clase que la implemente. En cambio las Interfaces proveen un comportamiento, solo dan los nombres de los métodos (o no) que tienen. Esos métodos serán implementados por las clases que implementen a la interfase.

GreenEyed 18/04/2008 00:38

Re: Que es una clase astracta??
 
Cita:

Iniciado por -zidboy- (Mensaje 2368794)
Primero que todo, hola a todos! los segundo, GreenEyed tienes que o aprender a leer o aprender a escribir, por que es Clase ABSTRACTA y no astracta.

Tu no solo tienes que aprender educación, de la que careces, si no que además tienes que aprender a leer, ya que el título del mensaje no lo escribí yo.
Así que quien escribió "astracta" no fui yo.

Y por cierto, ya puestos:
.- Las frases se empiezan con mayúscula
.- "los segundo" no concuerda en numero, supongo que sería "Lo segundo".
.- El verbo "llevar" se escribe con "v", y no con "b".
.- "Hecho" se escribe con h, ya que viene del verbo "hacer"
...

Empezar insultando y presumiendo de lo que careces no creo que sea una buena forma de participar en un foro, pero cada uno es libre.

S!

PD: Ah, y como ya han mencionado, decir que el concepto de clase abstracta y de interfaz no tienen nada que ver es bastante desacertado.

andresito0427 19/06/2009 13:36

Respuesta: Que es una clase astracta??
 
jajajaj baboso hablando de ortografía y no sabe ni escribir llevar que tristeza!! jajajajaja

jesuscoro 19/06/2009 16:43

Respuesta: Que es una clase astracta??
 
La verdad, zidboy, que te cubriste de gloria con tu primer mensaje en el foro. A parte de no fijarte quien escribe que, tener varias faltas graves de ortografia, y decir que una interface no tiene nada que ver con una clase abstracta, dices que un bloque de codigo esta mal, cuando no lo esta.

En el codigo
Código:

Fugra fig;
fig = new Cuadrado;
fig.pintar();
fig = new Triangulo;
fig.pintar();
fig = new Circulo;
fig.pintar();

no hay nada mal, excepto que falten los parentesis despues de la llamada a los constructores. No se estan instanciando distintas variables con el mismo nombre, se esta inicializando una variable varias veces, y eso si esta permitido, aunque he de reconocer que lo que tu dices de que no se puede poner el mismo nombre a distintas variables no se puede (aunque nadie lo haya dicho ni intentado).


La zona horaria es GMT -6. Ahora son las 21:03.

Desarrollado por vBulletin® Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.