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

Code: Select all | Expand
@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()
}
@enduml
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!