Beefy Boxes and Bandwidth Generously Provided by pair Networks
Think about Loose Coupling
 
PerlMonks  

Re^6: Aspect-Oriented Programming: Couple of Short Examples

by adrianh (Chancellor)
on Aug 07, 2003 at 08:51 UTC ( #281793=note: print w/ replies, xml ) Need Help??


in reply to Re5: Aspect-Oriented Programming: Couple of Short Examples
in thread Aspect-Oriented Programming: Couple of Short Examples

I'm curious - how do you see Perl or C++ or Java lacking this behavior?

Because Perl, C++ and Java do not have metaclasses.

I know that my personal baseclass has the following lines in the new() call:

That's the difference. You have to add code to the new() call. In Python (or other languages with appropriate metaclass support) you don't have to change your baseclass's methods at all, you just say that your base class is implemented via a specific metaclass. The metaclass behaviour is completely separated from the object classes implementation.

For example, imagine that the behaviour we wanted to add to object initialisation was logging. Now imagine that our logging requirements change and we need to log all access to object mutators in addition to object initialisation. In a language without metaclasses we would have to add a method call to every mutator. With a metaclass you just have to change the way that mutators are implemented to include a call to the logging routines.


Comment on Re^6: Aspect-Oriented Programming: Couple of Short Examples
Re7: Aspect-Oriented Programming: Couple of Short Examples
by dragonchild (Archbishop) on Aug 07, 2003 at 13:05 UTC
    *laughs* Then I must've accidentally implemented a metaclass that does all my OO book-keeping for me. All my mutators are defined using closures over an array data structure whose reference is blessed. So, if I wanted to add logging to all mutators, I change the way the mutators are created. (In fact, I do this on a regular basis.)

    My baseclass gives me access to doing things during:

    • Object instantiation
    • Mutator access
    • Attribute definition
    • Object initialization
    What other actions do I need to provide traps for?

    ------
    We are the carpenters and bricklayers of the Information Age.

    The idea is a little like C++ templates, except not quite so brain-meltingly complicated. -- TheDamian, Exegesis 6

    Please remember that I'm crufty and crochety. All opinions are purely mine and all code is untested, unless otherwise specified.

      Then I must've accidentally implemented a metaclass that does all my OO book-keeping for me.

      Me too ;-)

      However, it's nice to work in a language where you don't have to reinvent this wheel by yourself. With metaclasses you can do this sort of thing for all classes - rather than just the ones you have had the foresight to add a flexible base class to.

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://281793]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others scrutinizing the Monastery: (9)
As of 2014-08-28 03:50 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The best computer themed movie is:











    Results (255 votes), past polls