2011-10-19 17 views
15

¿Hay herramientas UML disponibles para Scala? El motivo de mi pregunta es que se trata de una combinación de conceptos funcionales y OO, por lo que me gustaría saber cómo estas herramientas denotan funciones en los diagramas UML.herramientas UML para Scala

Respuesta

22

Este thread resume los obstáculos enfrentados por cualquier herramienta UML queriendo representar clases Scala:

  • no hay representación oficial de mixins en UML
  • es difícil de representar:
    • cierres
    • miembros del tipo Scala
    • límites de parámetros de constructor de clases (a.k.a. "plantilla tipo" límites/limitaciones)
    • covariante y clase contravariant constructor de herencia
    • la relación entre una clase o rasgo y el objeto compañero

Esta tesis ("Evaluierung des Einsatzes von Scala bei der Entwicklung für die Android-Plattform", pdf, alemán) agrega estereotipos para las mezclas de rasgos y otros elementos específicos de scala (pág. 146).

Lo que se añadió por Meiko Rachimow en 2009:

atributos, get y set

Scala attributes

Para todos los atributos publicados existen captador implícita (attribute1 y attribute2), excepto la la visibilidad fue declarada como private (attribute3). Si los atributos publicados se etiquetan con un estereotipo Var, son variables, para las cuales existe un setter implícito (attribute2). El estereotipo lazy marca las variables de instancia como flojas (attribute4).

clases y genéricos

Scala class and genericity

Al igual que en UML, clases genéricas están marcados con un tipo abstracto. Al usar la sintaxis del lenguaje Scala, se pueden declarar límites superiores e inferiores para este tipo (EineKlasse). Es posible usar tipos estructurados como límites, cuyos atributos y métodos se incluyen con llaves (EineKlasse2). Los parámetros de tipo genérico de los métodos se incluyen entre corchetes (operation).

rasgos

Scala traits in UML

rasgos se muestran como las clases abstractas y etiquetados con el estereotipo trait. Los atributos y métodos abstractos se muestran en cursiva (attribute2, operation2). Para los atributos abstractos, la flecha de dependencia se puede etiquetar con el estereotipo requires (Trait3, attribute3). Por otro lado, el estereotipo self se utiliza para tipos de autorreferencia (Trait4). Si un rasgo hereda otro rasgo, la herencia se muestra con una flecha de herencia (Trait2). Este tipo de flecha se usa también, si una clase extiende un rasgo (Klasse). Para enfatizar la "mezcla" de rasgos, la flecha de herencia se puede etiquetar con el estereotipo mixin (Klasse).

Singleton objetos

Scala singleton in UML

objetos Singleton se muestran como las clases y etiquetados con el estereotipo singleton. Es posible que existan dos elementos de clase con el mismo nombre. De hecho, es un objeto singleton con la clase compañera de pertenencia. En este caso, la flecha de dependencia está etiquetada con el estereotipo hasA.

+0

En realidad, el enlace a la tesis no funciona. –

+0

@PeterSchmitz: he arreglado el enlace a ese archivo PDF. – VonC

+1

@VonC Realmente me ayudaría (y podría haber otros) si puede agregar firmas de scala (o esqueletos) para el diagrama de clases de rasgos. (por ejemplo, 'trait Trait2 extends Trait', etc.) – dips

1

Acabo de probar el Green UML Eclipse plugin. Hace algunos meses no funcionó, pero con la versión nocturna Scala IDE, abril de 2012) puede obtener algún tipo de diagrama de clases. Parece prometedor.

2

Puede intentar (experimental) Dia2Scala herramienta. Notation utilizado por este generador de códigos se basa en una notación de la tesis de Meiko Rachimow (descrita en answer de VonC).

+0

Parece prometedor. Pero, ¿puede generar un diagrama a partir del código? –

+0

@ Wei-ChingLin No, es solo una herramienta de una sola manera: dia -> scala. Escribir un analizador de Scala podría ser bastante difícil, imagino. – monnef