|
Добрый день!
Скажите, пожалуйста,планируется ли продолжение курсов по нанотехнологиям? Спасибо, Евгений
|
Особенности использования программных инструментальных платформ параллельных вычислительных систем общего назначения
Класс служит типом для создания объекта - источника рассылки извещений о событии. Обратите внимание, что при объявлении события " Месяц " имя делегата " Расчет " расширяется именем класса " Человек ", в котором определен этот делегат. Метод " Разослать " будет вызываться источником сообщений (в данном примере это будет метод Main ) и вызывать через событие " Месяц " все делегаты, подписавшиеся на это событие. Генерации события предшествует проверка наличия подписки.
class Program {
static void Main(string[] args) {
Человек чел = new Человек("Иванов", 100.0, 200.0);
Предприятие пр1 = new Предприятие(), пр2 = new Предприятие();
Банк бнк = new Банк();
//Создаем объект, который будет выполнять
//рассылку извещений о событии
Извещение изв = new Извещение(чел);
//Подписываемся на рассылку
изв.Месяц += new Человек.Расчет(бнк.Пересчитать);
изв.Месяц += new Человек.Расчет(пр1.Начислить);
изв.Месяц += new Человек.Расчет(пр1.Вычесть);
изв.Месяц += new Человек.Расчет(бнк.Внести);
изв.Месяц += new Человек.Расчет(пр2.Начислить);
изв.Месяц += new Человек.Расчет(пр2.Вычесть);
изв.Месяц += new Человек.Расчет(бнк.Внести);
изв.Месяц += new Человек.Расчет(бнк.Сообщить);
//Генерируем сообщение - "Конец месяца"
for(int i=0; i<3; i++) изв.Разослать(); } }При запуске программы в методе Main создается объект типа " Человек ". Этот объект будет использоваться в качестве аргумента во всех обработчиках.
В качестве объекта - источника для рассылки извещений создается объект c именем изв и три объекта - приемника извещений: два предприятия ( пр1 и пр2 ) и один банк ( бнк ). Объекты производят подписку на события, регистрируя в событии изв.Месяц делегаты типа " Расчет ", которым поручено представлять методы - обработчики событий. Обратите внимание, что имя делегата " Расчет " расширено именем класса "Человек". Необходимость такого расширения вызвана тем, что определение делегата локализовано в классе " Человек ".
Выполнение программы завершается трехкратной генерацией сообщения об окончании месяца, которое реализовано как вызов метода рассылки извещений " изв.Разослать() ".На каждое сообщение об окончании месяца будут разосланы извещения и вызваны обравботчики событий в следующей последовательности:
бнк.Пересчитать(чел); пр1.Начислить(чел); пр1.Вычесть(чел); бнк.Внести(чел); пр2.Начислить(чел); пр2.Вычесть(чел); бнк.Внести(чел); бнк.Сообщить(чел);
В результате клиент получит три справки о состоянии вклада:
Вклад Иванов: 390,00 Вклад Иванов: 589,50 Вклад Иванов: 798,98
По рассмотренной схеме реализуются приложения с графическим интерфейсом пользователя, например, приложения, создаваемые в среде Visual Studio.Net по шаблону Windows Application (рис. 2.6).
Стандартизация элементов пользовательского интерфейса и схемы организации программы создает основу для разработки программы на основе предопределенных классов. Интегрированные инструментальные среды имеют встроенные средства, переводящие использование предопределенных классов в плоскость конструирования структуры программы и пользовательского интерфейса, оставляя за разработчиком программную реализацию обработчиков событий, в которых собственно концентрируется функциональность приложения.
Технологически разработка программы в этом случае сводится к следующим процессам:
- Автоматическая генерация каркаса программы по заданному разработчиком шаблону.
- Конструирование формы пользовательского интерфейса в визуальном режиме, сводящееся к размещению на форме элементов из имеющегося набора и настройка их свойств.
- Связывание элементов интерфейса в визуальном режиме с обработчиками событий.
- Ручная разработка кода, необходимого для обработки событий.
На рис. 2.7 приведена форма приложения, выполняющего вывод сообщения в окно и очистку этого окна.
Пример носит тривиальный характер с точки зрения функциональности приложения и приведен для демонстрации возможностей среды по генерации кода, реализующего объемные, но рутинные по характеру операции.
using System;
using System.Collections.Generic;
using System.Windows.Forms;
namespace Начало
{
static class Program
{
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1();форма);
}
}
}В классе Program определен метод Main, с которого начинается выполнение программы. Статический метод Run класса Application принимает ссылку на объект-приемник и организует цикл опроса очереди сообщений.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace Начало
{
public partial class Form1 : Form
{
//Конструктор формы
public Form1()
{
InitializeComponent();
}
//Обработчик щелчка мышью на кнопке Выдать (имя объекта
//button1)
private void button1_Click(object sender, EventArgs e)
{
textBox1.Text = "Привет";
}
//Обработчик щелчка мышью на кнопке Очистить(имя объекта
//button2)
private void button2_Click(object sender, EventArgs e)
{
textBox1.Text = "";
}
//Обработчик щелчка мышью на кнопке Выход(имя объекта
//button3)
private void button3_Click(object sender, EventArgs e)
{
Close();
}
}
}
using System.Drawing;
using System.Windows.Forms;
using System.ComponentModel;
using System;
namespace Начало
{
partial class Form1
{
//Поля - ссылки на объекты
private Button button1;
private Button button2;
private Button button3;
private TextBox textBox1;
private IContainer components = null;
//Освобождение ресурсов при закрытии формы
//(метод вызывается автоматически при закрытии формы)
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
//Инициализация полей формы и самой формы
private void InitializeComponent()
{
//Создание объектов интерфейса
button1 = new Button();
button2 = new Button();
button3 = new Button();
textBox1 = new TextBox();
//Запрещение приема извещений о событиях на время установки
//свойств объектов интерфейса и формы
SuspendLayout();
//1.Установка свойств объекта button1 (кнопка Выдать)
//1.1.Расположение элемента на форме (левый верхний угол)
button1.Location = new Point(12, 57);
//1.2.Имя объекта
button1.Name = "button1";
//1.3.Размер объекта
button1.Size = new Size(75, 23);
//1.4.Очередность передачи фокуса управления клавишей
//табуляции
button1.TabIndex = 0;
//1.5.Текст, отображаемый на изображении объекта
button1.Text = "Выдать";
//1.6.Режим использования фонового цвета для элемента
//(использовать фоновый цвет данного элемента)
button1.UseVisualStyleBackColor = true;
//1.7.Подписка на событие
button1.Click += new EventHandler(button1_Click);
//2.Установка свойств объекта button2 (кнопка Очистить)
//2.1.Расположение элемента на форме (левый верхний угол)
button2.Location = new Point(110, 57);
//2.2.Имя объекта
button2.Name = "button2";
//2.3.Размер объекта
button2.Size = new Size(75, 23);
//2.4.Очередность передачи фокуса управления клавишей
//табуляции
button2.TabIndex = 1;
//2.5.Текст, отображаемый на изображении объекта
button2.Text = "Очистить";
//2.6.Режим использования фонового цвета для элемента
//(использовать фоновый цвет данного элемента)
button2.UseVisualStyleBackColor = true;
//2.7.Подписка на событие
button2.Click += new EventHandler(button2_Click);
//3.Установка свойств объекта button3 (кнопка Выход)
//3.1.Расположение элемента на форме (левый верхний угол)
button3.Location = new Point(205, 57);
//3.2.Имя объекта
button3.Name = "button3";
//3.3.Размер объекта
button3.Size = new Size(75, 23);
//3.4.Очередность передачи фокуса управления клавишей
//табуляции
button3.TabIndex = 2;
//3.5.Текст, отображаемый на изображении объекта
button3.Text = "Выход";
//3.6.Режим использования фонового цвета для элемента
//(использовать фоновый цвет данного элемента)
button3.UseVisualStyleBackColor = true;
//3.7.Подписка на событие
button3.Click += new EventHandler(button3_Click);
//4.Установка свойств объекта textBox1 (отображение текстового
//сообщения)
//4.1.Расположение элемента на форме (левый верхний угол)
textBox1.Location = new Point(52, 12);
//4.2.Имя объекта
textBox1.Name = "textBox1";
//4.3.Размер объекта
textBox1.Size = new Size(167, 20);
//4.4.Очередность передачи фокуса управления клавишей
//табуляции
textBox1.TabIndex = 3;
//5.Установка свойств объекта Form1
//5.1.Установка единиц измерения и режима изменения размеров
//в зависимости от выбранного шрифта
AutoScaleDimensions = new SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
//5.2.Имя объекта
Name = "Form1";
//5.3.Текст, отображаемый на изображении объекта
Text = "Form1";
//5.4.Размер клиентской части формы (без учета заголовка)
ClientSize = new Size(292, 104);
//5.5.Запоминание ссылок на элементы управления
//в динамическом массиве Controls
Controls.Add( textBox1);
Controls.Add( button3);
Controls.Add( button2);
Controls.Add( button1);
//Разрешение приема извещений о событиях
ResumeLayout(false);
PerformLayout();
}
}
}Жирным шрифтом выделен код обработчиков событий, который необходимо ввести вручную.

