Re: eliminate EXTENSIBLE types?

From: Fyodor Tkachov <"Fyodor>
Date: Mon, 04 Oct 2004 09:14:09 +0400

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

> Any (normal) procedure may be
> activated by any"one", a method only by the owner, i. e. an object of the correct type.

There is no practical difference between o.Init and Module.Init( o ) because in order to perform the latter call one still has to have an object (o) of the correct type.
The only difference is the explicit appearance of Module in the second case, which I maintain only adds to clarity of the code.

> Of course you can avoid OOP alltogether and the code may even be more effective.
> But I believe encapsulation to be quite useful.

All this has nothing to do with encapsulation.

Coming back to your chain of three types A, B, C, inheriting from each other, A and B being ABSTRACT, and C being LIMITED, all defined (as you proposed) in separate modules (call them ModuleA, ModuleB and ModuleC).
Suppose instead of (extensible) methods like (a: A) Init() one has procedures like ModuleA.Init( a: A ), etc.
ModuleB.Init( b: B ) only has to make a proper call to ModuleA.Init -- and C does not need to know how B is implemented -- how it calls ModuleA.Init, etc.
A perfect encapsulation, so far as I can see.

If one inherites from the type B, one knows which module the type B is defined in (ModuleB), and one automatically has access to procedures in ModuleB.
So writing b.Init instead of ModuleB.Init( b ) hides exactly nothing, and only saves typing the module name.

Supercalls are completely superfluous and are replaced by calls to ordinary procedures.
To reiterate: a type one inherits from always belongs to some known module,
therefore one has access to the procedures in that module, including whatever initialization procedures one might need for hidden fields.

The situations you described all can be handled this way without a slightest damage to encapsulation.

PRO: a perfect transparency as to which exactly procedure is being called in each case.
CONTRA: some extra typing.

