Использование интерфейса в Java в качестве средства для работы над кодом с большим количеством команд - PullRequest
0 голосов
/ 08 февраля 2019

Я столкнулся с этим вопросом и ответом, когда пытался подготовиться к экзамену Java OCA.

Представьте, что вы работаете с другой командой над созданием приложения.Вы разрабатываете код, который использует класс, который другая команда еще не закончила писать.Какой элемент Java лучше всего облегчит эту разработку, позволяя легко интегрироваться после завершения кода другой команды?

A.Абстрактный класс

B.

Интерфейс

Я ответил A, но истинный ответ был B.

Причина была:

Ключевым моментом здесь является понимание того, какие из этих функций Java позволяют одному разработчику создавать свое приложение на основе кода другого разработчика, даже если этот код еще не готов.Для этой проблемы интерфейс - лучший выбор.Если две команды согласовывают общий интерфейс, один разработчик может написать код, который использует интерфейс, а другой разработчик пишет код, который реализует интерфейс.Предполагая, что ни одна из команд не меняет интерфейс, код может быть легко интегрирован, как только обе команды будут готовы.По этим причинам вариант B является правильным ответом.

Я не понимаю, как вы можете использовать интерфейс без его реализации.Любая помощь будет оценена.

С уважением,

Ответы [ 3 ]

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

Вы не можете написать абстрактный класс, так как вы действительно не хотите писать код, который выбрасывается.Другая группа в конечном итоге доставит свой класс, поэтому все усилия, которые вы приложите к своему абстрактному классу, с большой вероятностью будут напрасными.

Реализация чистого интерфейса дает вам и другой команде очень хорошее представление о том, что вам нужно,поэтому реализация этого должна быть прямой.

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

Вы можете разработать клиентский код интерфейса (т.е. классы, которые используют интерфейс), ссылаясь на фальшивую реализацию (например, реализацию, возвращающую фиксированные данные) интерфейса, в то время как другие разработчики работают над реализацией реального интерфейса и интегрируют реальную реализацию, когда это будетимеется в наличии.Вы можете использовать фиктивную реализацию, чтобы одновременно запускать автоматические тесты и запускать всю систему, или использовать mocking library для автоматизации тестов.Основная идея, как вы сказали, заключается в том, чтобы ссылаться только на абстракции (интерфейсы), чтобы заменить реализации .Интерфейсы являются лучшими абстракциями, чем абстрактные классы, из-за их только абстрактной природы (действительно, абстрактные классы могут иметь конкретные partes, интерфейсы не могут).

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

Ключ в том, что «один разработчик может написать код, который использует интерфейс», то есть вы можете написать код, который работает с экземплярами классов, которые реализуют этот интерфейс, и вызывать методы для них, фактически не зная, каким классом будут эти экземпляры или какие-либо другие.детали реализации, которые могут нарушить ваш код.

Таким образом, написание кода означает, что вы можете скомпилировать его, но, конечно, приложение не будет работать, если не будет предоставлена ​​реализация.Одной из реализаций может быть макет, который будет полезен для целей тестирования и который будет трудно сделать с абстрактными классами.

Почему абстрактные классы во многих случаях являются худшим выбором?Одной из причин может быть то, что класс может иметь только один прямой суперкласс и, следовательно, не может наследоваться от нескольких независимых абстрактных классов, в то время как реализация нескольких независимых интерфейсов проста.Это, помимо прочего, позволяет уменьшить связь, потому что вам не нужно помещать несвязанные методы в один класс.

...