ПилипчукО.П., вчитель інформатики Гаврилівської ЗОШ І-ІІІ ступенів Теофіпольського району Хмельницької області
Моделювання звичайних дробів засобами об'єктноорієнтованого програмування (C#)
Перехід до об'єктноорієнтованого програмування для тих, хто вихований на процедурному стилі, виявляється досить непростим. Наведений нижче матеріал допоможе зробити перші кроки у ООП.
Задача
Створити клас для забезпечення виконання операцій зі звичайними дробами.
Теоретичні відомості
Для реалізації проекту потрібно розуміти основи об’єктноорієнтованого підходу до розробки програм.
В подібній ситуації програміст розробляє новий клас даних, після чого може користуватися об’єктами цього класу поряд з об’єктами стандартних типів, на зразок:
int A;
Drib B,C,D;
і далі в програмі:
D=B+D;
тощо.
Вдало спроектовані класи значно прискорюють і спрощують розробку великих програм. Щоб при побудові виразів повноцінно користуватися даними нового типу (тобто, об'єктами нового класу), слід також описати правила виконання операцій над ними. Якщо це якась з операцій, які вже використовуються для даних інших типів, то такий опис називають перевантажуванням операції. Термін "перевантажування" тут означає, що раніше використовувана операція набуває додаткового нового змісту.
У наведеній програмі для класу Drib здійснене перевантажування операції додавання. Лише в такому разі у програмі можна користуватися операцією додавання даних цього типу.
Хід розробки
1. Створимо новий консольний проект і перед словами class Program розмістимо опис класу Drib . Обмежимось для початку мінімальною функціональністю класу Drib :
- для створення об'єктів розробимо конструктор, який за отриманим в якості аргумента рядком виду "34/56" формуватиме об'єкт класу
Drib ;
- розробимо метод ToString(), при виклику якого буде формуватися рядкове подання дробу;
- перевантажимо операцію додавання для того, щоб можна було записувати вирази і отримувати результат додавання дробів.
class Drib
{ |
початок опису класу |
int chis;
int znam; |
два цілочисельні поля: чисельник та знаменник |
public Drib(string S)
{ |
початок опису конструктора |
string [] a=new string[2];
a=S.Split('/'); |
а - масив з двох рядків для зберігання підрядків, виділених з рядка при виклику методу Split('/').Аргумент '/' - символ-розділювач підрядків у рядку. |
chis=Convert.ToInt16(a[0]);
znam=Convert.ToInt16(a[1]);
} |
поле chis отримує значення чисельника записаного в рядку дробу, а поле znam - знаменника.
Кінець опису конструктора |
public new string ToString()
{
return chis.ToString() +"/"+znam.ToString();
} |
Реалізація методу ToString():повертає рядок, що складається з рядкових представлень чисельника та знаменника, між якими вставлений символ ' /' |
public static Drib operator+ (Drib d1,Drib d2)
{ |
Початок опису операторного методу для перевантажування операції додавання. Формальні параметри d1 та d2 в межах методу відіграють роль доданків. |
Drib d=new Drib ("1/1"); |
допоміжний дріб для обчислення суми |
d.chis=d1.chis*d2.znam+d1.znam*d2.chis; |
знаходимо чисельник за відомими полями доданків |
d.znam=d1.znam*d2.znam; |
знаходимо знаменник |
return d;
} |
повертаємо отриманий дріб - суму аргументів |
} |
кінець опису класу Drib |
2. Готово! Можна розпочати випробування
class Program
{
public static void Main(string[] args)
{
DribF=new Drib ("1/3"); // змінна F ініціалізується значенням 1/3
DribG=new Drib ("1/2"); // змінна G ініціалізується значенням 1/2
F=F+G; // додавання дробів
Console.Write(F.ToString()); // виведення дробу на екран
Console.ReadKey(true);
}
}
Завдання
- Доповнити клас
Drib ще одним конструктором, який матиме два аргументи - цілі значення чисельника та знаменника.
- Вдосконалити код класу так, щоб можна було оперувати мішаними дробами (з цілою і дробовою частинами).
- Виконати перевантажування інших арифметичних операцій.
- Вдосконалити код класу
Drib так, щоб при виконанні всіх операцій (зокрема при виклику конструкторів) виконувалося скорочення дробу.
Примітка. Для цього можна створити доступну тільки в межах класу функцію і в потрібний момент викликати її.
Интернет реклама
|