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

laba7

.pdf
Скачиваний:
14
Добавлен:
29.10.2021
Размер:
519.98 Кб
Скачать

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

«ТОМСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ СИСТЕМ УПРАВЛЕНИЯ И РАДИОЭЛЕКТРОНИКИ» (ТУСУР) Кафедра безопасности информационных систем (БИС)

Отчет по лабораторной работе №7

по дисциплине «Основы программирования» Тема работы: Полиморфизм

Студенты гр. 730-2

_______Подойницын К.В.

_______Астра Г.А.

_______Фатеев А.В. 12.06.2021

Принял Инженер научно-технического отдела ЦСП

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

12.06.2021

2021

Содержание Введение………………………………………………………….3

Теоретические сведения по теме лабораторной работы………4

Ход работы……………………………………………………….5-12

Заключение………………………………………………………13

Список использованных источников…………………………..14

1 Введение

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

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

2 Теоретические сведения по теме лабораторной работы

Метод Main является точкой входа для каждого приложения C# и вызывается общеязыковой средой выполнения (CLR) при запуске программы. В приложении, использующем инструкции верхнего уровня, метод Main создается компилятором и содержит все инструкции верхнего уровня.

Методы объявляются в классе, структуре или интерфейсе путем указания уровня доступа, такого как public или private, необязательных модификаторов, таких как abstract или sealed, возвращаемого значения, имени метода и всех параметров этого метода. Все эти части вместе представляют собой сигнатуру метода.

Вызов метода в объекте аналогичен доступу к полю. После имени объекта добавьте точку, имя метода и круглые скобки. Аргументы перечисляются в этих скобках и разделяются запятыми. Таким образом, методы класса Motorcycle могут вызываться, как показано в следующем примере:

При передаче в метод объекта ссылочного типа передается ссылка на этот объект. То есть метод получает не сам объект, а аргумент, который указывает расположение объекта. При изменении члена объекта с помощью этой ссылки это изменение отражается в аргументе в вызывающем методе, даже если объект передается по значению.

Методы могут возвращать значение вызывающему объекту. Если тип возврата, указываемый перед именем метода, не void, этот метод может возвращать значение с помощью ключевого слова return . Инструкция с ключевым словом return , за которым следует значение, соответствующее типу возврата, будет возвращать это значение объекту, вызвавшему метод.

3 Ход работы

Задание

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

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

Листинг исходного кода программы:

using System;

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)

{

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); 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)

{

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)

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