Лабораторная работа №11
Тема: Принудительное наследование. Абстрактные классы и абстрактные методы в C#
Цель: изучение принципов реализации базового принципа ООП «Наследование» на языке C# с применением абстрактных классов, освоение техники применения абстрактных классов для частичной реализации базовых классов при использовании принудительного наследования.
Теоретические положения
Абстрактный класс.
Предположим в базовом классе для какого-то наследуемого метода трудно придумать осмысленное наполнение. Например, реализация иерархии геометрических фигур от базового класса Figure, в котором определен метод Draw. Задачей этого метода является рисование фигуры, однако для Figure тело Draw придется, скорее всего, оставить пустым, так как нарисовать абстрактную фигуру достаточно проблематично. В этом случае может быть объявлен абстрактный метод без его наполнения каким-либо содержимым. Для этого нужно при объявлении метода указать модификатор abstract и не определить ему тела.
Класс, в котором существует хотя бы один абстрактный метод называется абстрактным классом. Класс, содержащий один или более абстрактных методов должен быть объявлен как абстрактный с помощью модификатора abstract. Невозможно создать ни одного объекта такого класса. Абстрактный класс не может содержать какие-либо объекты, а также абстрактные конструкторы и абстрактные статические методы. Каждый дочерний класс, отнаследованный от абстрактного обязан реализовать все абстрактные методы, иначе класс-потомок также становится абстрактным и ему также нужно будет указать модификатор abstract.
Абстрактный метод автоматически становится виртуальным, так что модификатор virtual при объявлении такого метода не нужен. Если же попытаться его указать произойдет ошибка на этапе компиляции. В классе потомке при реализации абстрактного метода в объявлении нужно будет указать ключевое слово override.
Рассмотрим пример:
using System;abstract class Figure{ // Абстрактный класс public Figure(string n){ name=n; } private string name; public abstract void Draw(); // Абстрактный метод public void ShowName(){ Console.WriteLine(name); }}class Rectangle:Figure{ int width; int height; public Rectangle(int height,int width):base("Прямоугольник"){ this.width = width; this.height = height; } public override void Draw(){ // реализация абстрактного метода for(int i=0;i<height;i++){ for(int j=0;j<width;j++){ Console.Write("*"); } Console.WriteLine(); } }} class Sample{ static void Main() { try{ Rectangle rect = new Rectangle(3,8); rect.ShowName(); rect.Draw(); } catch(Exception e){ Console.WriteLine(e.Message); } Console.Read(); }}Вывод:
Прямоугольник************************
Unit-тесты на C#
Рассмотрим процесс создания, запуска и настройки набора модульных тестов с помощью платформы модульных тестов Майкрософт для управляемого кода и обозревателя тестов Visual Studio.
Рассмотрим простой пример создания unit-тестов. Для этого создается консольное приложение Calc, которое выполняет деление и суммирование чисел, и класс Calculator, в котором будут производиться математические операции:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Calc
{
// Выполнение простых математических действий над числами
public class Calculator
{
public double Div(double n1, double n2)
{
// Проверка деления на "0"
if (n2 == 0.0D)
throw new DivideByZeroException();
return n1 / n2;
}
// Получаем результат сложения чисел и их увеличения на единицу
public double AddWithInc(double n1, double n2)
{
return n1 + n2 + 1;
}
}
}
namespace Calc
{
class Program
{
static void Main(string[] args)
{
}
}
}
Так, в методе Div производится операция деления числа n1 на число n2. Если передаваемое число n2 будет равняться нулю, то такая ситуация приведет к исключению. Для этого знаменатель этой операции проверяется на равенство нулю.
Метод AddWithInc производит сложение двух передаваемых чисел и инкрементацию полученного результата суммирования на единицу.
На следующем шаге необходимо добавить в решение проект тестов по шаблону Unit Test Project (.NET Framework) с именем CalcTests.
Дата добавления: 2021-12-14; просмотров: 393;