Я опоздал, но, возможно, это будет полезно для вас. Пользователь huitseeker
написал отличный ответ с точки зрения разработки программного обеспечения. Я хочу ответить на ваш вопрос с точки зрения математики. До погружения в мир программного обеспечения Алексей Степанов был математиком и изучал аннотация и универсальную алгебру. И он часто пытался внести строгие математические основы в мир разработки программного обеспечения и алгоритмов. В своих книгах От математики до общего программирования и Элементы программирования он отстаивает эту практику проектирования. Его идеи о смешении понятий алгебраических структур и проектировании программного обеспечения были реализованы в понятии generic programming
. А теперь давайте поговорим о его цитате:
Для решения реальных задач вам нужны многосортные алгебры - семейства интерфейсов, охватывающих несколько типов
По моему мнению, здесь есть две основные концепции, которые он хотел бы упомянуть: идея абстрактный тип данных (ADT
) и алгебраическая структура . Первая концепция: ADT
. ADT
- это математическая модель для типов данных, в которой тип данных определяется только его семантикой. Степанов противопоставил идею ADT
идее object
в смысле ООП. Объект содержит данные и состояние, в то время как ADT - , а не . ADT - это behavioural abstraction
, operation cluster
, который описывает взаимодействие с данными. Поведенческая абстракция полностью описывается с помощью алгебраической спецификации абстрактного типа данных. Вы можете прочитать об этом больше в оригинальной статье Liskov & Zilles , также я рекомендую вам бумагу Объектно-ориентированное программирование в сравнении с абстрактными типами данных от Уильям Р. Кук .
( Discalimer : Вы можете пропустить этот абзац, потому что он более "математический и не столь важный" ) Сначала я хочу уточнить некоторую терминологию. Когда я говорю о algebraic structure
, это то же самое, что алгебра. Слово algebra
часто также используется для алгебраической структуры. Чтобы быть более точным, когда мы говорим об алгебраических структурах (алгебрах), мы обычно имеем в виду алгебру над алгебраической теорией . Существует понятие многообразия алгебр , поскольку существует несколько понятий алгебраической структуры на объекте некоторой категории. По определению algebraic theory
(алгебра над ним) состоит из спецификации операций и законов, которым должны удовлетворять эти операции: это рабочее определение алгебраической структуры, которую мы будем использовать, и это определение, я думаю, Степанов неявно упоминается в цитата.
Второе понятие , которое Степанов хотел упомянуть, является наиболее интересным свойством АТД: они могут быть формально смоделированы непосредственно как many-sorted algebraic structures
. Давайте поговорим об этом более формально. Алгебраическая структура - это carrier set
с одной или несколькими заданными конечными операциями. Эти операции обычно определяются не над одним набором, а над несколькими. Например. давайте определим и алгебру, которая моделирует конкатенацию строк. Эта алгебра будет определяться не для одного набора строк, а для двух наборов: набор строк S
и набор натуральных чисел N
, потому что мы можем определить операцию, которая может конкатенировать строку с собой некоторое конечное число раз. Таким образом, эта операция займет два операнда, принадлежащих различным базовым (несущим) наборам: S
и N
. Набор, определяющий эти различные операнды (их типы) в алгебре, называется набором sorts
. Sort
является алгебраическим аналогом типа. Алгебра с множественными сортами называется многосортной алгеброй. В универсальной алгебре в signature
перечислены операции, которые характеризуют алгебраическую структуру. Многосортная алгебраическая структура может иметь произвольное количество областей. Сортировки являются частью подписи, и они играют роль имен для разных доменов. Многочисленные сигнатуры также предписывают, для каких сортов определяются функции и отношения многосортной алгебраической структуры. Для односортного множества алгебр сигнатура - это множество, элементы которого называются операциями, каждому из которых присваивается кардинальное число (0,1,2,…), называемое его арностью. Сигнатура многосортированной алгебры может быть определена как Σ = (S,OP,A)
, где S
- набор имен (типов) сортировки, OP
- набор имен операций и A
- арности, как и раньше, за исключением того, что теперь это арность представляет собой список ( последовательность или, в более общем случае, свободный моноид ) входных сортировок, а не просто натуральное число (длина списка) вместе с одной выходной сортировкой. Теперь мы можем создать алгебраическую спецификацию абстрактного типа данных ADT
в виде тройки:
ADT = (N, Σ, E)
, где N
- имя абстрактного типа данных, Σ = (S,OP,A)
- сигнатура многосортной алгебраической структуры, E = {e1, e2, …,en}
- конечный набор равенств в сигнатуре. Как вы можете видеть, у нас есть строгое математическое описание ADT. В математике многие сортированные алгебраические структуры часто используются в качестве удобного инструмента, даже если их можно избежать с небольшими усилиями. Многочисленные алгебраические структуры редко определяются строгим образом, потому что это просто выполнить обобщение явно. Вот почему теория многогранных алгебр может быть успешно применена к разработке программного обеспечения.
Итак, Алексей Степанов хотел сказать, что он предпочитает ООП и общее программирование ООП, потому что, таким образом, мы можем создавать программы со строгой математической / алгебраической основой. Я высоко ценю его усилия. Мы все знаем, что алгебраический дизайн всегда правильный, строгий, красивый, простой и дает нам лучшие абстракции.