51471

Отношения между классами. Интерфейсы, делегаты и события

Лекция

Информатика, кибернетика и программирование

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

Русский

2014-02-11

40.52 KB

9 чел.

Тема 5.4. Отношения между классами.
Интерфейсы, делегаты и события

5.4.1. Понятие отношения между классами

5.4.2. Отношение вложенности

5.4.3. Наследование

5.4.3. Статический контроль типов и динамическое связывание

5.4.4. Пример работы с полиморфным семейством классов

5.4.5. Абстрактные классы

5 .4.6. Интерфейсы

5.4.7. Проблемы множественного наследования

5.4.8. Встроенные интерфейсы

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

5.5.2. Функции высших порядков

5.5.3. Наследование и полиморфизм – альтернатива обратному вызову

5.5.4. Делегаты как свойства

5.5.5. Операции над делегатами. Класс Delegate

Пример «Комбинирование делегатов»

5.5.6. Классы с событиями

Вариант 1

Обработчик события:

всегда принадлежит классу, зажигающему событие;

никогда не принадлежит классу, зажигающему событие;

может принадлежать классу, зажигающему событие;

принадлежит только одному классу, слушающему событие;

может принадлежать многим классам, слушающим события.

Отметьте истинные высказывания:

все события имеют одинаковую сигнатуру из двух аргументов с одними и теми же типами;

все события имеют сигнатуру из двух аргументов, но с отличающимися типами;

все события, не имеющие собственных аргументов, передаваемых обработчику, соответствуют стандартному встроенному делегату EventHandler;

для класса с большим числом событий целесообразно применять динамическое связывание;

для связывания событий с обработчиком можно применять только операцию +=.

Объявление события в классе может представлять собой:

объявление метода класса;

объявление поля класса;

объявление процедуры-свойства класса с методами get и set;

объявление процедуры-свойства класса с методами add и remove.

Вариант 2

Объекты одного класса:

имеют одинаковый набор событий;

в процессе вычислений зажигают одинаковый набор событий;

в процессе вычислений зажигают набор событий, характерный для объекта;

в разных сеансах работы зажигают одинаковый набор событий;

в разных сеансах работы зажигают разные события.

Отметьте истинные высказывания:

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

каждый объект определяет, какой обработчик присоединяется к событию;

метод GetInvocationList не применим к событиям;

все события имеют одну и ту же сигнатуру.

Класс EventHandler:

является классом, которому принадлежат все события;

является абстрактным классом и не может иметь экземпляров;

является родительским классом для событий, не имеющих собственных аргументов;

является потомком класса Delegate;

накладывает ограничения на сигнатуру события.

Вариант 3

Процедура, в которой зажигается событие:

передает обработчику событий входные аргументы и продолжает свою работу;

передает обработчику событий входные аргументы и ждет окончания работы первого обработчика, связанного с событием;

передает обработчику событий входные аргументы и ждет окончания работы всего списка обработчиков, связанного с событием;

может получить от обработчиков выходные аргументы и использовать их в своей работе.

Отметьте истинные высказывания:

события – это специализированный вариант делегатов;

к каждому событию должен быть присоединен хотя бы один обработчик события;

методы Combine и Remove, наследованные от класса Delegate не применимы к событиям;

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

Все аргументы события принадлежат:

классу EventArgs;

классу EventArgs, за исключением аргумента, задающего объект, зажигающий событие;

потомку класса EventArgs;

потомку класса EventArgs за исключением аргумента, задающего объект, зажигающий событие;

возможно разным классам.


Вариант 1

Отметьте корректные объявления делегата – функционального класса:

public class D = delegate void(string s);

