Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Экзамен в гаи redacted.doc
Скачиваний:
5
Добавлен:
27.09.2019
Размер:
676.35 Кб
Скачать

3. Какой метод выберет компилятор?

class A { public void Test(int n) { Console.WriteLine("A"); } }

class B : A { public void Test(double n) { Console.WriteLine("B"); } }

static void Main(string[] args)

{

B b = new B();

b.Test(5);

}

Ответ: В. Приоритет отдается методу класса, по типу ссылки, если в нем определен метод с типами аргументов позволяющих выполнить преобразование без потерь.

Экзаменационный билет №17

1. Интерфейсы

В терминологии программирования интерфейс похож на класс, за исключением того, что ни один из его членов не реализован. Интерфейс группирует методы, свойства, события и индексаторы. Для него нельзя создать экземпляр: все что он содержит, - сигнатуры своих членов, причем таковыми могут быть только указанные четыре типа членов.

Интерфейс не имеет конструкторов и полей. Интерфейс не может иметь перегруженных операций.

Интерфейс объявляется практически также как класс, за исключением того, что его члены не имеют реализации (наподобие абстрактных методов). Отсутствие реализации и модификаторов доступа.

Пример реализации интерфейса:

interface IEnumerator { // свойства object Current { get; } // методы bool MoveNext(); void Reset(); } ... public class myClass : IEnumerator, IConvertible {

...

Интерфейс IEnumerator важен для реализации коллекций и разработан для инкапсуляции функций перемещения по элементам коллекций (System.Collections) и разработан для инкапсуляции функций перемещения по элементам коллекции.

Класс реализует интерфейс, наследуя его обеспечивая реализации всех членов, объявленных в этом интерфейсе. Класс может наследовать любое количество интерфейсов.

Убедиться в том, что класс реализует интерфейс можно с помощью ссылки на этот интерфейс.

IMyEnumerator my = new myClass(); my.MoveNext();

Интерфейсы могут наследоваться друг от друга точно также, как и классы.

interface IMyEnumerator : IDisposable

***

Интерфейс (interface) — это коллекция общедоступных методов и свойств, которые объединяются вместе для инкапсуляции конкретной функциональности. После опреде­ления интерфейса его можно реализовать в классе. Это означает, что в таком случае класс будет поддерживать все свойства и члены, специфицируемые данным интерфейсом.

Важно обратить внимание на то, что интерфейсы не могут существовать сами по себе. Создавать "экземпляр" интерфейса, как это можно делать с классом, нель­зя. Помимо этого, интерфейсы не могут содержать никакого кода, реализующего их члены, они могут лишь определять их, а реализоваться те должны непосредственно в классах, которые реализуют данный интерфейс.

2.Параллельные и Взаимосвязанные Вычисления (ccr). Где используется ccr?

Среда, в которой выполняется приложение в Microsoft Robotics Studio, носит название Runtime Environment. В основе Runtime лежит CLR 2.0, что дает возможность писать приложения, используя любые языки программирования платформы Microsoft .NET. Сам по себе Runtime состоит из двух ключевых технологий: Concurrency & Coordination Runtime (CCR) – это библиотека для работы с параллельными и асинхронными потоками данных, и Decentralized System Services (DSS) – средство создания распределенных приложений на основе сервисов. Остановимся подробнее на этих технологиях.

Concurrency & Coordination Runtime. Программная логика робота – в отличие от традиционных приложений – должна взаимодействовать с гораздо более непредсказуемой окружающей средой и адекватно реагировать на информацию, поступающую от множества сенсоров одновременно. Более того, по многим причинам имеет смысл существенную часть логики перенести на множество взаимодействующих друг с другом компьютеров, которые физически могут находиться как на роботе, так и вне его. В результате требуется подход, который одинаково хорошо годился бы как для параллельных, так и для распределенных приложений. Библиотека Concurrency & Coordination Runtime и была специально разработана для того, чтобы упростить создание кода для параллельного исполнения и хорошего масштабирования на современных многоядерных процессорах.

Для ответа на вопрос «зачем нужна CCR» вспомним определение понятия «приложение» в контексте Robotics Studio: это композиция слабосвязанных параллельно выполняющихся компонентов. Такой подход можно было бы реализовать с помощью существующих примитивов многопоточного программирования. Однако процесс написания многопоточных приложений – далеко не тривиальная задача, и она становится все сложнее по мере роста числа одновременно выполняемых потоков.

При использовании CCR не требуется вручную управлять потоками, блокировками, семафорами, т. е. всеми стандартными примитивами синхронизации потоков. CCR – это не просто набор утилит, это совершенно другой подход к написанию кода. Этот подход основан на очередях сообщений и наборе зависящих от данных примитивов синхронизации. Потоки полностью скрыты от программиста, и Runtime – в зависимости от данных и от того, где они нужны, – решает, какой код и где будет исполняться. Поскольку синхронизация идет по данным, то не рекомендуется – и даже запрещается – использовать общую память (это может полностью нарушить схему работы кода).

Таким образом, библиотека CCR упрощает написание программ, которые работают со многими параллельными и асинхронными потоками данных. Примерами потоков данных могут служить сенсорная информация, её обработка и управление движением в роботах.

CCR предоставляет инфраструктуру, которая позволяет параллельно выполнять несколько задач. DSS добавляет возможность объединения CCR приложений (сервисов) и позволяет сервисам работать на полностью независимых компьютерах и взаимодействовать через сеть.

Microsoft определил набор общих соглашений, которые описывают наиболее часто используемые сервисы. Эти соглашения определяют специальные API, которые должны быть использованы для связи с компонентами робота (двигатель сонар, web-камера). Стандартизация интерфейсов позволяет их использовать повторно.

CCR – библиотека, которая поставляется как .NET DLL. Она разработана для управления асинхронным взаимодействием между свободно связанными параллельно работающими сервисами.

На рис. 5 показана архитектура CCR.

CCR функционирует следующим образом:

  1. CCR использует модель асинхронного программирования, которая основана на рассылке сообщений. Это организовано с помощью структур, называемых портами. Сообщение является экземпляром любого типа данных, которые могут управляться CLR. При написании DSS сервиса, определяются классы для типов сообщений. Если сообщения должны быть отправлены через сеть, тогда сначала они сериализуются в XML, а затем на узле-получателе десериализуются.

  2. Порт – очередь сообщений, которая принимает сообщения определённого типа данных, указанные в описании порта. Это важно для выявления очевидных ошибок во время компиляции.

  3. В терминологии CCR сообщения помещаются в порт, путем их отсылки в порт. Сообщение остаётся в порте пока не будут извлечено из очереди получателем. Условия активизации могут быть установлены на получателе, с использованием сложных логических выражений. Например, Join между двумя портами (сообщения должны прийти на оба порта) или Choice между двумя портами (сообщение может прибыть на любой порт). Определение условий активизации является работой арбитров.

  4. Для синхронизации и управления задачами используются арбитры. Как только условия получателя выполнены, задача ставится в очередь диспетчера и передается диспетчеру для выполнения.

  5. Когда задача запланирована к выполнению, запускается обработчик. Обработчик – часть кода, которая выполняется в полностью многопотоковой среде.

  6. В CCR существуют механизмы обработки отказов, также называемых ошибками. Структурный метод называемый causalities – аналог try/catch.

DSS основан на CCR и не требует других компонентов. Отделить DSS от CCR нельзя. При выполнении примеров запускается DSS узел и сервис выполняется внутри этого узла.