НМЦ

ОБ’ЄКТНО ОРІЄНТОВАНЕ ПРОГРАМУВАННЯ

Електронний посібник

 

ВФПО

Модуль 2

 

2. Складні типи даних. основні алгоритмічні конструкції. методи (6 семестр)

2.1. Створення та використання об’єктів

2.2. Використання операторів та алгоритмічних конструкцій. Використання циклів

2.3. Розробка та використання методів

 

 

Відеозапис лекції:

 

 

 

Частина 2: Java Програмування Клас "Автомобіль"

https://www.youtube.com/watch?v=PgCTXQZIqmA

 

В Java для роботи з об’єктами використовується єдиний синтаксис. Об’єкт класу оголошується з допомогою посилання (reference). Загальна форма оголошення об’єкта класу без виділення пам’яті для нього має наступний вигляд:

 

ClassName objName,

 

де ClassName ім’я класу, для якого створюється об’єкт з іменем objName, objName – ім’я посилання на об’єкт класу ClassName.

Вищенаведене оголошення говорить про те, що ідентифікатор objName є посиланням на об’єкт класу ClassName. Для посилання потрібно виділити пам’ять (ініціалізувати посилання) з допомогою оператора new як показано нижче:

 

objName = new ClassName();

 

Якщо не виділити пам’ять для посилання і звернутись до нього як до об’єкта класу, то виникне помилка.

Існує й інша загальна форма оголошення об’єкта класу. У цьому випадку пам’ять виділяється при його оголошенні:

 

ClassName objName = new ClassName();

 

Виділення пам’яті для посилання на об’єкт класу ще називається "приєднання" об’єкта до посилання.

Приклади створення об’єктів різних класів:

Приклад 1. Створення об’єкта класу CLine, що реалізує лінію на координатній площині.

 

Програмний код оголошення класу наступний:

// клас, що реалізує лінію на координатній площині

public class CLine

{

    // внутрішні змінні класу

    private double x1, y1, x2, y2;

    // конструктори класу

    // конструктор без параметрів

    CLine()

    {

        x1 = y1 = 0;

        x2 = y2 = 1;

    }

    // конструктор з 4 параметрами

    CLine(double x1, double y1, double x2, double y2)

    {

        this.x1 = x1; this.y1 = y1;

        this.x2 = x2; this.y2 = y2;

    }

    // методи доступу

    // читання даних

    public double GetX1() { return x1; }

    public double GetY1() { return y1; }

    public double GetX2() { return x2; }

    public double GetY2() { return y2; }

    // запис даних

    void SetXY(double nx1, double ny1, double nx2, double ny2)

    {

        x1 = nx1; y1 = ny1;

        x2 = nx2; y2 = ny2;

    }

    // метод, що обчислює довжину лінії

    double Length()

    {

        double len;

        len = Math.sqrt((x1-x2)*(x1-x2) + (y1-y2)*(y1-y2));

        return len;

    }

}

Нижченаведений програмний код демонструє створення та використання об’єктів класу CLine.

public class CTestLine

{

    public static void main(String[] args)

    {

        double x, y; // допоміжні змінні

        // створення об'єкта класу CLine з допомогою конструктора без параметрів

        CLine line1 = new CLine();

       // створення об'єкта класу CLine з допомогою конструктора з 4 параметрами

        CLine line2 = new CLine(2.0, 3.0, 4.0, 5.0);

        // використання об'єктів класу line1

        x = line1.GetX1(); // x = 0.0

        y = line1.GetY2(); // y = 1.0

        // використання об'єкта класу line2

        x = line2.GetX1(); // x = 2.0

        x = line2.GetX2(); // x = 4.0

        y = line2.GetY2(); // y = 5.0

// перевизначення об'єкта line1, попередній об'єкт буде знищено при "зборі" сміття

        line1 = new CLine(-4.0, -2.0, 33.4, -20.5);

        x = line1.GetX1(); // x = -4.0

        y = line1.GetY2(); // y = -20.5

    }

}

 

