Jump to content

RFC: An icon glyph for "abstract" for LVClasses


Recommended Posts

RFC == Request For Comments.

I got a number of requests at NI Week for some standard iconography for LabVIEW classes. So, I've asked the iconographers internal to NI to produce some glyphs that could be used to annotate icons for classes that have particular functionality. Those glyphs will probably be available later this year. But one in particular is difficult to get right.

An "abstract" class is one that you never intend to actually use for real data. It is an ancestor class that is defining a bunch of methods, but all the real work is done on child classes. So, what is a good glyph for "abstract"? I suggested a Campbell's soup can and Andy Warhol's signature, but that's a bit hard to fit in 16x16 (remember that this is a glyph to be applied to other icons, so we don't have 32x32 to play with). Iconographer Laura Hayden hit upon an interesting idea, and I'd like to get some feedback on it. Drawing on the idea that the abstract class is the ancestor of the real class, and is the prototype for the descendant, she came up with this glyph:

post-5877-1171325346.png?width=400

The double-helix of DNA. I kinda like it. I had resigned myself to "abstract" getting an arbitrary symbol, the way that "create" has the yellow star glyph -- there's no natural association between a yellow star and create, but by repeated usage, the association has been built up in our collective minds. This almost has the right feel -- the genotype that will be shaped by the environment to create the phenotype of the descendant classes. Maybe that's carrying the metaphor too far, but it works for me. I'm curious how others feel.

Link to comment

I don't like the DNA helix -- it signifies heredity, but not abstraction. Abstraction implies the following: indirect, hallow, empty, shell, uncertainty, dynamic, virtual. I've seen conventions where abstract class icons have grey backgrounds and concrete classes have white backgrounds. Grey signifies indirection (abstraction) -- at edit time, you don't know which implementation is actually going to be called. A cloud is another symbol of indirection (a gray cloud, even more so).

Link to comment

I too don't like the DNA thing as it's not abstract at all. Especially not DNA if the name you are going to use is abstract. LabVIEW is uses a lot by life scientists and I don't think they link DNA to concept of abstract class. If you want a symbol for the inheritance, use inheritance tree. I also though of a ghost, but that's kind of stupid too. I think the best I can come up with is some geometrical object. Alternatively greek small letter alpha which symbols both beginning and abstract concept of mathematics. (I don't mean our firend alfa here at LAVA)

Few geometrical objects I came up with. I think wireframe cube or some sort of hollow cube is the best as LabVIEW classes are symbolised by filled cube.

Wireframe cube

CubeFrame_700.gif

Klein Bottle

kbc1.png

Möbius strip

moebius_strip_st.png

Clebsch Diagonal Cubic

clebsc_z.gif

Link to comment

QUOTE(Jim Kring @ Feb 12 2007, 11:48 PM)

Ya, I like this concept too. I think may be the faces of the cube should be semi-transparent so you could see the other faces through and realized that it is empty has opposed to: "it is a white cube with blue edges".

  • Like 1
Link to comment

QUOTE(Jim Kring @ Feb 13 2007, 09:26 AM)

Looks excelent !

I had been thinking earlier about partial things, as an abstract interface is always a partial interface, but I never found a good icon... This cube is very transparent ;)

Joris

Link to comment

Hi,

I think we have consensus for the glyph of abstract class that is a wireframe cube. I'd like to challenge you with another glyph icon. What would be a proper symbol for mixin classes that hopefully will be added to LabVIEW in a future release... ? From wikipedia:

In object-oriented programming languages, a mixin is a class that provides a certain functionality to be inherited by a subclass, but is not meant to stand alone. Inheriting from a mixin is not a form of specialisation but is rather a means to collect functionality. A subclass may even choose to inherit most or all of its functionality by inheriting from one or more mixins through multiple inheritance.
So mixins are a generalization of Java like interfaces in that mixin class can already implement some of the methods. In languages with mixin classes a normal class can inherit from another normal or abstract class and in addition gather methods and private data members from one or more mixin classes.

To avoid method name collisions, the directly inherited methods mask the mixin inherited methods. In addition when inheriting from multiple mixin clases, the mixin class that has been inherited first masks the methods in mixin class that is inhereted second and so on. Behind the scenes mixin classes are normally implemented so that mixin classes are really private data members of the class and method calls are delegated to the private data members by the runtime environment.

A pseudocode example

MyChildClass derives MyAbstractParentClass with MyFirstMixinClass with MySecondMixinClass{	MyMethod(x)  {	   return MixinMethodOfFirstMixinClass(x)+MixinMethodOfSecondMixinClass(x)	}}

Tomi

Link to comment

QUOTE(Tomi Maila @ Feb 13 2007, 10:16 AM)

What would be a proper symbol for http://en.wikipedia.org/wiki/Mixin' target="_blank">mixin classes that hopefully will be added to LabVIEW in a future release... ?

That one sounds easy ... a cube of two or more colors that is half empty (you add the rest when you inherit).

:P Some people might think that as more of the "layered shot" class, and mixin should be a single color with chocolate chips in it. ;-)

Link to comment

The reason I asked about mixin class icons is that if mixin classes will be implemented somtime in the future (Aristos?) then there may really not be difference in the way one creates an abstract class and the way one creates a mixin class. Both are abstract and may have some functionality. The difference becomes in the way developer uses these classes. If the developer directly inherits from the class then it could be called abstract class. On the other hand if developer mixin inherits from the class then the class would be called mixin class. So the usage of the class determines if it is a mixin class or an abstract class. If this will be so in LabVIEW future version, perhaps the icon or glyph of the abstract classes should be such that it also fits to mixin classes. Right? On the other hand if the concepts will be distinct or if mixin classes will never be implemented, then of course I don't give a damn.

Tomi

Link to comment

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.