Абстракция данных
Абстра́кция в объектно-ориентированном программировании — это придание объекту характеристик, которые чётко определяют его концептуальные границы, отличая от всех других объектов. Основная идея состоит в том, чтобы отделить способ использования составных объектов данных от деталей их реализации в виде более простых объектов, подобно тому, как функциональная абстракция разделяет способ использования функции и деталей её реализации в терминах более примитивных функций, таким образом, данные обрабатываются функцией высокого уровня с помощью вызова функций низкого уровня.
Абстракция является основой объектно-ориентированного программирования и позволяет работать с объектами, не вдаваясь в особенности их реализации.
Абстракция данных — популярная и в общем неверно определяемая техника программирования. Фундаментальная идея состоит в разделении несущественных деталей реализации подпрограммы и характеристик, существенных для корректного ее использования. Такое разделение может быть выражено через специальный «интерфейс», сосредотачивающий описание всех возможных применений программы [1] .
См. также
Примечания
- ↑Абстракция данных (Бьерн Страуструп — Абстракция данных в языке С++)
- Дополнить статью (статья слишком короткая либо содержит лишь словарное определение).
- Найти и оформить в виде сносок ссылки на авторитетные источники, подтверждающие написанное.
- Объектно-ориентированное программирование
- Информатика
Wikimedia Foundation . 2010 .
Основные принципы ООП: абстракция в программировании
Основные принципы ООП включают в себя абстракцию: что это такое, когда и для чего используется, а также наглядный пример абстракции в ООП.
Абстракция — один из принципов ООП в программировании. По своей сути это процесс выделения общих характеристик и функциональности объектов или системы, игнорируя детали реализации.
Для чего нужна абстракция в программировании?
Абстракция позволяет разрабатывать программы на различных языках программирования, скрывая сложность и детали нижележащего кода. Это делается для упрощения сложных систем и концепций, чтобы разработчики могли фокусироваться на основных аспектах проблемы и легче понимали код.
Преимущества абстракции в ООП
В объектно-ориентированном программировании абстракция играет важную роль. Она позволяет создавать абстрактные классы и интерфейсы, которые определяют общие свойства и методы, не зависящие от конкретной реализации. Преимущества абстракции ООП включают:
- Упрощение сложности: абстракция в программировании позволяет скрыть детали реализации и сосредоточиться на ключевых аспектах системы. Это помогает упростить понимание и поддержку кода.
- Модульность: возможность разбить систему на модули или классы, которые могут работать независимо друг от друга. Это способствует повторному использованию кода и улучшает масштабируемость проекта.
- Повышение безопасности: абстракция позволяет скрыть некоторые детали реализации, что делает код более безопасным и защищенным. Внешние компоненты не имеют прямого доступа к внутренним деталям объекта или системы.
Пример абстракции в ООП
В качестве примера реализуем абстрактный класс «Фигура» и его наследников на языке Java:
abstract class Shape < protected String color; public Shape(String color) < this.color = color; >// абстрактный метод для получения площади public abstract double getArea(); // абстрактный метод для получения периметра public abstract double getPerimeter(); // общий метод для вывода информации о фигуре public void printInfo() < System.out.println("Цвет: " + color); System.out.println("Площадь: " + getArea()); System.out.println("Периметр: " + getPerimeter()); >> class Circle extends Shape < private double radius; public Circle(String color, double radius) < super(color); this.radius = radius; >@Override public double getArea() < return Math.PI * radius * radius; >@Override public double getPerimeter() < return 2 * Math.PI * radius; >> class Rectangle extends Shape < private double length; private double width; public Rectangle(String color, double length, double width) < super(color); this.length = length; this.width = width; >@Override public double getArea() < return length * width; >@Override public double getPerimeter() < return 2 * (length + width); >> public class Main < public static void main(String[] args) < Circle circle = new Circle("Красный", 5.0); circle.printInfo(); System.out.println(); Rectangle rectangle = new Rectangle("Синий", 4.0, 6.0); rectangle.printInfo(); >>
В этом примере абстрактный класс Shape содержит общие свойства и методы для всех фигур. У него есть абстрактные методы getArea() и getPerimeter() , которые должны быть реализованы в наследниках. Классы Circle и Rectangle наследуют абстрактный класс Shape и реализуют абстрактные методы в соответствии с логикой для каждой фигуры.
В методе main() создаются объекты Circle и Rectangle , которые вызывают метод printInfo() , чтобы вывести информацию о каждой фигуре, включая цвет, площадь и периметр.
Пример показывает, как абстракция в ООП позволяет определить общий интерфейс (абстрактный класс) и реализовать его в конкретных классах, обеспечивая гибкость и повторное использование кода.
Примеры абстракций в технике и повседневности
Поговорим про абстракциях. Что вообще это за слово такое абстракция?
Абстракция (отвлечение) процесс отвлечения (абстрагирования) от тех или иных характеристик объекта для их избирательного анализа; при этом наблюдаемый объект замещается его идеализированным теоретическим образом — абстрактным объектом. Абстракции являются универсальным методом научного познания, они необходимы для формирования понятий, узнавания и классификации объектов исследования на всех уровнях формирования знаний.
Синонимами можно считать такие слова как отвлеченный, умозрительный, теоретический. Абстракция это модель, теория.
Противоположное слово это конкретный, фактический.
Абстракция это когда берут какой-то сложный объект и убирают те детали, которые не имеют существенного значения для понимания какого бы то ни было свойства этого объекта.
Взять например карту метро. Карта метро — это хорошая полезная абстракция от реальной формы туннелей в метро. На карте нет тех изгибов тоннелей которые на самом деле есть. Вы же когда приезжаете в какой-то новый для себя город не рассматриваете на полу разложенные аэрофотоснимки гектаров кварталов города чтобы понять где вам надо выйти в метро. Это было бы просто смешно. Вы просто подходите к схеме метрополитена смотрите и вам сразу всё становится понятно. Так и в остальном.
Абстракции в разработке программного обеспечения
В IT индустрии вообще всё держится на абстракциях. Тут их столько, что хоть штабелями укладывай. Наращивать уровни абстракций это основной способ создания программных систем. Они тут выстаиваются в иерархии.
Виртуальная память это абстракция от физических адресов. Виртуальная машина это абстрагирования от реальной физической машины (будь то телефон, DeskTop, Server). Любой язык программирования это способ отвлечения от безумно сложных и скучных машинных кодов. В каждой программе есть абстрактные структуры данных такие как бинарные деревья, очереди, стеки, циклические массивы, графы, косые деревья, хеш-таблицы. Файл как и файловые системы преобразуют нули и единицы в удобные текстовые файлики. Алгоритмы компрессии данных это способ отвлечения от реального размера файла. Операционная система это способ отвлечения от конкретного оборудования. POSIX (Portable Operating System Interface) это пример полезного абстрагирования от реализации функций операционных систем. Благодаря POSIX у разных операционных систем появилась совместимость на уровне исходного кода. Иконки на рабочем столе — тоже самое. Гипервизоры нужны чтобы не обращать внимания на то как меняются операционные системы. Байт-код это отвлечение от целевой платформы для которой собрана программа. Язык Python абстрагируется от типов данных. Модель OSI-7 это условное представление того через какие слои проходят данные в интернете. Физический, канальный, сетевой, транспортный, представления, сеансовый, прикладной. DNS адреса удобнее запоминать чем сырые IP адреса. Да и сам IP адрес это тоже форма абстракции от меняющегося оборудования c разными MAC адресами. Название e-mail — это мощная абстракция, которая инвариантна к имени, физическому адресу (дома, улицы), ip адресу, и даже MAC адресу устройства. Любое прикладное ПО с GUI это чистейшей воды абстракция. Прикладное ПО (например программа для трассировки печатных плат) это умозрительная концепция, коротая решает конкретную задачу реализованная на основе интерфейсов, которые предоставляет операционная система.
В общем абстракции очень полезны в программировании. Для разработки софтвера надо обязательно обладать развитым абстрактным мышлением.
Более того любой язык и, в частности, нотная грамота — это абстракция от звука. Вместо того чтобы записывать осциллограмму на листе бумаги (*.wav файл) или записывать коэффициенты ряда Фурье для разложения звука, музыканты просто схематично указывают последовательность символов (ноты на струнах).
Абстракции в аппаратном обеспечении
То что абстракции очень полезны в программировании это всем очевидно и понятно. А вот то, что абстрагирование полезно при разработке аппаратного обеспечения это приходится доказывать с огнем и мечом. Тем не менее и в разработке железа есть примеры хороших абстракций.
Вот например автоматическая коробка передач абстрагируется от реальной геометрии переключения положения шестерен очень полезная абстракция воплощенная в железе. Или драйвер шагового двигателя это способ абстрагироваться от того как на самом деле осуществляется управления вращением вала шагового мотора. Затем появилась цифровая схемотехника, чтобы не вникать в реализацию логических элементов. Далее сформировался язык Verilog абстрагируется от схемотехники цифровых цепей и описывает цифровую схему просто как текст. Схемы конечный автоматов это пример отвлечения от физического расположения микросхем триггеров на электронной плате. Принстонская/Гарвардская архитектура микропроцессора это умозрительная модель понимания структуры всего компьютера.
Вот в схеме топологии печатной платы нет абсолютно никакой абстракции. Топология PCB она максимально конкретная. Поэтому и анализировать топологию всегда трудно. Многое отвлекает.
Поэтому люди придумали схемы электрические принципиальные. Схемотехника это абстракция от топологии. Однако и схемотехника современных электронных устройств тоже достигла высокого уровня сложности. Схемотехника в 40…100 страниц это уже вообще сегодня норма жизни. Поэтому люди придумали блок-схемы электронных плат. Блок-схема это абстракция от схемотехники, которая работает на 2м уровне. Потом делают схемы топологии сети. Это уже, как минимум, 3тий уровень абстракции.
Проследите цепочку получившихся уровней: Физика > Полупроводниковые приборы > аналоговые схемы > цифровые схемы > логические элементы > АЛУ > процессор > SoC > PCB > OS(системное ПО) > Прикладное ПО. Минимум 11 умозрительных уровней!
Абстракции это не выдумка программистов. Абстракции появились задолго до появления программирования и электроники вообще. Это более фундаментальная концепция. Скорее всего это пришло из искусства. Наскальная живопись, корявые рисунки животных первобытных людей. Всё это пошло откуда-то оттуда.
Вероятно абстракции появились как побочный эффект познания мироустройства в науке. Например закон всемирного тяготения это абстракция. Реальные силы значительно труднее в понимании и объяснении. Это доказывают опыты наблюдения смещения перигелия Меркурия. https://ru.wikipedia.org/wiki/Смещение_перигелия_Меркурия
Потом в физике есть такие уж совсем абстрактные понятия как материальная точка, идеальный/математический маятник, идеальный газ, абсолютно черное тело, невесомая/нерастяжимая нить, несжимаемая жидкость, идеальные часы (которые не спешат и не отстают) и может быть ещё что-то. Всего этого в природе в принципе не существует. Люди искусственно ввели эти эфемерные понятия чтобы применять логические/математические формальные методы.
В эпоху Великих Географический Открытий появилась ценность географических карт. Географическая карта это тоже абстракция от реальной формы земной поверхности и береговой линии. Там реки указывают плавной линией хотя на самом деле они извиваются как змеи и через каждые 100—200 метров поворот.
Абстракции мы всегда видим в повседневности. Деньги это вообще абстракция от вида трудовой деятельности. Будь то труд каменщика или труд пекаря. Поэтому и говорят: «деньги не пахнут».
Мультики это способ отвлечения от реального внешнего вида животных. Если бы мультики снимали видеокамерой с реальными животными в качестве артистов, то их бы никто и не смотрел вообще. Те же самые бобры в реальной жизни просто чудовища.
У каждой уважающей себя организации, компании есть логотип. Это условное обозначение которое впитывает в себя огромное количество аспектов. Чем занимается компания, какое у нее прошлое, где находится, какая у компании цель — всё это отражается в хорошем логотипе.
А оut source компании это пресловутый способ абстрагирования от найма как такового и социальных противоречий связанных с этим для продуктовых компаний.
https://habr.com/ru/articles/720464/
У абстракций есть недостатки?
Да, конечно. Уровни абстракции отбирают у системы некоторые ресурсы. Java код исполняется медленнее чем С код. Артефакты Java компилятора занимают больше места на диске, чем артефакты от C компилятора. Системные вызовы от приложений обрабатываются на уровне операционной системы и требуют времени. Это плата за упрощение понимания и переносимость программ. На каждом уровне абстракции время течет медленнее. То что в прикладном ПО одна строчка кода, то в коде на физическом уровне целая эпоха.
В чем достоинства абстракций?
1—Они помогают понять сложные вещи. Абстракции делают возможным применение формальных методов, и алгоритмов, т.е. в конечном счете логики. (модель атома Бора, абстрактные структуры данных в программировании, закон всемирного тяготения, математический маятник, идеальный газ, материальная точка)
2—Они уменьшают время понимания сложных вещей (схема метро, электрические принципиальные схемы)
3—Они позволяют масштабировать сложность, декомпозировать трудные задачи. (автоматическая коробка передач, драйвер шагового двигателя, алгоритмы компрессии данных).
4—Они помогают переносить объекты на другую систему координат (Языки программирования Java, гипервизоры, Doсker контейнеры)
5—Они заменяют сложное на простое (языки программирования, файловые системы, DNS адреса, иконки на рабочем столе, программы с GUI).
6—Они помогают уйти от ответственности (out source компании, модель OSI-7)
Способность к абстрактному мышлению это мощное эволюционное преимущество. Все эти абстрактные концепции как раз пришли из государств, которые сейчас составляют центральную ось развития всей мировой цивилизации.
Способность к абстрагированию помогла им построить самую эффективную лаконичную нотацию для обозначения своего языка общения, чертежей, математических выражений, а потом и языков программирования. Как следствие они получили способность проектировать разрабатывать и производить сложные и эффективные технические средства: двигатели, корабли, самолеты, вооружение и компьютеры.
Как научиться абстрактному мышлению раз это так полезно? Как научиться придумывать полезные абстракции?
У меня нет четкого ответа на этот вопрос. Наверно надо пробовать. Далее эксперименты покажут какие абстракции жизнеспособны, а какие нет. Это как в физике. Была модель атома Томсона и модель атома Бора. В результате экспериментов выяснилось, что модель атома Бора оказалась более пригодной к реальности. Многие языки программирования тоже канули в лету. Где сейчас Паскаль, Fortran или Бэйсик? Тут как с языками программирования. Некоторые абстракции будут существовать до поры до времени пока их не заменят более эффективные простые абстракции. И это нормально.
Вывод
У природы же видимо нет абстракций. В природе всё максимально конкретно. Абстрагирование это чисто человеческое свойство. Это люди придумывают абстракции и уровни абстракций для себе подобных. Это и понятно. Смысл абстракции это уменьшение сложности, увеличения скорости понимания, объяснение сути чего-либо, будь-то карта материка или электронная плата.
Создавайте свои абстракции, господа. В этом нет ничего предосудительного.
Если Вам известны ещё примеры красивых абстракций в технике или в повседневной жизни, то напишете про это, пожалуйста, в комментариях.
Абстракция данных