Як видно з коду, у функції main() оголошуються два посилання з іменами line1, line2 на об’єкти класу CLine. Для цих посилань виділяється пам’ять з допомогою оператора new. Потім, для об’єкта line2 пам’ять заново перевизначається. Стара пам’ять буде звільнена за чергового "збору" сміття.

Приклад 2. Створення об’єкта класу CName, що реалізує ім’я.

 

Функція main() демонструє створення об’єкта класу CName різними способами з допомогою різних конструкторів.

// клас, що реалізує ім'я

public class CName

{

    private String name;

    private String surname;

    private String patronymic;

    // конструктори класу

    // конструктор без параметрів

    CName()

    {

        name = surname = patronymic = "";

    }

    // конструктор з трьома параметрами

    CName(String _name, String _surname, String _patronymic)

    {

        name = _name;

        surname = _surname;

        patronymic = _patronymic;

    }

    // методи доступу

    String GetName() { return name; }

    String GetSurname() { return surname; }

    String GetPatronymic() { return patronymic; }

 

    // функція, що демонструє застосування класу CName

    public static void main(String[] args)

    {

        CName nm1 = new CName(); // викликається конструктор без параметрів

CName nm2; // просто оголошення посилання на об'єкт класу CName, пам'ять ще не виділена

nm2 = new CName("Happy", "New", "Year!"); // створення об'єкта - виділення пам'яті

        // перевірка

        String str;

        str = nm1.GetName(); // str = ""

        str = nm1.GetSurname(); // str = ""

        str = nm2.GetName(); // str = "Happy"

        str = nm2.GetSurname(); // str = "New"

        str = nm2.GetPatronymic(); // str = "Year!"

    }

}

 

В Java для зберігання даних (об’єктів) існує 5 різних сховищ:

 

регістри. У цьому випадку дані зберігаються всередині процесора. У регістрах дані обробляються швидше за все. Однак кількість регістрів є строго обмеженою. Компілятор використовує регістри в міру необхідності. У Java немає безпосередніх команд, щоб зберігати усі дані тільки в регістрах. Навіть у потужних мовах C/C++ команди-вказівки для розміщення даних у регістрах носять тільки рекомендаційний характер;

стек. Для програми стек розміщується в загальній оперативній пам’яті (RAM). Стек організовується з використанням покажчиків стеку. Стек працює за принципом LIFO (Last-In-First-Out) – останній прийшов, перший вийшов. Така організація є зручною, коли потрібно виділяти пам’ять для локальних функцій (методів) різних рівнів вкладень. У стеку розміщуються тільки покажчики на об’єкти. Самі об’єкти розміщуються в "купі" (heap, або "купа"). Покажчик стеку рухається донизу, якщо потрібно виділити пам’ять, і доверху, якщо пам’ять звільняється. Таким чином, за швидкодією стек поступається тільки регістрам. Однак стек не володіє такою гнучкістю, як "купа", тому що компілятору потрібно знати життєвий цикл даних, розміщених в стеку;

"купа" (heap). Це сховище загального призначення, яке розміщується в оперативній пам’яті (RAM). Тут зберігаються усі об’єкти (екземпляри об’єктів) Java. "Купа" є більш гнучкою порівняно зі стеком, тому що компілятор не витрачає додаткових зусиль на визначення тривалості існування об’єктів, що знаходяться в "купі". У програмі створення об’єкта відбувається з використанням оператора new. У результаті виділяється пам’ять з "купи". Однак, виділення пам’яті з "купи" займає більше часу, ніж у стеку. Слід зауважити, що потужні мови C/C++ підтримують явне створення об’єктів як в стеку, так і в "купі";

постійне сховище. У програмах часто використовуються дані, які є незмінними. До таких даних відносять константи (наприклад, рядкові константи). Ці дані доцільно вбудовувати прямо в код програми. Інколи константи розміщуються в постійній статичній пам’яті (ROM);