Delegate D1 = new Delegate( void(string s);

public delegate void D2 (string s);

delegate int T(int x1, ref int x2);

public delegate T1(int x);

Отметьте истинные высказывания:

каждый объявленный функциональный класс является наследником класса Delgate;

сигнатура метода, связываемого с экземпляром делегата, в точности совпадает с сигнатурой, определенной делегатом;

один из аргументов функции высшего порядка является экземпляром делегата;

для делегатов определена операция вычитания;

определение делегата эквивалентно определению указателя на функцию.

Функция обратного вызова – это:

функция, прямо или косвенно вызывающая саму себя;

функция f, вызывающая функцию g, переданную ей в качестве одного из аргументов, c сигнатурой, удовлетворяющей контракту, заданному функцией f;

пара функций, взаимно вызывающих друг друга;

функция высшего порядка.

Вариант 2

Дано объявление делегата:  public delegate double D (double x); Какие объявления его экземпляров будут корректны в определенном контексте:

D d1 = new D(Math.sin);

D d2 = new D(double f(double x){return x+1;};

D d3 = new D(x.f1);

D d4 = new D(Person.f2);

D d5 = new D(f3);

Отметьте истинные высказывания:

каждый экземпляр делегата обладает методом GetInvocationList;

над делегатами определена операция умножения *;

при вызове метода, связанного с экземпляром делегата, могут выполняться методы других экземпляров;

язык C# позволяет построить делегата непосредственным наследованием от абстрактного класса Delegate;

Класс Delegate не определен в библиотеке FCL.

Реализация экземпляра делегата в виде процедуры

позволяет скрыть его от клиента;

иметь один экземпляр вместо нескольких;

динамически связывать экземпляр с методом;

экономить память.

Вариант 3

Что мощнее наследование или функциональный тип?

наследование позволяет промоделировать механизм функций высших порядков;

функциональный тип позволяет моделировать наследование;

виртуальные методы и функции высших порядков основаны на контракте;

оба механизма дополняют друг друга;

эти механизмы не имеют ничего общего.

Отметьте истинные высказывания:

делегаты являются наследниками интерфейса ICloneable;

делегаты являются наследниками интерфейса ISerializable;

операции + и – изменяют приоритет делегата;

метод Combine возвращает в качестве результата объект того же типа, что и экземпляр делегата, вызвавшего метод.

Какие методы делегатов являются статическими:

Combine;

Clone;

CreateDelegate;

GetInvocationList;

GetHashCode.


Вариант 1

Ключевое слово interface в языке C# задает описание:

пользовательского интерфейса класса;

открытой части класса;

частного случая класса;

абстрактного класса.

Отметьте истинные высказывания:

слово «интерфейс» имеет разный смысл в зависимости от контекста;

множественное наследование интерфейсов дает те же возможности, что и множественное наследование классов;

при наследовании интерфейса ICloneable необходимо реализовать метод MemberwiseClone;

при наследовании двух интерфейсов имена их методов должны быть различными;

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

Интерфейс ISerializable:

автоматически реализует глубокую сериализацию;

позволяет управлять процессом сериализации;

имеет два метода, которые должен реализовать класс, наследующий интерфейс;

конфликтует с атрибутом класса Serializable.

Вариант 2

Пусть задано описание интерфейсов: interface IN{string M(string s);} interface IP{string M(string s); string M1(int s);} interface IQ{int M(int s);}. Какие из объявлений классов содержат ошибки:

public class C1:IP{string IP.M(string s){return (s+s);}
string IP.M1(int x){return x.ToString();}public int M (int s) { return s++;}}

public class C1:IP,IN{string IP.M(string s){return (s+s);}
string IP.M1(int x){return x.ToString();}}

public class C1:IP,IN{public string M(string s){return (s+s);}
public string M1(int x){return x.ToString();}}

public class C1:IP,IN,IQ{public string M(string s){return (s+s);}
public string M1(int x){return x.ToString();}}

Отметьте истинные высказывания:

для того чтобы объекты собственного класса сравнивать на «больше» и «меньше», необходимо сделать класс наследником интерфейса IComparable;

для того чтобы объекты собственного класса можно было клонировать, необходимо сделать класс наследником интерфейса ICloneable;

для того чтобы объекты собственного класса можно было сериализовать, необходимо сделать класс наследником интерфейса ISerializable;

методы разных интерфейсов с одинаковой сигнатурой можно «склеивать» в классе наследнике, назначая им одну реализацию;

реализация метода Clone позволяет организовать глубокое клонирование.

Класс с атрибутом Serialize:

должен быть наследником интерфейса ISerializable;

при вызове форматером метода Serialize выполняет глубокую сериализацию, если класс не является наследником интерфейса ISerializable;

допускает два формата сериализации данных;

облегчает организацию обмена данными с удаленным приложением;

позволяет сохранять данные в текстовом формате.

Вариант 3

Пусть задано описание интерфейса и класса: interface IP{string M(string s); string M1(int s);} public class C1:IP{string IP.M(string s){return (s+s);}
string IP.M1(int x){return x.ToString();}public int M (int s) { return (s++);}}
Какие из объявлений в клиентском классе выполнимы:

C1 it1 = new C1(); it1.M(7777);

C1 it2 = new C1(); string s ="ss"; s =it2.IP.M(s);

C1 it3 = new C1(); string s ="ss"; s =((IP)it3).M(s);

IP it4 = new IP(); string s= "ss"; s = it4.M(s);

IP it5 = (IP) new C1(); string s= "ss"; s = it5.M(s);

Отметьте истинные высказывания:

один класс может наследовать несколько интерфейсов;

один интерфейс может наследоваться несколькими классами;

из-за коллизии имен дублируемое наследование интерфейсов запрещено;

интерфейс может быть наследником нескольких интерфейсов;

класс с атрибутом ISerializable должен реализовать специальный защищенный конструктор.

При наследовании интерфейсов:

класс наследник должен реализовать хотя бы один из его методов;

может выполнить переименование методов интерфейса;

может выполнить склейку методов с одинаковой сигнатурой;

может выполнить склейку методов с разной сигнатурой;

объекту интерфейсного типа доступны закрытые методы интерфейса, реализованные в классе;

объекты интерфейсного типа создаются стандартным путем с помощью контсруктора.


Вариант 1

Для классов клиентов и поставщиков справедливы утверждения:

у класса поставщика может быть много клиентов;

у класса клиента может быть много поставщиков;

поставщик может быть собственным поставщиком;

клиент может быть собственным клиентом;

отношение «клиент-поставщик» – задает отношение «имеет»;

отношение «клиент-поставщик» – задает отношение «является».

Отметьте истинные высказывания:

класс называется абстрактным, если он не вводит собственных полей данных;

если в методах класса А вызываются методы класса В, то это означает, что класс А является клиентом класса В;

у класса может быть несколько непосредственных родительских классов;

у класса может быть только один непосредственный потомок;

в проектах на C# контроль типов выполняется на этапе компиляции.

В родительском классе описан метод public virtual void M(int x) {}. Какие объявления в классе потомке вызовут ошибку на этапе компиляции?

override void M(int x){}

public override void M(int item){}

public new void M(int x){}

public virtual void M(int x){}

public virtual void M(int x, int y){}

Вариант 2

Для классов родителей и потомков справедливы следующие утверждения:

у родительского класса может несколько непосредственных потомков;

у класса потомка может быть несколько непосредственных родительских классов;

класс родитель может быть сам себе родитель;

класс потомок может быть собственным потомком;

потомок наследует все поля и методы родителя, за исключением закрытых (private);

Отметьте истинные высказывания:

класс с модификатором sealed не может иметь потомков;

класс с модификатором abstract не может иметь потомков с таким же модификатором;

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

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

В родительском классе описан метод public virtual void M(int x) {}. Какие объявления в классе потомке вызовут предупреждения на этапе компиляции?

override void M(int x){}

public override void M(int item){}

public new void M(int x){}

public virtual void M(int x){}

public virtual void M(int x, int y){} 2

Вариант 3

Для понятия «полиморфизм» справедливы следующие утверждения:

полиморфизм определяется для семейства классов, связанных отношением наследования;

полиморфизм определяется для семейства классов, связанных отношением вложенности;

полиморфизм означает, что в классе заданы перегруженные методы;

реализация полиморфизма построена на динамическом связывании;

реализация полиморфизма предполагает статический контроль типов.

Отметьте истинные высказывания:

вызов конструктора приводит к вызову конструкторов всех предков класса;

клиенту доступны все методы поставщика;

наследнику доступны все методы предков;

абстрактный класс может иметь полностью реализованный метод;

объект наследника «является» объектом родителя.

В родительском классе описан метод public void M(int x) {}. Какие объявления в классе потомке вызовут ошибки или предупреждения на этапе компиляции?

public override void M(int x) {}

public new void M(int x) {}

public new void M(int x, int y){}

public void M(int x){}

private new void M(int x){}


 

А также другие работы, которые могут Вас заинтересовать

15995. Права человека в современной России 2.79 MB
  Утяшев М.М. Утяшева Л.М. ПРАВА ЧЕЛОВЕКА в современной России Учебник для ВУЗов и средних учебных заведений Уфа 2003 год Утяшев М.М. Утяшева Л.М. Права человека в современной России: Учебник для ВУЗов и средних учебных заведений. Уфа: полиграфкомбинат 2003. 616 с...
15996. Государственное и региональное управление 1.54 MB
  В данном учебном пособии в соответствии с утвержденной учебной программой рассматриваются проблемы развития государственного и регионального управления, освещаются зарубежный опыт региональной политики и пути его использования в России с учетом её специфики, правовые основы функционирования субъектов РФ, анализируются регион в качестве социальной экономической системы, финансы и бюджет, рассматриваются вопросы стимулирования
15997. Государственное и муниципальное управление 1.44 MB
  В предлагаемом пособии рассматривается в соответствии с утвержденной учебной программой широкий круг вопросов становления и развития местного самоуправления в России и за рубежом, дается характеристика органов местного самоуправления и муниципальных образований, рассматриваются вопросы формирования и использования местных финансов,
15998. Коррупция и организованная преступность в посткоммунистических государствах 369.5 KB
  Неформальные системы должны стать предметом специального изучения специалистов в области коррупции и организованной преступности в любом географическом контексте. Организованная преступность неизбежно окаймлена рамками неформальных систем и обычно зависит от коррупции
15999. Конкурентне право 2.99 MB
  У навчальному посібнику розглянуто основні аспекти правового захисту економічної конкуренції в Україні, окреслено поняття й види конкуренції та монополії, висвітлено основні положення законодавства про захист економічної конкуренції. Посібник містить навчальну програму курсу «Конкурентне право України».
16000. Виктимология социальные и криминологические проблемы 1.47 MB
  Туляков Вячеслав Алексеевич ВИКТИМОЛОГИЯ В монографии приведены результаты теоретического анализа основных науковедческих проблем современной виктимологии как перспективного направления социальноправовых исследований обеспечивающего повышение эффективнос...
16001. ВИКТИМОЛОГИЯ 924.5 KB
  Туляков В.А. ВИКТИМОЛОГИЯ ВИКТИМОЛОГИЯ от лат victime жертва и греч logos понятие учение область знания на стыке педагогики психологии социологии криминологии и этнографии изучающая различные категории людей жертв неблагопри...
16002. Історія вчень про державу та право 1.45 MB
  Посібник створений з урахуванням досвіду щодо подібних вітчизняних видань, а також власного напрацювання автора при викладанні навчальної дисципліни у вищих навчальних закладах. У посібнику вміщено теоретичний матеріал, перелік літератури, питання для заліку та самоконтролю знань студентів, глосарій контрольні тести-тренінги
16003. Наркоситуация в мире и транснациональный наркобизнес 316 KB
  Владивостокский центр изучения организованной преступности 2002 июль Наркоситуация в мире и транснациональный наркобизнес Реферат Тропиной Татьяны Наркобизнес величайший массовый убийца. Исключая редкие случаи окровавленные руки п