Міністерство освіти і науки України Львівський національний університет імені Івана Франка Факультет електроніки та комп’ютерних технологій Кафедра радіофізики та комп’ютерних технологій ЛАБОРАТОРНА РОБОТА № 4 з курсу “Об’єктно орієнтоване програмування” “1-й проект ООП: Sphere” Виконав: Cт. ФеІ-11 Ткач В.М Перевірив: ас. Шевчук В.Д. Львів 2021 Звіт Мета: Вивчити послідовність оголошення класу Sphere у консольному режимі роботи Delphi, оголошення двох об’єктів MySphere і nSphere цього класу в описовому розділі головної програми, яка містить цей клас, створення цих об’єктів у виконуваному розділі головної програми і використання методів цих об’єктів для обчислення характеристик геометричної сфери заданого радіуса R. ХІД РОБОТИ 1. Створюємо папку My_Sphere, запускаємо Delphi у консольному режимі його роботи File / New / Other: 2. Отримаємо вікно, у якому обираємо Console Application > OK: 3. Отримаємо наступне вікно: 4. Стираємо виділену частину тексту, який згенерувало нам середовище, і записуємо цей порожній проект у папку My_Sphere: File / Save Project As… Одержимо таке вікно: 5. Створюємо у папці My_Sphere для класу Sphere командою File / New / Unit - Delphi окремий модуль – текстовий файл, який, наприклад, називаємо SphereU.pas. 6. Вмістом цього текстового файлу буде модуль Unit SphereU;, який має два стандартних розділи: Interface та Implementation. 7. У розділі Interface оголошуємо елементи класу Sphere (його поле R зі специфікатором доступу Private і заголовки методів зі специфікатором доступу Public). У розділі Implementation програмуємо реалізацію (оператори) усіх методів класу Sphere. Оскільки в одному модулі можна описати декілька різних класів, то заголовки методів у розділі Implementation, спільному для усіх класів, повинні мати складене ім’я: <Ім’я_Класу>.<Ім’я_Методу>. Увага! При наявності в одному модулі декількох класів, необхідно використовувати посилені (Strict) специфікатори доступу, наприклад Strict Private або Strict Protected. 8. Приєднуємо новостворений модуль до нашого проекту. Для цього, у спадному меню проекту обираємо: 9. У вікні, що відкрилося, обираємо ім’я файлу нашого модуля і натискаємо кнопку Open. 10. В описовій частині Var головної програми оголошуємо три змінні: 2 об’єкти класу Sphere і одну робочу змінну. 11. У виконуваному розділі програми створюємо два об’єкти різного радіусу, використовуючи, в одному випадку, стандартний конструктор Create, а в іншому – власний конструктор Creat. ПРОКОМЕНТОВАНИЙ ТЕКСТ ПРОГРАМИ Unit SphereU; Іnterface // описовий розділ модуля SphereU Uses SysUtils; Const Pi = 3.14159; Type Sphere = class(TObject) // початок оголошення класу Sphere Private // специфікатор доступу R : Real; // поле класу Sphere – її радіус Public // Методи класу Sphere Constructor Create; // явно оголошений стандартний конструктор Create Constructor Creat(x: Real); // власний конструктор із параметром x Procedure SetRadius(newRadius : Real); Function GetRadius : Real; Function GetDiameter : Real; Function GetLKola : Real; Function GetArea : Real; Function GetVolume : Real; Procedure DisplayStatistics; End; // завершення розділу оголошення класу Sphere Implementation // реалізаційний розділ модуля SphereU Constructor Sphere.Create; // реалізація стандартного конструктора Create Begin R := 1.0; End; Constructor Sphere.Creat (x:Real); // реалізація власного конструктора Creat Begin R := x; End; // Реалізація методів класу Sphere Procedure Sphere.SetRadius (newRadius: Real); Begin if R > 0 then R := newRadius else R := 1.0; End; Function Sphere.GetRadius:Real; Begin GetRadius := R; End; Function Sphere.GetDiameter:Real; Begin GetDiameter := 2.0 * R; End; Function Sphere.GetLKola: Real; Begin GetLKola := PI * GetDiameter; End; Function Sphere.GetArea: Real; Begin GetArea := 4.0 * PI * R * R; End; Function Sphere.GetVolume : Real; Var radiusCubed: Real; Begin radiusCubed := R * R * R; GetVolume := (4.0 * PI * radiusCubed) / 3.0; End; Procedure Sphere.DisplayStatistics; Begin Writeln ('Radius = ', GetRadius); Writeln ('Diameter = ',GetDiameter); Writeln ('LKola = ' ,GetLKola:10:5); Writeln ('Area = ' ,GetArea:10:5); Writeln ('Volume = ', GetVolume:10:5); End; End. // завершення тексту модуля SphereU Begin MySphere := Sphere.Create; // створюємо об’єкт MySphere, використовуючи стандартний конструктор MySphere.DisplayStatistics; // виводимо на екран статистику Writeln('=========='); // друкуємо розділювач nSphere := Sphere.Creat(15.1); // створюємо об’єкт nSphere використовуючи власний конструктор nSphere.DisplayStatistics; // виводимо на екран статистику Writeln('**********'); // друкуємо розділювач newRadius := 5.1; // робочій змінній присвоюємо значення радіусу кулі MySphere.SetRadius(newRadius); // записуємо нове значення радіусу кулі у поле R класу Sphere Writeln('N_LKola = ', 2.0 * Pi * MySphere.GetRadius); MySphere.DisplayStatistics; // виводимо на екран статистику Writeln; Readln; // затримка показу результатів на екрані end. ТЕСТУВАННЯ ПРОГРАМИ |