Інфраструктура Java

Мова Java розроблений так, щоб забезпечувати максимальну переносимість Багато аспектів Java визначаються відразу для всіх можливих реалізацій Наприклад, тип int завжди повинен являти собою 32-розрядне ціле зі знаком з доповненням за модулем 2 У багатьох мовах програмування точні визначення типів є долею конкретної реалізації на рівні мови даються лише загальні гарантії, такі як мінімальний діапазон чисел даного типу або можливість системного запиту, що дозволяє визначити діапазон на даній платформі

У мові Java такі вимоги просунуті аж до рівня машинної мови, на який транслюється текст програм Вихідний текст програми на Java

компілюється в байт-код, Що виконується на віртуальній машині Java Байт-код є

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

Віртуальна машина присвоює кожному додатку власний контекст часу виконання (runtime), Який одночасно ізолює додатки один від одного і забезпечує безпеку роботи Менеджер безпеки кожного контексту часу виконання визначає, які можливості доступні даному додатку Наприклад, менеджер безпеки може заборонити додатком читання або запис на локальний диск або обмежити мережеві зєднання строго визначеними компютерами

У сукупності всі ці кошти роблять мову Java повністю платформонезавісимость і надають схему безпеки для виконання переданого по мережі коду на різних рівнях довіри (trust levels) Вихідний текст Java, скомпільований в байт-код Java, може виконуватися на будь-якому компютері, де є віртуальна машина Java Код може виконуватися на відповідному рівні захисту, щоб запобігти випадковому або зловмисне пошкодження системи Рівень довіри

регулюється залежно від джерела байт-коду – байт-код на локальному диску або в

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

115 Інше

Java містить ряд інших можливостей, які коротко згадуються тут і розглядаються в наступних главах:

Потоки: Java володіє вбудованою підтримкою потоків для створення багатопоточних додатків Для синхронізації паралельного доступу до обєктів і даними класу використовується блокування на рівні обєктів і на рівні класів Подробиці наведені в розділі 9

Введення / висновок: Java містить пакет javaio, призначений для виконання різноманітних операцій введення / виводу Конкретні можливості введення / виведення описані в главі 11

Класи загального призначення: до складу Java входять класи, що представляють багато примітивні типи даних (такі, як Integer, Double і Boolean), а також клас Class для роботи з різними типами класів Програмування з використанням типів розглядається в розділі 13

Допоміжні класи та інтерфейси: Java містить пакет javautil з безліччю корисних класів – таких, як BitSet, Vector, Stack і Date Більш докладно про допоміжних класах розповідається в главі 12

КЛАСИ І ОБЄКТИ Почнемо з самого початку, хоча порядок може бути й іншим Доктор Who, Meglos

Фундаментальною одиницею програмування в Java є клас До складу класів входять методи – фрагменти виконуваного коду, в яких відбуваються всі обчислення Класи також визначають структуру обєктів і забезпечують механізми для їх створення на основі визначення класу Ви можете обмежуватися у своїх програмах одними лише примітивними типами (цілими, речовими і т д), але практично будь-яка нетривіальна програма на Java створює обєкти і працює з ними

В обєктно-орієнтованому програмуванні між тим, що робиться, і тим, як це робиться, існують чіткі відмінності Що описується у вигляді набору методів (а іноді і загальнодоступних даних) і повязаної з ними семантики Таке

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

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

призначений для виведення копії обєкта Хто-небудь може створити метод print і вкласти

в його назву іншу семантику – скажімо, термін може бути скороченням від виразів process interval або prioritize nonterminals. Контракт (тобто сукупність сигнатури і семантики) визначає сутність методу

На питання як відповідає клас, на основі якого створювався даний обєкт Клас визначає реалізацію методів, підтримуваних обєктом Кожен обєкт являє собою примірник класу При виклику методу обєкта виконуваний код

шукається у класі Обєкт може використовувати інші обєкти, проте ми почнемо вивчення з простих класів, в яких всі методи реалізуються безпосередньо

21 Простий клас

Основними компонентами класу є поля (дані) і методи (код для роботи з ними) Наведемо простий клас Body, призначений для зберігання відомостей про небесні тіла:

class Body {

public long idNum public String nameFor public Body orbits

public static long nextID = 0

}

Насамперед оголошується імя класу Оголошення класу в мові Java створює імя типу, Так що надалі посилання на обєкти цього типу можуть оголошуватися наступним чином:

Body mercury

Подібне оголошення вказує на те, що mercury є посиланням на обєкт класу Body Воно НЕ створює сам обєкт, а лише оголошує посилання на нього Спочатку посилання має значення null, і обєкт, на який посилається mercury, не існує до тих пір, поки ви не створите його явним чином в цьому відношенні Java відрізняється від інших мов програмування, в яких обєкти створюються при оголошенні змінних

Перша версія класу Body спроектована невдало Це було зроблено навмисно: у міру удосконалення класу в даній главі ми зможемо зосередити свою увагу на деякі можливості мови

Вправа 21

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

Вправа 22

Напишіть клас LinkedList (звязний список), в якому є поле типу Object і посилання на наступний за списком елемент LinkedList

22 Поля

Змінні класу називаються полями прикладами можуть служити поля nameFor і orbits, що входять в клас Body Кожен обєкт Body володіє окремим екземпляром своїх полів: значення типу long відрізняє дане небесне тіло від інших, змінна типу String містить його імя, а посилання на інший обєкт Body визначає небесне тіло, навколо якого воно звертається

Наявність у кожного обєкта окремого примірника полів означає, що його стан унікально Зміна поля orbits в одному обєкті класу Body ніяк не відбивається на значеннях відповідного поля в інших обєктах цього класу

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

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

Коли в цій книзі використовуються терміни поле або метод, зазвичай маються на увазі нестатичні поля і методи У тих випадках, коли контекст не дає однозначного тлумачення, ми будемо користуватися терміном Нестатичних поле або нестатичних метод.

Вправа 23

Включіть в клас Vehicle (транспортний засіб) статичне поле для зберігання ідентифікатора машини, а в клас Car (автомобіль) – нестатичних поле, що містить номер машини

23 Управління доступом і спадкування

Код класу завжди може звертатися до всіх полів і методів даного класу Для управління доступом до них з інших класів, а також для управління спадкуванням їх у підкласах члени класів можуть оголошуватися з одним з чотирьох атрибутів доступу:

Відкритий (Public): до членів класу завжди можна звертатися з будь-якого місця, в якому доступний сам клас такі члени успадковуються в підкласах

Закритий (Private): доступ до членів класу здійснюється тільки з самого класу

Захищений (Protected): до даних членам дозволяється доступ з підкласів і з функцій, що входять в той же пакет Такі члени успадковуються підкласами Розширення обєктів (спадкування) докладно розглянуто в розділі 3

Пакетний: доступ до членів, оголошеним без вказівки атрибута доступу, здійснюється тільки з того ж пакета Такі члени успадковуються подклассами пакета Пакети розглядаються в розділі 10

Поля класу Body були оголошені з атрибутом public, тому що для виконання поставленого завдання програмістам необхідний доступ до цих полів На прикладі пізніших версій класу Body ми переконаємося, що подібне рішення зазвичай є невдалим

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

*

*