1   2   3   4   5   6   7
Ім'я файлу: 2 diplom - гаврилов.doc
Розширення: doc
Розмір: 1001кб.
Дата: 28.11.2021
скачати
Пов'язані файли:
магіст-Данещук-фініш-АПДЕЙТ.docx

1.2 Adminer


Adminer – це легкий інструмент для адміністрування MySQL, PostgreSQL, SQLite, MS SQL і Oracle. Проект Adminer (Рис. 2) народився як "полегшений" варіант phpMyAdmin. Поширюється на умовах Apache license у формі поодинокого PHP-файла розміром близько 280 КБ (для попередньої версії - 180), який є результатом компіляції початкових .php і .js файлів за допомогою спеціального PHP-скрипта. Перша версія Adminer 'а була випущена 25 липня 2007 року. Незважаючи на свою легковагість цей скрипт підтримує практично усі можливості phpMyAdmin/phpPgAdmin і інших аналогічних інструментів.



Рис. 2
Можливості Adminer

  • Базові функції: вибір бази даних, вибір і редагування її таблиць, перегляд і редагування їх вмісту

  • Пошук і сортування по вмісту декількох колонок таблиці

  • Редагування таких об'єктів, як: представлення, тригери, події, процедури, що зберігаються, процеси, змінні mysql, права доступу користувачів

  • Текстове поле для введення довільних SQL виразів з підтримкою історії команд

  • Підсвічування SQL -синтаксиса

  • Експорт баз даних і їх таблиць

  • Зручний призначений для користувача інтерфейс (активно використовуючий JavaScript)

  • Перемикана мова інтерфейсу (англійський, російський, чеський, словацький, німецький, іспанський, данський, французький, італійський, естонський, угорський, китайський, японський, тамилский)

  • Візуальний редактор E - R схем БД

  • Захист від злому через XSS, CSRF, SQL ін'єкції, викрадення сесій.

  • Виведення валидных XHTML 1.1 сторінок в кодуванні UTF - 8

Також поставляється спеціальна, ще більше полегшена версія скрипта Adminer Editor призначена для роботи тільки з однією базою даних і орієнтована на вбудовування в адмін.-частину динамічних сайтів і CMS. Розмір "скомпільованого" editor.php - близько 100 KБ.
Критика

  • відносно повільна швидкість роботи з великим об’ємом даних;

  • відсутність підсвітки типів даних які повертає MySQL;

  • відсутність багатокористувацького режиму;

  • відсутність ведення логів;

  • незручний інтерфейс.



1.3 SQL Buddy


SQL Buddy - веб-додаток з відкритим кодом, що написаний на мові PHP і є веб-інтерфейсом для адміністрування СУБД MySQL.

Особливість SQL Buddy (Рис. 3) в тому, що він простий в установці, ніж phpMyAdmin і йому подібні, а це буває украй корисно, коли хостер дає доступ до БД, але не надає ніяких засобів для адміністрування, а потрібно терміново змінити поле в базі даних. Буває добре покласти поряд зі своїм сайтом sql buddy і використовувати його як легкий і швидкий інструмент для роботи з базою даних.



Рис. 3
Можливості

  • Простота установки – просто розархівуйте дистрибутив SQL Buddy на веб сервер, і ви готові до роботи.

  • Повний контроль над користувачами - ви можете створювати, видаляти, призначати права користувачам та ін.

  • Зручність перегляду даних - дані відображаються в колонках, розмір яких можна змінювати, а дані в них сортувати.

  • Збільшення швидкості завантаження - замість того, щоб постійно перезавантажувати сторінку, SQL Buddy використовує AJAX, щоб швидко завантажувати потрібні дані. Крім того, використання AJAX ніскільки не вплинуло на можливість користуватися кнопками Назад/Вперед броузера, і додавати сторінки в закладки.

  • Імпорт і експорт - ви можете легко імпортувати або експортувати ваші дані в csv або sql файл.

  • Інтерфейс підтримує 37 мов, включаючи українську

Критика

  • погано працює з «View»;

  • скудна інформація про структуру таблиць в базі даних;

  • незручне редагування полів таблиці;

  • нема підсвітки типів даних MySQL;

  • незручне створення нової таблиці;

  • відсутність ведення логів.


Розділ II. Проектування алгоритму і розробка програмного коду з використанням сучасних інформаційних технологій