I see no practical problems -- dangerous or other -- introduced in the described scenario.
Erroneous calls like ModuleA.Init( b ) are equivalent to erroneous calls like b.Init^, so there is equivalence here too. Both are to be prevented in a similar fashion (by inserting a proper type test in (a: A) Init().

Cheers
Fyodor

Powered by the E-mail PIM - Info Select - www.miclog.com
--------------------------------------------

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-1274547453_-_-
Content-type: application/rtf
Content-transfer-encoding: base64
Content-Disposition: attachment; filename="rtf-body.rtf"

e1xydGYxXGFuc2lcYW5zaWNwZzEyNTJcZnJvbXRleHQgXGRlZmYwe1xmb250dGJsDQp7XGYwXGZz
d2lzcyBBcmlhbDt9DQp7XGYxXGZtb2Rlcm4gQ291cmllciBOZXc7fQ0Ke1xmMlxmbmlsXGZjaGFy
c2V0MiBTeW1ib2w7fQ0Ke1xmM1xmbW9kZXJuXGZjaGFyc2V0MCBDb3VyaWVyIE5ldzt9fQ0Ke1xj
b2xvcnRibFxyZWQwXGdyZWVuMFxibHVlMDtccmVkMFxncmVlbjBcYmx1ZTI1NTt9DQpcdWMxXHBh
cmRccGxhaW5cZGVmdGFiMzYwIFxmMFxmczIwID4gQW55IChub3JtYWwpIHByb2NlZHVyZSBtYXkg
YmVccGFyDQo+IGFjdGl2YXRlZCBieSBhbnkib25lIiwgYSBtZXRob2Qgb25seSBieSB0aGUgb3du
ZXIsIGkuIGUuIGFuIG9iamVjdCBvZiB0aGUgY29ycmVjdCB0eXBlLlxwYXINClxwYXINClRoZXJl
IGlzIG5vIHByYWN0aWNhbCBkaWZmZXJlbmNlIGJldHdlZW4gby5Jbml0IGFuZCBNb2R1bGUuSW5p
dCggbyApIGJlY2F1c2UgaW4gb3JkZXIgdG8gcGVyZm9ybSB0aGUgbGF0dGVyIGNhbGwgb25lIHN0
aWxsIGhhcyB0byBoYXZlIGFuIG9iamVjdCAobykgb2YgdGhlIGNvcnJlY3QgdHlwZS5ccGFyDQpU
aGUgb25seSBkaWZmZXJlbmNlIGlzIHRoZSBleHBsaWNpdCBhcHBlYXJhbmNlIG9mIE1vZHVsZSBp
biB0aGUgc2Vjb25kIGNhc2UsIHdoaWNoIEkgbWFpbnRhaW4gb25seSBhZGRzIHRvIGNsYXJpdHkg
b2YgdGhlIGNvZGUuXHBhcg0KXHBhcg0KPiBPZiBjb3Vyc2UgeW91IGNhbiBhdm9pZCBPT1AgYWxs
dG9nZXRoZXIgYW5kIHRoZSBjb2RlIG1heSBldmVuIGJlIG1vcmUgZWZmZWN0aXZlLlxwYXINCj4g
QnV0IEkgYmVsaWV2ZSBlbmNhcHN1bGF0aW9uIHRvIGJlIHF1aXRlIHVzZWZ1bC5ccGFyDQpccGFy
DQpBbGwgdGhpcyBoYXMgbm90aGluZyB0byBkbyB3aXRoIGVuY2Fwc3VsYXRpb24uXHBhcg0KXHBh
cg0KQ29taW5nIGJhY2sgdG8geW91ciBjaGFpbiBvZiB0aHJlZSB0eXBlcyBBLCBCLCBDLCBpbmhl
cml0aW5nIGZyb20gZWFjaCBvdGhlciwgQSBhbmQgQiBiZWluZyBBQlNUUkFDVCwgYW5kIEMgYmVp
bmcgTElNSVRFRCwgYWxsIGRlZmluZWQgKGFzIHlvdSBwcm9wb3NlZCkgaW4gc2VwYXJhdGUgbW9k
dWxlcyAoY2FsbCB0aGVtIE1vZHVsZUEsIE1vZHVsZUIgYW5kIE1vZHVsZUMpLlxwYXINClN1cHBv
c2UgaW5zdGVhZCBvZiAoZXh0ZW5zaWJsZSkgbWV0aG9kcyBsaWtlIChhOiBBKSBJbml0KCkgb25l
IGhhcyBwcm9jZWR1cmVzIGxpa2UgTW9kdWxlQS5Jbml0KCBhOiBBICksIGV0Yy5ccGFyDQpNb2R1
bGVCLkluaXQoIGI6IEIgKSBvbmx5IGhhcyB0byBtYWtlIGEgcHJvcGVyIGNhbGwgdG8gTW9kdWxl
QS5Jbml0IC0tIGFuZCBDIGRvZXMgbm90IG5lZWQgdG8ga25vdyBob3cgQiBpcyBpbXBsZW1lbnRl
ZCAtLSBob3cgaXQgY2FsbHMgTW9kdWxlQS5Jbml0LCBldGMuXHBhcg0KQSBwZXJmZWN0IGVuY2Fw
c3VsYXRpb24sIHNvIGZhciBhcyBJIGNhbiBzZWUuXHBhcg0KXHBhcg0KSWYgb25lIGluaGVyaXRl
cyBmcm9tIHRoZSB0eXBlIEIsIG9uZSBrbm93cyB3aGljaCBtb2R1bGUgdGhlIHR5cGUgQiBpcyBk
ZWZpbmVkIGluIChNb2R1bGVCKSwgYW5kIG9uZSBhdXRvbWF0aWNhbGx5IGhhcyBhY2Nlc3MgdG8g
cHJvY2VkdXJlcyBpbiBNb2R1bGVCLlxwYXINClNvIHdyaXRpbmcgYi5Jbml0IGluc3RlYWQgb2Yg
TW9kdWxlQi5Jbml0KCBiICkgaGlkZXMgZXhhY3RseSBub3RoaW5nLCBhbmQgb25seSBzYXZlcyB0
eXBpbmcgdGhlIG1vZHVsZSBuYW1lLlxwYXINClxwYXINClN1cGVyY2FsbHMgYXJlIGNvbXBsZXRl
bHkgc3VwZXJmbHVvdXMgYW5kIGFyZSByZXBsYWNlZCBieSBjYWxscyB0byBvcmRpbmFyeSBwcm9j
ZWR1cmVzLlxwYXINClRvIHJlaXRlcmF0ZTogYSB0eXBlIG9uZSBpbmhlcml0cyBmcm9tIGFsd2F5
cyBiZWxvbmdzIHRvIHNvbWUga25vd24gbW9kdWxlLFxwYXINCnRoZXJlZm9yZSBvbmUgaGFzIGFj
Y2VzcyB0byB0aGUgcHJvY2VkdXJlcyBpbiB0aGF0IG1vZHVsZSwgaW5jbHVkaW5nIHdoYXRldmVy
IGluaXRpYWxpemF0aW9uIHByb2NlZHVyZXMgb25lIG1pZ2h0IG5lZWQgZm9yIGhpZGRlbiBmaWVs
ZHMuXHBhcg0KXHBhcg0KVGhlIHNpdHVhdGlvbnMgeW91IGRlc2NyaWJlZCBhbGwgY2FuIGJlIGhh
bmRsZWQgdGhpcyB3YXkgd2l0aG91dCBhIHNsaWdodGVzdCBkYW1hZ2UgdG8gZW5jYXBzdWxhdGlv
bi5ccGFyDQpccGFyDQpQUk86IGEgcGVyZmVjdCB0cmFuc3BhcmVuY3kgYXMgdG8gd2hpY2ggZXhh
Y3RseSBwcm9jZWR1cmUgaXMgYmVpbmcgY2FsbGVkIGluIGVhY2ggY2FzZS5ccGFyDQpDT05UUkE6
IHNvbWUgZXh0cmEgdHlwaW5nLlxwYXINClxwYXINCkkgc2VlIG5vIHByYWN0aWNhbCBwcm9ibGVt
cyAtLSBkYW5nZXJvdXMgb3Igb3RoZXIgLS0gaW50cm9kdWNlZCBpbiB0aGUgZGVzY3JpYmVkIHNj
ZW5hcmlvLlxwYXINCkVycm9uZW91cyBjYWxscyBsaWtlIE1vZHVsZUEuSW5pdCggYiApIGFyZSBl
cXVpdmFsZW50IHRvIGVycm9uZW91cyBjYWxscyBsaWtlIGIuSW5pdF4sIHNvIHRoZXJlIGlzIGVx
dWl2YWxlbmNlIGhlcmUgdG9vLiBCb3RoIGFyZSB0byBiZSBwcmV2ZW50ZWQgaW4gYSBzaW1pbGFy
IGZhc2hpb24gKGJ5IGluc2VydGluZyBhIHByb3BlciB0eXBlIHRlc3QgaW4gKGE6IEEpIEluaXQo
KS5ccGFyDQpccGFyDQpDaGVlcnNccGFyDQpGeW9kb3JccGFyDQpccGFyDQpQb3dlcmVkIGJ5IHRo
ZSBFLW1haWwgUElNIC0gSW5mbyBTZWxlY3QgLSB3d3cubWljbG9nLmNvbVxwYXINCi0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHBhcg0KXHBhcg0KVG8gdW5zdWJz
Y3JpYmUgZnJvbSB0aGlzIG1haWxpbmcgbGlzdCwgc2VuZCBhIG1lc3NhZ2UgY29udGFpbmluZyB0
aGUgd29yZCAidW5zdWJzY3JpYmUiIHRvOlxwYXINCiAgIGJsYWNrYm94LXJlcXVlc3RAb2Jlcm9u
LmNoXHBhcg0KXHBhcg0KVG8gZ2V0IGEgbGlzdCBvZiB2YWxpZCBlLW1haWwgY29tbWFuZHMgYW5k
IGluc3RydWN0aW9ucyBvbiB0aGVpciB1c2FnZSwgc2VuZCBhIG1lc3NhZ2UgY29udGFpbmluZyB0
aGUgd29yZCAiaGVscCIgdG8gdGhlIGFib3ZlIGFkZHJlc3MuXHBhcg0KXHBhcg0KU2VuZCBhbnkg
cHJvYmxlbSByZXBvcnRzIG9yIHF1ZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgZW1haWwgbGlzdCB0
byB0aGUgbGlzdCBvd25lciBhdFxwYXINCiAgIG93bmVyLWJsYWNrYm94QG9iZXJvbi5jaFxwYXIN
ClxwYXINCkN1cnJlbnQgcG9zdGluZyBwb2xpY3k6XHBhcg0KXHBhcg0KYSkgVG8gcG9zdCB5b3Ug
c2hvdWxkIHVzZSB0aGUgc2FtZSBhZGRyZXNzIGJ5IHdoaWNoIHlvdSBhcmUgc3Vic2NyaWJlZCB0
byB0aGUgbWFpbGluZyBsaXN0LiBUaGF0IHdheSwgdGhlIGxpc3Qgc2VydmVyIHdpbGwgcmVjb2du
aXplIHlvdSBhcyBzdWJzY3JpYmVyIGFuZCBmb3J3YXJkIHlvdXIgcG9zdGluZyBpbW1lZGlhdGVs
eSwgd2l0aG91dCBjcmVhdGluZyBhbnkgb3ZlcmhlYWQuXHBhcg0KXHBhcg0KYikgSWYsIGZvciBz
b21lIHJlYXNvbiwgeW91IGNhbm5vdCBwb3N0IGZyb20gdGhlIGFkZHJlc3MsIGJ5IHdoaWNoIHlv
dSBhcmUgc3Vic2NyaWJlZCwgeW91ciBtZXNzYWdlIHdpbGwgYmUgbW9kZXJhdGVkIHRvIGF2b2lk
IHNwYW0uIFBsZWFzZSB1bmRlcnN0YW5kIHRoYXQgbW9kZXJhdGlvbiB3aWxsIG9mdGVuIGNhdXNl
IHNvbWUgZGVsYXksIGluIHBhcnRpY3VsYXIgb3ZlciB3ZWVrZW5kcyBvciBob2x5ZGF5cy5ccGFy
DQp9


----boundary-LibPST-iamunique-1274547453_-_---
Received on Mon Oct 04 2004 - 07:14:09 UTC

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