лекции (2007), страница 7

2019-09-19СтудИзба

Описание файла

Документ из архива "лекции (2007)", который расположен в категории "". Всё это находится в предмете "языки программирования" из 7 семестр, которые можно найти в файловом архиве МГУ им. Ломоносова. Не смотря на прямую связь этого архива с МГУ им. Ломоносова, его также можно найти и в других разделах. .

Онлайн просмотр документа "лекции (2007)"

Текст 7 страницы из документа "лекции (2007)"

Раб: Сообщение;

Готов: Разбор;

begin

loop

accept Принять (X: Сообщение) do

Раб:=X;

end Принять;

…….

Буфер.Положить(Готов);

end loop;

end;

task body Синтез is

Раб: Разбор;

Готов: Ответ;

………………………… //аналогично Анализ

task body Буфер is

begin

loop

select

when not Полон =>

accept Положить (X: Разбор) do В_Буфер();

end;

or

when Полон

or else

(not Пуст and then Положить Count=0)

accept Взять (X: out Разбор) do Из_Буфера();

end;

terminate();

end select;

end loop;

end Буфер;

loop

select

accept Считать_Значение (T: in Температура)

do Текущая_Т:=T;

end;

or

delay 0.1;

raise Сломался_Градусник;

end select;

end loop;

loop

select

accept Выдать_Значение (X: out Температура) do X:=Текущая_Т;

end;

else

……..

end select;

end loop;

loop

select

card React(…);

Обработать_Карту();

exit;

else

Локальные_Вычисления;

end select;

end loop;

select

Архив.Записать(X);

or

delay 5.0;

PutLine(«Занято!»);

end select;

Ревизия языка – 1995 г.

select

delay 5.0;

Put_Line(“Too Long!”);

then abort

Horrible_Complicated_Func(X,Y);

end select;

loop

select

Terminal.Wait_For_Interrupt;

Put_Line(“Interrupted!”);

then abort

Put_Line(“->”);

Get_Line(Command_Last);

Process_Command(Command(1..Last));

end select;

end loop;

Защищённые записи

protected T is


private


end

protected body T is


end

protected Variable is

function Read return Item

procedure Write (New_Value: Item);

private

Data: Item;

end Variable;

protected body Variable is

function Read return Item is

begin

return Data;

end Read;

procedure Write(New_Value: Item) is

begin

Data:=New_Item;

end Write;

end Variable;

X:=Variable.Read;

Variable.Write(Y);

protected Buffer is

entry Put(X: in Item);

entry Get(X: out Item);

private

A: Item_Array(1..Max);

I, J: Integer range 1..Max:=1;

count: Integer range 0..Max:=0;

end Buffer;

protected body Buffer is

entry Put(X: in Item) when Count<Max is

begin

A(I):=X; I:=I mod Max+1;

Count:=Count+1;

End Put;

entry Get(X: out Item) when Count>0 is

begin

X:=A(J); J:=J mod Max+1;

Count:=Count-1;

end Get;

end Buffer;

protected type Counting_Semaphore (Start_Count: In)

entry Secure;

procedure Release;

function Count return Integer;

private

Current_Count: Integer:=Start_Count;

end;

protected body Counting_Semaphore is

entry Secure when Current_Count>0 is

begin

Current_Count:=Current_Count-1;

end Secure;

procedure Release is

begin

Current_Count:=Current_Count+1;

end Release;

function Count return Integer is

begin

return Current_Count;

end;

end;

protected Event is

entry Wait;

procedure Signal;

private

occurred: Boolean:=False;

end;

protected body Event is

entry Wait is when Occurred is

begin

Occurred:=False;

end Wait;

procedure Signal is

begin

Occurred:=True;

end Signal;

end Event;

protected Event1 is

entry Wait;

entry Signal;

private

entry Reset;

Occurred: Boolean:=False;

end Event1;

protected body Event1 is

entry Wait when Occurred is

begin

null;

end Wait;

entry Signal when True is

begin

if Wait’Count>0 then

Occurred:=True;

requeue Reset;

end if;

end Signal;

entry Reset when Wait’Count=0 is

begin

Occurred:=False;

end Reset;

end Event1;

protected Event2 is

entry Wait;

entry Signal;

end Event3;

protected body Event3 is

entry Wait when Signal’Count>0 is

begin

null;

end Wait;

entry Signal when Wait’Count=0 is

begin

null;

end Signal;

end Event2;

Глава 3. Операторный базис

Оператор присваивания: v:=e

Операторы управления:

- ветвления

- циклы

- переходы

- «специальные»

Алгол60:

if B then S1 else S2

if B then S1

if B1 then if B2 then S1 else S2

б лок = составной оператор

Модула2, Оберон, Оберон2, Ada – языки с явным терминатором

Модула2:

IF B THEN IF B1 THEN

S1;…; PR1;

ELSE ELSIF B2 THEN

S1’;S2’;…; PR2;

END ELSIF B3 THEN

PR3;

ELSE

PR4;

END

CASE E OF

V1: S1; S2;…|

V2..V3,V4,V5..V6:…|

ENSE SN;…

END

Циклы

while B do S while(B)S

repeat do {S} while(B)

S1;…;Sn; ~ ~

until B; for(e1;e2;e3) S

for i:=e1 to e2

do S;

goto

Языки без goto: Модула2, Оберон, Оберон2, Java

Модула2:

LOOP

операторы

END

EXIT

LOOP

IF B THEN EXIT

END

Ada: goto <<M>>;

loop

….. exit

end loop;

while B loop loop

… …

end loop; while B

end loop;

for V in Range loop … end loop;

