МІНІСТЕРСТВО ОСВІТИ ТА НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА”
“Класи та об’єкти в Java”
Лабораторна робота №2
з курсу “Об’єктно-орієнтоване програмування”
МЕТА РОБОТИ
Ознайомитися із сучасною парадигмою програмування — об’єктно-орієнтованим програмуванням і реалізацією цієї парадигми в мові Java. Розібратися із правилами запису класів і вивчити їхні додаткові можливості.
КОРОТКІ ТЕОРЕТИЧНІ ВІДОМОСТІ
ПРИНЦИПИ ОБ’ЄКТНО-ОРІЄНТОВАНОГО ПРОГРАМУВАННЯ
Об’єктно-орієнтоване програмування розвивається уже більше двадцати років. Існує декілька шкіл, кожна з яких пропонує свій набір принципів роботи з об’єктами і по-своєму викладає ці принципи. Але є декілька загальноприйнятих понять. На даній лабораторній роботі ми їх вивчемо.
Абстракція
Описуючи поведінку будь-якого об’єкта, наприклад автомобіля, ми будуємо його модель. Модель, як правило, не може описати об’єкт повністю оскільки реальні об’єкти досить складні. Приходиться відбирати лише ті характеристики об’єкта, які є важливими для розв’язання поставленої перед нами задачі. Для опису вантажоперевезень важливою характеристикою буде вантажопідйомність автомобіля, а для опису автомобільних перегонів вона є несуттєвою. Для моделювання перегонів обов’язково необхідно описати метод набирання швидкості даною автівкою, а для вантажоперевезеннь це не важливо.
Ми повинні абстрагуватися від деяких конкретних деталей об’єкта. Дуже важливо вибрати правильну степінь абстракції. Поверхнева степінь дасть лише приблизний опис об’єкта, не дозволить правильно моделювати його поведінку. Глибока степінь абстракції зробить модель надто складною, перевантаженою деталями, і тому непридатною.
Наприклад, можна цілком точно предбачити погоду на завтра у певному місці, але розрахунки за такою моделлю триватимуть три доби навіть на найпотужнішому комп’ютері. Модель, що запізнюється на два дні нікому не потрібна. Точність моделі, якою користуються синоптики, всім відома. Поте розрахунки за нею займають всього декілька годин.
Опис кожної моделі робиться у вигляді одного або декількох класів (classes). Клас можна вважати проектом, зліпком, кресленням, за яким потім будуть створюватися конкретні об’єкти. Клас містить опис змінних і констант, які характеризують об’єкт. Вони називаються полями класу (class fields). Процедури, які описують поведінку об’єкта, називаються методами класу (class methods). Всередині класу можна описати і вкладені класи (nested classes) і вкладені інтерфейси. Поля, методи і вкладені класи першого рівня є членами класу (class members). Різні школи об’єктно-орієнтованного програмування пропонують різні терміни. На лабораторному практикумі ми використовуватимемо термінологію, прийняту в технології Java.
Ось зразок опису автівки:
class Car {
int maxVelocity; // Поле, що містить найбільшу швидкість автівки
int speed; // Поле, що містить поточну швидкість автівки
int weight; // Поле, що містить вагу автівки
// Інші поля...
void moveTo(int x, int у){ // Метод, що моделює переміщення автівки. Параметри х і у — не поля
int а = 1; // Локальна змінна — не поле
// Тіло метода. Тут описується закон переміщення автівки у точку (х, у)
}
// Інші методи. . .
}
Після того як опис класу завершено, можна створювати конкретні об’єкти, eкземпляри (instances) описаного класу. Створення екземплярів відбувається у три етапи, подібно до опису масивів. Спочатку оголошуються посилання на об’єкти: записується назва класу, і через пробіл перераховуються екземпляри класу, точніше, посилання на них.
Car alfaRomeo156, fordFocus, fiat500;
Потім операцією new визначаються самі об’єкти, під них виділяється оперативна пам’ять, посилання отримує адресу цієї частини пам’яті в якості свого значення.
alfaRomeo156= new Car();
fordFocus = new Car();
fiat500 = new Car();
На третьому етапі відбувається ініціалізація об’єктів, задаються початкові значення. Цей етап, як правило, суміщається з другим, якраз для цього в операції new повторяється назва класу з дужками Car (). Це так званий конструктор (constructor) класу.
Оскільки назви полів, методів і вкладених класів у всіх об’єктах одинакові, вони задані в описі класу, їх треба уточняти назвою посилання на об’єкт:
alfaRomeo156.maxVelocity = 250;
fordFocus.maxVelocity = 180;
fiat500.maxVelocity = 150;
fiat500.moveTo(35, 120);
Текстовий рядок в лапках вважається в Java об’єктом класу String. Тому можна написати: int strlen = "Це об’єкт класу String".length();
Об’єкт "рядок" виконує метод length(), один із методів свого класу String, який підраховує кількість символів у рядку. У результаті одержимо значення strlen, яке дорівнює 21.
ІНДИВІДУАЛЬНІ ЗАВДАННЯ
Варіант 2
Створити клас із назвою Employee який містить три елемента інформації у вигляді змінних екземпляра класу: ім’я (type String), прізвище (type String) і місячну заробітну платню (double). Клас повинен містити конструктор, який ініціалізує три змінних екземпляра класу. Створити методи set і get для кожної змінної екземпляра класу. Якщо місячна платня є недодатною, тоді її необхідно встановити в 0.0. Написати тестовий застосунок із назвою EmployeeTest для демонстрації властивостей класу Employee.Створити два об’єкти Employee і вивести на ектран їхню інформацію, включаючи річну платню. Збільшити платню кожног Employee на 10% і відобразити на екрані річну заробітну плату кожного Employee.
Код програми
/** * Created by Employee0 on 31.03.2016. */class Employee{ protected String name; protected String surname; protected double salary; public Employee(String name, String surname, double salary) { setName(name); setSurname(surname); setSalary(salary); } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSurname() { return surname; } public void setSurname(String surname) { this.surname = surname; } public double getSalary() { return salary; } public void setSalary(double salary) { if (salary > 0) this.salary = salary; else this.salary = 0; }}class EmployeeTest{ public static void main (String[] args) throws java.lang.Exception { Employee Employee1 = new Employee("Guz", "Volodumur", 1000); Employee Employee2 = new Employee("Dima", "Lesuk", 52.5d); System.out.println(Employee1.getName() + " " + Employee1.getSurname() + " Salary per month:" + Employee1.getSalary() + " Salary per year:" + Employee1.getSalary() * 12); System.out.println(Employee2.getName() + " " + Employee2.getSurname() + " Salary per month:" + Employee2.getSalary() + " Salary per year:" + Employee2.getSalary() * 12); System.out.println("Increase 10%"); Employee1.setSalary(Employee1.getSalary() + (Employee1.getSalary() * 10 / 100)); System.out.println(Employee1.getName() + " " + Employee1.getSurname() + " Salary per month:" + Employee1.getSalary() + " Salary per year:" + Employee1.getSalary() * 12); Employee2.setSalary(Employee2.getSalary() + (Employee2.getSalary() * 10 / 100)); System.out.println(Employee2.getName() + " " + Employee2.getSurname() + " Salary per month:" + Employee2.getSalary() + " Salary per year:" + Employee2.getSalary() * 12); }}
Результат виконання програми
Висновок
Я ознайомився із сучасною парадигмою програмування — об’єктно-орієнтованим програмуванням і реалізацією цієї парадигми в мові Java. Розібрався із правилами запису класів і вивчив їхні додаткові можливості.