Sealed classes - would you want them in D?

rikki cattermole rikki at cattermole.co.nz
Sat May 12 06:38:16 UTC 2018


On 12/05/2018 6:35 PM, KingJoffrey wrote:
> On Saturday, 12 May 2018 at 04:29:32 UTC, Neia Neutuladh wrote:
>> On Friday, 11 May 2018 at 14:05:25 UTC, KingJoffrey wrote:
>>> private is not private at all in D, and because of this, classes are 
>>> fundamentally broken in D (by design apparently).
>>
>> I find this amusing because D does things exactly like Java. In Java, 
>> two sibling nested classes can call private functions on each other. 
>> But nobody says that this makes Java's classes fundamentally broken.
>>
>> Like, this just works in Java:
>>
>> public class Protections {
>>     public static class Bar {
>>         private void bar() { System.out.println("bar"); }
>>     }
>>
>>     public static class Baz {
>>         private void bar(Bar b) { b.bar(); }
>>     }
>>
>>     public static void main(String[] args) {
>>         new Baz().bar(new Bar());
>>     }
>> }
>>
> 
> Come on, your code example misses my point completely.
> 
> Take this program below, for example, and tell me that class 
> encapsulation is not broken in D:
> 
> ===============================
> module test;
> 
> import std.stdio : writeln;
> 
> void main()
> {
>      Person p = new Person("King Joffrey");
> 
>      writeln(p.getName); // I designed my class to return this.
>      writeln(p._name); // But D can bypass your intention completely.
> 
>      p._name = "New King"; // even worse, D can nominate another king.
>      writeln(p._name);
> }
> 
> class Person
> {
>      private string _name;
> 
>      public void setName(string name)
>      {
>          this._name = name;
>      }
> 
>      public string getName()
>      {
>          return ProperName(this._name);
>      }
> 
>      public this(string name)
>      {
>          _name = name;
>      }
> 
>      private static string ProperName(string name)
>      {
>          return name ~ " : The one true king!";
>      }
> }
> 
> ==============================

Now move Person into its own module.
Boom errors.

This is how module systems should work and everything is working 
correctly :)

You will not convince us otherwise.


More information about the Digitalmars-d mailing list