зовнішнє сховище. Зовнішнім сховищем можуть бути довготривалі (persistent) носії інформації, наприклад, жорсткий диск  комп’ютера або носії інформації віддалених комп’ютерів мережі. Цей вид зберігання даних дозволяє зберігати об’єкти на носіях інформації, а потім відновлювати їх для зберігання в оперативній пам’яті.

Об’єкти зберігаються в "купі" (heap). Посилання на об’єкти зберігаються в стеку.

 

 

Відеозапис лекції:

 

 

Частина 1: Java для чайників – Оператор "if"

https://youtu.be/xPo1qeLDFXc

 

 

Частина 2: Відеоурок Java – Оператор "if else if ... else"

https://youtu.be/E0ABoPd6lvU

 

 

Частина 3: Java Введення в програмування – Цикл while

https://youtu.be/T-01-ax4FTI

 

 

Частина 4: Java Програмування Цикл do while

https://youtu.be/KdlP8mLarMg

 

 

Частина 5: Java Цикл for

https://youtu.be/bL_KIlKrEV8

 

Java, як і інші мови програмування, підтримує умовні інструкції та цикли, що визначають порядок виконання інструкцій у програмі. В англійській мові для цього поняття застосовують термін control flow – керування потоком.

Перед тим як знайомитись з керуючими структурами, спочатку необхідно ознайомитися з блоками. Блок, або складений оператор, – це будь-яка кількість простих інструкцій, які оточені парою фігурних дужок. Блок визначає область видимості ваших змінних. Блоки можуть бути вкладені в середину інших блоків. Ви вже зустрічалися з блоками при створенні найпростіших програм у методі main().

 

Наступний приклад демонструє вкладення блоку у блок методу main:

public static void main(String[] args)

{

  int n;

  . . .

  {

    int k;

    . . .

  } // змінна k визначена лише до цього місця

}

Проте не можна визначати однакові змінні в двох вкладених блоках (на відміну від С++, де це можливо):

public static void main(String[] args)

{

  int n;

  . . .

    {

    int k;

    int n; // помилка! – не можна перевизначити n у внутрішньому блоці

    . . .

    }

}

Умовний оператор в Java має форму:

if (умова) інструкція;

 

Умова має бути оточена дужками і якщо умова задовольняється (true), буде виконана інструкція за умовою, інакше вона виконана не буде, а буде виконана наступна інструкція після умовної інструкції.

Приклад:

        int a = 5;

        if (a < 100) System.out.println("Число менше ста");

 

Зазвичай необхідно виконати не одну інструкцію, в такому випадку інструкції розміщають у блоці:

if (умова){

   iнструкція 1;

   …..

   iнструкція n;

}

В такому разі, за істинності умови, виконуються всі інструкції у блоці, якщо умова невірна, то виконується наступна інструкція після закриваючої дужки блоку.

 

Якщо ж необхідно здійснити певну дію в разі невиконання умови, то в такому разі застосовують умовну інструкцію наступного виду:

if (умова) інструкція1; else інструкція2;

Наприклад:

if (yourSales >= target)

{

   performance = "Satisfactory";

   bonus = 100 + 0.01 * (yourSales - target);

}

else

{

   performance = "Unsatisfactory";

   bonus = 0;

}

 

Інструкції if можуть йти одна за одною без використання else:

 

if (x <= 0) if (x == 0) sign = 0; else sign = -1;

 

Для того, щоб програма була читабельнішою, бажано застосовувати фігурні дужки:

 

if (x <= 0) { if (x == 0) sign = 0; else sign = -1; }

 

Вони нічого не змінюють, але вираз стає зрозумілішим. Інструкція чи блок інструкцій виконується лише в разі виконання усіх умов.

Щоправда цю інструкцію можна також переписати, ускладнивши умову, використавши булевий оператор і (&&):

 

If (x <= 0 && x==0) sign = 0; else sign=-1;

 

Можна також використовувати повторюваність інструкцій if….else.

if (yourSales >= 2 * target)

{

  performance = "Excellent";

  bonus = 1000;

}

else if (yourSales >= 1.5 * target)

{

   performance = "Fine";

   bonus = 500;

}

else if (yourSales >= target)

