Ir al contenido



Foto

Programando a través de POO - la clase TPartidos (Haciendo las cosas bien)


  • Por favor identifícate para responder
25 respuestas en este tema

#21 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.408 mensajes
  • LocationRepública Dominicana

Escrito 21 marzo 2017 - 01:43

Estoy en la fase de creación del partido, o sea, guardar la info del partido disputado al servidor, en el formulario intervienen tres combos, Modalidad, Ganador y Perdedor, en modalidad se listan todos los tipos de juego (Bola 8, Bola 9, Etc) y en los combos Ganador y Perdedor todos los jugadores de la liga, intento obtener las modalidades y listarlo al combo e hice lo siguiente:


delphi
  1. TModalidadRec = record
  2. ModalId: Integer;
  3. Nombre: String;
  4. Bola: String;
  5. ACarambola: Integer;
  6. ATpa: Integer;
  7. end;
  8.  
  9. IModalidades = interface
  10. ['{BE7BE15A-CADA-4915-BDFE-168A620B3CC7}']
  11. function ListarModalidades: TList<TModalidadRec>;
  12. end;
  13.  
  14. TModalidad = class(TInterfacedObject, IModalidades)
  15. function ListarModalidades: TList<TModalidadRec>;
  16. end;

Y luego quería que la clase TPartido heredara la función ListarModalidades, hice esto:


delphi
  1. TPartido = class(TInterfacedObject,IPartidos,IModalidades)
  2. function ListarUltimosPartidos(const ARows: String): TList<TPartidoRec>;
  3. function Guardar(const APartido: TPartidoRec; isNew: Boolean): Boolean;
  4. function ListarModalidades: TList<TModalidadRec>;
  5. end;

Pero me marca error:

 

[dcc32 Error] gameClasses.pas(60): E2065 Unsatisfied forward or external declaration: 'TPartido.ListarModalidades'

 

 

¿Qué estoy haciendo mal?.


  • 0

#22 Agustin Ortu

Agustin Ortu

    Advanced Member

  • Moderadores
  • PipPipPip
  • 831 mensajes
  • LocationArgentina

Escrito 21 marzo 2017 - 02:38

[dcc32 Error] gameClasses.pas(60): E2065 Unsatisfied forward or external declaration: 'TPartido.ListarModalidades'

 

 

Pues simple, quiere decir que no implementaste la funcion que te marca  ;)

 

Ahora, porque necesitas que tu clase TPartidos implemente esa funcion? No sera que la clase TPartidos, internamente, necesite hacer uso de esa funcion? En ese caso, considera hacer lo siguiente:


delphi
  1. type
  2. TPartido = class(TInterfacedObject, IPartidos)
  3. private
  4. FModalidades: IModalidades;
  5.  
  6. // IPartidos
  7. function ListarUltimosPartidos(const ARows: String): TList<TPartidoRec>;
  8. function Guardar(const APartido: TPartidoRec; isNew: Boolean): Boolean;
  9. protected
  10. property Modalidades: IModalidades read FModalidades;
  11. public
  12. constructor Create(const Modalidades: IModalidades);
  13. end;
  14.  
  15. constructor TPartido.Create(const Modalidades: IModalidades);
  16. begin
  17. if not Assigned(Modalidades) then
  18. raise Exception.Create('Modalidades es nil');
  19. inherited Create;
  20. FModalidades := Modalidades;
  21. end;
  22.  
  23. // en el resto de los metodos de TPartidos podes usar la propiedad Modalidades que tiene el metodo
  24. // ListarModalidades


  • 0

#23 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.408 mensajes
  • LocationRepública Dominicana

Escrito 21 marzo 2017 - 06:30

Bien, estoy un poco confundido con el constructor, ¿de todos modos deberé instanciar una Variable TModalidad para pasarlo como parámetro en el create?.


  • 0

#24 Agustin Ortu

Agustin Ortu

    Advanced Member

  • Moderadores
  • PipPipPip
  • 831 mensajes
  • LocationArgentina

Escrito 22 marzo 2017 - 10:05

Bien, estoy un poco confundido con el constructor, ¿de todos modos deberé instanciar una Variable TModalidad para pasarlo como parámetro en el create?.

 

Si exacto. Aunque lo que yo no entiendo exactamente es que es lo que haces con las modalidades. Ten en cuenta que si bien esta permitido, no es buena idea tener una clase que implemente varias interfaces.. simplemente porque la clase se hace mas compleja y es mucho mas facil manejar las cosas si tenes clases dedicadas


  • 0

#25 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.408 mensajes
  • LocationRepública Dominicana

Escrito 22 marzo 2017 - 10:37

Pues, a partir de ahora llamo cada una por separado.


  • 1

#26 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.408 mensajes
  • LocationRepública Dominicana

Escrito 11 abril 2017 - 07:36

Hola a todos!, éste tema aún no se ha terminado, sólo que uno de mis proyectos me está quitando mucho tiempo, sólo aprovecho que el uso de TList<t> y records me ha salvado un montón y a la vez me ha ahorrado bastante dolores de cabezas, recientemente tuve problemas con un formulario de entrada de inventario y salida utilizando tablas de memorias (TClientDataSet) y últimamente me lanzaba errores difícil de ubicar, me cansé de ello y opté por usar una lista con records y ListView con estilo vsReport, hostia!, por qué no se me ocurrió antes?, ya en la marcha iré cambiando todo por ese método, Gracias Agustín!!!.


  • 2