2013-05-20 2 views
2

Я ищу полное описание концепции инкапсуляции, и я вижу, что найденные ответы как-то похожи на кусочки головоломки и должны быть собраны вместе. Я нашел парование описания этого понятия:Процедура и инкапсуляция OO

Инкапсуляции является методом создания полей в классе частной и обеспечение доступа к полям с помощью общедоступных методов. Если поле объявлено приватным, доступ к нему не может быть доступен никому вне класса, , тем самым скрывая поля внутри класса. По этой причине инкапсуляция также называется скрытием данных. (Источник tutorialspoint)

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

Инкапсуляция позволяет объекту отделить его интерфейс от его реализации . Данные и код реализации для объекта скрыты за его интерфейсом.

Инкапсуляция - это техника. Это может быть или не быть для помощи в абстракции , но это, безусловно, касается скрытия информации и/или организации . Это требует, чтобы данные и функции были сгруппированы в некотором роде - , конечно, хорошая практика ООП требует, чтобы они были сгруппированы по абстракции. Тем не менее, существуют и другие виды использования, которые только помочь в
ремонтопригодность и т.д. (источник stackoverflow)

В процедурном программировании в основном то же самое я думаю, что и здесь лучшим примером является ФАЙЛА структура, которая создается или изменяется только функции файла.

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

+0

В чем вопрос ..? – user2246674

ответ

3

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

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

Другим примером могут быть сетевые протоколы. При запросе этой страницы в вашем браузере используется HTTP, который, в свою очередь, использует протокол TCP протокола передачи. На уровне ниже есть только IP-протокол IP с полезной нагрузкой, без TCP. Там TCP - это просто некоторая информация, инкапсулированная в полезную нагрузку IP. На уровне ниже нет IP, но MAC и IP - некоторая ненужная информация, инкапсулированная в полезную нагрузку MAC.

А может быть слегка надуманный пример реальной жизни: Отправка плюшевого мишку по почте. Интерфейс вашей почтовой службы ожидает ящик с адресной информацией. Он не будет смотреть в коробку и не увидит медведя. Когда получатель получит пакет, он откроет его, и он может прижаться к медведю. Теперь представьте, что почтовая служба была предназначена для отправки вам плюшевого мишку. Как можно использовать этот интерфейс (медведь + адрес)? Маленький. Вместо этого мы применяем абстракцию и создаем интерфейс (box + address). И мы применяем инкапсуляцию, помещая нашего плюшевого мишку в коробку, скрывая информацию, которую мы фактически посылаем плюшевого мишку. Бедный плюшевый.

+0

Благодарим вас за ответ. я знаю, что я был не очень ясен по моему вопросу, но ваши первые 2 примера очень хороши. я спорил с некоторыми друзьями по этой теме (инкапсуляция), и они говорили об инкапсуляции как о концепции только ООП, а также в Интернете, которую я видел в некоторых местах, что понятие инкапсуляции не для процедурного программирования, которое я не нашел –

+0

Это вопрос, который часто задают вопросы для интервью, и я думаю, что большинство людей (включая меня) ответили неполным –

+0

В качестве побочного примечания, если вы обсуждаете такие темы, вам может показаться, что это интересно: люди, которые утверждают, что объектно-ориентированные программирование может быть выполнено только в объектно-ориентированных языках, таких как Java, чтобы взглянуть на [GObject] (https: //developer.gnome.org/gobject/stable /), очень обширная система объектов, полностью написанная на C. Существует даже объектно-ориентированный язык (называемый [Vala] (https://live.gnome.org/Vala)), который переводится на C код, который использует GObject. Таким образом, концепции из ООП могут использоваться и на не-объектно-ориентированных языках, это просто сложнее делать или менее читаемо время от времени. –

0

Я покажу его с глупым простым примером. Давайте определим класс круга:

public class Circle { 
    private double radius; 

    public Circle(double radius) { 
     this.radius = radius; 
    } 

    public double getRadius() { 
     return radius; 
    } 

    public double getPerimeter() { 
     return 2 * radius * Math.PI; 
    } 
} 

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

public class Circle { 
    private double diameter; 

    public Circle(double radius) { 
     this.diameter = radius * 2; 
    } 

    public double getRadius() { 
     return diameter/2; 
    } 

    public double getPerimeter() { 
     return diameter * Math.PI; 
    } 
} 

состояния объекта теперь представлены по-разному. Но поскольку это состояние инкапсулировано в объект, а интерфейс (публичные методы) объекта не изменяется, клиенты все равно могут использовать объект, как будто ничего не изменилось.

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

2

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

Языки ООП обычно предоставляют способы улучшения/достижения инкапсуляции, такие как модификаторы видимости (принцип сокрытия информации).

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

Другое дело, что это не так:

Инкапсуляция является метод создания полей в классе частной и обеспечения доступа к полям с помощью общедоступных методов.

Это Информация Скрытие принципа.

+0

в словах «2», которые я бы сказал: «Инкапсуляция = принцип сокрытия информации + принцип открытого закрывания» –

+0

Я бы сказал, что инкапсуляция - это способ достижения OCP. –

Смежные вопросы