Oбъектно-ориентированная реализация числовых функций
Цель лекции: Научить создавать классы, для описания функций и реализации операций над функциями.
Пусть
и
- произвольные множества. Мы под абстрактной функцией
будем понимать правило, которое элементу
множества
сопоставляет элемент множества
. Записывается это
в виде

рассматривать
подмножества множества
. Функция
может быть определена не
на всем множестве
, а только на некотором (непустом)
подмножестве
. Множество
называется областью
определения функции
.Мы будем рассматривать функции
, определенные на подмножествах
. Однако в качестве множества
у нас могут выступать
различные множества. Для этого создадим универсальный класс,
который сможет представлять любые другие объекты.

Заметим, что мы воспользовались типом
. Этот тип является
родительским для всех объектов C#, поэтому возможно в классе
хранить ссылку на любой объект (элемент множества
).
Абстрактный класс представляющий функцию, заданную на некотором
отрезке
, выглядит следующим образом

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

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

Теперь с использованием наших классов мы вычислим производные от
функции
.


и
.Мы реализовали класс для представления функций, убедились, что
наши классы в состоянии выполнять различные действия с функциями.
Однако в наших вычислениях мы использовали тип
для
представления действительных чисел. Этот подход означает, что мы
рассматриваем лишь подмножество рациональных чисел. Но из прошлой
лекции мы знаем, что на компьютере можно реализовать и большее ---
машина Поста (а значит теоретически и любой компьютер) может
оперировать конструктивными действительными числами. Поэтому
естественно рассматривать функции как отображение одного
конструктивного действительного числа в другое конструктивное
действительное число. В конструктивной математике есть
фундаментальное понятие - конструктивная функция. Однако,
как известно, единого определения конструктивной функции в строгих
рамках конструктивной математики не существует.
Мы дадим определение функции Маркова. Но сначала мы должны
ответить на естественный вопрос - а какие конструктивные
действительные числа называются равными? Если исходить из того,
что конструктивно действительное число - это пара алгоритмов, то
из неравенства этих алгоритмов еще не следует неравенство
конструктивных действительных чисел. Поэтому мы будем говорить,
что
равно
и писать
, если существует такая вычислимая
функция
, что

.Пусть
- некоторое множество конструктивных действительных
чисел такое, что если
и
- другое конструктивное
действительное число и
, то
. Конструктивной функцией
или функцией Маркова называется такой алгоритм
, что
- Для любого
определено
и
есть конструктивное действительное число. - Если
и
суть конструктивные действительные числа,
и
, то
.
Ключевые термины
Абстрактная функция - однозначное отображение одно множества в другое.
Конструктивная функция - алгоритм сопоставляющий одному конструктивному действительному числу другое конструктивное действительное число.
Область определения функции - множество на, котором определена функция.
Краткие итоги: Реализован абстрактный класс на языке C#, реализующий функции. Разработаны классы, реализующие конкретные числовые функции и операции над ними.