МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ «ЛЬВІВСЬКА ПОЛІТЕХНІКА»
/
РОЗРОБЛЕННЯ КЛАСУ C# ТА ПЕРЕВАНТАЖЕННЯ ОПЕРАЦІЙ
Звіт до лабораторної роботи №2
з дисципліни:
"ОПЕРАЦІЙНІ СИСТЕМИ"
Варіант №22
Мета роботи:вивчити основні аспекти розробки класів та навчитись перевантажувати операції в С#.
Завдання
№
п/п
Завдання
А. Розробити клас згідно зазначеного опису:
Всі поля класу мають бути приватними.
Зовнішній доступ до полів класу реалізувати через властивості.
Поля, що є результатом обчислень над іншими полями класу, мають мати завжди найсвіжішу інформацію (реалізувати це у функціях властивостей).
Передбачити для об’єктів поля readonly (це можуть бути поля для дати народження, серійного номера тощо).
Передбачити статичні поля (лічильник об’єктів та інша статистична інформація) та статичні методи (наприклад, для виведення інформації про клас).
Передбачити та перевантажити декілька конструкторів. Обов’язково має бути конструктор «за замовчуванням», тобто такий, який не приймає жодних параметрів та моделює об’єкт за замовчуванням.
Інформацію про стан об’єкта та внесення в нього змін протоколювати в окремому файлі з назвою “<ім’я об’єкта>.txt” (див. приклад в конспекті лекцій), тобто для кожного об’єкта свій файл протоколу. Відкриття файла здійснюється при створенні об’єкта, тобто в конструкторі, а закриття файла журналу в методі Dispose() (реалізація інтерфейсу IDisposable).
Б. Для об’єктів розробленого класу перевантажити зазначені в завданні операції.
В. Продемонструвати роботу з об’єктами розробленого класу.
22
Клас Яблуко: сорт, колір, середня вага, коеф. сочності, середній термін достигання (в днях), кількість зерняток, термін зберігання у сирому виді (в днях).
Обчислювальні поля: термін зберігання у консервованому вигляді = термін зберігання у сирому вигляді / коеф. сочності; середня кількість яблук на дереві = 300 / кількість зерняток.
Обмеження: назва сорту не довше 12 символів; кількість зерняток не менше 3 і не більше 10; середня вага не більше 1 кг.
Перевантажені операції:
1. {<об’єкт яблуко>+<об’єкт яблуко>} – повертає новий об’єкт яблуко, назва сорту якого складається з перший трьох букв схрещених об’єктів, колір приймається правого об’єкта, решта параметрів беруться за найкращими значеннями з обох об’єктів.
2. {<об’єкт яблуко>+<число int>} – повертаємо дифікований об’єкт яблуко, в якого збільшена кількість зерняток на вказане число.
3. {<об’єкт яблуко>!=<об’єкт яблуко>} – повертаєtrue, якщо середні вага об’єктів не співпадають.
Код програми
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Text;
usingSystem.Threading.Tasks;
namespace lab2
{
classApple
{
privatestringsort;//сорт
privatestringcolor;//колір
privatedoubleweight;//середня вага
privatedoublesochnіst;//коеф. сочності
privateintripen;//середній термін достигання(дні)
privateintkernel;//кількість зернят
privateintdataX;//термін придатності(дні)
privatedoubledet;//термін зберігання у консервованому вигляді
privateintth;//середня кількість яблук на дереві
publicApple() { }
publicApple(stringsort = "", stringcolor = "", doubleweight = 0, doublesochnіst = 0, intripen = 0, intkernel = 0, intdataX = 0, doubledet = 0, intth = 0)
{
this.sort = sort;
this.color = color;
Weight = weight;
this.sochnіst = sochnіst;
this.ripen = ripen;
Kernel = kernel;
this.dataX = dataX;
this.det = dataX / sochnіst;
this.th = 300 / dataX;
}
publicintKernel
{
get { returnkernel; }
set
{
if (value>= 3 &&value<= 12)
kernel = value;
else
{
Console.WriteLine("Недопустиме число зернят!");
System.Environment.Exit(1);
}
}
}
/* publicstringSort
{
get { returnsort; }
set
{
if (value>=3 &&value<=12 )
sort = value;
else
{
Console.WriteLine("Назва сорту перевищена!");
System.Environment.Exit(1);
}
}
}*/
publicdoubleWeight
{
get { returnweight; }
set
{
if (value<= 1)
weight = value;
else
{
Console.WriteLine("Перевищено середню вагу!");
System.Environment.Exit(1);
}
}
}
publicstaticbooloperator ==(Apple A, Apple B)
{
return (A.weight * A.sochnіst == B.weight * B.sochnіst);
}
publicstaticbooloperator !=(Apple A, Apple B)
{
return (A.weight * A.sochnіst != B.weight * B.sochnіst);
}
publicstaticAppleoperator +(Apple A, Apple B)
{
Apple C = newApple();
C.sort = A.sort.Remove(3) + B.sort.Remove(3);
C.color = A.color;
if (A.weight>B.weight)
C.weight = A.weight;
else
C.weight = B.weight;
if (A.sochnіst>B.sochnіst)
C.sochnіst = A.sochnіst;
else
C.sochnіst = B.sochnіst;
if (A.ripen>B.ripen)
C.ripen = A.ripen;
else
C.ripen = B.ripen;
if (A.kernel>B.kernel)
C.kernel = A.kernel;
else
C.kernel = B.kernel;
if (A.dataX>B.dataX)
C.dataX = A.dataX;
else
C.dataX = B.dataX;
C.det = C.dataX / C.kernel;
C.th = 300 / C.kernel;
return C;
}
publicstaticAppleoperator +(Apple A, int B)
{
Apple C = newApple();
C.sort = A.sort;
C.color = A.color;
C.weight = A.weight;
C.sochnіst = A.sochnіst;
C.ripen = A.ripen;
C.kernel = A.kernel + B;
C.dataX = A.dataX;
C.det = A.det;
C.th = A.th;
return C;
}
publicvoidOut()
{
Console.WriteLine("Сорт " + sort);
Console.WriteLine("Колiр " + color);
Console.WriteLine("Середня вага " + weight);
Console.WriteLine("Коефiцiєнтсочностi " + sochnіst);
Console.WriteLine("Середнiйтермiн достигання(днiв) " + ripen);
Console.WriteLine("Кiлькiсть зерняток " + kernel);
Console.WriteLine("Термiнзберiгання у сирому видi(днiв) " + dataX);
Console.WriteLine("Термiнзберiгання у консервованому видi (днiв) " + det);
Console.WriteLine("Середня кiлькiсть яблук на деревi " + th);
}
}
classProgram
{
staticvoidMain()
{
Apple a = newApple("Семеренко", "green", 0.5, 1, 69, 10, 50);
Apple b = newApple("Голден", "red", 0.37, 0.4, 80, 6, 65);
Apple c = newApple();
Apple d = newApple();
a.Out();
Console.WriteLine();
b.Out();
c = a + b;
d = c + 3;
Console.WriteLine();
Console.WriteLine(" Новий сорт яблук");
c.Out();
if (a != b)
{
Console.WriteLine();
Console.WriteLine("Середня вага i коефiцiєнтсочностi не спiвпадають!!!");
}
else
{
Console.WriteLine();
Console.WriteLine("Середня вага i коефiцiєнтсочностiспiвпадають!!!");
}
Console.WriteLine(); Console.WriteLine("Кiлькiсть зернят нового сорту збiльшилось на 3");
d.Out();
Console.WriteLine();
}
}
}
Результат виконання програми
/
Висновки: на даній лабораторній роботі я вивчив основні аспекти розробки класів та навчився перевантажувати операції в С#.