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

7 лабораторная работа ОП

.pdf
Скачиваний:
3
Добавлен:
01.12.2023
Размер:
559.02 Кб
Скачать

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

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

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

ПОЛИМОРФИЗМ

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

Выполнил: Студентка гр. 711-2

_______ Е. П. Толстолес

02.03.2022

Принял:

Инженер КИБЭВС

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

02.03.2022

Томск 2022

 

2

 

 

Содержание

 

1

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

3

2

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

5

2.1

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

5

2.2

Процесс выполнения программы и ввод данных..........................................

13

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

15

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

16

3

1 Введение

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

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

Примечание: для выполнения заданий необходимо разбиться на группы по 2-3 человека. Для выполнения задания обязательно использование конструкторов и деструкторов так же необходимо предварительно составить UML диаграмму. Задание для каждого варианта звучит следующим образом:«В программе продемонстрировать функциональность разработанных классов и полиморфное поведение». Все данные для заполнения полей необхо димо вводить с клавиатуры. Обязательно использование абстрактных классов,

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

Задание 1: Описать классы «Шахматная фигура», «Легкая фигура», «Тяжелая фигура», «Пешка», «Король», «Слон», «Ладья». Выстроить правильную иерархию наследования этих классов, определить какие из классов должны быть абстрактными, какие методы абстрактными или виртуальными.

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

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

Полиморфизм — одна из трех основных парадигм ООП. Если говорить кратко, полиморфизм — это способность объекта использовать методы производного класса, который не существует на момент создания базового. Для

4

тех, кто не особо сведущ в ООП, это, наверно, звучит сложно. Поэтому рассмотрим применение полиморфизма на примере.

Предположим, на сайте нужны три вида публикаций — новости, объявления и статьи. В чем-то они похожи — у всех них есть заголовок и текст,

уновостей и объявлений есть дата. В чем-то они разные — у статей есть авторы,

уновостей — источники, а у объявлений — дата, после которой оно становится не актуальным.

Самые простые варианты, которые приходят в голову — написать три отдельных класса и работать с ними. Или написать один класс, в которым будут все свойства, присущие всем трем типам публикаций, а задействоваться будут только нужные. Но ведь для разных типов аналогичные по логике методы должны работать по-разному. Делать несколько однотипных методов для разных типов (get_news, get_announcements, get_articles) — это уже совсем неграмотно. Тут нам и поможет полиморфизм.

5

2Ход работы

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

Согласно условию задания, листинг исходного кода программы задания 1

будет иметь вид: using System;

namespace _1000_7

{

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

{

6

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

{

7

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

8

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

}

9

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() { }

10

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 шаг, кроме края";

}

}