Re[7]: Недоучки по настоящему ООП не освоили (из-за Basic и
От: Muxa  
Дата: 01.09.25 09:36
Оценка:
M>>Задачи-то какие таким подходом проще решать?
Аё>Задача была- устанавливаемая маленькая апликуха для интеграции, которая не тянет за собой 100500мб jdk.

Звучит как нечто вообще несвязанное со способом реализации ООП в смоллтоке/го.
Re[2]: Недоучки по настоящему ООП не освоили (из-за Basic и С++)
От: B0FEE664  
Дата: 01.09.25 09:39
Оценка: +1
Здравствуйте, so5team, Вы писали:

S>Что до желания обсудить настоящесть ООП, предлагаю рассмотреть реализацию такого примера (псевдокод в синтаксисе a la C++, но на C++ это не реализуется):

Предлагаю посмотреть на этот код и указать, что здесь не реализовывается:
#include <iostream>

struct A 
{
  virtual bool vf(A&) { return true; }
  void f() 
  { 
      if ( vf(*this) )
        std::cout << "A::f" << std::endl; 
  }
};

struct B 
{
  virtual bool vf(B&) { return true; }
  void f() 
  { 
      if ( vf(*this) )
        std::cout << "B::f" << std::endl; 
  }
};

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

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

struct D : public A, public B
{
  void f() 
  {
    A::f();
    B::f();
  }
    
  virtual bool vf(A& ) 
  {
    std::cout << "D's f from A" << std::endl;
    return true;
  }
  virtual bool vf(B& ) 
  {
    std::cout << "D's f from B" << std::endl;
    return true;
  }
};

int main() 
{
  D d;
  consume_A(d);
  consume_B(d);
  //d.f();  
}


S>В результате работы должно быть выведено:

S>
S>D's f from A
S>A::f
S>D's f from B
S>B::f
S>

Исполнено. здесь
И каждый день — без права на ошибку...
Re[3]: Недоучки по настоящему ООП не освоили (из-за Basic и С++)
От: Doom100500 Израиль  
Дата: 01.09.25 09:45
Оценка:
Здравствуйте, Shmj, Вы писали:

S>А по поводу настоящего ООП в Smalltalk и его превосходства над убогоньким недо-ООП из C++?


Ну так об этом и заголовок. А ты — яркий пример.
Спасибо за внимание
Re[3]: Недоучки по настоящему ООП не освоили (из-за Basic и С++)
От: so5team https://stiffstream.com
Дата: 01.09.25 09:48
Оценка:
Здравствуйте, B0FEE664, Вы писали:

BFE>Здравствуйте, so5team, Вы писали:


S>>Что до желания обсудить настоящесть ООП, предлагаю рассмотреть реализацию такого примера (псевдокод в синтаксисе a la C++, но на C++ это не реализуется):

BFE>Предлагаю посмотреть на этот код и указать, что здесь не реализовывается:

Предлагаю посмотреть на свой код, на исходный и сравнить сигнатуры виртуальных методов f и vf. В исходном примере сигнатуры одинаковые, в вашем -- нет.
Re[3]: Недоучки по настоящему ООП не освоили (из-за Basic и С++)
От: Doom100500 Израиль  
Дата: 01.09.25 09:48
Оценка:
Здравствуйте, Michael7, Вы писали:

M>Здравствуйте, Pzz, Вы писали:


Pzz>>Поэтому я искренне не понимаю, ну смолтолковцам удобнее двигаться не как всем, считать обмен сообщениямы вызовом метода, а наоборот, считать вызов метода обменом сообщениями.


M>Интересно, что WinAPI явно проектировали под сильным влиянием идеи классов, обменивающихся сообщениями.


Это про что?

CreateFile — какое сообщение и кому отправляет? Где ловят ответ на это сообщение? WIN API — это не только GUI. А GUI — это обмен сообщениями везде — не только в WINAPI.
Спасибо за внимание
Re[2]: Недоучки по настоящему ООП не освоили (из-за Basic и С++)
От: Doom100500 Израиль  
Дата: 01.09.25 09:49
Оценка:
Здравствуйте, Артём, Вы писали:

Аё>Здравствуйте, Shmj, Вы писали:


Аё>C++ никогда не претендовал на звание тру-ООП языка.Там идея- костыли прикрутить к близкому к железу C некие фичи от Smalltalk- настолько, насколько позволяет близость к железу.


Странно, а когда я читал сэра Бьярне — там такого не было.
Спасибо за внимание
Re: Недоучки по настоящему ООП не освоили (из-за Basic и С++)
От: B0FEE664  
Дата: 01.09.25 09:49
Оценка: +1 :)
Здравствуйте, Shmj, Вы писали:

S>Просьба осудить.

