Re: Недоучки по настоящему ООП не освоили (из-за Basic и С++)
От: so5team https://stiffstream.com
Дата: 01.09.25 05:58
Оценка:
Здравствуйте, Shmj, Вы писали:

S>Вот оно как: https://habr.com/ru/articles/942582/


S>И автор говорит что настоящий ООП — был только в Smalltalk.


Судя по содержанию статьи автор "врет как очевидец", т.к. по моим воспоминаниям, IBM со своим OS/2 проиграла MS и Windows задолго до того, как автор статьи первый раз столкнулся с OS/2.

Что до желания обсудить настоящесть ООП, предлагаю рассмотреть реализацию такого примера (псевдокод в синтаксисе a la C++, но на C++ это не реализуется):
struct A {
  virtual void f() { std::cout << "A::f" << std::endl; }
};

struct B {
  virtual void f() { std::cout << "B::f" << std::endl; }
};

void consume_A(A & o) { o.f(); /* Здесь вызывается f из A */ }

void consume_B(B & o) { o.f(); /* Здесь вызывается f из B */ }

struc D : public A, public B
{
  void f() override A::f {
    std::cout << "D's f from A" << std::endl;
    A::f();
  }
  void f() override B::f {
    std::cout << "D's f from B" << std::endl;
    B::f();
  }
};

int main() {
  D d;
  consume_A(d);
  consume_B(d);
}


В результате работы должно быть выведено:
D's f from A
A::f
D's f from B
B::f


ИМХО, ОО-язык, который не позволяет получить такой эффект, настоящим не является, т.к. не позволяет использовать возможности полноценного наследования (включая множественного) в полной мере. Соответственно, таковыми не являются ни SmallTalk, ни C++, ни Java...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.