Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
shpori_oop.doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
441.86 Кб
Скачать
  1. Перетворення даних в програмах на Java.

  1. Класи. Дані та методи класів. Модифікатори доступу

    Класи . Говорячи про класи, необхідно ще раз пригадати один з трьох основних принципів ООП – успадкування. Використовуючи його, можна створити головний клас, який визначає властивості, спільні для набору елементів. Надалі цей клас може бути успадкований іншими, більш специфічними класами. Кожен з них додає ті властивості, які є унікальними для нього. В термінології Java клас, який успадковується, називається суперкласом (superclass). Клас, який виконує успадкування, називається підкласом (subclass). Тому підклас – це спеціалізована версія суперкласу. Він успадковує всі поля та методи суперкласу, та додає до них свої власні унікальні елементи. Щоб успадкувати клас, необхідно просто ввести визначення одного класу в інше, використовуючи ключове слово extends. Модифікатори доступу.

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

Модифікаторів доступу є три плюс ще один за замовчуванням.

publicкласи public доступні для всіх об’єктів незалежно від пакета, тобто повністю не захищені. public-класи мають знаходитися в файлах з іменами, що збігаються з іменами класів.

friendly значення за замовчуванням (тобто слово friendly в описі класу ніколи не пишеться!). friendly-класи доступні лише для об’єктів, що знаходяться в тому ж самому пакеті, що і даний клас, незалежно від того, чи є вони нащадками даного класу.

final-класи не можуть мати підкласів-нащадків. Тим самим ми втра­ча­ємо одну з головних переваг ООП. Але іноді треба заборонити іншим класам змінювати поведінку розроблюваного класу (наприклад, якщо даний клас буде використаний як стандарт для обслуговування мережних комунікацій).

abstractце клас, в якому є хоча б один абстрактний метод, тобто метод, для якого описаний лише заголовок (прототип функції), а саме тіло методу відсутнє. Зрозуміло, що реалізацію цього відсутнього методу покла­де­но на класи-нащадки. Наприклад, створюється деякий клас для перевірки орфографії. Замість того, щоб закладати в нього перевірку української, ро­сійської, англійської орфографії, створюючи методи ukraineCheck(), russi­an­Check() і т. д. можна просто створити абстрактний метод grammarCheck(), перекладаючи роботу щодо перевірки конкретної граматики на класи-нащадки (які, можливо, будуть створені іншими фахівцями).

  1. Пакети класів, їх створення та використання.

Для упорядкування файлів класів в Java використовуються пакети. Кожен пакет можна розглядати як підкаталог на диску. Пакети – це набори класів. Вони нагадують бібліотеки, які існують в багатьох мовах. Звичайно пакети містять класи, логічно пов’язані між собою.

Щоб внести клас в пакет, необхідно скористатися оператором package, наприклад:

package game;

При цьому необхідно витримати дві умови:

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

  2. Оператор package має бути першим оператором в файлі.

Якщо файл є частиною пакета, справжнє ім’я класа складається з імені пакета, крапки та імені класа. Тому, якщо Ви внесли клас Animator в пакет game, щоб імпортувати його слід вказати повне ім’я класу: import game.Animator;

Якщо ж вам необхідно використати в своїй програмі декілька класів з пакета game і ви не бажаєте імпортувати кожен клас окремо, виписуючи всі їх імена, ви можете імпортувати весь пакет, отримавши доступ одразу до всіх класів даного пакета: import game.*;

І на сам кінець. Навіть нічого не імпортуючи, ви можете отримати доступ до деякого класу з пакету, вказуючи його повне ім’я при об’яві екземпляра класу: game.Animator a;

  1. Поняття про інтерфейси. Реалізація інтерфейсів.

Інтерфейси – це варіант множинного успадкування, яка є в C++, але відсутня в Java. Іншими словами, клас в Java не може успадкувати поведінку одразу кількох класів, але може реалізовувати одразу декілька інтерфейсів. Також клас може бути одночасно і нащадком одного класу, і реалізовувати один або кілька інтерфейсів.

В чому відмінність інтерфейсів від класів? Класи описують об’єкт, а інтерфейси визначають набір методів і констант, які реалізуються іншим об’єктом. Інтерфейси мають одне головне обмеження: вони можуть описувати абстрактні методи та поля final, але не можуть мати жодної реалізації цих методів. В прикладному відношенні інтерфейси дозволяють програмісту визначити деякі функціональні характеристики, не турбуючись про те, як потім ці характеристики будуть описані.

Наприклад, якщо деякий клас реалізує інтерфейс java.lang.Runnable він має містити метод run(). Тому java-машина може «всліпу» викликати метод run(), для будь якого Runnable-класу. Неважливо, які дії він при цьому виконує – важливо, що він є. Реалізація інтерфейсів

В класі, що реалізує інтерфейс, мають бути перевизначені всі методи, які були об’явлені в інтерфейсі, інакше клас буде абстрактним. Звичайно, в класі можуть бути присутні інші, власні методи, не описані в інтерфейсах. Приклад класу, що реалізує інтерфейс:

class Shoe implements Product

{ public int getPrice(int id)

{

if (id==1) return 5;

else return 10;

}

public String getMaker()

{

return MAKER;

}

}

Зверніть увагу на ключове слово implements (реалізація), яке з’явилось в заголовку класу на відміну від звичного extends.

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