Подумалось тут, про уровни абстракции и про взаимоотношения объектов.
Если расширять старую шутку про "математики - это такие машины, перегоняющие кофе в теоремы" до "а программисты перегоняют кофе в код" и пытаться описать её в функциональном языке программирования, резко окажется, что "машина", которая выдаёт "результаты" - не математики или программисты, а кофе.

Ну, посудите сами:
Ввод - вывод:
Кофе(математик) - теорема
Кофе(программист) - код

Но! В парадигме ООП резко становится лучше описывать именно классы "программист" и "математик"; с методом, например, питьё.

Программист.питьё(кофе) - код
Математик.питьё(кофе) - теорема

А метод "питьё", соответственно, общий для всего, что наследует класс "Человек" в целом.

Так. кажется. сегодня я продуктивно поработал и знатно упоролся.