Осуждаю:
1. Shmj опять открыл для себя то, что давно известно.
2. Настоящий ООП был придуман для симуляции поведения живых существ, а не роботов. Очень редко кому нужна такая симуляция. Практически никто не ожидает, что, к примеру, кнопка [OK] заболела, покрылась плесенью и поэтому отправить документ на печать сегодня невозможно. Поэтому настоящий ООП, как и Smalltalk — никому не нужен, за узким кругом исследователей.
И каждый день — без права на ошибку...
Re[5]: Недоучки по настоящему ООП не освоили (из-за Basic и
От: Doom100500 Израиль  
Дата: 01.09.25 09:50
Оценка:
Здравствуйте, Артём, Вы писали:

Аё>Здравствуйте, Muxa, Вы писали:


M>>А в чем превосходство? Обозвать вызов метода отправкой сообщения вряд ли можно назвать превосходством.


Аё>Duck typing. В go и в obj C не нужно объявлять интерфейс с методами- только сигнатуру метода.



ОК удобня фишка для написания тестов. А превосходство в чём?
Спасибо за внимание
Re[4]: Недоучки по настоящему ООП не освоили (из-за Basic и С++)
От: B0FEE664  
Дата: 01.09.25 09:54
Оценка:
Здравствуйте, so5team, Вы писали:

S>Предлагаю посмотреть на свой код, на исходный и сравнить сигнатуры виртуальных методов f и vf. В исходном примере сигнатуры одинаковые, в вашем -- нет.

Сигнатуры f одинаковые. Сигнатуры vf в вашем примере отсутствуют, а значит могут быть любыми.
И каждый день — без права на ошибку...
Re[2]: Недоучки по настоящему ООП не освоили (из-за Basic и С++)
От: Doom100500 Израиль  
Дата: 01.09.25 09:56
Оценка:
Здравствуйте, Hоmunculus, Вы писали:

H>Здравствуйте, Shmj, Вы писали:


H>С++ изначально и даже в названии — это С и еще плюс что-то. То есть он изначально должен был компилировать С -код. Никто в нем в ООП и не упарывался. Не было такой задачи


Из вступления ко вопрому изданию библии от сэра Бьярне:

The primary aim of the language extensions made in the last six years has been to enhance C++
as a language for data abstraction and object-oriented programming in general and to enhance it as
a tool for writing high-quality libraries of user-defined types in particular. A ‘‘high-quality
library,’
Спасибо за внимание
Re[4]: Недоучки по настоящему ООП не освоили (из-за Basic и С++)
От: B0FEE664  
Дата: 01.09.25 09:57
Оценка:
Здравствуйте, so5team, Вы писали:

S>Предлагаю посмотреть на свой код, на исходный и сравнить сигнатуры виртуальных методов f и vf. В исходном примере сигнатуры одинаковые, в вашем -- нет.


Кстати, у вас сигнатуры метода f разные:

void f() override A::f {
void f() override B::f {

И каждый день — без права на ошибку...
Re[5]: Недоучки по настоящему ООП не освоили (из-за Basic и
От: so5team https://stiffstream.com
Дата: 01.09.25 09:58
Оценка:
Здравствуйте, B0FEE664, Вы писали:

S>>Предлагаю посмотреть на свой код, на исходный и сравнить сигнатуры виртуальных методов f и vf. В исходном примере сигнатуры одинаковые, в вашем -- нет.

BFE>Сигнатуры f одинаковые.

f в вашем примере не виртуальная функция. Т.е. это не эквивалент ни разу.

Ваш пример показывает то, что если в языке напрямую нельзя сделать требуемое, то можно найти обходной маневр, усложнить логику и обложиться обертками. Но все это лишь демонстрирует недостаточный уровень поддержки ООП из-за чего обходной маневр с обертками и нужен.
Отредактировано 01.09.2025 10:08 so5team . Предыдущая версия .
Re[4]: Недоучки по настоящему ООП не освоили (из-за Basic и
От: sergii.p  
Дата: 01.09.25 10:01
Оценка:
Здравствуйте, so5team, Вы писали:

S>Если мы делаем какой-то класс WriteAheadLog, который наследуется и от TraceCollector, и от TemporaryBuffer,


а как же single responsibility? Мне кажется, этот пример попахивает плохим дизайном и не может быть объявлен kill-фичей ООП.
Re[5]: Недоучки по настоящему ООП не освоили (из-за Basic и С++)
От: so5team https://stiffstream.com
Дата: 01.09.25 10:01
Оценка: +1
Здравствуйте, B0FEE664, Вы писали:

BFE>Кстати, у вас сигнатуры метода f разные:

BFE>

BFE> void f() override A::f {
BFE> void f() override B::f {


Вам альтернативная одаренность не позволила воспринять слова "псевдокод в синтаксисе a la C++" или где? Или вы думаете, что ключевое слово override в C++ является частью сигнатуры?

Блин, я не против конструктивного общения, но когда человек упорно тупит и не пытается воспринять то, что ему говорят (или уточнить то, что он не понимает), это утомляет.
Re[5]: Недоучки по настоящему ООП не освоили (из-за Basic и
От: so5team https://stiffstream.com
Дата: 01.09.25 10:05
Оценка: -1
Здравствуйте, sergii.p, Вы писали:

S>>Если мы делаем какой-то класс WriteAheadLog, который наследуется и от TraceCollector, и от TemporaryBuffer,


SP>а как же single responsibility? Мне кажется, этот пример попахивает плохим дизайном и не может быть объявлен kill-фичей ООП.


Я специально делал оговорку:

> здесь разговор не столько о практической пользе, сколько об определениях и соответствии этим определениям.


Ну и речь не о том, киллер фича или нет, а о том, что считать "настоящим ООП языком", а что не считать.
Дал бы Шмыга определение Ъ-шности, было бы проще. Но Шмыга как обычно Шмыга.
Поэтому можно озвучить вот такой критерий.
Re[2]: Недоучки по настоящему ООП не освоили (из-за Basic и
От: rg45 СССР  
Дата: 01.09.25 10:08
Оценка:
Здравствуйте, so5team, Вы писали:

S>Что до желания обсудить настоящесть ООП, предлагаю рассмотреть реализацию такого примера (псевдокод в синтаксисе a la C++, но на C++ это не реализуется):

S> . . .

Обходится добавлением пары промежуточных классов в иерархию наследования (если по каким-то причинам нам недоступно переименование методов в базовых классах).

Думаю, этот недостаток давно бы уже восполнили, если бы это создавало какие-то массовые неудобства. Но, насколько я могу судить, С++ развивается в другом направлении.

http://coliru.stacked-crooked.com/a/a2a51e9929bb5286

#include <iostream>

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 */ }

struct A_Adaptor : A {
  virtual void f_a() = 0;
  void f() override { f_a(); }
};

struct B_Adaptor : B {
  virtual void f_b() = 0;
  void f() override { f_b(); }
};

struct D : A_Adaptor, B_Adaptor
{
  void f_a() override {
    std::cout << "D's f from A" << std::endl;
    A::f();
  }
  void f_b() override {
    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
--
Справедливость выше закона. А человечность выше справедливости.
Отредактировано 01.09.2025 10:32 rg45 . Предыдущая версия . Еще …
Отредактировано 01.09.2025 10:19 rg45 . Предыдущая версия .
Re: Недоучки по настоящему ООП не освоили (из-за Basic и С++)
От: elmal  
Дата: 01.09.25 10:21
Оценка: +1
Здравствуйте, Shmj, Вы писали:

S>Просьба осудить.

Осудить запросто. Достали уже попытки пихать ООП везде и осиливать это ООП. Давно уже люди, которые следят за индустрией, поняли, что серебряной пули не существует, есть под определенную задачу определенная оптимальная парадигма, причем эта оптимальная парадигма может меняться со временем. Любовь постсоветского пространства к тому, чтоб что то осиливать, ужасает. Сначала паскаль все осиливали и многие надрачивают паскаль до текущего дня. Сейчас, когда мода на ООП прошла, начали надрачивать на "настоящее" ООП. Конечно хреново, когда человек про ООП не слышал, и когда применить уместно, не применяет ни черта, и вместо элегантного решения городит ужас какой спагетти. Но чаще встречается наоборот, когда кто то наслышан только об ООП, и фигачит его вообще везде, и вместо простого расширяемого компактного и поддерживаемого простого решения хреначит фабрики фабрик и абстракцией над абстракцией, кода получается раз в 10 больше чем в рамках других парадигм и соответствующая раздутая сложность.
Re[4]: Недоучки по настоящему ООП не освоили (из-за Basic и С++)
От: Michael7 Россия  
Дата: 01.09.25 10:23
Оценка:
Здравствуйте, Doom100500, Вы писали:

D>CreateFile — какое сообщение и кому отправляет? Где ловят ответ на это сообщение? WIN API — это не только GUI. А GUI — это обмен сообщениями везде — не только в WINAPI.


Я в основном про GUI виндов. Если бы CreateFile отправлял сообщения это уже какой-то совсем SmallTalk был бы.
Re: Недоучки по настоящему ООП не освоили (из-за Basic и С++)
От: rg45 СССР  
Дата: 01.09.25 10:28
Оценка: 2 (1) :))) :)
Здравствуйте, Shmj, Вы писали:

S>Недоучки по настоящему ООП не освоили (из-за Basic и С++)


Ты, наверное, даже не догадываешься, насколько карикатурно выглядит слово "недоучки" рядом с позорной грамматической ошибкой.
--
Справедливость выше закона. А человечность выше справедливости.
Re[3]: Недоучки по настоящему ООП не освоили (из-за Basic и
От: so5team https://stiffstream.com
Дата: 01.09.25 10:33
Оценка:
Здравствуйте, rg45, Вы писали:

R>Обходится добавлением пары промежуточных классов в иерархию наследования (если по каким-то причинам нам недоступно переименование методов в базовых классах).


"Тему не читай, сразу отвечай!" (с)
https://rsdn.org/forum/flame.comp/8985442.1
Автор: so5team
Дата: 01.09 12:58


R>И я бы не сказал, что это какая-то широкораспространённая проблема, которая создаёт массовые неудобства.


Речь не про проблему, а про определения и следование этим определениям.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.