Учебные материалы по математике | Теорема об универсальной функции | Matematiku5
Вузы по математике Готовые работы по математике Как писать работы по математике Примеры решения задач по математике Решить задачу по математике online

Теорема об универсальной функции


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

Нужно отметить, что на каждый предикат подвешено действие, которое должно выполниться. Это называется охраняемой командой.

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

Триггер — «спусковой крючок»- процедура, отличающаяся от обычной функции тем, что это команда, которая срабатывает до наступления какого-нибудь события, в силу истинности какого-нибудь предиката постоянно проверяется (идея охраняемой команды).

Триггеры

Удаления Вставки

Идея:
Когда что-то вставляется, срабатывает некоторый предикат. Например, после вызывается команда проверки, каскадного удаления или какая-нибудь другая команда.

Генераторы и приёмники сообщений

Событие – это вызов метода. Обработка события заключается в кратном вызове процедур.

Сообщение – это передаваемые параметры.

Слушатель — приёмник – это вызываемый объект.

Говорящий — отправитель – это тот, кто вызывает.

Событийное программирование нужно:

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

— с другой стороны, для реализации – PTP (point to point)

Пример PTP:

1 слушатель – 1 говорящий

Это очень популярная схема в дискретной математике, конечных автоматах.

Замечание:

Нас интересует более общая схема. Отсюда возникают трудности.

broadcasting — вещание, радиовещание, телерадиовещание, трансляция, телевещание, эфир, широковещание

отправитель получатель 1

получатель n

Подразумевается схема «Подписка» – слушатели добровольно могут либо включаться в подписку, либо по желанию исключаться из неё.

Это означает, что у каждого из этих объектов есть однотипный метод, который нужно вызвать.

Тип функции (метода, процедуры):

Пример:

An — функция двух аргументов

Её тип: Z * R->R, где Z– целый аргумент

R – вещественный аргумент

R – вещественный результат

Это и есть общематематическое понятие типа функции.

В каком смысле типы однотипны?

В том смысле, что по типу параметров и возвращаемых значений совпадают. Это, безусловно, декартово произведение (т. е. функции от двух аргументов трактуются как пара).

Отсылка сообщений – это кратный (многократный) вызов

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

Реализация такова:

Существует список (обработка событий), который применяется к какому — то аргументу.

Message (трактуется как аргумент) — произвольный список параметров, который у всех одинаков.

<f1, f2, …>(message) -> f1(m), f2(m),…

Список применить к аргументам (отправка сообщения)- это

поочерёдное применение всех функций к аргументу (т. е. f1(n) … f2(n) , где n= сonst)

Таким образом, при вызове многих методов фактические параметры применяются к одному списку. Передача сообщения состоит в том, что эти методы поочерёдно применяются к этому списку параметров.

Вызов процедуры:

отправитель 1 получатель1

Вызов многих методов:

отправитель 1 получатель 1

получатель 2

получатель n

Замечание:

Применяются они к одному и тому же списку параметров => параметры должны быть однотипными.

Замечание:

Фактически, это просто вызов, который где-то стоит и где-то «стреляет» (вызывается несколько методов с одним и тем же списком параметров).

Вводится новое понятие:

Функциональный тип— указатель на функцию (метод, процедуру), которая привязана к объекту.

Событийный стиль в процедурном программировании — управление данными (на примере)

Пример (животные):

Задача: Описывается вызов движения блохи. Как только блоха начинает движение, все динозавры начинают кричать: «Ай-яй-яй». Нужно заметить, что явного вызова того, чтобы динозавры кричали, нет (но этот вызов где-то прошит). Событием здесь является то, что блоха движется, а динозавры кричат.

Замечание:

Блоха — отправитель сообщений, а TRex-ы – слушатели.

using System;

using System. Collections. Generic;

using System. Linq;

using System. Text;

namespace Animals

{

class cAnimal

{

.

.

.

}//class cAnimal

//класс "cDinosaur" наследник класса "сAnimal"

public class cDinosaur : cAnimal

{

.

.

.

} //class cDinosaur

class cTRex : cDinosaur

{

.

.

.

//обработка событий — слушатель (listener) события FleaJumpEvent

private cFlea FleaJumpSender; // Flea To Listen To- поле, в котором хранится ссылка на блоху, а FleaJumpSender-Отправитель

public void SetFleaJumpSender(cFlea x) // получает ссылку на эту блоху

{

FleaJumpSender = x; // запоминание источника события

//Итак, блоха нужна для того, чтобы получить лист (список слушателей), который при ней хранится.

FleaJumpSender. FleaJumpEventList += new cFlea. FleaJumpEventHandler(TRexFleaJumpEventHandler);// добавление в список ссылки на свой обработчик

// new — создаётся новая копия описанной переменной функционального типа. После новое значение этого типа добавляется в список.

// += — это бинарное присваивание (т. е. имя списка и в левой, и в правой частях присваивания)

// аналогично осуществляется отказ от подписки "-="

}

public void TRexFleaJumpEventHandler(cFlea Sender)

{

Console. WriteLine(GetName() + "afraid of" + Sender. GetName() + "jumping");

}

} // class cTRex

// класс "Flea" наследник класса "cAnimal"

class cFlea : cAnimal //производный класс "Блоха"

{

.

.

.

public override void Move() // описание метода "двигаться" для блох

{

Console. WriteLine(GetName() + "jumps");

OnFleaJump(); // кратный вызов

}

.

.

.

}

}

Событийное программирование в C# (delegate, event)

Delegate функциональный тип, к которому относятся любые функции, принимающие на вход параметр типа блоха (т. е. cFlea Sender) и возвращающие функции.

Таким образом, к этому типу относятся все функции с определённым списком параметров.

Event — событие- объявление переменной списка ссылок ранее объявленного типа

class cFlea

{

.

.

.

// обработка событий-источник/ sender(Отправитель)

// организация обработки события FleaJumpEvent

public delegate void FleaJumpEventHandler(cFlea Sender); // типизированая ссылка на функцию — обработчик — заголовок

//-объявление функционального типа с именем FleaJumpEventHandler — типизированная ссылка на функцию, но не на тип данных

EventHandler- пользовательское соглашение — обработчик событий,

FleaJump-прыжок блохи

public event FleaJumpEventHandler FleaJumpEventList; // связь имени события с его обработчиками (реализация — список ссылок на обработчики)

//список называется FleaJumpEventList, содержит он ссылки типа FleaJumpEventHandler

//кратный вызов — применение объявленного списка к нужному аргументу (обработчиков)

protected virtual void OnFleaJump() //protected, т. к. события не вызываются извне

//OnFleaJump — по прыжку блохи-стандартное соглашение для методов такого назначения

Наташа

Автор

Наташа — контент-маркетолог и блогер, но все это не мешает ей оставаться адекватным человеком. Верит во все цвета радуги и не верит в теорию всемирного заговора. Увлекается «нефрохиромантией» и тайно мечтает воссоздать дома Александрийскую библиотеку.

Распродажа дипломных

 Скидка 30% по промокоду Diplom2020