|
Хелперы vs множественное наследование
|
|||
---|---|---|---|
#18+
Я уже давно спрашиваю на разных форумах про множественное наследование и интерфейсы в 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
Нравится:
Не нравится:
|
|||
01.03.2019, 14:48 |
|
Хелперы vs множественное наследование
|
|||
---|---|---|---|
#18+
Droog 01.03.2019, 14:48 Я хочу добавить ко всем этим стримам функции для более удобного чтения/записи конкретных типов данных: ReadBoolean, ReadInteger, ReadString, WriteBoolean, WriteInteger, WriteString и т.д. И тут начинается ерунда т.к. я не могу добавить эти методы к классу TStream, а могу только к наследникам. Как мне добавить эти методы к разным типам стримов без дублирования кода? ReadStreamInteger( Stream: TStream ), ReadStreamBoolean( Stream: TStream ), ... И всё, и никакого дублирования кода. А так же никаких интерфейсов и хелперов. И никаких проблем. ... |
|||
Модератор:
Нравится:
Не нравится:
|
|||
04.03.2019, 17:58 |
|
Хелперы vs множественное наследование
|
|||
---|---|---|---|
#18+
YuRock 04.03.2019, 17:58 Droog 01.03.2019, 14:48 Я хочу добавить ко всем этим стримам функции для более удобного чтения/записи конкретных типов данных: ReadBoolean, ReadInteger, ReadString, WriteBoolean, WriteInteger, WriteString и т.д. И тут начинается ерунда т.к. я не могу добавить эти методы к классу TStream, а могу только к наследникам. Как мне добавить эти методы к разным типам стримов без дублирования кода? ReadStreamInteger( Stream: TStream ), ReadStreamBoolean( Stream: TStream ), ... И всё, и никакого дублирования кода. А так же никаких интерфейсов и хелперов. И никаких проблем. Так выходит что вообще не нужны классы или рекорды: можно их всех заменить на такие функции. Но инкапсуляция же очень полезна, она позволяет быстро вспомнить название функции, которая работает с конкретным классом или рекордом (набираем имя переменной, нажимаем точку и получаем список этих функций). ... |
|||
Модератор:
Нравится:
Не нравится:
|
|||
09.03.2019, 11:19 |
|
Хелперы vs множественное наследование
|
|||
---|---|---|---|
#18+
Droog 09.03.2019, 11:19 Дык вы так элементарно запутаетесь в коде, когда функций будет очень много. Да и в чем путаться? В трех функциях? Естественно их надо было сделать в абстрактном предке TStream, да и все. В своих подобных предках я и делаю. ... |
|||
Модератор:
Нравится:
Не нравится:
|
|||
13.03.2019, 02:00 |
|
Хелперы vs множественное наследование
|
|||
---|---|---|---|
#18+
Множественное наследование используют только пидорасы. ... |
|||
Модератор:
Нравится:
Не нравится:
|
|||
25.03.2019, 08:32 |
|
Хелперы vs множественное наследование
|
|||
---|---|---|---|
#18+
vimba 25.03.2019, 08:32 Множественное наследование используют только пидорасы. ... |
|||
Модератор:
Нравится:
Не нравится:
|
|||
25.03.2019, 08:34 |
|
Хелперы vs множественное наследование
|
|||
---|---|---|---|
#18+
vimba 25.03.2019, 08:32 Множественное наследование используют только пидорасы. ... |
|||
Модератор:
Нравится:
Не нравится:
|
|||
25.03.2019, 18:12 |
|
Хелперы vs множественное наследование
|
|||
---|---|---|---|
#18+
Droog 01.03.2019, 14:48 А в других языках они есть? "Хелперы vs множественное наследование" - не правильное, на мой взгляд, противопоставление. Это для совершенно разных вещей: наследование - это иерархии типов, которые потом уже не меняются, хелперы - свистоперделки ... |
|||
Модератор:
Нравится:
Не нравится:
|
|||
22.07.2019, 11:05 |
|
Хелперы vs множественное наследование
|
|||
---|---|---|---|
#18+
Droog 01.03.2019, 14:48 И я думаю, что для избегания этих проблем буду делать так: все функции, реализованные через хелперы, будут иметь название, начинающееся с hf, например mystream1.hfWriteBoolean(); ... |
|||
Модератор:
Нравится:
Не нравится:
|
|||
22.07.2019, 11:11 |
|
|
start [/forum/topic.php?fid=2&fpage=4&tid=25428]: |
0ms |
get settings: |
12ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
29ms |
get topic data: |
99ms |
get forum data: |
3ms |
get page messages: |
154ms |
get tp. blocked users: |
2ms |
others: | 31ms |
total: | 350ms |
0 / 0 |