{

   performance = "Satisfactory";

   bonus = 100;

}

else

{

   System.out.println("You're fired");

}

 

Це дає можливість перевірити ряд умов, якщо попередні умови не виконуються.

 

Цикли – це послідовність інструкцій, які можуть повторно виконуватись певну кількість раз залежно від заданої в програмі умови. Розрізняють цикли з передумовою, з післяумовою та з лічильником.

Цикл while (перекладається як "доки") – це цикл з передумовою, тіло якого (тобто інструкція або блок інструкцій) виконується, якщо умова істинна. Якщо умова з самого початку хибна, то цикл не виконається жодного разу.

 

Загальний вигляд:

while (умова) інструкція;

Якщо немає фігурних дужок, то перша інструкція, яка йде після оголошення циклу, вважається тілом циклу. Всі інші інструкції знаходяться поза циклом. Якщо в циклі повинні виконуватись кілька інструкцій, то необхідно використати фігурні дужки. Вони також можуть використовуватись за однієї інструкції заради кращого візуального розуміння коду.

while (умова){

   інструкція 1;

   ...

   інструкція N;

}

 

В наступному прикладі демонструється мінігра із вгадуванням числа від 0 до 10, яка створена з використанням циклу while:

import java.util.*;

public class Game {

    public static void main(String[] args) {

 Scanner in = new Scanner(System.in); // створюємо сканер для введення даних з консолі

Random generator = new Random();     //створюємо генератор випадкових чисел

        System.out.println("Спробуйте відгадати число від 0 до 10");

        int gn;

        String more = "Y";

while (more.equals("Y") || more.equals("y")) {  // поки змінна more рівна “Y” або “y”

            gn = generator.nextInt(10); // генерація випадкового числа від 0 до 10;

            System.out.print("Введіть число від 0 до 10: ");

            int number = in.nextInt();  // зчитуємо число з клавіатури

            if (gn == number)

                System.out.print("Вгадали!!!  Спробуєте ще раз? (Y/N)");

            else

                System.out.print("Не вгадали. Спробуєте ще раз? (Y/N)");

            more = in.next();    // отримати відповідь

        }

    }

}

 

Результат виконання:

Спробуйте відгадати число від 0 до 10

Введіть число від 0 до 10: 6

Не вгадали. Спробуєте ще раз? (Y/N)y

Введіть число від 0 до 10: 7

Вгадали!!!  Спробуєте ще раз? (Y/N) n

Програма генерує випадкове число за кожного повтору циклу і пропонує вгадати його. Після вводу користувачем числа – виводить відповідне повідомлення вгадано чи ні. Після цього пропонується здійснити нову спробу. Якщо користувач вводить з клавіатури "Y" або "y", то гра продовжується, якщо введе щось інше, то завершується.

Для генерації випадкових чисел використано клас Random, що містить методи для генерації випадкових чисел. Зокрема у нашій програмі використано метод nextInt(), який дозволяє генерувати випадкові числа.

Для зчитування з клавіатури використано клас Scanner, який був доданий в Java 5.0, для зручного вводу з клавіатури. Метод nextInt() – читає ціле число, next() – читає цілий рядок з клавіатури.

Для того, щоб переконатися, що користувач хоче продовжити гру, використано метод equals() з класу StringStrint1.equals (String2), що перевіряє чи один рядок (String1) тексту рівний іншому (String2).

У вищенаведеній програмі пояснення потребують три рядки. Для початку вам необхідно лише в загальному зрозуміти їхнє призначення.

import java.util.*;

Random generator = new Random();

gn=generator.nextInt(10);

Нам необхідний генератор цілих чисел, який реалізує класс Random з пакету java.util. Для цього ми імпортуємо відповідний клас (в С/С++ аналогом є підключення бібліотеки). Далі в програмі створюємо змінну generator, яка вказуватиме на екземпляр класу random і дозволятиме звернення до методів цього класу. New Random() – створює відповідний об'єкт. Для генерації випадкових чисел ми використовуємо метод nextInt() класу Random.

