Хелперы vs множественное наследование
От: Khimik  
Дата: 03.03.19 15:57
Оценка:
Я уже давно спрашиваю на разных форумах про множественное наследование и интерфейсы в 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, например myfilestream1.hfWriteBoolean();
"Ты должен сделать добро из зла, потому что его больше не из чего сделать". АБ Стругацкие.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.