Лабораторная работа 6. Простейшие классы 1
6.1 Примеры программ для работы с классами и объектами 1
6.1.1 Создание класса для работы с массивами целых чисел 1
6.1.2 Пример объектно-ориентированного приложения «Институт» 4
Лабораторная работа 7. ИНТЕРФЕЙСЫ, ДЕЛЕГАТЫ, СОБЫТИЯ 8
7.1 Теоретическое введение 8
7.1.1 Интерфейсы 8
7.1.2 Делегаты 9
7.2 Пример приложения для работы с интерфейсами, делегатами и событиями 10
Лабораторная работа 6. Простейшие классы
Задание
Создать класс. Каждый разрабатываемый класс должен, как правило, содержать следующие элементы: скрытые поля; конструкторы с параметрами и без параметров, методы, свойства. Методы и свойства должны обеспечивать непротиворечивый, полный, минимальный и удобный интерфейс класса. при возникновении ошибок должны выбрасываться исключения. В программе должна выполняться проверка всех разработанных элементов класса. Создать дочерний класс.6.1 Примеры программ для работы с классами и объектами
6.1.1 Создание класса для работы с массивами целых чисел
Рассмотрим следующий пример: Создать класс SafeArray для работы с массивами целых чисел. Класс имеет следующие возможности
- конструктор, позволяющий создать неинициализированный массив или инициализировать массив серией целочисленных значений произвольного размера. Выполнять поэлементное сложение элементов двух массивов Выполнять операцию инкремента каждого элемента массива на заданное число Выводить массив на экран. Обрабатывать исключительные ситуации.
using System;
using System. Collections. Generic;
using System. Linq;
using System. Text;
namespace ConsoleApplication1
{
// Конструктор, формирует пустой массив, состоящий из
// определенного числа элементов (size) и запоминающий
// количество элементов массива в скрытом поле length
class SafeArray
{
public SafeArray(int size)
{
a = new int[size];
length = size;
}
// Конструктор, заполняющий формируемый массив конкретными числами и //запоминающий количество элементов массива в скрытом поле length
public SafeArray(params int[] arr)
{
length = arr. Length;
a = new int[length];
for (int i = 0; i < length; ++i) a[i] = arr[i];
}
// Метод, выполняющий поэлементное сложение двух массивов. Количество //складываемых элементов определяется длиной меньшего массива (т. е. //массива, содержащего меньше элементов)
public static SafeArray operator +(SafeArray x, SafeArray y)
{
int len = x. length < y. length? x. length : y. length;
SafeArray temp = new SafeArray(len);
* for (int i = 0; i < len; ++i) temp[i] = x[i] + y[i];
return temp;
}
// Метод, выполняющий сложение массива с числом
public static SafeArray operator +(SafeArray x, int y)
{
SafeArray temp = new SafeArray(x. length);
for (int i = 0; i < x. length; ++i) temp[i] = x[i] + y;
return temp;
}
// Метод, выполняющий сложение числа с массивом
public static SafeArray operator +(int x, SafeArray y)
{
SafeArray temp = new SafeArray(y. length);
for (int i = 0; i < y. length; ++i) temp[i] = x + y[i];
return temp;
}
// Метод, выполняющий увеличение на единицу каждого элемента массива
public static SafeArray operator ++(SafeArray x)
{
SafeArray temp = new SafeArray(x. length);
for (int i = 0; i < x. length; ++i) temp[i] = ++x[i];
return temp;
}
// Индексатор для получения i-го элемента массива (get) или для присвоения //i-му элементу массива значения value.
// Если значение индекса недопустимо, обрабатывается ошибочная ситуация
public int this[int i]
{
get
{
if (i >= 0 && i < length) return a[i];
else throw new IndexOutOfRangeException();
}
set
{
if (i >= 0 && i < length) a[i] = value;
else throw new IndexOutOfRangeException();
}
}
// Метод для вывода массива на экран
public void Print(string name)
{
Console. WriteLine(name + ":");
for (int i = 0; i < length; ++i) Console. Write("\t" + a[i]);
Console. WriteLine();
}
// скрытые поля
int[] a; // массив
int length; // количество элементов в массиве
}
// Консольное приложение
class Class1
{
// Метод, которому передается управление после запуска программы
static void Main()
{
try
{
// создание массива, состоящего из 5 элементов
SafeArray a1 = new SafeArray(5, 2, -1, 1, -2);
// вывод массива 1на экран
a1.Print("Массив 1");
// создание массива, состоящего из 3 элементов
SafeArray a2 = new SafeArray(1, 0, 3);
// вывод массива 2 на экран
a2.Print("Массив 2");
// Сложение двух массивов
SafeArray a3 = a1 + a2;
// вывод на экран массива, полученного в результате
// сложения массивов 1 и 2
a3.Print("Массив 3");
// к каждому элементу массива 1 прибавляется число 100
a1 = a1 + 100;
// вывод на экран преобразованного массива 1
a1.Print("100 + Массив 1");
//каждый элемент массива увеличивается на 1, удваивается и к результату //прибавляется 1 правда, не в том порядке как описано выше)
a2 += ++a2 + 1;
// вывод на экран преобразованного массива 2
a2.Print("++a2, a2 + a2 + 1");
}
catch (Exception e)
{
Console. WriteLine(e. Message);
}
}
}
}
Результат работы приложения приведен на рисунке 6.1.
Рис. 6.1. Приложение для работы с массивами целых чисел
6.1.2 Пример объектно-ориентированного приложения «Институт»
Экранная форма приложения приведена на рисунке 6.2.


