Список абстракций (информатика)
Эта статья в значительной степени или полностью опирается на один источник . ( май 2024 г. ) |
Информатика |
---|
![]() |
Абстракции являются фундаментальными строительными блоками информатики, позволяющими упростить сложные системы и идеи до более управляемых и понятных концепций.
Общие абстракции программирования
[ редактировать ]Общие абстракции программирования — это основополагающие концепции, лежащие в основе практически всех задач программирования, которыми занимаются разработчики программного обеспечения. Обеспечивая уровень отделения от особенностей базового оборудования и деталей системы, эти абстракции позволяют создавать сложную логику в более доступной форме. и управляемая форма. Они возникают как консенсус в отношении лучших практик выражения и решения проблем программирования эффективными и логически обоснованными способами. От простоты переменной до структурированного потока управляющих структур — эти абстракции являются строительными блоками, которые составляют языки программирования высокого уровня и приводят к детальным реализациям программного обеспечения.
Абстракция | Определение | Использование |
---|---|---|
Переменная | Место хранения в сочетании с соответствующим символическим именем, которое содержит некоторое известное или неизвестное количество информации, называемое значением. | Обычно используется во всех парадигмах программирования. |
Функция | Абстракция, представляющая набор инструкций, которые можно применять к входным данным для получения выходных данных. | Центральное место в процедурном и функциональном программировании; присутствует во всех парадигмах программирования. |
Алгоритм | Пошаговая процедура или формула решения проблемы. | Основа для разработки и анализа алгоритмов в различных областях. |
Тип данных | Классификация, идентифицирующая один из различных типов данных, указывающая возможные значения для этого типа, операции, которые можно выполнять с этим типом, и способ хранения данных этого типа. | Присутствует в большинстве языков программирования и служит основой систем типов. |
Структура управления | Конструкции, определяющие направление выполнения программы (например, if , while , for , switch ). | Присутствует почти во всех языках программирования для управления потоком выполнения. |
Подпрограмма (или метод ) | Набор инструкций, предназначенных для выполнения часто используемых операций в программе. | Основа структурирования кода как в процедурном, так и в объектно-ориентированном программировании. |
Сорт | Схема создания объектов, предоставляющая начальные значения состояния (переменные-члены или атрибуты) и реализации поведения (функции-члены или методы). | Основы объектно-ориентированного программирования на основе классов. |
Интерфейс | Группа связанных методов с пустыми телами, используемая для определения методов, которые можно применять к различным типам данных. | Широко используется в объектно-ориентированном программировании для абстракции и множественного наследования. |
Модуль | Автономный компонент, который группирует связанные переменные, функции, классы или типы. | Используется для инкапсуляции кода, обеспечивая возможность повторного использования и удобства сопровождения. |
Рекурсия | Метод, при котором решение проблемы зависит от решений более мелких экземпляров той же проблемы. | Ключевой метод функционального программирования и разработки алгоритмов. |
Обработка исключений | Процесс реагирования на возникновение во время вычислений исключений – аномальных или исключительных условий, требующих специальной обработки. | Присутствует в структурированных языках программирования для обработки ошибок и управления потоками управления. |
Структуры данных
[ редактировать ]В контексте структур данных термин «абстракция» относится к способу, которым структура данных представляет и организует данные. Каждая структура данных обеспечивает особый способ организации данных в памяти, чтобы к ним можно было обращаться и изменять их в соответствии с определенными правилами. Сама структура данных является абстракцией, поскольку она скрывает детали того, как данные хранятся в памяти, и предоставляет набор операций или интерфейсов для работы с данными (например, нажатие и извлечение для стека, вставка и удаление для двоичного поиска). дерево).
Структура данных | Определение | Использование |
---|---|---|
Множество | Коллекция элементов одного и того же типа данных фиксированного размера, доступная по индексам. | Хранение и поиск общего назначения, основа многих более сложных структур. |
Список | Абстрактный тип данных, представляющий последовательность значений, в которой одно и то же значение может встречаться более одного раза. | Поддержание порядка данных, реализация стеков, очередей и т. д. |
Куча | Коллекция, поддерживающая шаблон доступа «последним пришел — первым обслужен». | Вызовы функций/рекурсивные вызовы, механизмы отмены в приложениях. |
Очередь | Коллекция, в которой объекты добавляются с одного конца («сзади») и удаляются с другого («спереди»). | Упорядочение процессов, буферизация при распределении ресурсов. |
Дерево | Структура данных, состоящая из узлов с отношениями родитель-потомок. | Иерархическое представление данных, например файловые системы, макеты пользовательского интерфейса. |
Двоичное дерево | Дерево, в котором каждый узел имеет не более двух дочерних элементов. | Двоичные деревья поиска (BST), процессы принятия решений, алгоритмы сортировки. |
График | Набор вершин вместе с набором ребер, соединяющих пары вершин. | Сетевая маршрутизация, социальные сети, молекулярное моделирование. |
Хэш-таблица | Структура данных, которая сопоставляет ключи со значениями, используя хэш-функцию для вычисления индекса в массиве слотов. | Эффективный поиск данных, уникальное хранение элементов, индексирование данных. |
Куча | Древовидная структура данных, удовлетворяющая свойству кучи; в max-heaps родительские узлы имеют значения, большие или равные дочерним. | Реализация приоритетных очередей, алгоритмов планирования, сортировки. |
Приоритетная очередь | Абстрактный тип, аналогичный обычной очереди, где каждый элемент имеет приоритет. | Планирование процессора и диска, управление событиями в симуляциях. |
Абстракции функционального программирования
[ редактировать ]В мире функционального программирования абстракция — это не просто инструмент, а основной принцип, влияющий на всю модель программирования. Абстракции, используемые в функциональном программировании, предназначены для повышения выразительности, обеспечения большей модульности и обеспечения возможностей преобразования, которые являются одновременно краткими и предсказуемыми. Рассматривая вычисления как оценку математических функций, функциональное программирование отходит от изменяемого состояния и побочных эффектов, типичных для императивного программирования, представляя декларативный подход к решению проблем.
Абстракция | Определение | Использование |
---|---|---|
Закрытие | Структура данных, которая фиксирует функцию вместе с ее лексическим окружением. | Дать возможность быть первоклассными гражданами, неся за собой государство. |
Монада | Шаблон проектирования, используемый для инкапсуляции вычислений с последовательной обработкой, побочными эффектами или другими операционными контекстами. | Моделирование сложного поведения, такого как состояние, исключения или ввод-вывод, в рамках чистоты функционального программирования. |
Неизменяемые данные | Данные, которые нельзя изменить после создания. | Обеспечивает предсказуемость и облегчает параллелизм в функциональных программах. |
Чистая функция | Функция, возвращаемое значение которой определяется только ее входными значениями, без побочных эффектов. | Основная концепция функционального программирования, позволяющая упростить рассуждения и оптимизацию. |
Рекурсия | Метод, в котором функции определяются сами по себе, используемый для выполнения повторяющихся или цепных вычислений. | Часто используется вместо итеративных циклов для решения сложных задач. |
Функция высшего порядка | Функция, которая принимает одну или несколько функций в качестве аргументов, возвращает функцию в качестве результата или и то, и другое. | Обычно используется для таких абстракций, как карта, сокращение и фильтр, которые являются строительными блоками для управления коллекциями. |
Лямбда-выражение | Анонимная функция, предоставляющая простой способ создания функций «на лету» без указания им имени. | Полезно для создания встроенных операций, особенно с функциями более высокого порядка. |
Оптимизация хвостового вызова | Стратегия оптимизации, при которой последним действием функции является вызов самой функции, которая может быть оптимизирована компилятором. | Избегает переполнения стека в рекурсивных функциях, что делает их такими же эффективными с точки зрения использования памяти, как и итерации. |
каррирование | Процесс преобразования функции, принимающей несколько аргументов, в последовательность функций, каждая из которых имеет один аргумент. | Упрощает создание специализированных функций из более общих и расширяет состав функций. |
Ленивая оценка | Стратегия задержки вычисления выражения до тех пор, пока не потребуется его значение. | Может повысить производительность, не вычисляя ненужные значения, делая возможными бесконечные структуры данных, такие как потоки. |
Модели параллелизма
[ редактировать ]Модели параллелизма — это важные абстракции в информатике, которые облегчают управление несколькими процессами или потоками, выполняющимися одновременно. Эти модели обеспечивают архитектурную основу, необходимую для эффективного и безопасного выполнения параллельных операций в приложениях, начиная от операционных систем и заканчивая высокопроизводительной обработкой данных и сетевыми серверами. Ключевой задачей, которую они решают, является координация вычислительных задач, которые потенциально могут мешать друг другу, обеспечение целостности данных и оптимизация использования ресурсов без ущерба для производительности.
Модель | Ключевые абстракции | Описание |
---|---|---|
Темы | Поток, взаимное исключение (мьютекс), блокировка, семафор | Параллелизм в рамках одного процесса, при котором несколько потоков могут одновременно выполнять код и совместно использовать ресурсы. |
Модель актера | Актер, Передача сообщений, Почтовый ящик | Математическая модель, которая рассматривает «актеров» как фундаментальные единицы параллелизма, при этом каждый актер обрабатывает сообщения асинхронно. |
Параллельные вычисления | Процесс, задача, синхронизация, параллелизм данных, параллелизм задач | Выполнение вычислений параллельно на нескольких процессорных элементах или компьютерах для повышения скорости. |
Программирование, управляемое событиями | Цикл событий, обработчик событий, обратный вызов, неблокирующий ввод-вывод | Подход, при котором ход программы определяется событиями или изменениями состояния. |
Сопрограммы | Сопрограмма, Выход, Возобновить | Функции, которые можно приостанавливать и возобновлять, что обеспечивает совместную многозадачность и упрощает асинхронное поведение. |
Асинхронное программирование | Будущее, обещание, асинхронное/ожидание | Модель выполнения программы, которая упрощает неблокирующие операции, часто с использованием фьючерсов или обещаний для результатов, которые еще предстоит вычислить. |
Программная транзакционная память (STM) | Атомная транзакция, откат, переменная STM | Стратегия, позволяющая составлять последовательности операций чтения/записи, которые должны выглядеть атомарными, без использования блокировок. |
Взаимодействие последовательных процессов (CSP) | Процесс, Канал, Сообщение | Формальный язык для описания взаимодействий в параллельных системах, ориентированный на передачу сообщений между процессами. |
Алгоритмы без блокировки и без ожидания | Неблокирующий алгоритм, атомарная операция | Алгоритмы, которые выполняют параллельные операции без традиционных стратегий блокировки, избегая таких проблем, как взаимоблокировка. |
Реактивное программирование | Наблюдаемый, Наблюдатель, Поток, Сигнал | Модель программирования, ориентированная на потоки данных и распространение изменений, часто используемая для разработки быстродействующих систем с асинхронными потоками данных. |
Шаблоны проектирования
[ редактировать ]Шаблоны проектирования в информатике представляют собой абстрактные решения распространенных проблем проектирования программного обеспечения. Хотя они не являются абстракциями в том же смысле, что структуры данных или математические концепции, шаблоны проектирования предоставляют разработчикам программного обеспечения язык высокого уровня для общения и реализации решений последовательным и узнаваемым способом.
Каждый шаблон проектирования абстрагирует сложность конкретного сценария проектирования или проблемы, предоставляя проверенную, проверенную парадигму разработки.
Шаблон | Описание |
---|---|
Шаблон синглтона | Гарантирует, что класс имеет только один экземпляр, и предоставляет глобальную точку доступа к нему. |
Шаблон фабричного метода | Определяет интерфейс для создания объекта, но передает создание экземпляра подклассам. |
Абстрактная фабрика | Предоставляет интерфейс для создания семейств связанных или зависимых объектов без указания их конкретных классов. |
Шаблон строителя | Позволяет поэтапно строить сложные объекты, отделяя процесс строительства от его представления. |
Шаблон прототипа | Создает новые объекты путем копирования существующего объекта, известного как прототип. |
Шаблон адаптера | Позволяет двум несовместимым интерфейсам работать вместе, преобразуя интерфейс одного класса в интерфейс, ожидаемый клиентами. |
Узор моста | Отделяет абстракцию объекта от его реализации, чтобы они могли изменяться независимо. |
Составной узор | Собирает объекты в древовидные структуры для представления иерархий целых частей, позволяя клиентам единообразно обрабатывать отдельные объекты и композиции. |
Шаблон декоратора | Динамически прикрепляет дополнительные обязанности к объекту, предоставляя гибкую альтернативу созданию подклассов для расширения функциональности. |
Фасадный рисунок | Предоставляет упрощенный интерфейс для сложной подсистемы, упрощая ее использование. |
Модель наилегчайшего веса | Минимизирует использование памяти, разделяя как можно больше данных с другими подобными объектами. |
Шаблон прокси | Предоставляет суррогат или заполнитель для другого объекта для управления доступом к нему. |
Схема цепочки ответственности | Передаёт запрос по цепочке обработчиков, что позволяет использовать отдельные системы и динамическую обработку. |
Шаблон команды | Инкапсулирует запрос как объект, позволяя параметризировать клиентов с помощью очередей, запросов или операций. |
Шаблон переводчика | Реализует специализированный язык, используя классы для представления грамматических правил. |
Шаблон итератора | Предоставляет способ последовательного доступа к элементам агрегатного объекта, не раскрывая его базовое представление. |
Шаблон посредника | Определяет объект, который инкапсулирует взаимодействие между набором объектов, обеспечивая слабую связь, не позволяя им явно ссылаться друг на друга. |
Сувенирный узор | Позволяет захватывать и экспортировать внутреннее состояние объекта, чтобы его можно было восстановить позже, не нарушая инкапсуляцию. |
Шаблон наблюдателя | Определяет зависимость «один ко многим» между объектами, поэтому при изменении состояния одного объекта все его зависимые объекты автоматически уведомляются и обновляются. |
Образец состояния | Позволяет объекту изменять свое поведение при изменении его внутреннего состояния. Будет казаться, что объект меняет свой класс. |
Паттерн стратегии | Определяет семейство алгоритмов, инкапсулирует каждый из них и делает их взаимозаменяемыми. Стратегия позволяет алгоритму изменяться независимо от клиентов, которые его используют. |
Шаблон метода шаблона | Определяет скелет алгоритма в операции, откладывая некоторые шаги на подклассы. |
Шаблон посетителя | Представляет операцию, выполняемую над элементами структуры объекта, позволяющую определить новую операцию без изменения классов элементов. |
Парадигмы программирования
[ редактировать ]Парадигмы программирования представляют собой теоретические основы, определяющие способы создания и выполнения программных конструкций. Каждая парадигма воплощает в себе уникальный подход к организации и структурированию логики программирования, часто продвигая определенные формы абстракции и композиционных структур, которые соответствуют их основным принципам.
Парадигма | Ключевые абстракции | Описание |
---|---|---|
Процедурное программирование | Процедура, функция, подпрограмма | На основе концепции вызовов процедур. Он структурирует код с помощью последовательностей операторов и многократно используемых подпрограмм или функций. |
Объектно-ориентированное программирование | Класс, объект, наследование, полиморфизм, инкапсуляция | Моделирует мир как взаимодействующие объекты со связанными данными и поведением, используя классы в качестве шаблонов. Поощряет инкапсуляцию и повторное использование. |
Функциональное программирование | Функция, чистая функция, лямбда, функция высшего порядка, рекурсия | Рассматривает вычисления как оценку математических функций, избегая изменяющихся состояний и изменяемых данных. Функции являются гражданами первого сорта. |
Логическое программирование | Предикат, Факт, Правило, Цель | Использует формальную логику для выражения вычислений. Алгоритмы записываются как набор логических операторов, а вычисления выполняются посредством логического вывода. |
Программирование, управляемое событиями | Событие, Обработчик событий, Обратный вызов | Фокусируется на том, что ход программы определяется событиями. Часто используется для пользовательских интерфейсов, систем реального времени и обработки асинхронного ввода-вывода. |
Императивное программирование | Переменная, Цикл, Условная | Явно детализирует шаги, которые программа должна предпринять для достижения желаемого состояния, с помощью операторов, которые изменяют состояние программы. |
Декларативное программирование | Выражение, Декларация | Описывает желаемый результат или вычисление без явного перечисления команд или шагов, которые необходимо выполнить. |
Аспектно-ориентированное программирование | Аспект, Точка Присоединения, Совет, Pointcut | Разбивает логику программы на отдельные части (задачи), не связанные с основной объектно-ориентированной моделью, с целью повышения модульности. |
Параллельное программирование | Поток, параллельный процесс, блокировка, синхронизация | Управляет несколькими вычислениями, которые могут выполняться параллельно — как на одном процессоре, так и распределены по сети. |
Программирование, управляемое данными | Поток данных, Схема данных, Преобразование данных | Вращается вокруг структур данных и проектирования систем для обработки больших объемов данных с функциями, которые сильно зависят от входных данных. |
Абстракции программной инженерии
[ редактировать ]Абстракции разработки программного обеспечения — это концептуальные инструменты, которые упрощают сложную реальность программных систем, позволяя разработчикам сосредоточиться на проблемах высокого уровня и управлять сложностью программного обеспечения. Эти абстракции часто связаны с сокрытием основных деталей реализации посредством инкапсуляции, определения четких интерфейсов и установления протоколов взаимодействия.
Концепция | Описание |
---|---|
Модуль | Инкапсулирует набор связанных функций, процедур или классов и предоставляет интерфейс, скрывая сложность. |
Шаблон проектирования программного обеспечения | Общие повторяемые решения часто возникающих проблем при разработке программного обеспечения, описанные в шаблонах. |
Программная среда | Надежная платформа многократно используемых компонентов или систем, обеспечивающая определенную функциональность и предназначенная для облегчения разработки программного обеспечения. |
Промежуточное ПО | Программное обеспечение, которое находится между приложениями или системным программным обеспечением и облегчает связь или управление данными. |
Интерфейс | Четко определенные средства связи между различными компонентами программного обеспечения, часто в форме функций или протоколов. |
Услуга | Независимо развертываемые функциональные блоки, инкапсулирующие набор операций и предоставляющие функциональность через интерфейсы. |
Компонент | Многоразовые и взаимозаменяемые программные модули, которые взаимодействуют, образуя функциональную систему, обычно раскрывая интерфейсы и скрывая реализацию. |
API | Спецификации подпрограмм, структур данных, классов объектов и протоколов, используемых для связи между потребителем и разработчиком API. |
Протокол | Согласованный формат обмена данными между системами, обеспечивающий бесперебойную связь программных компонентов. |
Примечания
[ редактировать ]Ссылки
[ редактировать ]Ссылка на учебник:
- Келлер, Роберт М. Информатика: от абстракции к реализации . Колледж Харви Мадда, сентябрь 2001 г.