Hi all -- I'm not sure if I missed it, but does Moose explicitly model the <<creates>> relationship of UML between two classes, e.g., Based on http://themoosebook.org/book/index.html#h1thefamixfamilyofmeta-models I found Entity -> SourcedEntity -> Association -> {Access, Invocation, Inheritance, Reference}. In Moose, I can see outgoingInvocations on methods of a class contain "new X" for all the X that a class creates, but I wondered if there's a more efficient way.
Cheers!
Hi,
no there is nothing special for <<create>>.
"Creation" actually seems something different than the associations you list: Access, Invocation, Inheritance and Reference can be lexically extracted from the source code and they are fundamental mechanisms of many programming languages.
But it should not be too difficult to model it in Famix and post-process a model to discover all occurences
cheers
nicolas
On 29/03/2018 23:25, Cris Fuhrman wrote:
Hi all -- I'm not sure if I missed it, but does Moose explicitly model the <<creates>> relationship of UML between two classes, e.g., Based on http://themoosebook.org/book/index.html#h1thefamixfamilyofmeta-models%C2%A0I found Entity -> SourcedEntity -> Association -> {Access, Invocation, Inheritance, Reference}. In Moose, I can see outgoingInvocations on methods of a class contain "new X" for all the X that a class creates, but I wondered if there's a more efficient way.
Cheers!
Moose-dev mailing list Moose-dev@list.inf.unibe.ch https://www.list.inf.unibe.ch/listinfo/moose-dev
Hi Nicolas,
Thanks - indeed, iterating over Moose class methods with
... methods select: [:m | m kind = 'constructor']
finds all the constructors pretty easily (parentType to find createe). Then it's the incomingInvocations' sender parentType to find the creators.
Cheers!
On Fri, Mar 30, 2018 at 3:15 AM, Nicolas Anquetil <nicolas.anquetil@inria.fr
wrote:
Hi,
no there is nothing special for <<create>>.
"Creation" actually seems something different than the associations you list: Access, Invocation, Inheritance and Reference can be lexically extracted from the source code and they are fundamental mechanisms of many programming languages.
But it should not be too difficult to model it in Famix and post-process a model to discover all occurences
cheers
nicolas
On 29/03/2018 23:25, Cris Fuhrman wrote:
Hi all -- I'm not sure if I missed it, but does Moose explicitly model the <<creates>> relationship of UML between two classes, e.g., Based on http://themoosebook.org/book/index.html# h1thefamixfamilyofmeta-models I found Entity -> SourcedEntity -> Association -> {Access, Invocation, Inheritance, Reference}. In Moose, I can see outgoingInvocations on methods of a class contain "new X" for all the X that a class creates, but I wondered if there's a more efficient way.
Cheers!
Moose-dev mailing listMoose-dev@list.inf.unibe.chhttps://www.list.inf.unibe.ch/listinfo/moose-dev
-- Nicolas Anquetil RMod team -- Inria Lille
Moose-dev mailing list Moose-dev@list.inf.unibe.ch https://www.list.inf.unibe.ch/listinfo/moose-dev
+1
Doru
On Apr 1, 2018, at 5:58 AM, Cris Fuhrman fuhrmanator@gmail.com wrote:
Hi Nicolas,
Thanks - indeed, iterating over Moose class methods with
... methods select: [:m | m kind = 'constructor']
finds all the constructors pretty easily (parentType to find createe). Then it's the incomingInvocations' sender parentType to find the creators.
Cheers!
On Fri, Mar 30, 2018 at 3:15 AM, Nicolas Anquetil nicolas.anquetil@inria.fr wrote: Hi,
no there is nothing special for <<create>>.
"Creation" actually seems something different than the associations you list: Access, Invocation, Inheritance and Reference can be lexically extracted from the source code and they are fundamental mechanisms of many programming languages.
But it should not be too difficult to model it in Famix and post-process a model to discover all occurences
cheers nicolas
On 29/03/2018 23:25, Cris Fuhrman wrote:
Hi all -- I'm not sure if I missed it, but does Moose explicitly model the <<creates>> relationship of UML between two classes, e.g., <image.png> Based on http://themoosebook.org/book/index.html#h1thefamixfamilyofmeta-models I found Entity -> SourcedEntity -> Association -> {Access, Invocation, Inheritance, Reference}. In Moose, I can see outgoingInvocations on methods of a class contain "new X" for all the X that a class creates, but I wondered if there's a more efficient way.
Cheers!
Moose-dev mailing list
Moose-dev@list.inf.unibe.ch https://www.list.inf.unibe.ch/listinfo/moose-dev
-- Nicolas Anquetil RMod team -- Inria Lille
Moose-dev mailing list Moose-dev@list.inf.unibe.ch https://www.list.inf.unibe.ch/listinfo/moose-dev
Moose-dev mailing list Moose-dev@list.inf.unibe.ch https://www.list.inf.unibe.ch/listinfo/moose-dev
-- www.tudorgirba.com www.feenk.com
“Programming is executable philosophy."
Here's a script that I ran on an MSE generated from Java code at https://github.com/bethrobson/Head-First-Design-Patterns to show the <<creates>> relationships in the AbstractFactory example.
I had some trouble with RTMondrian and custom composite shapes. I wasn't able to set the colors of the individual elements in the RTCompositeShape that I passed for the nodes. I tried working around it with @RTLabeled, but it prints an "X" where the Character cr is in the string (rather than wrapping). Finally it kind of works with border/fill/textColor: on the RTMondrian shape, but it's not what I expected.
============================
"blocks for readability"
findCreators := [ :class | | findConstructors creators | findConstructors := [ :cclass | cclass methods select: [ :m | m kind = 'constructor'] ]. creators := Set new. (findConstructors value: class) do: [ :method | method incomingInvocations do: [ :ii | creators add: ii sender parentType ] ]. creators. ].
newLine := Character cr asString.
camelWrap := [ :class | rex := '([a-z])([A-Z])' asRegex. rex copy: class name translatingMatchesUsing: [ :each | (each at:1) asString, newLine, (each at:2) asString ] ].
classes := MooseModel root allModels first allClasses select: [ :c | c mooseName beginsWith: 'headfirst::designpatterns::factory::pizzaaf'].
thinArrow := RTDecoratedLine new head: (RTFilledNarrowArrow asHead); attachPoint: (RTBorderAttachPoint new); width: 2.
"inheritanceArrow := RTDecoratedLine new head: (RTEmptyNarrowArrow asHead); attachPoint: (RTBorderAttachPoint new); width: 2."
myClassShape := RTCompositeShape new add: (RTBox new); add: (RTLabel new text:camelWrap); allOfSameSizeWithPadding.
b := RTMondrian new. b shape shape: myClassShape; borderColor: Color black; fillColor: Color paleYellow; textColor: Color black. b nodes: classes. b shape shape: thinArrow; color: Color veryLightGray. b edges moveBehind; connectFromAll: findCreators. "b shape shape: inheritanceArrow; color: Color green; withShorterDistanceAttachPoint. b edges connectToAll: #directSuperclasses." b layout dominanceTree verticalGap: 80; horizontalGap: 5. b build. b view @ RTZoomableView. ^ b
=======================================
Adding inheritance to the tree is commented out, but it makes for a mess when laying out both creation and dependency.
I had wanted to use RTUMLClassBuilder to show the <<creates>> relations, but finally I gave up since it appears to have inheritance only hard-coded in the edges. I remember someone saying it should/would be re-done with RTEdgeBuilder, so I'm looking forward to that.
Another suggestion for RTUMLClassBuilder would be a message forMooseClasses (at least with Java in Moose, maybe forMooseJavaClasses?) message that has these values:
forMooseClasses self classname: #name. self instanceVariables: #attributes. self methodsNames: #methods. self superclass: #superclass. self methodselector: #signature. self attributeselector: #name
It yields something like this which is nice:
Hope this feedback is useful.
Cheers,
C. Fuhrman
On Sun, Apr 1, 2018 at 1:18 AM, Tudor Girba tudor@tudorgirba.com wrote:
+1
Doru
On Apr 1, 2018, at 5:58 AM, Cris Fuhrman fuhrmanator@gmail.com wrote:
Hi Nicolas,
Thanks - indeed, iterating over Moose class methods with
... methods select: [:m | m kind = 'constructor']
finds all the constructors pretty easily (parentType to find createe).
Then it's the incomingInvocations' sender parentType to find the creators.
Cheers!
On Fri, Mar 30, 2018 at 3:15 AM, Nicolas Anquetil <
nicolas.anquetil@inria.fr> wrote:
Hi,
no there is nothing special for <<create>>.
"Creation" actually seems something different than the associations you
list: Access, Invocation, Inheritance and Reference can be lexically extracted from the source code and they are fundamental mechanisms of many programming languages.
But it should not be too difficult to model it in Famix and post-process
a model to discover all occurences
cheers nicolas
On 29/03/2018 23:25, Cris Fuhrman wrote:
Hi all -- I'm not sure if I missed it, but does Moose explicitly model
the <<creates>> relationship of UML between two classes, e.g.,
<image.png> Based on http://themoosebook.org/book/index.html#h1thefamixfamilyofme
ta-models I found Entity -> SourcedEntity -> Association -> {Access, Invocation, Inheritance, Reference}. In Moose, I can see outgoingInvocations on methods of a class contain "new X" for all the X that a class creates, but I wondered if there's a more efficient way.
Cheers!
Moose-dev mailing list
Moose-dev@list.inf.unibe.ch https://www.list.inf.unibe.ch/listinfo/moose-dev
-- Nicolas Anquetil RMod team -- Inria Lille
Moose-dev mailing list Moose-dev@list.inf.unibe.ch https://www.list.inf.unibe.ch/listinfo/moose-dev
Moose-dev mailing list Moose-dev@list.inf.unibe.ch https://www.list.inf.unibe.ch/listinfo/moose-dev
-- www.tudorgirba.com www.feenk.com
“Programming is executable philosophy."
Moose-dev mailing list Moose-dev@list.inf.unibe.ch https://www.list.inf.unibe.ch/listinfo/moose-dev