причем V описывать необязательно

Perl: появился foreach, чтобы просматривать элементы ассоц. массива

foreach(K in A) {…}

C#

Java foreach(T 0 in C) S

foreach(int X in a) {…}

Глава 4. Подпрограммы

1954 – Фортран

Ф-ция – абстракция операции вычисления

Процедура – группировка операторов

Первый вариант Ады:

- процедуры

- функции

- процедура, возвр. значение

procedure P return Integer is

end P;

а) Передача Управления

б) Передача Данных

в) Подпрограммный ТД

4.1 Подпрограммы и сопрограммы

CALLER-CALLEE

CALL

CALL RETURN


PL/1:

SUBPROGRAM P(*,*)

  • ENTRY P1

  • E NTRY P2

RETURN(1)

SUBROUTINE COR1 COR2

C OROUTINE


Первые сопрограммы – 1963

Модула2:

TRANSFER(P1,P2);

PROCEDURE TRANSFER(VAR P1,P2: ADDRESS);

yield

yield return exp;

yield break;

T []a;

a=new T[1000];

Get ENUMERATOR:

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

{ yield return a[i];}

yield break;

4.2 Передача данных

Способы передачи:

in 1) по значению

форм. переменнаялок. переменная

до передачи управления П(факт)=>П(форм)

out 2) по результату

--||--

при возврате П(факт)<=П(форм)

inout 3) по значению/результату

до вызова: П(факт)=>П(форм)

перед возвратом П(факт)<=П(форм)

in 4) по адресу/ссылке

out адрес форм. пар  ЛП

inout 5) по имени (Алгол-60)

procedure Swap(a,b: T)

var tmp: T;

begin tmp:=a; a:=b; b:=tmp;

end

В Алголе-60 эта программа не сработает, т.к. передача либо по значению, либо по имени: swap(i,a[i]); swap(a[i],i);

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

но эти случаи строго оговорены. Передача по значению лучше, так как не надо заботиться о семантике ссылки. Есть тип value types - базовые классы и структуры – передаются по значению, все остальные по ссылке.

В C++ все стандартно по значению, либо по ссылке с явным указанием.

void f(ref T x){

x=new T();

}

a=new T();

f(ref a)

C#, Java: «простые» объекты передаются по значению, сложные – по ссылке

C#: ref  inout-параметр

out  out-параметр

Классы-обёртки и механизм упаковки-распаковки (в чистом ООП все должно быть объектно)

Java: int -> Integer

bool -> Boolean (для каждого простого типа данных существуют соответствующие классы-обертки)

C#: CLR

int int32

unsigned int - uint32

Эти классы удобны тем, что многие методы являются статическими методами классов обёрток.

В C# и Java есть класс данных Object, из которого порождаются остальные. Есть неявный механизм преобразования, из простого типа данных можно получить объект, а из объекта - тип данных.

Если в языке нет неявных преобразований, то

class X{

X(T x){...}

}

Для классов оберток существует специальный конструктор:

integer i

i=new Integer(b);

Это не есть механизм упаковки-распаковки. Этот алгоритм включается только тогда, когда это можно делать неявно.

i=b - автораспаковка и упаковка. В Java доступно с 2005 года.

Здесь i содержит не значение b, а ссылку на него.

Параметры по умолчанию: отсутствуют в Модуле2, Обероне, Обероне2, Java, C#

Переменное число параметров: в C/C++, например, int printf (const char *put, …)

4.3 Подпрограммные типы

а) Ada83, Java, ст. Паскаль – подпрограммные типы отсутствуют

б) Модула2, Оберон, C/C++, Delphi – «классический» п/п тип

Модула2:

TYPE SUBT: PROCEDURE(VAR: INTEGER);

PROCEDURE P(VAR X:INTEGER);

A: SUBT A:=P;

A(X);

Type SUBT is access procedure (inout: integer);

procedure P(x: inout integer) is…;

X: SUBT; Y: integer; X=P’access;

Делегаты

delegate void f(int);

+= f mydel;

-=

() void g(int i) {…}

new mydel=new f(g)

+=

-=

mydel(i)

Глава 5. Определение новых типов

ТД= мн-во опр-й + мн-во зн-й

(подпрогр-мы) (стр. данных)

  1. Логический модуль

Ada, Модула2, Оберон

  1. Класс

C#, C++, Java, Delphi

Модула2, Оберон, Delphi

- Главный модуль DEFINITION MODULE

- Библиотечные модули END M

- Локальные модули IMPLEMENTATION MODULE

………….

END M

DM: - объявление ТД (структуры)

- прототипы (заголовок подпр-ммы) операций

IM: - тела операций

D unit – unit M;

interface

implementation

end

Принцип РОРИ (Разделения Определения Реализации Использования)

M: .DEF => .SYM

.MOD => .OBJ

DEFINITION MODULE stacks;

CONST S_SIZE=128;

TYPE STACK=RECORD

B: ARRAY[0..S_SIZE] of INTEGER;

TOP: INTEGER;

END;

PROCEDURE PUSH(VAR S:STACK, X:INTEGER);

PROCEDURE POP(VAR S:STACK):INTEGER;

VAR DONE: BOOLEAN;

END stacks;

IMPLEMENTATION MODULE Stacks;

{IMPORT}

опр-е подпрограмм и функций (тела)

BEGIN

операторы;

Свежие статьи
Популярно сейчас
Как Вы думаете, сколько людей до Вас делали точно такое же задание? 99% студентов выполняют точно такие же задания, как и их предшественники год назад. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
5301
Авторов
на СтудИзбе
416
Средний доход
с одного платного файла
Обучение Подробнее