2.1 Загальна характеристика Java


Java (вимовляється Джава; інколи - Ява) — об'єктно-орієнтована мова програмування, випущена компанією Sun Microsystems у 1995 році як основний компонент платформи Java. Синтаксис мови багато в чому походить від C та C++. У офіційній реалізації, Java програми компілюються у 2байткод, який при виконанні інтерпретується 3віртуальною машиною для конкретної платформи.

Sun Microsystems надає компілятор Java та віртуальну машину Java, які задовольняють специфікації Java Community Process, під ліцезією GNU General Public License.

Мова значно запозичила синтаксис із C і C++. Зокрема, взято за основу об'єктну модель С++, проте її модифіковано. Усунуто можливість появи деяких конфліктних ситуацій, що могли виникнути через помилки програміста та полегшено сам процес розробки об'єктно-орієнтованих програм. Ряд дій, які в С/C++ повинні здійснювати програмісти, доручено віртуальній машині. Передусім, Java розроблялась як платформо-незалежна мова, тому вона має менше низькорівневих можливостей для роботи з апаратним забезпеченням. За необхідності таких дій java дозволяє викликати підпрограми, написані іншими мовами програмування.

Java вплинула на розвиток J++,що розроблялась компанією Microsoft. Роботу над J++ було зупинено через судовий позов компанії Sun Microsystems, оскільки ця мова програмування була модифікацією Java. Пізніше в новій платформі Microsoft .NET випустило J#, щоб полегшити міграцію програмістів J++ або Java на нову платформу. З часом нова мова програмування С#, стала основною мовою платформи, перейнявши багато чого з Java. J# востаннє включався в версію Microsoft Visual Studio 2005. Мова сценаріїв JavaScript має схожу із Java назву і синтаксис, але не пов'язана із Java.
Історія

Мова програмування Java зародилася в 1991 р. в лабораторіях компанії Sun Microsystems. Розробку проекту започаткував Джеймс Ґослінґ, сам проект мав назву «Green»(Зелений). Створення першої робочої версії, яка мала назву «Oak»(дуб), зайняло 18 місяців. Оскільки виявилось, що ім'я Oak уже використовувалось іншою фірмою, то в результаті тривалих суперечок навколо назви нової мови з поміж ряду запропонованих було вибрано назву Java, у 1995 р. мову було офіційно перейменовано.

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

Досить скоро майже всі найпопулярніші тогочасні веб-оглядачі отримали можливість запускати «безпечні» для системи Java аплети всередині веб-сторінок. У грудні 1998 р. Sun Microsystems випустила Java 2 (спершу під назвою J2SE 1.2), де було реалізовано декілька конфігурацій для різних типів платформ. Наприклад, J2EE призначалася для створення корпоративних застосунків, а значно урізана J2ME для приладів з обмеженими ресурсами, таких як мобільні телефони.

13 листопада 2006 року Sun випустили більшу частину Java в якості вільного та відкритого програмного забезпечення згідно з умовами 4GNU General Public License (GPL). 8 травня 2007 корпорація закінчила процес, в результаті якого всі початкові коди Java були випущенні під GPL, за винятком невеликої частини коду, на який Sun не мала авторського права.

Період становлення Java збігся у часі з розквітом міжнародної інформаційної служби World Wide Web. Ця обставина відіграла вирішальну роль у майбутньому Java, оскільки Web теж вимагала платформо-незалежних програм. Як наслідок, були зміщені акценти в розробці Sun з побутової електроніки на програмування для Інтернет.
Об'єктна модель мови java

Коли говорять про об'єктно-орієнтовану мову програмування, припускають підтримку трьох механізмів :

інкапсуляція

спадкоємство

поліморфізм.

Інкапсуляція і спадкоємство в мові Java реалізуються за допомогою поняття класу.

Класи

Для створення класів можна використовувати тільки ключове слово class. Що ж до union, то це ключове слово в Java не застосовується. У мові програмування З++ опис класу може бути відокремлений від його визначення. Для Java це не так - опис класу неприпустимо. Усі методи мають бути визначені усередині визначення класу. Неприпустимо визначення вкладених класів.

У Java також немає шаблонів. Можливо створювати класи тільки на базі інших класів. Об'єкт класу створюється за допомогою ключового слова new, проте неможливо видалити об'єкт явним чином, оскільки ключове слово delete мови програмування З++ в Java не використовується.

