
- •Лабораторное занятие № 1.2 Тема: Разработка программ на языке c# c использованием классов.
- •План практического занятия
- •Литература:
- •Указания по проведению практического занятия
- •2. Основная часть
- •Теоретические сведения.
- •Определение классов в с#
- •Определение членов
- •Конструкторы и деструкторы
- •Последовательность выполнения конструкторов
- •Интерфейсы
- •Реализация интерфейсов
- •Реализация интерфейсов в классах
- •Наследование
- •Полиморфизм
- •Полиморфизм интерфейсов
- •Практическая часть. (Задание студентам).
- •Задание на лабораторную работу 1.2
Полиморфизм интерфейсов
Ранее уже говорилось о том, что для группирования вместе связанных методов и свойств могут применяться интерфейсы. Создавать экземпляры интерфейсов таким же образом, как и экземпляры объектов, нельзя, но зато можно создавать переменную типа интерфейса и затем использовать ее для получения доступа к методам и свойствам, предоставляемым этим интерфейсом в объектах, которые его поддерживают.
Например, предположим, что вместо базового класса Animal метод EatFood() помещается в интерфейс по имени IConsume. Этот интерфейс могут поддерживать оба класса — Cow и Chicken, — но только в таком случае каждый из них должен обязательно иметь свою реализацию метода EatFood() (поскольку интерфейсы не содержат реализаций). После этого к этому методу станет можно получать доступ с помощью примерно такого кода:
Cow myCow = new Cow();
Chicken myChicken = new Chicken();
IConsume consumelnterface;
consumeInterface = myCow;
consumeInterface.EatFood();
consumeInterface = myChicken;
consumeInterface.EatFood();
Такой подход предоставляет простой способ для вызова множества объектов одинаковым образом и избавляет от зависимости от общего базового класса. В этом коде вызов consumeInterfасe. EatFood () будет приводить к вызову метода EatFood () либо класса Cow, либо класса Chicken, в зависимости от того, какой экземпляр будет присвоен переменной типа интерфейса.
Здесь важно обратить внимание на то, что производные классы наследуют интерфейсы, поддерживаемые их базовыми классами. В предыдущем примере интерфейс IConsume может поддерживаться как классом Animal, так и обоими классами Cow и Chicken. Запомните, что классы с общим базовым классом вовсе необязательно имеют общие интерфейсы и наоборот.
Практическая часть. (Задание студентам).
Написать класс и проверить его работу в консольном приложении. Задачи определить по варианту.
Задание на лабораторную работу 1.2
Задача 1 и задача 2 берутся из одного списка.
Варианты заданий |
||
№ варианта |
Задача 1 |
Задача 2 |
1 |
14 |
13 |
2 |
6 |
17 |
3 |
13 |
14 |
4 |
16 |
3 |
5 |
13 |
6 |
6 |
3 |
12 |
7 |
17 |
3 |
8 |
13 |
2 |
9 |
9 |
4 |
10 |
13 |
8 |
11 |
9 |
9 |
12 |
16 |
4 |
13 |
15 |
13 |
14 |
17 |
2 |
15 |
4 |
16 |
16 |
9 |
2 |
17 |
14 |
10 |
18 |
6 |
6 |
19 |
5 |
4 |
20 |
7 |
7 |
21 |
5 |
1 |
22 |
14 |
11 |
23 |
2 |
4 |
24 |
3 |
16 |
Создать базовый класс с виртуальной функцией – площадь и периметр. Создать производные классы: прямоугольник, круг, прямоугольный треугольник, трапеция, со своими функциями площади
Создать класс с виртуальной функцией: норма. Создать производные классы: комплексные числа, вектор из 10 элементов, матрица (2х2). Определить функцию нормы - для комплексных чисел - модуль в квадрате, для вектора - корень квадратный из суммы элементов по модулю, для матрицы - максимальное значение по модулю.
Создать абстрактный класс (кривые) вычисления координаты y для некоторой x. Создать производные классы: прямая, эллипс, гипербола со своими функциями вычисления y в зависимости от входного параметра x. Уравнение прямой: y=ax+b , эллипса: x2/a2+y2/b2=1, гиперболы: x2/a2-y2/b2=1.
Создать абстрактный базовый класс с виртуальной функцией - сумма прогрессии. Создать производные классы: арифметическая прогрессия и геометрическая прогрессия. Каждый класс имеет два поля типа double. Первое - первый член прогрессии, второе (double) - постоянная разность (для арифметической) и постоянное отношение (для геометрической). Определить функцию вычисления суммы, где параметром является количество элементов прогрессии.
Арифметическая прогрессия aj=a0+jd, j=0,1,2,…
Сумма арифметической прогрессии: sn=(n+1)(a0+an)/2
Геометрическая прогрессия: aj=a0rj, j=0,1,2,…
Сумма геометрической прогрессии: sn=(a0-anr)/(1-r)
Создать базовый класс - фигура, и производные класс - круг, прямоугольник, трапеция. Определить виртуальные функции площадь, периметр и вывод на печать.
Создать базовый класс - работник и производные классы - служащий с почасовой оплатой, служащий в штате и служащий с процентной ставкой. Определить функцию начисления зарплаты.
Создать абстрактный базовый класс с виртуальной функцией - площадь поверхности. Создать производные классы: параллелепипед, тетраэдр, шар со своими функциями площади поверхности. Для проверки определить массив ссылок на абстрактный класс, которым присваиваются адреса различных объектов. Площадь поверхности параллелепипеда: S=6xy. Площадь поверхности шара: S=4 r2. Площадь поверхности тетраэдра: S=a2 3
Создать класс человек, производные от которого девушки и молодые люди. Определить виртуальную функцию реакции человека на вновь увиденного другого человека. Перегрузить эту функцию и организовать случайный выбор этой функции.
Создать абстрактный базовый класс с виртуальной функцией - объем. Создать производные классы: параллелепипед, пирамида, тетраэдр, шар со своими функциями объема. Для проверки определить массив ссылок на абстрактный класс, которым присваиваются адреса различных объектов. Объем параллелепипеда - V=xyz (x,y,z - стороны , пирамиды: V=xyh (x,y, - стороны, h - высота), тетраэдра: V= a3 2/12, шара: V=4 r3/3.
Создать абстрактный класс - млекопитающие. Определить производные классы - животные и люди. У животных определить производные классы собак и коров. Определить виртуальные функции описания человека, собаки и коровы.
Создать класс биологических организмов с учетом их местоположения. Определить наследуемые классы - лиса, кролик и трава. Лиса ест кролика. Кролик ест траву. Лиса может умереть - определен возраст. Кролик тоже может умереть. Кроме этого определен класс - отсутствие жизни. Если в окрестности имеется больше травы, чем кроликов, то трава остается, иначе трава съедена. Если лис слишком старый он может умереть. Если лис слишком много (больше 5 в окрестности), лисы больше не появляются. Если кроликов больше лис, то лис ест кролика.
Создать абстрактный базовый класс с виртуальной функцией - корни уравнения. Создать производные классы: класс линейных уравнений и класс квадратных уравнений. Определить функцию вычисления корней уравнений.
Создать класс комната, имеющая площадь. Определить конструктор и метод доступа. Создать класс однокомнатных квартира, содержащий комнату и кухню (ее площадь), этаж (комната содержится в классе однокомнатная квартира). Определить конструкторы, методы доступа. Определить производный класс однокомнатных квартир разных городов ( дополнительный параметр - название города). Определить конструкторы, деструктор и функцию печати.
Создать класс хвост, имеющий длину. Определить конструкторы и метод доступа. Создать класс собачьих, содержащий класс хвост. Дополнительно есть цвет (указатель на строку), возраст. Определить конструкторы и деструктор. Определить производный класс собака, имеющий дополнительно кличку(указатель на строку). Определить конструкторы, деструкторы и функцию печати.
Создать класс двигатель, имеющий мощность. Определить конструкторы и метод доступа Создать класс машин, содержащий класс двигатель. Дополнительно есть марка (указатель на строку), цена. Определить конструкторы и деструктор. Определить производный класс грузовик, имеющий дополнительно грузоподъемность. Определить конструкторы, деструкторы и функцию печати.
Создать класс жесткий диск, имеющий объем (Мбайт). Определить конструкторы и метод доступа. Создать класс компьютер, содержащий класс жесткий диск. Дополнительно есть марка (указатель на строку), цена. Определить конструкторы и деструктор. Определить производный класс компьютеров с монитором, имеющий дополнительно размер монитора. Определит конструкторы, деструкторы и функцию печати.
Создать класс процессор, имеющий мощность (МГц). Определить конструкторы и метод доступа. Создать класс компьютер, содержащий класс процессор. Дополнительно есть марка (указатель на строку), цена. Определить конструкторы и деструктор. Определить производный класс компьютеров с монитором, имеющий дополнительно размер монитора. Определит конструкторы, деструкторы и функцию печати.
Создать класс колесо, имеющий радиус. Определить конструкторы и метод доступа. Создать класс машин, содержащий класс колесо. Дополнительно есть марка (указатель на строку), цена. Определить конструкторы и деструктор. Определить производный класс грузовик, имеющий дополнительно грузоподъемность. Определить конструкторы, деструкторы и функцию печати.