- •1. Понятие информационной системы (ис). Корпоративные ис. Структура ис.
- •2. Понятие информационной системы (ис). Корпоративные ис. Классификация ис.
- •3. История развития ис.
- •4. .Net Framework. Общеязыковая среда исполнения (clr). Управляемые модули и сборки.
- •5. .Net Framework. Общая система типов (cts) и Общеязыковая спецификация (cls).
- •6. .Net Framework. Механизм сборки мусора.
- •7. C#. Объявление класса.
- •8. Java. Объявление класса.
- •9. C#. Делегаты.
- •10. C#. События.
- •11. C#. Наследование: правила, синтаксис. Сокрытие имен.
- •12. Java. Наследование: правила, синтаксис. Сокрытие имен.
- •13. Правила наследования типов. Принцип «Open-Closed Principle».
- •14. Правила наследования типов. Принцип «Liskov Substitution Principle».
- •15. C#. Приведение типов. Операторы as и is.
- •16. C#. Виртуальные и невиртуальные методы. Статические методы.
- •17. C#. Абстрактные и конечные методы.
- •310 Часть I. Язык с#
- •18. Java. Абстрактные, виртуальные, конечные и статические методы.
- •19. C# и Java. Интерфейсы.
- •20.C#. Структуры.
- •21. C#. Перечисления.
- •22.C#. Упаковка и распаковка объектов значимых типов.
- •23.C# и Java. Исключения. Механизм исключений.
- •24.C# и Java. Исключения. Классы исключений.
- •25.C# и Java. Исключения. Основные принципы использования механизма
- •26.C#. Обобщения: понятие и синтаксис. Ограничения обобщений.
- •27. Java. Обобщения: понятие и синтаксис.
- •28.C#. Коллекции.
- •29.Java. Коллекции.
- •30.C#. Dispose Pattern.
- •31. .Net Framework 3.0, 3.5, 3.5 sp1: общая характеристика.
- •32. C# 3.0, linq: обзор.
- •Источники данных
- •SqlMetal
- •33. Понятие жизненного цикла ис (жц ис). Каскадная модель жц ис.
- •34. Понятие жизненного цикла ис (жц ис). Спиральная модель жц ис.
- •35. Анализ требований. Функциональные и нефункциональные требования.
- •36 Требования и прецеденты. Формат описания прецедента. Структура прецедента.
- •37 Требования и прецеденты. Взаимосвязь прецедентов.
- •38 Модель предметной области. Концептуальные классы. Ассоциации и атрибуты.
- •39 Язык uml. Способы использования. Model Driven Architecture. Executable uml. ДиаграммыUml.
- •40 Диаграмма прецедентов.
- •41. Диаграмма классов. Обозначение классов. Отношение ассоциации.
- •42.Диаграмма классов. Обозначение интерфейсов. Отношение обобщения и зависимости.
- •43.Диаграмма объектов.
- •44.Диаграмма пакетов.
- •45.Диаграмма состояний.
- •46.Диаграмма развертывания.
- •49.Диаграмма коммуникации.
- •50.Паттерн: понятие, структура, классификация.
- •1) Понятие паттерна
- •2) Структура и Классификация паттернов
- •51. Проектирование на основе обязанностей. Принципы grasp.
- •52.Grasp: принцип Low Coupling.
- •53.Grasp: принцип High Cohesion.
- •54.Grasp: принцип Information Expert.
- •55. Grasp: принцип Creator.
- •56.Grasp: принцип Pure Fabrication.
- •57. Grasp: принцип Indirection.
- •59.Grasp: принцип Protected Variations.
- •60.Grasp: принцип Controller.
10. C#. События.
На основе делегатов построено еще одно важное средство С#: событие (event). Событие — это по сути автоматическое уведомление о выполнении некоторого действия.
События работают следующим образом. Объект, которому необходима информация о
некотором событии, регистрирует обработчик для этого события. Когда ожидаемое
событие происходит, вызываются все зарегистрированные обработчики. А теперь
внимание: обработчики событий представляются делегатами.
События — это члены класса, которые объявляются с использованием ключевого
слова event. Наиболее распространенная форма объявления события имеет следующий вид:
event событийный_делегат объект;
Здесь элемент событийный_делегат означает имя делегата, используемого для
поддержки объявляемого события, а элемент объект — это имя создаваемого собы-
тийного объекта.
Событие – член типа, позволяющий типу уведомлять другие объекты о наступлении
некоторого события Механизм событий основан на делегатах.
Если в типе определен член-событие, то этот тип (или его экземпляр) может
уведомлять другие объекты о некоторых особых событиях. Скажем, класс Button
(«кнопка») определяет событие Click («щелчок»). В приложении могут быть объекты,
которые должны получать уведомление о щелчке объекта Button, а получив такое
уведомление — исполнять некоторые действия. События — это члены типа,
обеспечивающие такого рода взаимодействие. Тип, в котором определены события, как
минимум поддерживает:
регистрацию статического метода типа или экземплярного метода объекта,
заинтересованных в получении уведомления о событии;
отмену регистрации статического метода типа или экземплярного метода
объекта, получающих уведомления о событии;
уведомление зарегистрированных методов о том, что событие произошло.
Типы могут предоставлять эту функциональность при определении событий,
так как они поддерживают список зарегистрированных методов. Когда событие
происходит, тип уведомляет об этом все зарегистрированные методы.
Модель событий CLR основана на делегатах (delegate). Делегаты позволяют
обращаться к методам обратного вызова (callback method), не нарушая
безопасности типов. Метод обратного вызова — это механизм, позволяющий объекту
получать уведомления, на которые он подписался.
Проектирование типа, поддерживающего событие:
Этап 1: определение типа, который будет хранить всю дополнительную информацию, передаваемую получателям уведомления о событии
При возникновении события объекту, в котором оно возникло, нужно передать дополнительную информацию объектам-получателям уведомления о событии. Для
предоставления получателям эту информацию нужно инкапсулировать в собственный класс, который содержит набор закрытых полей, а также открытых свойств «только для чтения». В соответствии с соглашением, классы, содержащие информацию о событиях, передаваемую обработчику события, должны наследовать System.EventArgs, а имя типа должно заканчиваться словом EventArgs.
class ClickEventArgs : System.EventArgs {
private readonly int _x, _y;
public ClickEventArgs(int x, int y)
{_x = x; _y = y;}
public int X { get {return _x;} }
public int Y { get {return _y;} }
}
Этап 2: определение члена-события
В С# член-событие объявляется ключевым словом event. Каждому члену-событию
определяется область действия (практически всегда он открытый, поэтому доступен из любого кода), тип делегата, указывающий на прототип вызываемого метода (или методов), и имя (любой допустимый идентификатор).
class Button {
...
public event EventHandler<ClickEventArgs> Click;
...
}
При этом подписчик должен выглядеть так:
void SomeMethod(object sender, ClickEventArgs e)
Этап 3: определение метода, ответственного за уведомление зарегистрированных объектов о событии
В соответствии с соглашением в классе должен быть виртуальный защищенный метод, вызываемый из кода класса и его потомков при возникновении события. Этот метод принимает один параметр, объект MailMsgEventArgs, содержащий дополнительные сведения о событии. Реализация по умолчанию этого метода просто проверяет, есть ли объекты, зарегистрировавшиеся для получения уведомления о событии, и при положительном результате проверки уведомляет зарегистрированные методы о возникновении события.
class Button ...
protected virtual void OnClick(ClickEventArgs e) {}
private void RaiseClick(ClickEventArgs e) {
OnClick(e);
EventHandler<ClickEventArgs> tmp = Click;
if(tmp != null) {
tmp(this, e);
}
}
Этап 4: определение метода, («генерирующего» событие); транслирующего входную информацию в желаемое событие
У класса должен быть метод, принимающий некоторую входную информацию и
преобразующий его в генерацию события.
class Button {
public void SimulateClick(int x, int y) {
ClickEventArgs e = new ClickEventArgs(x, y);
RaiseClick(e);
}
}
