И.Г. Головин - Варианты письменного экзамена (1129118), страница 4
Текст из файла (страница 4)
Си++, Ада 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).
Она имеет вид;for (T v:Coll)SЗдесь Coll — коллекция элементов (типа T или приводимых к типу T).Переменная v на каждой итерации цикла принимает значение очередногоэлемента коллекции.Для того, чтобы объекты класса-коллекции могли появляться в циклеfor-each, класс должен реализовать интерфейс Iterable.4. При вызове сопрограммы управление передается в точку,непосредственно следующую за местом, где оно покинуло сопрограмму.
Вподпрограммах управление всегда начинается с первого оператора, и это независит от того, в какой точке управление покинуло подпрограмму впрошлый раз.5.112221222133266. Оберон, Оберон-2Перечислимый тип в C# имеет вид:enum T : базовый_целый_тип {список_констант}илиenum T {список_констант}По умолчанию базовый_целый_тип — это int.Каждая константа в списке может быть инициализирована своимзначением (как в Си++). К перечислениям нельзя применять арифметическиеи побитовые операции, но если перед перечислением стоит атрибут [Flags],то к элементам перечисления применимы побитовые операции | и &.Константы из перечислимого типа видимы только потенциально и приобращении должны уточняться именем типа: тип.имя_константы.Пример:enum Color : long{Red,Green = 50,Blue}Color c = Color.Red;7.generictype T is private;Size : integer;package G_Queue istype Queue is limited private;procedure Enqueue(Q: inout Queue; X:T);procedure Dequeue(Q: inout Queue; X:T);procedure Init(Q: out Queue);procedure Destroy(Q: inout Queue);function IsFull(Q: Queue);function IsEmpty(Q: Queue);–- другие процедуры ...privatetype Queue is recordLeft, Right: integer;body : array(1..Size) of T;end record;end G_Queue;278.
АдаПри односторонней связи (импорт-экспорт) модуль, экспортирующийимена, не зависитот импортирующих (клиентских) модулей. Придвусторонней связи оба модуля зависят друг от друга. В языке Ададвусторонняя связь используется при раздельной трансляции вложенныхмодулей.Вложенный модуль обозначается «заглушкой» во внешнем модуле:procedure Outer is–- заглушкаprocedure Inner is separate;. . .end Outer;При трансляции вложенный модульсвязывающим его с объемлющим модулем:снабжаетсязаголовком,separate(Outer)procedure Inner is.
. .end Inner;Связь «заглушка-заголовок» - пример двусторонней связи.3.6. Вариант 20081. Ключевое слово sealed может стоять перед виртуальным методомили классом. В первом случае оно означает, что метод нельзя замещать впроизводных классах, во втором — что класс нельзя наследовать. Изперечисленных в условии языков аналогичное понятие есть в языке Java(final).2.Вложенность модулей означает, что определение одного модуля(внутреннего) находится внутри другого (внешнего).
Из перечисленных вусловии языков вложенные библиотечные модули могут быть только в языкеАда (как 83, так и 95). В Обероне и Delphi вложенными могут быть толькоподпрограммы (которые не являются библиотечными модулями).3. Язык Модула-2.DEFINITION MODULE HashTables;FROM Types IMPORT KeyType, ElementType;TYPE HashTable;PROCEDURE Init(VAR T:HashTable);PROCEDURE Destroy(VAR T:HashTable);28PROCEDURE Lookup(VAR T:HashTable;Key: KeyType; VAR X:ElementType):BOOLEAN;PROCEDURE Add(VAR T:HashTable; Key: KeyType; X:ElementType);PROCDURE Remove(VAR T:HashTable; Key: KeyType):BOOLEAN;VAR Done: BOOLEAN;END HashTables.Язык Java:interface IHashTable : Iterable{ElementType Lookup(KeyType Key);void Add(KeyType Key, ElementType El);bool Remove(KeyType Key);}4. Ада 95, Java, Delphi, Оберон-2, Cи++, С#Виртуальность метода означает динамическое связывание метода привызове метода через ссылку на объект (базового) класса.
Будет вызван методдля объекта, на который в настоящее время указывает ссылка. Этот объектможет относиться не к базовому, а к производному классу. если впроизводном классе метод замещен, то будет вызван не метод из базовогокласса (как в случае невиртуальных методов), а его заместитель .5. Абстрактный тип данных (АТД) — это тип с полностьюинкапсулированной структурой. Использовать объекты АТД возможнотолько при помощи явно определенных в интерфейсе типа операций.Абстрактный класс (АК) — это класс, содержащий хотя бы одинабстрактный метод.Прямой связи между АК и АТД нет. АТД может быть абстрактнымклассом, а может и не быть.
Аналогично, АК может иметьинкапсулированную структуру, а может и не иметь.Пример АТД можно найти в ответе на задачу 3 этого варианта. ПримерАК (язык Java):interface IDrawable{void Paint();}abstract class UIControl : IDrawable{... // нет реализации метода Paint()}class EditControl: UIControl{public void Paint() { ... // реализация метода Paint()}. . .}296. Ада 83, Ада 95,Си++, Java, Delphi, C#Понятие «перегрузка» означает, что одному имени в одной областивидимости может соответствовать несколько определений.
В современныхязыках программирования перегружаться могут только имена подпрограмм,но не типов, переменных, модулей. Пример на языке Си++:class X {public:void f();void f (int)};X a;a.f(); // первая функцияa.f(0); // вторая функцияОтличие перегрузки от замещения состоит во-первых, в том, чтоперегрузка обрабатывается статически (на этапе трансляции), в во-вторых,при замещении речь идет о разных областях видимости: базовый класс собъявлением виртуального метода (объемлющая область видимости) ипроизводный класс с замещающим методом (вложенная область видимости).7.
Структура в языке C# является типом-значением. Имена структур неявляются ссылками (как имена объектов-классов), а обозначаютнепосредственно объект.Структуры не могут наследоваться, не могут быть наследовать сами(только по умолчанию от класса Object).
Также структуры не могут иметьявный конструктор умолчания.8. Ключевое слово override означает, что метод, в объявлении которогооно появляется, является заместителем виртуального метода из базовогокласса.В языке Java такая конструкция отсутствует, поскольку все методыимеют динамическое связывание, поэтому любой метод, имя и сигнатуракоторого совпадают с методом их базового класса, является егозаместителем.30Список литературыОсновная литература1. Кауфман В.Ш. Языки программирования: концепции и принципы. –М.: Радио и связь, 1993.2.
Бен-Ари М. Языки программирования. Практический сравнительныйанализ. – М.: Мир, 2000.3. Пратт Т., Зелковиц М. Языки программирования: разработка иреализация. – СПб.: Питер, 2002.4. Себеста Р.У. Основные концепции языков программирования. – М.:Издательский дом «Вильямс», 2001.Дополнительная литература1. Страуструп Б.
Дизайн и эволюция Си++. – М.: ДМК Пресс, 2000.2. Страуструп Б. Язык программирования Си++. – М., СПб. :«Издательство БИНОМ» - «Невский Диалект», 2001.3. Вандевурд Д., Джосаттис Н.М. Шаблоны Си++, справочникразработчика. - М.: Издательский дом «Вильямс», 2003.4. Арнолд К., Гослинг Д. Холмс Д. Язык программирования Java. - М.:Издательский дом «Вильямс», 2001.5. Вирт Н. Программирование на языке Модула-2.
– М.: Мир, 1987.6. Джехани Н. Язык Ада. – М.: Мир, 1988.7. Шилдт Г. С# 2.0. Полное руководство. – М.: ЭКОМ Паблишерс, 2007.31СодержаниеI. Программа курса «Языки программирования».................................................31. Введение...........................................................................................................32. Базисные типы данных в языках программирования: простые исоставные типы данных, операции над ними...................................................33.