2012-05-16 7 views
0

Можно создать дубликат:
difference between abstraction and encapsulation?
What is the difference between abstraction and encapsulation?Инкапсуляция/Абстракция

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

Это мое понимание, что Абстракция - средство разложения сложности объектов реального мира. Это разложение может включать создание нескольких объектов, которые в совокупности представляют объект реального мира. Абстракция может также содержать много слоев, наследование классов - пример того, когда это будет так.

Инкапсуляция - это процесс скрытия внутренних данных реализации внутри класса. Ключевыми являются такие функции языка, как модификаторы доступа и методы Accessor.

Если эти определения верны (исправьте меня, если я ошибаюсь), по какому принципу будут использоваться интерфейсы? Абстракция? потому что группа объектов реального мира может быть суммирована в интерфейсе? Или инкапсуляция, где сам интерфейс можно использовать для раскрытия функций объекта без выявления внутренней функциональности.

Если возможно, вы также можете привести краткий пример, который будет четко различать эти два принципа?

Cheers.

+3

См. [Урок: Интерфейсы и наследование] (http://docs.oracle.com/javase/tutorial/java/IandI/index.html). – user1329572

ответ

0

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

0

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

public abstract class GeometricFigures 
{ 

    public int perimeter(); //Common Behavior 
} 

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

Никогда не менее вы могли бы определить ребенок этого класса для примера trigule и этот класс наследует от GeometricFigures как этого

public class Triangle inherits GeometricFigures 
{ 
    public int size1; 
    public int size2; 
    public int size3; 
    public int perimeter(int size1, int size2, int size3); 
} 

Концепция Abstraction позволяет мне представить отец класс GeometricFigures понимание того, что этот класс Безразлично» t exit в реальности