"Por exemplo, as rotinas que recalculam a posição, a velocidade e a direção dos objetos devem ser as mesmas tanto para os passageiros quanto para os botes."
Entendo que a posição pode ser calculada a partir da velocidade e da direção, mas a velocidade e a direção do bote e dos passageiros são calculadas de forma diferente.
Nesse caso, poderiam ser escritas rotinas diferentes para determinar a velocidade e a direção de bote e passageiros?
Pode sim, mas você precisa garantir o reuso das partes redundantes; não escreva blocos de códigos iguais em funções parecidas!