При визначенні класу не можна вказати деструкцію. Функції видалення об'єктів Java з пам'яті виконує система зборки сміття. Усередині одного початкового файлу можна визначити тільки один загальнодоступний клас public.

Усі класи в Java наслідують від класу Object, тому для будь-якого об'єкту можна використовувати методи цього класу.

class Point extends Object {

private double x;

private double y;

Point (double x, double y){

this.x = x;

this.y = y;

}

Point () {

this (0.0, 0.0);

}

public void setX (double x){

this.x = x;

}

public void setY (double y){

this.y = y;

}

}

Клас є шаблоном для створення об'єктів; він може містити дані і методи. Вище наведений приклад класу, що описує точки в двовимірному просторі. Тут і далі номери рядків використовуються для наступних пояснень і не є частиною Java -программ.

У мові Java не можна відривати визначення методу (функції) від опису заголовка. Синтаксична конструкція class повністю включає усю інформацію про клас. Зокрема, реалізації методів зобов'язані міститися усередині цієї конструкції.

Для позначення спадкоємства використовується ключове слово extends (рядок 1). Клас Object - це корінь дерева спадкоємства. У Java не буває классов-"сирот": у усіх класів, окрім Object, є попередник.

Режими доступу до елементів класу (private, protected, public) ті ж, що і в C++, за одним важливим виключенням. Якщо режим доступу опущений, передбачається, що відповідний елемент доступний в межах пакету (см далі).

У рядку 9 наведений приклад явного виклику одного конструктора з іншого.

Інші приведені вище рядки не потребують пояснень окрім однієї - відсутньою. У мові Java не буває деструкцій. Причина в тому, що управління пам'яттю автоматизоване (у фоновому режимі працює збирач сміття). Для вивільнення інших ресурсів, що асоціюються з об'єктом, служить спеціальний метод finalize. Цей метод викликається збирачем сміття у момент утилізації пам'яті, займаної об'єктом.

class Point3D extends Point {

protected double z;

Point3D () {

super ();

z = 0.0;

}

Point3D (double x, double y, double z){

super (x, y);

this.z = z;

}

}

Ключове слово this (см, наприклад, рядка 5 і 9) використовується в об'єкті для посилання на самого себе. Аналогічну роль по відношенню до батьківського класу грає слово super. У рядках 4 і 8 викликаються конструктори батьківського класу.

Наведені приклади показують, що в мові Java, як і в C++, методи можуть бути переобтяженими, тобто під одним ім'ям можуть фігурувати різні методи з різним набором параметрів. Ви не можете визначати методи поза тілом класу, створюючи таким чином глобальні функції. Немає також можливості визначення поза класом глобальних даних. Проте, усередині класу можна визначати статичні методи і поля які гратимуть роль глобальних методів і даних.

Користуючись ключовими словами static і final, можна визначати усередині класів глобальні константи.

Якщо у базовому класі метод визначений з ключовим словом final, його не можна перевизначити в дочірньому класі, створеному на базі цього методу.

Методи не можуть бути визначені як inline.

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

public native String getName();

public native Class getSuperclass();

public static native Class forName(String className) throws ClassNotFoundException;

Як і в C++, за допомогою ключового слова static можна визначити дані і методи, які є загальними для усіх об'єктів класу. (Функцій, що не належать якому-небудь класу, в мові Java не буває.) Наступний приклад містить фрагменти стандартного пакету java.lang.

У рядках 1 і 3 трапляється ключове слово final. У рядку 1 це слово означає заборону на спадкоємство від класу Character. У рядку 3 його сенс аналогічний описувачу const в C++.

Якщо слово final використане в заголовку методу, то цей метод не може бути перевизначений в класах-спадкоємцях.

Як і в C++, в мові Java класи можуть бути абстрактними, тобто не до кінця конкретизованими. Це означає, що в класі описані методи, визначення яких відсутні. Такі методи (як і сам клас) повинні забезпечуватися описувачем abstract. Абстрактні методи повинні конкретизуватися в похідних класах.

У мові Java є зумовлена ієрархія класів, що містяться в пакеті java.lang. У цій ієрархії декілька осібно коштує клас Class. Програміст не може створити об'єкт класу Class (правда, існують і інші класи з цією властивістю). Посилання на об'єкт класу Class можна отримати за допомогою методу getClass, визначеного для об'єктів класу Object.

