M>>Задачи-то какие таким подходом проще решать? Аё>Задача была- устанавливаемая маленькая апликуха для интеграции, которая не тянет за собой 100500мб jdk.
Звучит как нечто вообще несвязанное со способом реализации ООП в смоллтоке/го.
Re[2]: Недоучки по настоящему ООП не освоили (из-за Basic и С++)
Здравствуйте, 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();
}
Здравствуйте, B0FEE664, Вы писали:
BFE>Здравствуйте, so5team, Вы писали:
S>>Что до желания обсудить настоящесть ООП, предлагаю рассмотреть реализацию такого примера (псевдокод в синтаксисе a la C++, но на C++ это не реализуется): BFE>Предлагаю посмотреть на этот код и указать, что здесь не реализовывается:
Предлагаю посмотреть на свой код, на исходный и сравнить сигнатуры виртуальных методов f и vf. В исходном примере сигнатуры одинаковые, в вашем -- нет.
Re[3]: Недоучки по настоящему ООП не освоили (из-за Basic и С++)
Здравствуйте, Michael7, Вы писали:
M>Здравствуйте, Pzz, Вы писали:
Pzz>>Поэтому я искренне не понимаю, ну смолтолковцам удобнее двигаться не как всем, считать обмен сообщениямы вызовом метода, а наоборот, считать вызов метода обменом сообщениями.
M>Интересно, что WinAPI явно проектировали под сильным влиянием идеи классов, обменивающихся сообщениями.
Это про что?
CreateFile — какое сообщение и кому отправляет? Где ловят ответ на это сообщение? WIN API — это не только GUI. А GUI — это обмен сообщениями везде — не только в WINAPI.
Спасибо за внимание
Re[2]: Недоучки по настоящему ООП не освоили (из-за Basic и С++)
Здравствуйте, Артём, Вы писали:
Аё>Здравствуйте, Shmj, Вы писали:
Аё>C++ никогда не претендовал на звание тру-ООП языка.Там идея- костыли прикрутить к близкому к железу C некие фичи от Smalltalk- настолько, насколько позволяет близость к железу.
Странно, а когда я читал сэра Бьярне — там такого не было.
Спасибо за внимание
Re: Недоучки по настоящему ООП не освоили (из-за Basic и С++)
Здравствуйте, Shmj, Вы писали:
S>Просьба осудить.
Осуждаю:
1. Shmj опять открыл для себя то, что давно известно.
2. Настоящий ООП был придуман для симуляции поведения живых существ, а не роботов. Очень редко кому нужна такая симуляция. Практически никто не ожидает, что, к примеру, кнопка [OK] заболела, покрылась плесенью и поэтому отправить документ на печать сегодня невозможно. Поэтому настоящий ООП, как и Smalltalk — никому не нужен, за узким кругом исследователей.
И каждый день — без права на ошибку...
Re[5]: Недоучки по настоящему ООП не освоили (из-за Basic и
Здравствуйте, Артём, Вы писали:
Аё>Здравствуйте, Muxa, Вы писали:
M>>А в чем превосходство? Обозвать вызов метода отправкой сообщения вряд ли можно назвать превосходством.
Аё>Duck typing. В go и в obj C не нужно объявлять интерфейс с методами- только сигнатуру метода.
ОК удобня фишка для написания тестов. А превосходство в чём?
Спасибо за внимание
Re[4]: Недоучки по настоящему ООП не освоили (из-за Basic и С++)
Здравствуйте, so5team, Вы писали:
S>Предлагаю посмотреть на свой код, на исходный и сравнить сигнатуры виртуальных методов f и vf. В исходном примере сигнатуры одинаковые, в вашем -- нет.
Сигнатуры f одинаковые. Сигнатуры vf в вашем примере отсутствуют, а значит могут быть любыми.
И каждый день — без права на ошибку...
Re[2]: Недоучки по настоящему ООП не освоили (из-за Basic и С++)
Здравствуйте, 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 и С++)
Здравствуйте, so5team, Вы писали:
S>Предлагаю посмотреть на свой код, на исходный и сравнить сигнатуры виртуальных методов f и vf. В исходном примере сигнатуры одинаковые, в вашем -- нет.
Кстати, у вас сигнатуры метода f разные:
void f() override A::f {
void f() override B::f {
И каждый день — без права на ошибку...
Re[5]: Недоучки по настоящему ООП не освоили (из-за Basic и
Здравствуйте, B0FEE664, Вы писали:
S>>Предлагаю посмотреть на свой код, на исходный и сравнить сигнатуры виртуальных методов f и vf. В исходном примере сигнатуры одинаковые, в вашем -- нет. BFE>Сигнатуры f одинаковые.
f в вашем примере не виртуальная функция. Т.е. это не эквивалент ни разу.
Ваш пример показывает то, что если в языке напрямую нельзя сделать требуемое, то можно найти обходной маневр, усложнить логику и обложиться обертками. Но все это лишь демонстрирует недостаточный уровень поддержки ООП из-за чего обходной маневр с обертками и нужен.
Вам альтернативная одаренность не позволила воспринять слова "псевдокод в синтаксисе a la C++" или где? Или вы думаете, что ключевое слово override в C++ является частью сигнатуры?
Блин, я не против конструктивного общения, но когда человек упорно тупит и не пытается воспринять то, что ему говорят (или уточнить то, что он не понимает), это утомляет.
Re[5]: Недоучки по настоящему ООП не освоили (из-за Basic и
Здравствуйте, sergii.p, Вы писали:
S>>Если мы делаем какой-то класс WriteAheadLog, который наследуется и от TraceCollector, и от TemporaryBuffer,
SP>а как же single responsibility? Мне кажется, этот пример попахивает плохим дизайном и не может быть объявлен kill-фичей ООП.
Я специально делал оговорку:
> здесь разговор не столько о практической пользе, сколько об определениях и соответствии этим определениям.
Ну и речь не о том, киллер фича или нет, а о том, что считать "настоящим ООП языком", а что не считать.
Дал бы Шмыга определение Ъ-шности, было бы проще. Но Шмыга как обычно Шмыга.
Поэтому можно озвучить вот такой критерий.
Re[2]: Недоучки по настоящему ООП не освоили (из-за Basic и
Здравствуйте, so5team, Вы писали:
S>Что до желания обсудить настоящесть ООП, предлагаю рассмотреть реализацию такого примера (псевдокод в синтаксисе a la C++, но на C++ это не реализуется): S> . . .
Обходится добавлением пары промежуточных классов в иерархию наследования (если по каким-то причинам нам недоступно переименование методов в базовых классах).
Думаю, этот недостаток давно бы уже восполнили, если бы это создавало какие-то массовые неудобства. Но, насколько я могу судить, С++ развивается в другом направлении.
Здравствуйте, Shmj, Вы писали:
S>Просьба осудить.
Осудить запросто. Достали уже попытки пихать ООП везде и осиливать это ООП. Давно уже люди, которые следят за индустрией, поняли, что серебряной пули не существует, есть под определенную задачу определенная оптимальная парадигма, причем эта оптимальная парадигма может меняться со временем. Любовь постсоветского пространства к тому, чтоб что то осиливать, ужасает. Сначала паскаль все осиливали и многие надрачивают паскаль до текущего дня. Сейчас, когда мода на ООП прошла, начали надрачивать на "настоящее" ООП. Конечно хреново, когда человек про ООП не слышал, и когда применить уместно, не применяет ни черта, и вместо элегантного решения городит ужас какой спагетти. Но чаще встречается наоборот, когда кто то наслышан только об ООП, и фигачит его вообще везде, и вместо простого расширяемого компактного и поддерживаемого простого решения хреначит фабрики фабрик и абстракцией над абстракцией, кода получается раз в 10 больше чем в рамках других парадигм и соответствующая раздутая сложность.
Re[4]: Недоучки по настоящему ООП не освоили (из-за Basic и С++)
Здравствуйте, Doom100500, Вы писали:
D>CreateFile — какое сообщение и кому отправляет? Где ловят ответ на это сообщение? WIN API — это не только GUI. А GUI — это обмен сообщениями везде — не только в WINAPI.
Я в основном про GUI виндов. Если бы CreateFile отправлял сообщения это уже какой-то совсем SmallTalk был бы.
Re: Недоучки по настоящему ООП не освоили (из-за Basic и С++)
Здравствуйте, rg45, Вы писали:
R>Обходится добавлением пары промежуточных классов в иерархию наследования (если по каким-то причинам нам недоступно переименование методов в базовых классах).