Подтвердить что ты не робот

Простой способ понять инкапсуляцию и абстракцию

Изучение концепций ООП, особенно заинтересованных в глубоком понимании абстракции и инкапсуляции.

Вышеуказанный ниже

Абстракция VS Информация, скрывающая VS-инкапсуляцию

разница между абстракцией и инкапсуляцией?

Мне было очень сложно понять эти концепции без реального и простого примера фрагмента кода/кода.

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

Есть ли простой способ понять и помочь другим понять, что именно они представляют, а не повторять ниже?

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

4b9b3361

Ответ 1

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

Инкапсуляция - это процесс объединения данных и функций в единую единицу, называемую классом. В инкапсуляции данные напрямую не доступны; он доступен через функции, присутствующие внутри класса. В более простых словах атрибуты класса хранятся в частных и общедоступных методах getter и setter для управления этими атрибутами. Таким образом, инкапсуляция делает возможной концепцию скрытия данных.

enter image description here

Ответ 2

Абстракция скрывает информацию или предоставляет клиенту только необходимые данные.

Например, автомобильные тормоза - вы просто знаете, что нажатие педалей остановит автомобиль, но вам не нужно знать, как он работает внутри.

Преимущество абстракции Завтра, если выполнение тормоза меняется с барабанного тормоза на дисковый тормоз, как на клиента, вам не нужно менять (т.е. ваш код не изменится)

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

Например, Класс имеет атрибуты (например, данные) и поведение (например, методы, которые работают с этими данными)

Ответ 3

Пример использования С#

//abstraction - exposing only the relevant behavior
public interface IMakeFire
{
     void LightFire();
}

//encapsulation - hiding things that the rest of the world doesn't need to see
public class Caveman: IMakeFire
{
     //exposed information  
     public string Name {get;set;}

     // exposed but unchangeable information
     public byte Age {get; private set;}

     //internal i.e hidden object detail. This can be changed freely, the outside world
     // doesn't know about it
     private bool CanMakeFire()
     {  
         return Age >7;
     }

     //implementation of a relevant feature
     public void LightFire()
     {
        if (!CanMakeFire())
        {
           throw new UnableToLightFireException("Too young");
        }
        GatherWood();
        GetFireStone();
        //light the fire

     }

     private GatherWood() {};
     private GetFireStone();
}

public class PersonWithMatch:IMakeFire
{
      //implementation
 }

Любой пещерный человек может сделать огонь, потому что он реализует функцию IMakeFire. Наличие группы пожарных (Список) означает, что и Caveman, и PersonWithMatch являются действительными выборами.

Это означает, что

  //this method (and class) isn't coupled to a Caveman or a PersonWithMatch
  // it can work with ANY object implementing IMakeFire
  public void FireStarter(IMakeFire starter)
  {
        starter.LightFire();
    }

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

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

Ответ 4

Абстракция - обобщенный член. то есть инкапсуляция является подмножеством абстракции.

Абстракция - мощная методология для управления сложными системами. Абстракция управляется четко определенными объектами и их иерархической классификацией.

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


Инкапсуляция: Объединение элементов данных и метода вместе в один блок (например, класс) называется Encapsulation.

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

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

class Bag{
    book;
    pen;
    ReadBook();
}

Инкапсуляция означает скрытие внутренних деталей объекта, то есть как объект что-то делает.

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

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

Скрыть данные для обеспечения безопасности, например, сделать переменные как закрытыми, и открыть свойство для доступа к приватным данным, которые будут публичными.

Итак, при доступе к ресурсу вы можете проверить данные и установить их. Предоставлено

Ответ 5

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

Инкапсуляция - это "привязка" свойств и операций, которые манипулируют ими в одной единице абстракции (а именно в классе).
Таким образом, у автомобиля будет accelarate stop, который управляет местоположением и текущей скоростью и т.д.

Ответ 6

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

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

В объектно-ориентированном мире абстракция работает точно так же. Класс, который потребляет другие функции function/property, не должен знать, какие классы function/property он потребляет, и все должно быть абстрагировано с помощью интерфейса/абстрактного класса.

