I am speaking of Perl's OO encapsulation being weak, and it is. Yes
you can acheive various degrees of encapsulation, but at a
cost (or in Damian's words, by turning Perl's flexibility against
itself). I think saying that Perl's OO encapsulation is 'weak
at best' is a fair statement.
| [reply] |
You keep using the phrase "weak at best". I do not think it means what you think it means.
Feel free to explain how an enclosed lexical is "weakly" encapsulated. It may not be the most popular way of creating an object property, but it is a deliberate language feature.
| [reply] |
We have mixed meanings happening. My statement was not in reference
to how strong an encapsulation we can achieve using various
techniques (flyweight, closure, etc), but that Perl's support is weak
(if you want it, you'll need to do it yourself and subclassers will
need to know your internal implementation details in order to cooperate).
| [reply] |
| [reply] |
It isn't weak, it's flexible. It's that simple
And C isn't a weak OO language, it's flexible! You have the freedom
to build any OO framework you like with C. I'll leave you with a
quote from TheDamian's book (page 296):
Encapsulation is one of the cornerstones of object orientation,
but it's the area in which Perl's support for object-oriented
programming is the weakest. ..... Fortunately, Perl's flexibility
can be turned against itself to provide a means of building
objects that respect the encapsulation imposed by their classes.
And this node for a discussion of (and solution for in
followup) how Perl's simple inheritance breaks encapsulation of
the superclass. I justify my original comment on the basis that
if you need to jump through hoops to get some feature (in this case
encapsulation), support for that feature is 'weak'.
| [reply] |
Is that can in the same vein as "you can write structured if/while/etc code in assembly language."?
Perl can do a great deal. I think the question is arguing semantics on how much innate support is required to be an OO language.
My design is object-oriented. It's implemented in Perl. QED?
—John | [reply] |