Научная статья на тему 'О формальном определении абстракции'

О формальном определении абстракции Текст научной статьи по специальности «Математика»

CC BY
527
56
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
АБСТРАЦИЯ / БАРЬЕР АБСТРАКЦИИ / НАСЛЕДОВАНИЕ / ГРАДИ БУЧ / БАРБАРА ЛИСКОВ / РОБЕРТ МАРТИН

Аннотация научной статьи по математике, автор научной работы — Тюменцев Е.А.

В статье предлагается формальное определение абстрагирования как отображения множества сущностей во множество подслов всех слов некоторого алфавита, иерархии абстракций как отношения на множестве подслов языка и интерпретации. Также получен ряд ограничений, которым обладает механизм абстрагирования.

i Надоели баннеры? Вы всегда можете отключить рекламу.
iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

Текст научной работы на тему «О формальном определении абстракции»

УДК 004.053 DOI: 10.25513/2222-8772.2018.1.131-143

О ФОРМАЛЬНОМ ОПРЕДЕЛЕНИИ АБСТРАКЦИИ

Е.А. Тюменцев

ген. директор, e-mail: etyumentcev@hwdtech.ru

LLC Hello World! Technologies, Омск, Россия

Аннотация. В статье предлагается формальное определение абстрагирования как отображения множества сущностей во множество подслов всех слов некоторого алфавита, иерархии абстракций как отношения на множестве подслов языка и интерпретации. Также получен ряд ограничений, которым обладает механизм абстрагирования.

Ключевые слова: абстрация, барьер абстракции, наследование, Гради Буч, Барбара Лисков, Роберт Мартин.

Введение

Абстракция — одно из важнейших понятий в программировании. По словам Ахо и Ульмана [1]: «Computer Science is a science of abstraction — creating the right model for thinking about a problem and devising the appropriate mechanizable techniques to solve it». При этом, как отмечено, например, в [2], его понимание и изучение, и, как следствие, применение на практике, вызывает серьёзные трудности. На наш взгляд, возможная причина связана с неформальным характером широко используемых определений. Например, вот одно из наиболее популярных, предложенное Гради Бучем [3]:

«Абстракция выделяет существенные характеристики некоторого объекта, отличающие его от всех других объектов».

Его часто используют в университетских курсах по программированию, цитируют или перефразируют в учебных пособиях и учебниках, например: [4, с. 172], [5, с. 375].

В своей книге Буч отмечает, что похожие формулировки можно встретить у Даль, Дейкстры и Хоара [6], Шоу [7], Берниса, Грея, Наумана [8] и др.

Отметим одну из особенностей этих определений: они объясняют назначение абстракции, но при этом никак не поясняют, что именно является абстракцией.

Ещё одно определение даёт Барбара Лисков в книге [9]:

«The process of abstraction can be seen as application of many-to-one

mapping».

Однако она не поясняет ни область значений, ни область определения такого отображения, ни саму природу отображения «многие-к-одному».

В настоящей статье мы предлагаем формальное определение абстракции, иллюстрируем его применение на нескольких примерах и формулируем несколько ограничений, связанных с абстракцией, в виде утверждений. Публикуемые результаты были представлены на конференции [10].

1. Некоторые базовые определения

Нам потребуются базовые понятия теории формальных языков. Для удобства читателя приведём их в этой статье.

Начнём с символа, или буквы. Как и водится с исходными понятиями, мы не можем дать точное определение символа, а лишь попытаемся пояснить его смысл. Итак, символ - это некий знак, который рассматривается как неделимое единое целое. Чаще всего мы будем обозначать символы латинскими буквами a, Ь, с.

Все, что мы можем сказать про два произвольных символа, — это одинаковы они или нет. Причём одинаковость символов может трактоваться по-разному, в зависимости от ситуации. Например, следует ли считать одинаковыми буквы а и А латинского алфавита — зависит от того, хотите ли вы различать написание слов в верхнем и нижнем регистрах. Или одинаковые при написании буквы а кириллицы и буквы а латинского алфавита все же являются различными символами.

