Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > JAVA
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 15-08-2007
nikotina nikotina is offline
Miembro
 
Registrado: oct 2006
Posts: 84
Poder: 18
nikotina Va por buen camino
Metodos abstractos

Hola a todos. Estoy haciendo mis primeras armas en Java y en lo que es la POO. Mi pregunta concreta es sobre los metodos abstractos. No veo la diferencia entre usar un metodo abstracto (definido en una clase abstracta) para un cierto numero de clases (que extienden a la clase abstracta) y que cada clase lo implemente de forma diferente, a que cada clase tenga su propio metodo, ya que estos se implementan de forma diferente en cada clase.

espero haberme explicado bien
Responder Con Cita
  #2  
Antiguo 15-08-2007
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Suponiendo que en Java sea igual que en Delphi, hasta donde yo llego un método "abstracto" en cierta clase está obligando a las clases descendientes a implementar dicho método. De otro modo (en el caso de Delphi) obtendrías un "warning" al tratar de compilar tal que así:

Cita:
[DCC Warning] Unit1.pas(31): W1020 Constructing instance of 'TMyChildClass' containing abstract method 'TMyClass.ShowMyName'
Es decir:

Código Delphi [-]
unit Unit2;

interface

type
  TMyClass = class(TObject)
  public
    function ShowMyName(): string; virtual; abstract;
  end;

type
  TMyChildClass = class(TMyClass)
  end;

implementation

end.

Al derivar la clase "TMyChildClass" de "TMyClass" estamos obligados a implementar en "TMyChildClass" el método "abstracto" "ShowMyName()". De no hacerlo así, la advertencia de antes, en tiempo de diseño, y, en tiempo de ejecución, una excepción "EAbstractError" si tratamos de ejecutar el método en cuestión.

De tal modo que tendríamos que hacer algo así:

Código Delphi [-]
unit Unit2;

interface

type
  TMyClass = class(TObject)
  public
    function ShowMyName(): string; virtual; abstract;
  end;

type
  TMyChildClass = class(TMyClass)
  public
    function ShowMyName(): string; override;
  end;

implementation

{ TMyChildClass }

function TMyChildClass.ShowMyName(): string;
begin
  result := ClassName;
end;

end.

Ya digo. Puede que vaya más allá, pero, hasta donde llego, sirve para obligar a las clases descendientes a implementar determinados métodos. Acaso algún otro compañero pueda corregirme o en todo caso proporcionar algo más de información al respecto.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #3  
Antiguo 15-08-2007
nikotina nikotina is offline
Miembro
 
Registrado: oct 2006
Posts: 84
Poder: 18
nikotina Va por buen camino
Metodos abstractos

Gracias Dec x contestar.

Creo que entendi cual es el objetivo de la abstraccion. Todavia no me cierra bien el tema de obligar a las clases derivadas a implementar metodos cuando cada clase puede implementar sus propios metodos. Pero puede ser que en ciertas ocaciones pueda ser util.
Responder Con Cita
  #4  
Antiguo 15-08-2007
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Bueno. La verdad es que yo tampoco estoy muy puesto en estos temas, todo hay que decirlo. Sin embargo, el que puedas obligar a una clase a implementar determinados métodos... supongo que tiene su utilidad. Tal vez en algún caso incluso se haga necesario, pero, yo me quedo por el momento conque puedes hacerlo. Ojo, no que tengas que hacerlo, sino que puedes hacerlo.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #5  
Antiguo 15-08-2007
Avatar de droguerman
droguerman droguerman is offline
Miembro
 
Registrado: abr 2005
Ubicación: tierra
Posts: 999
Poder: 20
droguerman Va por buen camino
puedes hacer esto y nadie te obliga a no hacerlo:

public class Trabajador
{
public Trabajador() {}
public void Trabajar() {}
}

public class TrabajadorPersona extends Trabajador
{
public void Trabajar() {System.out.println("trabajando como persona");}
}

public class TrabajadorRobot extends Trabajador
{
public void Trabajar() {System.out.println("trabajando como robot");}
}

el problema es que si vas a crear un nuevo descendiente de Trabajador por ejemplo TrabajadorAnimal este tendrá como comportamiento predeterminado no hacer nada, entonces la solución es poner como método abstracto para que el programador que se encargue de implementar la clase TrabajadorAnimal esté obligada a ponerle algun comportamiento, ahora donde está la gracia de esto? es que debemos pensar que no siempre vamos a ser nosotros los encargados de implementar otras clases derivadas, sino que puede ser otra persona, entonces de esta manera le estamos mostrando nuestras reglas a seguir e implementar.

saludos
__________________
self.free;

Última edición por droguerman fecha: 15-08-2007 a las 18:01:10.
Responder Con Cita
  #6  
Antiguo 17-08-2007
Avatar de Arcioneo
Arcioneo Arcioneo is offline
Miembro
 
Registrado: jul 2006
Ubicación: Tierra
Posts: 583
Poder: 18
Arcioneo Va por buen camino
Cool Simple

Te obliga a la de a huevo (forsozamente) a que tengas que hacer(al menos declarar) esos métodos, aunque a simple vista parece inútil, cuando desarrollas para que a posteriori otros programadores lo utilicen, pues resulta mas comodo ver que en la clase abstracta hay un método que yo llamo con ciertos parametro y me regresa esto de tal forma, ya asi no mre preocupa como lo implementaron...

Y bueno, el segundo y mas importante punto, en java no hay polimorfismo, gracias a las clases abstractas se puede realizar por asi decirlo, una emulación del mismo
__________________
"Porque es tan idiotamente sorda la fé y tan ciego el que cree?".
Responder Con Cita
  #7  
Antiguo 17-08-2007
Avatar de __hector
[__hector] __hector is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Santo Domingo, Rep. Dom.
Posts: 1.075
Poder: 23
__hector Va por buen camino
Que en java no hay polimorfismo?? Querras decir quizas, que no hay herencia multiple, pero polimorfismo claro que hay.
__________________
Héctor Geraldino
Software Engineer
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
metodos de ordenacion de matrices rls Varios 3 22-09-2006 03:50:03
herencia de metodos supermilloriver OOP 7 07-01-2006 14:46:01
Metodos del API Lotus Notes!! DB-ADO API de Windows 1 14-03-2005 18:49:27
Métodos de clase. jplj OOP 14 22-11-2004 09:30:19
problemas con clases y metodos rojito JAVA 1 03-10-2004 23:06:28


La franja horaria es GMT +2. Ahora son las 06:34:07.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi