Hola.
Haciendo un kata he montado un pequeño PRG que genera Diagrama de Clases UML a partir de la estructura de Clases de Harbour:

con UML he creado automáticamente el Diagrama de Clases de FWH como curiosidad.
La verdad es que cuando tu aplicación es 100% OOP va muy bien tener un "Mapa" de como está todo.

Se puede descargar en formato SVG en el siguiente enlace: https://mega.nz/file/wCpEyIgL#CKKVWE4lvxgLv-o86v2HkusEiNFH2tjIPsFlHZLZ_5Y
Salud!
Haciendo un kata he montado un pequeño PRG que genera Diagrama de Clases UML a partir de la estructura de Clases de Harbour:

@startuml
package root <<Frame>> {
class TClass
   {
    {method} +New()
    {method} End()
    {method} ToString()
    {method} SayInherit()
   }
class TClasses
   {
    {method} +New()
    {method} End()
    {method} GetClasses()
    {method} MakeClass()
    {method} LoadFile()
    {method} ExtractClassFromFile()
    {method} GetClassName()
    {method} GetInherit()
    {method} GetMethods()
    {method} DeleteLineClassName()
    {method} ClearHeaderClass()
    {method} GetPosCreateClass()
    {method} DeleteComments()
    {method} DeleteComment()
    {method} HasComments()
    {method} DeleteCommentLines()
    {method} DeleteCommentLine()
    {method} HasCommentLines()
    {method} VerifyClassName()
   }
}
package root <<Frame>> {
class TUMLTest Implements  TUMLTest1, TUMLTest2
   {
    {method} +New()
    {method} End()
   }
class TUMLTest1
   {
    {method} +New()
    {method} End()
   }
class TUMLTest2
   {
    {method} +New()
    {method} End()
   }
class TMethod
   {
    {method} +New()
    {method} End()
    {method} ToString()
    {method} +SayConstructor()
   }
}
package root <<Frame>> {
class TMakeTest
   {
    {method} +New()
    {method} CargaFichero()
    {method} ExisteFichero()
    {method} ProcesaFichero()
    {method} CreaTests()
    {method} BuscaClase()
    {method} BuscaMetodos()
    {method} NombreFicheroTest()
    {method} ExisteFicheroTest()
    {method} AnadirTestHbp()
    {method} AnadirTestUnitario()
    {method} GetSettings()
    {method} ExistFileSettings()
   }
class TParametros
   {
    {method} MontaParametros()
    {method} Init()
    {method} +New()
    {method} End()
    {method} ExisteParametro()
    {method} ExistenParametros()
    {method} GetParametros()
    {method} GetParametro()
    {method} HayParametros()
    {method} IsError()
    {method} StrError()
   }
class TSettings
   {
    {method} +New()
   }
}
package root <<Frame>> {
class TUml
   {
    {method} +New()
    {method} End()
    {method} Make()
    {method} InitPath()
    {method} MakeClass()
    {method} SetNewUmlFile()
   }
class TUmlClass
   {
    {method} +New()
    {method} End()
    {method} MountClasses()
    {method} MountUmlFile()
    {method} SaveUmlFile()
    {method} CountClasses()
    {method} Help()
    {method} GetFiles()
    {method} Make()
    {method} AddClasses()
    {method} SortClasses()
   }
@endumlcon UML he creado automáticamente el Diagrama de Clases de FWH como curiosidad.
La verdad es que cuando tu aplicación es 100% OOP va muy bien tener un "Mapa" de como está todo.

Se puede descargar en formato SVG en el siguiente enlace: https://mega.nz/file/wCpEyIgL#CKKVWE4lvxgLv-o86v2HkusEiNFH2tjIPsFlHZLZ_5Y
Salud!
--------
¿ Y porque no ?
¿ And why not ?
¿ Y porque no ?
¿ And why not ?