Какая польза от абстракции? - PullRequest
0 голосов
/ 09 февраля 2019

Я изо всех сил пытаюсь понять общее использование Abstraction в Java.

Я работал над примером в этой ссылке: https://javatutorial.net/java-abstraction-example Я понимаю реализацию этого, но я не 'не понимаю, почему это даже необходимо.Почему их метод executeSalary создается в классе Employee, если они просто собираются выполнить его снова в 2 подклассах?

1 Ответ

0 голосов
/ 09 февраля 2019

Общее использование абстракции развязано.Для работы с Employee не нужно знать реализацию, только интерфейс и его контракты.Это, например, используется для Collections.sort(List<T> list): программистам Collections.sort(...) не нужно было знать реализацию определенного списка для его сортировки.Это обеспечивает то преимущество, что реализация поддерживает будущий код, соответствующий интерфейсу List . Этот вопрос связан в этом отношении (#selfPromotion).Меньшее сцепление ведет к меньшему трению и в целом к ​​менее хрупкому коду.

Тем не менее, приведенный вами пример плохой, поскольку он нарушает Принцип единой ответственности : Это не ответственностьEmployee экземпляр для расчета зарплаты.Для этого у вас должен быть отдельный объект, который рассчитывает зарплату на основе Employee экземпляра и нескольких отработанных часов.Внутренне, этот Uber-калькулятор может использовать Chain of Responsibility , который содержит одну Calculator за Employee -воплощение, отделяя Employee от того, как рассчитывается ее / его зарплата.Это обеспечивает дополнительное преимущество расширяемости и гибкости: если меняется способ расчета заработной платы (например, может быть, компания меняет политику так, что каждый FullTimeEmployee получает одинаковую зарплату, или, возможно, компания хочет рассчитывать зарплату по неделямвместо помесячной) другие службы, использующие FullTimeEmployee, скажем, не затрагиваются).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...