Абстракция (информатика)
Абстракция (лат. abstractio «отвлечение»[1]) в программной инженерии и информатике — это:
- Процесс удаления или обобщения физических, пространственных или временных деталей или характеристик[2] при изучении объектов или систем с целью сосредоточения внимания на более важных деталях;[3] он схож по своей природе с процессом обобщения;
- Создание абстрактных понятий-объектов путем отражения общих особенностей или характеристик различных неабстрактных объектов или исследуемых систем,[3] а также результат процесса абстракции.
Абстракция вообще является основополагающим понятием в информатике и разработке программного обеспечения.[4] Процесс абстракции также можно называть моделированием, и он тесно связан с понятиями теории и дизайна.[5] Модели также можно считать видами абстракции, так как они обобщают аспекты реальности.
Абстракция в информатике тесно связана с абстракцией в математике из-за их общего акцента на создании абстракций в качестве объектов,[2] но также связана с понятиями абстракции из других областей, таких как искусство.[3]
Абстракции также могут относиться к объектам и системам реального мира, правилам вычислительных систем или правилам программирования, которые используют или реализуют особенности самой абстракции, например:
- применение типов данных для обеспечения абстракции данных для отделения их использования от рабочих представлений структур данных в программах;[6]
- понятие процедур, функций или подпрограмм, которые представляют собой определенный способ реализации потока управления в программах;
- правила, обычно называемые «абстракцией», которые обобщают выражения с использованием свободных и связанных переменных в различных версиях лямбда-исчисления;[7][8]
- использование S-выражений в качестве абстракции структур данных и программ на языке программирования Lisp;[9]
- процесс выведения общего поведения в абстрактные классы в объектно-ориентированных языках программирования.
Абстракция может выступать как инструмент уменьшения сложности систем, так как позволяет за скрыть детали реализации за аккуратно спроектированным интерфейсом или фасадом. Например, язык запросов к базам данных SQL абстрагирует от конкретной реализации хранения данных, параллельного многопользовательского доступа, восстановления после сбоев и других деталей, заложенных в системы управления базами данных[10]
В объектно-ориентированном программировании (ООП) термин «абстракция» используется как сокращение от «абстракция данных», но не следует путать последнее с абстрактным типом данных — в ООП под этим понимается наследование классов.