Java. Класи. Застосування класів у програмах на Java. Визначення класу та об’єкту класу. Приклади




Класи. Застосування класів у програмах на Java. Визначення класу та об’єкту класу. Приклади


Зміст


Пошук на інших ресурсах:

1. Для чого у програмах використовуються класи?

 У мові програмування 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, …, methodN – методи класу;
  • parameters1, parameters2, parametersN – параметри, що відповідно отримують методи класу method1, method2, methodN.

  ⇑

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++).

Далі викликаються загальнодоступні (public) методи класу 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 patr; }
    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.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'

 ⇑


Зв’язані теми

  ⇑