Вміст пакету

Якщо у вихідному файлі відсутній оголошення package, то вхідні в нього типи вважаються належними до безіменному пакету

До проектування пакета слід підходити уважно і включати в нього тільки функціонально повязані класи та інтерфейси Класи пакета можуть вільно звертатися до незакритим членам один одного Захист членів класу призначена для запобігання некоректних дій з боку класів, що володіють доступом до деталей внутрішньої реалізації інших класів У межах пакета не існує ніяких обмежень доступу, крім priv a te, і в результаті може вийти так, що сторонній клас отримав до інших класів ближчий доступ, ніж вам хотілося б

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

Якщо пакет складається з взаємоповязаних типів, ви зможете давати їм очевидні імена,

уникаючи при цьому конфліктів із сторонніми типами з цього ж пакета

Пакет може бути складовою частиною іншого пакета Наприклад, пакет javalang є вкладеним, тобто пакет lang входить в більш великий пакет java Пакет java не містить нічого, крім інших пакетів Вкладення дозволяє побудувати ієрархічну систему імен для взаємоповязаних пакетів

Наприклад, щоб створити набір пакетів для адаптивних систем (скажімо, нейромереж або генетичних алгоритмів), можна скористатися вкладеними пакетами, розділяючи їх імена точками:

package adaptiveneuralNet

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

Вкладення пакетів є засобом організації взаємоповязаних пакетів і не має відношення до прав доступу Класи пакета adaptive genetic не зможуть працювати з закритими на пакетному рівні ідентифікаторами з adaptive або adaptiveneuralNet Область видимості пакета не виходить за його межі Вкладення дозволяє групувати взаємоповязані пакети і допомагає програмістам шукати класи в ієрархічній структурі, але не дає ніяких інших переваг

Глава 11

ПАКЕТ ВВЕДЕННЯ / ВИВЕДЕННЯ

З точки зору програміста,

користувач – це периферійний пристрій,

вводить символи у відповідь на команду read

Пітер Уїльямс

Введення / висновок в Java описується в термінах потоків Потоком / На жаль, у вітчизняній літературі одним словом потік переводяться абсолютно різнорідні терміни thread (див вище) і stream, що створює певну двозначність У тих випадках, коли контекст не дає однозначного тлумачення, для перекладу thread використовується уточнююче термін програмний потік – Прямуючи перев / називається впорядкована послідовність даних, яка має джерело (вхідний потік) або приймач (вихідний потік) Потоки введення / виведення позбавляють програміста від необхідності вникати в конкретні деталі операційної системи і дозволяють здійснювати доступ до файлів В основі роботи всіх потоків лежить обмежений набір базових інтерфейсів і абстрактних класів більшість типів потоків (наприклад, потоки для роботи з файлами) підтримують базові методи, іноді – з мінімальними модифікаціями Найкращий спосіб освоєння введення / виводу в Java полягає у вивченні базових інтерфейсів і абстрактних класів Як приклад ми розглянемо файлові потоки

Основним виключенням з цієї моделі є потоки даних, які читають і записують значення базових типів Java, таких як int або string Ці потоки підтримують більш широкий набір методів, спроектований з урахуванням їх специфіки Вони розглядаються у другій частині цієї глави, починаючи з розділу 1116

Пакет введення / виводу в Java називається javaio Він імпортується в усіх лістингах цієї глави, навіть якщо рядок import і не входить в приклад

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

111 Потоки

У пакеті javaio визначається кілька абстрактних класів для базових вхідних і вихідних потоків Потім ці абстрактні класи розширюються, і на їх основі створюються деякі корисні типи потоків Потоки майже завжди є парними: якщо існує FileInputStream, то є і FileOutputStream

Крім того, існують класи для роботи з іменами файлів, клас потоку з можливістю читання / запису з імям RandomAccessFile і аналізатор для поділу вхідного потоку на окремі лексеми

Клас IOException використовується багатьма методами javaio для сигналізації про виняткових станах Деякі класи, які є розширеннями IOException, повідомляють про конкретні проблеми, проте в більшості випадків все ж застосовуються обєкти IOException з рядком-описом Подробиці наведені в розділі 1120

Перед тим як розглядати конкретні види вхідних і вихідних потоків, слід ознайомитися з базовими абстрактними класами InputStream і OutputStream Ієрархія типів пакета javaio зображена на рис 111

Рис 111 Ієрархія типів в javaio

Джерело: Арнольд К, Гослінг Д – Мова програмування 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>

*

*