двусторонняя связь между модулями при раздельной трансляции

есть: Ада

При однобокой связи (импорт-экспорт) модуль, экспортирующий имена, не находится в зависимости от импортирующих (клиентских) модулей. При двухсторонней связи оба модуля зависят друг от друга. В языке Ада двухсторонняя связь применяется при раздельной трансляции вложенных модулей.

Вложенный модуль обозначается «заглушкой» во наружном модуле:

procedure Outer is

–- заглушка

procedure Inner is separate двусторонняя связь между модулями при раздельной трансляции;

. . .

end Outer;

При трансляции вложенный модуль снабжается заголовком, связывающим его с объемлющим модулем:

separate(Outer)

procedure Inner is

. . .

end Inner;

Связь «заглушка-заголовок» - пример двухсторонней связи.

8. Исключительные ситуации и обработка ошибок

Понятие исключительной ситуации (ИС) и его эволюция. ИС и ошибки

в программках. Четыре нюанса рассмотрения ИС: определение,

появление, распространение и двусторонняя связь между модулями при раздельной трансляции обработка. Воплощение этих качеств в

современных ЯП.

8. Смоделируйте на языке Си++ функции void f() throw (E1,E2,E3) { g(); h(); } предполагая, что конструкция throw не допускается компилятором.

void f()

{

try {

g(); h();

} catch (E1){

throw;

} catch (E2){

throw;

} catch (E3){

throw;

} catch (...) {

unexpected();

}

}

Пример для языка Delphi:

if ptr = nil then

raise Exception двусторонняя связь между модулями при раздельной трансляции.Create('Invalid pointer');

Два подхода к обработке ИС: семантика возобновления и семантика

окончания. Их сопоставление. Семантика окончания и современные ЯП.

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

Пример языка: Visual Basic двусторонняя связь между модулями при раздельной трансляции.

Семантика окончания: после появления исключения блок, в каком оно появилось, непременно заканчивается. Обработка исключения происходит в блоках, вызвавших блок с исключением.

Пример языка: Си++.

В языке Си++ реализована другая семантика: окончания, но в неких случаях семантика возобновления может быть смоделирована, к примеру, в случае выделения возобновляемого ресурса (типа двусторонняя связь между модулями при раздельной трансляции динамической памяти):

Resource GetResource() {

for (;;)

try {

Resource r = … // попытка получить ресурс, к примеру

// выделить память

if (success) return r;

throw NoResourceException();

} catch (NoResourceException) {

// попытка отыскать дополнительные ресурсы (к примеру,

// динамически собрать мусор)

if (!success) throw;

}

}

Свертка стека. Оператор try-finally.

Дополнительные особенности ИС: спецификация ИС, проверяемые и

непроверяемые ИС.

9. Наследование типов двусторонняя связь между модулями при раздельной трансляции и классов

Концепция уникальности типов в обычных языках и строгая

типизация в объектно-ориентированных языках. Понятие единичного

наследования. Единичное наследование в современных ЯП. Наследование и

модель представления объекта в памяти. Преобразование из производного

типа в базисный. Иерархии типов, статические и динамические типы в

объектно-ориентированных ЯП.

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

С++: class Derived : [модификатор] Base {

// обьявление новых членов };

[модификатор] ::= {private, public, protected}

по дефлоту приватное двусторонняя связь между модулями при раздельной трансляции. В большинстве случаев приватное наследование употребляется в написании интерфейсов. Public – не меняет модификатор доступа параметров наследуемого

класса в производном, protected – делает все общественные характеристики наследуемого класса защищенными, а private – все характеристики наследуемого класса делаем закрытыми (модификатор доступа private).

С#: class Derived : Base {

//определение новых членов }

Java: class Derived extends Base {

// определение новых членов }

Java двусторонняя связь между модулями при раздельной трансляции употребляет слово extends для выражения единственного типа наследования, соответственного общественному наследованию в C++. Java не поддерживает множественное наследование. Классы Java тоже происходят от общего базисного класса.

Oberon, Object Pascal, Turbo Pascal:

TYPE Derived = RECORD (Base)

// определение новых членов

END;

Delphi:

TYPE Derived = class (Base)

// определение новых членов

END;

В этих языках при наследовании двусторонняя связь между модулями при раздельной трансляции употребляется не ключевое слово, а особый синтаксис - добавление в скобках имени базисного класса. Эти языки поддерживают только один тип наследования, который в C++ именуется общественным.

Ada: type Base is tagged record

// члены end;

Type Derived is new Base with record

// определение новых членов end;

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

Type Derived is new Base with null record;

package P is

type Base is tagged private;

………………………………………..

Кое-где в конце есть спецификация пакета:

private

type Base is tagged record

….............................................

end P;

Где будем наследовать Base?

Если в этом же пакете, то делаем это так:

type Derived is new Base двусторонняя связь между модулями при раздельной трансляции with private

..............................................................

Если это определение в том же модуле, то структура этого Derived должна быть описана в приватной части пакета.

Но если оба типа описываются в одном модуле, и у типа Base есть приватные члены, даже тогда относительно derived у него нет ничего приватного.

Защищенных членов в Ада и двусторонняя связь между модулями при раздельной трансляции Оберон нет, таким макаром, в этих языках всего два вида доступа:

1) общественный

2) приватный – его по сути тоже нет, потому что в Ада есть дочений пакет.

package P.P1

Это значит, что практически определяемое в нем вроде бы приписывается в конец приватной части в конце пакета.

Замечания:

1.В Java, C#, Delphi каждый класс двусторонняя связь между модулями при раздельной трансляции происходит по последней мере от некого базисного класса по дефлоту. Этот класс обладает некими основными возможностями, доступными всем классам. Этот подход является общим ещё и поэтому, что так сначало делалось в Smalltalk. Также хоть какой класс может стать первым в иерархии классов в таких языках, как Оберон, Ада – 95.

2.Единственный двусторонняя связь между модулями при раздельной трансляции язык, поддерживающий множественное наследование из языков, проходимых в курсе ООП – язык С++.

3. Единственный язык, поддерживающий модификацию прав доступа параметров базисного класса в производном – язык С++.

Наследование и области видимости имен. Замещение, перегрузка и

скрытие имен при наследовании. Наследование и инкапсуляция. Управление


dzhnyani-ne-hvataet-i-ne-uderzhivaet.html
dzhoan-rouling-sluchajnaya-vakansiya-kniga-znamenitogo-avtora-bestsellerov-o-garri-pottere-dokumentalno-chestna-i-bezzhalostna-istoriya-igrushechnogo-anglijskogo-gor-stranica-12.html
dzhoanna-kellogg-joan-kellogg.html