Тогда алфавит — это произвольное непустое конечное множество символов. Мы будем обозначать алфавит буквой £.

Словом в алфавите £ называется произвольная конечная последовательность букв а\а2 .. .ап, где а» G £,i Е (1, 2,... ,п).

Подсловом слова w = а\а2 ...ап, где а» G £,i Е (1, 2,...,п) в алфавите £ называется любая подпоследовательность aiai+\.. .aj, где г ^ 1, г ^ j,j ^ п.

На множестве слов определена операция конкатенации слов.

Формальным языком над алфавитом £ называется произвольное подмножество конечных слов в алфавите £.

Пример 1. Рассмотрим язык C++. Процедура

void f() {

for(int i = 0; i < 10; ++i)

{

std::cout << i;

}

}

является словом языка C++, а лексемы void {}(),:: = ; for и т. д. — символвами алфавита. Среди всех подслов данного слова будут

void f() void f

std::cout << i;

for(int i = 0; i < 10; ++i) {

std::cout << i;

}

int i = 0; i=0 =0 < 10; ++

Пусть L — формальный язык над некоторым алфавитом £. Будем обозначать L — множество всех подслов каждого слова языка L.

Предложение 1. Для любого алфавита £ множество £* всех конечных слов в этом алфавите счётно.

Доказательство. Это хорошо известный факт из стандартного курса математической логики. ■

2. Определение

Определение 1 (Формальное определение абстракции). Пусть £ - произвольный алфавит символов, А с £* - произвольное подмножество множества всех слов в алфавите £,Х - некоторое множество. Тогда сюръективное отображение Р : X ^ А называется абстрагированием множества X над алфавитом £, или, кратко, абстрагированием множества X, если это не вызывает разночтений. При этом элементы множества X будем называть сущностями, а элементы множества А - абстракциями.

Предлагаемое определение не привязано ни к какой методологии разработки программного обеспечения, и лишь отражает необходимость переноса сущностей предметной области на конструкции используемого языка программирования.

Пример 2 (Десятичная запись целого числа). Рассмотрим алфавит

£ = {-0123456789} и подмножество ИН всех цепочек £* вида:

... д,п,

где п ^ 1,ё,1 е {12 3 456 78 9},& е {0 1 2 3456789}, 2 ^ г ^ п, или вида:

—^1^2 ... dm,

где m ^ Mi G {123456789},dj G {0123456789}, 2 ^ j ^ m, либо цепочку

0.

Тогда отображение IntD : Z ^ DR, которое сопоставляет каждому целому числу его запись в десятичной системе счисления является абстрагированием.

Пример 3 (Двоичная запись целого числа в Java). Рассмотрим алфавит £ = {— b01} и подмножество BR всех цепочек £* вида:

0bd1d2.. .dn,

где n ^ 1,di G {0 1}, 1 ^ i ^ п, или вида:

-0bd1d2... dm,

где m ^ 1,dj G {0 1}, 1 ^ г ^ т, либо

060.

Тогда отображение IntB : Z — BR, которое сопоставляет каждому положительному целому числу строку символов вида 06[запись числа в двоичной системе счисления], отрицательному целому числу строку символов вида —06[запись модуля числа в двоичной системе счисления], 0 - 060, является абстрагированием.

Определение 2. Пусть L с £* - формальный язык над алфавитом £, F : X —у Abs — некоторое абстрагирование множества X над алфавитом £. Тогда абстрагирование F применимо к языку L тогда и только тогда, когда Ух G F (X) : ж G L.

Пример 4. Абстрагирование IntD из примера 2 применимо к языкам C++, Java, PHP, Python и многим другим, а IntB из примера 3 применимо к языку Java, начиная с версии 7.

