Очень абстрактный пример.

Если он возникает из САПРовых задач, где эти объекты и их соединения являются не архитектурой программы, а обрабатываемыми программой.. то логично завести какой-нибудь базовый тип Element и т.п. и уже от него плясать.

Если же какая-то конкретная задача, то много вариантов может быть.

У того же думателя естественно завести одну процедуру Думать и параметризовать её - как именно думать. В общем случае можно параметризовать RECORD-сообщением.
Ведь думаний может быть много - не изменять же определение типа при каждом развитии программы?