Приложение включает 4 класса:
- CPerson – родительский класс «человек». Содержит поле fname – имя человека, конструктор и метод info –вывод информации о человеке (в данном случае выводится только имя человека); CStud – класс «Студент», дочерний от класса CPerson. Содержит дополнительное поле fstip – стипендия, конструктор и метод info –вывод информации о студенте (в данном случае выводится имя студента и его стипендия); CProf – класс «Преподаватель», дочерний от класса CPerson. Содержит дополнительное поле fkaf – кафедра, конструктор и метод info –вывод информации о преподавателе (в данном случае выводится имя преподавателя и название кафедры); CInst – класс «Институт», дочерний от класса CPerson. Содержит два динамических списка Stud – список студентов института и Prof – список преподавателей института. Для организации списков используется класс сортированный список SortedList.
На рисунке 6.3 изображена диаграмма классов.
Список используемых элементов управления приведен в таблице 6.1.


Табл. 6.1. Список используемых элементов управления
Элемент управления | Класс | Описание |
groupBox1 | GroupBox | Контейнер «Студент/Преподаватель» для группировки радиокнопок «Студент» и «Преподватель» |
groupBox2 | GroupBox | Контейнер «Данные» для группировки данных |
groupBox3 | GroupBox | Контейнер «Управление» для группировки командных кнопок |
groupBox3 | GroupBox | Контейнер «Информация» |
radioButton1 | RadioButton | Радиокнопка «Студент» |
radioButton2 | RadioButton | Радиокнопка «Преподаватель» |
label1 | Label | Метка «Имя» |
label2 | Label | Метка «Стипендия/Кафедра» |
label3 | Label | Невидимая метка для вывода в контейнере «Информация» слов «Студенты» или «Преподаватели» в зависимости от выводимой информации |
textBox1 | TextBox | Окно ввода имени |
textBox2 | TextBox | Окно ввода стипендии для студентов или кафедры для преподавателей |
listBox1 | ListBox | Окно вывода информации о студентах или преподавателях |
button1 | Вutton | Командная кнопка «Добавить студента/преподавателя» |
button2 | Вutton | Командная кнопка «Вывод списка студентов/преподавателей» |
button3 | Вutton | Командная кнопка «Удалить студента/преподавателя» |
Последовательность действий:
В пространстве имен приложения (вне класса формы) создайте класс «Человек» (CPerson):// Класс Человек
|
Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 |


