Delphi vs C++ vs C#
, ну и Java немножко, где-то ближе к старшему байту номеров страниц
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
| [216.73.216.156] |
|
|
Правила раздела:
| Страницы: (495) « Первая ... 307 308 [309] 310 311 ... 494 495 ( Перейти к последнему сообщению ) |
Delphi vs C++ vs C#
, ну и Java немножко, где-то ближе к старшему байту номеров страниц
|
Сообщ.
#4621
,
|
|
|
|
Цитата MyNameIsIgor @ Цитата Qraizer @ Не D_KEY ли korvin-у доказывал, что совпедание сигнатур методов ни о чём не говорит? Не, это я делал с большой пеной у рта. Когда доказывал D_KEY'ю, что утиная типизация для интерфейсов - плохо ![]() Ну тогда они вообще не нужны, ни в каком виде, при наличии множественного наследования и абстрактных классов? Просто мне казалось, что могло быть полезно наличие именно "утиных" интерфейсов, в чем-то аналогов концептов, но в рантайме. |
|
Сообщ.
#4622
,
|
|
|
|
Хороший, кстати, вопрос. Я бы повесился... |
|
Сообщ.
#4624
,
|
|
|
|
Цитата MyNameIsIgor @ Хороший, кстати, вопрос. Я бы повесился... Если честно(на основе опыта использования питона), то основная проблема не в ошибках использования "неправильных" объектов(что-то не припомню, чтобы они вообще были), а в том, что тяжело работать с кодом библиотек, которые не очень хорошо документированы. Например, когда не очень понятно, объект какого класса вернула какая-нибудь функция. |
|
Сообщ.
#4625
,
|
|
|
|
Нет. Я вижу большую разницу между тем и этим:
![]() ![]() class MDIWindowContainer: IStack { ... Добавлено Romkin, та забудь ты об интерфейсах. У тебя есть реализация. Чего-то. Тебе этого понадобилось два. Разных, но однотипных (-типных - это каламбурчик). Совмещать? |
|
Сообщ.
#4626
,
|
|
|
|
Цитата D_KEY @ Ну тогда они вообще не нужны, ни в каком виде, при наличии множественного наследования и абстрактных классов? Вот я к такому выводу и прихожу. Цитата D_KEY @ Просто мне казалось, что могло быть полезно наличие именно "утиных" интерфейсов, в чем-то аналогов концептов, но в рантайме. Угу, полезно. Если посмотреть с другой стороны, ты подобие дженериков в джавошарповском варианте предлагаешь ![]() Вопрос только остаётся открытым: имеем ли право делать такие интерфейсы, реализация которых не декларируется явно? Цитата D_KEY @ Цитата MyNameIsIgor @ Цитата D_KEY @ Я уже говорил, что наличие абстрактных классов и множественного наследования в языке приводит к тому, что интерфейсы(в том виде, что есть в Java/C#/etc.) не востребованы. Но их этого не следует, что абстрактные классы и интерфейсы - одно и тоже. Впрочем как и не следует, что интерфейсы должны быть в виде концептов ![]() Чего? |
|
Сообщ.
#4627
,
|
|
|
|
Цитата MyNameIsIgor @ Вопрос только остаётся открытым: имеем ли право делать такие интерфейсы, реализация которых не декларируется явно? А если разрешить явный каст? Или тоже плохо? |
|
Сообщ.
#4628
,
|
|
|
|
Пока продолжу. Есть логгер ILog, который реализован в TA и TB. Оба логируют (или логгируют, как правильно?) свои действия. Наследования простые! Предположим, реализация ILog, используемая TA и TB, пишет в файл. Вопрос: файлов логов дожно быть два или один?
|
|
Сообщ.
#4629
,
|
|
|
|
Цитата Qraizer @ Есть логгер ILog, который реализован в TA и TB.... реализация ILog, используемая TA и TB Не понял. Так TA и TB реализуют ILog или используют какую-то реализацию ILog? Цитата Наследования простые! Кто от кого? |
|
Сообщ.
#4630
,
|
|
|
|
D_KEY:
![]() ![]() class TA: ILog {/*...*/}; class TB: ILog {/*...*/}; |
|
Сообщ.
#4631
,
|
|
|
|
Цитата D_KEY @ А если разрешить явный каст? Или тоже плохо? Просто лишнее, имхо. Меня смущает сам факт того, что автор класса не знает об интерфейсах, под видом которых класс будут использовать... Наверное, просто привык к языкам, где всё иначе. |
|
Сообщ.
#4632
,
|
|
|
|
D_KEY, хорошо, используют. Для опрелённости. Хотя с точки зрения моего вопроса это несущественно.
|
|
Сообщ.
#4633
,
|
|
|
|
Qraizer, а кто пишет в файл(ы)?
Добавлено Qraizer, не очень понимаю, в чем заключается вопрос. Как будет нужно, так и нужно сделать |
|
Сообщ.
#4634
,
|
|
|
|
Та они же и пишут. Может быть отчитываются о своих действиях, может что-то отладочное выводят, или же это журналы юзерной активности. Неважно.
Добавлено Впрочем, уже достаточно. Раз не ответил сразу, значит что? Точно - вопрос не имеет однозначного ответа. Ответ зависит от конкретики. Легко можно предстваить себе, что контейнеры журналов отличаются, так же легко - что они совпадают. Главный вопрос: почему "проблема" ромба называется проблемой, если там точь в точь эта же ситуация? Дизайнер системы решает, как дожно быть, а программист это реализует. Всё, нет "проблемы". Как программист будет решать - наследованием, агрегацией - та пофиг. Добавлено И вот теперь настала пора вспомнить про вооон тот вопрос о разделении/совмещении аттрибутов. Добавлено Впрочем, можно и не вспоминать, я на него ответил спустя пару постов. |
|
Сообщ.
#4635
,
|
|
|
|
имхо, недостаточно данных. оба класса разрабатывает один и тот же человек?
но вообще, я думаю, что файлы должны быть разными, иначе TB должен наследоваться от TA (или наоборот) или использовать объект TA внутри себя как основной логгер, записывая в файл лога через него. или они должны оба наследоваться от одного базового TLog и писать через него (а если не через него, то в другой файл). как-то так |