Thread from comp.lang.tcl (1 reply)

OOP design choices
Posted by Luc <luc@sep.invalid> 3 days 8 hours ago

I am rewriting my application which has tabs.

Now I hesitate. Which is better?

1. Create the overall GUI and code as procedural and the tabs as 
objects/a class.

2. Create the overall GUI as a big object (superclass) with tabs as 
subclasses.

3. Create the overall GUI as an object/class with tabs as separate
classes.

4. Create the overall GUI as a big object (superclass) with tabs as 
methods.

Thank you for any ideas.


-- 
Luc
>>

Click on article to view all threads in comp.lang.tcl
Re: OOP design choices
Posted by Rich <rich@example.invalid> 3 days 4 hours ago

Luc <luc@sep.invalid> wrote:
> I am rewriting my application which has tabs.
> 
> Now I hesitate. Which is better?
> 
> 1. Create the overall GUI and code as procedural and the tabs as 
> objects/a class.

If by "has tabs" you are referring to the project you posted about here 
some months ago, then this layout (with each tab being backed by an 
object) would be most similar to what you have now.  Your 'namespaces' 
per tab were becoming very "home-made object" like as you progressed.

> 2. Create the overall GUI as a big object (superclass) with tabs as 
> subclasses.

Here I suspect you may be getting confused by the implementation detail 
in TclOO that classes are themselves 'objects'.  While TclOO would 
allow you to use the 'superclass' itself as an object for the overall 
GUI, such usage is not the typical usage of classes/superclasses.  The 
class/superclass concept is traditionally used to create a templating 
system for creating the end objects that are used by the code.  A class 
groups together all the common aspects (variables/methods) of a set of 
objects (i.e., that mammals all have hair) so you can define the 
commonality once, and then use the template (the class) to stamp out 
objects that differ only in things specific to that object (i.e., that 
one has blue eyes, the other brown eyes).  Superclasses then are 
typically used to stamp out similar classes by grouping all the 
commonality into one place, and then each stamped out class is tweaked 
just a little for the small difference it has from other classes 
stamped out from that superclass.

> 3. Create the overall GUI as an object/class with tabs as separate
> classes.

This is also another way, although the conventional description would 
be the GUI as one object, and each tab as its own object.

But do you have gui aspects that are independent of each tab?  If yes, 
then this (or #1) would be a somewhat conventional design, provided you 
used objects for the tabs rather than TclOO classes.  You can have a 
'class' that holds all the common aspects of a tab, but you'd stamp out 
an object from the class to be the backing handler of a given tab.

> 4. Create the overall GUI as a big object (superclass) with tabs as 
> methods.

Not really object oriented in the conventional sense.  This is simply 
taking your existing procedural code, wrapping it in a thin veil of 
"OO" and calling the result "OO".  This just gives you OO in name only 
with everything simply being procedural inside.

Click on article to view all threads in comp.lang.tcl