Спадкоємство. Інтерфейси

Модель спадкоємства в мові Java істотно відрізняється від моделі C++. По-перше, в Java немає множинного спадкоємства. Таким чином, для кожного дочірнього класу може бути тільки один базовий клас. При необхідності, проте, цей дочірній клас може реалізовувати довільну кількість інтерфейсів. Для посилання на методи базового класу ви повинні використовувати ключове слово super.

При необхідності можна викликати в першому виконуваному рядку конструктора дочірнього класу конструктор базового класу (знову ж таки за допомогою ключового слова super).

По-друге, в мові передбачені засоби для заборони подальшого спадкоємства (ключове слово final перед визначенням класу). По-третє, в мові Java є присутнім нове по відношенню до C++ поняття інтерфейсу. Інтерфейси створюються за допомогою ключового слова interface так само, що і класи. Проте на відміну від останніх, інтерфейси є аналогом абстрактних базових класів без полів даних і призначені тільки для визначень набору методів для вирішення яких-небудь завдань, наприклад, додавання компонент в контейнери, організації списків, сортування і так далі.

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

public interface Verbose {

public void drawOn (Graphics g);

public void printOn (OutputStream os);

}

public class Star extends Polygon implements Verbose {

public void drawOn (Graphics g){

}

public void printOn (OutputStream os){

}

}

public class Text extends StringBuffer implements Verbose {

public void drawOn (Graphics g){

}

public void printOn (OutputStream os){

}

}

public class Blackboard extends Canvas {

public void drawVerbose (Verbose d){

Graphics g = getGraphics ();

d.drawOn (g);

}

}

Інтерфейс є набором описів методів. Цей приклад був описаний тільки що. Інтерфейс Verbose містить два методи. Перший призначений для малювання в графічному контексті, другий - для роздруку у вихідний потік.

Клас Star є підкласом багатокутників (Polygon). Окрім іншого, ми хочемо малювати об'єкти цього класу на дошці (Blackboard) і виводити їх опис у файл.

Клас Star є підкласом багатокутників (Polygon). Окрім іншого, ми хочемо малювати об'єкти цього класу на дошці (Blackboard) і виводити їх опис у файл.

Для об'єктів класу Text ми хочемо мати можливість накреслити текст на дошці і виводити його у файл.

Клас Blackboard - спадкоємець класу Canvas, спеціально призначеного для малювання. Як ми бачимо, цей клас за допомогою єдиного методу справляється з малюванням об'єктів, що не мають загального предка (окрім класу Object).

Таким чином, за допомогою інтерфейсів можна компенсувати відсутність множинного спадкоємства. У контексті спадкоємства інтерфейс можна розглядати як абстрактний клас, що не містить даних.
Життєвий цикл об'єкта

Об'єкти створюються за допомогою оператора new. Ініціалізація об'єкту робиться за допомогою відповідного конструктора. Ці операції розділити не можна - за new завжди йде конструктор. Приклад:

Point myPoint = new Point ();

Інших способів створення об'єктів (окрім оператора new) мова Java не надає.

Об'єкт існує до тих пір, поки на нього є посилання (тобто доки він прямо або побічно доступний хоч би з однієї змінної). У мові відсутні явні засоби видалення об'єктів. Після того, як об'єкт став недоступний, він виявляється кандидатом для утилізації збирачем сміття.
Базові типи даних

У мові Java визначено вісім базових типів даних. Для кожного базового типу даних відводиться конкретний розмір пам'яті. Цей розмір не залежить від платформи, на якій виконується додаток Java :


Тип даних

Розмір займаної області пам'яті

Значення за умовчанням

boolean

8

false

byte

8

0

char

16

'x0'

short

16

0

int

32

0

long

64

0

float

32

0.0F

double

64

0.0D


Фактично розміри пам'яті, відведені для зберігання змінної, можуть відрізнятися від приведених вище, наприклад, для зберігання змінної типу short може бути зарезервоване слово розміром 32 біта. Проте мова Java зроблена таким чином, що це ніяк не вплине на мобільність додатка. Оскільки в мові Java немає покажчиків, не можна адресуватися до елементів масиву чисел по відносному зміщенню цих елементів в оперативній пам'яті. Отже, точний розмір елементу в даному випадку не грає ніякої ролі.

