powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Вопросы по IT / Хелперы vs множественное наследование
9 сообщений из 9, страница 1 из 1
Хелперы vs множественное наследование
    #1006916
Droog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я уже давно спрашиваю на разных форумах про множественное наследование и интерфейсы в Delphi, и никто не до сих пор не объяснил на пальцах суть всего этого.
Вот пример задачи, для которой мне нужно множественное наследование. В Delphi есть класс TStream, и наследники TFileStream и TMemoryStream. Я хочу добавить ко всем этим стримам функции для более удобного чтения/записи конкретных типов данных: ReadBoolean, ReadInteger, ReadString, WriteBoolean, WriteInteger, WriteString и т.д. И тут начинается ерунда т.к. я не могу добавить эти методы к классу TStream, а могу только к наследникам. Как мне добавить эти методы к разным типам стримов без дублирования кода?
Насколько я понял, для этого можно использовать интерфейсы, но я пока не знаю как конкретно это реализовать, и вообще в Delphi интерфейсы вроде привязаны к COM, у них у всех есть GUID, и это уже вызывает тоску.

Недавно я узнал про хелперы в Delphi:

http://asd-soft.ru/integer-helper-create/

А в других языках они есть? Я пока не начал это осваивать, но вроде понятен их смысл – можно прикрутить к любому типу, например, integer, какую-то функцию, например GetFactorial, и писать в коде fact1:=12.GetFactorial;
Очевидно, хелперы можно применить для моей задачи – прикрутить их напрямую к классу TStream. Но я слышал, что использование хелперов опасно, поскольку оно противоречит парадигме ООП. Хотелось бы узнать об этом подробнее.
Мне кажется, главная опасность использования хелперов с классами возникает там, где есть динамические функции. И я думаю, что для избегания этих проблем буду делать так: все функции, реализованные через хелперы, будут иметь название, начинающееся с hf, например mystream1.hfWriteBoolean();
...
Изменено: 01.03.2019, 14:49 - Droog
Рейтинг: 0 / 0
Хелперы vs множественное наследование
    #1014418
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[игнорирует гостей кроме]
Droog  01.03.2019, 14:48
Я хочу добавить ко всем этим стримам функции для более удобного чтения/записи конкретных типов данных: ReadBoolean, ReadInteger, ReadString, WriteBoolean, WriteInteger, WriteString и т.д. И тут начинается ерунда т.к. я не могу добавить эти методы к классу TStream, а могу только к наследникам. Как мне добавить эти методы к разным типам стримов без дублирования кода?
Я такие задачи решаю легко и просто - добавляю отдельный модуль StreamUtils, и в нём функции следующего вида:
ReadStreamInteger( Stream: TStream ), ReadStreamBoolean( Stream: TStream ), ...

И всё, и никакого дублирования кода. А так же никаких интерфейсов и хелперов. И никаких проблем.
...
Рейтинг: 0 / 0
Хелперы vs множественное наследование
    #1026179
Droog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRock  04.03.2019, 17:58
Droog  01.03.2019, 14:48
Я хочу добавить ко всем этим стримам функции для более удобного чтения/записи конкретных типов данных: ReadBoolean, ReadInteger, ReadString, WriteBoolean, WriteInteger, WriteString и т.д. И тут начинается ерунда т.к. я не могу добавить эти методы к классу TStream, а могу только к наследникам. Как мне добавить эти методы к разным типам стримов без дублирования кода?
Я такие задачи решаю легко и просто - добавляю отдельный модуль StreamUtils, и в нём функции следующего вида:
ReadStreamInteger( Stream: TStream ), ReadStreamBoolean( Stream: TStream ), ...

И всё, и никакого дублирования кода. А так же никаких интерфейсов и хелперов. И никаких проблем.
Дык вы так элементарно запутаетесь в коде, когда функций будет очень много.
Так выходит что вообще не нужны классы или рекорды: можно их всех заменить на такие функции. Но инкапсуляция же очень полезна, она позволяет быстро вспомнить название функции, которая работает с конкретным классом или рекордом (набираем имя переменной, нажимаем точку и получаем список этих функций).
...
Рейтинг: 0 / 0
Хелперы vs множественное наследование
    #1035603
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[игнорирует гостей кроме]
Droog  09.03.2019, 11:19
Дык вы так элементарно запутаетесь в коде, когда функций будет очень много.
Я не запутываюсь потому, что такие задачи у меня встречаются крайне редко. А именно - за ~20 лет работы 1 раз.
Да и в чем путаться? В трех функциях?

Естественно их надо было сделать в абстрактном предке TStream, да и все.
В своих подобных предках я и делаю.
...
Рейтинг: 0 / 0
Хелперы vs множественное наследование
    #1069086
vimba
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Множественное наследование используют только пидорасы.
...
Рейтинг: 0 / 0
Хелперы vs множественное наследование
    #1069088
Фотография Буся
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vimba  25.03.2019, 08:32
Множественное наследование используют только пидорасы.
пашэтанки это опровергают
...
Рейтинг: 0 / 0
Хелперы vs множественное наследование
    #1070946
Фотография Гарыныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[игнорирует гостей кроме]
vimba  25.03.2019, 08:32
Множественное наследование используют только пидорасы.
ничосе, Вимба пришол! Привет
...
Рейтинг: 0 / 0
Хелперы vs множественное наследование
    #1392829
Droog  01.03.2019, 14:48
А в других языках они есть?
в C# есть. используются повсеместно. по сути - это сахар, ничего в концепцию ООП не вносит. Есть опасность засрать код хелперами, но его засрать можно и без хелперов.
"Хелперы vs множественное наследование" - не правильное, на мой взгляд, противопоставление. Это для совершенно разных вещей: наследование - это иерархии типов, которые потом уже не меняются, хелперы - свистоперделки
...
Рейтинг: 0 / 0
Хелперы vs множественное наследование
    #1392844
Droog  01.03.2019, 14:48
И я думаю, что для избегания этих проблем буду делать так: все функции, реализованные через хелперы, будут иметь название, начинающееся с hf, например mystream1.hfWriteBoolean();
VS сама подсказывает, где хелпер
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Вопросы по IT / Хелперы vs множественное наследование
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]