В чем заключаются их различия на уровне реализации?
Насколько мне известно, зависимость применяется тогда, когда критичны изменения в интерфейсе зависимого класса, то есть переименуй его метод, и в зависящем классе, использующем этот метод, все рухнет. Исходя из этого, мне не понятно, в чем толк от ассоциации? Содержать ссылку в классе A на класс B и иметь табу на использование его интерфейса?