DeaDDooMER wrote:
Можно. Но зачем? Для полноценного использования vbo рисовалка все равно должно быть массовой. Не метод TMonster.Draw(), а процедура g_monsters.DrawAllMonsters() или специальный под это класс или юнит. А в идеале вообще DrawEverything() рисующая все типы объектов за раз. Это большие куски рендера, а рендеру все равно лучше знать как рисовать.
Аргумент. А если такую процедуру сделать на уровне класса (т.е. как
class procedure)?
Можно, конечно, и в виде процедуры
g_monsters.DrawAllMonsters(), а нужные данные высунуть из
TMonster при помощи
private/
protected видимости (такие поля, в отличие от
strict private и
strict protected, заодно доступны и всему модулю, в котором класс обозначен). Но это мне кажется менее чистым решением: простые процедуры и функции я бы использовал только для сугубо рутинного кода без намёков на объектность. То есть, скажем, мастырить классы вида
TMathOperations с функциями вроде
sin() в качестве методов - маразм и объектность ради объектности, потому что класс должен обозначать сущность, над которой оперируют. Если же речь идёт о простом разграничении ответственности в коде, то для этого модули и предназначены. Вот был бы тип
Real классом - тогда другой разговор.
DeaDDooMER wrote:
Не понимаю что это нам даёт.
Это даёт нам прежде всего простой, внятный и очень читаемый код.
ketmar wrote:
учитывать в интерфейсах всё во-первых, невозможно, а во-вторых, ненужно: получается раздутая хрень, которая неудобна в использовании для любого случая. для «универсального интерфейса» тебе придётся предусматривать даже те случаи из будущего, о которых ты сегодня знать не знаешь.
Вообще всё учитывать я и не предлагал. Скорее, у меня вопрос был в том, насколько такая абстракция неявна, что для её реализации придётся заведомо косить в сторону универсальности.