Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Шпори JAVA.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
178.34 Кб
Скачать

17. Область видимості імен

Область видимості (введення)

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

Наприклад:

class Point {

int x, y;

int getX () {

return x; / / просте ім'я

}

}

class Test {

void main () {

Point p = new Point ();

p.x = 3; / / складене ім'я

}

}

Видно, що до поля x зсередини класу можна звертатися по простому імені. До нього ж з іншого класу можна звернутися тільки за складеним імені. Воно складається з імені змінної, що посилається на об'єкт, та імені поля.

Тепер необхідно розглянути області видимості для всіх елементів мови. Однак перш з'ясуємо, що таке пакети, як і для чого вони використовуються.

18.Об’ява класів у Java

Класи – це спеціального виду конструкції, які дозволяють об’єднати ряд змінних різних типів в одне ціле. Крім власне даних, класи зазвичай включають підпрограми (в термінології java - методи) і можуть включати блоки(сукупність інструкцій між фігурними дужками {}) та інші класи(внутрішні класи). Таким чином утворюються нові типи даних.

Роз’яснення принципів побудови і роботи з класами доволі громіздка тема, тому тут розглянемо лише спрощені основи їх роботи і створення. Детальніше дивіться розділ присвячений класам. Розглянути зараз необхідно через те, що Java повністю об’єктно-орієнтована мова. З класами та пов’язаними з ними методами ви стикатиметесь на кожному кроці. Зокрема, навіть вивід даних System.out.prinln(); - здійснюється за допомогою класу System та методу println().

Для прикладу розглянемо наступну задачу: «Ви фанат збору 1 гривневих монет:). Назбирали їх чимало і хочете купити для своєї колекції невеличкий сейф та вбудувати цей сейф у стіну, щоб його з вашою колекцією не вкрали:). В інтернет-магазині вказані розміри сейфу. Постає питання, який же сейф вибрати? Оскільки сейф не один, то щоб не розраховувати вручну кожного разу об'єм сейфу, Ви захотіли написати відповідну програму.»

І так маємо:

/**

* CoinVolume.java

*/

public class CoinVolume

{public static void main( String[] args )

{ double width1 = 10, height1 = 15, depth1 = 20;

double width2 = 15, height2 = 20, depth2 = 15;

double width3 = 15, height3 = 25, depth3 = 15;

int cointAmount=15000; //кількість монет - непогано зібрав :)

double coinVolume=2*2*0.1; //приблизний об'єм монети=2*діаметр*товщину

double safeVolume1;

double safeVolume2;

double safeVolume3;

double totalCoinVol;

totalCoinVol=cointAmount*coinVolume; // заг. об'єм, який займають монети

safeVolume1=width1*height1*depth1; //об'єм першого сейфу

safeVolume2=width2*height2*depth2; //об'єм другого сейфу

safeVolume3=width3*height3*depth3; //об'єм третього сейфу

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

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

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

System.out.println("Загальний об'єм монет="+totalCoinVol);

}

}

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

Об'єм 1-го сейфу=3000.0

Об'єм 2-го сейфу=4500.0

Об'єм 3-го сейфу=5625.0

Загальний об'єм монет=6000.0

Як бачимо з трьох не підійшов жоден, потрібен більший. Проте додавання кожного нового сейфу вимагає дописування великої кількості інструкцій. Потрібно оголошувати три змінні для довжини, ширини та глибини сейфу, також потрібна змінна для об’єму та додавати інструкції обчислення та виводу на екран результатів. Звичайно, можна оцінювати по одному змінюючи значення змінних (полів даних), але тоді доведеться кожного разу перекомпільовувати і запускати програму, що не дуже зручно, коли сейфів близько ста. А якщо ви захочете ще раз оцінити розміри деяких сейфів, доведеться виконувати роботу ще раз. Ось тут в пригоді і стане нам клас Safe. Зверніть увагу, що назва класу пишеться з великої літери. Рекомендовано давати назви класів з великої літери. Таким чином дуже просто розрізнити його від інших складових програми, наприклад назву класу від назви змінної, які прийнято називати з маленької літери.

Оголосити найпростіший клас можна так:

class Safe

{

double width;

double height;

double depth;

double safeVolume;

}

Для його оголошення використовується ключове слово class та назва класу, далі іде тіло класу у фігурних дужках {}. Проте, хоч клас існує, ми не можемо так просто його використовувати. Ми повинні спочатку створити екземпляр даного класу (об’єкт). Для цього необхідно написати наступну інструкцію:

Safe mySafe1=new Safe();

де Safe – назва класу, mySafe – назва об'єктної змінної, яка посилатиметься на наш екземпляр класу (об'єкт типу Safe), new Safe() – створює об’єкт(при цьому відбувається виділення пам’яті під об’єкт). Таким чином ми створили перший сейф. Щоб створити другий сейф використовується аналогічна інструкція:

Safe mySafe2=new Safe(); //як бачимо змінилась лише назва змінної

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

Проте як же ми можемо звернутися до полів об’єкту (змінних всередині об'єкту)? Для цього використовується операція «.»(крапка), а сама інструкція звернення записується в такій формі - назваОб’єкту.змінна:

mySafe1.width=10;

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]