Якщо необхідно, щоб умова виконувалася хоча б один раз, можна скористатися циклом з післяумовою do/while:

do інструкція while (умова);

Зокрема в програмі з вгадуванням чисел логічніше було б застосувати саме цей цикл, оскільки необхідне хоча б одне виконання тіла циклу.

import java.util.*;

public class Tmp {

    public static void main(String[] args) {

Scanner in = new Scanner(System.in); // створюємо Сканер для введення даних з консолі

Random generator = new Random();     // створюємо генератор випадкових чисел

        System.out.println("Спробуйте відгадати число від 0 до 10");

        int gn;

        String more;

        do {

            gn = generator.nextInt(10); //генерація випадкового числа від 0 до 10;

            System.out.print("Введіть число від 0 до 10: ");

            int number = in.nextInt();

            if (gn == number)

                System.out.print("Вгадали!!!  Спробуєте ще раз? (Y/N)");

            else

                System.out.print("Не вгадали. Спробуєте ще раз? (Y/N)");

            more = in.next();

        } while (more.equals("Y") || more.equals("y"));

    }

}

Цикл for (цикл з лічільником) – доволі часто вживаний цикл. Він застосовується за необхідності виконати інструкції певну кількість разів з одночасним збільшенням або зменшенням певної змінної. Часто використовується для здійснення перебору певних масивів даних, зокрема також для сортування масивів. Приклад використання:

for (int i = 1; i <= 10; i++) {

   System.out.println(i);

}

Наведений вище приклад виведе на консолі в стовпчик числа від 1 до 10. Як бачимо, в умові циклу перший слот відводиться для ініціалізації змінної, причому оголосити змінну можна і в іншому місці. Другий слот – для умови, яка перевіряється перед виконанням ітерації, третій слот – вказує як модифікувати змінну-лічильник. Тобто в наведеному прикладі за кожного виконання ітерації, лічильник "і" буде збільшуватися на одиницю, поки не стане рівним десяти.

Найчастіше цей цикл використовується для перебору елементів масиву. Масив – це впорядкований набір даних одного типу. Найпростіший масив можна оголосити та ініціалізувати таким чином: int a[]={1, 5, 6, 1, 3};. Для того, щоб звернутися до певного елемента масиву, використовуються квадратні дужки з відповідним індексом елемента. Наприклад, а[3] – звернення до четвертого елемента масиву (номери елементів відраховуються з нуля).

 

В наступному прикладі створюється масив і послідовно виводяться його елементи:

public class MyArray {

    public static void main(String[] args) {

        int a[] = {1, 5, 6, 1, 3}; // створюємо масив і заповнюємо його числами

        int size = a.length;

        System.out.println("Елементи масиву:");

        for (int j = 0; j < size; j++) {

            System.out.println("а[" + j + "]=" + a[j]);

        }

    }

}

Результат виконання:

Елементи масиву:

а[0]=1

а[1]=5

а[2]=6

а[3]=1

а[4]=3

 

Починаючи з Java SE 5.0, в мові з’явився новий цикл – покращений for, призначення якого – перебір елементів масиву або подібних до масиву типів даних (колекції).

Загальний вигляд циклу наступний:

for (type var : arr) {

    //тіло циклу

}

Наприклад, вивести елементи масиву можна таким чином:

for (int element : a)

    System.out.println(element);

Використання цього циклу дозволяє уникнути проблем, пов’язаних з помилками при заданні умови в класичному циклі for. В інших мовах програмування цикл такого виду так і називається foreach, проте, щоб уникнути необхідності значних змін в пакетах, в Java пішли простішим шляхом і перевантажили цикл for.

