Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl Monk, Perl Meditation
 
PerlMonks  

Re: Re: Perl - Is it an OO Language

by stefp (Vicar)
on Aug 27, 2002 at 00:34 UTC ( [id://193055]=note: print w/replies, xml ) Need Help??


in reply to Re: Perl - Is it an OO Language
in thread Perl - Is it an OO Language

Perl's OO encapsulation is weak at best

There can be levels of encapsulation. And this may not be a good thing. Acording to Stroustrup in C++ there is one too many. In The design and evolution of C++ page 302 he says In retrospect, I think that protect is a case where "good arguments" and fashion overcame my better judgement and my rules of thumb for accepting new features. Admittedly in Perl there is no level of encapsulation. Object variable members are accessible to anyone but people cannot access one by mistake unlike C++ because in Perl one must explicitly mention the object when accessible a member variable $self->{var}. Perl6 will probably be hoepfully less verbose while still avoiding the C++ potnetial ambiguity: $.var (note the dot that means that a member variable is accessed). In C++, in a member method, you can access by mistake a member variable of the class or a parent class when you thought you were accessing a global variable or if you forgot to declare the lexical variable you use.

Also there is two kinds of encapsulation: forced or not. In perl no one is ever forced to anything. As I said before, there is encapsulation in the sense that no one can unwillingly access object data.

BTW: C++ forced encapsulation is a joke because it is so easy to defeat. It is just a compilation thing, no check at link time:

#define private public #define protected public #define class struct

Anyway, one must always be careful of language comparaison because one always uses the metric adapted for its favorite language. Judging a language only for its OO-ness is a very restricted view in my opinion.

In fact pure OO language are insanely verbose for the "Hello World" test. One of the perl feat is to scale from oneliners to moderately big programs. In this case, good score in the "pure OO-ness" metric is a _bad_ thing.

Corrected the Stroustrup reference

-- stefp -- check out TeXmacs wiki

Replies are listed 'Best First'.
Re: Re: Re: Perl - Is it an OO Language
by John M. Dlugosz (Monsignor) on Aug 27, 2002 at 15:20 UTC
    C++ private/public is checked at link time. If you compile the code as private, then change the header to read public and compile a client of the class, the problem will be caught at link time because the attributes are encoded in the name.

    If you defeat that, it might not work at all because the ordering may change in the layout of the data or virtual functions!

Re x3: Perl - Is it an OO Language
by stefp (Vicar) on Aug 27, 2002 at 19:11 UTC
    This must be platform dependant because on my linux box with g++ 3.2. I get to link and execute.

    John M. Dlugosz. Are you sure of what you say? Sorry about the off topic. ==toto.h

    class A { int ma; void printit(); A::A() : ma(666) {} };
    ==toto1.cc
    #include "iostream" #define class struct #include "toto.h" main() { A a; std::cerr << a.ma << "\n"; a.printit(); }
    ==toto2.cc
    #include "iostream" #include "toto.h" void A::printit() { std::cerr << ma << "\n"; }
    ===Compilation, link, execution
    $ g++ -c toto1.cc -o toto1.o $ g++ -c toto2.cc -o toto2.o In file included from toto2.cc:2: toto.h:1: warning: all member functions in class `A' are private $ g++ toto*.o -o a.out $ ./a.out 666 666 $
      I suppose it's implementation-dependant as to whether this is actually checked. I suppose it's a tradeoff on whether you fail to link if you change the protection but "handle" overloading based on protection! I recall at least one compiler that checked, but it may be because it was more aggressive at optimizing and rearranging things.

      For a virtual function, re-ordering the definitions will indeed change things on any known compiler.

Log In?
Username:
Password:

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

How do I use this?Last hourOther CB clients
Other Users?
Others goofing around in the Monastery: (5)
As of 2024-03-28 13:10 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found