Класи в Java
Клас - це "шаблон для об'єкта", який Ви створюєте в Java. Поняття класу, як і поняття об'єкта, є основою ООП (якщо Ви не знаєте, що таке ООП - прочитайте статтю "Що таке ООП").
Але давайте спочатку подумаємо, що Ви вже знаєте про клас. Думаєте, ніщо? Ви стільки разів створювали класи, скільки створювали нові проекти. Наприклад, ось код з однієї з наших попередніх статей з Java Start:
Помітили - починається код із рядка " class Test". Дійсно, методи, які Ви прописували раніше в процесі навчання, не можуть існувати поза будь-яким класом.
Але до цього Ви бачили лише частину їх можливостей - а ці можливості ого-го які 🙂 Давайте з ними розберемося!
Класи - "всередині" та "зовні"
Якщо Ви пам'ятаєте, що таке "інкапсуляція", то розумієте, що інтерфейс - те, що бачить кінцевий користувач, і те, як механізм влаштований всередині - різні речі. Так само і класи в Java мають зовнішній "інтерфейс" і внутрішню " начинку". Для створення класу Вам знадобиться вміти працювати і з тим, і з іншим.
Зовні. Як створити "об'єкт класу"
Якщо, як було сказано, клас - це " трафарет " , тоді те, що ми намалювали з цього трафарету - це " об'єкт класу " Ось, наприклад, створюються об'єкти класу " олівець "
Тим не менш, Ви повинні запам'ятати, як створюється об'єкт якогось класу.
Тобто, спочатку вказується назва класу, Наприклад "Cat". ім'я конкретному екземпляру класу - за цим ім'ям Ви будете звертатися далі в програмі. Наприклад, "Васька".
Словом "newВи даєте команду створити новий екземпляр класу.У дужках наприкінці може нічого не стояти. Тим не менш, для створення деяких об'єктів (тобто "примірників класу") знадобляться початкові параметри. Їх і треба буде вказувати в дужках.
Навіть якщо й так, то можемо заспокоїти – Ви вже це робили! Тільки не зі своїми класами і з класами, заданими в бібліотеках Java. Давайте подивимося на прикладі:
Класи. Застосування класів у програмах Java. Визначення класу та об'єкта класу. Приклади
У мові програмування Java розробка всіх програм виходить з об'єктно-ориентированном підході. Можна сказати, що Java - це строго об'єктно-орієнтована мова програмування. В основі об'єктно-орієнтованого програмування лежать поняття «клас» та «об'єкт». Програміст, який розробляє програму на основі об'єктно-орієнтованого підходу, має вміти виділяти у проблемній галузі (завданні) логічно-завершені одиниці. Кожна логічно завершена одиниця має бути реалізована як певний клас. Загалом, при програмуванні завдань із використанням об'єктно-орієнтованої парадигми, програміст повинен уміти:
- структурувати завдання на завершені логічні одиниці, які можна реалізувати окремими класами;
- при вирішенні завдання (проблеми) виділяти логічні одиниці, які мають між собою відмінності та можуть бути реалізовані як окремі класи;
- правильно визначати та будувати взаємозв'язки між різними класами у програмі;
- помічати програмний код, що багаторазово використовується, який може повторюватися в різних частинах програми, а також правильно виділяти його;
- будувати ієрархію між класами за принципом "від простого до складного";
- розуміти особливості реалізації різноманітних можливостей (інкапсуляція, спадковість, поліморфізм), що дає використання класів з метою ефективної розробки програм.
⇑
2. Визначення класу. Загальна форма оголошення класу. Ключове слово class
З погляду програмування, клас – це набір даних та методів класу. Методи оперують цими даними класу (виконують роботу над даними класу). За допомогою багатьох методів класу формується логічно-завершений програмний код, який оперує даними класу.
При використанні класів у програмах виділяються дві складові:
- оголошення класу як окремого складеного типу даних;
- реалізація об'єкта (змінної) цього класу.
Оголошення класу – це оголошення нового складового типу даних. Цей тип даних містить способи обробки цих даних.
Оголошення класу починається з ключового слова class. У найпростішому випадку загальна форма оголошення класу:
class ClassName < type variable1; type variable2; . type variableN;
type method1(parameters1) < // . >
type method2(parameters2) < // . > .
type methodN(parametersN) < // . > >;
- type - Деякий тип даних. Це може бути примітивний (базовий) тип даних або складовий (складний) тип даних, наприклад, деякий клас;
- variable1 , variable2 , …, variableN - Змінні екземпляра класу;
- method1 , method2 , …, методN – методи класу;
- parameters1 , parameters2 , parametersN - Параметри, які відповідно отримують методи класу method1 , method2 , методN .
⇑
3. Що таке об'єкт класу? Загальна форма оголошення класу. Оператор new
Об'єкт класу – це оголошення змінної. Тип змінної - це тип з ім'ям класу. Під час оголошення об'єкта класу створюється екземпляр класу. Поняття «об'єкт класу» та «примірник класу» можна вважати синонімами.
Загальний вигляд оголошення об'єкта класу в мові Java:
ClassName ObjName = new ClassName();
- ClassName – ім'я класу
- ObjName - Ім'я об'єкта (змінної) класу.
Можливий інший варіант оголошення об'єкта класу:
ClassName ObjName; ObjName = new ClassName();
Після наведених вище оголошень, змінна ObjName містить адресу пам'яті конкретного об'єкта типу ClassName .
У мові Java створення об'єкта класу відбувається у 2 етапи:
- спочатку оголошується змінна (об'єкт) типу клас. Ця змінна ще визначає об'єкт. Вона є змінною, яка може посилатися об'єкт;
- створюється конкретна фізична копія об'єкта, яка присвоюється цій змінній типу клас (виділяється пам'ять). Це здійснюється за допомогою оператора new.
⇑
4. Яка відмінність між поняттями «клас» та «об'єкт класу»?
Клас – це лише інформація про новий складовий (складний) тип даних. Фактично клас описує формат даних. Оголошення класу має декларативний характер. Ім'я класу є унікальним у всій програмі.
Об'єкт класу – це конкретний екземпляр класу, де дані класу мають деякі заповнені значення. На відміну від оголошення (декларування) класу, для об'єкта класу виділяється пам'ять. Об'єктів того самого класу може бути кілька.
⇑
5. Найпростіші приклади оголошення та використання класів, які містять дані та методи їх обробки
приклад 1. Клас Circle, що реалізує геометричну фігуру коло. У класі оголошуються:
- три приховані (private) змінні (члени даних) класу з іменами x, y, r. Ці змінні визначають координату центру кола та його радіус;
- чотири методи SetXYR(), GetX(), GetY(), GetR(). Ці методи є загальнодоступними (public). За промовчанням, методи та змінні в класах Java є загальнодоступними, якщо перед ними немає ключового слова private . Тому ці чотири методи є видимими за межами класу.
public
class Circle < private
int
x, y; // координати центру кола
private
int
r; // Радіус кола
// метод класу, який встановлює нові значення x, y, r
void SetXYR(int nx, int ny, int nr) < x = nx; y = ny; r = nr; > // методи класу, які повертають значення
int GetX() < return
x; >
int GetY() < return
y; >
int GetR() < return
r; > >
Використання класу в іншому методі
// оголосити змінну типу Circle Circle c1 = new Circle(); // c1 – об'єкт класу Circle, виділення пам'яті c1.SetXYR(3, 5, 2); // Викликати метод, який встановлює нові x, y, r
// Перевірка
int
d; d = c1. GetX (); // d = 3, виклик методу GetX() класу d = c1.GetR(); // d = 2
У наведеному вище коді оголошується об'єкт (примірник) класу з ім'ям c1 . Пам'ять для об'єкта c1 виділяється за допомогою оператора new. Операція виділення пам'яті оператором new є обов'язковою (на відміну мови C++).
Далі викликаються загальнодоступні методи класу Circle.
приклад 2. Клас MyName , що реалізує прізвище, ім'я та по батькові.
У класі оголошується:
- 3 змінні-екземпляри класу з іменами name, surname, patr;
- 7 методів класу з іменами GetName(), GetSurname(), GetPatr(), SetName(), SetSurname(), SetPatr(), SetMyName().
// оголошення класу MyName
class MyName < // Змінні-примірники класу MyName String name; // Прізвище String surname; // ім'я String patr; // по батькові
// методи класу String GetName() < return
name; > String GetSurname() < return
surname; > String GetPatr() < return ; >
void
SetName(String nName) < name = nName; > void SetSurname(String nSurname) < surname = nSurname; > void SetPatr(String nPatr) < patr = nPatr; > void SetMyName(String nName, String nSurname, String nPatr) < name = nName; surname = nSurname; patr = nPatr; > >
Використання класу MyName в іншому методі або програмному коді
. // Використання класу MyName в деякому методі
// Створення об'єкта (примірника) класу з ім'ям nm1 MyName nm1 = new
MyName(); // Створення об'єкта (примірника) класу з ім'ям nm2 MyName nm2; nm2 = new
MyName(); String s; // Виклик методів класу з об'єкта nm1 nm1.SetName("Johnson"); nm1.SetSurname("John"); nm1.SetPatr(""); s = nm1.GetSurname(); // s = "John"
// Виклик методів класу з об'єкта nm2 класу nm2.SetMyName("David", "Albright", ""); s = nm2.GetName(); // s = "David" nm2.name = "Michael"; // так теж можна s = nm2.GetName(); // s = "Michael" .
⇑
6. Який тип доступу (private, public) мають члени класу за замовчуванням?
За замовчуванням члени класу мають тип доступу public . Вони загальнодоступні.
⇑
7. Що таке класи-«обгортки» чи класи «упаковки»? Яке призначення класів-«оберток»? приклад
Класи-обгортки призначені для представлення примітивних типів як об'єктів. Тобто, вони здійснюють перетворення примітивного типу на тип-посилання. Для кожного примітивного типу існує власний клас (тип) упаковки або обгортки.
Далі наводиться перелік відповідностей примітивного типу та типу (класу) упаковки:
boolean
=>
Boolean
char
=>
Character
byte
=>
Byte
short
=>
Short
int
=>
Integer
long
=> Long float
=> Float double
=> Double void
=> Void
Наприклад. Нижче наведено приклади перетворення різних примітивних типів у типи-упаковки та навпаки
// Перетворення типів int Integer
int
d = 25; Integer D = new
Integer(d); // D = 25 D = new Integer(38); d = D.intValue(); // d = 38
// Перетворення типів float Float
float f = 3.85f; Float F = new Float(f); // F = 3.85 F = new Float(7.77f); f = F.floatValue(); // f = 7.77
// Перетворення типів char Character
char
c = 'A'; Character C = new Character(c); // C = 'A' C = new
Character('Z'); c = C.charValue(); // c = 'Z'
⇑
Пов'язані теми