Inheritance problem
Steven Schveighoffer
schveiguy at yahoo.com
Mon Feb 14 05:54:40 PST 2011
On Fri, 11 Feb 2011 17:26:29 -0500, Andrej Mitrovic
<andrej.mitrovich at gmail.com> wrote:
> On 2/11/11, bearophile <bearophileHUGS at lycos.com> wrote:
>> Steven Schveighoffer:
>>
>>> Any code can access any members defined in the current module,
>>> regardless
>>>
>>> of access attributes
>>
>> I am not sure if Walter understands how much this rule makes it hard for
>> people not already used to protected/private attributes to understand
>> and
>> learn to use those attributes correctly. The C# compiler doesn't have
>> that
>> rule, and it's much more strict. I think this makes learning the usage
>> of
>> those attributes faster.
>>
>> Bye,
>> bearophile
>>
>
> I think one benefit of the current approach is that we'll be able to
> use free functions which could be called as if they belong to a class
> (if they have that class as the first parameter), since we could use
> the uniform function call (UFC) syntax. But UFC doesn't work with
> classes yet, otherwise we might be able to do this:
>
> module foo;
> import std.stdio;
>
> class Foo {
> private int _x, _y;
> this(int x, int y) {
> _x = x;
> _y = y;
> }
> }
>
> int sumXY(Foo foo) {
> return foo._x + foo._y;
> }
>
> module main;
> import foo;
> import std.stdio;
>
> void main() {
> auto obj = new Foo(10, 10);
> writeln(obj.sumXY()); // using UFC, but doesn't work yet
> //~ writeln(obj._x + obj._y); // not allowed
> }
>
What's wrong with:
class Foo {
private int _x, _y;
this(int x, int y) {
_x = x;
_y = y;
}
int sumXY() {
return _x + _y;
}
}
> We could have a bunch of templated functions in the foo module which
> could work with any class inside that module. So it might help out
> against the common God class problem. What do you think?
I'm unaware of this problem, but I'm not sure it's a huge problem. The
UFC syntax is a marginal benefit, making a function look like it's part of
the class. The "horrible" alternative is to simply call the function with
Foo as a parameter instead of the source. i.e. f(x) vs. x.f()
Couldn't the same be achieved via mixins? And in fact, the mixin I think
can be defined in a separate module, more flexible.
-Steve
More information about the Digitalmars-d-learn
mailing list