У Java відсутня інструкція goto, яка дозволяла переходити в будь-яке місце в програмі. Її використання давно вважається поганим стилем програмування, оскільки робить текст програми заплутаним. Про це, зокрема, писав ще Дональд Кнут і він же зазначав, що інколи все таки корисно її застосовувати, щоб припинити виконання певного методу, циклу чи блоку і вийти за їхні межі. Для цієї мети в java існують спеціальні інструкції. Зокрема інструкцію break можна використати для передчасного виходу з циклу. Якщо ми використовуємо вкладені цикли (один цикл в іншому), то інструкція break припинить цикл, в якому вона знаходиться. Якщо вона знаходиться у внутрішньому циклі, то він припинить своє виконання, а зовнішній же цикл буде виконуватись і далі. Якщо потрібно повністю припинити виконання і внутрішнього і зовнішнього, то використовується інструкція break з міткою.

Якщо ж нам не потрібно виходити з циклу, а лише припинити певну його ітерацію, то для цього використовується інструкція continue, яка переносить порядок виконання до заголовку інструкції.

Щоправда завжди можна обійтися без цих інструкцій, змінивши логіку програми. Деякі з програмістів уникають використовувати інструкції break та continue.

Інструкція if/else може бути доволі громіздкою, якщо необхідно здійснити множинний вибір з багатьох альтернатив. Тож як і в С/C++, в java існує інструкція switch, яка дозволяє здійснити вибір з багатьох варіантів. Щоправда вона дещо незграбна і деякі програмісти вважають за краще уникати її використання.

 

Наприклад, якщо Ви організовуєте певне меню і пропонуєте користувачу вибрати номер конкретного пункту, то можна використати наступний код:

Scanner in = new Scanner(System.in);

System.out.print("Select an option (1, 2, 3, 4) ");

int choice = in.nextInt();

