И.Г. Головин - Варианты письменного экзамена (Методическое пособие), страница 3
Описание файла
PDF-файл из архива "И.Г. Головин - Варианты письменного экзамена (Методическое пособие)", который расположен в категории "". Всё это находится в предмете "языки программирования" из 7 семестр, которые можно найти в файловом архиве МГУ им. Ломоносова. Не смотря на прямую связь этого архива с МГУ им. Ломоносова, его также можно найти и в других разделах. .
Просмотр PDF-файла онлайн
Текст 3 страницы из PDF
Обработка исключенияпроисходит в блоках, вызвавших блок с исключением.Пример языка: Си++.6. В языке Ада 83 подпрограммы не могут быть параметрамиподпрограмм (еще пример: Java).7. Классы памяти:• статическая;• квазистатическая;• динамическая.В языке C# объекты классов размещаются только в динамическойпамяти.8. Один из вариантов:template <typename T, int size> class Stack{public:Stack() {top = 0;}void Push(T x);T Pop(T& x);bool IsEmpty();bool IsFull();private:Stack (const Stack& s);T body[N];int top;};183.2.
Вариант 20041.X::fX::gX::gY::fY::gY::f-----------------------------Y::fX::gZ::fY::gZ::f2.Ада 95, Си++, Оберон-2, Java, Delphi, C#.3. Полностью эквивалентный фрагмент написать нельзя, поскольку Адатребует полной инкапсуляции структуры типа, а Оберон позволяет открыватьполя структуры (в примере - I открыто, а J – закрыто). Однако можно на Аденаписать написать подпрограммы доступа для I (get/set) и добиться того жеэффекта.type T is tagged private;type T1 is new tagged T with private;procedure P(X:T; L: integer);procedure P(X:T1; L: integer);Замечание: на языке Оберон процедуры P динамически привязаны ктипу (T и T1 соответственно), однако на Аде динамическая привязка — этосвойство не метода, а вызова.
Поэтому разницы между динамически истатическими привязанными методами в Аде нет.4.Ада, Delphi, C#Язык C#:try {// блок try...} finally {// блок finally...}19Блок finally обязательно выполнится после завершения блока tryнезависимо от того, нормально или аварийно (с возбуждением исключения)произойдет это завершение.5. Класс S имеет два конструктора:–явно описанный explicit S(int);–сгенерированный конструктор копирования S(const S&);Замечание: конструктор умолчания не генерируется, так как в классеесть явно описанный конструктор.6. Конструкция package имеет вид:package имя_пакета;Она может быть только первой в единице компиляции.
Смысл состоитв том, что класс, описанный в единице компиляции, относится к указанномупакету. Пакет является единицей дистрибуции Java-классов, а такжеединицей контекста.7. Тип, имя которого экспортируется, но все поля — закрыты (неэкспортируются).TYPE OpaqueT* = RECORD I:TT; J: TTT END;8.void f(){try {}}}}g(); h();catch (E1){throw;catch (E2){throw;catch (E3){throw;catch (...) {unexpected();}}3.3.
Вариант 20051.A::fA::gA::gB::fB::g20B::f-----------------------------B::fA::gC::fB::gC::f2. Семантика возобновления: после обработки исключения управлениеможет вернуться непосредственно в точку, где возникло исключение(варианты: на следующий оператор или на любой оператор из того же блока).В языке Си++ реализована другая семантика: завершения, но в некоторыхслучаях семантика возобновления может быть смоделирована, например, вслучае выделения возобновляемого ресурса (типа динамической памяти):Resource GetResource() {for (;;)try {Resource r = … // попытка получить ресурс, например// выделить памятьif (success) return r;throw NoResourceException();} catch (NoResourceException) {// попытка найти дополнительные ресурсы (например,// динамически собрать мусор)if (!success) throw;}}3.
Язык Ада (реализация в виде двунаправленного списка):generictype T is private;package G_Deque istype Deque is limited private;procedure PushRight(Deq: inout Deque; X:T);procedure PushLeft(Deq: inout Deque; X:T);procedure PopRight(Deq: inout Deque; X: out T);procedure PopLeft(Deq: inout Deque; X: out T);procedure Init(Deq: out Deque);procedure Destroy(Deq: inout Deque);function IsFull(Deq: Deque);function IsEmpty(Deq: Deque);–- другие процедуры ...privatetype PLink is access;type Link is record inf : T; next, prev : PLink; end record;type PLink is access Link;type Deque is record Left, Right: PLink; end record;end G_Deque;21Язык Java;interface IDeque<T>{void PushLeft(T x);void PushRight(T x);T PopLeft();T PopRight();bool IsFull();bool IsEmpty();// другие функции}Замечания:а).
Обобщенные конструкции употреблять не обязательно (надо тольконаписать, что тип Т должен быть непосредственно видимым в точкеописания типа Deque). Хотя обобщения здесь подходят больше.б). Структуру типа в Аде полностью выписывать необязательно.Главное — указать наличие приватной части, например:private...type Deque is …; –- структура типа Dequeend G_Deque;в). Для языка Java можно выписать не инетерфейс, а конкретный классс приватной структурой и публичными функциями-операциями.
Телафункций в этом случае можно не выписывать. Но интерфейс в данном случаебольше подходит к понятию абстрактного типа данных.4. Языки;Ада 95, Си++, Java, Delphi, C#Например, в языке Си++ абстрактная функция — это чистаявиртуальная функция. Она не обязана иметь тела и должна быть обязательнозамещена в каком-либо производном классе.5. Ключевое слово super означает в языке Java ссылку на базовыйкласс. Такое же понятие есть в языке C#, но оно называется base.Пример на Java:class A{public A(int I) { … }...}class B extends A{public B() { super(0); … }...}22Пример на C#:class A{public A(int I) { … }...}class B : A{public B() : base(0) { … }...}6.Delphi, C#«Свойство» - это член класса, который с точки зрения обращения кнему выглядит как член-данное, но с точки зрения реализации представлендвумя методами, один из которых возвращает значение свойства, а второй —устанавливает его значение.
При этом один из методов может отсутствовать,делая недоступной соответствующую операцию над свойством.Пример для языка Delphi – целое свойство Prop:type PropSample = class…privateprocedure SetPropVal(V : integer);function GetPropVal:integer;publicproperty Prop: integer read SetPropVal write GetPropVal;…end;7. Ада 83, Ада 95, Си++, Java, Delphi, C#Понятие «перегрузка» означает, что одному имени в одной областивидимости может соответствовать несколько определений. В современныхязыках программирования перегружаться могут только имена подпрограмм,но не типов, переменных, модулей.8.
Основное отличие деструктора языка C# от деструктора Си++состоит в том, что неизвестен момент его вызова. Деструктор (вдействительности — финализатор) вызывается сборщиком мусора в моментутилизации памяти, занимаемой объектом. Для ряда объектов деструкторвообще может быть не вызван. В Си++ момент вызова деструкторадостаточно точно определен.233.4. Вариант 20061.
Ада, Модула-2, ПаскальОбъединение типов (или запись с вариантами) — это конструкция,объединяющая в один тип несколько различных структур (вариантов). Всеварианты в объединении начинаются с одного адрес и занимают одну и ту жепамять.Размеченное объединение типов содержит одно выделенное поле(дискретного типа данных) — общее для всех вариантов. Такое поленазывается дискриминантом. Значение дискриминанта определяетопределяет, по какому варианту выделена память в переменной-экземпляреразмеченного объединения.2.
Указатели языка Ада 83 ссылаются только на объекты издинамической памяти. Указатель языка Си++ может ссылаться на любойобъект данных (динамический, локальный, статический), что можетприводить к труднообнаружимым ошибкам.Также в языке Ада отсутствует адресная арифметика (арифметическиеоперации над указателями), что также уменьшает вероятность появленияошибки работы с памятью.3. Си, Си++Раздельная трансляция означает то, что программа разбивается начасти — физические модули или единицы компиляции. Каждая единицаможет или обязана транслироваться отдельно от остальных.Независимая раздельная трансляция означает то, что транслятор необладает информацией об уже оттранслированных единицах и поэтому неможет проверить корректность межмодульных связей.4.
Конструкция where используется в языке C# для определенияограничений на параметры родовых (другое название - обобщенных)конструкций.Ее вид: where имя_типа : список_ограничений.Виды ограничений:–интерфейс — означает, что параметр-тип должен реализовыватьэтот интерфейс;–имя класса (может быть только одно такое ограничение в списке)— означает, что параметр-тип должен быть наследником этого класса;–struct или class – означает, что параметр-тип должен бытьструктурой или классом;–new() - означает, что параметр-тип должен иметь конструкторумолчания (без параметров).245.11212331122222222336.
Си++, Ада 83, Ада 95, Visual Basic, C#, DelphiПример для языка Delphi:if ptr = nil thenraise Exception.Create('Invalid pointer');7. Конкретизация на языке Си++:Matrix<float> b,c;…Matrix<float> a = MatMult(b,c);Язык Ада:generictype T is private;with function “+”(x,y:T) return T (<>);with function “*”(x,y:T) return T (<>);type Matrix is private;function G_MatMult(A,B: Matrix) return Matrix;8. Объекты классов языка Си++ могут быть размещены в статической,квазистатической, динамической памяти.3.5.
Вариант 20071. Семантика возобновления при обработке исключений состоит в том,что после обработки исключения управление может вернутьсянепосредственно в точку, где возникло исключение (варианты: наследующий оператор или на любой оператор из того же блока, где возниклоисключение).В перечисленных в условии языках используется другая семантика:завершения, либо вообще отсутствует понятие реакции на исключение.2. Явная реализация интерфейса означает, что вызов методаинтерфейса может происходить только через ссылку на интерфейс, но не25может происходить через ссылку на класс, реализующий интерфейс. Передвызовом интерфейсного метода необходимо явно преобразовать ссылку наобъект реализующего класса к ссылке на интерфейс. Концепция явнойреализации полезна, например, при конфликте имен между унаследованнымиинтерфейсами.
Используется, например, в С#.interface ISomeInterface{void F();}class CoClass: ISomeInterface{ISomeInterface.F() {System.Console.WriteLine(“Явно реализованный метод”);}...}...CoClass c = new CoClass();c.F(); // ошибка: нельзя вызывать явно реализованный метод// интерфейса через ссылку на объект(ISomeInterface)c.F(); // все нормально3. В языке Java используется 2 формы оператора цикла for.Первая форма полностью соответствует оператору for языка Си++:for (e1;e2;e3) SВторая форма появилась в 2005 году и используется для поэлементногопросмотра коллекций (цикл for-each).