You are always dealing with state and control-flow in software design. The challenge is to minimize state at much as possible, make it immutable as much as possible and simplify you control-flow as much as possible. OO-style inheritance of implementation (with mutable state dispersed all over the place and pinball-style control-flow) goes against those goals.
Closer to the "ideal": declarative approaches, pure functions, data-oriented pipelines, logic programming.
Closer to the "ideal": declarative approaches, pure functions, data-oriented pipelines, logic programming.