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

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

Следующий код истечет срок действия cookie, указанного в cookieName. Устанавливая дату истечения срока действия в прошлое.

document.cookie = cookieName + "=something; expires=Thu, 18 Dec 2013 12:00:00 UTC;"
329
задан Uwe Keim 17 December 2018 в 22:22
поделиться

8 ответов

Большинство ответов здесь сосредоточены на ООП, но инкапсуляция начинается намного раньше:

  • Каждая функция представляет собой инкапсуляцию ; в псевдокоде:

     точка х = {1, 4}
    точка у = {23, 42}
    
    числовой d = расстояние (x, y)
    

    Здесь расстояние инкапсулирует вычисление (евклидова) расстояния между двумя точками на плоскости: оно скрывает детали реализации. Это инкапсуляция, чистая и простая.

  • Абстракция - это процесс обобщения : принятие конкретной реализации и ее применимость к различным, хотя и несколько связанным, типам данных. Классическим примером абстракции является функция C qsort для сортировки данных:

    Особенность qsort заключается в том, что она не заботится о данных, которые она сортирует - фактически это не знает , какие данные он сортирует. Скорее, его тип ввода - это указатель без типа ( void * ), который является просто способом С сказать «мне не важен тип данных» (это также называется стиранием типа). Важным моментом является то, что реализация qsort всегда остается неизменной, независимо от типа данных. Единственное, что должен изменить , - это функция сравнения, которая отличается от типа данных к типу данных. Поэтому qsort ожидает, что пользователь предоставит указанную функцию сравнения в качестве аргумента функции.

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

class point {
    numeric x
    numeric y
}

Мы инкапсулируем координаты точки, но не отвлекаем их материально, за исключением их логической группировки.

А вот пример абстракции, который не является инкапсуляцией:

T pi<T> = 3.1415926535

Это универсальная переменная pi с заданным значением (π), и объявление не заботится о точном типе переменной. По общему признанию, мне было бы трудно найти что-то подобное в реальном коде: абстракция практически всегда использует инкапсуляцию. Однако вышеприведенное действительно существует в C ++ (14) через шаблоны переменных (= универсальные шаблоны для переменных); с немного более сложным синтаксисом, например:

template <typename T> constexpr T pi = T{3.1415926535};
255
ответ дан Konrad Rudolph 23 November 2019 в 00:46
поделиться

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

List<string> list = new List<string>();
list.Sort(); /* Here, which sorting algorithm is used and hows its 
implemented is not useful to the user who wants to perform sort, that's 
why its hidden from the user of list. */

Абстракция : это способ обеспечения обобщения и, следовательно, общий способ работы с объектами огромного разнообразия. например,

class Aeroplane : IFlyable, IFuelable, IMachine
{ // Aeroplane's Design says:
  // Aeroplane is a flying object
  // Aeroplane can be fueled
  // Aeroplane is a Machine
}
// But the code related to Pilot, or Driver of Aeroplane is not bothered 
// about Machine or Fuel. Hence,
// pilot code:
IFlyable flyingObj = new Aeroplane();
flyingObj.Fly();
// fighter Pilot related code
IFlyable flyingObj2 = new FighterAeroplane();
flyingObj2.Fly();
// UFO related code 
IFlyable ufoObj = new UFO();
ufoObj.Fly();
// **All the 3 Above codes are genaralized using IFlyable,
// Interface Abstraction**
// Fly related code knows how to fly, irrespective of the type of 
// flying object they are.

// Similarly, Fuel related code:
// Fueling an Aeroplane
IFuelable fuelableObj = new Aeroplane();
fuelableObj.FillFuel();
// Fueling a Car
IFuelable fuelableObj2 = new Car(); // class Car : IFuelable { }
fuelableObj2.FillFuel();

// ** Fueling code does not need know what kind of vehicle it is, so far 
// as it can Fill Fuel**
22
ответ дан Blorgbeard 23 November 2019 в 00:46
поделиться
  • Abstraction lets you focus on what the object does instead of how it does it
  • Encapsulation means hiding the internal details or mechanics of how an object does something.

Like when you drive a car, you know what the gas pedal does but you may not know the process behind it because it is encapsulated.

Let me give an example in C#. Suppose you have an integer:

int Number = 5;
string aStrNumber = Number.ToString();

you can use a method like Number.ToString() which returns you characters representation of the number 5, and stores that in a string object. The method tells you what it does instead of how it does it.

29
ответ дан jasonco 23 November 2019 в 00:46
поделиться

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

Абстракция обеспечивает обобщение (скажем, над набором поведений).

Вот хорошее прочтение: Абстракция, инкапсуляция и сокрытие информации Эдварда В. Берара из Агентства объектов.

128
ответ дан Aman Gupta - ShOoTeR 23 November 2019 в 00:46
поделиться

encapsulation puts some things in a box and gives you a peephole; this keeps you from mucking with the gears.

abstraction flat-out ignores the details that don't matter, like whether the things have gears, ratchets, flywheels, or nuclear cores; they just "go"

examples of encapsulation:

  • underpants
  • toolbox
  • wallet
  • handbag
  • capsule
  • frozen carbonite
  • a box, with or without a button on it
  • a burrito (technically, the tortilla around the burrito)

examples of abstraction:

  • "groups of things" is an abstraction (which we call aggregation)
  • "things that contains other things" is an abstraction (which we call composition)
  • "container" is another kind of "things that contain other things" abstraction; note that all of the encapsulation examples are kinds of containers, but not all containers exhibit/provide encapsulation. A basket, for example, is a container that does not encapsulate its contents.
96
ответ дан Steven A. Lowe 23 November 2019 в 00:46
поделиться

Другой пример:

Предположим, я создал неизменный класс Rectangle, например:

class Rectangle {
 public:
  Rectangle(int width, int height) : width_(width), height_(height) {}
  int width() const { return width_; }
  int height() const { return height_; }

 private:
  int width_;
  int height_;
}

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

Хорошая абстракция обычно подразумевает хорошую инкапсуляцию.

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

8
ответ дан Paweł Hajdan 23 November 2019 в 00:46
поделиться

Abstraction: The idea of presenting something in a simplified / different way, which is either easier to understand and use or more pertinent to the situation.

Consider a class that sends an email... it uses abstraction to show itself to you as some kind of messenger boy, so you can call emailSender.send(mail, recipient). What it actually does - chooses POP3 / SMTP, calling servers, MIME translation, etc, is abstracted away. You only see your messenger boy.

Encapsulation: The idea of securing and hiding data and methods that are private to an object. It deals more with making something independent and foolproof.

Take me, for instance. I encapsulate my heart rate from the rest of the world. Because I don't want anyone else changing that variable, and I don't need anyone else to set it in order for me to function. Its vitally important to me, but you don't need to know what it is, and you probably don't care anyway.

Look around you'll find that almost everything you touch is an example of both abstraction and encapsulation. Your phone, for instance presents to you the abstraction of being able to take what you say and say it to someone else - covering up GSM, processor architecture, radio frequencies, and a million other things you don't understand or care to. It also encapsulates certain data from you, like serial numbers, ID numbers, frequencies, etc.

It all makes the world a nicer place to live in :D

12
ответ дан 23 November 2019 в 00:46
поделиться

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

Абстракция предоставляет вам обобщенное представление о ваших классах.

-1
ответ дан coder 23 November 2019 в 00:46
поделиться