Как видно из последних примеров, образы одной и той же сущности предметной области могут отличаться относительно разных абстрагирований. Но может быть и обратная ситуация, когда образы нескольких сущностей относительно разных абстрагирований совпадают. В тексте программы представлены только абстракции. Значит, для понимания программного кода и предметной области необходимо по абстракциям восстановить набор использованных абстрагирований. В некоторых случаях, например, магические константы (в программе используются числовые константы без пояснения смысла), это сделать довольно сложно. Именованные константы, говорящие названия переменных и методов — это встраивание информации для простого и быстрого восстановления информации об абстрагированиях. Сравните:

2 и int maxPlayers = 2;

int f (int a, int b); и int sum(int aryl, int ary2);

3. Иерархия абстракций

Хорошо известный факт (классификация Хомского), что каждый формальный язык можно описать с помощью формальной грамматики. Формальная грамматика - это частный случай исчисления. Следовательно, используя правила вывода соответствующего исчисления - правила формальной грамматики -можно одни подслова и слова выводить из других.

Определение 3. Пусть Ь - произвольный формальный язык над некоторым алфавитом £, Сг(Ь) - исчисление, в котором выводимы все слова языка Ь. Определим на множестве всех его подслов Ь отношение Нг следующим образом:

Уи, т е Ь : (и,ь) е Нг ^^ ..., чип,

где п ^ 1, - вывод в исчислении Сг(Ь), такой что тп = т, 3] е (1, 2,...п) : 'Шу = и, причём и встречается только один раз среди Wj, последовательность т1,... ^з^,™]^,... ,-шп выводом не является. Отношение Нг называется отношением иерархии на множестве всех подслов Ь, заданного с помощью исчисления Сг(Ь), или, кратко, если это не вызывает разночтений, отношением иерархии.

Предложение 2. Пусть Ь - произвольный формальный язык над некоторым алфавитом £, Сг(Ь) - исчисление, в котором выводимы все слова языка Ь. Отношение иерархии Нг на множестве всех подслов Ь, заданного с помощью исчисления Сг(Ь), является: рефлекисвным, транзитивным.

Доказательство. Следует непосредственно из определения отношения иерархии и понятия выводимости в исчислении. ■

Определение 4. Пусть Ь - произвольный формальный язык над некоторым алфавитом £, Сг(Ь) - исчисление, в котором выводимы все слова языка Ь, Нг - отношение иерархии на множестве всех подслов Ь, заданного с помощью исчисления Сг(Ь). Предположим, что и,т - две абстракции, которые определены с помощью некоторых абстрагирований, применимых к языку Ь. Тогда и называется низкоуровневой абстракцией по отношению к т, а т -высокоуровневой абстракцией по отношению к т тогда и только тогда, когда (и, у) е Нг.

4. Барьер абстракции и обобщение

С абстракцией связывают понятие барьера абстракции, когда в силу ограниченного числа выделенных характеристик одна и та же абстракция может сразу соответствовать нескольким сущностям предметной области, другими словами, эти сущности становятся неразличимыми. С точки зрения данного

нами определения существование барьера — это утверждение о том, что не всякая абстракция F обязательно является инъективным отображением.

Пример 5. Рассмотрим абстракцию

class Person {

std::string lastname;

std::string firstname;

};

Эта абстракция не позволяет различать людей, которые являются тезками.

Предложение 3. Пусть L - произвольный формальный язык над некоторым алфавитом £. Существует такой набор сущностей X, что для любого абстрагирования F существует сущность х g X, для которой

1. либо F(x) не определена,

2. либо Зу G X : F(х) = F(у).

Доказательство. Согласно утверждению 1 множество £* счётно. Рассмотрим множество действительных чисел R и произвольное абстрагирование F : R ^ А, где А с £*.

Предположим, что Vx1,x2 Е R : F(ж1) = F(х2), то есть F - инъективно. Тогда F определено на всем множестве и получаем взаимнооднозначное отображение R и А, но в таком случае R не более чем счётно, либо F определено не на всем множестве R.

Предположим, что F определено на всем множестве R. Тогда F не может быть инъективным, иначе получим опять взаимнооднозначное отображение R и А. ■

Определение 5. Пусть £ - произвольный алфавит символов. Рассмотрим F : X ^ А, где А с £*, - некоторое абстрагирование множества X над алфавитом £. Будем говорить, что F является абстрагированием с обобщением, если и только если

