Прежде чем разрабатывать программу с использованием ООП, надо разработать иерархию типов. Определяя иерархию типов, надо собрать все общие атрибуты, в один тип-предок и позволить остальным типам иерархии наследовать все общие элементы этого типа.
При выборе типа метода, статического или виртуального, можно использовать следующее правило: если есть хотя бы малейшая вероятность того, что понадобится из метода предка вызов переопределенного метода потомка, целесообразно делать метод виртуальным.
Преимуществом использования виртуальных методов является то, что типы объектов и методы можно определить в модуле и поставить пользователю модуль в виде TPU-файла. Для работы с объектами модуля надо знать содержимое только интерфейсной части модуля. Используя полиморфные объекты и виртуальные методы, пользователь TPU-файла может добавлять новые методы к уже существующим.
Добавление новых функциональных характеристик в программу без модификации ее исходного кода (текста) называют способностью к расширению. Это - результат наследования. Позднее связывание позволяет связать новые методы с существующими во время выполнения программы, требуя лишь небольшого увеличения ТВМ.
Не следует сомневаться в том, включать или не включать в объект метод, который может быть использован или не использован в конкретной программе. Неиспользуемые методы не влияют ни на быстродействие программы, ни на размер ЕХЕ-файла: если они не используются, то они не включаются в него.
В общем случае рекомендуется делать методы виртуальными. Но они требуют ОП для ТВМ. Кроме того, каждый вызов виртуального метода проходит через ТВМ и требует для этого дополнительное время. Использование статических методов имеет смысл, если надо получить оптимальную эффективность программы по скорости ее выполнения и использованию ОП. Статические методы вызываются непосредственно. Поэтому вызов статического метода более быстрый, чем вызов виртуального. Если в объекте нет виртуальных методов, в сегменте данных отсутствует ТВМ и программа будет работать быстрее. Однако в этом случае теряется вариант расширения возможностей на этапе выполнения программы, при позднем связывании.