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

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

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

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

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

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

ОСНОВЫ ОБЪЕКТНО-ОРИЕНТИРОВАННОГО ПРОГРАММИРОВАНИЯ

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

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

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

Принял:

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

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

26.02.2022

Томск 2022

 

2

 

 

Содержание

 

1

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

3

2

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

5

2.1

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

5

2.2

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

12

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

14

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

15

3

1 Введение

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

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

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

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

Задание 1: Создать класс EngMoney для работы с устаревшей денежной системой Великобритании. В ней использовались фунты, шиллинги и пенсы. При этом: 1 фунт = 20 шиллингов, 1 шиллинг =12 пенсов. Денежные суммы будут задаваться в фунтах, шиллингах и пенсах и результат выдаваться также в этих величинах. Должны быть реализованы: сложение и вычитание, умножение и деление, сравнение сумм.

Задание 2: Создать класс Fraction для работы с дробными числами. Число должно быть представлено двумя полями: целая часть – длинное целое со знаком, дробная часть – беззнаковое короткое целое. Реализовать арифметические операции сложения, вычитания, умножения и операции сравнения.

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

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

4

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

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

Что за концепции ООП?

Сейчас коротко о принципах, которые мы позже рассмотрим в подробностях:

Абстракция данных: подробности внутренней логики скрыты от конечного пользователя. Пользователю не нужно знать, как работают те или иные классы и методы, чтоб их использовать. Подходящим примером из реальной жизни будет велосипед — когда мы ездим на нём или меняем деталь,

нам не нужно знать, как педаль приводит его в движение или как закреплена цепь.

Наследование: самый популярный принцип ООП. Наследование делает возможным повторное использование кода — если какой-то класс уже имеет какую-то логику и функции, нам не нужно переписывать всё это заново для создания нового класса, мы можем просто включить старый класс в новый, целиком.

Инкапсуляция: включение в класс объектов другого класса, вопросы доступа к ним, их видимости.

Полиморфизм: «поли» значит «много», а «морфизм» — «изменение» или

«вариативность», таким образом, «полиморфизм» — это свойство одних и тех же объектов, и методов принимать разные формы.

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

5

2Ход работы

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

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

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

namespace _1000_7

{

class Program

{

static void Main(string[] args)

{

int a1, a2, a3, b1, b2, b3;

Console.WriteLine("Введите 1-ю сумму в порядке: фунты,

шиллинги, пенс");

a1 = int.Parse(Console.ReadLine());

a2 = int.Parse(Console.ReadLine());

a3 = int.Parse(Console.ReadLine());

Console.WriteLine("\nВведите 2-ю сумму в порядке: фунты,

шиллинги, пенс");

b1 = int.Parse(Console.ReadLine());

b2 = int.Parse(Console.ReadLine());

b3 = int.Parse(Console.ReadLine()); EngMoney a = new EngMoney(a1, a2, a3); EngMoney b = new EngMoney(b1, b2, b3);

Console.WriteLine($"Введенные данные:\n{a}\n{b}"); Console.WriteLine($"\nРезультаты:\nСложение:

{a.Sum(b)}\nВычитание: {a.Vch(b)}");

6

Console.WriteLine($"Умножение: {a.Umn(b)}\nДеление:{a.Del(b)}");

Console.WriteLine($"Сравнение: Сумма №{a.Srav(b)}\b\b\b

больше");

}

}

class EngMoney

{

private int f; private int s; private int p; public int F

{

get { return f; } set { f = value; }

}

public int S

{

get { return s; } set { s = value; }

}

public int P

{

get { return p; } set { p = value; }

}

public EngMoney(int ff, int ss, int pp)

{

f = ff; s = ss; p = pp;

}

public EngMoney Sum(EngMoney secondsum)

{

int result_f = f + secondsum.F; int result_s = s + secondsum.S; int result_p = p + secondsum.P; while (result_p >= 12)

{

result_p -= 12; result_s++;

7

}

while (result_s >= 20)

{

result_s -= 20; result_f++;

}

return new EngMoney(result_f, result_s, result_p);

}

public EngMoney Vch(EngMoney secondsum)

{

int result_f = f - secondsum.F; int result_s = s - secondsum.S; int result_p = p - secondsum.P; while (result_p < 0)

{

result_p += 12; result_s--;

}

while (result_s < 0)

{

result_s += 20; result_f--;

}

return new EngMoney(result_f, result_s, result_p);

}

public EngMoney Umn(EngMoney secondsum)

{

int psum1 = f * 240 + s * 12 + p;

int psum2 = secondsum.F * 240 + secondsum.S * 12 + secondsum.P; int result_p = psum1 * psum2;

int result_s = 0; int result_f = 0;

{

while (result_p >= 12)

{

result_p -= 12; result_s++;

8

}

while (result_s >= 20)

{

result_s -= 20; result_f++;

}

}

return new EngMoney(result_f, result_s, result_p);

}

public EngMoney Del(EngMoney secondsum)

{

int psum1 = s * 12 + f * 240 + p;

int psum2 = secondsum.F * 240 + secondsum.S * 12 + secondsum.P; int result_p = psum1 / psum2;

int result_s = 0; int result_f = 0; while (result_p >= 12)

{

result_p -= 12; result_s++;

}

while (result_s >= 20)

{

result_s -= 20; result_f++;

}

return new EngMoney(result_f, result_s, result_p);

}

public EngMoney Srav(EngMoney secondsum)

{

int result_com = 0;

int psum1 = f * 240 + s * 12 + p;

int psum2 = secondsum.F * 240 + secondsum.S * 12 + secondsum.P; if (psum1 > psum2)

9

result_com = 1; else result_com = 2;

return new EngMoney(result_com, 0, 0);

}

public override string ToString()

{

return $"{f} {s} {p}";

}

}

}

Согласно условию задания, листинг исходного кода программы задания 2 будет иметь вид:

using System;

using System.Collections.Generic; using System.Linq;

using System.Text; using System.Threading; namespace _1000_7

{

class Program

{

static void Main(string[] args)

{

int a1, a2, b11, b22; string b1, b2;

Console.WriteLine("Введите первое число в порядке: целая часть,

дробная часть");

a1 = int.Parse(Console.ReadLine());

b1 = Console.ReadLine();

Console.WriteLine("Введите второе число в порядке: целая часть, дробная часть");

10

a2 = int.Parse(Console.ReadLine());

b2 = Console.ReadLine();

for (int i = b1.Length; i < b2.Length; i++) b1 += '0'; for (int i = b2.Length; i < b1.Length; i++) b2 += '0';

b11 = int.Parse(b1);

b22 = int.Parse(b2);

Fraction Aa = new Fraction(a1, b11); Fraction Bb = new

Fraction(a2, b22);

Console.WriteLine($"\nРезультаты:\nСложение: { Aa.Sum(Bb)}\nВычитание: { Aa.Vch(Bb)}");

Console.WriteLine($"Умножение: {Aa.Umn(Bb)}\b "); Console.WriteLine($"Сравнение: Число № {Aa.Srav(Bb)}\b

больше");

}

}

class Fraction

{

private double a; private int b; public double A

{

get { return a; } set { a = value; }

}

public int B

{

get { return b; } set { b = value; }

}

public Fraction(double a, int b)

{

this.a = a; this.b = b;

}