switch (choice) {

     case 1:

         . . .

         break;

     case 2:

         . . .

         break;

     case 3:

         . . .

         break;

     case 4:

         . . .

         break;

     default:

         // bad input

         . . .

         break;

 

Якщо пропустити інструкцію break, то всі інші інструкції будуть також виконані. Тобто якщо справдиться умова першого варіанта, то будуть здійснені ще й дії, вказані для виконання у всіх інших варіантах.

До версії Java 7, яка вийшла у 2011 році, case мітка мала бути лише цілим числом або нумерованою константою.

 

Починаючи із Java 7, можна перевіряти таким чином на рівність також рядки:

String input = . . .;

switch (input)    

{

    case "A":     

        . . .

        break;

    . . .

}

 


 

Відеозапис лекції:

 

 

Частина1: методи в Java

https://youtu.be/-khOv3pyZ_8

 

Методи в JAVA – це аналог підпрограм, функцій, процедур в інших мовах програмування.

 

За допомогою методів ми виносимо текст повторюваного коду програми окремо в тіло методу, після чого можна викликати цей метод з будь-якого місця програми, безліч разів.

 

Спрощене оголошення та визначення методу, який ми зараз будемо використовувати, має вигляд:

тип_повернення  назва_методу(параметри){

//тіло методу;

інструкція1;

інструкція2;

…..

інструкціяN;

}

 

Тип_повернення – результат виконання методу, наприклад, він може повертати об’єм сейфу, тоді тип_повернення буде double. Якщо метод нічого не повертає, то вказується ключове слово void.

Виклик методу здійснює наступна інструкція: назва_методу (параметри). Взагалі в термінології мов програмування для виклику методу використовуються аргументи, а в самому методі – це вже параметри, оскільки передаються лише значення змінних, а не самі змінні. Аргументи та параметри мають бути одного і того ж типу. Якщо ми передаємо цілочисельне значення, то і параметр повинен бути цілочисельним тощо. Тобто в методі створюються нові змінні. В деяких мовах, наприклад в С++, як аргумент можна передати посилання на певну змінну, таким чином її можна буде модифікувати в функції через вказівник на цю змінну. В Java в метод передаються лише значення змінних, тому розрізнення аргументів і параметрів не настільки суттєве, тож ми і там і там використовуватимемо термін "параметр". Об'єкти ж в методи передаються за посиланням. Тобто, при передачі в якості аргументу об'єкта, буде передане посилання на об'єкт, а не створений новий об'єкт.

Повернемось до прикладу з сейфом. Повторюваними є присвоювання значень змінним, обчислення та виведення об’ємів. Тому корисно буде створити два методи safeValue (double width, double height, double depth) та safeVolume (). Перший для присвоєння змінним значень, а другий для обчислення об'єму.

 

Відповідна програма матиме вигляд:

class Safe {

    double width = 10; // поля класу можуть бути ініціалізовані з самого початку

    double height = 10;

    double depth = 10;

    double safeVolume = 0;

    // метод присвоєння значень змінним

    void safeValue(double pWidth, double pHeight, double pDepth) {

        width = pWidth;

        height = pHeight;

        depth = pDepth;

    }

    // метод для обчислення об'єму сейфа

    double safeVolume() {

        return width * height * depth;

    }

}

public class CoinVolume {

    public static void main(String[] args) {

        double width1 = 10, height1 = 20, depth1 = 40;

        Safe mySafe1 = new Safe(); //створюємо перший сейф

        Safe mySafe2 = new Safe(); //створюємо другий сейф

        //задаємо розміри сейфу

        //викликаємо метод safeValue() класу Safe, що ініціалізує поля об'єкту

        mySafe1.safeValue(width1, height1, depth1);

        mySafe2.safeValue(10.0, 15.0, 15.5); //можна і так

        //виводимо на екран об'єми сейфів

//для чого викликаємо метод safeVolume(), який повертає обчислений об'єм кожного сейфу

        System.out.println("Об'єм 1-го сейфу=" + mySafe1.safeVolume());

        System.out.println("Об'єм 2-го сейфу=" + mySafe2.safeVolume());

    }

}

 

Як бачимо, код програми досить простий. Тепер набагато легше модифікувати програму, додаючи нові сейфи. Крім того, можна, наприклад, вивести повідомлення з інформацією про об’єм, розмістивши його в метод safeVolume() або зовсім в окремий метод, наприклад, printVolume().

Слід зауважити щодо назв змінних-параметрів. Так, для висоти, ширини та глибини в методі safeValue() вибрані назви pWidth, pHeight, pDepth. Вони могли б мати назви і просто width, height, depth, але тоді б вони перекрили доступ до однойменних змінних класу. В такому випадку, щоб звернутися до змінних класу з методу, необхідно вживати ключове слово this. Наприклад: this.height=height – тут ми присвоюємо змінній класу this.height одержаний методом параметр height.

 

Додаткові матеріали

1. Основи програмування на Java – безкоштовний відеокурс (Prometheus): https://courses.prometheus.org.ua/courses/EPAM/JAVA101/2016_T2/about

2. Java Professional – авторський відеокурс (Бабич О.В, ITVDN): https://www.youtube.com/watch?v=H77pBuf582M&list=PLvItDmb0sZw9DXLBDs4IBcalvA1Nx56o9

3. Java. Алгоритмізація та програмування / Об’єкти – SchoolboyProgrammer: https://schoolboyprog10.blogspot.com/p/blog-page_89.html

4. Об’єкти. Створення та збереження об’єктів класів. Оператор new. Області зберігання даних в пам’яті. Використання масивів посилань на об’єкти – https://www.bestprog.net/uk/2018/08/19/objects-creating-and-saving-the-objects-of-classes-areas-of-data-storage-in-memory-using-an-arrays-of-references-to-objects_ua/

5. Основи програмування на Java – безкоштовний відеокурс (Prometheus): https://courses.prometheus.org.ua/courses/EPAM/JAVA101/2016_T2/about

6. Java Professional – авторський відеокурс (Бабич О.В, ITVDN): https://www.youtube.com/watch?v=H77pBuf582M&list=PLvItDmb0sZw9DXLBDs4IBcalvA1Nx56o9

7. Основи програмування на Java – безкоштовний відеокурс (Prometheus): https://courses.prometheus.org.ua/courses/EPAM/JAVA101/2016_T2/about

8. Java Professional – авторський відеокурс (Бабич О.В, ITVDN): https://www.youtube.com/watch?v=H77pBuf582M&list=PLvItDmb0sZw9

 

 

Попередня тема

На початок

Наступна тема