Согласитесь с tofutim - в вашем текущем примере разумно передвигаться и останавливаться на транспортном средстве.
Прочитав статью - я думаю, что он использует мощный язык, чтобы выдвинуть точку ... помните - наследование - это инструментчтобы помочь выполнить работу.
Но если мы примем предположение, что по тем или иным причинам вы не можете / не будете использовать инструмент в этом случае, вы можете начать с разбивки его на небольшие интерфейсы свспомогательные объекты и / или посетители ...
Например - Типы транспортных средств включают подводную лодку, лодку, самолет, автомобиль и велосипед.Вы можете разбить его на интерфейсы ... IMoveable + Forward () + Backward () + Left () + Right ()
IFloatable + Dock ()
ISink () + BlowAir ()
IFly () + Takeoff () + Land ()
И тогда ваши классы могут объединять множество интерфейсов, которые вы только что определили.
Проблема заключается в том, чточто вы можете в конечном итоге дублировать некоторый код в классе автомобиля / велосипеда для IMoveable.Left () и IMoveable.Right ().Вы можете преобразовать это в вспомогательный метод и объединить вспомогательный метод ... но если вы последуете его логическому завершению, вы все равно в конечном итоге проведете рефакторинг многих вещей обратно в базовые классы.
Наследование и агрегация - это инструменты.... ни один из которых не является "злом".
Надеюсь, это поможет.