:arrow: Flexibilidade em IoC:
Por exemplo você tem a interface UsuarioDAO e injeta a implementação JDBCUsuarioDAO… se um belo dia você injetar a HibernateUsuarioDAO… vai ser transparente pro sistema.
:arrow: Flexibilidade nos testes:
Você tem um objeto que contém as regras de negócio e tem como dependencia, por exemplo, nosso UsuarioDAO… pra testar você pode passar um Mock que implementa UsuarioDAO e injetar no objeto de negócio… assim você testa exatamente sua regra de negócio mas com um mock, não com uma base de dados real (se quiser, claro).
:arrow: Flexibilidade de código:
Segue a mesma linha do exemplo do IoC, você pode mudar todo um layer que isso vai ser invisível para os outos (se estiver bem projetado)
E o polimorfimso, por mais que pareca só um conceito, engloba uma série de outros itens como reutilização de código, coesão, etc etc…
Bom, acho que é ± isso.
[]´s