Зх,у G X : F(х) = F(у).

Определение 6. Пусть £ - произвольный алфавит символов. Рассмотрим F : X ^ А, где А с £*, - некоторое абстрагирование множества X над алфавитом £. Будем говорить, что абстракция а, а Е А, обобщает сущности х,у G X, если и только если

F (ж) = F (у) = а.

Утверждение 3 показывает, что есть такие наборы сущностей, для которых абстрагирование будет либо определённым частично, либо абстрагированием с обобщением. Возникает естественный вопрос: как часто встречаются такие наборы сущностей?

Предложение 4. Пусть £ - произвольный алфавит символов, 'ш - некоторое слово в этом алфавите, Р : X л А, где А с £*, - некоторое абстрагирование множества X над алфавитом £. Предположим, что слово т содержит все абстракции множества А в качестве подслов. Тогда:

• либо Р является абстрагированием с обобщением,

• либо X - конечное множество,

• либо Р определено частично на множестве X.

Доказательство. Конечность множества А вытекает из предположения, что слово т содержит все абстракции множества А в качестве подслов, а любое слово конечно. По определению абстрагирования Р - сюръективное отображение, а, следовательно, |Х| ^ |А|.

Если Р является инъективным, то Р - взаимнооднозначное отображение, и тогда IX| = |А|.

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

Если X не является конечным множеством, то либо Р определено частично, в этом случае оно может быть инъективным на своей области определения, либо будет абстрагированием с обобщением, то есть не будет инъективным.

Если Р определено на всем множестве X, то либо Р инъективно, а значит Р взаимнооднозначно и |Х| = |А|, либо Р - абстрагирование с обобщением. ■

Практический смысл данного утверждения заключается в том, что программисту приходится постоянно иметь дело либо с обобщением, либо соглашаться с тем, что его программа определена только для неполного набора сущностей. На конечность множества сущностей рассчитывать не приходится, так как разработка программы - процесс, развивающийся во времени. А с течением времени часто наше понимание об исходных сущностях либо меняется само по себе, либо под воздействием внешних факторов. Например, множество способов оплаты в магазине постоянно меняется, потому что магазины придумывают разные способы привлечения клиента: бонусы, подарочные сертификаты и т. д., появляются новые технологии, например, ЫРС. Другими словами, имея на данный момент конечный набор сущностей, нельзя быть уверенным, что он не поменяется в будущем.

