While changing the ISA relationships of a class is possible - it's not something that you will often need to do.

A more common perl idiom for changing an objects behaviour is to bless it into another package. You can use this as one way to implement OO state transition systems in perl. Again, this is not something to be done casually.

Part of your confusion might be because of the common misconception that ISA is the only kind of relationship in OO development. It isn't - it's just the most obvious one because it's supported by explicit language constructs.

Other relationships you will see in OO design include:

All these relationships are largely orthagonal to isa relationships. Take a look at Class::Delegation for one way to make these other relationships more explicit.

I'd recommend reading some general OO texts. One of my personal favourites is Meyer's Object Oriented Software Construction. A good read.

Aspect-oriented programming (for perl take a look at the Aspect modules) is another way of looking at the various relationships between objects and classes. I'm not really convinced that this is as radical approach to development as some people say - but it makes interesting reading.

If your problem is purely about categorisation you may find it helpful to look at some of the methods and techniques from artifical intelligence research - the AI:: modules might be a useful starting point.

In reply to Re: perspective and object-disorientation by adrianh
in thread perspective and object-disorientation by Ctrl-z

Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post; it's "PerlMonks-approved HTML":

  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.