Хотя инкапсуляция - это уже какое-никакое ООП
Инкапсуляция была и до ООП. Инкапсуляция - необходимое, но не достаточное условие.
ООП радикально отличается от процедурного со структурами тем, что объекты полиморфны (и наследование тут - как одна из граней этого полиморфизма).
ООП тут бы было если был бы базовый класс MathModel, у неё виртуальные методы CalculateNextStep и UpdateGraphic, и ядро программы общалось с этой моделью не зная заранее какого она именно класса. Т.е. полиморфизм.
А если просто объект и просто методы и код заранее знает с каким "объектом" общается - то это процедурщина со структурами имеющими легкий синтаксический сахарок когда имена функций запечены в неймспейсы структур.