АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

В модуле Network создаются экземпляры типа Socket, а не SocketStat. Чтобы создать экземпляр нового типа, нужно использовать паттерны (Factory Pattern)

Читайте также:
  1. II. Вивчення нового матеріалу.
  2. IV. Вивчення нового матеріалу
  3. The pulmonary alveoli _____ networks of extremely small vessels.
  4. VII. Причины возникновения ошибок при передаче текста Нового Завета
  5. Welcome To The Human Network / Добро пожаловать в человеческую сеть
  6. Альтернативная теория: «АСТ» нужно «Эксмо» для наращивания стоимости»
  7. Аналіз майнового стану підприємства ВАТ «Іванківського хлібозаводу»,
  8. Б) повышение процентных ставок с тем, чтобы сделать кредиты более привлекательными для владельцев наличных денег,
  9. Битники и политики, ничего нового
  10. Блок 3. ГЕОГРАФІЯ НОВОГО ЧАСУ. СУЧАСНІ ГЕОГРАФІЧНІ ДОСЛІДЖЕННЯ
  11. В каких случаях охраннику дозволяется не предупреждать о намерении использовать специальные средства и огнестрельное оружие?

Если расширяющих модулей несколько и все они создают свои типы на основе типа Socket, то Factory Method не работает.

Ассоциирование данных

MODULE NetworkMonitor;

Var SocketStatCollection: …;

PROCEDURE Network Send+ (S, Data)

BEGIN

BASE(S, DATA);

FindSocketStat(S).CurrentSpeed;
END;

Минусы: высокая трудоемкость (поддерживать ассоциацию при create и удалении первичных объектов). При уничтожении socket нужно уничтожить socketstat. => снижение надежности, уменьшение производительности, необходимость синхронизации – при доступе к таблицам поиска необходимо синхронизировать потоки;

РЕШЕНИЕ: дополнение типов данных.

MODULE NetworkMonitor;

IMPORT Network;

TYPE

SocketStat = POINTER TO RECORD EXTENSION Network.Socket

END;

PROCEDURE NetworkSend+ (…)

BEGIN
BASE(S,Data);

S[SocketStat].CurrentSpeed;

END;

Реализация: 1) дополнение расширяет все экземпляры определенного типа данных;

2) память под дополнение выделяются на летупри первом обращении к объекту;

3) дополнения можно использовать только для данных, которые находятся в динамической памяти;

4) ортогональны «наследованию», могут создаваться в любом количестве и для любого типа данных в иерархии;

Эти методы позволяют:

1) упростить создание, сопровождение и развитие расширяемых систем;

2) повысить надежность;

3) повысить производительность;

Обеспечить статическую и динамическую верификацию правил расширения системы.

АОП – принципы программирования. АОП зависит от ООП.

Oberon

Oberon: разрабатывался для создания маленьких систем управления, ОС. Oberon System для Lilith PC.

Понятие объекта не вводится, но свой язык Вирт называет ООП-языком.

Главное свойство – свойство расширяемости (наследование типов, но виртуальные методы отсутствуют. Есть записи и их наследование.)

Boolean, char, integer, real, longint, set (0..31)

ArrayType = ARRAY length(“,” length) of type – нужно явно указывать длину массива, динамических массивов нет. Нумерация массивов с 0.

RecordType = RECORD [“(BaseType)”] [Fields] end;

PointerType = POINTER to type; Только для записей и массивов. Нельзя преобразовать указатель в число, но есть функция addr, возвращающая int. Число нельзя интерпретировать как указатель.

Система Oberon имеет сборщик мусора.

Процедурная переменная – указатель на функцию.

ProcedureType = PROCEDURE[formal parameters].

“=” | “#” (не равно) | “<” | “<=” | “>” | “>=” | “IN” | “IS”

“+” “-” “OR”

“*” “/” “DIV” “MOD” “&”

If (ch>=”A”) then

elsif (ch>=”0”) then

elsif (ch=22x) then ReadStr.

End.

CASE k of

0:

|1:

|2:

End.

Компилятор оптимизирует, делая goto по таблице, где индексы – ключ k.

Oberon минималистичен – из него нельзя ничего выбросить.

WHILE j>0 DO

j:=j DIV 2;

i:=i+1;

END;

While m>n DO m:=m – n

Elsif n>m DO n:=n-m

REPEAT

UNTIL expression (условие выхода из цикла)

For v:=beg to en BY inc do s end

Beg, en вычисляются только 1 раз.

RETURN м.б. только в конце процедуры, иначе м.б. нарушены принципы структурного программирования.


1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 |

Поиск по сайту:



Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.009 сек.)