Абстракция (информатика)
Абстракция (лат. abstractio «отвлечение»[1]) в программной инженерии и информатике — это:
- Процесс удаления или обобщения физических, пространственных или временных деталей или характеристик[2] при изучении объектов или систем с целью сосредоточения внимания на более важных деталях;[3] он схож по своей природе с процессом обобщения;
- Создание абстрактных понятий-объектов путем отражения общих особенностей или характеристик различных неабстрактных объектов или исследуемых систем,[3] а также результат процесса абстракции.
Абстракция вообще является основополагающим понятием в информатике и разработке программного обеспечения.[4] Процесс абстракции также можно называть моделированием, и он тесно связан с понятиями теории и дизайна.[5] Модели также можно считать видами абстракции, так как они обобщают аспекты реальности.
Абстракция в информатике тесно связана с абстракцией в математике из-за их общего акцента на создании абстракций в качестве объектов,[2] но также связана с понятиями абстракции из других областей, таких как искусство.[3]
Абстракции также могут относиться к объектам и системам реального мира, правилам вычислительных систем или правилам программирования, которые используют или реализуют особенности самой абстракции, например:
- применение типов данных для обеспечения абстракции данных для отделения их использования от рабочих представлений структур данных в программах;[6]
- понятие процедур, функций или подпрограмм, которые представляют собой определенный способ реализации потока управления в программах;
- правила, обычно называемые «абстракцией», которые обобщают выражения с использованием свободных и связанных переменных в различных версиях лямбда-исчисления;[7][8]
- использование S-выражений в качестве абстракции структур данных и программ на языке программирования Lisp;[9]
- процесс выведения общего поведения в абстрактные классы в объектно-ориентированных языках программирования.
Абстракция может выступать как инструмент уменьшения сложности систем, так как позволяет за скрыть детали реализации за аккуратно спроектированным интерфейсом или фасадом. Например, язык запросов к базам данных SQL абстрагирует от конкретной реализации хранения данных, параллельного многопользовательского доступа, восстановления после сбоев и других деталей, заложенных в системы управления базами данных[10]
В объектно-ориентированном программировании (ООП) термин «абстракция» используется как сокращение от «абстракция данных», но не следует путать последнее с абстрактным типом данных — в ООП под этим понимается наследование классов.
См. также
Примечания
- ↑ Локшина С. М. Краткий словарь иностранных слов. — 7-е изд. — М.: «Советская энциклопедия», 1984. — 384 с. С. 10—11.
- ↑ 1 2 Colburn, Timothy; Shute, Gary (5 June 2007). "Abstraction in Computer Science". Minds and Machines (англ.). 17 (2): 169—184. doi:10.1007/s11023-007-9061-7. ISSN 0924-6495. S2CID 5927969.
- ↑ 1 2 3 Kramer, Jeff (1 April 2007). "Is abstraction the key to computing?". Communications of the ACM. 50 (4): 36—42. doi:10.1145/1232743.1232745. ISSN 0001-0782. S2CID 12481509.
- ↑ Ben-Ari, Mordechai (1 March 1998). "Constructivism in computer science education". ACM SIGCSE Bulletin. 30 (1): 257, 257—261. doi:10.1145/274790.274308. ISSN 0097-8418.
- ↑ Comer, D. E.; Gries, David; Mulder, Michael C.; Tucker, Allen; Turner, A. Joe; Young, Paul R. /Denning (1 January 1989). "Computing as a discipline". Communications of the ACM. 32 (1): 9—23. doi:10.1145/63238.63239. ISSN 0001-0782. S2CID 723103.
- ↑ Liskov, Barbara (1 May 1988). "Keynote address – data abstraction and hierarchy". ACM SIGPLAN Notices. 23. ACM: 17—34. doi:10.1145/62138.62141. ISBN 0897912667. S2CID 14219043.
- ↑ Barendregt, Hendrik Pieter. The lambda calculus : its syntax and semantics. — Revised. — Amsterdam : North-Holland, 1984. — ISBN 0444867481.
- ↑ Barendregt, Hendrik Pieter. Lambda calculus with types. — Cambridge, UK : Cambridge University Press, 2013. — ISBN 9780521766142.
- ↑ Newell, Allen. Computer science as empirical inquiry: symbols and search / Allen Newell, Herbert A. Simon. — ACM, 1 January 2007. — P. 1975. — ISBN 9781450310499. — doi:10.1145/1283920.1283930.
- ↑ Мартин Клеппман. Высоконагруженные приложения. Программирование, масштабирование, поддержка. — "Издательский дом ""Питер""", 2018. — P. 640. — ISBN 9785446105120.