Лабораторная работа 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