Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Labolatornaya_rabota_7_po_OP

.pdf
Скачиваний:
4
Добавлен:
27.11.2022
Размер:
820.68 Кб
Скачать

Министерство науки и высшего образования Российской Федерации Федеральное государственное бюджетное образовательное учреждение высшего образования

«ТОМСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ СИСТЕМ УПРАВЛЕНИЯ И РАДИОЭЛЕКТРОНИКИ» (ТУСУР)

Факультет безопасности (ФБ)

Кафедра безопасности информационных систем (БИС)

ОСНОВЫ ОБЪЕКТНО-ОРИЕНТИРОВАННОГО ПРОГРАММИРОВАННИЯ Отчет по лабораторной работе №6

по дисциплине «Основы программирования»

Студент гр. 731-2

__________ А.С.Батаев

__________

Принял Инженер КИБЭВС

__________ __________ Д.Р. Уразаев

__________

Томск 2022

2

Оглавление

1

Введение.................................................................................................................

3

2

Ход работы.............................................................................................................

3

3

Заключение ..........................................................................................................

11

4

Список используемой литературы ....................................................................

12

3

1 Введение

Цель работы: Овладеть навыками использования механизмов инкапсуляции, наследования и полиморфизма.

Задание: составить консольное приложение для решения нижеприведенных задач согласно варианту, согласованному с преподавателем,

вводя данные в ходе выполнения программы. Для выполнения предварительно ознакомьтесь с соответствующими разделами данного пособия.

Примечание: Для выполнения задания обязательно использование конструкторов и деструкторов так же необходимо предварительно составить

UML диаграмму. Задание для каждого варианта звучит следующим образом: «В

программе продемонстрировать функциональность разработанных классов и полиморфное поведение». Все данные для заполнения полей необходимо вводить с клавиатуры. Обязательно использование абстрактных классов,

интерфейсов, конструкторов и деструкторов.

2 Ход работы

4

2.1 Теоретические сведения

Класс является основой для создания объектов. Если структура объединяет разнородные по типам переменные, то в классе определяются данные и код, который работает с этими данными. Объекты являются экземплярами класса. Методы и переменные, составляющие класс, называются членами класса. При определении класса объявляются данные, которые он содержит, и код, работающий с этими данными. Данные содержатся в переменных экземпляра, которые определены классом, а код содержится в методах. В С# определены несколько специфических разновидностей членов класса. Это — переменные экземпляра, статические переменные, константы,

методы, конструкторы, деструкторы, индексаторы, события, операторы и свойства. Непосредственно инициализация переменных в объекте (переменных экземпляра) происходит в конструкторе. В классе могут быть определены несколько конструкторов.

2.2 Первое задание

Поставленная задача для варианта 3, выглядит так:

Описать классы «Шахматная фигура», «Легкая фигура», «Тяжелая фигура», «Пешка», «Король», «Слон», «Ладья». Выстроить правильную иерархию наследования этих классов, определить какие из классов должны быть абстрактными, какие методы абстрактными или виртуальными. Описать конструкторы и деструкторы разработанных классов. Создать по одному объекту каждого класса, для которого это возможно, поместить их в один массив. Считать, что все элементы массива это фигуры на доске. Для объекта класса «Король» метод Сastling (возможность рокировки) и вывести на экран все свойства каждого из объектов. Он представлен ниже.

5

Рисунок 2.3 – UML диаграмма кода

namespace Lab7

