> -- Дмитрий Дагаев писал(а):
> С дублированием кода в ООП (Фаулер) предлагается бороться рефакторингом. Скажем, возможно было бы создавать (в HostFiles или где-то еще) EXTENSIBLE File реализацию, складывать туда дублируемый код, а платформо-зависимое сводить (в HostFiles) LinFile = RECORD (File)... END.
Это можно решить иначе. Files.File может быть даже нерасширяемым типом, который содержит только платформо-неспецифический код, который вызывает, содержащийся в нём экземпляр полностью абстрактного типа, который, в идеале, содержит только минимально необходимый платформо-специфический код.

Я стараюсь всегда пользоваться такой схемой, когда нет зависимости от сторонних библиотек. Хорошо тем, что есть чёткое разделение на переопределяемые вещи и постоянные, требуется минимальное количество понятий в языке и повышается уровень динамичности в конструировании. Недостаток - может потребоваться больше памяти на композицию и, в целом, может вырасти уровень косвенности.