Klassendiagramm - UML

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Benutzeravatar
remi_meier
Beiträge: 1078
Registriert: 29.08.2004 20:11
Wohnort: Schweiz

Klassendiagramm - UML

Beitrag von remi_meier »

Ein paar kleine Hilfsfunktionen zum Erstellen von UML-Klassendiagrammen
für DIA. Kein schöner, aber einfacher XML-Writer.
DIA kriegt man hier:
http://dia-installer.sourceforge.net/download.php

War ein kleines Nebenprodukt, nach dem Laden der .DIA-Datei müssen
die Diagramme nur noch angeordnet werden. Ev. kanns ja jemand ver-
wenden.

Code: Alles auswählen

EnableExplicit

Global IDCounter.l

Procedure.s String(s.s)
  ProcedureReturn ReplaceString(s, "\dq", #DQUOTE$)
EndProcedure


Procedure UMLWriteFileStart(File.l)
  Protected s.s
  
  s = String("<?xml version=\dq1.0\dq encoding=\dqUTF-8\dq?>") + #CRLF$
  s + String("<dia:diagram xmlns:dia=\dqhttp://www.lysator.liu.se/~alla/dia/\dq>") + #CRLF$
  s + String("  <dia:layer name=\dqHintergrund\dq visible=\dqtrue\dq>") + #CRLF$
  WriteStringN(File, s, #PB_UTF8)
EndProcedure

Procedure UMLWriteFileEnd(File.l)
  Protected s.s
  
  s = String("  </dia:layer>") + #CRLF$
  s + String("</dia:diagram>") + #CRLF$
  WriteStringN(File, s, #PB_UTF8)
EndProcedure

Procedure.l UMLWriteClassStart(File.l, ClassName.s, Comment.s)
  Protected s.s
  
  s + String("    <dia:object type=\dqUML - Class\dq version=\dq0\dq id=\dqO" + Str(IDCounter) + "\dq>") + #CRLF$
  s + String("      <dia:attribute name=\dqname\dq>") + #CRLF$
  s + String("        <dia:string>#"+ClassName+"#</dia:string>") + #CRLF$
  s + String("      </dia:attribute>") + #CRLF$
  s + String("      <dia:attribute name=\dqcomment\dq>") + #CRLF$
  s + String("        <dia:string>#"+Comment+"#</dia:string>") + #CRLF$
  s + String("      </dia:attribute>") + #CRLF$
  s + String("      <dia:attribute name=\dqvisible_attributes\dq>") + #CRLF$
  s + String("        <dia:boolean val=\dqtrue\dq/>") + #CRLF$
  s + String("      </dia:attribute>") + #CRLF$
  s + String("      <dia:attribute name=\dqvisible_operations\dq>") + #CRLF$
  s + String("        <dia:boolean val=\dqtrue\dq/>") + #CRLF$
  s + String("      </dia:attribute>") + #CRLF$
  s + String("      <dia:attribute name=\dqvisible_comments\dq>") + #CRLF$
  s + String("        <dia:boolean val=\dqtrue\dq/>") + #CRLF$
  s + String("      </dia:attribute>") + #CRLF$
  WriteStringN(File, s, #PB_UTF8)
  
  IDCounter + 1
  
  ProcedureReturn IDCounter - 1
EndProcedure

Procedure UMLWriteClassEnd(File.l)
  Protected s.s
  
  s + String("    </dia:object>") + #CRLF$
  
  WriteStringN(File, s, #PB_UTF8)
EndProcedure

Procedure UMLWriteAttributesStart(File.l)
  Protected s.s
  
  s = String("      <dia:attribute name=\dqattributes\dq>") + #CRLF$
  WriteStringN(File, s, #PB_UTF8)
EndProcedure

Procedure UMLWriteAttributesEnd(File.l)
  Protected s.s
  
  s = String("      </dia:attribute>") + #CRLF$
  WriteStringN(File, s, #PB_UTF8)
EndProcedure

Procedure UMLWriteAttribute(File.l, name.s, type.s, Comment.s)
  Protected s.s
  
  s = String("        <dia:composite type=\dqumlattribute\dq>") + #CRLF$
  s + String("          <dia:attribute name=\dqname\dq>") + #CRLF$
  s + String("            <dia:string>#"+name+"#</dia:string>") + #CRLF$
  s + String("          </dia:attribute>") + #CRLF$
  s + String("          <dia:attribute name=\dqtype\dq>") + #CRLF$
  s + String("            <dia:string>#"+type+"#</dia:string>") + #CRLF$
  s + String("          </dia:attribute>") + #CRLF$
  s + String("          <dia:attribute name=\dqcomment\dq>") + #CRLF$
  s + String("            <dia:string>#"+Comment+"#</dia:string>") + #CRLF$
  s + String("          </dia:attribute>") + #CRLF$
  s + String("        </dia:composite>") + #CRLF$
  
  WriteStringN(File, s, #PB_UTF8)
EndProcedure

Procedure UMLWriteOperationsStart(File.l)
  Protected s.s
  
  s = String("      <dia:attribute name=\dqoperations\dq>") + #CRLF$
  WriteStringN(File, s, #PB_UTF8)
EndProcedure

Procedure UMLWriteOperationsEnd(File.l)
  Protected s.s
  
  s = String("      </dia:attribute>") + #CRLF$
  WriteStringN(File, s, #PB_UTF8)
EndProcedure

Procedure UMLWriteOperationStart(File.l, name.s, type.s, Comment.s)
  Protected s.s
  
  s = String("        <dia:composite type=\dqumloperation\dq>") + #CRLF$
  s + String("          <dia:attribute name=\dqname\dq>") + #CRLF$
  s + String("            <dia:string>#"+name+"#</dia:string>") + #CRLF$
  s + String("          </dia:attribute>") + #CRLF$
  s + String("          <dia:attribute name=\dqtype\dq>") + #CRLF$
  s + String("            <dia:string>#"+type+"#</dia:string>") + #CRLF$
  s + String("          </dia:attribute>") + #CRLF$
  s + String("          <dia:attribute name=\dqcomment\dq>") + #CRLF$
  s + String("            <dia:string>#"+Comment+"#</dia:string>") + #CRLF$
  s + String("          </dia:attribute>") + #CRLF$
  
  WriteStringN(File, s, #PB_UTF8)
EndProcedure

Procedure UMLWriteOperationEnd(File.l)
  Protected s.s
  
  s = String("        </dia:composite>") + #CRLF$
  
  WriteStringN(File, s, #PB_UTF8)
EndProcedure

Procedure UMLWriteParametersStart(File.l)
  Protected s.s
  
  s = String("          <dia:attribute name=\dqparameters\dq>") + #CRLF$
  
  WriteStringN(File, s, #PB_UTF8)
EndProcedure

Procedure UMLWriteParametersEnd(File.l)
  Protected s.s
  
  s = String("          </dia:attribute>") + #CRLF$
  
  WriteStringN(File, s, #PB_UTF8)
EndProcedure

Procedure UMLWriteParameter(File.l, name.s, type.s, Comment.s)
  Protected s.s
  
  s = String("            <dia:composite type=\dqumlparameter\dq>") + #CRLF$
  s + String("              <dia:attribute name=\dqname\dq>") + #CRLF$
  s + String("                <dia:string>#"+name+"#</dia:string>") + #CRLF$
  s + String("              </dia:attribute>") + #CRLF$
  s + String("              <dia:attribute name=\dqtype\dq>") + #CRLF$
  s + String("                <dia:string>#"+type+"#</dia:string>") + #CRLF$
  s + String("              </dia:attribute>") + #CRLF$
  s + String("              <dia:attribute name=\dqcomment\dq>") + #CRLF$
  s + String("                <dia:string>#"+Comment+"#</dia:string>") + #CRLF$
  s + String("              </dia:attribute>") + #CRLF$
  s + String("            </dia:composite>") + #CRLF$
  
  WriteStringN(File, s, #PB_UTF8)
EndProcedure

Procedure.l UMLWriteConnection(File.l, name.s, FromID.l, ToID.l)
  Protected s.s
  
  s = String("    <dia:object type=\dqUML - Generalization\dq version=\dq1\dq id=\dqO"+Str(IDCounter)+"\dq>") + #CRLF$
  s + String("      <dia:attribute name=\dqname\dq>") + #CRLF$
  s + String("        <dia:string>#"+name+"#</dia:string>") + #CRLF$
  s + String("      </dia:attribute>") + #CRLF$
  s + String("      <dia:connections>") + #CRLF$
  s + String("        <dia:connection handle=\dq0\dq to=\dqO"+Str(ToID)+"\dq connection=\dq6\dq/>") + #CRLF$
  s + String("        <dia:connection handle=\dq1\dq to=\dqO"+Str(FromID)+"\dq connection=\dq1\dq/>") + #CRLF$
  s + String("      </dia:connections>") + #CRLF$
  s + String("    </dia:object>") + #CRLF$
  
  WriteStringN(File, s, #PB_UTF8)
  
  IDCounter + 1
  ProcedureReturn IDCounter - 1
EndProcedure






; 
; If CreateFile(0, "test.dia")
  ; UMLWriteFileStart(0) ;>
    ; 
    ; UMLWriteClassStart(0, "Klasse1", "Classcomment") ;>
      ; UMLWriteAttributesStart(0) ;>
        ; UMLWriteAttribute(0, "Var1", "long", "Attributecomment")
      ; UMLWriteAttributesEnd(0) ;<
      ; 
      ; UMLWriteOperationsStart(0) ;>
        ; UMLWriteOperationStart(0, "func1", "long", "Operationcomment") ;>
          ; UMLWriteParametersStart(0) ;>
            ; UMLWriteParameter(0, "param1", "string", "Parametercomment")
          ; UMLWriteParametersEnd(0) ;<
        ; UMLWriteOperationEnd(0) ;<
      ; UMLWriteOperationsEnd(0) ;<
    ; UMLWriteClassEnd(0) ;<
    ; 
    ; UMLWriteClassStart(0, "Klasse2", "") ;>
      ; 
      ; UMLWriteOperationsStart(0) ;>
        ; UMLWriteOperationStart(0, "func1", "long", "") ;>
        ; UMLWriteOperationEnd(0) ;<
      ; UMLWriteOperationsEnd(0) ;<
    ; UMLWriteClassEnd(0) ;<
    ; 
    ; UMLWriteClassStart(0, "Klasse3", "") ;>
      ; 
      ; UMLWriteOperationsStart(0) ;>
        ; UMLWriteOperationStart(0, "func1", "long", "") ;>
        ; UMLWriteOperationEnd(0) ;<
      ; UMLWriteOperationsEnd(0) ;<
    ; UMLWriteClassEnd(0) ;<
    ; 
    ; UMLWriteConnection(0, "is", 1, 0)
    ; UMLWriteConnection(0, "is", 1, 2)
    ; UMLWriteConnection(0, "is", 2, 0)
  ; UMLWriteFileEnd(0) ;<
  ; 
  ; 
  ; 
  ; CloseFile(0)
; Else
  ; MessageRequester("Error","Couldn't create file.")
; EndIf
Wäre das interessant für jaPBdoc? Ich glaube eher unnötig... oder?