Позвольте мне ввести такой же пример. Здесь у меня есть класс "ElectricPlug" , на котором работает устройство. Но класс "ElectricPlug" не знает, какое устройство оно работает. Это может быть любой класс, реализующий интерфейс "IDevice", что означает, что реализация "RunDevice" абстрагируется от "ElectricPlug" . Вот полный пример кода,

class Program
{
    static void Main(string[] args)
    {
        ElectricPlug electricPlug = new ElectricPlug(new Bulb());
    }
}

public class ElectricPlug
{
    private readonly IDevice _device;
    public ElectricPlug(IDevice device)
    {
        _device = device;
    }

    public void Run()
    {
        _device.Rundevice();
    }
}


public interface IDevice
{
    void Rundevice();
}


public class Bulb : IDevice
{
    public void Rundevice()
    {
       Console.WriteLine("Switched on bulb");
    }
}

Ответ 7

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

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

Абстракция также не имеет ничего общего с иерархией. У вас может быть другая абстракция, такая как "металлы", которая экстрагирует свойства веществ по-другому.

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

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

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

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

Ответ 8

Абстракция похожа на компьютер.

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

Инкапсуляция - это фактический акт сокрытия нерелевантных деталей.

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

В контексте языков ООП (объектно-ориентированного программирования) у вас обычно есть такая настройка:

CLASS {
  METHOD { 
    *the actual code*
  }
}

Пример "инкапсуляции" будет иметь МЕТОД, который обычный пользователь не может видеть (частный). "Абстракция" - это обычный пользователь, использующий МЕТОД, который они могут (публичные), чтобы использовать частный.

Ответ 9

Абстракция - это средство скрытия деталей для упрощения интерфейса.

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

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

Современный руль, педаль тормоза и педаль газа - все это примеры отличных абстракций. Рулевое управление автомобиля изначально выглядело больше как рулевое управление на велосипеде. И тормоза и дроссели работали вручную. Но используемые нами сегодня абстракции были настолько мощными, что охватили всю отрасль.

-

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

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

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

Ответ 10

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

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

Ответ 11

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

Абстракция включает в себя отсутствие деталей и использование простого интерфейса для управления сложной системой.

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

Однако вы не можете зажечь лампу каким-либо другим способом. (Инкапсуляция)

Ответ 12

public abstract class Draw {
    public abstract void drawShape(); // this is abstraction.  Implementation detail need not to be known.
    // so we are providing only necessary detail by giving drawShape(); No implementation. Subclass will give detail.


    private int type;    // this variable cannot be set outside of the class. Because it is private.
    // Binding private instance variable with public setter/getter method is encapsulation 

    public int getType() { 
        return type;
    }

    public void setType(int type) {  // this is encapsulation. Protecting any value to be set.
        if (type >= 0 && type <= 3) {
            this.type = type;
        } else {
            System.out.println("We have four types only. Enter value between 0 to 4");
            try {
                throw new MyInvalidValueSetException();
            } catch (MyInvalidValueSetException e) {
                e.printStackTrace();
            }

        }
    }
}

Abstraction связан с методами, где детали реализации не известны, что является своего рода скрытием реализации.
Encapsulation связан с привязкой переменной экземпляра с методом, видом скрытия данных.

Ответ 13

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

Инкапсуляция. Это механизм, посредством которого мы защищаем наши данные извне.

Ответ 14

Когда я был на начальном уровне в Java, этот вопрос также заставил меня задуматься. Я не понимал, почему объявление переменных экземпляра как приватных и установка методов setter и getter имеет значение. Вот почему я написал для этого блог и объяснил все преимущества простого Например, что произойдет, если мы будем следовать принципу инкапсуляции, и если мы этого не сделаем. Надеюсь, это будет полезно для начинающих: https://medium.com/@hasanli.vusala.73/encapsulation-with-simple-example-in- Java-b80f6df3885d

Ответ 15

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

Инкапсуляция реализует абстракцию.

Абстракция - это процесс, в котором Encapsulation фактически реализует его. Например, Добавлениепользовательской логики → нам нужно проверить пользователя, создать соединение с БД и вставить пользователя. Таким образом, пользователь не знает, что сначала нужно вызвать функцию проверки, создать соединение с БД и затем вставить значение в БД. Он вызывает только функцию AddUser, которая вызывает внутренне всю логику с помощью in, это только Encapsulation (группировка функции и скрытие методов).

Ответ 16

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

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

Ссылка