Усі базові типи даних за умовчанням ініціалізувалися, тому програмістові не треба про це турбуватися. Можна також ініціалізувати змінні базових типів в програмі або при їх визначенні, як це показано нижче:

int nCounter = 0;

int i;

i = 8;

Змінні типу boolean можуть знаходитися тільки в двох станах - true і false, причому ці стани жодним способом не можна співвіднести з цілими значеннями. Ви не можете, як це було в мові З, виконати перетворення типу boolean, наприклад, до типу int - компілятор видасть повідомлення про помилку.

Змінна типу byte займає вісім біт пам'яті і про неї більше нічого сказати.

Що ж до типу char, то він використовується для зберігання символів в кодуванні UNICODE. Це кодування дозволяє зберігати національні набори символів, що дуже зручно для інтернаціональних застосувань, призначених для роботи в Internet.

Змінні типу byte, short, int і long є знаковими. У мові Java немає беззнакових змінних, як це було в мові С.

Додаток Java може оперувати числами у форматі з плаваючою точкою, визначеним в специфікації IEEE 754. Тип float дозволяє зберігати числа з одинарною точністю, а формат double - з подвійною.

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

int x;

void ChangeX(int x)

{

x = 5;

}

. . .

x = 0;

ChangeX(x);

Після виклику функції ChangeX вміст змінної x залишиться рівним нулю.

Проблему можна розв'язати, якщо замість базових змінних використовувати об'єкти вбудованих класів, що відповідають базовим змінним.
Масиви в Java

У мові Java є присутніми масиви. Ці масиви типізуються. Декларація

Point myPoints[];

описує змінну myPoints як масив об'єктів типу Point. Завести масив певного розміру можна за допомогою інструкції виду

myPoints = new Point[10];

Значення елементів масиву при цьому встановлюються рівними спеціальній величині null.

Розмір масиву може бути отриманий під час виконання програми :

howMany = myPoints.length;

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

int nNumbers[];

int[] nAnotherNumbers;

Допустимі обидва варіанти, тому ви можете вибрати той, який вам більше подобається.

При визначенні масивів в мові Java не можна вказувати їх розмір. Приведені вище два рядки не викликають резервування пам'яті для масиву. Тут просто створюються посилання на масиви, які без ініціалізації використовувати не можна.

Для того, щоб замовити пам'ять для масиву, ви повинні створити відповідні об'єкти за допомогою ключового слова new, наприклад:

int[] nAnotherNumbers;

nAnotherNumbers = new int[15];

Як виконати ініціалізацію елементів таблиці?

Таку ініціалізацію можна виконати або статично, або динамічно. У першому випадку ви просто перераховуєте значення у фігурних дужках, як це показано нижче:

int[] nColorRed = {255, 255, 100, 0, 10};

Динамічна ініціалізація виконується з використанням індексу масиву, наприклад, в циклі:

int nInitialValue = 7;

int[] nAnotherNumbers;

nAnotherNumbers = new int[15];

for(int i = 0; i < 15; i++)

{ nAnotherNumbers[i] = nInitialValue; }

Можливо створювати масиви не лише зі змінних базових типів, але і з довільних об'єктів. Кожен елемент такого масиву повинен ініціалізуватися оператором new.

Масиви можуть бути багатовимірними і, що цікаво, несиметричними.

Нижче створюється масив масивів. У нульовому і першому елементі створюється масив з чотирьох чисел, а в другому - з восьми:

int[][] nDim = new int[5][10];

nDim[0] = new int [4];

nDim[1] = new int [4];

nDim[2] = new int [8];

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

Масиви в мові Java є об'єктами деякого вбудованого класу. Для цього класу існує можливість визначити розмір масиву, звернувшись до елементу даних класу з ім'ям length, наприклад:

int[] nAnotherNumbers;

nAnotherNumbers = new int[15];

for(int i = 0; i < nAnotherNumbers.length; i++)

{

nAnotherNumbers[i] = nInitialValue;

}

Для визначення розміру масиву вам не потрібний такий оператор, як sizeof з мови програмування З, тому що існує інший спосіб визначення цього розміру.