{

class Program

{

static void Main(string[] args)

{

string color = " "; char pos;

int posN, colorN; Console.WriteLine("1. Пешка"); do

{

Console.Write("Выберите чвет: 1 - белый, 2 - церный\n"); colorN = int.Parse(Console.ReadLine());

if (colorN == 1)

{

color = "Белый";

}

else if (colorN == 2)

{

color = "Черный";

}

}

while (colorN != 1 && colorN != 2); do

{

Console.Write("Выберите букву клетки: A - H\n"); pos = char.Parse(Console.ReadLine());

}

while (pos == ' '); do

{

Console.Write("Выберите номер клетки (1-8):"); posN = int.Parse(Console.ReadLine());

}

while (posN == 0);

ChessPawn Peshka = new ChessPawn("Пешка", color, pos, posN); Console.WriteLine("2. Король");

do

{

Console.Write("Выберите чвет: 1 - белый, 2 - церный\n"); colorN = int.Parse(Console.ReadLine());

if (colorN == 1)

{

6

color = "Белый";

}

else if (colorN == 2)

{

color = "Черный";

}

}

while (colorN != 1 && colorN != 2); do

{

Console.Write("Выберите букву клетки: A - H\n"); pos = char.Parse(Console.ReadLine());

}

while (pos == ' '); do

{

Console.Write("Выберите номер клетки (1-8):"); posN = int.Parse(Console.ReadLine());

}

while (posN == 0);

ChessKing Korol = new ChessKing("Король", color, pos, posN); Console.WriteLine("3. Слон");

do

{

Console.Write("Выберите чвет: 1 - белый, 2 - церный\n"); colorN = int.Parse(Console.ReadLine());

if (colorN == 1)

{

color = "Белый";

}

else if (colorN == 2)

{

color = "Черный";

}

}

while (colorN != 1 && colorN != 2); do

{

Console.Write("Выберите букву клетки: A - H\n"); pos = char.Parse(Console.ReadLine());

}

while (pos == ' '); do

{

Console.Write("Выберите номер клетки (1-8):"); posN = int.Parse(Console.ReadLine());

}

while (posN == 0);

ChessBishop Slon = new ChessBishop("Слон", color, pos, posN); Console.WriteLine("4. Ладья");

do

{

Console.Write("Выберите чвет: 1 - белый, 2 - церный\n"); colorN = int.Parse(Console.ReadLine());

if (colorN == 1)

{

color = "Белый";

}

else if (colorN == 2)

{

color = "Черный";

}

}

while (colorN != 1 && colorN != 2); do

{

Console.Write("Выберите букву клетки: A - H\n"); pos = char.Parse(Console.ReadLine());

}

while (pos == ' '); do

{

Console.Write("Выберите номер клетки (1-8):"); posN = int.Parse(Console.ReadLine());

}

while (posN == 0);

ChessRook Ladya = new ChessRook("Ладья", color, pos, posN);

7

ChessMan[] chessFigure = new ChessMan[4] { Peshka, Korol, Slon, Ladya }; foreach (ChessMan piece in chessFigure)

{

Console.WriteLine(piece);

}

Korol.Castling(Peshka, Ladya, Slon);

}

}

abstract class ChessMan

{

public ChessMan()

{

}

public string Name { get; set; } public string Color { get; set; } public char Position { get; set; } public int PositionNumb { get; set; }

public string PossibleMoves { get; set; } public override string ToString()

{

return $"Имя фигуры: {Name}; Цвет: {Color}; Позичия: {Position} - {PositionNumb}; Возможные ходы: { PossibleMoves}";

}

}

abstract class MinorPiece : ChessMan

{

public MinorPiece() { }

public string Type { get; private set; } = "Легкая фигура"; public override string ToString()

{

return $"Имя фигуры: {Name}; Тип: {Type}; Цвет: {Color}; Позичия: { Position} - {PositionNumb}; Возможные ходы: { PossibleMoves}";

}

}

abstract class HeavyPiece : ChessMan

{

public HeavyPiece() { }

public string Type { get; private set; } = "Тяжелая фигура"; public override string ToString()

{

return $"Имя фигуры: {Name}; Тип: {Type}; Цвет: {Color}; Позичия: { Position} - {PositionNumb}; Возможные ходы: { PossibleMoves}";

}

}

class ChessPawn : ChessMan

{

public ChessPawn(string name, string color, char position, int pos)

{

Name = name; Color = color;

Position = position; PositionNumb = pos; if (pos == 2)

PossibleMoves = $"{position}-3, {position}-4"; else

{

PossibleMoves = $"{position}-{pos + 1};";

}

}

}

class ChessKing : ChessMan

{

public ChessKing(string name, string color, char position, int pos)

{

Name = name; Color = color;

Position = position; PositionNumb = pos;

if (pos > 1 && pos < 8)

PossibleMoves = $"В любую клетку на 1 шаг"; else

{

PossibleMoves = $"В любую клетку на 1 шаг, кроме края";

}

}

public void Castling(ChessMan Korol, ChessMan Ladya, ChessMan Slon)

{

8

ChessMan[] CheckCastling = new ChessMan[2] { Korol, Slon }; bool checkPos = true;

if (Position == 'E' && (PositionNumb == 8) && Color == "Черный")

{

if (Ladya.Position == 'A' && Ladya.PositionNumb == 8 && Ladya.Color == "Черный")

{

foreach (var a in CheckCastling)

{

if (a.PositionNumb == 8 && (a.Position == 'B' || a.Position == 'C' ||

a.Position ==

'D'))

{

checkPos = false;

}

}

}

else if (Ladya.Position == 'H' && Ladya.PositionNumb == 8 && Ladya.Color ==

"Черный")

{

foreach (var a in CheckCastling)

{

if (a.PositionNumb == 8 && (a.Position == 'F' || a.Position == 'G'))

{

checkPos = false;

}

}

}

}

else if (Position == 'E' && (PositionNumb == 1) && Color == "Белый")

{

if (Ladya.Position == 'A' && Ladya.PositionNumb == 1 && Ladya.Color == "Белый")

{

foreach (var a in CheckCastling)

{

if (a.PositionNumb == 1 && (a.Position == 'B' || a.Position == 'C' ||

a.Position ==

'D'))

{

checkPos = false;

}

}

}

else if (Ladya.Position == 'H' && Ladya.PositionNumb == 1 && Ladya.Color == "Белый")

{

foreach (var a in CheckCastling)

{

if (a.PositionNumb == 1 && (a.Position == 'F' || a.Position == 'G'))

{

checkPos = false;

}

}

}

else Console.WriteLine("Рокировка невозможна!");

}

if (checkPos)

{

Console.WriteLine("Рокировка возможна!");

}

else Console.WriteLine("Рокировка невозможна!");

}

}

class ChessBishop : MinorPiece

{

public ChessBishop(string name, string color, char position, int pos)

{

Name = name; Color = color; Position = position; PositionNumb = pos;

PossibleMoves = $"По диагонали в любую сторону";

}

}

class ChessRook : HeavyPiece

{

public ChessRook(string name, string color, char position, int pos)

9

{

Name = name; Color = color;

Position = position; PositionNumb = pos;

PossibleMoves = $"По вертикали и горизонтали в любую сторону";

}

}

}

Проверка корректности написания при запуске и вводе переменных представлена на рисунке 2.1-2.2.

Рисунок 2.2 – Проверка корректности кода

10

Рисунок 2.3 – Проверка корректности кода

Соседние файлы в предмете Основы программирования