This recommendation is intended to encourage more robust OO encapsulation practices, but is not enforceable with a Webel ADT anyway, since given an ADT "instance" variable any client can of course still access any wrapped content. For example, for a base ADT wrapping a single expression the wrapped expression can still be accessed as the 1st Part:
adt1 = ADT["anything"]
ADT["anything"]
adt1[[1]]
"anything"
Compare with, say, a Java class with a private field populated by construction but with no public accessor. By language design clients can't access the field value.
In principle, a well designed ADT will offer value-adding methods that use the wrapped primary '$$' expression (and any other wrapped expressions); if a client is accessing the wrapped '$$' it may be side-stepping the entire reason for having the ADT in the first place (breaking the "The Law of Demeter" if '$$' is an ADT).
Where a client is to be permitted access to the wrapped primary '$$' anyway, it's best to use an additional method that just delegates to the get
method but has a name that makes its purpose in exposing the wrapped primary '$$' clear.
Closely related "friend" ADT classes within a single Package may freely access get
.
Relates to: