Re: eliminate EXTENSIBLE types?

From: H. v. L. <"H.>
Date: Sun, 03 Oct 2004 16:54:17 +0200

----boundary-LibPST-iamunique-1167639339_-_-
Content-type: text/plain

On Sun, 03 Oct 2004 17:36:26 +0400, Fyodor Tkachov
<fyodor.tkachov{([at]})nowhere.xy


> why not use simple procedures (not methods) instead of initialization
> methods which you'd like to invoke as supercalls?
> The only objection I see is a somewhat more verbose code (module names
> have to be called) -- but then there can be no confusion in regard of
> which procedure is being called.

I see more than this in the use of a method. Any (normal) procedure may be
activated by any"one", a method only by the owner, i. e. an object of the
correct type. Of course you can avoid OOP alltogether and the code may
even be more effective. But I believe encapsulation to be quite useful.
For example you somewhere have a list structure (a type Queue) which
inside its own scope (a module) manages elements of a type Element. The
class Element is abstract but not empty. It must possess a method Init, so
that it's private fields and methods are dealt with in a controlled
fashion. Class Element being ABSTRACT, Objects of subclasses can be
inserted into and eliminated from the queue. The containing module is
accessible via it's interface only so the Init method of Element wil have
to be exported and EXTENSIBLE as objects of sub(sub)classes must have
access to it and may extend it.
In order to deal with more specialized objects a subclass Part inherits
 from Element, adds some more (eventually private) attributes and methods,
but being still too general for some special purpose this class as well is
abstract. Nevertheless its fields and methods must be initialized as have
been the fields and methods of the superclass Element so it has its own
Init method overriding the inherited Init (and using it via a supercall).
Finally there is a concrete (hidden) class CarPart, again in a different
module adding even more attributes which have to be initialized.

> An Init for a LIMITED type ought to be hidden anyway within a factory
> procedure/method (belonging to another type).

Of course will there be a constructor creating a new CarPart object and
initialising it properly. And then you find the situation I sketched. The
constructor activates the Init method from CarPart. This method
necessarily has to activate the Init of it's superclass Part because
otherwise ...? And again the Init of the super(super)class Element must be
called because otherwise ...?
Now, that was the idea behind my example and I don't see how to do the job
without supercalls, unless you follow the way outlined in my alternative
which avoids supercalls but introduces other (and in my opinion) more
dangerous problems.

> Also, LIMITED types are introduced to ensure that the creator can
> guarantee their invariants, the client is not supposed to have access to
> that.

That' exactly what is supposed in the above example.

Regards

H. v. Lavergne
--------------------------------------------

To unsubscribe from this mailing list, send a message containing the word "unsubscribe" to:
   blackbox-request{([at]})nowhere.xy

To get a list of valid e-mail commands and instructions on their usage, send a message containing the word "help" to the above address.

Send any problem reports or questions related to this email list to the list owner at
   owner-blackbox{([at]})nowhere.xy

Current posting policy:

a) To post you should use the same address by which you are subscribed to the mailing list. That way, the list server will recognize you as subscriber and forward your posting immediately, without creating any overhead.

b) If, for some reason, you cannot post from the address, by which you are subscribed, your message will be moderated to avoid spam. Please understand that moderation will often cause some delay, in particular over weekends or holydays.


----boundary-LibPST-iamunique-1167639339_-_-
Content-type: application/rtf
Content-transfer-encoding: base64
Content-Disposition: attachment; filename="rtf-body.rtf"

e1xydGYxXGFuc2lcYW5zaWNwZzEyNTJcZnJvbXRleHQgXGRlZmYwe1xmb250dGJsDQp7XGYwXGZz
d2lzcyBBcmlhbDt9DQp7XGYxXGZtb2Rlcm4gQ291cmllciBOZXc7fQ0Ke1xmMlxmbmlsXGZjaGFy
c2V0MiBTeW1ib2w7fQ0Ke1xmM1xmbW9kZXJuXGZjaGFyc2V0MCBDb3VyaWVyIE5ldzt9fQ0Ke1xj
b2xvcnRibFxyZWQwXGdyZWVuMFxibHVlMDtccmVkMFxncmVlbjBcYmx1ZTI1NTt9DQpcdWMxXHBh
cmRccGxhaW5cZGVmdGFiMzYwIFxmMFxmczIwIE9uIFN1biwgMDMgT2N0IDIwMDQgMTc6MzY6MjYg
KzA0MDAsIEZ5b2RvciBUa2FjaG92ICBccGFyDQo8ZnlvZG9yLnRrYWNob3ZAY2Vybi5jaD4gd3Jv
dGU6XHBhcg0KXHBhcg0KXHBhcg0KPiB3aHkgbm90IHVzZSBzaW1wbGUgcHJvY2VkdXJlcyAobm90
IG1ldGhvZHMpIGluc3RlYWQgb2YgaW5pdGlhbGl6YXRpb24gIFxwYXINCj4gbWV0aG9kcyB3aGlj
aCB5b3UnZCBsaWtlIHRvIGludm9rZSBhcyBzdXBlcmNhbGxzP1xwYXINCj4gVGhlIG9ubHkgb2Jq
ZWN0aW9uIEkgc2VlIGlzIGEgc29tZXdoYXQgbW9yZSB2ZXJib3NlIGNvZGUgKG1vZHVsZSBuYW1l
cyAgXHBhcg0KPiBoYXZlIHRvIGJlIGNhbGxlZCkgLS0gYnV0IHRoZW4gdGhlcmUgY2FuIGJlIG5v
IGNvbmZ1c2lvbiBpbiByZWdhcmQgb2YgIFxwYXINCj4gd2hpY2ggcHJvY2VkdXJlIGlzIGJlaW5n
IGNhbGxlZC5ccGFyDQpccGFyDQpJIHNlZSBtb3JlIHRoYW4gdGhpcyBpbiB0aGUgdXNlIG9mIGEg
bWV0aG9kLiBBbnkgKG5vcm1hbCkgcHJvY2VkdXJlIG1heSBiZSAgXHBhcg0KYWN0aXZhdGVkIGJ5
IGFueSJvbmUiLCBhIG1ldGhvZCBvbmx5IGJ5IHRoZSBvd25lciwgaS4gZS4gYW4gb2JqZWN0IG9m
IHRoZSAgXHBhcg0KY29ycmVjdCB0eXBlLiBPZiBjb3Vyc2UgeW91IGNhbiBhdm9pZCBPT1AgYWxs
dG9nZXRoZXIgYW5kIHRoZSBjb2RlIG1heSAgXHBhcg0KZXZlbiBiZSBtb3JlIGVmZmVjdGl2ZS4g
QnV0IEkgYmVsaWV2ZSBlbmNhcHN1bGF0aW9uIHRvIGJlIHF1aXRlIHVzZWZ1bC5ccGFyDQpGb3Ig
ZXhhbXBsZSB5b3Ugc29tZXdoZXJlIGhhdmUgYSBsaXN0IHN0cnVjdHVyZSAoYSB0eXBlIFF1ZXVl
KSB3aGljaCAgXHBhcg0KaW5zaWRlIGl0cyBvd24gc2NvcGUgKGEgbW9kdWxlKSBtYW5hZ2VzIGVs
ZW1lbnRzIG9mIGEgdHlwZSBFbGVtZW50LiBUaGUgIFxwYXINCmNsYXNzIEVsZW1lbnQgaXMgYWJz
dHJhY3QgYnV0IG5vdCBlbXB0eS4gSXQgbXVzdCBwb3NzZXNzIGEgbWV0aG9kIEluaXQsIHNvICBc
cGFyDQp0aGF0IGl0J3MgcHJpdmF0ZSBmaWVsZHMgYW5kIG1ldGhvZHMgYXJlIGRlYWx0IHdpdGgg
aW4gYSBjb250cm9sbGVkICBccGFyDQpmYXNoaW9uLiBDbGFzcyBFbGVtZW50IGJlaW5nIEFCU1RS
QUNULCBPYmplY3RzIG9mIHN1YmNsYXNzZXMgY2FuIGJlICBccGFyDQppbnNlcnRlZCBpbnRvIGFu
ZCBlbGltaW5hdGVkIGZyb20gdGhlIHF1ZXVlLiBUaGUgY29udGFpbmluZyBtb2R1bGUgaXMgIFxw
YXINCmFjY2Vzc2libGUgdmlhIGl0J3MgaW50ZXJmYWNlIG9ubHkgc28gdGhlIEluaXQgbWV0aG9k
IG9mIEVsZW1lbnQgd2lsIGhhdmUgIFxwYXINCnRvIGJlIGV4cG9ydGVkIGFuZCBFWFRFTlNJQkxF
IGFzIG9iamVjdHMgb2Ygc3ViKHN1YiljbGFzc2VzIG11c3QgaGF2ZSAgXHBhcg0KYWNjZXNzIHRv
IGl0IGFuZCBtYXkgZXh0ZW5kIGl0LlxwYXINCkluIG9yZGVyIHRvIGRlYWwgd2l0aCBtb3JlIHNw
ZWNpYWxpemVkIG9iamVjdHMgYSBzdWJjbGFzcyBQYXJ0IGluaGVyaXRzICBccGFyDQogZnJvbSBF
bGVtZW50LCBhZGRzIHNvbWUgbW9yZSAoZXZlbnR1YWxseSBwcml2YXRlKSBhdHRyaWJ1dGVzIGFu
ZCBtZXRob2RzLCAgXHBhcg0KYnV0IGJlaW5nIHN0aWxsIHRvbyBnZW5lcmFsIGZvciBzb21lIHNw
ZWNpYWwgcHVycG9zZSB0aGlzIGNsYXNzIGFzIHdlbGwgaXMgIFxwYXINCmFic3RyYWN0LiBOZXZl
cnRoZWxlc3MgaXRzIGZpZWxkcyBhbmQgbWV0aG9kcyBtdXN0IGJlIGluaXRpYWxpemVkIGFzIGhh
dmUgIFxwYXINCmJlZW4gdGhlIGZpZWxkcyBhbmQgbWV0aG9kcyBvZiB0aGUgc3VwZXJjbGFzcyBF
bGVtZW50IHNvIGl0IGhhcyBpdHMgb3duICBccGFyDQpJbml0IG1ldGhvZCBvdmVycmlkaW5nIHRo
ZSBpbmhlcml0ZWQgSW5pdCAoYW5kIHVzaW5nIGl0IHZpYSBhIHN1cGVyY2FsbCkuXHBhcg0KRmlu
YWxseSB0aGVyZSBpcyBhIGNvbmNyZXRlIChoaWRkZW4pIGNsYXNzIENhclBhcnQsIGFnYWluIGlu
IGEgZGlmZmVyZW50ICBccGFyDQptb2R1bGUgYWRkaW5nIGV2ZW4gbW9yZSBhdHRyaWJ1dGVzIHdo
aWNoIGhhdmUgdG8gYmUgaW5pdGlhbGl6ZWQuXHBhcg0KXHBhcg0KPiBBbiBJbml0IGZvciBhIExJ
TUlURUQgdHlwZSBvdWdodCB0byBiZSBoaWRkZW4gYW55d2F5IHdpdGhpbiBhIGZhY3RvcnkgIFxw
YXINCj4gcHJvY2VkdXJlL21ldGhvZCAoYmVsb25naW5nIHRvIGFub3RoZXIgdHlwZSkuXHBhcg0K
XHBhcg0KT2YgY291cnNlIHdpbGwgdGhlcmUgYmUgYSBjb25zdHJ1Y3RvciBjcmVhdGluZyBhIG5l
dyBDYXJQYXJ0IG9iamVjdCBhbmQgIFxwYXINCmluaXRpYWxpc2luZyBpdCBwcm9wZXJseS4gQW5k
IHRoZW4geW91IGZpbmQgdGhlIHNpdHVhdGlvbiBJIHNrZXRjaGVkLiBUaGUgIFxwYXINCmNvbnN0
cnVjdG9yIGFjdGl2YXRlcyB0aGUgSW5pdCBtZXRob2QgZnJvbSBDYXJQYXJ0LiBUaGlzIG1ldGhv
ZCAgXHBhcg0KbmVjZXNzYXJpbHkgaGFzIHRvIGFjdGl2YXRlIHRoZSBJbml0IG9mIGl0J3Mgc3Vw
ZXJjbGFzcyBQYXJ0IGJlY2F1c2UgIFxwYXINCm90aGVyd2lzZSAuLi4/IEFuZCBhZ2FpbiB0aGUg
SW5pdCBvZiB0aGUgc3VwZXIoc3VwZXIpY2xhc3MgRWxlbWVudCBtdXN0IGJlICBccGFyDQpjYWxs
ZWQgYmVjYXVzZSBvdGhlcndpc2UgLi4uP1xwYXINCk5vdywgdGhhdCB3YXMgdGhlIGlkZWEgYmVo
aW5kIG15IGV4YW1wbGUgYW5kIEkgZG9uJ3Qgc2VlIGhvdyB0byBkbyB0aGUgam9iICBccGFyDQp3
aXRob3V0IHN1cGVyY2FsbHMsIHVubGVzcyB5b3UgZm9sbG93IHRoZSB3YXkgb3V0bGluZWQgaW4g
bXkgYWx0ZXJuYXRpdmUgIFxwYXINCndoaWNoIGF2b2lkcyBzdXBlcmNhbGxzIGJ1dCBpbnRyb2R1
Y2VzIG90aGVyIChhbmQgaW4gbXkgb3BpbmlvbikgbW9yZSAgXHBhcg0KZGFuZ2Vyb3VzIHByb2Js
ZW1zLlxwYXINClxwYXINCj4gQWxzbywgTElNSVRFRCB0eXBlcyBhcmUgaW50cm9kdWNlZCB0byBl
bnN1cmUgdGhhdCB0aGUgY3JlYXRvciBjYW4gIFxwYXINCj4gZ3VhcmFudGVlIHRoZWlyIGludmFy
aWFudHMsIHRoZSBjbGllbnQgaXMgbm90IHN1cHBvc2VkIHRvIGhhdmUgYWNjZXNzIHRvICBccGFy
DQo+IHRoYXQuXHBhcg0KXHBhcg0KVGhhdCcgZXhhY3RseSB3aGF0IGlzIHN1cHBvc2VkIGluIHRo
ZSBhYm92ZSBleGFtcGxlLlxwYXINClxwYXINClJlZ2FyZHNccGFyDQpccGFyDQpILiB2LiBMYXZl
cmduZVxwYXINCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHBh
cg0KXHBhcg0KVG8gdW5zdWJzY3JpYmUgZnJvbSB0aGlzIG1haWxpbmcgbGlzdCwgc2VuZCBhIG1l
c3NhZ2UgY29udGFpbmluZyB0aGUgd29yZCAidW5zdWJzY3JpYmUiIHRvOlxwYXINCiAgIGJsYWNr
Ym94LXJlcXVlc3RAb2Jlcm9uLmNoXHBhcg0KXHBhcg0KVG8gZ2V0IGEgbGlzdCBvZiB2YWxpZCBl
LW1haWwgY29tbWFuZHMgYW5kIGluc3RydWN0aW9ucyBvbiB0aGVpciB1c2FnZSwgc2VuZCBhIG1l
c3NhZ2UgY29udGFpbmluZyB0aGUgd29yZCAiaGVscCIgdG8gdGhlIGFib3ZlIGFkZHJlc3MuXHBh
cg0KXHBhcg0KU2VuZCBhbnkgcHJvYmxlbSByZXBvcnRzIG9yIHF1ZXN0aW9ucyByZWxhdGVkIHRv
IHRoaXMgZW1haWwgbGlzdCB0byB0aGUgbGlzdCBvd25lciBhdFxwYXINCiAgIG93bmVyLWJsYWNr
Ym94QG9iZXJvbi5jaFxwYXINClxwYXINCkN1cnJlbnQgcG9zdGluZyBwb2xpY3k6XHBhcg0KXHBh
cg0KYSkgVG8gcG9zdCB5b3Ugc2hvdWxkIHVzZSB0aGUgc2FtZSBhZGRyZXNzIGJ5IHdoaWNoIHlv
dSBhcmUgc3Vic2NyaWJlZCB0byB0aGUgbWFpbGluZyBsaXN0LiBUaGF0IHdheSwgdGhlIGxpc3Qg
c2VydmVyIHdpbGwgcmVjb2duaXplIHlvdSBhcyBzdWJzY3JpYmVyIGFuZCBmb3J3YXJkIHlvdXIg
cG9zdGluZyBpbW1lZGlhdGVseSwgd2l0aG91dCBjcmVhdGluZyBhbnkgb3ZlcmhlYWQuXHBhcg0K
XHBhcg0KYikgSWYsIGZvciBzb21lIHJlYXNvbiwgeW91IGNhbm5vdCBwb3N0IGZyb20gdGhlIGFk
ZHJlc3MsIGJ5IHdoaWNoIHlvdSBhcmUgc3Vic2NyaWJlZCwgeW91ciBtZXNzYWdlIHdpbGwgYmUg
bW9kZXJhdGVkIHRvIGF2b2lkIHNwYW0uIFBsZWFzZSB1bmRlcnN0YW5kIHRoYXQgbW9kZXJhdGlv
biB3aWxsIG9mdGVuIGNhdXNlIHNvbWUgZGVsYXksIGluIHBhcnRpY3VsYXIgb3ZlciB3ZWVrZW5k
cyBvciBob2x5ZGF5cy5ccGFyDQp9


----boundary-LibPST-iamunique-1167639339_-_---
Received on Sun Oct 03 2004 - 16:54:17 UTC

This archive was generated by hypermail 2.3.0 : Thu Sep 26 2013 - 06:28:35 UTC