Предложение 5. Пусть £ - произвольный алфавит символов, Р : X л А, где А с £*, - некоторое абстрагирование с обобщением множества X над алфавитом £, причём |A| > 1. Предположим, что У - множество такое, что \У | > 1, 1(1: У л АУ - взаимнооднозначное абстрагирование множества У над алфавитом £. Тогда существует такое отображение С : X л У, для которого не существует д : А л АУ, чтобы следующая диаграмма была коммутативной:

X Л А С | | д

у 4 ау

Доказательство. Проведём построением примера. Поскольку абстрагирование с обобщением, причём |А| > 1, то существуют такие различные

Xi,X2,X3 G X : F(xi) = F(^2) = F(х3).

Поскольку \Y| > 1, то найдутся два различных у1,у2 G Y. Определим действие G : X ^ Y на х1 как G(x1) = у1, а G(x2) = у2. По условию id(y1) = id(y2). Поскольку F(ж1) = F(х2), то Уд : А ^ AY : g(F(ж1)) = g(F(х2)), но, по построению функции G, имеем id(G(x1)) = id(G(x2)). ■

Практическое значение этого утверждения заключается в том, что какое бы множество абстракций размерности больше одного программист не выбрал, найдётся функция, отличная от константной, которая не может быть реализована с помощью этого набора абстракций. То есть не существует «универсальных» абстракций, подходящих на все случаи жизни. Есть конструкции языков программирования, например, if-else, оператор множественного выбора switch требуют явного перечисления всех вариантов, а значит поощряют создание множеств абстракций размерности не менее, чем два. То есть реализация новых бизнес-требований может потребовать правок программного кода (соот-вествующих абстракций), а это, в свою очередь, как показано в [11], может приводить к снижению скорости разработки программного продукта.

5. Некоторые свойства и ограничения абстрагирований

Широко известный факт из университетского курса математической логики - образ любого отображения задаёт отношение эквивалентности на области определения. Следовательно,

Замечание 1. Пусть £ - некоторый алфавит символов, F : X ^ А, где А с £*, - произвольное абстрагирование множества X над алфавитом £. Множество абстракций А определяет отношение эквивалентности на множестве сущностей X.

Более того, в условиях предыдущего замечания,

Замечание 2. Если множество X является носителем какой-либо алгебраической системы, то абстрагирование F может оказаться конгруэнцией.

Замечание 3. Если множества X и А являются носителями каких-либо алгебраических систем, то абстрагирование F может оказаться морфизмом.

Предложение 6. Пусть £ - произвольный алфавит символов. Множество всех возможных абстрагирований над алфавитом £ несчётно.

Доказательство. Согласно утверждению 1 множество £* счётно. Рассмотрим все различные множества Ха = {а}, где а е К, состоящие из одного действительного числа. Таких множеств несчётно. Тогда и абстрагирований вида Ра : Ха л А, где А = {а}, а е £*, — множество абстракций А состоит из одного слова. Множество все абстрагирований Ра, где а е К, будет несчётным. ■

Предложение 7. Пусть £ - произвольный алфавит символов. Задача построения произвольного абстрагирования алгоритмически не разрешима.

Доказательство. Следует из факта существования универсальной машины Тьюринга и утверждения 6. ■

6. Интерпретация абстракций

Сами по себе слова формального языка - это лишь конечные цепочки символов. Тем не менее, они несут смысловую нагрузку, которую можно определить с помощью понятия интерпретации.

Определение 7. Пусть £ - некоторый алфавит, Ь - формальный язык над алфавитом £. Тогда отображение I : Ь Л У, где У - некоторое множество, будем называть интерпретацией языка Ь на множестве У.

Замечание 4. Скорее всего, интерпретация будет определена частично на множестве Ь.

Например, для пустого оператора языка С++

который значит «ничего не делать», может не существовать интерпретации, или, для выражения

5+5+

Замечание 5. Для определения интерпретации можно использовать отношение иерархии Нг (см. определение 3) на множестве всех подслов L, заданного с помощью исчисления Gr(L).

Пример 6. Рассмотрим формальный язык Fs, который описывает множество арифметических формул над кольцом целых чисел Z. Определим формальную грамматику для данного языка. Множество терминальных символов

Т = {0123456789 + -()}.

Начальный нетерминальный символ - это «Formula». Грамматика будет учитывать приоритет операций.

Formula ::= Formula + Add | Formula - Add | Add Add ::= -Number | Number | (Formula)

Number ::= Number 0 | Number 1 | Number 2 | Number 3 | Number 4 |

| Number 5 | Number 6 | Number 7 | Number 8 | Number 9 Number ::=0|1|2|3|4|5|6|7|8|9

Множество нетерминальных символов составляет

N = {Formula Add Number}.

Определим теперь интерпретацию I для языка Fs в кольцо целых чисел Z. Для того чтобы отличать записи слов языка Fs и элементы в Z, будем к числам из Z добавлять индекс z.

Рассмотрим произвольное слово w Е Fs и восходящий вывод этого слова с помощью определённой выше грамматики:

W1,W2, . . . ,Wn,

где w1 = w, wn = Formula, n Е N. Определим теперь серию функций

Vi(N,N) ^ Z,

где i G (1, 2,... ,n), индукцией по номеру г. Пусть г =1. Тогда функция V1(N, N) = 0.

Предположим, что все функции Vi с номерами i < М,М > 1,М G N, уже определены. Построим определение функции Vm.

Если М > п, тогда V1(N, N) = 0. Иначе, рассмотрим слово wm. Запишем слово wm как uRv, где R - нетерминальный символ, который получился в результате применения одного из правил. Обозначим как г позицию нетерминального символа R в слове wm, а количество символов в правой части правила, в результате которого получился R, как с. Рассмотрим произвольный нетерминальный символ А, входящий в запись слова wm. Пусть р - его позиция в записи этого слова.

Если р < г, то определим Vm(р,А) = Vm-1(р,А). Если р> г, тогда Vm(р, А) = Vm-1(р - с + 1, А).

Смысл последних двух выражений — значение функции не меняется для тех нетерминальных символов, которые не были затронуты применением последнего правила. Рассмотрим случай, когда р = г. То есть случай, когда А = R. Для того чтобы определить значение Vm(R), необходимо рассмотреть все варианты правил.

• Правило Number ::= 0, тогда

Vm (г, Number) = 0. Здесь 0 - это целое число. Аналогично поступаем в случае правил

Number ::= 1,... , Number ::= 9.

• Правило Number ::= Number 0, тогда

Vm(г, number) = Vm-1 (r, Number) * 10 + 0. Аналогично поступаем в случае правил

Number ::= Number 1,..., Number ::= Number 9.

• Правило Add ::= Number, тогда

Vm(r, Add) = Vm-1(r, Number) mod 232.

Сравнение по модулю 232 связано с тем, что в вычислительных машинах имеется ограниченное число разрядов для представления данных. В данном примере предполагаем, что строим интерпретацию для 32-разрядной машины.

• Правило Add ::= —Number, тогда

VM (г, Add) = VM-1(r + 1, Number) mod 232.

• Правило Add ::= (Formula), тогда

Vm(r, Add) = Vm-1(r + 1, Formula).

• Правило Formula ::= Formula + Add, тогда

Vm(r, Formula) = Vm-1(r, Formula) + Vm-1(r + 2, Add) mod 232.

• Правило Formula ::= Formula + Add, тогда

Vm(r, Formula) = Vm-1(r, Formula) — Vm-1(r + 2, Add) mod 232.

Во всех остальных случаях отображение Vm равно 0.

Тогда интерпретацией слова w будем считать значение Vn(1, Formula).

Одно и тоже слово может иметь несколько выводов, а значит и интерпретация такого слова может быть различной в зависимости от того, какой вывод был использован для её вычисления. Здесь возможно несколько вариантов.

Доказать, что значение интерпретации не зависит от выбранного вывода. Пример 6 — как раз такой случай. В статье это не сделано, так как пример нужен только, чтобы показать, как интерпретация строится, и обозначить проблему разных выводов.

• Указать какой-либо способ выбора применяемых правил, чтобы ограничиться только одним возможным выводом. Например, левосторонний вывод в ЬЬ(1)-грамматиках.

• Исключить из языка слова, которые допускают неоднозначность интерпретации. Например, следующая запись считается ошибочной в C++: f(++i, ++i);

Заметим, что в примере 6 абстрагирование ЯпЬЯ : Z Л ЯЯ из примера 2 продолжается до гомоморфизма аддитивной группы Z и аддитивной группы Z232 : I о 1пЮ : Z Л Z232. Этот факт в программировании известен как переполнение при арифметических операциях над целыми числами. Если же вместо абстрагирования 1пЮ : Z л ЯЯ взять построенное по аналогии 1пЮ32 : Z232 л ЯЯ, то его можно продолжить до автоморфизма аддитивной группы Z232 : I о 1пЮ32 : Z232 Л Z232.

Этот факт позволяет использовать следующие эквивалентности

4294967295 = -1(то^ 4294967296) 4294967294 = -2(тоА 4294967296)

2147483648 = -21474836478(то^ 4294967296)

для представления отрицательных чисел в виде дополнительного кода и сэкономить на транзисторах для операции вычитания при разработке процессора — вместо неё используется сумматор.

Если попробовать построить по аналогии абстрагирование для вещественных чисел на множество чисел с плавающей точкой, то такое абстрагирование не будет морфизмом вообще. То есть если взять два вещественных числа, например, 5.2 и 3, и перемножить, то получим 15.6, тогда как для чисел с плавающей точкой равенство 5.2 * 3 = 15.6 окажется неверным. Это связано с тем, что любой интервал вещественных чисел содержит несчётное число чисел, а чисел с плавающей точкой — только лишь конечное число, поэтому при абстрагировании вещественных чисел числами с плавающей точкой возникает проблема округления — представление вещественного числа ближайшим к нему числом с плавающей точкой. Из-за этого вместо операции равенства используется сравнение модуля разности чисел с некоторым маленьким числом е, а в математике возникло целое направление — вычислительные методы, которое занимается изучением вычислений с плавающей точкой, чтобы их результат был максимально близок к вычислениям в вещественных числах.

Ещё один момент, который необходимо иметь ввиду при построении абстрагирований: интерпретация может меняться, например, из-за изменения архитектуры процессора.

Пример 7. Выражение 65535 + 1 == 0 будет истинным на 16-разрядной архитектуре, но ложным на 32-разрядной.

Определение 8. Пусть £ - некоторый алфавит, Ь - формальный язык над алфавитом £. Тогда абстрагирование Я : X л А, где А с Ь, называется устойчивым относительно интерпретаций 11 : Ь Л У и 12 : Ь Л У, где У - некоторое множество, если и только если

Ух е X : 11 о Я (ж) = 12 о Я (х).

Замечание 6. Устойчивость абстракции транзитивна.

Литература

1. Aho A., Ulman J. Foundations of Computer Science: C Edition (Principles of Computer Science Series). URL: http://i.stanford.edu/~ullman/focs.html (дата обращения: 01.10.17).

2. Hazzan O. Reflections On Teahcing Abstraction and other Soft Ideas ACM SIGCSE Bulletin. 2008. Vol. 40(2). P. 40-43.

3. Буч Г., Максимчук Р., Энгл М., Янг Б., Коннален Дж., Хьюстон К. Объектно-ориентированный анализ и проектирование с примерами приложений на С++. М. : «И.Д. Вильямс», 2008. 720 с.

4. С.А. Орлов. Технологии разработки программного обеспечения: учебник для вузов. СПб. : Питер, 2004. 527 c.

5. Рапаков Г.Г., Ржеуцкая С.Ю. Программирование на языке Pascal. СПб. : БХВ-Петербург, 2004. 480 c.

6. Dahl O., Dijkstra E., Hoare C. Structured Programming. London : Academic Press. 1972. P. 83.

7. Shaw M. Abstraction Techniques in Modern Programming Languages // IEEE Software. 1984. Vol. 1(4). P. 10.

8. Berzins V, Gray M., Naumann D. Abstraction-Based Software Development // Communications of the ACM. 1984. Vol. 29(5). P. 403.

9. Liskov B., Guttag J. Program Development in Java: Abstraction, Specification, and Object-Oriented Design. Pearson Education, 2000. 464 p.

10. Тюменцев Е.А. Формальное определение абстракции. С. 36-38.

11. Тюменцев Е.А. О формализации процесса разработки программного обеспечения // Математические структуры и моделирование. 2017. № 3(43). С. 96-107.

12. The Liskov Substitution Principle. URL: http://www.objectmentor.com/ resources/articles/lsp.pdf (дата обращения: 01.12.12).

ABOUT FORMAL DEFINITION OF AN ABSTRACTION

E.A. Tyumentsev

CEO, e-mail: etyumentcev@hwdtech.ru

LLC Hello World! Technologies, Omsk, Russia

Abstract. The article proposes a formal definition of abstraction as a mapping of a set of entities into a set of subwords of all words of some alphabet, a hierarchy of abstractions as relations on the set of subwords of a language and interpretation. Also received a number of limitations, which has an abstraction mechanism.

Keywords: abstraction, abstarction barrier, inheritance, Grady Booch, Barbara Liskov, Robert Martin.

Дата поступления в редакцию: 31.01.2018

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.