|
|||||||
АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
В модуле Network создаются экземпляры типа Socket, а не SocketStat. Чтобы создать экземпляр нового типа, нужно использовать паттерны (Factory Pattern)Если расширяющих модулей несколько и все они создают свои типы на основе типа Socket, то Factory Method не работает. Ассоциирование данных MODULE NetworkMonitor; Var SocketStatCollection: …; PROCEDURE Network Send+ (S, Data) BEGIN BASE(S, DATA); FindSocketStat(S).CurrentSpeed; Минусы: высокая трудоемкость (поддерживать ассоциацию при create и удалении первичных объектов). При уничтожении socket нужно уничтожить socketstat. => снижение надежности, уменьшение производительности, необходимость синхронизации – при доступе к таблицам поиска необходимо синхронизировать потоки; РЕШЕНИЕ: дополнение типов данных. MODULE NetworkMonitor; IMPORT Network; TYPE SocketStat = POINTER TO RECORD EXTENSION Network.Socket … END; PROCEDURE NetworkSend+ (…) BEGIN 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 м.б. только в конце процедуры, иначе м.б. нарушены принципы структурного программирования. Поиск по сайту: |
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.005 сек.) |