Методи і параметри

Обєкти певного вище класу Point можуть бути змінені в будь-якому фрагменті програми, в якому є посилання на обєкт Point, оскільки поля цього класу оголошені з ключовим словом public Клас Point являє собою найпростіший приклад класу Насправді іноді можна обійтися і простими класами – наприклад, при виконанні чисто внутрішніх завдань пакета або коли для ваших цілей вистачає найпростіших типів даних

Проте справжні переваги обєктно-орієнтованого програмування проявляються в можливості сховати реалізацію класу У мові Java операції над класом здійснюються за допомогою методів класу – Інструкцій, які виконуються над даними обєкта, щоб отримати потрібний результат У методах часто використовуються такі деталі реалізації класу, які повинні бути приховані від всіх інших обєктів Дані ховаються в методах і стають недоступними для всіх інших обєктів – в цьому полягає основний сенс інкапсуляції даних

Кожен метод має нуль або більше параметрів Метод може повертати значення або оголошуватися з ключовим словом void, яке означає, що метод нічого не повертає Оператори методу містяться в блоці між фігурними дужками {і}, які слідують за імям методу і оголошенням його сигнатури Сигнатурою називається імя

методу, супроводжуване числом і типом його параметрів Можна удосконалити клас

Point і додати в нього простий метод clear, який виглядає так:

public void clear() {

x = 0

y = 0

}

Метод clear не має параметрів, оскільки в дужках (і) після його імені нічого немає крім того, цей метод оголошується з ключовим словом void, оскільки він не повертає ніякого значення Усередині методу дозволяється пряме іменування полів і методів класу – можна просто написати x і y, без посилання на конкретний обєкт

171 Виклик методу

Обєкти зазвичай не працюють безпосередньо з даними інших обєктів, хоча, як ми бачили на прикладі класу Point, клас може зробити свої поля загальнодоступними І все ж у добре спроектованому класі дані зазвичай ховаються, щоб вони могли змінюватися тільки методами цього класу Щоб викликати метод, необхідно вказати імя обєкта і імя методу і розділити їх крапкою () Параметри передаються методу у вигляді укладеного в дужки списку значень, поділюваних комами Навіть якщо метод викликається без параметрів, все одно необхідно вказати порожні дужки Обєкт, для

якого викликається метод (обєкт, який одержує запит на виклик методу) носить назву

обєкта-одержувача, Або просто одержувача

В якості результату роботи методу може повертатися тільки одне значення Щоб метод повертав кілька значень, слід створити спеціальний обєкт, єдине призначення якого – зберігання повертаються значень, і повернути цей обєкт

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

public double distance(Point that) {

double xdiff, ydiff xdiff = x — thatx ydiff = y — thaty

return Mathsqrt(xdiff * xdiff + ydiff * ydiff)

}

Для обєктів lowerLeft і upperRight, які були визначені в розділі, присвяченому створенню екземплярів обєктів, виклик методу distance може виглядати так:

double d = lowerLeftdistance(upperRight)

Після виконання цього оператора мінлива d міститиме евклідова відстань між точками lowerLeft і upperRight

172 Посилання this

Іноді обєкту-одержувачу буває необхідно знати посилання на самого себе Наприклад, обєкт-одержувач може захотіти внести себе в якій-небудь список обєктів У кожному методі може використовуватися this – Посилання на поточний обєкт (обєкт-одержувач) Наступне визначення clear еквівалентно наведеним вище:

public void clear() { thisx = 0 thisy = 0

}

Посилання this часто використовується як параметр для тих методів, яким потрібна посилання на обєкт Крім того, this також може застосовуватися для іменування членів поточного обєкта Ось ще один з методів Point, який називається move і служить для присвоєння полях x і y певних значень:

public void move(double x, double y) {

thisx = x

thisy = y

}

У методі move посилання this допомагає розібратися, про які x і y йдеться Присвоїти аргументам move імена x і y цілком розумно, оскільки в цих параметрах методу передаються координати x і y точки Але тоді виходить, що імена параметрів збігаються з іменами полів Point, і імена параметрів приховують імена полів Якби ми просто написали x = x, то значення параметра x було б присвоєно самому параметру, а не полю x, як ми хотіли Вираз thisx визначає поле x обєкта, а не параметр x методу move

173 Статичні методи

Ми вже знаємо, що в класі можуть бути присутніми статичні поля, що відносяться до класу в цілому, а не до його конкретним екземплярам За аналогією з ними можуть існувати і статичні методи, також належні до всього класу, які часто називають методами класу Статичні методи зазвичай призначаються для виконання операцій, специфічних для даного класу, і працюють зі статичними полями, а не з конкретними екземплярами класу Методи класу оголошуються з ключовим словом static і називаються статичними методами

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

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

У реалізації методу distance з попереднього прикладу використаний статичний метод Mathsqrt для обчислення квадратного кореня Клас Math містить безліч методів для часто зустрічаються математичних операцій Ці методи оголошені

статичними, так як вони працюють не з якимось певним обєктом, але становлять усередині класу групу з подібними функціями

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

18 Масиви

Прості змінні, що містять всього одне значення, корисні, але для багатьох додатків їх недостатньо Скажімо, для розробки програми гри в карти потрібно безліч обєктів Card, з якими можна було б оперувати як з єдиним цілим Для таких випадків у мові Java передбачені масиви

Масивом називається набір змінних, що відносяться до одного типу Доступ до елементів масиву здійснюється за допомогою простих цілочисельних індексів У картковій грі обєкт Deck (колода) може виглядати так:

class Deck {

final int DECK_SIZE = 52

Card[] cards = new Card[DECK_SIZE]

public void print() {

for (int i = 0 i &lt cardslength i++) Systemoutprintln(cards[i])

}

}

Спочатку ми оголошуємо константу з імям DECK_SIZE, що містить кількість кард в колоді Потім поле cards оголошується у вигляді масиву типу Card – для цього після імені типу в оголошенні необхідно поставити квадратні дужки [і] Розмір масиву визначається при його створенні і не може бути змінений в майбутньому

Виклик методу print показує, як проводиться доступ до елементів масиву: індекс потрібного елемента полягає у квадратні дужки [і], наступні за імям масиву

Як неважко здогадатися по тексту програми, в обєкті-масиві є поле length, в якому зберігається кількість елементів в масиві Межами масиву є цілі числа 0 і length-1 Якщо спробувати звернутися до елементу масиву, індекс якого виходить за ці межі, то збуджується виключення IndexOutOfBounds

У цьому прикладі також демонструється новий механізм оголошення змінних – змінна циклу оголошена в секції ініціалізації циклу for Оголошення змінної в секції ініціалізації – зручний і наочний спосіб оголошення простий змінної циклу Така конструкція допускається лише при ініціалізації циклу for ви не зможете оголосити змінну при перевірці умови в операторі if або while

Мінлива циклу i існує лише всередині оператора for Мінлива циклу, оголошена подібним чином, зникає відразу ж після його завершення – це означає, що її імя може використовуватися як імені змінної в наступних

операторах циклу

Вправа 18

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

Вправа 19

Змініть додаток Fibonacci так, щоб числа Фібоначчі зберігалися в масиві Для цього створіть новий клас для зберігання самого числа і логічного значення, що є ознакою парності, після чого створіть масив для посилань на обєкти цього класу

Джерело: Арнольд К, Гослінг Д – Мова програмування Java (1997)

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*