Інших структурних типів (що не є об'єктами) в мові Java немає, тобто немає структур, об'єднань і тому подібне. Немає в Java і покажчиків.

Рядки символів є об'єктами типу String (текстові константи) або StringBuffer (змінювані рядки).
Пакети

Класи в мові Java об'єднуються в пакети. Усі класи, що входять в один пакет, є дружніми по відношенню один до одного, тобто мають взаємний доступ до змінних і методів, якщо осоружне не обумовлене явно за допомогою специфікаторів private або protected.

Пакети розмежовують простори імен. "Просто глобальних" імен в мові Java не буває.

Пакет оформляється за допомогою синтаксичної конструкції виду

package my_packages.pack1:

Інструкція package повинна стояти першою у файлі з початковим Java -текстом. Вона діє до кінця файлу.

Пакети можуть імпортуватися іншими пакетами за допомогою інструкції import. Приклади,

import java.util;

import java.util.HashTable;

import java.util.*;

Перша інструкція import дозволяє звертатися до класів пакету util таким чином:

util.Vector

util.HashTable

. . .

Друга інструкція імпортує лише клас HashTable, дозволяючи надалі звертатися до цього класу по короткому імені, без префікса util.

Третя інструкція import дозволяє звертатися по коротких іменах до усіх класів пакету util.
Конструкції, що управляють.

Конструкції мови Java, що управляють, цілком традиційні, за винятком засобів виходу з вкладених блоків (зокрема, з вкладених циклів). Приклад:

test:

for (int i = 0; i < 10; i++){

for (int j = 0; j < 10; j++){

if (i > 3){

break test;

}

}

}

Для передачі управління можна застосовувати як конструкцію break, так і continue (перехід до наступної ітерації циклу).

Інструкція goto в мові Java відсутня.
Виняткові ситуації

Для обробки виняткових ситуацій, що виникають під час виконання програми, в мові Java використовується конструкція try/catch/finally. Блок try містить інструкції, виконання яких може привести до виникнення виняткових ситуацій. Що йдуть за ним один або декілька блоків catch призначено для обробки виняткових ситуацій. Нарешті, блок finally містить інструкції, які будуть виконані незалежно від виникнення виняткової ситуації у блоці try. При виході з try -части за допомогою інструкцій передачі управління (break, return і тому подібне) блок finally також буде виконаний.

Для передачі інформації про виняткову ситуацію використовуються об'єкти класів - спадкоємців класу Throwable. Наприклад, клас ArrayIndexOutOfBoundsException відповідає за контроль виходу індексів за межі масивів, клас OutOfMemoryException - за реакцію на вичерпання вільної пам'яті, клас ClassCastException - за помилки при перетворенні типів, клас InterruptedException - за обробку переривання поточного потоку і так далі. Компонентою усіх цих класів є поле типу String, в яке поміщається текст повідомлення про помилку. Метод getMessage повертає цей текст.

У подібних об'єктах може міститися і додаткова інформація. Наприклад, об'єкти класу InterruptedIOException містять поле, в яке заноситься число байт, переданих до виникнення виняткової ситуації.

try {

for (int i = 0; i < 100; i++){

System.out.println (messages[i]);

}

}

catch (ArrayOutOfBoundException e){

System.out.println ("No more messages");

}

catch (Exception e){

System.out.println ("Unexpected exception");

System.out.println (e.getMessage());

}

finally {

System.out.println ("Work done");

}
Фрагмент програми, показаний вище, роздруковує повідомлення з масиву messages. При цьому ми не намагаємося з'ясувати розмір масиву, а просто покладаємося на механізм обробки виняткових ситуацій. (Звичайно, ми не радимо писати програми в такому стилі).

Виняткові ситуації можуть збуджуватися програмно за допомогою інструкцій виду

throw new MyException ( "Something' s wrong");

Специфікації мови Java підрозділяють виняткові ситуації на дві категорії. До першої категорії (клас Error) відносяться ситуації, на які програма не зобов'язана реагувати (це свідомо зробить Java -машина). До другої категорії (клас Exception) відносяться ситуації, які програма повинна обробляти обов'язково. Якщо при виконанні методу може виникати виняткова ситуація другого типу, він повинен або обробляти її сам за допомогою конструкції try/catch/finally, або в його визначенні повинна фігурувати конструкція throws Exception1, Exception2, ...

class Foo extends Object {

. . .

public void readFromFile (String fn) throws InvalidFormatException {

FileInputStream fis;

try {

fis = new FileInputStream (fn);

. . .

throw new InvalidFormatException ("Wrong format");

. . .

}

catch (FileNotFoundException e){

}

finally {

if (fis != null )

fis.close();

}

}

. . .

}

В даному прикладі, в методі readFromFile можуть виникнути дві виняткові ситуації. Перша пов'язана з тим, що потрібний файл недоступний. Ця ситуація обробляється усередині методу readFromFile. Друга виняткова ситуація може виникнути, якщо файл має неправильний формат. Ця ситуація передається для обробки вгору.
Вбудовані класи

У мові Java усі класи походять від класу Object, і, відповідно, наслідують методи цього класу. Деякі бібліотеки класів підключаються автоматично, і ми називатимемо їх вбудованими. До таких відноситься, зокрема, бібліотека з назвою java.lang. Інші бібліотеки класів ви повинні підключати в початковому тексті додатка Java явним чином за допомогою оператора import.

Заміщуючі класи

Дуже часто в наших застосуваннях замість базових типів змінних ми використовуватимемо об'єкти вбудованих класів, які називаються заміщуючими класами (wrapper classes). Нижче ми перерахували назви цих класів і назви базових типів даних, які вони заміщають :

Базовий тип даних

Заміщаючий клас

boolean

Boolean

char

Character

int

Integer

long

Long

float

Float

double

Double

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

Серед інших вбудованих класів відмітимо клас Math, призначений для виконання математичних операцій, таких як обчислення синуса, косинуса і тангенса.

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

Бібліотека вбудованих класів містить дуже важливі класи для роботи з виключеннями. Ці класи потрібні для обробки помилкових ситуацій, які можуть виникнути (і виникають!) при роботі додатків або аплетов Java.
Java-машина

Java-компилятор транслює початкові тексти Java -программ в коди Java -машины. Взагалі кажучи, Java -машина є віртуальною в тому сенсі, що вона не існує у вигляді реальних мікросхем і інших пристроїв, а є програмним емулятором, що виконується на якій-небудь традиційній апаратній платформі. Ймовірно, вже найближчим часом слід чекати появи і усе більш широкого поширення і прямих апаратних реалізацій Java -машины.

Ідея мовних процесорів не нова. Відомі спроби впровадити так званий P -код в якості стандарту на результат роботи Паскаль-компиляторов; свого часу багато писали про мову і машину Форт; була виконана апаратна реалізація рефал-машины, і список цей можна продовжувати і продовжувати.

У контексті проекту Java специфікація віртуальної машини є частиною комплексу заходів, спрямованих на стандартизацію Java -среды і на забезпечення її незалежності від апаратно-програмної платформи. Крім того, слід враховувати те специфічне середовище, в якому повинні готуватися і працювати Java -программы. Якщо Web -страница містить Java -аплеты, ці аплеты передаватимуться по мережі. Значить, дуже бажано, щоб Java -код був як можна компактнішим; інакше час завантаження сторінки ризикує стати дратівливо великим. Відповідно, архітектура і система команд Java -машины проектувалися так, щоб всіляко сприяти компактифікації коду. З іншого боку, формат команд Java -машины досить простий (зазвичай команди не мають операндів і займають один байт), тому можлива її (машини) ефективна емуляція. З цієї причини програми, підготовлені для виконання на Java -машині, часто називають байт-кодами.
Збір сміття

Одна з цікавих особливостей мови програмування Java і середовища виконання додатків Java полягає в наявності спеціального процесу зборки сміття, призначеного для видалення непотрібних об'єктів з пам'яті. Ця система позбавляє програміста від необхідності уважно стежити за використанням пам'яті, звільняючи непотрібні більше області явним чином.

Створюючи об'єкти в Java, ви можете керуватися принципом "створи і забудь", оскільки система зборки сміття потурбується про видалення ваших об'єктів. Об'єкт буде видалений з пам'яті, як тільки на нього не залишиться жодного посилання з інших об'єктів.

Пріоритет процесу зборки сміття дуже низький, тому "прибирання" середовища виконання додатків Java не віднімає ресурси у самих застосувань. Для створення об'єктів під час виконання виділяється область динамічної пам'яті. Мова Java розрахована на те, що цю область обслуговує збирач сміття, оскільки в мові немає засобів для звільнення пам'яті. Як саме працює збирач сміття, визначається реалізацією Java -машины.


1   2   3   4   5   6   7

скачати

© Усі права захищені
написати до нас