|
|||
Лекція № 4 ⇐ ПредыдущаяСтр 7 из 7 Лекція № 4 Тема: Інтерфейси, пакети, області видимості. Мета: - сформулювати поняття інтерфейсів у Java; - ознайомити студентів з файловою структурою Java-проекту; - досягти усвідомлення ними важливості застосування абстрактних класів та інтерфейсів. План 1. Поняття інтерфейсу в Java. 2. Опис інтерфейсу 3. Реалізація інтерфейсу 4. Пакети та області видимості 5. Файлова структура Java-проекту 6. Області видимості класів 7. Області видимості членів клас 8. Області видимості змінних
Література:
1. Патрик Ноутон, Герберт Шилдт – Java 2. - Издательство: BHV, 2005 г. 2. Герберт Шилдт. Java. Полное руководство, 8-е узд.: Пер. С англ. – М.: ООО«И.Д. Вильямс», 2012. – 1104 с.
Виклад лекційного матеріалу 1,2 Поняття інтерфейсу в Java. Опис інтерфейсу Інтерфейс являє собою клас, в якому всі поля - константи (тобто статичні - static і незмінні - final), а всіі методи абстрактні. При описі інтерфейсу замість ключового слова class використовується ключове слово interface, після якого вказується ім'я інтерфейсу, а потім, в фігурних дужках список полів-констант і методів. Ніяких модифікаторів перед оголошенням полів і методів ставити не треба: всі поля автоматично стають public static final, а методи-public abstract. Методи не можуть мати реалізації, тобто після закриваючої круглої дужки відразу ставиться крапка з комою. Опишемо, наприклад, інтерфейс для об'єкта, який «уміє» повідомляти інформацію про себе у форматі прайс-листа (тобто повідомляти свою назву, ціну, і короткий опис). interface PriceItem { String getTitle(); int getPrice(int count); String getDescription(); } Для різноманітності метод getPrice () в цьому прикладі вимагає один цілочисельний параметр (кількість одиниць товару). Такий інтерфейс корисний для програми типу Інтернет-магазин, яка повинна за запитом користувача формувати прайс - перелік товарів із зазначенням їх ціни й описи. 3 Реалізація інтерфейсу Клас може реалізовувати інтерфейс, тобто переймати його поведінку. Ця процедура аналогічна наслідуванню, тільки замість ключового слова extends використовується ключове слово implements. Але якщо після extends може бути зазначений тільки один клас, то після implements можна перелічити через кому довільну кількість інтерфейсів. Клас може одночасно успадковувати від іншого класу і реалізовувати інтерфейси. Можна взяти будь-який існуючий в програмі клас і «навчити» його повідомляти про себе всі необхідні відомості. Наприклад, клас Dog, з яким ми працювали на минулому занятті. Можна змінити цей клас, змусивши його реалізовувати наш інтерфейс, а можна залишити в недоторканності і створити на його базі новий клас. У новому класі обов'язково потрібно перевизначити абстрактні методи інтерфейсу. class Dog2 extends Dog implements PriceItem { private int price; String getTitle() { return ("Розумна собака"); }; int getPrice(int count) { return price * count; }; int setPrice(int p) { price = p; } String getDescription() { return ("Розумна собака, яка знає свій вік і вміє повідомляти його за допомогою гавкання"); }; } Клас Dog2 «вміє» те ж саме, що і попередній клас Dog, але крім цього його можна використовувати в програмі Інтернет-магазина для формування прайсу. Зверніть увагу, клас Dog нічого не знав про ціну, тому знадобилося додати метод setPrice () і поле price, щоб цю ціну можна було б змінювати. А змінювати опис собаки не знадобиться, тому метод getDescription () просто виводить один і той же рядок. Аналогічно можна взяти безліч інших класів, які не мають відношення до собак - велосипеди, футболки, комп'ютери - і зробити їх придатними для нашої нової програми за допомогою інтерфейсу PriceItem і механізму наслідування. ». Кожен клас, який реалізує інтерфейс, сам може вибирати способи реалізації.
4 Пакети та області видимості 4.1 Пакети Пакет - це група взаємопов'язаних класів. Взаємозв'язок може бути будь-якого типу: тісно взаємодіють один з одним класи, класи, що виконують одні й ті ж функції або класи одного розробника. * Кожен пакет має ім'я. Ім'я являє собою звичайний ідентифікатор Java. Особливість полягає в тому, що це ім'я одночасно є назвою папки, в якій зберігаються файли класів, що входять в пакет. А крапка в імені перетвориться в роздільник імен файлової системи. Тобто пакет з ім'ям java.util буде представлений текою util, що знаходиться всередині папки java. У папці зберігаються файли з розширенням .java, що містять описи класів, що входять в пакет. На початку такого файлу повинен стояти оператор package, після якого записується ім'я пакета.
5 Файлова структура Java-проекту Отже, Java-проект може складатися з декількох пакетів. Кожному пакету в файловій структурі операційної системи відповідає одна папка. У пакеті можуть міститися класи та інтерфейси. Вони зберігаються у файлах з розширенням .java. У кожному файлі з розширенням .java обов'язково описується один клас або інтерфейс, назва якого збігається з назвою цього файлу. Він повинен бути оголошений як відкритий (перед оголошенням класу вказується ключове слово public). Всі інші класи та інтерфейси з цього файлу є закритими - їх не можна використовувати за межами цього пакету (ні з допомогою довгого, ні за допомогою короткого імені). Тому з класом Dog, який ми розробляли на минулому занятті, можна працювати виключно в межах його пакета. Всі класи та інтерфейси, які згодом передбачається використовувати в інших пакетах, повинні бути оголошені відкритими (а значить, перебувати в окремих файлах). Eclipse створює новий файл з розширенням .java автоматично, якщо виконати команду New -> Class або New -> Interface. Файл з розширенням .java - це звичайний текстовий файл. Його можна відкривати і редагувати як за допомогою Eclipse, так і в будь-якому іншому текстовому редакторі (навіть у Блокноті). Для кожного класу (відкритого чи закритого) Java створює файл із розширенням .class. Це двійковий файл, в якому зберігаються команди на внутрішній мові Java. Ці файли недоступні для редагування в Eclipse (якщо спробувати їх відкрити, Eclipse насправді відкриє відповідний. Java-файл). Щоб вони не заважали, їх можна приховати за допомогою фільтра. Для цього в Navigator натисніть маленьку трикутну кнопку праворуч (menu) і виберіть команду Filters ... У вікні, поставте галочку напроти розширення .class, щоб приховати з панелі Navigator відповідні файли. 6 Області видимості класів Область видимості класу - це частина програми, у якій можна оголошувати змінні і створювати об'єкти цього класу. Звичайний клас завжди видно в межах свого пакету. Якщо клас є відкритим, його видно також з інших пакетів (в цьому випадку до нього треба звертатися, використовуючи повне ім'я або, якщо попередньо імпортувати пакет, скорочене). Вкладені класи, оголошені без модифікатора public, видні тільки в методах їх класу. Класи, описані в методах, видні тільки в межах цих методів. Анонімні класи видні тільки в межах команди, якою вони створюються.
7 Області видимості членів класу Члени класу (методи та атрибути), оголошені як public, видно скрізь, де видно сам клас. Члени класу, оголошені як protected видно в самому класі та його нащадках. Члени класу, оголошені як private, видимі лише в межах класу. Якщо до члена класу не застосовується ні один з модифікаторів public, private, protected, він видний в межах поточного пакета. "Видимість" поля означає, що його можна використовувати у виразах, передавати в якості аргументу в методи, змінювати його значення за допомогою присвоювання. "Видимість" методу означає можливість його виклику. Для звернення до полів і методів класу використовується повне ім'я, що складається з імені об'єкта відповідного класу і власне імені атрибута або методу. У тілі методу того ж класу ім'я об'єкта можна опускати (якщо мається на увазі this - об'єкт, для якого викликаний даний метод). 8 Області видимості змінних Змінні, оголошені в тілі методу, видно від місця оголошення до кінця блоку, в якому це оголошення знаходиться. Межі блоку задаються фігурними дужками {}. Тому в наступному прикладі: { int x = 0; } { int x = 2; } використовуються дві різні змінні x (перша змінна, що дорівнює 0, перестає існувати за межами свого блоку). Змінні, які є параметрами методу, видно у всьому тілі методу. Перераховані змінні називаються локальними змінними. Двох локальних змінних з однаковими іменами і пересікаючими областями видимості бути не повинно. Не можна, наприклад, оголосити дві змінних наступним чином: int x = 0; { int x = 2; } Не можна, зокрема, оголошувати в тілі методу змінну, співпадаючу (по імені) з одним з параметрів методу.
Контрольні питання
1. Дайте визначення інтерфейсу у java. 2. Охарактеризуйте поняття абстрактного класу. 3. Наведіть приклад практичної реалізації класу. 4. Дайте визначення пакету та наведіть приклад імпорту пакетів у Java. 5. Розкажіть про області видимості класів, їх членів та змінних.
|
|||
|