Абстра́кция да́нных в программировании , разделение свойств типа данных на абстрактные (возможные значения данных, операции над ними и семантика этих операций) и конкретные (заключающиеся в выборе представления для данных и способов реализации операций над ними). Абстрактные свойства гарантируются при использовании типа в программе-клиенте, тогда как конкретные могут выбираться реализацией и меняться по необходимости, не затрагивая клиентскую программу.
Например, хранилище целых чисел в качестве абстрактных свойств обеспечивает операции вставки, удаления и поиска чисел в хранилище. Реализация хранилища может быть выполнена с использованием различных структур данных ( массива , списка, двоичного дерева поиска , хеш-таблицы ); при этом программа, использующая хранилище и полагающаяся только на абстрактные свойства, не потребует изменений при замене одной реализации на другую.
Опубликовано 26 мая 2023 г. в 21:35 (GMT+3). Последнее обновление 26 мая 2023 г. в 21:35 (GMT+3). Связаться с редакцией
Информация

Области знаний: Системное программирование, Теория информации и структур данных
- Научно-образовательный портал «Большая российская энциклопедия»
Свидетельство о регистрации СМИ ЭЛ № ФС77-84198,
выдано Федеральной службой по надзору в сфере связи, информационных технологий и массовых коммуникаций (Роскомнадзор) 15 ноября 2022 года.
ISSN: 2949-2076 - Учредитель: Автономная некоммерческая организация «Национальный научно-образовательный центр «Большая российская энциклопедия»
Главный редактор: Кравец С. Л.
Телефон редакции: +7 (495) 917 90 00
Эл. почта редакции: secretar@greatbook.ru
- © АНО БРЭ, 2022 — 2024. Все права защищены.
- Условия использования информации. Вся информация, размещенная на данном портале, предназначена только для использования в личных целях и не подлежит дальнейшему воспроизведению.
Медиаконтент (иллюстрации, фотографии, видео, аудиоматериалы, карты, скан образы) может быть использован только с разрешения правообладателей. - Условия использования информации. Вся информация, размещенная на данном портале, предназначена только для использования в личных целях и не подлежит дальнейшему воспроизведению.
Медиаконтент (иллюстрации, фотографии, видео, аудиоматериалы, карты, скан образы) может быть использован только с разрешения правообладателей.