Абстракция и абстракция в Java - PullRequest
7 голосов
/ 26 марта 2011

Я Java разработчик с хорошим пониманием концепций объектной ориентации ( или, может быть, я так думаю ).И сейчас я изучаю шаблоны проектирования (Из головы - первые шаблоны проектирования).Я читал об абстракции концепции OOPS, чтобы кратко понять ее, и чтение о ней сделало меня более запутанным, чем раньше.

Как я понимаю, абстракция относится к сокрытию внутренних деталей программы, в то же время раскрывая интерфейс другим программистам, не беспокоясь о внутренних деталях.Но я не понимаю

  1. Как абстрактные классы вписываются в эту концепцию абстракции, где абстрактный класс просит меня реализовать абстрагированный метод, где абстракция в использовании абстрактных классов в Java.
  2. Мне кажется, что одним из способов реализации абстракции является закрытый конструктор и обращение к пользователю класса с помощью метода фабрики, чтобы получить объект класса, в котором вы можете реализовать и скрыть детали реализации.

Пожалуйста, поправьте меня, если я где-то ошибаюсь.

Ответы [ 2 ]

8 голосов
/ 26 марта 2011

«Абстракция» - это антоним «бетона».С помощью абстракций вы представляете понятия и идеи, а не конкретный способ реализации этих идей.Это вписывается в ваше понимание абстракции - вы скрываете детали и показываете только интерфейс.

Но это также подходит и для абстрактных классов - они не являются конкретными (их нельзя создать, например)и они не указывают реализации.Они задают абстрактные идеи, о которых должны заботиться подклассы.

Так что это в основном другая точка зрения - одна с точки зрения клиентов API, а другая также о подклассах.(Обратите внимание, что в некоторых случаях вы можете использовать абстрактные классы вместо интерфейсов для достижения того же эффекта, хотя это не считается хорошей практикой)

0 голосов
/ 26 марта 2011
  1. Абстрактные классы определяют интерфейс, который будут использовать пользователи класса. Абстрактный класс похож на интерфейс, за исключением того, что некоторый метод может быть реализован, и все абстрактные будут реализованы конкретными классами, которые его расширяют. Таким образом, преимущество заключается в том, что у вас может быть несколько реализаций одного и того же абстрактного класса, которые полностью взаимозаменяемы, поскольку класс, с которым работает пользователь, имеет абстрактный тип, а не конкретный тип реализации.

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

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