3.1. Класи та методи
Первинні вкладки
Класи
Класи – це спеціального виду конструкції, які дозволяють об’єднати ряд змінних різних типів в одне ціле. Крім власне даних, класи зазвичай включають підпрограми (в термінології java - методи) і можуть включати блоки(сукупність інструкцій між фігурними дужками {}) та інші класи(внутрішні класи). Таким чином утворюються нові типи даних.
Оголосити найпростіший клас можна так:
1 2 3 4 5 6 | class Symka { double width; double height; double depth; double symkaVolume; } |
Для його оголошення використовується ключове слово class та назва класу, далі іде тіло класу у фігурних дужках {}. Проте, хоч клас існує, ми не можемо так просто його використовувати. Ми повинні спочатку створити екземпляр даного класу (об’єкт). Для цього необхідно написати наступну інструкцію:
1 2 | Symka mySymka1=new Symka(); // створення екземпляру об'єкта |
де Syma – назва класу, mySymka – назва об'єктної змінної, яка посилатиметься на наш екземпляр класу (об'єкт типу Symka), new Symka() – створює об’єкт(при цьому відбувається виділення пам’яті під об’єкт). Таким чином ми створили першу сумку. Щоб створити другий об'єкт використовується аналогічна інструкція:
1 2 | Symka mySymka2=new Symka(); //як бачимо змінилась лише назва змінної |
Інструкція звернення до властивостeй об'єкту записується в такій формі - назваОб’єкту.змінна:
1 2 | mySymka1.width=10; // доступ до властивості width |
Методи
Методи в java – це аналог підпрограм, функцій, процедур в інших мовах програмування. За допомогою методів ми виносимо текст повторюваного коду програми окремо в тіло методу, після чого можна викликати даний метод з будь-якого місця програми, безліч разів.
Спрощене оголошення та визначення методу, який ми зараз будемо використовувати, має вигляд:
1 2 3 4 5 6 7 | тип_повернення назва_методу(параметри){ //тіло методу; інструкція1; інструкція2; ….. інструкціяN; } |
Тип_повернення – результат виконання методу, наприклад він може повертати об’єм сумки, тоді тип_повернення буде double. Якщо метод нічого не повертає, то вказується слово ключове слово void.
Виклик методу здійснює наступна інструкція:
1 2 | назва_методу(параметри) // виклик методу |
Взагалі в термінології мов програмування для виклику методу використовуються аргументи, а в самому методі – це уже параметри, оскільки передаються лише значення змінних, а не самі змінні. Аргументи та параметри повинні бути одного і того ж типу. Якщо ми передаємо цілочисельне значення, то і параметр повинен бути цілочисельним і т.п. Тобто в методі створюються нові змінні. В деяких мовах, наприклад в С++, як аргумент можна передати посилання на певну змінну, таким чином її можна буде модифікувати в функції через вказівник на дану змінну. В Java в метод передаються лише значення змінних, тому розрізнення аргументів і параметрів менш суттєве і ми там і там використовуватимемо термін «параметр». Об'єкти ж в методи передаються по посиланню. Тобто, при передачі в якості аргументу об'єкта, буде передане посилання на об'єкт, а не створений новий об'єкт.
Конструктори
Замість методу symkaValue(), який в нас заповнює змінні об’єкту значеннями ми можемо створити метод, який буде мати назву таку ж як і клас, тобто Symka(aWidth, aHeight, aDepth). Це дасть нам можливість ще скоротити програму, оскільки при створенні об’єкту ми зможемо зразу ж задавати розміри сумки.
1 2 | Symka mySymka1 = new Symka(10.0, 15.0, 20.0) // створення сумки з розмірами 10х15х20 |
Такі методи носять назву “конструктор класу”. Коли ми писали просто new Symka(); то віртуальна машина використовувала конструктор по замовчуванню без параметрів, який практично нічого корисного для нас не робив. Тепер же ми можемо використовувати новий створений нами конструктор.