Professional Documents
Culture Documents
Lekcija - 4n For Programming
Lekcija - 4n For Programming
УПРАВЛІННЯ
ДОСТУПОМ
Глибовець А.М.
ВСТУП
Важливим фактором об’єктно-орієнтованої
розробки є відділення змінних складових від
постійних.
Це особливо важливо для бібліотек.
ua.com.glybovets.examples. lecture4.ImportedMyClass
СТВОРЕННЯ УНІКАЛЬНИХ ІМЕН
ПАКЕТІВ
СТВОРЕННЯ УНІКАЛЬНИХ ІМЕН
ПАКЕТІВ
Ви можете помітити, що оскільки пакет насправді
ніколи не «пакується» в один файл, він може
складатися з безлічі файлів .class, що може призвести
до безладу.
Для вирішення цієї проблеми логічно необхідно
розмістити всі файли .class конкретного пакету в
одному каталозі (використати ієрархічну структуру
файлової системи).
СТВОРЕННЯ УНІКАЛЬНИХ ІМЕН
ПАКЕТІВ
Розміщення файлів пакету в окремому каталозі
вирішує дві інші задачі:
Створенняунікальних імен пакетів
Пошук класів, загублених в «хащах» структури каталогів.
Проблема вирішується кодуванням шляху файлу в
імені пакету.
За загальноприйнятою практикою перша частина
імені пакету має складатися з перевернутого
доменного імені розробника класу.
Доменні імена Інтернет – унікальні, це вирішує
проблему унікальності пакетів.
СТВОРЕННЯ УНІКАЛЬНИХ ІМЕН
ПАКЕТІВ
Інтерпретатор Java діє в такому порядку.
Спочатку він шукає змінну середовища з ім'ям CLASSPATH
(вона встановлюється в операційній системі).
CLASSPATH містить один або більше каталогів, які
використовуються як кореневі для пошуку .class файлів.
Починаючи з цього кореневого каталогу, інтерпретатор бере ім'я
пакету і замінює кожну точку на косу риску для створення імені
шляху від кореня в CLASSPATH (так, наприклад, package
foo.bar.baz перетвориться на foo\bar\baz або foo/bar/baz (може
бути щось інше, в залежності від Вашої операційної системи).
Потім це додається до різних елементів змінної CLASSPATH.
Він також здійснює пошук у стандартних каталогах, де
розташовується сам інтерпретатор.
СТВОРЕННЯ УНІКАЛЬНИХ ІМЕН
ПАКЕТІВ
Щоб зрозуміти усе вище сказане, розглянемо моє
доменне ім’я glybovets.com.ua
Перевертаємо його і отримуємо унікальне глобальне
ім’я – ua.com.glybovets для моїх класів.
Тепер якщо я хочу створити бібліотеку з ім’ям
practice1 у мене вийде наступне ім’я пакету:
package ua.com.glybovets.practice1
КОНФЛІКТИ ІМЕН
КОНФЛІКТИ ІМЕН
Що відбувається при імпортуванні конструкцією *
двох бібліотек, що мають в своєму складі ідентичні
імена?
Приклад:
import ua.com.glybovets.utils.*;
import java.util.*;
І в моїй бібліотеці присутній власний клас Vector, але
і в бібліотеці java.util також присутній клас Vector.
Це може призвести до потенційного конфлікту.
Але поки ви не почнете писати код, що викликає
конфлікти, все буде нормально працювати (і це добре
…).
КОНФЛІКТИ ІМЕН
Конфлікт дійсно відбудеться при спробі створити
Vector:
Vector v = new Vector();
Якого з класів Vector стосується ця команда?
Цього не знає ні компілятор ні читач програми …
Приклад:
ua.com.glybovets.lecture4.OrganizedByAccess
ІНТЕРФЕЙС І РЕАЛІЗАЦІЯ
Такий підхід лиш частково спрощує читання коду,
оскільки інтерфейс і реалізація все ще розміщуються
поруч.
Інакше кажучи, ви все ще бачите вихідний код –
реалізацію – оскільки вона записана прямо в класі.
ДОСТУП ДО КЛАСІВ
У Java за допомогою специфікаторів доступу можна
також вказати, які з класів всередині бібліотеки
будуть доступні для її користувачів.
Якщо ви хочете, щоб клас був доступний
користувачу-клієнту, то додаєте ключове слово public
до всього класу.
При цьому ви керуєте навіть самою можливістю
створювати об’єкти даного класу програмістом-
клієнтом.
public class Widget{…
ДОСТУП ДО КЛАСІВ
Діють наступні обмеження:
У кожному модулі, що компілюється, може існувати
тільки один відкритий (public) клас.
Ім’я відкритого класу має збігатися з іменем файлу, в
якому міститься модуль, що компілюється.
Модуль, що компілюється, може взагалі не містити
відкритих класів (хоча це не типово).
ДОСТУП ДО КЛАСІВ
Класи не можна оголосити як private або protected.
Розглянемо приклад:
ua.com.glybovets.lecture4.Lesson;
ВИСНОВКИ
ВИСНОВКИ
У будь-яких стосунках важливо встановити
обмеження, які будуть підтримуватися усіма
сторонами.
При створенні бібліотеки ви встановлюєте стосунки з
користувачами бібліотеки, що створюють програми
або бібліотеки більш високого рівня.
ВИСНОВКИ
Якщо програмісти-клієнти залишені на самоті і не
обмежені ніякими правилами, вони можуть робити
все, що їм заманеться, з будь-якими членами класів –
навіть тими, доступ до яких вам хотілося б
обмежити.
Усі деталі реалізації відкриті зовнішньому світові.