On Sunday, 20 March 2022 at 01:28:44 UTC, Era Scarecrow wrote:
Inheritance and Polymorphism is one of the hardest things to grasp mostly because examples they give in other books of 'objects' is so far unrelated to software that it doesn't really compare. `"An object is like a book which you can read and turn the page..."` but then can't tear or burn or hand to a friend or put on the shelf upside down, or put your coffee on top of while you surf on the web leaving a ring on the book.

You are right, difficult model yet so abeyant. Moreover, there is a lot of freedom given in D. I think OOP alone is not worth 5 cents without design patterns.

For example, my codes I just wrote below is nonsense. It looks like a sailboat trying to navigate a windless ocean:

```d
class Year {
  int num;

  this(int year) {
    this.num = year;
  }

  auto opBinary(string op)(Year rhs)
  if(op == "-") { // Negative & Option 1a
    return new Year(this.num - rhs.num);
  }

  auto opBinary(string op)(int rhs)
  if(op == "-") { // Negative & Option 2a
    return new Year(this.num - rhs);
  }

  auto opBinary(string op)(Year rhs)
  if(op == "+") { // Positive & Option 1b
    this.num += rhs.num;
    return this;
  }

  auto opBinary(string op)(int rhs)
  if(op == "+") { // Positive & Option 2b
    this.num += rhs;
    return this;
  }

  override string toString() const {
    import std.conv;
    return num.to!string;
  }
}

void naim()
{
  import std.stdio;

  enum categoryID : ubyte {
    leader,
    champion
  }

  class Person : Year {
    string name;
    int born, age;
    categoryID cat;
    bool life;

    this(string name, int[] years, int cat) {
      super(years[1]);

      this.name = name;
      this.born = years[0];
      this.age = isDeath();
      this.cat = cast(categoryID)cat;
    }

    int isDeath() {
      return life ? super.num - born:
                         2022 - born;
    }
  }

  auto years = [ 1967, 2017 ];
  auto NaimS = new Person
       (
         "Naim Süleymanoğlu", years, 1
       );

  with(NaimS)
  {
    life = true;
    writefln("%s\n(Born %d, when he died, was %d)", name
                                                  , born
                                                  , isDeath);
  }
}

version = 1;

void main()
{
  version(1)
  {
    auto birth = new Year(1881);
    auto death = new Year(1938);

    auto print = death - birth;
    import core.stdc.stdio;

    printf("Atatürk was %d", print.num);
    printf(" years old when he died:(");
  }
  else naim();
}
```
OOP can be aggressive like a dog. I think D should be a little more rigid on OOP.

SDB@79

Reply via email to